Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 6ed3349

Browse files
authored
Merge pull request #4674 from matrix-org/t3chguy/upload-tweaks
Fix paste image to upload
2 parents 419857c + 19e8fa0 commit 6ed3349

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

src/ContentMessages.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import Modal from './Modal';
2727
import RoomViewStore from './stores/RoomViewStore';
2828
import encrypt from "browser-encrypt-attachment";
2929
import extractPngChunks from "png-chunks-extract";
30+
import Spinner from "./components/views/elements/Spinner";
3031

3132
// Polyfill for Canvas.toBlob API using Canvas.toDataURL
3233
import "blueimp-canvas-to-blob";
@@ -399,7 +400,11 @@ export default class ContentMessages {
399400
if (!shouldUpload) return;
400401
}
401402

402-
await this.ensureMediaConfigFetched();
403+
if (!this.mediaConfig) { // hot-path optimization to not flash a spinner if we don't need to
404+
const modal = Modal.createDialog(Spinner, null, 'mx_Dialog_spinner');
405+
await this.ensureMediaConfigFetched();
406+
modal.close();
407+
}
403408

404409
const tooBigFiles = [];
405410
const okFiles = [];

src/components/views/rooms/BasicMessageComposer.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ function selectionEquals(a: Selection, b: Selection): boolean {
7474
export default class BasicMessageEditor extends React.Component {
7575
static propTypes = {
7676
onChange: PropTypes.func,
77+
onPaste: PropTypes.func, // returns true if handled and should skip internal onPaste handler
7778
model: PropTypes.instanceOf(EditorModel).isRequired,
7879
room: PropTypes.instanceOf(Room).isRequired,
7980
placeholder: PropTypes.string,
@@ -254,6 +255,12 @@ export default class BasicMessageEditor extends React.Component {
254255
}
255256

256257
_onPaste = (event) => {
258+
event.preventDefault(); // we always handle the paste ourselves
259+
if (this.props.onPaste && this.props.onPaste(event, this.props.model)) {
260+
// to prevent double handling, allow props.onPaste to skip internal onPaste
261+
return true;
262+
}
263+
257264
const {model} = this.props;
258265
const {partCreator} = model;
259266
const partsText = event.clipboardData.getData("application/x-riot-composer");
@@ -269,7 +276,6 @@ export default class BasicMessageEditor extends React.Component {
269276
this._modifiedFlag = true;
270277
const range = getRangeForSelection(this._editorRef, model, document.getSelection());
271278
replaceRangeAndMoveCaret(range, parts);
272-
event.preventDefault();
273279
}
274280

275281
_onInput = (event) => {
@@ -503,10 +509,6 @@ export default class BasicMessageEditor extends React.Component {
503509
}
504510
}
505511

506-
getEditableRootNode() {
507-
return this._editorRef;
508-
}
509-
510512
isModified() {
511513
return this._modifiedFlag;
512514
}

src/components/views/rooms/SendMessageComposer.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -323,13 +323,8 @@ export default class SendMessageComposer extends React.Component {
323323
this._clearStoredEditorState();
324324
}
325325

326-
componentDidMount() {
327-
this._editorRef.getEditableRootNode().addEventListener("paste", this._onPaste, true);
328-
}
329-
330326
componentWillUnmount() {
331327
dis.unregister(this.dispatcherRef);
332-
this._editorRef.getEditableRootNode().removeEventListener("paste", this._onPaste, true);
333328
}
334329

335330
// TODO: [REACT-WARNING] Move this to constructor
@@ -425,6 +420,7 @@ export default class SendMessageComposer extends React.Component {
425420
ContentMessages.sharedInstance().sendContentListToRoom(
426421
Array.from(clipboardData.files), this.props.room.roomId, this.context,
427422
);
423+
return true; // to skip internal onPaste handler
428424
}
429425
}
430426

@@ -441,6 +437,7 @@ export default class SendMessageComposer extends React.Component {
441437
label={this.props.placeholder}
442438
placeholder={this.props.placeholder}
443439
onChange={this._saveStoredEditorState}
440+
onPaste={this._onPaste}
444441
/>
445442
</div>
446443
);

0 commit comments

Comments
 (0)