From 34beaa569bfb32f1607375f1d5a22859322060d2 Mon Sep 17 00:00:00 2001 From: enahum Date: Tue, 24 May 2016 09:36:27 -0300 Subject: PLT-1800 Load server side locale from the config.json (#3076) * PLT-1800 Load server side locale from the config.json * Add support for locales with country specifics --- webapp/components/admin_console/admin_sidebar.jsx | 9 ++ .../admin_console/localization_settings.jsx | 145 +++++++++++++++++++++ .../admin_console/multiselect_settings.jsx | 80 ++++++++++++ 3 files changed, 234 insertions(+) create mode 100644 webapp/components/admin_console/localization_settings.jsx create mode 100644 webapp/components/admin_console/multiselect_settings.jsx (limited to 'webapp/components/admin_console') diff --git a/webapp/components/admin_console/admin_sidebar.jsx b/webapp/components/admin_console/admin_sidebar.jsx index cdb7e29d5..9548a7763 100644 --- a/webapp/components/admin_console/admin_sidebar.jsx +++ b/webapp/components/admin_console/admin_sidebar.jsx @@ -292,6 +292,15 @@ export default class AdminSidebar extends React.Component { /> } /> + + } + /> { + return {value: locales[l].value, text: locales[l].name}; + }) + }); + } + + canSave() { + return this.state.availableLocales.join(',').indexOf(this.state.defaultClientLocale) !== -1; + } + + getConfigFromState(config) { + config.LocalizationSettings.DefaultServerLocale = this.state.defaultServerLocale; + config.LocalizationSettings.DefaultClientLocale = this.state.defaultClientLocale; + config.LocalizationSettings.AvailableLocales = this.state.availableLocales.join(','); + + return config; + } + + renderTitle() { + return ( +

+ +

+ ); + } + + renderSettings() { + return ( + + } + > + + } + value={this.state.defaultServerLocale} + onChange={this.handleChange} + helpText={ + + } + /> + + } + value={this.state.defaultClientLocale} + onChange={this.handleChange} + helpText={ + + } + /> + + } + selected={this.state.availableLocales} + mustBePresent={this.state.defaultClientLocale} + onChange={this.handleChange} + helpText={ + + } + noResultText={ + + } + errorText={ + + } + notPresent={ + + } + /> + + ); + } +} \ No newline at end of file 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 ( + + + + + ); + } +} + +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 -- cgit v1.2.3-1-g7c22