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

Commit e7c9139

Browse files
authored
Make read receipts handle nullable roomMembers correctly (#8410)
* make readReceipt roomMember nullable, as it should be * add fallback click interaction for read receipts of unknown users
1 parent a70f117 commit e7c9139

File tree

4 files changed

+11
-6
lines changed

4 files changed

+11
-6
lines changed

src/components/views/avatars/MemberAvatar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import SettingsStore from "../../../settings/SettingsStore";
3030
import { MatrixClientPeg } from "../../../MatrixClientPeg";
3131

3232
interface IProps extends Omit<React.ComponentProps<typeof BaseAvatar>, "name" | "idName" | "url"> {
33-
member: RoomMember;
33+
member: RoomMember | null;
3434
fallbackUserId?: string;
3535
width: number;
3636
height: number;

src/components/views/rooms/EventTile.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export type GetRelationsForEvent = (eventId: string, relationType: string, event
9696

9797
export interface IReadReceiptProps {
9898
userId: string;
99-
roomMember: RoomMember;
99+
roomMember: RoomMember | null;
100100
ts: number;
101101
}
102102

src/components/views/rooms/ReadReceiptGroup.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ limitations under the License.
1515
*/
1616

1717
import React, { PropsWithChildren, useRef } from "react";
18+
import { User } from "matrix-js-sdk/src/matrix";
1819

1920
import ReadReceiptMarker, { IReadReceiptInfo } from "./ReadReceiptMarker";
2021
import { IReadReceiptProps } from "./EventTile";
@@ -188,7 +189,7 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick
188189
label: (
189190
<>
190191
<div className="mx_Tooltip_title">
191-
{ roomMember.rawDisplayName ?? userId }
192+
{ roomMember?.rawDisplayName ?? userId }
192193
</div>
193194
<div className="mx_Tooltip_sub">
194195
{ userId }
@@ -203,7 +204,11 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick
203204
onClick={() => {
204205
dis.dispatch({
205206
action: Action.ViewUser,
206-
member: roomMember,
207+
// XXX: We should be using a real member object and not assuming what the receiver wants.
208+
// The ViewUser action leads to the RightPanelStore, and RightPanelStoreIPanelState defines the
209+
// member property of IRightPanelCardState as `RoomMember | User`, so we’re fine for now, but we
210+
// should definitely clean this up later
211+
member: roomMember ?? { userId } as User,
207212
push: false,
208213
});
209214
onAfterClick?.();
@@ -225,7 +230,7 @@ function ReadReceiptPerson({ userId, roomMember, ts, isTwelveHour, onAfterClick
225230
hideTitle
226231
/>
227232
<div className="mx_ReadReceiptGroup_name">
228-
<p>{ roomMember.name }</p>
233+
<p>{ roomMember?.name ?? userId }</p>
229234
<p className="mx_ReadReceiptGroup_secondary">
230235
{ formatDate(new Date(ts), isTwelveHour) }
231236
</p>

src/components/views/rooms/ReadReceiptMarker.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export interface IReadReceiptInfo {
3131

3232
interface IProps {
3333
// the RoomMember to show the RR for
34-
member?: RoomMember;
34+
member?: RoomMember | null;
3535
// userId to fallback the avatar to
3636
// if the member hasn't been loaded yet
3737
fallbackUserId: string;

0 commit comments

Comments
 (0)