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

Commit 240753a

Browse files
committed
Check for a pending edit only once per render and clear any pending events while switching between edits
1 parent 87d95d0 commit 240753a

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

src/components/structures/MessagePanel.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,10 @@ export default class MessagePanel extends React.Component {
472472
return {nextEvent, nextTile};
473473
}
474474

475+
get _roomHasPendingEdit() {
476+
return localStorage.getItem(`mx_edit_room_${this.props.room.roomId}`);
477+
}
478+
475479
_getEventTiles() {
476480
this.eventNodes = {};
477481

@@ -560,28 +564,26 @@ export default class MessagePanel extends React.Component {
560564
}
561565
}
562566

567+
if (!this.props.editState && this._roomHasPendingEdit) {
568+
defaultDispatcher.dispatch({
569+
action: "edit_event",
570+
event: this.props.room.findEventById(this._roomHasPendingEdit),
571+
});
572+
}
573+
563574
if (grouper) {
564575
ret.push(...grouper.getTiles());
565576
}
566577

567578
return ret;
568579
}
569580

570-
_wasEventBeingEdited = (mxEv) => {
571-
return localStorage.getItem(`mx_edit_state_${mxEv.getRoomId()}
572-
_${mxEv.getId()}`) !== null;
573-
}
574-
575581
_getTilesForEvent(prevEvent, mxEv, last, isGrouped=false, nextEvent, nextEventWithTile) {
576582
const TileErrorBoundary = sdk.getComponent('messages.TileErrorBoundary');
577583
const EventTile = sdk.getComponent('rooms.EventTile');
578584
const DateSeparator = sdk.getComponent('messages.DateSeparator');
579585
const ret = [];
580586

581-
if (!this.props.editState && this._wasEventBeingEdited(mxEv) ) {
582-
defaultDispatcher.dispatch({action: "edit_event", event: mxEv});
583-
}
584-
585587
const isEditing = this.props.editState &&
586588
this.props.editState.getEvent().getId() === mxEv.getId();
587589
// local echoes have a fake date, which could even be yesterday. Treat them

src/components/views/rooms/EditMessageComposer.js

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,22 @@ export default class EditMessageComposer extends React.Component {
177177
}
178178
}
179179

180+
get _editorRoomKey() {
181+
return `mx_edit_room_${this._getRoom().roomId}`;
182+
}
183+
184+
get _editorStateKey() {
185+
return `mx_edit_state_${this.props.editState.getEvent().getId()}`;
186+
}
187+
180188
_cancelEdit = () => {
181189
this._clearStoredEditorState();
182190
dis.dispatch({action: "edit_event", event: null});
183191
dis.fire(Action.FocusComposer);
184192
}
185193

186194
get _shouldSaveStoredEditorState() {
187-
return localStorage.getItem(this._editorStateKey) !== null;
195+
return localStorage.getItem(this._editorRoomKey) !== null;
188196
}
189197

190198
_restoreStoredEditorState(partCreator) {
@@ -200,17 +208,21 @@ export default class EditMessageComposer extends React.Component {
200208
}
201209
}
202210

203-
get _editorStateKey() {
204-
return `mx_edit_state_${this.props.editState.getEvent().getRoomId()}
205-
_${this.props.editState.getEvent().event.event_id}`;
206-
}
207-
208211
_clearStoredEditorState() {
212+
localStorage.removeItem(this._editorRoomKey);
209213
localStorage.removeItem(this._editorStateKey);
210214
}
211215

216+
_clearPreviousEdit() {
217+
if (localStorage.getItem(this._editorRoomKey)) {
218+
localStorage.removeItem(`mx_edit_state_${localStorage.getItem(this._editorRoomKey)}`);
219+
}
220+
}
221+
212222
_saveStoredEditorState() {
213223
const item = SendHistoryManager.createItem(this.model);
224+
this._clearPreviousEdit();
225+
localStorage.setItem(this._editorRoomKey, this.props.editState.getEvent().getId());
214226
localStorage.setItem(this._editorStateKey, JSON.stringify(item));
215227
}
216228

0 commit comments

Comments
 (0)