
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 100/123] 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}
/>
);
From b48818bb460f1f8644436a69bd602fb428fbf217 Mon Sep 17 00:00:00 2001
From: Jorik Schellekens