blob: 947570fa2962e232345b1b0c58a9151f8f262f40 [file] [log] [blame]
AviZi280f8012017-06-09 02:39:56 +03001/*!
2 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
15 */
Michael Landoefa037d2017-02-19 12:57:33 +020016import React from 'react';
talig8e9c0652017-12-20 14:30:43 +020017import PropTypes from 'prop-types';
Michael Landoefa037d2017-02-19 12:57:33 +020018
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020019export default class ToggleInput extends React.Component {
20 static propTypes = {
21 label: PropTypes.node,
22 value: PropTypes.bool,
23 onChange: PropTypes.func,
24 disabled: PropTypes.bool
25 };
Michael Landoefa037d2017-02-19 12:57:33 +020026
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020027 static defaultProps = {
28 value: false,
29 label: ''
30 };
Michael Landoefa037d2017-02-19 12:57:33 +020031
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020032 state = {
33 value: this.props.value
34 };
Michael Landoefa037d2017-02-19 12:57:33 +020035
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020036 status() {
37 return this.state.value ? 'on' : 'off';
38 }
Michael Landoefa037d2017-02-19 12:57:33 +020039
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020040 render() {
41 let { label, disabled } = this.props;
42 let checked = this.status() === 'on';
43 //TODO check onclick
44 return (
45 <div
46 className="toggle-input-wrapper form-group"
47 onClick={!disabled && this.click}>
48 <div className="toggle-input-label">{label}</div>
49 <div className="toggle-switch">
50 <input
51 className="toggle toggle-round-flat"
52 type="checkbox"
53 checked={checked}
54 readOnly
55 />
56 <label />
57 </div>
58 </div>
59 );
60 }
Michael Landoefa037d2017-02-19 12:57:33 +020061
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020062 click = () => {
63 let value = !this.state.value;
64 this.setState({ value });
Michael Landoefa037d2017-02-19 12:57:33 +020065
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020066 let onChange = this.props.onChange;
67 if (onChange) {
68 onChange(value);
69 }
70 };
Michael Landoefa037d2017-02-19 12:57:33 +020071
Einav Weiss Keidar7fdf7332018-03-20 14:45:40 +020072 getValue() {
73 return this.state.value;
74 }
Michael Landoefa037d2017-02-19 12:57:33 +020075}