From 05434e782a0df6292c8c6ec4400e66b2c9d50f6c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 18 Dec 2017 19:49:38 +0000 Subject: [PATCH] change Composer placeholder text based on replying/rich quoting state Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/MessageComposer.js | 32 ++++++++++++++++--- src/i18n/strings/en_EN.json | 2 ++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 2841f30423..65e9f5f8ed 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -21,7 +21,7 @@ import MatrixClientPeg from '../../../MatrixClientPeg'; import Modal from '../../../Modal'; import sdk from '../../../index'; import dis from '../../../dispatcher'; -import Autocomplete from './Autocomplete'; +import RoomViewStore from '../../../stores/RoomViewStore'; import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore"; @@ -42,6 +42,7 @@ export default class MessageComposer extends React.Component { this.onToggleMarkdownClicked = this.onToggleMarkdownClicked.bind(this); this.onInputStateChanged = this.onInputStateChanged.bind(this); this.onEvent = this.onEvent.bind(this); + this._onRoomViewStoreUpdate = this._onRoomViewStoreUpdate.bind(this); this.state = { autocompleteQuery: '', @@ -53,6 +54,7 @@ export default class MessageComposer extends React.Component { wordCount: 0, }, showFormatting: SettingsStore.getValue('MessageComposer.showFormatting'), + isQuoting: Boolean(RoomViewStore.getQuotingEvent()), }; } @@ -62,12 +64,16 @@ export default class MessageComposer extends React.Component { // marked as encrypted. // XXX: fragile as all hell - fixme somehow, perhaps with a dedicated Room.encryption event or something. MatrixClientPeg.get().on("event", this.onEvent); + this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate); } componentWillUnmount() { if (MatrixClientPeg.get()) { MatrixClientPeg.get().removeListener("event", this.onEvent); } + if (this._roomStoreToken) { + this._roomStoreToken.remove(); + } } onEvent(event) { @@ -76,6 +82,12 @@ export default class MessageComposer extends React.Component { this.forceUpdate(); } + _onRoomViewStoreUpdate() { + const isQuoting = Boolean(RoomViewStore.getQuotingEvent()); + if (this.state.isQuoting === isQuoting) return; + this.setState({ isQuoting }); + } + onUploadClick(ev) { if (MatrixClientPeg.get().isGuest()) { dis.dispatch({action: 'view_set_mxid'}); @@ -325,8 +337,20 @@ export default class MessageComposer extends React.Component { key="controls_formatting" /> ); - const placeholderText = roomIsEncrypted ? - _t('Send an encrypted message') + '…' : _t('Send a message (unencrypted)') + '…'; + let placeholderText; + if (this.state.isQuoting) { + if (roomIsEncrypted) { + placeholderText = _t('Send an encrypted reply'); + } else { + placeholderText = _t('Send a reply (unencrypted)'); + } + } else { + if (roomIsEncrypted) { + placeholderText = _t('Send an encrypted message'); + } else { + placeholderText = _t('Send a message (unencrypted)'); + } + } controls.push( , diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 0a7d274c96..81b89d823e 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -298,7 +298,9 @@ "Upload file": "Upload file", "Show Text Formatting Toolbar": "Show Text Formatting Toolbar", "Send an encrypted message": "Send an encrypted message", + "Send an encrypted reply": "Send an encrypted reply", "Send a message (unencrypted)": "Send a message (unencrypted)", + "Send a reply (unencrypted)": "Send a reply (unencrypted)", "You do not have permission to post to this room": "You do not have permission to post to this room", "Turn Markdown on": "Turn Markdown on", "Turn Markdown off": "Turn Markdown off",