Skip to content

Commit 7bdb5af

Browse files
committed
fix(timeline): refresh rows after decryption
1 parent dc67f85 commit 7bdb5af

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

src/app/hooks/timeline/useTimelineSync.test.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,32 @@ describe('live-arrive edge cases', () => {
992992

993993
expect(result.current.timeline).not.toBe(before);
994994
});
995+
996+
it('re-renders when an event finishes decrypting', async () => {
997+
const { room } = createRoom();
998+
const { result } = renderSyncHook(room);
999+
const before = result.current.timeline;
1000+
1001+
await act(async () => {
1002+
mxEmitter.emit(MatrixEventEvent.Decrypted, { getRoomId: () => room.roomId });
1003+
await Promise.resolve();
1004+
});
1005+
1006+
expect(result.current.timeline).not.toBe(before);
1007+
});
1008+
1009+
it('ignores decryption of an event in another room', async () => {
1010+
const { room } = createRoom();
1011+
const { result } = renderSyncHook(room);
1012+
const before = result.current.timeline;
1013+
1014+
await act(async () => {
1015+
mxEmitter.emit(MatrixEventEvent.Decrypted, { getRoomId: () => '!other:test' });
1016+
await Promise.resolve();
1017+
});
1018+
1019+
expect(result.current.timeline).toBe(before);
1020+
});
9951021
});
9961022

9971023
describe('event jump recovery', () => {

src/app/hooks/timeline/useTimelineSync.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,20 @@ export function useTimelineSync({
580580

581581
useMatrixEvent(room, RoomEvent.LocalEchoUpdated, handleLocalEchoUpdated);
582582

583+
const handleDecrypted = useCallback(
584+
(mEvent: MatrixEvent) => {
585+
if (mEvent.getRoomId() !== room.roomId) return;
586+
setTimeline((ct) => ({ ...ct }));
587+
},
588+
[room, setTimeline]
589+
);
590+
591+
useMatrixEvent(
592+
typeof (mx as Partial<Pick<MatrixClient, 'on'>>).on === 'function' ? mx : undefined,
593+
MatrixEventEvent.Decrypted,
594+
handleDecrypted
595+
);
596+
583597
useLiveTimelineRefresh(
584598
room,
585599
useCallback(() => {

0 commit comments

Comments
 (0)