/*!
* 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 PropTypes from 'prop-types';
import ReactDOM from 'react-dom';
import i18n from 'nfvo-utils/i18n/i18n.js';
import classNames from 'classnames';
import Select from 'nfvo-components/input/SelectInput.jsx';
import Overlay from 'react-bootstrap/lib/Overlay.js';
import Tooltip from 'react-bootstrap/lib/Tooltip.js';
export const other = { OTHER: 'Other' };
class InputOptions extends React.Component {
static propTypes = {
values: PropTypes.arrayOf(
PropTypes.shape({
enum: PropTypes.string,
title: PropTypes.string
})
),
isEnabledOther: PropTypes.bool,
label: PropTypes.string,
selectedValue: PropTypes.string,
multiSelectedEnum: PropTypes.oneOfType([
PropTypes.string,
PropTypes.array
]),
selectedEnum: PropTypes.string,
otherValue: PropTypes.string,
overlayPos: PropTypes.string,
onEnumChange: PropTypes.func,
onOtherChange: PropTypes.func,
onBlur: PropTypes.func,
isRequired: PropTypes.bool,
isMultiSelect: PropTypes.bool,
isValid: PropTypes.bool,
disabled: PropTypes.bool
};
state = {
otherInputDisabled: !this.props.otherValue
};
oldProps = {
selectedEnum: '',
otherValue: '',
multiSelectedEnum: []
};
render() {
let {
label,
isRequired,
values,
otherValue,
onOtherChange,
isMultiSelect,
onBlur,
multiSelectedEnum,
selectedEnum,
isValid,
children,
isReadOnlyMode
} = this.props;
const dataTestId = this.props['data-test-id']
? { 'data-test-id': this.props['data-test-id'] }
: {};
let currentMultiSelectedEnum = [];
let currentSelectedEnum = '';
let otherInputDisabled =
(isMultiSelect &&
(multiSelectedEnum === undefined ||
multiSelectedEnum.length === 0 ||
multiSelectedEnum[0] !== other.OTHER)) ||
(!isMultiSelect &&
(selectedEnum === undefined || selectedEnum !== other.OTHER));
if (isMultiSelect) {
currentMultiSelectedEnum = multiSelectedEnum;
if (!otherInputDisabled) {
currentSelectedEnum = multiSelectedEnum
? multiSelectedEnum.toString()
: undefined;
}
} else if (selectedEnum) {
currentSelectedEnum = selectedEnum;
}
if (!onBlur) {
onBlur = () => {};
}
return (