Skip to content

Commit 4e797aa

Browse files
committed
chore: organize code
1 parent ceae6b8 commit 4e797aa

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

packages/uikit-react-native-foundation/src/ui/GroupChannelMessage/Message.file.voice.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ type Props = GroupChannelMessageProps<
2626
durationMetaArrayKey?: string;
2727
onUnmount: () => void;
2828
initialCurrentTime?: number;
29-
onSubscribe?: (channelUrl: string, messageId: number, subscriber: (currentTime: number) => void) => void;
29+
onSubscribeStatus?: (channelUrl: string, messageId: number, subscriber: (currentTime: number) => void) => void;
30+
onUnsubscribeStatus?: (channelUrl: string, messageId: number, subscriber: (currentTime: number) => void) => void;
3031
}
3132
>;
3233
const VoiceFileMessage = (props: Props) => {
@@ -38,7 +39,8 @@ const VoiceFileMessage = (props: Props) => {
3839
durationMetaArrayKey = 'KEY_VOICE_MESSAGE_DURATION',
3940
onUnmount,
4041
initialCurrentTime,
41-
onSubscribe,
42+
onSubscribeStatus,
43+
onUnsubscribeStatus,
4244
} = props;
4345

4446
const { colors } = useUIKitTheme();
@@ -61,9 +63,13 @@ const VoiceFileMessage = (props: Props) => {
6163
}, []);
6264

6365
useEffect(() => {
64-
onSubscribe?.(props.channel.url, props.message.messageId, (currentTime) => {
66+
const updateCurrentTime = (currentTime: number) => {
6567
setState((prev) => ({ ...prev, currentTime }));
66-
});
68+
};
69+
onSubscribeStatus?.(props.channel.url, props.message.messageId, updateCurrentTime);
70+
return () => {
71+
onUnsubscribeStatus?.(props.channel.url, props.message.messageId, updateCurrentTime);
72+
};
6773
}, []);
6874

6975
const uiColors = colors.ui.groupChannelMessage[variant];

packages/uikit-react-native/src/components/GroupChannelMessageRenderer/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { GroupChannelContexts } from '../../domain/groupChannel/module/moduleCon
2727
import type { GroupChannelProps } from '../../domain/groupChannel/types';
2828
import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
2929
import SBUUtils from '../../libs/SBUUtils';
30+
import VoiceMessageStatusManager from '../../libs/VoiceMessageStatusManager';
3031
import { TypingIndicatorType } from '../../types';
3132
import { ReactionAddons } from '../ReactionAddons';
3233
import GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator';
@@ -233,11 +234,13 @@ const GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'
233234
durationMetaArrayKey?: string;
234235
onUnmount: () => void;
235236
initialCurrentTime?: number;
236-
onSubscribe?: (channelUrl: string, messageId: number, subscriber: (currentTime: number) => void) => void;
237+
onSubscribeStatus?: VoiceMessageStatusManager['subscribe'];
238+
onUnsubscribeStatus?: VoiceMessageStatusManager['unsubscribe'];
237239
} = {
238240
durationMetaArrayKey: VOICE_MESSAGE_META_ARRAY_DURATION_KEY,
239241
initialCurrentTime: voiceMessageStatusManager.getCurrentTime(message.channelUrl, message.messageId),
240-
onSubscribe: voiceMessageStatusManager.subscribe,
242+
onSubscribeStatus: voiceMessageStatusManager.subscribe,
243+
onUnsubscribeStatus: voiceMessageStatusManager.unsubscribe,
241244
onUnmount: () => {
242245
if (isVoiceMessage(message) && playerService.uri === message.url) {
243246
resetPlayer();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
119119
return Promise.allSettled([playerService.reset(), recorderService.reset()]);
120120
};
121121
const _onPressHeaderLeft = useFreshCallback(async () => {
122-
await onBlurFragment();
123122
voiceMessageStatusManager.clear();
123+
await onBlurFragment();
124124
onPressHeaderLeft();
125125
});
126126
const _onPressHeaderRight = useFreshCallback(async () => {

packages/uikit-react-native/src/libs/VoiceMessageStatusManager.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ class VoiceMessageStatusManager {
1515
if (!this.statusMap.has(key)) {
1616
this.statusMap.set(key, { currentTime: 0, subscribers: new Set() });
1717
}
18-
1918
this.statusMap.get(key)!.subscribers?.add(subscriber);
2019
};
2120

21+
unsubscribe = (channelUrl: string, messageId: number, subscriber: (currentTime: number) => void) => {
22+
const key = this.generateKey(channelUrl, messageId);
23+
this.statusMap.get(key)?.subscribers?.delete(subscriber);
24+
};
25+
2226
publishAll = (): void => {
2327
this.statusMap.forEach((status) => {
2428
status.subscribers?.forEach((subscriber) => {
@@ -42,6 +46,9 @@ class VoiceMessageStatusManager {
4246
};
4347

4448
clear = (): void => {
49+
this.statusMap.forEach((status) => {
50+
status.subscribers?.clear();
51+
});
4552
this.statusMap.clear();
4653
};
4754
}

0 commit comments

Comments
 (0)