From cc4d23e27669ce85285b514a0606b4ea8c27d6e7 Mon Sep 17 00:00:00 2001 From: David Lu Date: Sat, 4 Jun 2016 23:23:07 -0700 Subject: added ctrlSend checking (#3196) --- webapp/components/create_post.jsx | 2 +- webapp/components/edit_channel_header_modal.jsx | 29 ++++++++++++++++++-- webapp/components/edit_channel_purpose_modal.jsx | 35 +++++++++++++++++++++--- webapp/components/edit_post_modal.jsx | 4 +++ webapp/stores/preference_store.jsx | 2 ++ 5 files changed, 65 insertions(+), 7 deletions(-) (limited to 'webapp') diff --git a/webapp/components/create_post.jsx b/webapp/components/create_post.jsx index 5904d2f29..4c14b03de 100644 --- a/webapp/components/create_post.jsx +++ b/webapp/components/create_post.jsx @@ -84,7 +84,7 @@ class CreatePost extends React.Component { previews: draft.previews, submitting: false, initialText: draft.messageText, - ctrlSend: false, + ctrlSend: PreferenceStore.getBool(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'), centerTextbox: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.CHANNEL_DISPLAY_MODE, Preferences.CHANNEL_DISPLAY_MODE_DEFAULT) === Preferences.CHANNEL_DISPLAY_MODE_CENTERED, showTutorialTip: false, showPostDeletedModal: false diff --git a/webapp/components/edit_channel_header_modal.jsx b/webapp/components/edit_channel_header_modal.jsx index 6a7cccebb..ea411357d 100644 --- a/webapp/components/edit_channel_header_modal.jsx +++ b/webapp/components/edit_channel_header_modal.jsx @@ -6,6 +6,7 @@ import AppDispatcher from '../dispatcher/app_dispatcher.jsx'; import Client from 'utils/web_client.jsx'; import Constants from 'utils/constants.jsx'; import * as Utils from 'utils/utils.jsx'; +import PreferenceStore from 'stores/preference_store.jsx'; import {intlShape, injectIntl, defineMessages, FormattedMessage} from 'react-intl'; @@ -26,9 +27,12 @@ class EditChannelHeaderModal extends React.Component { this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); - + this.handleKeyDown = this.handleKeyDown.bind(this); this.onShow = this.onShow.bind(this); this.onHide = this.onHide.bind(this); + this.onPreferenceChange = this.onPreferenceChange.bind(this); + + this.ctrlSend = PreferenceStore.getBool(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'); this.state = { header: props.channel.header, @@ -40,10 +44,16 @@ class EditChannelHeaderModal extends React.Component { if (this.props.show) { this.onShow(); } + + PreferenceStore.addChangeListener(this.onPreferenceChange); + } + + componentWillUnmount() { + PreferenceStore.removeChangeListener(this.onPreferenceChange); } componentWillReceiveProps(nextProps) { - if (this.props.channel.header !== nextProps.channel.header) { + if (this.props !== nextProps) { this.setState({ header: nextProps.channel.header }); @@ -62,6 +72,10 @@ class EditChannelHeaderModal extends React.Component { }); } + onPreferenceChange() { + this.ctrlSend = PreferenceStore.getBool(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'); + } + handleSubmit() { Client.updateChannelHeader( this.props.channel.id, @@ -99,6 +113,16 @@ class EditChannelHeaderModal extends React.Component { this.props.onHide(); } + handleKeyDown(e) { + if (this.ctrlSend && e.keyCode === Constants.KeyCodes.ENTER && e.ctrlKey) { + e.preventDefault(); + this.handleSubmit(e); + } else if (!this.ctrlSend && e.keyCode === Constants.KeyCodes.ENTER && !e.shiftKey && !e.altKey) { + e.preventDefault(); + this.handleSubmit(e); + } + } + render() { var serverError = null; if (this.state.serverError) { @@ -136,6 +160,7 @@ class EditChannelHeaderModal extends React.Component { maxLength='1024' value={this.state.header} onChange={this.handleChange} + onKeyDown={this.handleKeyDown} /> {serverError} diff --git a/webapp/components/edit_channel_purpose_modal.jsx b/webapp/components/edit_channel_purpose_modal.jsx index a4779d022..0d5fb90ac 100644 --- a/webapp/components/edit_channel_purpose_modal.jsx +++ b/webapp/components/edit_channel_purpose_modal.jsx @@ -6,9 +6,8 @@ import ReactDOM from 'react-dom'; import * as AsyncClient from 'utils/async_client.jsx'; import Client from 'utils/web_client.jsx'; import Constants from 'utils/constants.jsx'; - import {intlShape, injectIntl, defineMessages, FormattedMessage} from 'react-intl'; - +import PreferenceStore from 'stores/preference_store.jsx'; import {Modal} from 'react-bootstrap'; const holders = defineMessages({ @@ -26,8 +25,22 @@ export default class EditChannelPurposeModal extends React.Component { this.handleHide = this.handleHide.bind(this); this.handleSave = this.handleSave.bind(this); + this.handleKeyDown = this.handleKeyDown.bind(this); + this.onPreferenceChange = this.onPreferenceChange.bind(this); + + this.ctrlSend = PreferenceStore.getBool(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'); + + this.state = { + serverError: '' + }; + } + + componentDidMount() { + PreferenceStore.addChangeListener(this.onPreferenceChange); + } - this.state = {serverError: ''}; + componentWillUnmount() { + PreferenceStore.removeChangeListener(this.onPreferenceChange); } componentDidUpdate() { @@ -44,11 +57,24 @@ export default class EditChannelPurposeModal extends React.Component { } } + onPreferenceChange() { + this.ctrlSend = PreferenceStore.getBool(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'); + } + + handleKeyDown(e) { + if (this.ctrlSend && e.keyCode === Constants.KeyCodes.ENTER && e.ctrlKey) { + e.preventDefault(); + this.handleSave(e); + } else if (!this.ctrlSend && e.keyCode === Constants.KeyCodes.ENTER && !e.shiftKey && !e.altKey) { + e.preventDefault(); + this.handleSave(e); + } + } + handleSave() { if (!this.props.channel) { return; } - Client.updateChannelPurpose( this.props.channel.id, ReactDOM.findDOMNode(this.refs.purpose).value.trim(), @@ -145,6 +171,7 @@ export default class EditChannelPurposeModal extends React.Component { rows='6' maxLength='128' defaultValue={this.props.channel.purpose} + onKeyDown={this.handleKeyDown} /> {serverError} diff --git a/webapp/components/edit_post_modal.jsx b/webapp/components/edit_post_modal.jsx index 92b16f925..ac82cf036 100644 --- a/webapp/components/edit_post_modal.jsx +++ b/webapp/components/edit_post_modal.jsx @@ -82,6 +82,10 @@ class EditPostModal extends React.Component { e.preventDefault(); ReactDOM.findDOMNode(this.refs.editbox).blur(); this.handleEdit(e); + } else if (this.state.ctrlSend && e.ctrlKey && e.which === KeyCodes.ENTER) { + e.preventDefault(); + ReactDOM.findDOMNode(this.refs.editbox).blur(); + this.handleSubmit(e); } } handleEditPostEvent(options) { diff --git a/webapp/stores/preference_store.jsx b/webapp/stores/preference_store.jsx index 1a461f39f..d84f2ded9 100644 --- a/webapp/stores/preference_store.jsx +++ b/webapp/stores/preference_store.jsx @@ -16,6 +16,8 @@ class PreferenceStoreClass extends EventEmitter { this.dispatchToken = AppDispatcher.register(this.handleEventPayload); this.preferences = new Map(); + + this.setMaxListeners(15); } getKey(category, name) { -- cgit v1.2.3-1-g7c22