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

Commit 43499b9

Browse files
Update status message in the member list and user info panel when it is changed (#7338)
Co-authored-by: Michael Telatynski <[email protected]>
1 parent a46de3b commit 43499b9

File tree

3 files changed

+43
-14
lines changed

3 files changed

+43
-14
lines changed

src/components/views/right_panel/UserInfo.tsx

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import createRoom, { findDMForUser, privateShouldBeEncrypted } from '../../../cr
3636
import DMRoomMap from '../../../utils/DMRoomMap';
3737
import AccessibleButton from '../elements/AccessibleButton';
3838
import SdkConfig from '../../../SdkConfig';
39-
import SettingsStore from "../../../settings/SettingsStore";
4039
import RoomViewStore from "../../../stores/RoomViewStore";
4140
import MultiInviter from "../../../utils/MultiInviter";
4241
import GroupStore from "../../../stores/GroupStore";
@@ -76,6 +75,7 @@ import { bulkSpaceBehaviour } from "../../../utils/space";
7675
import { shouldShowComponent } from "../../../customisations/helpers/UIComponents";
7776
import { UIComponent } from "../../../settings/UIFeature";
7877
import { TimelineRenderingType } from "../../../contexts/RoomContext";
78+
import { useUserStatusMessage } from "../../../hooks/useUserStatusMessage";
7979

8080
export interface IDevice {
8181
deviceId: string;
@@ -1495,13 +1495,14 @@ const BasicUserInfo: React.FC<{
14951495
</React.Fragment>;
14961496
};
14971497

1498-
type Member = User | RoomMember | GroupMember;
1498+
export type Member = User | RoomMember | GroupMember;
14991499

15001500
const UserInfoHeader: React.FC<{
15011501
member: Member;
15021502
e2eStatus: E2EStatus;
15031503
}> = ({ member, e2eStatus }) => {
15041504
const cli = useContext(MatrixClientContext);
1505+
const statusMessage = useUserStatusMessage(member);
15051506

15061507
const onMemberAvatarClick = useCallback(() => {
15071508
const avatarUrl = (member as RoomMember).getMxcAvatarUrl
@@ -1539,20 +1540,10 @@ const UserInfoHeader: React.FC<{
15391540
let presenceState;
15401541
let presenceLastActiveAgo;
15411542
let presenceCurrentlyActive;
1542-
let statusMessage;
1543-
15441543
if (member instanceof RoomMember && member.user) {
15451544
presenceState = member.user.presence;
15461545
presenceLastActiveAgo = member.user.lastActiveAgo;
15471546
presenceCurrentlyActive = member.user.currentlyActive;
1548-
1549-
if (SettingsStore.getValue("feature_custom_status")) {
1550-
if ((member as RoomMember).user) {
1551-
statusMessage = member.user.unstable_statusMessage;
1552-
} else {
1553-
statusMessage = (member as unknown as User).unstable_statusMessage;
1554-
}
1555-
}
15561547
}
15571548

15581549
const enablePresenceByHsUrl = SdkConfig.get()["enable_presence_by_hs_url"];

src/components/views/rooms/MemberTile.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export default class MemberTile extends React.Component<IProps, IState> {
6666
if (SettingsStore.getValue("feature_custom_status")) {
6767
const { user } = this.props.member;
6868
if (user) {
69-
user.on("User._unstable_statusMessage", this.onStatusMessageCommitted);
69+
user.on("User.unstable_statusMessage", this.onStatusMessageCommitted);
7070
}
7171
}
7272

@@ -93,7 +93,7 @@ export default class MemberTile extends React.Component<IProps, IState> {
9393
const { user } = this.props.member;
9494
if (user) {
9595
user.removeListener(
96-
"User._unstable_statusMessage",
96+
"User.unstable_statusMessage",
9797
this.onStatusMessageCommitted,
9898
);
9999
}

src/hooks/useUserStatusMessage.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
Copyright 2021 Šimon Brandner <[email protected]>
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
import { MatrixClient } from "matrix-js-sdk/src/client";
18+
import { User } from "matrix-js-sdk/src/models/user";
19+
import { useContext } from "react";
20+
21+
import MatrixClientContext from "../contexts/MatrixClientContext";
22+
import { useEventEmitterState } from "./useEventEmitter";
23+
import { Member } from "../components/views/right_panel/UserInfo";
24+
import { useFeatureEnabled } from "./useSettings";
25+
26+
const getUser = (cli: MatrixClient, user: Member): User => cli.getUser(user?.userId);
27+
const getStatusMessage = (cli: MatrixClient, user: Member): string => {
28+
return getUser(cli, user).unstable_statusMessage;
29+
};
30+
31+
// Hook to simplify handling Matrix User status
32+
export const useUserStatusMessage = (user?: Member): string => {
33+
const cli = useContext(MatrixClientContext);
34+
const enabled = useFeatureEnabled("feature_custom_status");
35+
return useEventEmitterState(enabled && getUser(cli, user), "User.unstable_statusMessage", () => {
36+
return getStatusMessage(cli, user);
37+
});
38+
};

0 commit comments

Comments
 (0)