diff options
author | enahum <nahumhbl@gmail.com> | 2016-06-02 16:47:26 -0300 |
---|---|---|
committer | Corey Hulen <corey@hulen.com> | 2016-06-02 12:47:26 -0700 |
commit | 159953050a9c4fb700bbde79042ead4843b0bea5 (patch) | |
tree | 747a022c5cf579599402447b5e5d0f51dfee9f76 /webapp/components/admin_console/multiselect_settings.jsx | |
parent | e44b8ec6d57fc55230a5c97ea105b7fd9ef59aca (diff) | |
download | chat-159953050a9c4fb700bbde79042ead4843b0bea5.tar.gz chat-159953050a9c4fb700bbde79042ead4843b0bea5.tar.bz2 chat-159953050a9c4fb700bbde79042ead4843b0bea5.zip |
PLT-1800 Load server side locale from the config.json (#3202)
* PLT-1800 Load server side locale from the config.json
* Add support for locales with country specifics
* Fix localization on served locale file as plain/text
* Remove github.com/cloudfoundry/jibber_jabber as vendor dependency
* Fix get locale on login_controller
Diffstat (limited to 'webapp/components/admin_console/multiselect_settings.jsx')
-rw-r--r-- | webapp/components/admin_console/multiselect_settings.jsx | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/webapp/components/admin_console/multiselect_settings.jsx b/webapp/components/admin_console/multiselect_settings.jsx new file mode 100644 index 000000000..deba983de --- /dev/null +++ b/webapp/components/admin_console/multiselect_settings.jsx @@ -0,0 +1,80 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. +import React from 'react'; +import ReactSelect from 'react-select'; + +import Setting from './setting.jsx'; +import FormError from 'components/form_error.jsx'; + +export default class MultiSelectSetting extends React.Component { + constructor(props) { + super(props); + + this.handleChange = this.handleChange.bind(this); + this.state = {error: false}; + } + + handleChange(newValue) { + const values = newValue.map((n) => { + return n.value; + }); + + if (!newValue || newValue.length === 0) { + this.setState({error: this.props.errorText}); + } else if (this.props.mustBePresent && values.join(',').indexOf(this.props.mustBePresent) === -1) { + this.setState({error: this.props.notPresent}); + } else { + this.props.onChange(this.props.id, values); + this.setState({error: false}); + } + } + + componentWillReceiveProps(newProps) { + if (newProps.mustBePresent && newProps.selected.join(',').indexOf(newProps.mustBePresent) === -1) { + this.setState({error: this.props.notPresent}); + } else { + this.setState({error: false}); + } + } + + render() { + return ( + <Setting + label={this.props.label} + inputId={this.props.id} + helpText={this.props.helpText} + > + <ReactSelect + id={this.props.id} + multi={true} + labelKey='text' + options={this.props.values} + joinValues={true} + disabled={this.props.disabled} + noResultsText={this.props.noResultText} + onChange={this.handleChange} + value={this.props.selected} + /> + <FormError error={this.state.error}/> + </Setting> + ); + } +} + +MultiSelectSetting.defaultProps = { + disabled: false +}; + +MultiSelectSetting.propTypes = { + id: React.PropTypes.string.isRequired, + values: React.PropTypes.array.isRequired, + label: React.PropTypes.node.isRequired, + selected: React.PropTypes.array.isRequired, + mustBePresent: React.PropTypes.string, + onChange: React.PropTypes.func.isRequired, + disabled: React.PropTypes.bool, + helpText: React.PropTypes.node, + noResultText: React.PropTypes.node, + errorText: React.PropTypes.node, + notPresent: React.PropTypes.node +};
\ No newline at end of file |