13a1895e4afe907c2ce1d57946cd0918c351cb96
[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
40 class SelectInput extends Component {
41                 
42                 inputValue = [];
43                 
44                 render() {
45                                 let {label, value, ...other} = this.props;
46                                 return (
47                                                 <div className='validation-input-wrapper dropdown-multi-select'>
48                                                                 <div className='form-group'>
49                                                                                 {label && <label className='control-label'>{label}</label>}
50                                                                                 <Select ref='_myInput'
51                                                                                         onChange={value => this.onSelectChanged(value)} {...other}
52                                                                                         value={value}/>
53                                                                 </div>
54                                                 </div>
55                                 );
56                 }
57                 
58                 getValue() {
59                                 return this.inputValue && this.inputValue.length ? this.inputValue : '';
60                 }
61                 
62                 onSelectChanged(value) {
63                                 this.props.onMultiSelectChanged(value);
64                 }
65                 
66                 componentDidMount() {
67                                 let {value} = this.props;
68                                 this.inputValue = value ? value : [];
69                 }
70                 
71                 componentDidUpdate() {
72                                 if (this.inputValue !== this.props.value) {
73                                                 this.inputValue = this.props.value;
74                                 }
75                 }
76 }
77
78 export default SelectInput;