aboutsummaryrefslogtreecommitdiff
path: root/app/features/settings/components/AlwaysOnTopWindowToggle.js
blob: dd77e60c523e158b968196c2972ca5e5a613e7a9 (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
// @flow

import React, { Component } from 'react';
import { connect } from 'react-redux';
import type { Dispatch } from 'redux';

import { setWindowAlwaysOnTop } from '../actions';

import ToggleWithLabel from './ToggleWithLabel';

type Props = {

    /**
     * Redux dispatch.
     */
    dispatch: Dispatch<*>;

    /**
     * Window Always on Top value in (redux) state.
     */
    _alwaysOnTopWindowEnabled: boolean;
};

/**
 * Window always open on top placed in Settings Drawer.
 */
class AlwaysOnTopWindowToggle extends Component<Props> {
    /**
     * Initializes a new {@code AlwaysOnTopWindowToggle} instance.
     *
     * @inheritdoc
     */
    constructor(props) {
        super(props);

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

    /**
     * Render function of component.
     *
     * @returns {ReactElement}
     */
    render() {
        return (
            <ToggleWithLabel
                isDefaultChecked = { this.props._alwaysOnTopWindowEnabled }
                label = 'Always on Top Window'
                onChange = { this._onAlwaysOnTopWindowToggleChange }
                value = { this.props._alwaysOnTopWindowEnabled } />
        );
    }

    _onAlwaysOnTopWindowToggleChange: (*) => void;

    /**
     * Toggles alwaysOnTopWindowEnabled.
     *
     * @returns {void}
     */
    _onAlwaysOnTopWindowToggleChange() {
        const { _alwaysOnTopWindowEnabled } = this.props;
        const newState = !_alwaysOnTopWindowEnabled;

        this.props.dispatch(setWindowAlwaysOnTop(newState));
    }
}

/**
 * Maps (parts of) the redux state to the React props.
 *
 * @param {Object} state - The redux state.
 * @returns {{
 *     _alwaysOnTopWindowEnabled: boolean,
 * }}
 */
function _mapStateToProps(state: Object) {
    return {
        _alwaysOnTopWindowEnabled: state.settings.alwaysOnTopWindowEnabled
    };
}

export default connect(_mapStateToProps)(AlwaysOnTopWindowToggle);