From 7b2f2daf2cb7c7c32a17ad25e60edbe3bcc2ba43 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 1 Jun 2020 15:00:55 +0100 Subject: [PATCH] Upload and Paste to Upload tweaks Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/ContentMessages.tsx | 7 ++++++- src/components/views/rooms/BasicMessageComposer.js | 12 +++++++----- src/components/views/rooms/SendMessageComposer.js | 7 ++----- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/ContentMessages.tsx b/src/ContentMessages.tsx index bf9435914c..cc08859e78 100644 --- a/src/ContentMessages.tsx +++ b/src/ContentMessages.tsx @@ -399,7 +399,12 @@ export default class ContentMessages { if (!shouldUpload) return; } - await this.ensureMediaConfigFetched(); + if (!this.mediaConfig) { // hot-path optimization to not flash a spinner if we don't need to + const Loader = sdk.getComponent("elements.Spinner"); + const modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner'); + await this.ensureMediaConfigFetched(); + modal.close(); + } const tooBigFiles = []; const okFiles = []; diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js index 2e4a966404..ba1be6a125 100644 --- a/src/components/views/rooms/BasicMessageComposer.js +++ b/src/components/views/rooms/BasicMessageComposer.js @@ -74,6 +74,7 @@ function selectionEquals(a: Selection, b: Selection): boolean { export default class BasicMessageEditor extends React.Component { static propTypes = { onChange: PropTypes.func, + onPaste: PropTypes.func, // returns true if handled and should skip internal onPaste handler model: PropTypes.instanceOf(EditorModel).isRequired, room: PropTypes.instanceOf(Room).isRequired, placeholder: PropTypes.string, @@ -254,6 +255,12 @@ export default class BasicMessageEditor extends React.Component { } _onPaste = (event) => { + event.preventDefault(); // we always handle the paste ourselves + if (this.props.onPaste && this.props.onPaste(event, this.props.model)) { + // to prevent double handling, allow props.onPaste to skip internal onPaste + return true; + } + const {model} = this.props; const {partCreator} = model; const partsText = event.clipboardData.getData("application/x-riot-composer"); @@ -269,7 +276,6 @@ export default class BasicMessageEditor extends React.Component { this._modifiedFlag = true; const range = getRangeForSelection(this._editorRef, model, document.getSelection()); replaceRangeAndMoveCaret(range, parts); - event.preventDefault(); } _onInput = (event) => { @@ -503,10 +509,6 @@ export default class BasicMessageEditor extends React.Component { } } - getEditableRootNode() { - return this._editorRef; - } - isModified() { return this._modifiedFlag; } diff --git a/src/components/views/rooms/SendMessageComposer.js b/src/components/views/rooms/SendMessageComposer.js index b81e004943..30f62c55f8 100644 --- a/src/components/views/rooms/SendMessageComposer.js +++ b/src/components/views/rooms/SendMessageComposer.js @@ -323,13 +323,8 @@ export default class SendMessageComposer extends React.Component { this._clearStoredEditorState(); } - componentDidMount() { - this._editorRef.getEditableRootNode().addEventListener("paste", this._onPaste, true); - } - componentWillUnmount() { dis.unregister(this.dispatcherRef); - this._editorRef.getEditableRootNode().removeEventListener("paste", this._onPaste, true); } // TODO: [REACT-WARNING] Move this to constructor @@ -425,6 +420,7 @@ export default class SendMessageComposer extends React.Component { ContentMessages.sharedInstance().sendContentListToRoom( Array.from(clipboardData.files), this.props.room.roomId, this.context, ); + return true; // to skip internal onPaste handler } } @@ -441,6 +437,7 @@ export default class SendMessageComposer extends React.Component { label={this.props.placeholder} placeholder={this.props.placeholder} onChange={this._saveStoredEditorState} + onPaste={this._onPaste} /> );