summaryrefslogtreecommitdiffstats
path: root/webapp/components/admin_console/boolean_setting.jsx
blob: 45c23c8690243f1a87569f55dfe3b23945ffd1e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import PropTypes from 'prop-types';

// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.

import React from 'react';

import Setting from './setting.jsx';

import {FormattedMessage} from 'react-intl';

import * as Utils from 'utils/utils.jsx';

export default class BooleanSetting extends React.Component {
    constructor(props) {
        super(props);

        this.handleChange = this.handleChange.bind(this);
    }

    handleChange(e) {
        this.props.onChange(this.props.id, e.target.value === 'true');
    }

    render() {
        let helpText;
        if (this.props.disabled && this.props.disabledText) {
            helpText = (
                <div>
                    <span className='admin-console__disabled-text'>
                        {this.props.disabledText}
                    </span>
                    {this.props.helpText}
                </div>
            );
        } else {
            helpText = this.props.helpText;
        }

        return (
            <Setting
                label={this.props.label}
                helpText={helpText}
            >
                <label className='radio-inline'>
                    <input
                        type='radio'
                        value='true'
                        id={Utils.createSafeId(this.props.id) + 'true'}
                        name={this.props.id}
                        checked={this.props.value}
                        onChange={this.handleChange}
                        disabled={this.props.disabled}
                    />
                    {this.props.trueText}
                </label>
                <label className='radio-inline'>
                    <input
                        type='radio'
                        value='false'
                        id={Utils.createSafeId(this.props.id) + 'false'}
                        name={this.props.id}
                        checked={!this.props.value}
                        onChange={this.handleChange}
                        disabled={this.props.disabled}
                    />
                    {this.props.falseText}
                </label>
            </Setting>
        );
    }
}
BooleanSetting.defaultProps = {
    trueText: (
        <FormattedMessage
            id='admin.true'
            defaultMessage='true'
        />
    ),
    falseText: (
        <FormattedMessage
            id='admin.false'
            defaultMessage='false'
        />
    ),
    disabled: false
};

BooleanSetting.propTypes = {
    id: PropTypes.string.isRequired,
    label: PropTypes.node.isRequired,
    value: PropTypes.bool.isRequired,
    onChange: PropTypes.func.isRequired,
    trueText: PropTypes.node,
    falseText: PropTypes.node,
    disabled: PropTypes.bool.isRequired,
    disabledText: PropTypes.node,
    helpText: PropTypes.node.isRequired
};