Skip to content

Commit 484199d

Browse files
committed
chore: apply review when clicking the subtitle
1 parent 59c1b2d commit 484199d

File tree

6 files changed

+50
-39
lines changed

6 files changed

+50
-39
lines changed

packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import React, { useContext, useEffect } from 'react';
1+
import React, { useContext, useEffect, useMemo } from 'react';
22

33
import { useChannelHandler } from '@sendbird/uikit-chat-hooks';
44
import { useToast } from '@sendbird/uikit-react-native-foundation';
55
import { SendbirdMessage, SendbirdSendableMessage } from '@sendbird/uikit-utils';
6-
import { isDifferentChannel, useFreshCallback, useIsFirstMount, useUniqHandlerId } from '@sendbird/uikit-utils';
6+
import { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
77

88
import ChannelMessageList from '../../../components/ChannelMessageList';
99
import { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';
@@ -22,7 +22,9 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
2222
);
2323

2424
const id = useUniqHandlerId('GroupChannelMessageList');
25-
const isFirstMount = useIsFirstMount();
25+
const isChangedSearchItem = useMemo(() => {
26+
return !!props.searchItem;
27+
}, [props.searchItem]);
2628

2729
const scrollToMessageWithCreatedAt = useFreshCallback(
2830
(createdAt: number, focusAnimated: boolean, timeout: number): boolean => {
@@ -93,13 +95,10 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
9395
}, [props.scrolledAwayFromBottom]);
9496

9597
useEffect(() => {
96-
// Only trigger once when message list mount with initial props.searchItem
97-
// - Search screen + searchItem > mount message list
98-
// - Reset message list + searchItem > re-mount message list
99-
if (isFirstMount && props.searchItem) {
98+
if (isChangedSearchItem && props.searchItem) {
10099
scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);
101100
}
102-
}, [isFirstMount]);
101+
}, [isChangedSearchItem]);
103102

104103
const onPressParentMessage = useFreshCallback(
105104
(parentMessage: SendbirdMessage, childMessage: SendbirdSendableMessage) => {

packages/uikit-react-native/src/domain/groupChannelThread/component/GroupChannelThreadHeader.tsx

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
11
import React, { useContext } from 'react';
22
import { View } from 'react-native';
33

4-
import {
5-
Icon,
6-
PressBox,
7-
Text,
8-
createStyleSheet,
9-
useHeaderStyle,
10-
useUIKitTheme,
11-
} from '@sendbird/uikit-react-native-foundation';
4+
import { Icon, Text, createStyleSheet, useHeaderStyle, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
125

136
import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
147
import { GroupChannelThreadContexts } from '../module/moduleContext';
158
import type { GroupChannelThreadProps } from '../types';
169

17-
const GroupChannelThreadHeader = ({ onPressHeader }: GroupChannelThreadProps['Header']) => {
10+
const GroupChannelThreadHeader = ({ onPressLeft, onPressSubtitle }: GroupChannelThreadProps['Header']) => {
1811
const { headerTitle, channel } = useContext(GroupChannelThreadContexts.Fragment);
1912
const { HeaderComponent } = useHeaderStyle();
2013
const { STRINGS } = useLocalization();
@@ -26,6 +19,7 @@ const GroupChannelThreadHeader = ({ onPressHeader }: GroupChannelThreadProps['He
2619

2720
return (
2821
<Text
22+
onPress={onPressSubtitle}
2923
caption2
3024
style={styles.subtitle}
3125
color={select({ light: palette.primary300, dark: palette.primary200 })}
@@ -37,22 +31,21 @@ const GroupChannelThreadHeader = ({ onPressHeader }: GroupChannelThreadProps['He
3731
};
3832

3933
return (
40-
<PressBox onPress={onPressHeader}>
41-
<HeaderComponent
42-
clearTitleMargin
43-
title={
44-
<View style={styles.titleContainer}>
45-
<View style={{ flexShrink: 1 }}>
46-
<Text h2 color={colors.onBackground01} numberOfLines={1}>
47-
{headerTitle}
48-
</Text>
49-
{renderSubtitle()}
50-
</View>
34+
<HeaderComponent
35+
clearTitleMargin
36+
title={
37+
<View style={styles.titleContainer}>
38+
<View style={{ flexShrink: 1 }}>
39+
<Text h2 color={colors.onBackground01} numberOfLines={1}>
40+
{headerTitle}
41+
</Text>
42+
{renderSubtitle()}
5143
</View>
52-
}
53-
left={<Icon icon={'arrow-left'} size={24} />}
54-
/>
55-
</PressBox>
44+
</View>
45+
}
46+
left={<Icon icon={'arrow-left'} size={24} />}
47+
onPressLeft={onPressLeft}
48+
/>
5649
);
5750
};
5851

packages/uikit-react-native/src/domain/groupChannelThread/types.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ export interface GroupChannelThreadProps {
2727
startingPoint?: number;
2828
onParentMessageDeleted: () => void;
2929
onChannelDeleted: () => void;
30-
onPressHeader: GroupChannelThreadProps['Header']['onPressHeader'];
30+
onPressHeaderLeft: GroupChannelThreadProps['Header']['onPressLeft'];
31+
onPressHeaderSubtitle?: GroupChannelThreadProps['Header']['onPressSubtitle'];
3132
onPressMediaMessage?: GroupChannelThreadProps['MessageList']['onPressMediaMessage'];
3233

3334
onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;
@@ -44,7 +45,8 @@ export interface GroupChannelThreadProps {
4445
sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];
4546
};
4647
Header: {
47-
onPressHeader: () => void;
48+
onPressLeft: () => void;
49+
onPressSubtitle: () => void;
4850
};
4951
ParentMessageInfo: {
5052
channel: SendbirdGroupChannel;

packages/uikit-react-native/src/fragments/createGroupChannelFragment.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
8484
}
8585
});
8686

87+
useEffect(() => {
88+
setInternalSearchItem(searchItem);
89+
}, [searchItem]);
90+
8791
const {
8892
loading,
8993
messages,

packages/uikit-react-native/src/fragments/createGroupChannelThreadFragment.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ const createGroupChannelThreadFragment = (
3838
return ({
3939
renderMessage,
4040
enableMessageGrouping = true,
41-
onPressHeader = NOOP,
41+
onPressHeaderLeft = NOOP,
42+
onPressHeaderSubtitle = NOOP,
4243
onPressMediaMessage = NOOP,
4344
onParentMessageDeleted = NOOP,
4445
onChannelDeleted = NOOP,
@@ -105,10 +106,15 @@ const createGroupChannelThreadFragment = (
105106
const onBlurFragment = () => {
106107
return Promise.allSettled([playerService.reset(), recorderService.reset()]);
107108
};
108-
const _onPressHeader = useFreshCallback(async () => {
109+
const _onPressHeaderLeft = useFreshCallback(async () => {
109110
await onBlurFragment();
110111
voiceMessageStatusManager.publishAll();
111-
onPressHeader();
112+
onPressHeaderLeft();
113+
});
114+
const _onPressHeaderSubtitle = useFreshCallback(async () => {
115+
await onBlurFragment();
116+
voiceMessageStatusManager.publishAll();
117+
onPressHeaderSubtitle();
112118
});
113119
const _onPressMediaMessage: NonNullable<GroupChannelThreadProps['MessageList']['onPressMediaMessage']> =
114120
useFreshCallback(async (message, deleteMessage, uri) => {
@@ -219,7 +225,7 @@ const createGroupChannelThreadFragment = (
219225
keyboardAvoidOffset={keyboardAvoidOffset}
220226
threadedMessages={messages}
221227
>
222-
<GroupChannelThreadModule.Header onPressHeader={_onPressHeader} />
228+
<GroupChannelThreadModule.Header onPressLeft={_onPressHeaderLeft} onPressSubtitle={_onPressHeaderSubtitle} />
223229
<StatusComposition loading={loading} LoadingComponent={<GroupChannelThreadModule.StatusLoading />}>
224230
<GroupChannelThreadModule.MessageList
225231
channel={channel}

sample/src/screens/uikit/groupChannel/GroupChannelThreadScreen.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,17 @@ const GroupChannelThreadScreen = () => {
3939
// Should leave channel, navigate to channel list
4040
navigation.navigate(Routes.GroupChannelList);
4141
}}
42-
onPressHeader={() => {
42+
onPressHeaderLeft={() => {
4343
// Navigate back
4444
navigation.goBack();
4545
}}
46+
onPressHeaderSubtitle={() => {
47+
// Navigate to parent message
48+
navigation.navigate(Routes.GroupChannel, {
49+
channelUrl: channel.url,
50+
searchItem: { startingPoint: parentMessage.createdAt },
51+
});
52+
}}
4653
/>
4754
);
4855
};

0 commit comments

Comments
 (0)