Skip to content

Commit 7c925e0

Browse files
committed
refactor: remove isCurrentUser from member item props
1 parent 79baddf commit 7c925e0

5 files changed

Lines changed: 13 additions & 32 deletions

File tree

package/src/components/ChannelDetailsScreen/__tests__/members/ChannelMemberItem.test.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type { Channel, ChannelMemberResponse } from 'stream-chat';
77

88
import { ThemeProvider } from '../../../../contexts';
99
import { ChannelDetailsContextProvider } from '../../../../contexts/channelDetailsContext/channelDetailsContext';
10+
import { ChatContext } from '../../../../contexts/chatContext/ChatContext';
1011
import { defaultTheme } from '../../../../contexts/themeContext/utils/theme';
1112
import { TranslationProvider } from '../../../../contexts/translationContext/TranslationContext';
1213
import { generateMember } from '../../../../mock-builders/generator/member';
@@ -34,10 +35,12 @@ const defaultChannel = {
3435

3536
const renderRow = ({
3637
channel = defaultChannel,
38+
currentUserId,
3739
getMemberRoleLabel,
3840
...props
3941
}: React.ComponentProps<typeof ChannelMemberItem> & {
4042
channel?: Channel;
43+
currentUserId?: string;
4144
getMemberRoleLabel?: GetMemberRoleLabel;
4245
}) =>
4346
render(
@@ -54,9 +57,11 @@ const renderRow = ({
5457
userLanguage: 'en',
5558
}}
5659
>
57-
<ChannelDetailsContextProvider value={{ channel, getMemberRoleLabel }}>
58-
<ChannelMemberItem {...props} />
59-
</ChannelDetailsContextProvider>
60+
<ChatContext.Provider value={{ client: { userID: currentUserId } } as never}>
61+
<ChannelDetailsContextProvider value={{ channel, getMemberRoleLabel }}>
62+
<ChannelMemberItem {...props} />
63+
</ChannelDetailsContextProvider>
64+
</ChatContext.Provider>
6065
</TranslationProvider>
6166
</ThemeProvider>,
6267
);
@@ -73,7 +78,7 @@ describe('ChannelMemberItem accessibility', () => {
7378
});
7479

7580
it('uses "You" when the row represents the current user', () => {
76-
renderRow({ isCurrentUser: true, member: memberFor() });
81+
renderRow({ currentUserId: 'alice', member: memberFor() });
7782
expect(screen.getByLabelText('You, Offline')).toBeTruthy();
7883
});
7984

package/src/components/ChannelDetailsScreen/__tests__/members/ChannelMemberList.test.tsx

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -167,24 +167,6 @@ describe('ChannelMemberList', () => {
167167
expect(props?.keyExtractor?.(alice, 0)).toBe('alice');
168168
});
169169

170-
it('renders each item with the isCurrentUser flag derived from the chat client', () => {
171-
const alice = generateMember({ user: generateUser({ id: 'alice', name: 'Alice' }) });
172-
const bob = generateMember({ user: generateUser({ id: 'bob', name: 'Bob' }) });
173-
mockHook({ results: [alice, bob] });
174-
175-
renderList({ currentUserId: 'alice' });
176-
177-
const { data, renderItem } = latestListProps() ?? {};
178-
(data as ChannelMemberResponse[]).forEach((member, index) =>
179-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
180-
render((renderItem as any)({ index, item: member, separators: {} as never })),
181-
);
182-
183-
const byId = Object.fromEntries(itemProbeCalls.map((p) => [p.member.user?.id, p]));
184-
expect(byId.alice.isCurrentUser).toBe(true);
185-
expect(byId.bob.isCurrentUser).toBe(false);
186-
});
187-
188170
it('wires onEndReached to loadMore (with threshold) only when there is more to load', () => {
189171
const loadMore = jest.fn();
190172
mockHook({ hasMore: true, loadMore, results: [] });

package/src/components/ChannelDetailsScreen/components/ChannelDetailsMemberSection.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { ChannelAddMembersModal } from './members/ChannelAddMembersModal';
77
import { ChannelAllMembersModal } from './members/ChannelAllMembersModal';
88

99
import { useChannelDetailsContext } from '../../../contexts/channelDetailsContext/channelDetailsContext';
10-
import { useChatContext } from '../../../contexts/chatContext/ChatContext';
1110
import { useComponentsContext } from '../../../contexts/componentsContext/ComponentsContext';
1211
import { useTheme } from '../../../contexts/themeContext/ThemeContext';
1312
import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
@@ -20,7 +19,6 @@ import { useChannelDetailsMembersPreview } from '../hooks/useChannelDetailsMembe
2019
export const ChannelDetailsMemberSection = () => {
2120
const { channel, onAddMembersPress, onMemberPress, onViewAllMembersPress } =
2221
useChannelDetailsContext();
23-
const { client } = useChatContext();
2422
const { t } = useTranslationContext();
2523
const ownCapabilities = useChannelOwnCapabilities(channel);
2624
const updateChannelMembers = ownCapabilities?.includes('update-channel-members') ?? false;
@@ -115,7 +113,6 @@ export const ChannelDetailsMemberSection = () => {
115113
if (!member.user?.id) return null;
116114
return (
117115
<ChannelMemberItem
118-
isCurrentUser={member.user.id === client.userID}
119116
isMuted={mutedMemberIds.has(member.user.id)}
120117
key={member.user.id}
121118
member={member}

package/src/components/ChannelDetailsScreen/components/members/ChannelMemberItem.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { I18nManager, Pressable, StyleSheet, Text, View } from 'react-native';
44
import type { ChannelMemberResponse } from 'stream-chat';
55

66
import { composeAccessibilityLabel } from '../../../../a11y/a11yUtils';
7+
import { useChatContext } from '../../../../contexts/chatContext/ChatContext';
78
import { useTheme } from '../../../../contexts/themeContext/ThemeContext';
89
import { useTranslationContext } from '../../../../contexts/translationContext/TranslationContext';
910
import { Mute } from '../../../../icons';
@@ -16,7 +17,6 @@ export type ChannelMemberItemSize = 'sm' | 'lg';
1617

1718
export type ChannelMemberItemProps = {
1819
member: ChannelMemberResponse;
19-
isCurrentUser?: boolean;
2020
/**
2121
* Whether the current user has muted this member. Compute once at the list level
2222
* (see `useMutedMemberIds`) and pass it down — when `true` a muted
@@ -35,14 +35,14 @@ export type ChannelMemberItemProps = {
3535
};
3636

3737
const ChannelMemberItemInner = ({
38-
isCurrentUser,
3938
isMuted,
4039
member,
4140
onPress,
4241
size = 'sm',
4342
testID,
4443
}: ChannelMemberItemProps) => {
4544
const { t } = useTranslationContext();
45+
const { client } = useChatContext();
4646
const {
4747
theme: {
4848
channelDetailsScreen: {
@@ -64,6 +64,7 @@ const ChannelMemberItemInner = ({
6464
if (!user) return null;
6565

6666
const isLarge = size === 'lg';
67+
const isCurrentUser = !!client?.userID && user.id === client.userID;
6768
const displayName = isCurrentUser ? t('You') : (user.name ?? user.id);
6869
const accessibilityLabel = composeAccessibilityLabel(
6970
displayName,
@@ -154,7 +155,6 @@ const ChannelMemberItemInner = ({
154155
};
155156

156157
const areEqual = (prev: ChannelMemberItemProps, next: ChannelMemberItemProps) => {
157-
if (prev.isCurrentUser !== next.isCurrentUser) return false;
158158
if (prev.isMuted !== next.isMuted) return false;
159159
if (prev.onPress !== next.onPress) return false;
160160
if (prev.size !== next.size) return false;

package/src/components/ChannelDetailsScreen/components/members/ChannelMemberList.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import type { ChannelMemberResponse } from 'stream-chat';
66
import { MemberListLoadingSkeleton } from './MemberListLoadingSkeleton';
77

88
import { useChannelDetailsContext } from '../../../../contexts/channelDetailsContext/channelDetailsContext';
9-
import { useChatContext } from '../../../../contexts/chatContext/ChatContext';
109
import { useComponentsContext } from '../../../../contexts/componentsContext/ComponentsContext';
1110
import { useMutedMemberIds } from '../../../../hooks/useMutedMemberIds';
1211
import { useChannelAllMembers } from '../../hooks/members/useChannelAllMembers';
@@ -28,7 +27,6 @@ export type ChannelMemberListProps = {
2827
*/
2928
export const ChannelMemberList = ({ additionalFlatListProps }: ChannelMemberListProps = {}) => {
3029
const { channel, onMemberPress } = useChannelDetailsContext();
31-
const { client } = useChatContext();
3230
const { ChannelMemberActionsSheet, ChannelMemberItem } = useComponentsContext();
3331
const { hasMore, loading, loadingMore, loadMore, results } = useChannelAllMembers({ channel });
3432
const mutedMemberIds = useMutedMemberIds(channel);
@@ -50,13 +48,12 @@ export const ChannelMemberList = ({ additionalFlatListProps }: ChannelMemberList
5048
const renderItem = useCallback(
5149
({ item }: { item: ChannelMemberResponse }) => (
5250
<ChannelMemberItem
53-
isCurrentUser={item.user?.id === client.userID}
5451
isMuted={mutedMemberIds.has(item.user?.id ?? '')}
5552
member={item}
5653
onPress={() => handleMemberPress(item)}
5754
/>
5855
),
59-
[ChannelMemberItem, client.userID, handleMemberPress, mutedMemberIds],
56+
[ChannelMemberItem, handleMemberPress, mutedMemberIds],
6057
);
6158

6259
const ListFooterComponent = useMemo(

0 commit comments

Comments
 (0)