mattermost-mobile/app/components/radio_button/radio_button_group.js
Miguel Alatzar ec0be38217 [MM-17746] Map currentUser from state to props in NotificationSettingsEmail (#3357)
* Map currentUser from state to props

* Fix ref warning

* Use optional chaining operator

* Use componentDidUpdate

* Don't forget to call super
2019-10-27 09:39:15 +02:00

91 lines
2.2 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {View} from 'react-native';
import RadioButton from './radio_button';
export default class RadioButtonGroup extends PureComponent {
static propTypes = {
options: PropTypes.array,
name: PropTypes.string.isRequired,
onSelect: PropTypes.func,
};
static defaultProps = {
options: [],
};
constructor(props) {
super(props);
this.state = {
selected: this.getSelectedValue(props.options),
};
}
componentWillReceiveProps(nextProps) {
if (this.props.options !== nextProps.options) {
this.setState({selected: this.getSelectedValue(nextProps.options)});
}
}
getSelectedValue = (options = []) => {
let selected;
for (const option in options) {
if (option.checked) {
selected = option.value;
break;
}
}
return selected;
}
onChange = (value) => {
const {onSelect} = this.props;
this.setState({
selected: value,
}, () => {
if (onSelect) {
onSelect(value);
}
});
};
render = () => {
let options;
if (this.props.options.length) {
options = this.props.options.map((option) => {
const {
value,
label,
disabled,
...other
} = option;
const {name} = this.props;
return (
<RadioButton
{...other}
name={name}
key={`${name}-${value}`}
value={value}
label={label}
disabled={disabled}
onCheck={this.onChange}
checked={option.checked}
/>
);
});
}
return (
<View>
{options}
</View>
);
};
}