From 78314c7d4d1417fd42ab48cbe41d360f80915453 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Sat, 30 Jan 2016 18:10:04 -0300 Subject: PLT-7: Refactoring frontend (chunk 6) - User settings --- .../user_settings/custom_theme_chooser.jsx | 104 +++++++- .../user_settings/import_theme_modal.jsx | 44 +++- .../user_settings/manage_incoming_hooks.jsx | 49 +++- .../components/user_settings/manage_languages.jsx | 14 +- .../user_settings/manage_outgoing_hooks.jsx | 131 +++++++++-- .../user_settings/user_settings_advanced.jsx | 101 ++++++-- .../user_settings/user_settings_appearance.jsx | 40 +++- .../user_settings/user_settings_developer.jsx | 42 +++- .../user_settings/user_settings_display.jsx | 140 +++++++++-- .../user_settings/user_settings_general.jsx | 262 +++++++++++++++++---- .../user_settings/user_settings_integrations.jsx | 51 +++- .../user_settings/user_settings_modal.jsx | 84 ++++++- .../user_settings/user_settings_notifications.jsx | 226 +++++++++++++++--- .../user_settings/user_settings_security.jsx | 153 +++++++++--- 14 files changed, 1207 insertions(+), 234 deletions(-) (limited to 'web/react/components/user_settings') diff --git a/web/react/components/user_settings/custom_theme_chooser.jsx b/web/react/components/user_settings/custom_theme_chooser.jsx index 8ec3863f3..9116dd938 100644 --- a/web/react/components/user_settings/custom_theme_chooser.jsx +++ b/web/react/components/user_settings/custom_theme_chooser.jsx @@ -6,7 +6,96 @@ import Constants from '../../utils/constants.jsx'; const OverlayTrigger = ReactBootstrap.OverlayTrigger; const Popover = ReactBootstrap.Popover; -export default class CustomThemeChooser extends React.Component { +import {intlShape, injectIntl, defineMessages, FormattedMessage} from 'mm-intl'; + +const messages = defineMessages({ + sidebarBg: { + id: 'user.settings.custom_theme.sidebarBg', + defaultMessage: 'Sidebar BG' + }, + sidebarText: { + id: 'user.settings.custom_theme.sidebarText', + defaultMessage: 'Sidebar Text' + }, + sidebarHeaderBg: { + id: 'user.settings.custom_theme.sidebarHeaderBg', + defaultMessage: 'Sidebar Header BG' + }, + sidebarHeaderTextColor: { + id: 'user.settings.custom_theme.sidebarHeaderTextColor', + defaultMessage: 'Sidebar Header Text' + }, + sidebarUnreadText: { + id: 'user.settings.custom_theme.sidebarUnreadText', + defaultMessage: 'Sidebar Unread Text' + }, + sidebarTextHoverBg: { + id: 'user.settings.custom_theme.sidebarTextHoverBg', + defaultMessage: 'Sidebar Text Hover BG' + }, + sidebarTextActiveBorder: { + id: 'user.settings.custom_theme.sidebarTextActiveBorder', + defaultMessage: 'Sidebar Text Active Border' + }, + sidebarTextActiveColor: { + id: 'user.settings.custom_theme.sidebarTextActiveColor', + defaultMessage: 'Sidebar Text Active Color' + }, + onlineIndicator: { + id: 'user.settings.custom_theme.onlineIndicator', + defaultMessage: 'Online Indicator' + }, + awayIndicator: { + id: 'user.settings.custom_theme.awayIndicator', + defaultMessage: 'Away Indicator' + }, + mentionBj: { + id: 'user.settings.custom_theme.mentionBj', + defaultMessage: 'Mention Jewel BG' + }, + mentionColor: { + id: 'user.settings.custom_theme.mentionColor', + defaultMessage: 'Mention Jewel Text' + }, + centerChannelBg: { + id: 'user.settings.custom_theme.centerChannelBg', + defaultMessage: 'Center Channel BG' + }, + centerChannelColor: { + id: 'user.settings.custom_theme.centerChannelColor', + defaultMessage: 'Center Channel Text' + }, + newMessageSeparator: { + id: 'user.settings.custom_theme.newMessageSeparator', + defaultMessage: 'New Message Separator' + }, + linkColor: { + id: 'user.settings.custom_theme.linkColor', + defaultMessage: 'Link Color' + }, + buttonBg: { + id: 'user.settings.custom_theme.buttonBg', + defaultMessage: 'Button BG' + }, + buttonColor: { + id: 'user.settings.custom_theme.buttonColor', + defaultMessage: 'Button Text' + }, + mentionHighlightBg: { + id: 'user.settings.custom_theme.mentionHighlightBg', + defaultMessage: 'Mention Highlight BG' + }, + mentionHighlightLink: { + id: 'user.settings.custom_theme.mentionHighlightLink', + defaultMessage: 'Mention Highlight Link' + }, + codeTheme: { + id: 'user.settings.custom_theme.codeTheme', + defaultMessage: 'Code Theme' + } +}); + +class CustomThemeChooser extends React.Component { constructor(props) { super(props); @@ -65,6 +154,7 @@ export default class CustomThemeChooser extends React.Component { this.props.updateTheme(theme); } render() { + const {formatMessage} = this.props.intl; const theme = this.props.theme; const elements = []; @@ -102,7 +192,7 @@ export default class CustomThemeChooser extends React.Component { className='col-sm-4 form-group' key={'custom-theme-key' + index} > - +
- +
this.setState({show: false})} > - {'Import Slack Theme'} + + +

- {'To import a theme, go to a Slack team and look for “Preferences -> Sidebar Theme”. Open the custom theme option, copy the theme color values and paste them here:'} +

@@ -166,7 +184,10 @@ export default class ImportThemeModal extends React.Component { className='btn btn-default' onClick={() => this.setState({show: false})} > - {'Cancel'} + @@ -183,3 +207,9 @@ export default class ImportThemeModal extends React.Component { ); } } + +ImportThemeModal.propTypes = { + intl: intlShape.isRequired +}; + +export default injectIntl(ImportThemeModal); \ No newline at end of file diff --git a/web/react/components/user_settings/manage_incoming_hooks.jsx b/web/react/components/user_settings/manage_incoming_hooks.jsx index 1506e3c98..c6532b018 100644 --- a/web/react/components/user_settings/manage_incoming_hooks.jsx +++ b/web/react/components/user_settings/manage_incoming_hooks.jsx @@ -7,6 +7,8 @@ import Constants from '../../utils/constants.jsx'; import ChannelStore from '../../stores/channel_store.jsx'; import LoadingScreen from '../loading_screen.jsx'; +import {FormattedMessage, FormattedHTMLMessage} from 'mm-intl'; + export default class ManageIncomingHooks extends React.Component { constructor() { super(); @@ -126,7 +128,12 @@ export default class ManageIncomingHooks extends React.Component { {Utils.getWindowLocationOrigin() + '/hooks/' + hook.id}
- {'Channel: '}{c.display_name} + + + {c.display_name}
0) { displayHooks = hooks; } else { - displayHooks =
{'None'}
; + displayHooks = ( +
+ +
+ ); } const existingHooks = (
- +
{displayHooks} @@ -162,15 +181,16 @@ export default class ManageIncomingHooks extends React.Component { return (
- {'Create webhook URLs for use in external integrations. Please see '} - - {'http://mattermost.org/webhooks'} - - {' to learn more.'} -
+ +
- {'Set language'} +
diff --git a/web/react/components/user_settings/manage_outgoing_hooks.jsx b/web/react/components/user_settings/manage_outgoing_hooks.jsx index 17acf0f10..3f88e9f41 100644 --- a/web/react/components/user_settings/manage_outgoing_hooks.jsx +++ b/web/react/components/user_settings/manage_outgoing_hooks.jsx @@ -8,7 +8,20 @@ import ChannelStore from '../../stores/channel_store.jsx'; import * as Client from '../../utils/client.jsx'; import Constants from '../../utils/constants.jsx'; -export default class ManageOutgoingHooks extends React.Component { +import {intlShape, injectIntl, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'mm-intl'; + +const holders = defineMessages({ + optional: { + id: 'user.settings.hooks_out.optional', + defaultMessage: 'Optional if channel selected' + }, + callbackHolder: { + id: 'user.settings.hooks_out.callbackHolder', + defaultMessage: 'Each URL must start with http:// or https://' + } +}); + +class ManageOutgoingHooks extends React.Component { constructor() { super(); @@ -140,7 +153,10 @@ export default class ManageOutgoingHooks extends React.Component { key='select-channel' value='' > - {'--- Select a channel ---'} + ); @@ -169,7 +185,12 @@ export default class ManageOutgoingHooks extends React.Component { if (c) { channelDiv = (
- {'Channel: '}{c.display_name} + + + {c.display_name}
); } @@ -178,7 +199,12 @@ export default class ManageOutgoingHooks extends React.Component { if (hook.trigger_words && hook.trigger_words.length !== 0) { triggerDiv = (
- {'Trigger Words: '}{hook.trigger_words.join(', ')} + + + {hook.trigger_words.join(', ')}
); } @@ -202,7 +228,10 @@ export default class ManageOutgoingHooks extends React.Component { href='#' onClick={this.regenToken.bind(this, hook.id)} > - {'Regen Token'} + 0) { displayHooks = hooks; } else { - displayHooks =
{'None'}
; + displayHooks = ( +
+ +
+ ); } const existingHooks = (
- +
{displayHooks} @@ -240,19 +281,25 @@ export default class ManageOutgoingHooks extends React.Component { return (
- {'Create webhooks to send new message events to an external integration. Please see '} - - {'http://mattermost.org/webhooks'} - - {' to learn more.'} -
+ +
- +
+
+
+
-
{'Comma separated words to trigger on'}
- +