@sendbird/uikit-react-native 3.7.3 → 3.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/ChannelInput/SendInput.js +2 -1
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js +33 -23
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/index.js +11 -5
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +6 -1
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/ChannelThreadMessageList/index.js +6 -1
- package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js +7 -3
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js +7 -3
- package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
- package/lib/commonjs/components/ThreadParentMessageRenderer/index.js +1 -1
- package/lib/commonjs/components/ThreadParentMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +0 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/commonjs/contexts/PlatformServiceCtx.js +2 -1
- package/lib/commonjs/contexts/PlatformServiceCtx.js.map +1 -1
- package/lib/commonjs/contexts/SBUHandlersCtx.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +8 -4
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +8 -3
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +3 -2
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelThreadFragment.js +3 -2
- package/lib/commonjs/fragments/createGroupChannelThreadFragment.js.map +1 -1
- package/lib/commonjs/hooks/useConnection.js +2 -2
- package/lib/commonjs/hooks/useConnection.js.map +1 -1
- package/lib/commonjs/hooks/usePushTokenRegistration.js +22 -4
- package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.expo.js +8 -2
- package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.native.js +9 -3
- package/lib/commonjs/platform/createPlayerService.native.js.map +1 -1
- package/lib/commonjs/platform/createRecorderService.native.js +8 -2
- package/lib/commonjs/platform/createRecorderService.native.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/SendInput.js +2 -1
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/components/ChannelInput/VoiceMessageInput.js +34 -24
- package/lib/module/components/ChannelInput/VoiceMessageInput.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js +12 -6
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +6 -1
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/ChannelThreadMessageList/index.js +6 -1
- package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js +8 -4
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js +7 -3
- package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
- package/lib/module/components/ThreadParentMessageRenderer/index.js +1 -1
- package/lib/module/components/ThreadParentMessageRenderer/index.js.map +1 -1
- package/lib/module/containers/SendbirdUIKitContainer.js +0 -1
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/module/contexts/PlatformServiceCtx.js +2 -1
- package/lib/module/contexts/PlatformServiceCtx.js.map +1 -1
- package/lib/module/contexts/SBUHandlersCtx.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +8 -4
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +8 -3
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +3 -2
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelThreadFragment.js +3 -2
- package/lib/module/fragments/createGroupChannelThreadFragment.js.map +1 -1
- package/lib/module/hooks/useConnection.js +2 -2
- package/lib/module/hooks/useConnection.js.map +1 -1
- package/lib/module/hooks/usePushTokenRegistration.js +22 -4
- package/lib/module/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/module/platform/createPlayerService.expo.js +9 -3
- package/lib/module/platform/createPlayerService.expo.js.map +1 -1
- package/lib/module/platform/createPlayerService.native.js +10 -4
- package/lib/module/platform/createPlayerService.native.js.map +1 -1
- package/lib/module/platform/createRecorderService.native.js +9 -3
- package/lib/module/platform/createRecorderService.native.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/contexts/SBUHandlersCtx.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +5 -5
- package/src/components/ChannelInput/SendInput.tsx +2 -1
- package/src/components/ChannelInput/VoiceMessageInput.tsx +40 -24
- package/src/components/ChannelInput/index.tsx +16 -6
- package/src/components/ChannelMessageList/index.tsx +5 -1
- package/src/components/ChannelThreadMessageList/index.tsx +5 -1
- package/src/components/GroupChannelMessageRenderer/index.tsx +1 -1
- package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +10 -5
- package/src/components/ReactionBottomSheets/ReactionListBottomSheet.tsx +7 -4
- package/src/components/ThreadParentMessageRenderer/index.tsx +1 -1
- package/src/containers/SendbirdUIKitContainer.tsx +0 -1
- package/src/contexts/PlatformServiceCtx.tsx +2 -1
- package/src/contexts/SBUHandlersCtx.tsx +1 -1
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +2 -2
- package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +8 -4
- package/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx +1 -1
- package/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.tsx +7 -3
- package/src/fragments/createGroupChannelFragment.tsx +3 -2
- package/src/fragments/createGroupChannelThreadFragment.tsx +3 -2
- package/src/hooks/useConnection.ts +8 -2
- package/src/hooks/usePushTokenRegistration.ts +22 -4
- package/src/platform/createPlayerService.expo.tsx +9 -3
- package/src/platform/createPlayerService.native.tsx +10 -4
- package/src/platform/createRecorderService.native.tsx +9 -3
- package/src/version.ts +1 -1
|
@@ -37,6 +37,7 @@ import {
|
|
|
37
37
|
useSendbirdChat,
|
|
38
38
|
useUserProfile,
|
|
39
39
|
} from '../../hooks/useContext';
|
|
40
|
+
import SBUUtils from '../../libs/SBUUtils';
|
|
40
41
|
import { ReactionAddons } from '../ReactionAddons';
|
|
41
42
|
import ThreadChatFlatList from '../ThreadChatFlatList';
|
|
42
43
|
|
|
@@ -249,8 +250,11 @@ const useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdO
|
|
|
249
250
|
const fileType = getFileType(message.type || getFileExtension(message.name));
|
|
250
251
|
if (['image', 'video', 'audio'].includes(fileType)) {
|
|
251
252
|
onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
|
|
253
|
+
handlers.onOpenFileURL?.(message.url);
|
|
254
|
+
} else {
|
|
255
|
+
const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;
|
|
256
|
+
openFile(message.url);
|
|
252
257
|
}
|
|
253
|
-
handlers.onOpenFileURL(message.url);
|
|
254
258
|
}
|
|
255
259
|
};
|
|
256
260
|
|
|
@@ -279,7 +279,7 @@ const GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'
|
|
|
279
279
|
onUnsubscribeStatus={voiceMessageStatusManager.unsubscribe}
|
|
280
280
|
onUnmount={() => {
|
|
281
281
|
if (isVoiceMessage(message) && playerService.uri === message.url) {
|
|
282
|
-
resetPlayer();
|
|
282
|
+
resetPlayer().catch((_) => {});
|
|
283
283
|
}
|
|
284
284
|
}}
|
|
285
285
|
{...messageProps}
|
|
@@ -5,7 +5,7 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
|
5
5
|
import type { BaseMessage } from '@sendbird/chat/message';
|
|
6
6
|
import { useChannelHandler } from '@sendbird/uikit-chat-hooks';
|
|
7
7
|
import { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
8
|
-
import { SendbirdBaseChannel, SendbirdBaseMessage, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
8
|
+
import { Logger, SendbirdBaseChannel, SendbirdBaseMessage, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
9
9
|
|
|
10
10
|
import { UNKNOWN_USER_ID } from '../../constants';
|
|
11
11
|
import { useReaction, useSendbirdChat } from '../../hooks/useContext';
|
|
@@ -46,10 +46,15 @@ const BottomSheetReactionAddon = ({ onClose, message, channel }: Props) => {
|
|
|
46
46
|
const currentUserIdx = reactionUserIds.indexOf(currentUser?.userId ?? UNKNOWN_USER_ID);
|
|
47
47
|
const reacted = currentUserIdx > -1;
|
|
48
48
|
|
|
49
|
-
const onPress = () => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
const onPress = async () => {
|
|
50
|
+
const action = reacted ? channel.deleteReaction : channel.addReaction;
|
|
51
|
+
await action(message, key)
|
|
52
|
+
.catch((error) => {
|
|
53
|
+
Logger.warn('Failed to reaction', error);
|
|
54
|
+
})
|
|
55
|
+
.finally(() => {
|
|
56
|
+
onClose();
|
|
57
|
+
});
|
|
53
58
|
};
|
|
54
59
|
|
|
55
60
|
return (
|
|
@@ -3,6 +3,7 @@ import { FlatList, Pressable, View, useWindowDimensions } from 'react-native';
|
|
|
3
3
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
4
4
|
|
|
5
5
|
import { Image, Modal, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
|
+
import { Logger } from '@sendbird/uikit-utils';
|
|
6
7
|
|
|
7
8
|
import { UNKNOWN_USER_ID } from '../../constants';
|
|
8
9
|
import type { ReactionBottomSheetProps } from './index';
|
|
@@ -53,12 +54,14 @@ const ReactionListBottomSheet = ({ visible, onClose, onDismiss, reactionCtx, cha
|
|
|
53
54
|
<View style={styles.emojiItem}>
|
|
54
55
|
<Pressable
|
|
55
56
|
key={key}
|
|
56
|
-
onPress={() => {
|
|
57
|
+
onPress={async () => {
|
|
57
58
|
if (message && channel) {
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
const action = reacted ? channel.deleteReaction : channel.addReaction;
|
|
60
|
+
action(message, key).catch((error) => {
|
|
61
|
+
Logger.warn('Failed to reaction', error);
|
|
62
|
+
});
|
|
60
63
|
}
|
|
61
|
-
onClose();
|
|
64
|
+
await onClose();
|
|
62
65
|
}}
|
|
63
66
|
style={({ pressed }) => [
|
|
64
67
|
styles.button,
|
|
@@ -178,7 +178,7 @@ const ThreadParentMessageRenderer = (props: ThreadParentMessageRendererProps) =>
|
|
|
178
178
|
durationMetaArrayKey={VOICE_MESSAGE_META_ARRAY_DURATION_KEY}
|
|
179
179
|
onUnmount={() => {
|
|
180
180
|
if (isVoiceMessage(parentMessage) && playerService.uri === parentMessage.url) {
|
|
181
|
-
resetPlayer();
|
|
181
|
+
resetPlayer().catch((_) => {});
|
|
182
182
|
}
|
|
183
183
|
}}
|
|
184
184
|
{...messageProps}
|
|
@@ -31,7 +31,8 @@ export const PlatformServiceProvider = ({ children, voiceMessageConfig, ...servi
|
|
|
31
31
|
|
|
32
32
|
useAppState('change', (state) => {
|
|
33
33
|
if (state !== 'active') {
|
|
34
|
-
|
|
34
|
+
services.playerService.reset().catch(() => {});
|
|
35
|
+
services.recorderService.reset().catch(() => {});
|
|
35
36
|
}
|
|
36
37
|
});
|
|
37
38
|
|
|
@@ -14,7 +14,7 @@ export interface SBUHandlers {
|
|
|
14
14
|
* Note that this function is also called redundantly
|
|
15
15
|
* when `onPressMediaMessage` handler is triggered by clicking on media messages containing images, videos, or audio.
|
|
16
16
|
*/
|
|
17
|
-
onOpenFileURL
|
|
17
|
+
onOpenFileURL?: (url: string) => void;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
type Props = React.PropsWithChildren<SBUHandlers>;
|
|
@@ -40,7 +40,7 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
|
|
|
40
40
|
if (focusAnimated) {
|
|
41
41
|
props.onUpdateSearchItem({ startingPoint: createdAt });
|
|
42
42
|
}
|
|
43
|
-
props.onResetMessageListWithStartingPoint(createdAt);
|
|
43
|
+
props.onResetMessageListWithStartingPoint(createdAt).catch((_) => {});
|
|
44
44
|
} else {
|
|
45
45
|
return false;
|
|
46
46
|
}
|
|
@@ -54,7 +54,7 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {
|
|
|
54
54
|
props.onUpdateSearchItem(undefined);
|
|
55
55
|
props.onScrolledAwayFromBottom(false);
|
|
56
56
|
|
|
57
|
-
await props.onResetMessageList();
|
|
57
|
+
await props.onResetMessageList().catch((_) => {});
|
|
58
58
|
props.onScrolledAwayFromBottom(false);
|
|
59
59
|
lazyScrollToBottom({ animated });
|
|
60
60
|
} else {
|
|
@@ -47,10 +47,14 @@ const GroupChannelSettingsMenu = ({
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
const toggleNotification = async () => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
try {
|
|
51
|
+
if (channel.myPushTriggerOption === 'off') {
|
|
52
|
+
await channel.setMyPushTriggerOption(PushTriggerOption.DEFAULT);
|
|
53
|
+
} else {
|
|
54
|
+
await channel.setMyPushTriggerOption(PushTriggerOption.OFF);
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
Logger.warn('Failed to toggle notification', error);
|
|
54
58
|
}
|
|
55
59
|
};
|
|
56
60
|
|
|
@@ -33,7 +33,7 @@ const GroupChannelThreadMessageList = (props: GroupChannelThreadProps['MessageLi
|
|
|
33
33
|
if (props.hasNext()) {
|
|
34
34
|
props.onScrolledAwayFromBottom(false);
|
|
35
35
|
|
|
36
|
-
await props.onResetMessageList();
|
|
36
|
+
await props.onResetMessageList().catch((_) => {});
|
|
37
37
|
props.onScrolledAwayFromBottom(false);
|
|
38
38
|
lazyScrollToBottom({ animated });
|
|
39
39
|
} else {
|
|
@@ -31,6 +31,7 @@ import ThreadParentMessageRenderer, {
|
|
|
31
31
|
ThreadParentMessageRendererProps,
|
|
32
32
|
} from '../../../components/ThreadParentMessageRenderer';
|
|
33
33
|
import { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat } from '../../../hooks/useContext';
|
|
34
|
+
import SBUUtils from '../../../libs/SBUUtils';
|
|
34
35
|
import { GroupChannelThreadContexts } from '../module/moduleContext';
|
|
35
36
|
import type { GroupChannelThreadProps } from '../types';
|
|
36
37
|
import { ReactionAddons } from './../../../components/ReactionAddons';
|
|
@@ -224,9 +225,12 @@ const useCreateMessagePressActions = ({
|
|
|
224
225
|
if (message.isFileMessage()) {
|
|
225
226
|
const fileType = getFileType(message.type || getFileExtension(message.name));
|
|
226
227
|
if (['image', 'video', 'audio'].includes(fileType)) {
|
|
227
|
-
onPressMediaMessage?.(message, () => onDeleteMessage
|
|
228
|
+
onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
|
|
229
|
+
handlers.onOpenFileURL?.(message.url);
|
|
230
|
+
} else {
|
|
231
|
+
const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;
|
|
232
|
+
openFile(message.url);
|
|
228
233
|
}
|
|
229
|
-
handlers.onOpenFileURL(message.url);
|
|
230
234
|
}
|
|
231
235
|
};
|
|
232
236
|
|
|
@@ -239,7 +243,7 @@ const useCreateMessagePressActions = ({
|
|
|
239
243
|
text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,
|
|
240
244
|
style: 'destructive',
|
|
241
245
|
onPress: () => {
|
|
242
|
-
onDeleteMessage
|
|
246
|
+
onDeleteMessage(message).catch(onDeleteFailure);
|
|
243
247
|
},
|
|
244
248
|
},
|
|
245
249
|
],
|
|
@@ -116,8 +116,9 @@ const createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): G
|
|
|
116
116
|
startingPoint: internalSearchItem?.startingPoint,
|
|
117
117
|
});
|
|
118
118
|
|
|
119
|
-
const onBlurFragment = () => {
|
|
120
|
-
|
|
119
|
+
const onBlurFragment = async () => {
|
|
120
|
+
await playerService.reset().catch(() => {});
|
|
121
|
+
await recorderService.reset().catch(() => {});
|
|
121
122
|
};
|
|
122
123
|
const _onPressHeaderLeft = useFreshCallback(async () => {
|
|
123
124
|
voiceMessageStatusManager.clear();
|
|
@@ -103,8 +103,9 @@ const createGroupChannelThreadFragment = (
|
|
|
103
103
|
startingPoint,
|
|
104
104
|
});
|
|
105
105
|
|
|
106
|
-
const onBlurFragment = () => {
|
|
107
|
-
|
|
106
|
+
const onBlurFragment = async () => {
|
|
107
|
+
await playerService.reset().catch(() => {});
|
|
108
|
+
await recorderService.reset().catch(() => {});
|
|
108
109
|
};
|
|
109
110
|
const _onPressHeaderLeft = useFreshCallback(async () => {
|
|
110
111
|
await onBlurFragment();
|
|
@@ -52,7 +52,10 @@ const useConnection = () => {
|
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
await Promise.
|
|
55
|
+
await Promise.all([
|
|
56
|
+
initEmoji(sdk, emojiManager).catch(() => Logger.info('[useConnection]', 'initEmoji failure')),
|
|
57
|
+
initDashboardConfigs(sdk).catch(() => Logger.info('[useConnection]', 'initDashboardConfigs failure')),
|
|
58
|
+
]);
|
|
56
59
|
|
|
57
60
|
Logger.debug('[useConnection]', 'connected! (online)');
|
|
58
61
|
setCurrentUser(user);
|
|
@@ -67,7 +70,10 @@ const useConnection = () => {
|
|
|
67
70
|
Logger.warn('[useConnection]', 'clear cached-data');
|
|
68
71
|
await sdk.clearCachedData().catch((e) => Logger.warn('[useConnection]', 'clear cached-data failure', e));
|
|
69
72
|
} else if (sdk.currentUser) {
|
|
70
|
-
await Promise.
|
|
73
|
+
await Promise.all([
|
|
74
|
+
initEmoji(sdk, emojiManager).catch(() => Logger.info('[useConnection]', 'initEmoji failure')),
|
|
75
|
+
initDashboardConfigs(sdk).catch(() => Logger.info('[useConnection]', 'initDashboardConfigs failure')),
|
|
76
|
+
]);
|
|
71
77
|
|
|
72
78
|
Logger.debug('[useConnection]', 'connected! (offline)');
|
|
73
79
|
setCurrentUser(sdk.currentUser);
|
|
@@ -44,9 +44,23 @@ const usePushTokenRegistration = () => {
|
|
|
44
44
|
// Register token
|
|
45
45
|
const token = await getToken();
|
|
46
46
|
if (token) {
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
try {
|
|
48
|
+
await registerToken(token);
|
|
49
|
+
Logger.log('[usePushTokenRegistration]', 'registered token:', token);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);
|
|
52
|
+
}
|
|
49
53
|
}
|
|
54
|
+
|
|
55
|
+
// Remove listener
|
|
56
|
+
refreshListener.current = notificationService.onTokenRefresh(async (token) => {
|
|
57
|
+
try {
|
|
58
|
+
await registerToken(token);
|
|
59
|
+
Logger.log('[usePushTokenRegistration]', 'registered token:', token);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
50
64
|
});
|
|
51
65
|
|
|
52
66
|
const unregisterPushTokenForCurrentUser = useFreshCallback(async () => {
|
|
@@ -56,8 +70,12 @@ const usePushTokenRegistration = () => {
|
|
|
56
70
|
// Unregister token
|
|
57
71
|
const token = await getToken();
|
|
58
72
|
if (token) {
|
|
59
|
-
|
|
60
|
-
|
|
73
|
+
try {
|
|
74
|
+
await unregisterToken(token);
|
|
75
|
+
Logger.log('[usePushTokenRegistration]', 'unregistered token:', token);
|
|
76
|
+
} catch (error) {
|
|
77
|
+
Logger.error('[usePushTokenRegistration]', 'failed to unregister token:', error);
|
|
78
|
+
}
|
|
61
79
|
}
|
|
62
80
|
});
|
|
63
81
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type * as ExpoAV from 'expo-av';
|
|
2
2
|
|
|
3
|
-
import { matchesOneOf } from '@sendbird/uikit-utils';
|
|
3
|
+
import { Logger, matchesOneOf } from '@sendbird/uikit-utils';
|
|
4
4
|
|
|
5
5
|
import expoPermissionGranted from '../utils/expoPermissionGranted';
|
|
6
6
|
import type { PlayerServiceInterface, Unsubscribe } from './types';
|
|
@@ -28,10 +28,16 @@ const createExpoPlayerService = ({ avModule }: Modules): PlayerServiceInterface
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
private setListener = () => {
|
|
31
|
-
sound.setProgressUpdateIntervalAsync(100)
|
|
31
|
+
sound.setProgressUpdateIntervalAsync(100).catch((error) => {
|
|
32
|
+
Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);
|
|
33
|
+
});
|
|
32
34
|
sound.setOnPlaybackStatusUpdate((status) => {
|
|
33
35
|
if (status.isLoaded) {
|
|
34
|
-
if (status.didJustFinish)
|
|
36
|
+
if (status.didJustFinish) {
|
|
37
|
+
this.stop().catch((error) => {
|
|
38
|
+
Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
35
41
|
if (status.isPlaying) {
|
|
36
42
|
this.playbackSubscribers.forEach((callback) => {
|
|
37
43
|
callback({
|
|
@@ -2,7 +2,7 @@ import { Platform } from 'react-native';
|
|
|
2
2
|
import type * as RNAudioRecorder from 'react-native-audio-recorder-player';
|
|
3
3
|
import * as Permissions from 'react-native-permissions';
|
|
4
4
|
|
|
5
|
-
import { matchesOneOf, sleep } from '@sendbird/uikit-utils';
|
|
5
|
+
import { Logger, matchesOneOf, sleep } from '@sendbird/uikit-utils';
|
|
6
6
|
|
|
7
7
|
import type { PlayerServiceInterface, Unsubscribe } from './types';
|
|
8
8
|
|
|
@@ -23,7 +23,9 @@ const createNativePlayerService = ({ audioRecorderModule, permissionModule }: Mo
|
|
|
23
23
|
private readonly stateSubscribers = new Set<StateListener>();
|
|
24
24
|
|
|
25
25
|
constructor() {
|
|
26
|
-
module.setSubscriptionDuration(0.1)
|
|
26
|
+
module.setSubscriptionDuration(0.1).catch((error) => {
|
|
27
|
+
Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);
|
|
28
|
+
});
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
private setState = (state: PlayerServiceInterface['state']) => {
|
|
@@ -34,10 +36,14 @@ const createNativePlayerService = ({ audioRecorderModule, permissionModule }: Mo
|
|
|
34
36
|
};
|
|
35
37
|
|
|
36
38
|
private setListener = () => {
|
|
37
|
-
module.addPlayBackListener((data) => {
|
|
39
|
+
module.addPlayBackListener(async (data) => {
|
|
38
40
|
const stopped = data.currentPosition >= data.duration;
|
|
39
41
|
|
|
40
|
-
if (stopped)
|
|
42
|
+
if (stopped) {
|
|
43
|
+
this.stop().catch((error) => {
|
|
44
|
+
Logger.warn('[PlayerService.Native] Failed to stop in PlayBackListener', error);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
41
47
|
if (this.state === 'playing') {
|
|
42
48
|
this.playbackSubscribers.forEach((callback) => {
|
|
43
49
|
callback({ currentTime: data.currentPosition, duration: data.duration, stopped });
|
|
@@ -3,7 +3,7 @@ import * as RNAudioRecorder from 'react-native-audio-recorder-player';
|
|
|
3
3
|
import * as Permissions from 'react-native-permissions';
|
|
4
4
|
import { Permission } from 'react-native-permissions/src/types';
|
|
5
5
|
|
|
6
|
-
import { matchesOneOf, sleep } from '@sendbird/uikit-utils';
|
|
6
|
+
import { Logger, matchesOneOf, sleep } from '@sendbird/uikit-utils';
|
|
7
7
|
|
|
8
8
|
import VoiceMessageConfig from '../libs/VoiceMessageConfig';
|
|
9
9
|
import nativePermissionGranted from '../utils/nativePermissionGranted';
|
|
@@ -64,11 +64,17 @@ const createNativeRecorderService = ({ audioRecorderModule, permissionModule }:
|
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
constructor() {
|
|
67
|
-
module.setSubscriptionDuration(0.1)
|
|
67
|
+
module.setSubscriptionDuration(0.1).catch((error) => {
|
|
68
|
+
Logger.warn('[RecorderService.Native] Failed to set subscription duration', error);
|
|
69
|
+
});
|
|
68
70
|
module.addRecordBackListener((data) => {
|
|
69
71
|
const completed = data.currentPosition >= this.options.maxDuration;
|
|
70
72
|
|
|
71
|
-
if (completed)
|
|
73
|
+
if (completed) {
|
|
74
|
+
this.stop().catch((error) => {
|
|
75
|
+
Logger.warn('[RecorderService.Native] Failed to stop in RecordBackListener', error);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
72
78
|
if (this.state === 'recording') {
|
|
73
79
|
this.recordingSubscribers.forEach((callback) => {
|
|
74
80
|
callback({ currentTime: data.currentPosition, completed });
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const VERSION = '3.7.
|
|
1
|
+
const VERSION = '3.7.4';
|
|
2
2
|
export default VERSION;
|