blob: 3dcba86def2f527a705b4de2b09b38bb183f9326 [file] [log] [blame]
/*!
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
import React from 'react';
import ReactDOM from 'react-dom';
import classNames from 'classnames';
import Checkbox from 'react-bootstrap/lib/Checkbox.js';
import { Radio } from 'onap-ui-react';
import FormGroup from 'react-bootstrap/lib/FormGroup.js';
import FormControl from 'react-bootstrap/lib/FormControl.js';
class InputWrapper extends React.Component {
state = {
value: this.props.value,
checked: this.props.checked,
selectedValues: []
};
render() {
const {
label,
hasError,
validations = {},
isReadOnlyMode,
value,
onBlur,
onKeyDown,
type,
disabled,
checked,
name
} = this.props;
const { groupClassName, ...inputProps } = this.props;
return (
<FormGroup
className={classNames('form-group', [groupClassName], {
required: validations.required,
'has-error': hasError
})}>
{label &&
(type !== 'checkbox' && type !== 'radio') && (
<label className="control-label">{label}</label>
)}
{(type === 'text' || type === 'number') && (
<FormControl
bsClass={'form-control input-options-other'}
onChange={e => this.onChange(e)}
disabled={isReadOnlyMode || Boolean(disabled)}
onBlur={onBlur}
onKeyDown={onKeyDown}
value={value || ''}
ref={input => (this.inputWrapper = input)}
type={type}
data-test-id={this.props['data-test-id']}
/>
)}
{type === 'textarea' && (
<FormControl
className="form-control input-options-other"
disabled={isReadOnlyMode || Boolean(disabled)}
value={value || ''}
onBlur={onBlur}
onKeyDown={onKeyDown}
componentClass={type}
onChange={e => this.onChange(e)}
data-test-id={this.props['data-test-id']}
/>
)}
{type === 'checkbox' && (
<Checkbox
className={classNames({
required: validations.required,
'has-error': hasError
})}
onChange={e => this.onChangeCheckBox(e)}
disabled={isReadOnlyMode || Boolean(disabled)}
checked={value}
data-test-id={this.props['data-test-id']}>
{label}
</Checkbox>
)}
{type === 'radio' && (
<Radio
name={name}
checked={checked}
disabled={isReadOnlyMode || Boolean(disabled)}
value={value}
ref={input => (this.inputWrapper = input)}
onChange={isChecked => this.onChangeRadio(isChecked)}
label={label}
data-test-id={this.props['data-test-id']}
/>
)}
{type === 'select' && (
<FormControl
onClick={e => this.optionSelect(e)}
componentClass={type}
name={name}
{...inputProps}
data-test-id={this.props['data-test-id']}
/>
)}
</FormGroup>
);
}
getValue() {
return this.props.type !== 'select'
? this.state.value
: this.state.selectedValues;
}
getChecked() {
return this.state.checked;
}
optionSelect(e) {
let selectedValues = [];
if (e.target.value) {
selectedValues.push(e.target.value);
}
this.setState({
selectedValues
});
}
onChange(e) {
let { onChange } = this.props;
this.setState({
value: e.target.value
});
onChange(e.target.value);
}
onChangeCheckBox(e) {
let { onChange } = this.props;
this.setState({
checked: e.target.checked
});
onChange(e.target.checked);
}
onChangeRadio(isChecked) {
let { onChange } = this.props;
this.setState({
checked: isChecked
});
onChange(this.state.value);
}
focus() {
ReactDOM.findDOMNode(this.inputWrapper).focus();
}
}
export default InputWrapper;