summaryrefslogtreecommitdiffstats
path: root/web/react/components
diff options
context:
space:
mode:
author=Corey Hulen <corey@hulen.com>2016-01-22 09:10:08 -0600
committer=Corey Hulen <corey@hulen.com>2016-01-22 09:10:08 -0600
commitda1d52d546121e6c36cca9dea90c4a3bc540b0b7 (patch)
treee7397daca2d6a9a2143919b79074c2c4e0708fe1 /web/react/components
parent5d14ab71745f85f3aa039df5b84c9f0b63846a2b (diff)
downloadchat-da1d52d546121e6c36cca9dea90c4a3bc540b0b7.tar.gz
chat-da1d52d546121e6c36cca9dea90c4a3bc540b0b7.tar.bz2
chat-da1d52d546121e6c36cca9dea90c4a3bc540b0b7.zip
PLT-7 adding lang selector
Diffstat (limited to 'web/react/components')
-rw-r--r--web/react/components/user_settings/manage_languages.jsx101
-rw-r--r--web/react/components/user_settings/user_settings.jsx1
-rw-r--r--web/react/components/user_settings/user_settings_display.jsx44
3 files changed, 146 insertions, 0 deletions
diff --git a/web/react/components/user_settings/manage_languages.jsx b/web/react/components/user_settings/manage_languages.jsx
new file mode 100644
index 000000000..123165b76
--- /dev/null
+++ b/web/react/components/user_settings/manage_languages.jsx
@@ -0,0 +1,101 @@
+// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import * as Client from '../../utils/client.jsx';
+import * as Utils from '../../utils/utils.jsx';
+
+export default class ManageLanguage extends React.Component {
+ constructor(props) {
+ super(props);
+
+ this.setupInitialState = this.setupInitialState.bind(this);
+ this.setLanguage = this.setLanguage.bind(this);
+ this.changeLanguage = this.changeLanguage.bind(this);
+ this.submitUser = this.submitUser.bind(this);
+ this.state = this.setupInitialState(props);
+ }
+ setupInitialState(props) {
+ var user = props.user;
+ return {
+ languages: Utils.languages(),
+ locale: user.locale
+ };
+ }
+ setLanguage(e) {
+ this.setState({locale: e.target.value});
+ }
+ changeLanguage(e) {
+ e.preventDefault();
+
+ var user = this.props.user;
+ var locale = this.state.locale;
+
+ user.locale = locale;
+
+ this.submitUser(user);
+ }
+ submitUser(user) {
+ Client.updateUser(user,
+ () => {
+ window.location.reload(true);
+ },
+ (err) => {
+ let serverError;
+ if (err.message) {
+ serverError = err.message;
+ } else {
+ serverError = err;
+ }
+ this.setState({serverError});
+ }
+ );
+ }
+ render() {
+ let serverError;
+ if (this.state.serverError) {
+ serverError = <label className='has-error'>{this.state.serverError}</label>;
+ }
+
+ const options = [];
+ this.state.languages.forEach((lang) => {
+ options.push(
+ <option
+ key={lang.value}
+ value={lang.value}
+ >
+ {lang.name}
+ </option>);
+ });
+
+ return (
+ <div key='changeLanguage'>
+ <br/>
+ <label className='control-label'>{'Change interface language'}</label>
+ <div className='padding-top'>
+ <select
+ ref='language'
+ className='form-control'
+ value={this.state.locale}
+ onChange={this.setLanguage}
+ >
+ {options}
+ </select>
+ {serverError}
+ <div className='padding-top'>
+ <a
+ className={'btn btn-sm btn-primary'}
+ href='#'
+ onClick={this.changeLanguage}
+ >
+ {'Set language'}
+ </a>
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
+
+ManageLanguage.propTypes = {
+ user: React.PropTypes.object
+}; \ No newline at end of file
diff --git a/web/react/components/user_settings/user_settings.jsx b/web/react/components/user_settings/user_settings.jsx
index 54d98bbde..9303d874d 100644
--- a/web/react/components/user_settings/user_settings.jsx
+++ b/web/react/components/user_settings/user_settings.jsx
@@ -11,6 +11,7 @@ import DeveloperTab from './user_settings_developer.jsx';
import IntegrationsTab from './user_settings_integrations.jsx';
import DisplayTab from './user_settings_display.jsx';
import AdvancedTab from './user_settings_advanced.jsx';
+import LanguagesTab from './user_settings_language.jsx';
export default class UserSettings extends React.Component {
constructor(props) {
diff --git a/web/react/components/user_settings/user_settings_display.jsx b/web/react/components/user_settings/user_settings_display.jsx
index 1ff0a2913..b12eb2d9c 100644
--- a/web/react/components/user_settings/user_settings_display.jsx
+++ b/web/react/components/user_settings/user_settings_display.jsx
@@ -6,6 +6,7 @@ import SettingItemMin from '../setting_item_min.jsx';
import SettingItemMax from '../setting_item_max.jsx';
import Constants from '../../utils/constants.jsx';
import PreferenceStore from '../../stores/preference_store.jsx';
+import ManageLanguages from './manage_languages.jsx';
import * as Utils from '../../utils/utils.jsx';
function getDisplayStateFromStores() {
@@ -78,6 +79,7 @@ export default class UserSettingsDisplay extends React.Component {
let clockSection;
let nameFormatSection;
let fontSection;
+ let languagesSection;
if (this.props.activeSection === 'clock') {
const clockFormat = [false, false];
@@ -292,6 +294,46 @@ export default class UserSettingsDisplay extends React.Component {
);
}
+ if (this.props.activeSection === 'languages') {
+ var inputs = [];
+ inputs.push(
+ <ManageLanguages
+ user={this.props.user}
+ key='languages-ui'
+ />
+ );
+
+ languagesSection = (
+ <SettingItemMax
+ title={'Language'}
+ width='medium'
+ inputs={inputs}
+ updateSection={(e) => {
+ this.updateSection('');
+ e.preventDefault();
+ }}
+ />
+ );
+ } else {
+ var locale = 'English';
+ Utils.languages().forEach((l) => {
+ if (l.value === this.props.user.locale) {
+ locale = l.name;
+ }
+ });
+
+ languagesSection = (
+ <SettingItemMin
+ title={'Language'}
+ width='medium'
+ describe={locale}
+ updateSection={() => {
+ this.updateSection('languages');
+ }}
+ />
+ );
+ }
+
return (
<div>
<div className='modal-header'>
@@ -324,6 +366,8 @@ export default class UserSettingsDisplay extends React.Component {
<div className='divider-dark'/>
{nameFormatSection}
<div className='divider-dark'/>
+ {languagesSection}
+ <div className='divider-dark'/>
</div>
</div>
);