@sendbird/uikit-react-native 3.1.1 → 3.2.0
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/README.md +67 -42
- package/lib/commonjs/components/ChannelInput/MessageToReplyPreview.js +145 -0
- package/lib/commonjs/components/ChannelInput/MessageToReplyPreview.js.map +1 -0
- package/lib/commonjs/components/ChannelInput/SendInput.js +147 -312
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js +238 -0
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js.map +1 -0
- package/lib/commonjs/components/ChannelInput/index.js +5 -1
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/ChatFlatList/index.js +15 -3
- package/lib/commonjs/components/ChatFlatList/index.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +24 -13
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +100 -5
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/MessageSearchResultItem.js +1 -0
- package/lib/commonjs/components/MessageSearchResultItem.js.map +1 -1
- package/lib/commonjs/components/OpenChannelMessageRenderer/index.js +1 -0
- package/lib/commonjs/components/OpenChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +2 -2
- package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/index.js.map +1 -1
- package/lib/commonjs/components/StatusComposition.js.map +1 -1
- package/lib/commonjs/constants.js +5 -1
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js +1 -0
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/commonjs/containers/InternalErrorBoundaryContainer.js.map +1 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +84 -34
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/commonjs/contexts/PlatformServiceCtx.js +16 -12
- package/lib/commonjs/contexts/PlatformServiceCtx.js.map +1 -1
- package/lib/commonjs/contexts/ReactionCtx.js +3 -2
- package/lib/commonjs/contexts/ReactionCtx.js.map +1 -1
- package/lib/commonjs/contexts/SendbirdChatCtx.js +2 -0
- package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +27 -42
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js +109 -5
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/domain/userList/types.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +30 -4
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createMessageSearchFragment.js +1 -1
- package/lib/commonjs/fragments/createMessageSearchFragment.js.map +1 -1
- package/lib/commonjs/hooks/useChannelInputItems.js +211 -0
- package/lib/commonjs/hooks/useChannelInputItems.js.map +1 -0
- package/lib/commonjs/hooks/useConnection.js +1 -1
- package/lib/commonjs/hooks/useConnection.js.map +1 -1
- package/lib/commonjs/hooks/useMentionSuggestion.js +1 -1
- package/lib/commonjs/hooks/useMentionSuggestion.js.map +1 -1
- package/lib/commonjs/hooks/useVoiceMessageInput.js +207 -0
- package/lib/commonjs/hooks/useVoiceMessageInput.js.map +1 -0
- package/lib/commonjs/index.js +32 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/libs/MentionManager.js.map +1 -1
- package/lib/commonjs/libs/SBUUtils.js +4 -0
- package/lib/commonjs/libs/SBUUtils.js.map +1 -1
- package/lib/commonjs/libs/VoiceMessageConfig.js +30 -0
- package/lib/commonjs/libs/VoiceMessageConfig.js.map +1 -0
- package/lib/commonjs/localization/StringSet.type.js.map +1 -1
- package/lib/commonjs/localization/createBaseStringSet.js +24 -9
- package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
- package/lib/commonjs/platform/createFileService.expo.js +10 -0
- package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
- package/lib/commonjs/platform/createFileService.native.js +19 -0
- package/lib/commonjs/platform/createFileService.native.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.expo.js +137 -0
- package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -0
- package/lib/commonjs/platform/createPlayerService.native.js +139 -0
- package/lib/commonjs/platform/createPlayerService.native.js.map +1 -0
- package/lib/commonjs/platform/createRecorderService.expo.js +158 -0
- package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -0
- package/lib/commonjs/platform/createRecorderService.native.js +157 -0
- package/lib/commonjs/platform/createRecorderService.native.js.map +1 -0
- package/lib/commonjs/platform/types.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/MessageToReplyPreview.js +137 -0
- package/lib/module/components/ChannelInput/MessageToReplyPreview.js.map +1 -0
- package/lib/module/components/ChannelInput/SendInput.js +149 -314
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/components/ChannelInput/VoiceMessageInput.js +228 -0
- package/lib/module/components/ChannelInput/VoiceMessageInput.js.map +1 -0
- package/lib/module/components/ChannelInput/index.js +5 -1
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +2 -2
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/ChatFlatList/index.js +15 -3
- package/lib/module/components/ChatFlatList/index.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +24 -13
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js +99 -6
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/MessageSearchResultItem.js +2 -1
- package/lib/module/components/MessageSearchResultItem.js.map +1 -1
- package/lib/module/components/OpenChannelMessageRenderer/index.js +1 -0
- package/lib/module/components/OpenChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +2 -2
- package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/index.js.map +1 -1
- package/lib/module/components/StatusComposition.js.map +1 -1
- package/lib/module/constants.js +2 -0
- package/lib/module/constants.js.map +1 -1
- package/lib/module/containers/GroupChannelPreviewContainer.js +2 -1
- package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/module/containers/InternalErrorBoundaryContainer.js.map +1 -1
- package/lib/module/containers/SendbirdUIKitContainer.js +86 -36
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/module/contexts/PlatformServiceCtx.js +14 -11
- package/lib/module/contexts/PlatformServiceCtx.js.map +1 -1
- package/lib/module/contexts/ReactionCtx.js +3 -2
- package/lib/module/contexts/ReactionCtx.js.map +1 -1
- package/lib/module/contexts/SendbirdChatCtx.js +2 -0
- package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +28 -43
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannel/module/moduleContext.js +111 -7
- package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/domain/userList/types.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +32 -6
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createMessageSearchFragment.js +1 -1
- package/lib/module/fragments/createMessageSearchFragment.js.map +1 -1
- package/lib/module/hooks/useChannelInputItems.js +203 -0
- package/lib/module/hooks/useChannelInputItems.js.map +1 -0
- package/lib/module/hooks/useConnection.js +1 -1
- package/lib/module/hooks/useConnection.js.map +1 -1
- package/lib/module/hooks/useMentionSuggestion.js +1 -1
- package/lib/module/hooks/useMentionSuggestion.js.map +1 -1
- package/lib/module/hooks/useVoiceMessageInput.js +199 -0
- package/lib/module/hooks/useVoiceMessageInput.js.map +1 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/libs/MentionManager.js.map +1 -1
- package/lib/module/libs/SBUUtils.js +4 -0
- package/lib/module/libs/SBUUtils.js.map +1 -1
- package/lib/module/libs/VoiceMessageConfig.js +23 -0
- package/lib/module/libs/VoiceMessageConfig.js.map +1 -0
- package/lib/module/localization/StringSet.type.js.map +1 -1
- package/lib/module/localization/createBaseStringSet.js +25 -10
- package/lib/module/localization/createBaseStringSet.js.map +1 -1
- package/lib/module/platform/createFileService.expo.js +10 -0
- package/lib/module/platform/createFileService.expo.js.map +1 -1
- package/lib/module/platform/createFileService.native.js +19 -0
- package/lib/module/platform/createFileService.native.js.map +1 -1
- package/lib/module/platform/createPlayerService.expo.js +129 -0
- package/lib/module/platform/createPlayerService.expo.js.map +1 -0
- package/lib/module/platform/createPlayerService.native.js +132 -0
- package/lib/module/platform/createPlayerService.native.js.map +1 -0
- package/lib/module/platform/createRecorderService.expo.js +150 -0
- package/lib/module/platform/createRecorderService.expo.js.map +1 -0
- package/lib/module/platform/createRecorderService.native.js +149 -0
- package/lib/module/platform/createRecorderService.native.js.map +1 -0
- package/lib/module/platform/types.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelCover.d.ts +2 -1
- package/lib/typescript/src/components/ChannelInput/AttachmentsButton.d.ts +2 -1
- package/lib/typescript/src/components/ChannelInput/MessageToReplyPreview.d.ts +7 -0
- package/lib/typescript/src/components/ChannelInput/VoiceMessageInput.d.ts +11 -0
- package/lib/typescript/src/components/ChannelInput/index.d.ts +7 -3
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +1 -1
- package/lib/typescript/src/components/FileViewer.d.ts +2 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.d.ts +2 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.d.ts +1 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.d.ts +1 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +4 -2
- package/lib/typescript/src/components/NewMessagesButton.d.ts +1 -1
- package/lib/typescript/src/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.d.ts +2 -1
- package/lib/typescript/src/components/ProviderLayout.d.ts +1 -1
- package/lib/typescript/src/components/ReactionAddons/BottomSheetReactionAddon.d.ts +2 -1
- package/lib/typescript/src/components/ReactionAddons/MessageReactionAddon.d.ts +2 -1
- package/lib/typescript/src/components/ReactionAddons/ReactionRoundedButton.d.ts +3 -2
- package/lib/typescript/src/components/ReactionAddons/index.d.ts +3 -2
- package/lib/typescript/src/components/ReactionBottomSheets/ReactionListBottomSheet.d.ts +2 -1
- package/lib/typescript/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.d.ts +2 -1
- package/lib/typescript/src/components/ReactionBottomSheets/index.d.ts +4 -4
- package/lib/typescript/src/components/ScrollToBottomButton.d.ts +1 -1
- package/lib/typescript/src/components/StatusComposition.d.ts +4 -4
- package/lib/typescript/src/components/TypedPlaceholder.d.ts +2 -1
- package/lib/typescript/src/components/UserActionBar.d.ts +2 -1
- package/lib/typescript/src/components/UserSelectableBar.d.ts +2 -1
- package/lib/typescript/src/constants.d.ts +2 -0
- package/lib/typescript/src/containers/GroupChannelPreviewContainer.d.ts +2 -1
- package/lib/typescript/src/containers/InternalErrorBoundaryContainer.d.ts +3 -3
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +18 -6
- package/lib/typescript/src/contexts/LocalizationCtx.d.ts +1 -1
- package/lib/typescript/src/contexts/PlatformServiceCtx.d.ts +8 -8
- package/lib/typescript/src/contexts/ReactionCtx.d.ts +5 -2
- package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +6 -3
- package/lib/typescript/src/contexts/UserProfileCtx.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelSuggestedMentionList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannel/types.d.ts +45 -0
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListTypeSelector.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelModeration/component/GroupChannelModerationHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelModeration/component/GroupChannelModerationMenu.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsView.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchHeader.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchList.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +2 -2
- package/lib/typescript/src/domain/openChannel/component/OpenChannelInput.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelMessageList.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelModeration/component/OpenChannelModerationHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelModeration/component/OpenChannelModerationMenu.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsInfo.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsMenu.d.ts +2 -1
- package/lib/typescript/src/domain/userList/component/UserListHeader.d.ts +3 -3
- package/lib/typescript/src/domain/userList/component/UserListList.d.ts +1 -1
- package/lib/typescript/src/domain/userList/component/UserListStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/userList/component/UserListStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/userList/types.d.ts +2 -2
- package/lib/typescript/src/hooks/useChannelInputItems.d.ts +10 -0
- package/lib/typescript/src/hooks/useVoiceMessageInput.d.ts +53 -0
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/libs/MentionManager.d.ts +2 -1
- package/lib/typescript/src/libs/SBUUtils.d.ts +1 -0
- package/lib/typescript/src/libs/VoiceMessageConfig.d.ts +25 -0
- package/lib/typescript/src/localization/StringSet.type.d.ts +7 -0
- package/lib/typescript/src/platform/createPlayerService.expo.d.ts +7 -0
- package/lib/typescript/src/platform/createPlayerService.native.d.ts +9 -0
- package/lib/typescript/src/platform/createRecorderService.expo.d.ts +7 -0
- package/lib/typescript/src/platform/createRecorderService.native.d.ts +9 -0
- package/lib/typescript/src/platform/types.d.ts +100 -1
- package/lib/typescript/src/types.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +9 -11
- package/src/components/ChannelInput/MessageToReplyPreview.tsx +133 -0
- package/src/components/ChannelInput/SendInput.tsx +129 -320
- package/src/components/ChannelInput/VoiceMessageInput.tsx +206 -0
- package/src/components/ChannelInput/index.tsx +12 -4
- package/src/components/ChannelMessageList/index.tsx +3 -1
- package/src/components/ChatFlatList/index.tsx +14 -3
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +24 -11
- package/src/components/GroupChannelMessageRenderer/index.tsx +80 -3
- package/src/components/MessageSearchResultItem.tsx +2 -1
- package/src/components/OpenChannelMessageRenderer/index.tsx +1 -0
- package/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.tsx +2 -2
- package/src/components/ReactionBottomSheets/index.tsx +3 -2
- package/src/components/StatusComposition.tsx +3 -3
- package/src/constants.ts +2 -0
- package/src/containers/GroupChannelPreviewContainer.tsx +2 -0
- package/src/containers/InternalErrorBoundaryContainer.tsx +1 -1
- package/src/containers/SendbirdUIKitContainer.tsx +105 -54
- package/src/contexts/PlatformServiceCtx.tsx +22 -20
- package/src/contexts/ReactionCtx.tsx +7 -5
- package/src/contexts/SendbirdChatCtx.tsx +10 -2
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +29 -43
- package/src/domain/groupChannel/module/moduleContext.tsx +119 -7
- package/src/domain/groupChannel/types.ts +41 -0
- package/src/domain/userList/types.ts +2 -2
- package/src/fragments/createGroupChannelFragment.tsx +32 -5
- package/src/fragments/createMessageSearchFragment.tsx +1 -1
- package/src/hooks/useChannelInputItems.ts +215 -0
- package/src/hooks/useConnection.ts +1 -1
- package/src/hooks/useMentionSuggestion.ts +2 -1
- package/src/hooks/useVoiceMessageInput.ts +237 -0
- package/src/index.ts +4 -0
- package/src/libs/MentionManager.tsx +1 -1
- package/src/libs/SBUUtils.ts +5 -0
- package/src/libs/VoiceMessageConfig.ts +28 -0
- package/src/localization/StringSet.type.ts +8 -0
- package/src/localization/createBaseStringSet.ts +27 -11
- package/src/platform/createFileService.expo.ts +10 -0
- package/src/platform/createFileService.native.ts +19 -0
- package/src/platform/createPlayerService.expo.tsx +142 -0
- package/src/platform/createPlayerService.native.tsx +148 -0
- package/src/platform/createRecorderService.expo.tsx +160 -0
- package/src/platform/createRecorderService.native.tsx +170 -0
- package/src/platform/types.ts +114 -1
- package/src/types.ts +1 -1
- package/src/version.ts +1 -1
|
@@ -96,7 +96,7 @@ const useMessageSearch = (sdk, _ref2) => {
|
|
|
96
96
|
const query = getMessageSearchQuery(sdk, {
|
|
97
97
|
keyword,
|
|
98
98
|
channelUrl: channel.url,
|
|
99
|
-
messageTimestampFrom:
|
|
99
|
+
messageTimestampFrom: channel.messageOffsetTimestamp,
|
|
100
100
|
order: _message.MessageSearchOrder.TIMESTAMP,
|
|
101
101
|
queryCreator
|
|
102
102
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_message","_uikitUtils","_MessageSearchResultItem","_interopRequireDefault","_StatusComposition","_messageSearch","_useContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","getMessageSearchQuery","sdk","options","queryCreator","createMessageSearchQuery","createMessageSearchFragment","initModule","MessageSearchModule","createMessageSearchModule","_ref","onPressHeaderLeft","NOOP","channel","renderSearchResultItem","onPressSearchResultItem","padding","useSafeAreaPadding","useSendbirdChat","keyword","setKeyword","search","searchResults","loading","next","error","query","useMessageSearch","renderItem","useFreshCallback","props","createElement","Provider","Header","onChangeKeyword","onPressHeaderRight","LoadingComponent","StatusLoading","Boolean","ErrorComponent","StatusError","onPressRetry","List","messages","flatListProps","keyboardDismissMode","keyboardShouldPersistTaps","onEndReached","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","_ref2","setQuery","useState","setLoading","setError","setSearchResults","queryInProgress","useRef","length","current","channelUrl","url","messageTimestampFrom","Math","max","joinedAt","invitedAt","order","MessageSearchOrder","TIMESTAMP","result","err","Logger","warn","hasNext","prev","_default","exports"],"sources":["createMessageSearchFragment.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\n\nimport { MessageSearchOrder } from '@sendbird/chat/message';\nimport {\n Logger,\n NOOP,\n SendbirdBaseMessage,\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdMessageSearchQuery,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport MessageSearchResultItem from '../components/MessageSearchResultItem';\nimport StatusComposition from '../components/StatusComposition';\nimport { createMessageSearchModule } from '../domain/messageSearch';\nimport type { MessageSearchFragment, MessageSearchModule, MessageSearchProps } from '../domain/messageSearch/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\ntype DefaultMessageSearchQueryParams = {\n keyword: string;\n channelUrl: string;\n messageTimestampFrom: number;\n order: MessageSearchOrder;\n};\n\ntype SearchQueryOptions = DefaultMessageSearchQueryParams & {\n queryCreator?: (params: DefaultMessageSearchQueryParams) => SendbirdMessageSearchQuery;\n};\n\nfunction getMessageSearchQuery(sdk: SendbirdChatSDK, options: SearchQueryOptions) {\n if (options.queryCreator) return options.queryCreator(options);\n return sdk.createMessageSearchQuery(options);\n}\n\nconst createMessageSearchFragment = (initModule?: Partial<MessageSearchModule>): MessageSearchFragment => {\n const MessageSearchModule = createMessageSearchModule(initModule);\n\n return ({ onPressHeaderLeft = NOOP, channel, queryCreator, renderSearchResultItem, onPressSearchResultItem }) => {\n const padding = useSafeAreaPadding(['left', 'right', 'bottom']);\n\n const { sdk } = useSendbirdChat();\n const { keyword, setKeyword, search, searchResults, loading, next, error, query } = useMessageSearch(sdk, {\n channel,\n queryCreator,\n });\n\n const renderItem: MessageSearchProps['List']['renderSearchResultItem'] = useFreshCallback((props) => {\n if (renderSearchResultItem) return renderSearchResultItem(props);\n return <MessageSearchResultItem {...props} />;\n });\n\n return (\n <MessageSearchModule.Provider>\n <MessageSearchModule.Header\n keyword={keyword}\n onChangeKeyword={setKeyword}\n onPressHeaderLeft={onPressHeaderLeft}\n onPressHeaderRight={search}\n />\n <StatusComposition\n loading={loading}\n LoadingComponent={<MessageSearchModule.StatusLoading />}\n error={Boolean(error)}\n ErrorComponent={<MessageSearchModule.StatusError onPressRetry={search} />}\n >\n {query && (\n <MessageSearchModule.List\n channel={channel}\n onPressSearchResultItem={onPressSearchResultItem}\n messages={searchResults}\n renderSearchResultItem={renderItem}\n flatListProps={{\n keyboardDismissMode: 'on-drag',\n keyboardShouldPersistTaps: 'handled',\n onEndReached: next,\n ListEmptyComponent: MessageSearchModule.StatusEmpty,\n contentContainerStyle: { flexGrow: 1, ...padding },\n }}\n />\n )}\n </StatusComposition>\n </MessageSearchModule.Provider>\n );\n };\n};\n\nconst useMessageSearch = (\n sdk: SendbirdChatSDK,\n { channel, queryCreator }: { channel: SendbirdGroupChannel; queryCreator: SearchQueryOptions['queryCreator'] },\n) => {\n const [query, setQuery] = useState<SendbirdMessageSearchQuery>();\n const [keyword, setKeyword] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [searchResults, setSearchResults] = useState<SendbirdBaseMessage[]>([]);\n const queryInProgress = useRef(false);\n\n const search = useFreshCallback(async () => {\n if (keyword.length <= 0) return;\n if (queryInProgress.current) return;\n\n const query = getMessageSearchQuery(sdk, {\n keyword,\n channelUrl: channel.url,\n messageTimestampFrom: Math.max(channel.joinedAt, channel.invitedAt),\n order: MessageSearchOrder.TIMESTAMP,\n queryCreator,\n });\n\n setQuery(query);\n setLoading(true);\n setError(null);\n\n try {\n queryInProgress.current = true;\n const result = await query.next();\n setSearchResults(result);\n } catch (err) {\n Logger.warn('[MessageSearchFragment] search failure', err);\n setError(err);\n } finally {\n queryInProgress.current = false;\n setLoading(false);\n }\n });\n\n const next = useFreshCallback(async () => {\n if (!query?.hasNext) return;\n if (queryInProgress.current) return;\n\n try {\n queryInProgress.current = true;\n const result = await query.next();\n setSearchResults((prev) => [...prev, ...result]);\n } catch (err) {\n Logger.warn('[MessageSearchFragment] next failure', err);\n setError(err);\n } finally {\n queryInProgress.current = false;\n }\n });\n\n return {\n keyword,\n setKeyword,\n\n query,\n loading,\n error,\n searchResults,\n\n search,\n next,\n };\n};\n\nexport default createMessageSearchFragment;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_message","_uikitUtils","_MessageSearchResultItem","_interopRequireDefault","_StatusComposition","_messageSearch","_useContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","getMessageSearchQuery","sdk","options","queryCreator","createMessageSearchQuery","createMessageSearchFragment","initModule","MessageSearchModule","createMessageSearchModule","_ref","onPressHeaderLeft","NOOP","channel","renderSearchResultItem","onPressSearchResultItem","padding","useSafeAreaPadding","useSendbirdChat","keyword","setKeyword","search","searchResults","loading","next","error","query","useMessageSearch","renderItem","useFreshCallback","props","createElement","Provider","Header","onChangeKeyword","onPressHeaderRight","LoadingComponent","StatusLoading","Boolean","ErrorComponent","StatusError","onPressRetry","List","messages","flatListProps","keyboardDismissMode","keyboardShouldPersistTaps","onEndReached","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","_ref2","setQuery","useState","setLoading","setError","setSearchResults","queryInProgress","useRef","length","current","channelUrl","url","messageTimestampFrom","messageOffsetTimestamp","order","MessageSearchOrder","TIMESTAMP","result","err","Logger","warn","hasNext","prev","_default","exports"],"sources":["createMessageSearchFragment.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\n\nimport { MessageSearchOrder } from '@sendbird/chat/message';\nimport {\n Logger,\n NOOP,\n SendbirdBaseMessage,\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdMessageSearchQuery,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport MessageSearchResultItem from '../components/MessageSearchResultItem';\nimport StatusComposition from '../components/StatusComposition';\nimport { createMessageSearchModule } from '../domain/messageSearch';\nimport type { MessageSearchFragment, MessageSearchModule, MessageSearchProps } from '../domain/messageSearch/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\ntype DefaultMessageSearchQueryParams = {\n keyword: string;\n channelUrl: string;\n messageTimestampFrom: number;\n order: MessageSearchOrder;\n};\n\ntype SearchQueryOptions = DefaultMessageSearchQueryParams & {\n queryCreator?: (params: DefaultMessageSearchQueryParams) => SendbirdMessageSearchQuery;\n};\n\nfunction getMessageSearchQuery(sdk: SendbirdChatSDK, options: SearchQueryOptions) {\n if (options.queryCreator) return options.queryCreator(options);\n return sdk.createMessageSearchQuery(options);\n}\n\nconst createMessageSearchFragment = (initModule?: Partial<MessageSearchModule>): MessageSearchFragment => {\n const MessageSearchModule = createMessageSearchModule(initModule);\n\n return ({ onPressHeaderLeft = NOOP, channel, queryCreator, renderSearchResultItem, onPressSearchResultItem }) => {\n const padding = useSafeAreaPadding(['left', 'right', 'bottom']);\n\n const { sdk } = useSendbirdChat();\n const { keyword, setKeyword, search, searchResults, loading, next, error, query } = useMessageSearch(sdk, {\n channel,\n queryCreator,\n });\n\n const renderItem: MessageSearchProps['List']['renderSearchResultItem'] = useFreshCallback((props) => {\n if (renderSearchResultItem) return renderSearchResultItem(props);\n return <MessageSearchResultItem {...props} />;\n });\n\n return (\n <MessageSearchModule.Provider>\n <MessageSearchModule.Header\n keyword={keyword}\n onChangeKeyword={setKeyword}\n onPressHeaderLeft={onPressHeaderLeft}\n onPressHeaderRight={search}\n />\n <StatusComposition\n loading={loading}\n LoadingComponent={<MessageSearchModule.StatusLoading />}\n error={Boolean(error)}\n ErrorComponent={<MessageSearchModule.StatusError onPressRetry={search} />}\n >\n {query && (\n <MessageSearchModule.List\n channel={channel}\n onPressSearchResultItem={onPressSearchResultItem}\n messages={searchResults}\n renderSearchResultItem={renderItem}\n flatListProps={{\n keyboardDismissMode: 'on-drag',\n keyboardShouldPersistTaps: 'handled',\n onEndReached: next,\n ListEmptyComponent: MessageSearchModule.StatusEmpty,\n contentContainerStyle: { flexGrow: 1, ...padding },\n }}\n />\n )}\n </StatusComposition>\n </MessageSearchModule.Provider>\n );\n };\n};\n\nconst useMessageSearch = (\n sdk: SendbirdChatSDK,\n { channel, queryCreator }: { channel: SendbirdGroupChannel; queryCreator: SearchQueryOptions['queryCreator'] },\n) => {\n const [query, setQuery] = useState<SendbirdMessageSearchQuery>();\n const [keyword, setKeyword] = useState('');\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<unknown>(null);\n const [searchResults, setSearchResults] = useState<SendbirdBaseMessage[]>([]);\n const queryInProgress = useRef(false);\n\n const search = useFreshCallback(async () => {\n if (keyword.length <= 0) return;\n if (queryInProgress.current) return;\n\n const query = getMessageSearchQuery(sdk, {\n keyword,\n channelUrl: channel.url,\n messageTimestampFrom: channel.messageOffsetTimestamp,\n order: MessageSearchOrder.TIMESTAMP,\n queryCreator,\n });\n\n setQuery(query);\n setLoading(true);\n setError(null);\n\n try {\n queryInProgress.current = true;\n const result = await query.next();\n setSearchResults(result);\n } catch (err) {\n Logger.warn('[MessageSearchFragment] search failure', err);\n setError(err);\n } finally {\n queryInProgress.current = false;\n setLoading(false);\n }\n });\n\n const next = useFreshCallback(async () => {\n if (!query?.hasNext) return;\n if (queryInProgress.current) return;\n\n try {\n queryInProgress.current = true;\n const result = await query.next();\n setSearchResults((prev) => [...prev, ...result]);\n } catch (err) {\n Logger.warn('[MessageSearchFragment] next failure', err);\n setError(err);\n } finally {\n queryInProgress.current = false;\n }\n });\n\n return {\n keyword,\n setKeyword,\n\n query,\n loading,\n error,\n searchResults,\n\n search,\n next,\n };\n};\n\nexport default createMessageSearchFragment;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useChannelInputItems = void 0;
|
|
7
|
+
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
|
|
8
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
9
|
+
var _SBUError = _interopRequireDefault(require("../libs/SBUError"));
|
|
10
|
+
var _SBUUtils = _interopRequireDefault(require("../libs/SBUUtils"));
|
|
11
|
+
var _useContext = require("./useContext");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
const useChannelInputItems = (channel, sendFileMessage) => {
|
|
14
|
+
const {
|
|
15
|
+
sbOptions,
|
|
16
|
+
imageCompressionConfig
|
|
17
|
+
} = (0, _useContext.useSendbirdChat)();
|
|
18
|
+
const {
|
|
19
|
+
STRINGS
|
|
20
|
+
} = (0, _useContext.useLocalization)();
|
|
21
|
+
const {
|
|
22
|
+
fileService,
|
|
23
|
+
mediaService
|
|
24
|
+
} = (0, _useContext.usePlatformService)();
|
|
25
|
+
const {
|
|
26
|
+
alert
|
|
27
|
+
} = (0, _uikitReactNativeFoundation.useAlert)();
|
|
28
|
+
const toast = (0, _uikitReactNativeFoundation.useToast)();
|
|
29
|
+
const sheetItems = [];
|
|
30
|
+
const input = (0, _uikitUtils.useIIFE)(() => {
|
|
31
|
+
switch (true) {
|
|
32
|
+
case channel.isOpenChannel():
|
|
33
|
+
return sbOptions.uikit.openChannel.channel.input;
|
|
34
|
+
case channel.isGroupChannel():
|
|
35
|
+
return sbOptions.uikit.groupChannel.channel.input;
|
|
36
|
+
default:
|
|
37
|
+
return {
|
|
38
|
+
enableDocument: true,
|
|
39
|
+
camera: {
|
|
40
|
+
enablePhoto: true,
|
|
41
|
+
enableVideo: true
|
|
42
|
+
},
|
|
43
|
+
gallery: {
|
|
44
|
+
enablePhoto: true,
|
|
45
|
+
enableVideo: true
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
if (input.camera.enablePhoto) {
|
|
51
|
+
sheetItems.push({
|
|
52
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_PHOTO,
|
|
53
|
+
icon: 'camera',
|
|
54
|
+
onPress: async () => {
|
|
55
|
+
const mediaFile = await fileService.openCamera({
|
|
56
|
+
mediaType: 'photo',
|
|
57
|
+
onOpenFailure: error => {
|
|
58
|
+
if (error.code === _SBUError.default.CODE.ERR_PERMISSIONS_DENIED) {
|
|
59
|
+
alert({
|
|
60
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
61
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
62
|
+
buttons: [{
|
|
63
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
64
|
+
onPress: () => _SBUUtils.default.openSettings()
|
|
65
|
+
}]
|
|
66
|
+
});
|
|
67
|
+
} else {
|
|
68
|
+
toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
if (mediaFile) {
|
|
73
|
+
// Image compression
|
|
74
|
+
if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.type, sbOptions.chat.imageCompressionEnabled)) {
|
|
75
|
+
await _SBUUtils.default.safeRun(async () => {
|
|
76
|
+
const compressed = await mediaService.compressImage({
|
|
77
|
+
uri: mediaFile.uri,
|
|
78
|
+
maxWidth: imageCompressionConfig.width,
|
|
79
|
+
maxHeight: imageCompressionConfig.height,
|
|
80
|
+
compressionRate: imageCompressionConfig.compressionRate
|
|
81
|
+
});
|
|
82
|
+
if (compressed) {
|
|
83
|
+
mediaFile.uri = compressed.uri;
|
|
84
|
+
mediaFile.size = compressed.size;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
sendFileMessage(mediaFile);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (input.camera.enableVideo) {
|
|
94
|
+
sheetItems.push({
|
|
95
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_VIDEO,
|
|
96
|
+
icon: 'camera',
|
|
97
|
+
onPress: async () => {
|
|
98
|
+
const mediaFile = await fileService.openCamera({
|
|
99
|
+
mediaType: 'video',
|
|
100
|
+
onOpenFailure: error => {
|
|
101
|
+
if (error.code === _SBUError.default.CODE.ERR_PERMISSIONS_DENIED) {
|
|
102
|
+
alert({
|
|
103
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
104
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
105
|
+
buttons: [{
|
|
106
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
107
|
+
onPress: () => _SBUUtils.default.openSettings()
|
|
108
|
+
}]
|
|
109
|
+
});
|
|
110
|
+
} else {
|
|
111
|
+
toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
if (mediaFile) {
|
|
116
|
+
sendFileMessage(mediaFile);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (input.gallery.enablePhoto || input.gallery.enableVideo) {
|
|
122
|
+
const mediaType = (() => {
|
|
123
|
+
switch (true) {
|
|
124
|
+
case input.gallery.enablePhoto && input.gallery.enableVideo:
|
|
125
|
+
return 'all';
|
|
126
|
+
case input.gallery.enablePhoto && !input.gallery.enableVideo:
|
|
127
|
+
return 'photo';
|
|
128
|
+
case !input.gallery.enablePhoto && input.gallery.enableVideo:
|
|
129
|
+
return 'video';
|
|
130
|
+
default:
|
|
131
|
+
return 'all';
|
|
132
|
+
}
|
|
133
|
+
})();
|
|
134
|
+
sheetItems.push({
|
|
135
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY,
|
|
136
|
+
icon: 'photo',
|
|
137
|
+
onPress: async () => {
|
|
138
|
+
const mediaFiles = await fileService.openMediaLibrary({
|
|
139
|
+
selectionLimit: 1,
|
|
140
|
+
mediaType,
|
|
141
|
+
onOpenFailure: error => {
|
|
142
|
+
if (error.code === _SBUError.default.CODE.ERR_PERMISSIONS_DENIED) {
|
|
143
|
+
alert({
|
|
144
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
145
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_DEVICE_STORAGE, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
146
|
+
buttons: [{
|
|
147
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
148
|
+
onPress: () => _SBUUtils.default.openSettings()
|
|
149
|
+
}]
|
|
150
|
+
});
|
|
151
|
+
} else {
|
|
152
|
+
toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
if (mediaFiles && mediaFiles[0]) {
|
|
157
|
+
const mediaFile = mediaFiles[0];
|
|
158
|
+
|
|
159
|
+
// Image compression
|
|
160
|
+
if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.type, sbOptions.chat.imageCompressionEnabled)) {
|
|
161
|
+
await _SBUUtils.default.safeRun(async () => {
|
|
162
|
+
const compressed = await mediaService.compressImage({
|
|
163
|
+
uri: mediaFile.uri,
|
|
164
|
+
maxWidth: imageCompressionConfig.width,
|
|
165
|
+
maxHeight: imageCompressionConfig.height,
|
|
166
|
+
compressionRate: imageCompressionConfig.compressionRate
|
|
167
|
+
});
|
|
168
|
+
if (compressed) {
|
|
169
|
+
mediaFile.uri = compressed.uri;
|
|
170
|
+
mediaFile.size = compressed.size;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
sendFileMessage(mediaFile);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
if (input.enableDocument) {
|
|
180
|
+
sheetItems.push({
|
|
181
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_FILES,
|
|
182
|
+
icon: 'document',
|
|
183
|
+
onPress: async () => {
|
|
184
|
+
const documentFile = await fileService.openDocument({
|
|
185
|
+
onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error')
|
|
186
|
+
});
|
|
187
|
+
if (documentFile) {
|
|
188
|
+
// Image compression
|
|
189
|
+
if ((0, _uikitUtils.isImage)(documentFile.uri, documentFile.type) && (0, _uikitUtils.shouldCompressImage)(documentFile.type, sbOptions.chat.imageCompressionEnabled)) {
|
|
190
|
+
await _SBUUtils.default.safeRun(async () => {
|
|
191
|
+
const compressed = await mediaService.compressImage({
|
|
192
|
+
uri: documentFile.uri,
|
|
193
|
+
maxWidth: imageCompressionConfig.width,
|
|
194
|
+
maxHeight: imageCompressionConfig.height,
|
|
195
|
+
compressionRate: imageCompressionConfig.compressionRate
|
|
196
|
+
});
|
|
197
|
+
if (compressed) {
|
|
198
|
+
documentFile.uri = compressed.uri;
|
|
199
|
+
documentFile.size = compressed.size;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
sendFileMessage(documentFile);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
return sheetItems;
|
|
209
|
+
};
|
|
210
|
+
exports.useChannelInputItems = useChannelInputItems;
|
|
211
|
+
//# sourceMappingURL=useChannelInputItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_uikitReactNativeFoundation","require","_uikitUtils","_SBUError","_interopRequireDefault","_SBUUtils","_useContext","obj","__esModule","default","useChannelInputItems","channel","sendFileMessage","sbOptions","imageCompressionConfig","useSendbirdChat","STRINGS","useLocalization","fileService","mediaService","usePlatformService","alert","useAlert","toast","useToast","sheetItems","input","useIIFE","isOpenChannel","uikit","openChannel","isGroupChannel","groupChannel","enableDocument","camera","enablePhoto","enableVideo","gallery","push","title","LABELS","CHANNEL_INPUT_ATTACHMENT_CAMERA_PHOTO","icon","onPress","mediaFile","openCamera","mediaType","onOpenFailure","error","code","SBUError","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","text","ALERT_PERMISSIONS_OK","SBUUtils","openSettings","show","TOAST","OPEN_CAMERA_ERROR","isImage","uri","type","shouldCompressImage","chat","imageCompressionEnabled","safeRun","compressed","compressImage","maxWidth","width","maxHeight","height","compressionRate","size","CHANNEL_INPUT_ATTACHMENT_CAMERA_VIDEO","CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY","mediaFiles","openMediaLibrary","selectionLimit","PERMISSION_DEVICE_STORAGE","OPEN_PHOTO_LIBRARY_ERROR","CHANNEL_INPUT_ATTACHMENT_FILES","documentFile","openDocument","OPEN_FILES_ERROR","exports"],"sources":["useChannelInputItems.ts"],"sourcesContent":["import { BottomSheetItem, useAlert, useToast } from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdChannel, isImage, shouldCompressImage, useIIFE } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport SBUUtils from '../libs/SBUUtils';\nimport { FileType } from '../platform/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from './useContext';\n\nexport const useChannelInputItems = (channel: SendbirdChannel, sendFileMessage: (file: FileType) => void) => {\n const { sbOptions, imageCompressionConfig } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { fileService, mediaService } = usePlatformService();\n const { alert } = useAlert();\n const toast = useToast();\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const input = useIIFE(() => {\n switch (true) {\n case channel.isOpenChannel():\n return sbOptions.uikit.openChannel.channel.input;\n case channel.isGroupChannel():\n return sbOptions.uikit.groupChannel.channel.input;\n default:\n return {\n enableDocument: true,\n camera: { enablePhoto: true, enableVideo: true },\n gallery: { enablePhoto: true, enableVideo: true },\n };\n }\n });\n\n if (input.camera.enablePhoto) {\n sheetItems.push({\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_PHOTO,\n icon: 'camera',\n onPress: async () => {\n const mediaFile = await fileService.openCamera({\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (mediaFile) {\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.type, sbOptions.chat.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(mediaFile);\n }\n },\n });\n }\n\n if (input.camera.enableVideo) {\n sheetItems.push({\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_VIDEO,\n icon: 'camera',\n onPress: async () => {\n const mediaFile = await fileService.openCamera({\n mediaType: 'video',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (mediaFile) {\n sendFileMessage(mediaFile);\n }\n },\n });\n }\n\n if (input.gallery.enablePhoto || input.gallery.enableVideo) {\n const mediaType = (() => {\n switch (true) {\n case input.gallery.enablePhoto && input.gallery.enableVideo:\n return 'all';\n case input.gallery.enablePhoto && !input.gallery.enableVideo:\n return 'photo';\n case !input.gallery.enablePhoto && input.gallery.enableVideo:\n return 'video';\n default:\n return 'all';\n }\n })();\n\n sheetItems.push({\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY,\n icon: 'photo',\n onPress: async () => {\n const mediaFiles = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType,\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n\n if (mediaFiles && mediaFiles[0]) {\n const mediaFile = mediaFiles[0];\n\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.type, sbOptions.chat.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(mediaFile);\n }\n },\n });\n }\n\n if (input.enableDocument) {\n sheetItems.push({\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_FILES,\n icon: 'document',\n onPress: async () => {\n const documentFile = await fileService.openDocument({\n onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (documentFile) {\n // Image compression\n if (\n isImage(documentFile.uri, documentFile.type) &&\n shouldCompressImage(documentFile.type, sbOptions.chat.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: documentFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n documentFile.uri = compressed.uri;\n documentFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(documentFile);\n }\n },\n });\n }\n\n return sheetItems;\n};\n"],"mappings":"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"}
|
|
@@ -70,7 +70,7 @@ const useConnection = () => {
|
|
|
70
70
|
_uikitUtils.Logger.warn('[useConnection]', 'clear cached-data');
|
|
71
71
|
await sdk.clearCachedData().catch(e => _uikitUtils.Logger.warn('[useConnection]', 'clear cached-data failure', e));
|
|
72
72
|
} else if (sdk.currentUser) {
|
|
73
|
-
await initEmoji(sdk, emojiManager);
|
|
73
|
+
await Promise.allSettled([initEmoji(sdk, emojiManager), initDashboardConfigs(sdk)]);
|
|
74
74
|
_uikitUtils.Logger.debug('[useConnection]', 'connected! (offline)');
|
|
75
75
|
setCurrentUser(sdk.currentUser);
|
|
76
76
|
return sdk.currentUser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_uikitTools","_uikitUtils","_useContext","_usePushTokenRegistration","_interopRequireDefault","obj","__esModule","default","cacheRestrictCodes","isCacheRestrictedError","error","some","code","initEmoji","sdk","emojiManager","_sdk$appInfo","init","appInfo","emojiHash","container","getAllEmoji","useConnection","initDashboardConfigs","useUIKitConfig","setCurrentUser","sbOptions","useSendbirdChat","registerPushTokenForCurrentUser","unregisterPushTokenForCurrentUser","usePushTokenRegistration","connect","useCallback","userId","opts","Logger","debug","user","accessToken","nickname","updateCurrentUserInfo","then","updatedUser","catch","e","warn","chat","useUserIdForNicknameEnabled","autoPushTokenRegistrationEnabled","Promise","allSettled","isCacheEnabled","message","clearCachedData","currentUser","disconnect","undefined","reconnect","_default","exports"],"sources":["useConnection.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useUIKitConfig } from '@sendbird/uikit-tools';\nimport { Logger, SendbirdChatSDK, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport { useSendbirdChat } from './useContext';\nimport usePushTokenRegistration from './usePushTokenRegistration';\n\ntype ConnectOptions = { nickname?: string; accessToken?: string };\n\nconst cacheRestrictCodes = [400300, 400301, 400302, 400310];\nfunction isCacheRestrictedError(error: SendbirdError) {\n return cacheRestrictCodes.some((code) => error.code === code);\n}\n\nasync function initEmoji(sdk: SendbirdChatSDK, emojiManager: EmojiManager) {\n await emojiManager.init();\n if (sdk.appInfo?.emojiHash !== emojiManager.emojiHash) {\n try {\n const container = await sdk.getAllEmoji();\n await emojiManager.init(container);\n } catch {}\n }\n}\n\nconst useConnection = () => {\n const { initDashboardConfigs } = useUIKitConfig();\n const { sdk, emojiManager, setCurrentUser, sbOptions } = useSendbirdChat();\n const { registerPushTokenForCurrentUser, unregisterPushTokenForCurrentUser } = usePushTokenRegistration();\n\n const connect = useCallback(\n async (userId: string, opts?: ConnectOptions): Promise<SendbirdUser> => {\n try {\n Logger.debug('[useConnection]', 'connect start:', userId);\n let user = await sdk.connect(userId, opts?.accessToken);\n\n if (opts?.nickname) {\n Logger.debug('[useConnection]', 'nickname-sync start:', opts.nickname);\n await sdk\n .updateCurrentUserInfo({ nickname: opts.nickname })\n .then((updatedUser) => (user = updatedUser))\n .catch((e) => Logger.warn('[useConnection]', 'nickname-sync failure', e));\n } else if (sbOptions.chat.useUserIdForNicknameEnabled) {\n await sdk.updateCurrentUserInfo({ nickname: userId }).then((updatedUser) => (user = updatedUser));\n }\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, register for current user');\n await registerPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken Registration failure', e);\n });\n }\n\n await Promise.allSettled([initEmoji(sdk, emojiManager), initDashboardConfigs(sdk)]);\n\n Logger.debug('[useConnection]', 'connected! (online)');\n setCurrentUser(user);\n\n return user;\n } catch (e) {\n const error = e as unknown as SendbirdError;\n\n if (sdk.isCacheEnabled) {\n if (isCacheRestrictedError(error)) {\n Logger.warn('[useConnection]', 'offline connect restricted', error.message, error.code);\n Logger.warn('[useConnection]', 'clear cached-data');\n await sdk.clearCachedData().catch((e) => Logger.warn('[useConnection]', 'clear cached-data failure', e));\n } else if (sdk.currentUser) {\n await initEmoji(sdk, emojiManager);\n\n Logger.debug('[useConnection]', 'connected! (offline)');\n setCurrentUser(sdk.currentUser);\n return sdk.currentUser;\n }\n }\n\n Logger.warn('[useConnection]', 'connect failure', error.message, error.code);\n throw error;\n }\n },\n [sdk, registerPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled],\n );\n\n const disconnect = useCallback(async () => {\n Logger.debug('[useConnection]', 'disconnect start');\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, unregister for current user');\n await unregisterPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken unregister failure', e);\n });\n }\n\n await sdk.disconnect().then(() => setCurrentUser(undefined));\n Logger.debug('[useConnection]', 'disconnected!');\n }, [sdk, unregisterPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled]);\n\n return { connect, disconnect, reconnect: () => sdk.reconnect() };\n};\n\nexport default useConnection;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["_react","require","_uikitTools","_uikitUtils","_useContext","_usePushTokenRegistration","_interopRequireDefault","obj","__esModule","default","cacheRestrictCodes","isCacheRestrictedError","error","some","code","initEmoji","sdk","emojiManager","_sdk$appInfo","init","appInfo","emojiHash","container","getAllEmoji","useConnection","initDashboardConfigs","useUIKitConfig","setCurrentUser","sbOptions","useSendbirdChat","registerPushTokenForCurrentUser","unregisterPushTokenForCurrentUser","usePushTokenRegistration","connect","useCallback","userId","opts","Logger","debug","user","accessToken","nickname","updateCurrentUserInfo","then","updatedUser","catch","e","warn","chat","useUserIdForNicknameEnabled","autoPushTokenRegistrationEnabled","Promise","allSettled","isCacheEnabled","message","clearCachedData","currentUser","disconnect","undefined","reconnect","_default","exports"],"sources":["useConnection.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { useUIKitConfig } from '@sendbird/uikit-tools';\nimport { Logger, SendbirdChatSDK, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport { useSendbirdChat } from './useContext';\nimport usePushTokenRegistration from './usePushTokenRegistration';\n\ntype ConnectOptions = { nickname?: string; accessToken?: string };\n\nconst cacheRestrictCodes = [400300, 400301, 400302, 400310];\nfunction isCacheRestrictedError(error: SendbirdError) {\n return cacheRestrictCodes.some((code) => error.code === code);\n}\n\nasync function initEmoji(sdk: SendbirdChatSDK, emojiManager: EmojiManager) {\n await emojiManager.init();\n if (sdk.appInfo?.emojiHash !== emojiManager.emojiHash) {\n try {\n const container = await sdk.getAllEmoji();\n await emojiManager.init(container);\n } catch {}\n }\n}\n\nconst useConnection = () => {\n const { initDashboardConfigs } = useUIKitConfig();\n const { sdk, emojiManager, setCurrentUser, sbOptions } = useSendbirdChat();\n const { registerPushTokenForCurrentUser, unregisterPushTokenForCurrentUser } = usePushTokenRegistration();\n\n const connect = useCallback(\n async (userId: string, opts?: ConnectOptions): Promise<SendbirdUser> => {\n try {\n Logger.debug('[useConnection]', 'connect start:', userId);\n let user = await sdk.connect(userId, opts?.accessToken);\n\n if (opts?.nickname) {\n Logger.debug('[useConnection]', 'nickname-sync start:', opts.nickname);\n await sdk\n .updateCurrentUserInfo({ nickname: opts.nickname })\n .then((updatedUser) => (user = updatedUser))\n .catch((e) => Logger.warn('[useConnection]', 'nickname-sync failure', e));\n } else if (sbOptions.chat.useUserIdForNicknameEnabled) {\n await sdk.updateCurrentUserInfo({ nickname: userId }).then((updatedUser) => (user = updatedUser));\n }\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, register for current user');\n await registerPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken Registration failure', e);\n });\n }\n\n await Promise.allSettled([initEmoji(sdk, emojiManager), initDashboardConfigs(sdk)]);\n\n Logger.debug('[useConnection]', 'connected! (online)');\n setCurrentUser(user);\n\n return user;\n } catch (e) {\n const error = e as unknown as SendbirdError;\n\n if (sdk.isCacheEnabled) {\n if (isCacheRestrictedError(error)) {\n Logger.warn('[useConnection]', 'offline connect restricted', error.message, error.code);\n Logger.warn('[useConnection]', 'clear cached-data');\n await sdk.clearCachedData().catch((e) => Logger.warn('[useConnection]', 'clear cached-data failure', e));\n } else if (sdk.currentUser) {\n await Promise.allSettled([initEmoji(sdk, emojiManager), initDashboardConfigs(sdk)]);\n\n Logger.debug('[useConnection]', 'connected! (offline)');\n setCurrentUser(sdk.currentUser);\n return sdk.currentUser;\n }\n }\n\n Logger.warn('[useConnection]', 'connect failure', error.message, error.code);\n throw error;\n }\n },\n [sdk, registerPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled],\n );\n\n const disconnect = useCallback(async () => {\n Logger.debug('[useConnection]', 'disconnect start');\n\n if (sbOptions.chat.autoPushTokenRegistrationEnabled) {\n Logger.debug('[useConnection]', 'autoPushTokenRegistration enabled, unregister for current user');\n await unregisterPushTokenForCurrentUser().catch((e) => {\n Logger.warn('[useConnection]', 'autoPushToken unregister failure', e);\n });\n }\n\n await sdk.disconnect().then(() => setCurrentUser(undefined));\n Logger.debug('[useConnection]', 'disconnected!');\n }, [sdk, unregisterPushTokenForCurrentUser, sbOptions.chat.autoPushTokenRegistrationEnabled]);\n\n return { connect, disconnect, reconnect: () => sdk.reconnect() };\n};\n\nexport default useConnection;\n"],"mappings":"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"}
|
|
@@ -86,7 +86,7 @@ const useMentionSuggestion = params => {
|
|
|
86
86
|
return (_a$nickname = a.nickname) === null || _a$nickname === void 0 ? void 0 : _a$nickname.localeCompare(b.nickname);
|
|
87
87
|
}).filter(member => {
|
|
88
88
|
var _member$nickname;
|
|
89
|
-
return ((_member$nickname = member.nickname) === null || _member$nickname === void 0 ? void 0 : _member$nickname.toLowerCase().startsWith(searchString.toLowerCase())) && member.userId !== (currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId);
|
|
89
|
+
return ((_member$nickname = member.nickname) === null || _member$nickname === void 0 ? void 0 : _member$nickname.toLowerCase().startsWith(searchString.toLowerCase())) && member.userId !== (currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) && member.isActive;
|
|
90
90
|
}).slice(0, mentionManager.config.suggestionLimit);
|
|
91
91
|
}
|
|
92
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_uikitChatHooks","_uikitUtils","_useContext","useMentionSuggestion","params","text","selection","channel","mentionedUsers","freshChannel","setFreshChannel","useState","useAsyncEffect","refresh","url","id","useUniqHandlerId","useChannelHandler","sdk","onUserJoined","eventChannel","isDifferentChannel","onUserLeft","onUserBanned","isGroupChannel","mentionManager","currentUser","useSendbirdChat","members","setMembers","searchStringRangeRef","useRef","start","end","searchLimitedRef","updateSearchStringRange","selectionIndex","searchString","current","getSearchStringRangeInText","updateSearchLimited","mentionCount","mentionLimit","resetRefs","fetchMembers","selectionRanged","selectionContainsMentionedUser","some","it","rangeHelpers","overlaps","range","isTriggered","isValidSearchString","getSearchString","limited","length","config","isSuper","createMemberListQuery","nicknameStartsWithFilter","limit","suggestionLimit","next","then","filter","member","userId","slice","sort","a","b","_a$nickname","nickname","localeCompare","_member$nickname","toLowerCase","startsWith","useDebounceEffect","catch","debounceMills","reset","useCallback","searchStringRange","searchLimited","_default","exports","default"],"sources":["useMentionSuggestion.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMember, SendbirdUser } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useAsyncEffect, useDebounceEffect, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../hooks/useContext';\nimport type { Range } from '../types';\n\nconst useMentionSuggestion = (params: {\n text: string;\n selection: Range;\n mentionedUsers: { user: SendbirdUser; range: Range }[];\n sdk: SendbirdChatSDK;\n channel: SendbirdGroupChannel;\n}) => {\n const { text, selection, channel, mentionedUsers } = params;\n\n const [freshChannel, setFreshChannel] = useState(channel);\n\n useAsyncEffect(async () => {\n setFreshChannel(await channel.refresh());\n }, [channel.url]);\n\n const id = useUniqHandlerId('useMentionSuggestion');\n\n useChannelHandler(params.sdk, id, {\n onUserJoined(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserLeft(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserBanned(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n if (!eventChannel.isGroupChannel()) return;\n setFreshChannel(eventChannel);\n },\n });\n\n const { mentionManager, currentUser } = useSendbirdChat();\n const [members, setMembers] = useState<SendbirdMember[]>([]);\n\n const searchStringRangeRef = useRef<Range>({ start: 0, end: 0 });\n const searchLimitedRef = useRef(false);\n\n const updateSearchStringRange = (selectionIndex: number, searchString: string) => {\n searchStringRangeRef.current = mentionManager.getSearchStringRangeInText(selectionIndex, searchString);\n return searchStringRangeRef.current;\n };\n const updateSearchLimited = (mentionCount: number, mentionLimit: number) => {\n searchLimitedRef.current = mentionCount >= mentionLimit;\n return searchLimitedRef.current;\n };\n const resetRefs = () => {\n searchLimitedRef.current = false;\n searchStringRangeRef.current = { start: 0, end: 0 };\n };\n\n const fetchMembers = async (): Promise<SendbirdMember[]> => {\n resetRefs();\n\n const selectionRanged = selection.start !== selection.end;\n if (selectionRanged) return [];\n\n const selectionContainsMentionedUser = mentionedUsers.some((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, selection, 'underMore'),\n );\n if (selectionContainsMentionedUser) return [];\n\n const { isTriggered, isValidSearchString, searchString } = mentionManager.getSearchString(text, selection.start);\n if (!isTriggered() || !isValidSearchString()) return [];\n\n const limited = updateSearchLimited(mentionedUsers.length, mentionManager.config.mentionLimit);\n if (limited) return [];\n\n updateSearchStringRange(selection.start, searchString);\n\n if (freshChannel.isSuper) {\n return freshChannel\n .createMemberListQuery({\n nicknameStartsWithFilter: searchString,\n limit: mentionManager.config.suggestionLimit + 1,\n })\n .next()\n .then((members) => members.filter((member) => member.userId !== currentUser?.userId))\n .then((members) => members.slice(0, mentionManager.config.suggestionLimit));\n } else {\n return freshChannel.members\n .sort((a, b) => a.nickname?.localeCompare(b.nickname))\n .filter(\n (member) =>\n member.nickname?.toLowerCase().startsWith(searchString.toLowerCase()) &&\n member.userId !== currentUser?.userId,\n )\n .slice(0, mentionManager.config.suggestionLimit);\n }\n };\n\n useDebounceEffect(\n () => {\n return fetchMembers()\n .then(setMembers)\n .catch(() => setMembers([]));\n },\n mentionManager.config.debounceMills,\n [text, selection],\n );\n\n return {\n members,\n reset: useCallback(() => setMembers([]), []),\n searchStringRange: searchStringRangeRef.current,\n searchLimited: searchLimitedRef.current,\n };\n};\n\nexport default useMentionSuggestion;\n"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["_react","require","_uikitChatHooks","_uikitUtils","_useContext","useMentionSuggestion","params","text","selection","channel","mentionedUsers","freshChannel","setFreshChannel","useState","useAsyncEffect","refresh","url","id","useUniqHandlerId","useChannelHandler","sdk","onUserJoined","eventChannel","isDifferentChannel","onUserLeft","onUserBanned","isGroupChannel","mentionManager","currentUser","useSendbirdChat","members","setMembers","searchStringRangeRef","useRef","start","end","searchLimitedRef","updateSearchStringRange","selectionIndex","searchString","current","getSearchStringRangeInText","updateSearchLimited","mentionCount","mentionLimit","resetRefs","fetchMembers","selectionRanged","selectionContainsMentionedUser","some","it","rangeHelpers","overlaps","range","isTriggered","isValidSearchString","getSearchString","limited","length","config","isSuper","createMemberListQuery","nicknameStartsWithFilter","limit","suggestionLimit","next","then","filter","member","userId","slice","sort","a","b","_a$nickname","nickname","localeCompare","_member$nickname","toLowerCase","startsWith","isActive","useDebounceEffect","catch","debounceMills","reset","useCallback","searchStringRange","searchLimited","_default","exports","default"],"sources":["useMentionSuggestion.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMember, SendbirdUser } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useAsyncEffect, useDebounceEffect, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../hooks/useContext';\nimport type { Range } from '../types';\n\nconst useMentionSuggestion = (params: {\n text: string;\n selection: Range;\n mentionedUsers: { user: SendbirdUser; range: Range }[];\n sdk: SendbirdChatSDK;\n channel: SendbirdGroupChannel;\n}) => {\n const { text, selection, channel, mentionedUsers } = params;\n\n const [freshChannel, setFreshChannel] = useState(channel);\n\n useAsyncEffect(async () => {\n setFreshChannel(await channel.refresh());\n }, [channel.url]);\n\n const id = useUniqHandlerId('useMentionSuggestion');\n\n useChannelHandler(params.sdk, id, {\n onUserJoined(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserLeft(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n setFreshChannel(eventChannel);\n },\n onUserBanned(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n if (!eventChannel.isGroupChannel()) return;\n setFreshChannel(eventChannel);\n },\n });\n\n const { mentionManager, currentUser } = useSendbirdChat();\n const [members, setMembers] = useState<SendbirdMember[]>([]);\n\n const searchStringRangeRef = useRef<Range>({ start: 0, end: 0 });\n const searchLimitedRef = useRef(false);\n\n const updateSearchStringRange = (selectionIndex: number, searchString: string) => {\n searchStringRangeRef.current = mentionManager.getSearchStringRangeInText(selectionIndex, searchString);\n return searchStringRangeRef.current;\n };\n const updateSearchLimited = (mentionCount: number, mentionLimit: number) => {\n searchLimitedRef.current = mentionCount >= mentionLimit;\n return searchLimitedRef.current;\n };\n const resetRefs = () => {\n searchLimitedRef.current = false;\n searchStringRangeRef.current = { start: 0, end: 0 };\n };\n\n const fetchMembers = async (): Promise<SendbirdMember[]> => {\n resetRefs();\n\n const selectionRanged = selection.start !== selection.end;\n if (selectionRanged) return [];\n\n const selectionContainsMentionedUser = mentionedUsers.some((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, selection, 'underMore'),\n );\n if (selectionContainsMentionedUser) return [];\n\n const { isTriggered, isValidSearchString, searchString } = mentionManager.getSearchString(text, selection.start);\n if (!isTriggered() || !isValidSearchString()) return [];\n\n const limited = updateSearchLimited(mentionedUsers.length, mentionManager.config.mentionLimit);\n if (limited) return [];\n\n updateSearchStringRange(selection.start, searchString);\n\n if (freshChannel.isSuper) {\n return freshChannel\n .createMemberListQuery({\n nicknameStartsWithFilter: searchString,\n limit: mentionManager.config.suggestionLimit + 1,\n })\n .next()\n .then((members) => members.filter((member) => member.userId !== currentUser?.userId))\n .then((members) => members.slice(0, mentionManager.config.suggestionLimit));\n } else {\n return freshChannel.members\n .sort((a, b) => a.nickname?.localeCompare(b.nickname))\n .filter(\n (member) =>\n member.nickname?.toLowerCase().startsWith(searchString.toLowerCase()) &&\n member.userId !== currentUser?.userId &&\n member.isActive,\n )\n .slice(0, mentionManager.config.suggestionLimit);\n }\n };\n\n useDebounceEffect(\n () => {\n return fetchMembers()\n .then(setMembers)\n .catch(() => setMembers([]));\n },\n mentionManager.config.debounceMills,\n [text, selection],\n );\n\n return {\n members,\n reset: useCallback(() => setMembers([]), []),\n searchStringRange: searchStringRangeRef.current,\n searchLimited: searchLimitedRef.current,\n };\n};\n\nexport default useMentionSuggestion;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
|
|
9
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
10
|
+
var _SBUUtils = _interopRequireDefault(require("../libs/SBUUtils"));
|
|
11
|
+
var _useContext = require("./useContext");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
const useVoiceMessageInput = _ref => {
|
|
14
|
+
let {
|
|
15
|
+
onSend,
|
|
16
|
+
onClose
|
|
17
|
+
} = _ref;
|
|
18
|
+
const {
|
|
19
|
+
alert
|
|
20
|
+
} = (0, _uikitReactNativeFoundation.useAlert)();
|
|
21
|
+
const {
|
|
22
|
+
STRINGS
|
|
23
|
+
} = (0, _useContext.useLocalization)();
|
|
24
|
+
const {
|
|
25
|
+
recorderService,
|
|
26
|
+
playerService,
|
|
27
|
+
fileService
|
|
28
|
+
} = (0, _useContext.usePlatformService)();
|
|
29
|
+
const [status, setStatus] = (0, _react.useState)('idle');
|
|
30
|
+
const [recordingTime, setRecordingTime] = (0, _react.useState)({
|
|
31
|
+
currentTime: 0,
|
|
32
|
+
minDuration: recorderService.options.minDuration,
|
|
33
|
+
maxDuration: recorderService.options.maxDuration
|
|
34
|
+
});
|
|
35
|
+
const [playingTime, setPlayingTime] = (0, _react.useState)({
|
|
36
|
+
currentTime: 0,
|
|
37
|
+
duration: 0
|
|
38
|
+
});
|
|
39
|
+
const recordingPath = (0, _react.useRef)();
|
|
40
|
+
const getVoiceMessageRecordingPath = () => {
|
|
41
|
+
if (!recordingPath.current) throw new Error('No recording path');
|
|
42
|
+
return recordingPath.current;
|
|
43
|
+
};
|
|
44
|
+
const setVoiceMessageRecordingPath = path => {
|
|
45
|
+
recordingPath.current = path;
|
|
46
|
+
};
|
|
47
|
+
const clear = async () => {
|
|
48
|
+
recordingPath.current = undefined;
|
|
49
|
+
await playerService.reset();
|
|
50
|
+
await recorderService.reset();
|
|
51
|
+
setRecordingTime({
|
|
52
|
+
currentTime: 0,
|
|
53
|
+
minDuration: recorderService.options.minDuration,
|
|
54
|
+
maxDuration: recorderService.options.maxDuration
|
|
55
|
+
});
|
|
56
|
+
setPlayingTime({
|
|
57
|
+
currentTime: 0,
|
|
58
|
+
duration: 0
|
|
59
|
+
});
|
|
60
|
+
setStatus('idle');
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
state: {
|
|
64
|
+
status,
|
|
65
|
+
recordingTime,
|
|
66
|
+
playingTime
|
|
67
|
+
},
|
|
68
|
+
actions: {
|
|
69
|
+
async cancel() {
|
|
70
|
+
await clear();
|
|
71
|
+
},
|
|
72
|
+
async startRecording() {
|
|
73
|
+
const granted = await recorderService.requestPermission();
|
|
74
|
+
if (!granted) {
|
|
75
|
+
await onClose();
|
|
76
|
+
alert({
|
|
77
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
78
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_MICROPHONE, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
79
|
+
buttons: [{
|
|
80
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
81
|
+
onPress: () => _SBUUtils.default.openSettings()
|
|
82
|
+
}]
|
|
83
|
+
});
|
|
84
|
+
_uikitUtils.Logger.error('Failed to request permission for recorder');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if ((0, _uikitUtils.matchesOneOf)(status, ['idle'])) {
|
|
88
|
+
// Before start recording, if player is not idle, reset it.
|
|
89
|
+
if (playerService.state !== 'idle') {
|
|
90
|
+
await playerService.reset();
|
|
91
|
+
}
|
|
92
|
+
const unsubscribeRecording = recorderService.addRecordingListener(_ref2 => {
|
|
93
|
+
let {
|
|
94
|
+
currentTime
|
|
95
|
+
} = _ref2;
|
|
96
|
+
setRecordingTime({
|
|
97
|
+
currentTime,
|
|
98
|
+
maxDuration: recorderService.options.maxDuration,
|
|
99
|
+
minDuration: recorderService.options.minDuration
|
|
100
|
+
});
|
|
101
|
+
setPlayingTime(prev => ({
|
|
102
|
+
...prev,
|
|
103
|
+
duration: currentTime
|
|
104
|
+
}));
|
|
105
|
+
});
|
|
106
|
+
const unsubscribeState = recorderService.addStateListener(state => {
|
|
107
|
+
switch (state) {
|
|
108
|
+
case 'recording':
|
|
109
|
+
setStatus('recording');
|
|
110
|
+
break;
|
|
111
|
+
case 'completed':
|
|
112
|
+
setStatus('recording_completed');
|
|
113
|
+
unsubscribeRecording();
|
|
114
|
+
unsubscribeState();
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
if (_SBUUtils.default.isExpo()) {
|
|
119
|
+
await recorderService.record();
|
|
120
|
+
if (recorderService.uri) {
|
|
121
|
+
setVoiceMessageRecordingPath({
|
|
122
|
+
recordFilePath: recorderService.uri,
|
|
123
|
+
uri: recorderService.uri
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
setVoiceMessageRecordingPath(fileService.createRecordFilePath(recorderService.options.extension));
|
|
128
|
+
await recorderService.record(getVoiceMessageRecordingPath().recordFilePath);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
async stopRecording() {
|
|
133
|
+
if ((0, _uikitUtils.matchesOneOf)(status, ['recording'])) {
|
|
134
|
+
await recorderService.stop();
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
async playPlayer() {
|
|
138
|
+
const granted = await playerService.requestPermission();
|
|
139
|
+
if (!granted) {
|
|
140
|
+
alert({
|
|
141
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
142
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_DEVICE_STORAGE, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
143
|
+
buttons: [{
|
|
144
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
145
|
+
onPress: () => _SBUUtils.default.openSettings()
|
|
146
|
+
}]
|
|
147
|
+
});
|
|
148
|
+
_uikitUtils.Logger.error('Failed to request permission for player');
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if ((0, _uikitUtils.matchesOneOf)(status, ['recording_completed', 'playing_paused'])) {
|
|
152
|
+
const unsubscribePlayback = playerService.addPlaybackListener(_ref3 => {
|
|
153
|
+
let {
|
|
154
|
+
currentTime,
|
|
155
|
+
duration
|
|
156
|
+
} = _ref3;
|
|
157
|
+
setPlayingTime({
|
|
158
|
+
currentTime,
|
|
159
|
+
duration
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
const unsubscribeState = playerService.addStateListener(state => {
|
|
163
|
+
switch (state) {
|
|
164
|
+
case 'playing':
|
|
165
|
+
setStatus('playing');
|
|
166
|
+
break;
|
|
167
|
+
case 'paused':
|
|
168
|
+
{
|
|
169
|
+
setStatus('playing_paused');
|
|
170
|
+
unsubscribeState();
|
|
171
|
+
unsubscribePlayback();
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case 'stopped':
|
|
175
|
+
{
|
|
176
|
+
setStatus('playing_paused');
|
|
177
|
+
unsubscribeState();
|
|
178
|
+
unsubscribePlayback();
|
|
179
|
+
setPlayingTime(prev => ({
|
|
180
|
+
...prev,
|
|
181
|
+
currentTime: 0
|
|
182
|
+
}));
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
await playerService.play(getVoiceMessageRecordingPath().recordFilePath);
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
async pausePlayer() {
|
|
191
|
+
if ((0, _uikitUtils.matchesOneOf)(status, ['playing'])) {
|
|
192
|
+
await playerService.pause();
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
async send() {
|
|
196
|
+
if ((0, _uikitUtils.matchesOneOf)(status, ['recording', 'recording_completed', 'playing', 'playing_paused']) && recordingPath.current) {
|
|
197
|
+
const voiceFile = (0, _uikitUtils.getVoiceMessageFileObject)(recordingPath.current.uri, recorderService.options.extension);
|
|
198
|
+
onSend(voiceFile, Math.floor(recordingTime.currentTime));
|
|
199
|
+
await clear();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
var _default = useVoiceMessageInput;
|
|
206
|
+
exports.default = _default;
|
|
207
|
+
//# sourceMappingURL=useVoiceMessageInput.js.map
|