Skip to content

Commit 9b33404

Browse files
Optimizing ChannelPreview hooks
1 parent 59618ad commit 9b33404

File tree

3 files changed

+73
-53
lines changed

3 files changed

+73
-53
lines changed

src/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,38 @@ import { ChatContext } from '../../../context';
99
*/
1010
export const useChannelPreviewDisplayAvatar = (channel) => {
1111
const { client } = useContext(ChatContext);
12-
const [displayAvatar, setDisplayAvatar] = useState({});
12+
const [displayAvatar, setDisplayAvatar] = useState(
13+
getChannelPreviewDisplayAvatar(channel, client.user.id),
14+
);
1315

1416
useEffect(() => {
15-
if (channel.data.image) {
16-
setDisplayAvatar({
17-
image: channel.data.image,
18-
name: channel.data.name,
19-
});
20-
} else {
21-
const members = Object.values(channel?.state?.members || {});
22-
const otherMembers = members.filter(
23-
(member) => member.user.id !== client.user.id,
24-
);
25-
26-
if (otherMembers.length === 1) {
27-
setDisplayAvatar({
28-
image: otherMembers[0].user.image,
29-
name: channel.data.name || otherMembers[0].user.name,
30-
});
31-
} else {
32-
setDisplayAvatar({
33-
name: channel.data.name,
34-
});
35-
}
36-
}
17+
setDisplayAvatar(getChannelPreviewDisplayAvatar(channel, client.user.id));
3718
}, [channel]);
3819

3920
return displayAvatar;
4021
};
22+
23+
const getChannelPreviewDisplayAvatar = (channel, currentUserId) => {
24+
if (channel.data.image) {
25+
return {
26+
image: channel.data.image,
27+
name: channel.data.name,
28+
};
29+
} else {
30+
const members = Object.values(channel?.state?.members || {});
31+
const otherMembers = members.filter(
32+
(member) => member.user.id !== currentUserId,
33+
);
34+
35+
if (otherMembers.length === 1) {
36+
return {
37+
image: otherMembers[0].user.image,
38+
name: channel.data.name || otherMembers[0].user.name,
39+
};
40+
} else {
41+
return {
42+
name: channel.data.name,
43+
};
44+
}
45+
}
46+
};

src/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,29 @@ import { ChatContext } from '../../../context';
33

44
export const useChannelPreviewDisplayName = (channel) => {
55
const { client } = useContext(ChatContext);
6-
const [displayName, setDisplayName] = useState('');
6+
const [displayName, setDisplayName] = useState(
7+
getChannelPreviewDisplayName(channel, client.user.id),
8+
);
79

810
useEffect(() => {
9-
if (typeof channel?.data?.name === 'string') {
10-
setDisplayName(channel.data.name);
11-
} else {
12-
const members = Object.values(channel?.state?.members || {});
13-
const otherMembers = members.filter(
14-
(member) => member.user.id !== client.user.id,
15-
);
16-
const name = otherMembers
17-
.map((member) => member.user.name || member.user.id || 'Unnamed User')
18-
.join(', ');
19-
20-
setDisplayName(name);
21-
}
11+
setDisplayName(getChannelPreviewDisplayName(channel, client.user.id));
2212
}, [channel]);
2313

2414
return displayName;
2515
};
16+
17+
const getChannelPreviewDisplayName = (channel, currentUserId) => {
18+
if (typeof channel?.data?.name === 'string') {
19+
return channel.data.name;
20+
} else {
21+
const members = Object.values(channel?.state?.members || {});
22+
const otherMembers = members.filter(
23+
(member) => member.user.id !== currentUserId,
24+
);
25+
const name = otherMembers
26+
.map((member) => member.user.name || member.user.id || 'Unnamed User')
27+
.join(', ');
28+
29+
return name;
30+
}
31+
};

src/components/ChannelPreview/hooks/useLatestMessagePreview.js

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,24 @@ const getLatestMessageDisplayDate = (message, tDateTimeParser) => {
2828
}
2929
};
3030

31+
const getLatestMessagePreview = (channel, t, tDateTimeParser) => {
32+
if (!channel.state.messages || !channel.state.messages.length) {
33+
return {
34+
created_at: '',
35+
messageObject: {},
36+
text: '',
37+
};
38+
} else {
39+
const message = channel.state.messages[channel.state.messages.length - 1];
40+
41+
return {
42+
created_at: getLatestMessageDisplayDate(message, tDateTimeParser),
43+
messageObject: { ...message },
44+
text: getLatestMessageDisplayText(message, t),
45+
};
46+
}
47+
};
48+
3149
/**
3250
* Hook to set the display preview for latest message on channel.
3351
*
@@ -37,24 +55,14 @@ const getLatestMessageDisplayDate = (message, tDateTimeParser) => {
3755
*/
3856
export const useLatestMessagePreview = (channel, lastMessage) => {
3957
const { t, tDateTimeParser } = useContext(TranslationContext);
40-
const [latestMessagePreview, setLatestMessagePreview] = useState({});
58+
const [latestMessagePreview, setLatestMessagePreview] = useState(
59+
getLatestMessagePreview(channel, t, tDateTimeParser),
60+
);
4161

4262
useEffect(() => {
43-
if (!channel.state.messages || !channel.state.messages.length) {
44-
setLatestMessagePreview({
45-
created_at: '',
46-
messageObject: {},
47-
text: '',
48-
});
49-
} else {
50-
const message = channel.state.messages[channel.state.messages.length - 1];
51-
52-
setLatestMessagePreview({
53-
created_at: getLatestMessageDisplayDate(message, tDateTimeParser),
54-
messageObject: { ...message },
55-
text: getLatestMessageDisplayText(message, t),
56-
});
57-
}
63+
setLatestMessagePreview(
64+
getLatestMessagePreview(channel, t, tDateTimeParser),
65+
);
5866
}, [channel, lastMessage]);
5967

6068
return latestMessagePreview;

0 commit comments

Comments
 (0)