diff --git a/src/Editing.ts b/src/Editing.ts new file mode 100644 index 0000000000..57e58cc2a7 --- /dev/null +++ b/src/Editing.ts @@ -0,0 +1,20 @@ +/* +Copyright 2022 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { TimelineRenderingType } from "./contexts/RoomContext"; + +export const editorRoomKey = (roomId: string, context: TimelineRenderingType) => `mx_edit_room_${roomId}_${context}`; +export const editorStateKey = (eventId: string) => `mx_edit_state_${eventId}`; diff --git a/src/components/structures/MessagePanel.tsx b/src/components/structures/MessagePanel.tsx index f7e338fafa..cc6ad9ff5d 100644 --- a/src/components/structures/MessagePanel.tsx +++ b/src/components/structures/MessagePanel.tsx @@ -53,6 +53,7 @@ import EditorStateTransfer from "../../utils/EditorStateTransfer"; import { Action } from '../../dispatcher/actions'; import { getEventDisplayInfo } from "../../utils/EventUtils"; import { IReadReceiptInfo } from "../views/rooms/ReadReceiptMarker"; +import { editorRoomKey } from "../../Editing"; const CONTINUATION_MAX_INTERVAL = 5 * 60 * 1000; // 5 minutes const continuedTypes = [EventType.Sticker, EventType.RoomMessage]; @@ -307,9 +308,10 @@ export default class MessagePanel extends React.Component { const pendingEditItem = this.pendingEditItem; if (!this.props.editState && this.props.room && pendingEditItem) { + const event = this.props.room.findEventById(pendingEditItem); defaultDispatcher.dispatch({ action: Action.EditEvent, - event: this.props.room.findEventById(pendingEditItem), + event: !event?.isRedacted() ? event : null, timelineRenderingType: this.context.timelineRenderingType, }); } @@ -613,13 +615,15 @@ export default class MessagePanel extends React.Component { if (!this.props.room) { return undefined; } + try { - return localStorage.getItem(`mx_edit_room_${this.props.room.roomId}_${this.context.timelineRenderingType}`); + return localStorage.getItem(editorRoomKey(this.props.room.roomId, this.context.timelineRenderingType)); } catch (err) { logger.error(err); return undefined; } } + private getEventTiles(): ReactNode[] { let i; @@ -722,10 +726,8 @@ export default class MessagePanel extends React.Component { ): ReactNode[] { const ret = []; - const isEditing = this.props.editState && - this.props.editState.getEvent().getId() === mxEv.getId(); - // local echoes have a fake date, which could even be yesterday. Treat them - // as 'today' for the date separators. + const isEditing = this.props.editState?.getEvent().getId() === mxEv.getId(); + // local echoes have a fake date, which could even be yesterday. Treat them as 'today' for the date separators. let ts1 = mxEv.getTs(); let eventDate = mxEv.getDate(); if (mxEv.status) { diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index ffd80e0222..e9ff4e95ca 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -366,7 +366,7 @@ export class RoomView extends React.Component { this.checkWidgets(this.state.room); }; - private checkWidgets = (room) => { + private checkWidgets = (room: Room): void => { this.setState({ hasPinnedWidgets: WidgetLayoutStore.instance.hasPinnedWidgets(room), mainSplitContentType: this.getMainSplitContentType(room), @@ -374,7 +374,7 @@ export class RoomView extends React.Component { }); }; - private getMainSplitContentType = (room) => { + private getMainSplitContentType = (room: Room) => { if (SettingsStore.getValue("feature_voice_rooms") && room.isCallRoom()) { return MainSplitContentType.Video; } diff --git a/src/components/views/rooms/EditMessageComposer.tsx b/src/components/views/rooms/EditMessageComposer.tsx index b7564a5102..749c2e0bea 100644 --- a/src/components/views/rooms/EditMessageComposer.tsx +++ b/src/components/views/rooms/EditMessageComposer.tsx @@ -47,6 +47,7 @@ import { ComposerType } from "../../../dispatcher/payloads/ComposerInsertPayload import { getSlashCommand, isSlashCommand, runSlashCommand, shouldSendAnyway } from "../../../editor/commands"; import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts"; import { PosthogAnalytics } from "../../../PosthogAnalytics"; +import { editorRoomKey, editorStateKey } from "../../../Editing"; function getHtmlReplyFallback(mxEvent: MatrixEvent): string { const html = mxEvent.getContent().formatted_body; @@ -224,11 +225,11 @@ class EditMessageComposer extends React.Component { + this.cancelEdit(); + }, }); return; }