557f4cb81ee34e255d613307a5cef446b6fe78c7
[aai/sparky-fe.git] / src / generic-components / input / SelectInput.jsx
1 /*
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23 /**
24         * The HTML structure here is aligned with bootstrap HTML structure for form
25         * elements. In this way we have proper styling and it is aligned with other
26         * form elements on screen.
27         *
28         * Select and MultiSelect options:
29         *
30         * label - the label to be shown which paired with the input
31         *
32         * all other "react-select" props - as documented on
33         * http://jedwatson.github.io/react-select/
34         * or
35         * https://github.com/JedWatson/react-select
36         */
37 import React, {Component} from 'react';
38 import Select from 'react-select';
39 import 'react-select/dist/react-select.css';
40
41 class SelectInput extends Component {
42
43                 inputValue = [];
44
45                 render() {
46                                 let {label, value, ...other} = this.props;
47                                 return (
48                                                 <div className='validation-input-wrapper dropdown-multi-select'>
49                                                                 <div className='form-group'>
50                                                                                 {label && <label className='control-label'>{label}</label>}
51                                                                                 <Select ref='_myInput'
52                                                                                         onChange={value => this.onSelectChanged(value)} {...other}
53                                                                                         value={value}/>
54                                                                 </div>
55                                                 </div>
56                                 );
57                 }
58
59                 getValue() {
60                                 return this.inputValue && this.inputValue.length ? this.inputValue : '';
61                 }
62
63                 onSelectChanged(value) {
64                                 this.props.onMultiSelectChanged(value);
65                 }
66
67                 componentDidMount() {
68                                 let {value} = this.props;
69                                 this.inputValue = value ? value : [];
70                 }
71
72                 componentDidUpdate() {
73                                 if (this.inputValue !== this.props.value) {
74                                                 this.inputValue = this.props.value;
75                                 }
76                 }
77 }
78
79 export default SelectInput;