Initial coomit for AAI-UI(sparky-fe)
[aai/sparky-fe.git] / src / generic-components / titledContainer / TitledContainer.jsx
1 /*
2  * ============LICENSE_START===================================================
3  * SPARKY (AAI UI service)
4  * ============================================================================
5  * Copyright © 2017 AT&T Intellectual Property.
6  * Copyright © 2017 Amdocs
7  * All rights reserved.
8  * ============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=====================================================
21  *
22  * ECOMP and OpenECOMP are trademarks
23  * and service marks of AT&T Intellectual Property.
24  */
25
26 import React, {Component, PropTypes} from 'react';
27 import Button from 'react-bootstrap/lib/Button';
28
29 import i18n from 'utils/i18n/i18n';
30
31 const ICON_CLASS_MAXIMIZE = 'fa fa-chevron-down fa-lg';
32 const ICON_CLASS_MINIMIZE = 'fa fa-chevron-up fa-lg';
33
34 export default class TitledContainer extends Component {
35
36   static propType = {
37     title: PropTypes.string
38   };
39
40   static defaultProps = {
41     title: 'Some Title'
42   };
43
44   constructor(props) {
45     super(props);
46     this.state = {isToggleOn: true};
47
48     this.handleClick = this.handleClick.bind(this);
49   }
50
51   handleClick() {
52     this.setState(prevState => ({
53       isToggleOn: !prevState.isToggleOn
54     }));
55   }
56
57   render() {
58     let {title, children} = this.props;
59     let contentsClass = this.state.isToggleOn ? 'contents' : 'hidden';
60     let className = this.state.isToggleOn
61       ? ICON_CLASS_MINIMIZE
62       : ICON_CLASS_MAXIMIZE;
63     return (
64       <div className='dep-titled-container'>
65         <div className='header'>
66           <span className='header-title'>{i18n(title)}</span>
67           <Button type='submit' className='toggle-visibility-button'
68                   onClick={this.handleClick}>
69             <i className={className} aria-hidden='true'/>
70           </Button>
71         </div>
72         <div className={contentsClass}>
73           {children}
74         </div>
75       </div>
76     );
77   }
78 }