// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import * as Client from '../../utils/client.jsx'; 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 {intlShape, injectIntl, defineMessages, FormattedMessage} from 'mm-intl'; const PreReleaseFeatures = Constants.PRE_RELEASE_FEATURES; const holders = defineMessages({ sendTitle: { id: 'user.settings.advance.sendTitle', defaultMessage: 'Send messages on Ctrl + Enter' }, on: { id: 'user.settings.advance.on', defaultMessage: 'On' }, off: { id: 'user.settings.advance.off', defaultMessage: 'Off' }, preReleaseTitle: { id: 'user.settings.advance.preReleaseTitle', defaultMessage: 'Preview pre-release features' }, feature: { id: 'user.settings.advance.feature', defaultMessage: ' Feature ' }, features: { id: 'user.settings.advance.features', defaultMessage: ' Features ' }, enabled: { id: 'user.settings.advance.enabled', defaultMessage: 'enabled' }, MARKDOWN_PREVIEW: { id: 'user.settings.advance.markdown_preview', defaultMessage: 'Show markdown preview option in message input box' }, EMBED_PREVIEW: { id: 'user.settings.advance.embed_preview', defaultMessage: 'Show preview snippet of links below message' }, EMBED_TOGGLE: { id: 'user.settings.advance.embed_toggle', defaultMessage: 'Show toggle for all embed previews' } }); class AdvancedSettingsDisplay extends React.Component { constructor(props) { super(props); this.updateSection = this.updateSection.bind(this); this.updateSetting = this.updateSetting.bind(this); this.toggleFeature = this.toggleFeature.bind(this); this.saveEnabledFeatures = this.saveEnabledFeatures.bind(this); const preReleaseFeaturesKeys = Object.keys(PreReleaseFeatures); const advancedSettings = PreferenceStore.getCategory(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS); const settings = { send_on_ctrl_enter: PreferenceStore.getPreference( Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter', {value: 'false'} ).value }; let enabledFeatures = 0; advancedSettings.forEach((setting) => { preReleaseFeaturesKeys.forEach((key) => { const feature = PreReleaseFeatures[key]; if (setting.name === Constants.FeatureTogglePrefix + feature.label) { settings[setting.name] = setting.value; if (setting.value === 'true') { enabledFeatures++; } } }); }); this.state = {preReleaseFeatures: PreReleaseFeatures, settings, preReleaseFeaturesKeys, enabledFeatures}; } updateSetting(setting, value) { const settings = this.state.settings; settings[setting] = value; this.setState(settings); } toggleFeature(feature, checked) { const settings = this.state.settings; settings[Constants.FeatureTogglePrefix + feature] = String(checked); let enabledFeatures = 0; Object.keys(this.state.settings).forEach((setting) => { if (setting.lastIndexOf(Constants.FeatureTogglePrefix) === 0 && this.state.settings[setting] === 'true') { enabledFeatures++; } }); this.setState({settings, enabledFeatures}); } saveEnabledFeatures() { const features = []; Object.keys(this.state.settings).forEach((setting) => { if (setting.lastIndexOf(Constants.FeatureTogglePrefix) === 0) { features.push(setting); } }); this.handleSubmit(features); } handleSubmit(settings) { const preferences = []; (Array.isArray(settings) ? settings : [settings]).forEach((setting) => { preferences.push( PreferenceStore.setPreference( Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, setting, String(this.state.settings[setting]) ) ); }); Client.savePreferences(preferences, () => { PreferenceStore.emitChange(); this.updateSection(''); }, (err) => { this.setState({serverError: err.message}); } ); } updateSection(section) { this.props.updateSection(section); } render() { const serverError = this.state.serverError || null; const {formatMessage} = this.props.intl; let ctrlSendSection; if (this.props.activeSection === 'advancedCtrlSend') { const ctrlSendActive = [ this.state.settings.send_on_ctrl_enter === 'true', this.state.settings.send_on_ctrl_enter === 'false' ]; const inputs = [



]; ctrlSendSection = ( this.handleSubmit('send_on_ctrl_enter')} server_error={serverError} updateSection={(e) => { this.updateSection(''); e.preventDefault(); }} /> ); } else { ctrlSendSection = ( this.props.updateSection('advancedCtrlSend')} /> ); } let previewFeaturesSection; let previewFeaturesSectionDivider; if (this.state.preReleaseFeaturesKeys.length > 0) { previewFeaturesSectionDivider = (
); if (this.props.activeSection === 'advancedPreviewFeatures') { const inputs = []; this.state.preReleaseFeaturesKeys.forEach((key) => { const feature = this.state.preReleaseFeatures[key]; inputs.push(
); }); inputs.push(

); previewFeaturesSection = ( { this.updateSection(''); e.preventDefault(); }} /> ); } else { previewFeaturesSection = ( this.props.updateSection('advancedPreviewFeatures')} /> ); } } return (

{ctrlSendSection} {previewFeaturesSectionDivider} {previewFeaturesSection}
); } } AdvancedSettingsDisplay.propTypes = { intl: intlShape.isRequired, user: React.PropTypes.object, updateSection: React.PropTypes.func, updateTab: React.PropTypes.func, activeSection: React.PropTypes.string, closeModal: React.PropTypes.func.isRequired, collapseModal: React.PropTypes.func.isRequired }; export default injectIntl(AdvancedSettingsDisplay);