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

Commit c3ad8b4

Browse files
Cleanup re-dispatching around timelines and composers (#7023)
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
1 parent 87dc2e8 commit c3ad8b4

File tree

9 files changed

+45
-10
lines changed

9 files changed

+45
-10
lines changed

src/components/structures/MessagePanel.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ interface IReadReceiptForUser {
196196
@replaceableComponent("structures.MessagePanel")
197197
export default class MessagePanel extends React.Component<IProps, IState> {
198198
static contextType = RoomContext;
199+
public context!: React.ContextType<typeof RoomContext>;
199200

200201
// opaque readreceipt info for each userId; used by ReadReceiptMarker
201202
// to manage its animations
@@ -787,6 +788,7 @@ export default class MessagePanel extends React.Component<IProps, IState> {
787788
showReadReceipts={this.props.showReadReceipts}
788789
callEventGrouper={callEventGrouper}
789790
hideSender={this.membersCount <= 2 && this.props.layout === Layout.Bubble}
791+
timelineRenderingType={this.context.timelineRenderingType}
790792
/>
791793
</TileErrorBoundary>,
792794
);

src/components/structures/RoomView.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ import { logger } from "matrix-js-sdk/src/logger";
9494
import { EventTimeline } from 'matrix-js-sdk/src/models/event-timeline';
9595
import { dispatchShowThreadEvent } from '../../dispatcher/dispatch-actions/threads';
9696
import { fetchInitialEvent } from "../../utils/EventUtils";
97+
import { ComposerType } from "../../dispatcher/payloads/ComposerInsertPayload";
9798

9899
const DEBUG = false;
99100
let debuglog = function(msg: string) {};
@@ -864,10 +865,11 @@ export class RoomView extends React.Component<IRoomProps, IRoomState> {
864865
}
865866

866867
case Action.ComposerInsert: {
868+
if (payload.composerType) break;
867869
// re-dispatch to the correct composer
868870
dis.dispatch({
869871
...payload,
870-
action: this.state.editState ? "edit_composer_insert" : "send_composer_insert",
872+
composerType: this.state.editState ? ComposerType.Edit : ComposerType.Send,
871873
});
872874
break;
873875
}

src/components/views/messages/TextualBody.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import MessageEditHistoryDialog from "../dialogs/MessageEditHistoryDialog";
4444
import EditMessageComposer from '../rooms/EditMessageComposer';
4545
import LinkPreviewGroup from '../rooms/LinkPreviewGroup';
4646
import { IBodyProps } from "./IBodyProps";
47+
import RoomContext from "../../../contexts/RoomContext";
4748

4849
const MAX_HIGHLIGHT_LENGTH = 4096;
4950

@@ -62,6 +63,9 @@ export default class TextualBody extends React.Component<IBodyProps, IState> {
6263
private unmounted = false;
6364
private pills: Element[] = [];
6465

66+
static contextType = RoomContext;
67+
public context!: React.ContextType<typeof RoomContext>;
68+
6569
constructor(props) {
6670
super(props);
6771

@@ -406,6 +410,7 @@ export default class TextualBody extends React.Component<IBodyProps, IState> {
406410
dis.dispatch<ComposerInsertPayload>({
407411
action: Action.ComposerInsert,
408412
userId: mxEvent.getSender(),
413+
timelineRenderingType: this.context.timelineRenderingType,
409414
});
410415
};
411416

src/components/views/right_panel/UserInfo.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ import { bulkSpaceBehaviour } from "../../../utils/space";
7676
import { logger } from "matrix-js-sdk/src/logger";
7777
import { shouldShowComponent } from "../../../customisations/helpers/UIComponents";
7878
import { UIComponent } from "../../../settings/UIFeature";
79+
import { TimelineRenderingType } from "../../../contexts/RoomContext";
7980

8081
export interface IDevice {
8182
deviceId: string;
@@ -378,6 +379,7 @@ const UserOptionsSection: React.FC<{
378379
dis.dispatch<ComposerInsertPayload>({
379380
action: Action.ComposerInsert,
380381
userId: member.userId,
382+
timelineRenderingType: TimelineRenderingType.Room,
381383
});
382384
};
383385

src/components/views/rooms/EditMessageComposer.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import SettingsStore from "../../../settings/SettingsStore";
4747
import { logger } from "matrix-js-sdk/src/logger";
4848
import { withMatrixClientHOC, MatrixClientProps } from '../../../contexts/MatrixClientContext';
4949
import RoomContext from '../../../contexts/RoomContext';
50+
import { ComposerType } from "../../../dispatcher/payloads/ComposerInsertPayload";
5051

5152
function getHtmlReplyFallback(mxEvent: MatrixEvent): string {
5253
const html = mxEvent.getContent().formatted_body;
@@ -499,15 +500,20 @@ class EditMessageComposer extends React.Component<IEditMessageComposerProps, ISt
499500
};
500501

501502
private onAction = (payload: ActionPayload) => {
502-
if (payload.action === "edit_composer_insert" && this.editorRef.current) {
503+
if (!this.editorRef.current) return;
504+
505+
if (payload.action === Action.ComposerInsert) {
506+
if (payload.timelineRenderingType !== this.context.timelineRenderingType) return;
507+
if (payload.composerType !== ComposerType.Edit) return;
508+
503509
if (payload.userId) {
504510
this.editorRef.current?.insertMention(payload.userId);
505511
} else if (payload.event) {
506512
this.editorRef.current?.insertQuotedMessage(payload.event);
507513
} else if (payload.text) {
508514
this.editorRef.current?.insertPlaintext(payload.text);
509515
}
510-
} else if (payload.action === Action.FocusEditMessageComposer && this.editorRef.current) {
516+
} else if (payload.action === Action.FocusEditMessageComposer) {
511517
this.editorRef.current.focus();
512518
}
513519
};

src/components/views/rooms/EventTile.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { dispatchShowThreadEvent } from '../../../dispatcher/dispatch-actions/th
6262
import { MessagePreviewStore } from '../../../stores/room-list/MessagePreviewStore';
6363

6464
import { logger } from "matrix-js-sdk/src/logger";
65+
import { TimelineRenderingType } from "../../../contexts/RoomContext";
6566

6667
const eventTileTypes = {
6768
[EventType.RoomMessage]: 'messages.MessageEvent',
@@ -313,6 +314,8 @@ interface IProps {
313314

314315
// whether or not to display thread info
315316
showThreadInfo?: boolean;
317+
318+
timelineRenderingType?: TimelineRenderingType;
316319
}
317320

318321
interface IState {
@@ -855,10 +858,11 @@ export default class EventTile extends React.Component<IProps, IState> {
855858
}
856859

857860
onSenderProfileClick = () => {
858-
const mxEvent = this.props.mxEvent;
861+
if (!this.props.timelineRenderingType) return;
859862
dis.dispatch<ComposerInsertPayload>({
860863
action: Action.ComposerInsert,
861-
userId: mxEvent.getSender(),
864+
userId: this.props.mxEvent.getSender(),
865+
timelineRenderingType: this.props.timelineRenderingType,
862866
});
863867
};
864868

@@ -1091,7 +1095,7 @@ export default class EventTile extends React.Component<IProps, IState> {
10911095
}
10921096

10931097
if (needsSenderProfile && this.props.hideSender !== true) {
1094-
if (!this.props.tileShape) {
1098+
if (!this.props.tileShape || this.props.tileShape === TileShape.Thread) {
10951099
sender = <SenderProfile onClick={this.onSenderProfileClick}
10961100
mxEvent={this.props.mxEvent}
10971101
enableFlair={this.props.enableFlair}

src/components/views/rooms/MessageComposer.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,8 @@ export default class MessageComposer extends React.Component<IProps, IState> {
252252
private ref: React.RefObject<HTMLDivElement> = createRef();
253253
private instanceId: number;
254254

255-
public static contextType = RoomContext;
255+
static contextType = RoomContext;
256+
public context!: React.ContextType<typeof RoomContext>;
256257

257258
static defaultProps = {
258259
compact: false,
@@ -398,13 +399,14 @@ export default class MessageComposer extends React.Component<IProps, IState> {
398399
}
399400
};
400401

401-
private addEmoji(emoji: string): boolean {
402+
private addEmoji = (emoji: string): boolean => {
402403
dis.dispatch<ComposerInsertPayload>({
403404
action: Action.ComposerInsert,
404405
text: emoji,
406+
timelineRenderingType: this.context.timelineRenderingType,
405407
});
406408
return true;
407-
}
409+
};
408410

409411
private sendMessage = async () => {
410412
if (this.state.haveRecording && this.voiceRecordingButton.current) {

src/components/views/rooms/SendMessageComposer.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import { ActionPayload } from "../../../dispatcher/payloads";
5858
import { decorateStartSendingTime, sendRoundTripMetric } from "../../../sendTimePerformanceMetrics";
5959
import RoomContext from '../../../contexts/RoomContext';
6060
import DocumentPosition from "../../../editor/position";
61+
import { ComposerType } from "../../../dispatcher/payloads/ComposerInsertPayload";
6162

6263
function addReplyToMessageContent(
6364
content: IContent,
@@ -591,7 +592,10 @@ export class SendMessageComposer extends React.Component<ISendMessageComposerPro
591592
this.editorRef.current?.focus();
592593
}
593594
break;
594-
case "send_composer_insert":
595+
case Action.ComposerInsert:
596+
if (payload.timelineRenderingType !== this.context.timelineRenderingType) break;
597+
if (payload.composerType !== ComposerType.Send) break;
598+
595599
if (payload.userId) {
596600
this.editorRef.current?.insertMention(payload.userId);
597601
} else if (payload.event) {

src/dispatcher/payloads/ComposerInsertPayload.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,17 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event";
1818

1919
import { ActionPayload } from "../payloads";
2020
import { Action } from "../actions";
21+
import { TimelineRenderingType } from "../../contexts/RoomContext";
22+
23+
export enum ComposerType {
24+
Send = "send",
25+
Edit = "edit",
26+
}
2127

2228
interface IBaseComposerInsertPayload extends ActionPayload {
2329
action: Action.ComposerInsert;
30+
timelineRenderingType: TimelineRenderingType;
31+
composerType?: ComposerType; // falsey if should be re-dispatched to the correct composer
2432
}
2533

2634
interface IComposerInsertMentionPayload extends IBaseComposerInsertPayload {

0 commit comments

Comments
 (0)