From 3c89bc2bb3e2b6e8009a7ab8b21b0b8213413e8b Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski Date: Sun, 24 Apr 2022 23:21:09 +0200 Subject: [PATCH 1/4] fix: make roomMember nullable, as it should be --- src/components/views/avatars/MemberAvatar.tsx | 2 +- src/components/views/rooms/EventTile.tsx | 2 +- src/components/views/rooms/ReadReceiptGroup.tsx | 6 +++--- src/components/views/rooms/ReadReceiptMarker.tsx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/views/avatars/MemberAvatar.tsx b/src/components/views/avatars/MemberAvatar.tsx index 09400b7e21d..41ad6118741 100644 --- a/src/components/views/avatars/MemberAvatar.tsx +++ b/src/components/views/avatars/MemberAvatar.tsx @@ -30,7 +30,7 @@ import SettingsStore from "../../../settings/SettingsStore"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; interface IProps extends Omit, "name" | "idName" | "url"> { - member: RoomMember; + member: RoomMember | null; fallbackUserId?: string; width: number; height: number; diff --git a/src/components/views/rooms/EventTile.tsx b/src/components/views/rooms/EventTile.tsx index f068e029a85..d71b682112d 100644 --- a/src/components/views/rooms/EventTile.tsx +++ b/src/components/views/rooms/EventTile.tsx @@ -96,7 +96,7 @@ export type GetRelationsForEvent = (eventId: string, relationType: string, event export interface IReadReceiptProps { userId: string; - roomMember: RoomMember; + roomMember: RoomMember | null; ts: number; } diff --git a/src/components/views/rooms/ReadReceiptGroup.tsx b/src/components/views/rooms/ReadReceiptGroup.tsx index 4363c4c1588..5a0aa1141d0 100644 --- a/src/components/views/rooms/ReadReceiptGroup.tsx +++ b/src/components/views/rooms/ReadReceiptGroup.tsx @@ -188,7 +188,7 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick label: ( <>
- { roomMember.rawDisplayName ?? userId } + { roomMember?.rawDisplayName ?? userId }
{ userId } @@ -201,7 +201,7 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick { - dis.dispatch({ + roomMember && dis.dispatch({ action: Action.ViewUser, member: roomMember, push: false, @@ -225,7 +225,7 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick hideTitle />
-

{ roomMember.name }

+

{ roomMember?.name ?? userId }

{ formatDate(new Date(ts), isTwelveHour) }

diff --git a/src/components/views/rooms/ReadReceiptMarker.tsx b/src/components/views/rooms/ReadReceiptMarker.tsx index bf218c0ddb8..453f7dd225e 100644 --- a/src/components/views/rooms/ReadReceiptMarker.tsx +++ b/src/components/views/rooms/ReadReceiptMarker.tsx @@ -31,7 +31,7 @@ export interface IReadReceiptInfo { interface IProps { // the RoomMember to show the RR for - member?: RoomMember; + member?: RoomMember | null; // userId to fallback the avatar to // if the member hasn't been loaded yet fallbackUserId: string; From 40346efe821cd5b7ee7cc6d32094d2da3536c8f0 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski Date: Tue, 26 Apr 2022 11:28:44 +0200 Subject: [PATCH 2/4] fix: correct click interaction for read receipts of unknown users --- src/components/views/rooms/ReadReceiptGroup.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/ReadReceiptGroup.tsx b/src/components/views/rooms/ReadReceiptGroup.tsx index 5a0aa1141d0..98ca888bff0 100644 --- a/src/components/views/rooms/ReadReceiptGroup.tsx +++ b/src/components/views/rooms/ReadReceiptGroup.tsx @@ -29,6 +29,7 @@ import ContextMenu, { aboveLeftOf, MenuItem, useContextMenu } from "../../struct import { useTooltip } from "../../../utils/useTooltip"; import { _t } from "../../../languageHandler"; import { useRovingTabIndex } from "../../../accessibility/RovingTabIndex"; +import { User } from "../../../../../matrix-js-sdk"; const MAX_READ_AVATARS = 3; const READ_AVATAR_OFFSET = 10; @@ -201,9 +202,9 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick { - roomMember && dis.dispatch({ + dis.dispatch({ action: Action.ViewUser, - member: roomMember, + member: roomMember ?? { userId } as User, push: false, }); onAfterClick?.(); From c03a76ebebdfc78815f13c9edcb1c997d17b9bc1 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski Date: Tue, 26 Apr 2022 11:33:47 +0200 Subject: [PATCH 3/4] fix: correct imports --- src/components/views/rooms/ReadReceiptGroup.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/ReadReceiptGroup.tsx b/src/components/views/rooms/ReadReceiptGroup.tsx index 98ca888bff0..3325defc118 100644 --- a/src/components/views/rooms/ReadReceiptGroup.tsx +++ b/src/components/views/rooms/ReadReceiptGroup.tsx @@ -15,6 +15,7 @@ limitations under the License. */ import React, { PropsWithChildren, useRef } from "react"; +import { User } from "matrix-js-sdk/src/matrix"; import ReadReceiptMarker, { IReadReceiptInfo } from "./ReadReceiptMarker"; import { IReadReceiptProps } from "./EventTile"; @@ -29,7 +30,6 @@ import ContextMenu, { aboveLeftOf, MenuItem, useContextMenu } from "../../struct import { useTooltip } from "../../../utils/useTooltip"; import { _t } from "../../../languageHandler"; import { useRovingTabIndex } from "../../../accessibility/RovingTabIndex"; -import { User } from "../../../../../matrix-js-sdk"; const MAX_READ_AVATARS = 3; const READ_AVATAR_OFFSET = 10; From d9f71d938409755f0e61d130425305a7684879a2 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski Date: Tue, 26 Apr 2022 12:26:43 +0200 Subject: [PATCH 4/4] Add comment explaining why we're using this fallback for read receipt members --- src/components/views/rooms/ReadReceiptGroup.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/views/rooms/ReadReceiptGroup.tsx b/src/components/views/rooms/ReadReceiptGroup.tsx index 3325defc118..a427c74e072 100644 --- a/src/components/views/rooms/ReadReceiptGroup.tsx +++ b/src/components/views/rooms/ReadReceiptGroup.tsx @@ -204,6 +204,10 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick onClick={() => { dis.dispatch({ action: Action.ViewUser, + // XXX: We should be using a real member object and not assuming what the receiver wants. + // The ViewUser action leads to the RightPanelStore, and RightPanelStoreIPanelState defines the + // member property of IRightPanelCardState as `RoomMember | User`, so we’re fine for now, but we + // should definitely clean this up later member: roomMember ?? { userId } as User, push: false, });