@sendbird/uikit-react-native 3.1.2 → 3.3.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/EditInput.js +2 -11
- package/lib/commonjs/components/ChannelInput/EditInput.js.map +1 -1
- 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 +149 -323
- 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 +34 -3
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +148 -116
- package/lib/commonjs/components/ChannelMessageList/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 +134 -6
- 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 +72 -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/GroupChannelHeader.js +14 -4
- package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +28 -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 +34 -7
- 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/useVoiceMessageInput.js +207 -0
- package/lib/commonjs/hooks/useVoiceMessageInput.js.map +1 -0
- package/lib/commonjs/index.js +36 -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 +7 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/promise.js +138 -0
- package/lib/commonjs/utils/promise.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/EditInput.js +3 -12
- package/lib/module/components/ChannelInput/EditInput.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 +152 -326
- 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 +36 -5
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +149 -117
- package/lib/module/components/ChannelMessageList/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 +132 -7
- 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 +74 -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/GroupChannelHeader.js +15 -5
- package/lib/module/domain/groupChannel/component/GroupChannelHeader.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +29 -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 +36 -9
- 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/useVoiceMessageInput.js +199 -0
- package/lib/module/hooks/useVoiceMessageInput.js.map +1 -0
- package/lib/module/index.js +8 -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 +5 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/promise.js +132 -0
- package/lib/module/utils/promise.js.map +1 -0
- 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 +9 -3
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +4 -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/GroupChannelMessageRenderer/index.d.ts +3 -0
- 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/OpenChannelMessageRenderer/index.d.ts +2 -0
- 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 +19 -8
- 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 +48 -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 +5 -1
- package/lib/typescript/src/utils/promise.d.ts +7 -0
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +10 -12
- package/src/components/ChannelInput/EditInput.tsx +3 -15
- package/src/components/ChannelInput/MessageToReplyPreview.tsx +133 -0
- package/src/components/ChannelInput/SendInput.tsx +131 -329
- package/src/components/ChannelInput/VoiceMessageInput.tsx +206 -0
- package/src/components/ChannelInput/index.tsx +37 -6
- package/src/components/ChannelMessageList/index.tsx +145 -113
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +24 -11
- package/src/components/GroupChannelMessageRenderer/index.tsx +113 -4
- 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 +103 -59
- 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/GroupChannelHeader.tsx +14 -3
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +30 -43
- package/src/domain/groupChannel/module/moduleContext.tsx +119 -7
- package/src/domain/groupChannel/types.ts +45 -0
- package/src/domain/userList/types.ts +2 -2
- package/src/fragments/createGroupChannelFragment.tsx +43 -8
- package/src/fragments/createMessageSearchFragment.tsx +1 -1
- package/src/hooks/useChannelInputItems.ts +215 -0
- package/src/hooks/useConnection.ts +1 -1
- package/src/hooks/useVoiceMessageInput.ts +237 -0
- package/src/index.ts +9 -1
- 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 +6 -1
- package/src/utils/promise.ts +139 -0
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useMemo","useState","ReplyType","useGroupChannelMessages","NOOP","PASS","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","NewMessagesButton","ScrollToBottomButton","StatusComposition","createGroupChannelModule","useSendbirdChat","pubsub","createGroupChannelFragment","initModule","GroupChannelModule","_ref","searchItem","renderNewMessagesButton","props","createElement","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onBeforeSendUserMessage","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","collectionCreator","sortComparator","flatListProps","sdk","currentUser","sbOptions","internalSearchItem","setInternalSearchItem","navigateFromMessageSearch","Boolean","groupChannelPubSub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","replyType","uikit","groupChannel","NONE","ONLY_REPLY_TO_CHANNEL","loading","messages","newMessages","resetNewMessages","next","prev","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","userId","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","onMessagesUpdated","startingPoint","enableCollectionWithoutLocalCache","renderItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","callback","Number","MAX_SAFE_INTEGER","onResetMessageListWithStartingPoint","onUpdateSearchItem","undefined","onPending","message","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\n\nimport { ReplyType } from '@sendbird/chat/message';\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport {\n NOOP,\n PASS,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n messageComparator,\n useFreshCallback,\n useIIFE,\n useRefTracker,\n} from '@sendbird/uikit-utils';\n\nimport GroupChannelMessageRenderer from '../components/GroupChannelMessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type {\n GroupChannelFragment,\n GroupChannelModule,\n GroupChannelProps,\n GroupChannelPubSubContextPayload,\n} from '../domain/groupChannel/types';\nimport { useSendbirdChat } from '../hooks/useContext';\nimport pubsub from '../utils/pubsub';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n searchItem,\n renderNewMessagesButton = (props) => <NewMessagesButton {...props} />,\n renderScrollToBottomButton = (props) => <ScrollToBottomButton {...props} />,\n renderMessage,\n enableMessageGrouping = true,\n enableTypingIndicator,\n onPressHeaderLeft = NOOP,\n onPressHeaderRight = NOOP,\n onPressMediaMessage = NOOP,\n onChannelDeleted = NOOP,\n onBeforeSendUserMessage = PASS,\n onBeforeSendFileMessage = PASS,\n onBeforeUpdateUserMessage = PASS,\n onBeforeUpdateFileMessage = PASS,\n channel,\n keyboardAvoidOffset,\n collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n }) => {\n const { sdk, currentUser, sbOptions } = useSendbirdChat();\n\n const [internalSearchItem, setInternalSearchItem] = useState(searchItem);\n const navigateFromMessageSearch = useCallback(() => Boolean(searchItem), []);\n\n const [groupChannelPubSub] = useState(() => pubsub<GroupChannelPubSubContextPayload>());\n const [scrolledAwayFromBottom, setScrolledAwayFromBottom] = useState(false);\n const scrolledAwayFromBottomRef = useRefTracker(scrolledAwayFromBottom);\n\n const replyType = useIIFE(() => {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'none') return ReplyType.NONE;\n else return ReplyType.ONLY_REPLY_TO_CHANNEL;\n });\n\n const {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n next,\n prev,\n hasNext,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n resetWithStartingPoint,\n } = useGroupChannelMessages(sdk, channel, currentUser?.userId, {\n shouldCountNewMessages: () => scrolledAwayFromBottomRef.current,\n onMessagesReceived(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_RECEIVED', data: { messages } });\n },\n onMessagesUpdated(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_UPDATED', data: { messages } });\n },\n collectionCreator,\n sortComparator,\n onChannelDeleted,\n replyType,\n startingPoint: internalSearchItem?.startingPoint,\n enableCollectionWithoutLocalCache: true,\n });\n\n const renderItem: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n if (renderMessage) return renderMessage(props);\n return <GroupChannelMessageRenderer {...props} />;\n });\n\n const memoizedFlatListProps = useMemo(\n () => ({\n ListEmptyComponent: <GroupChannelModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }),\n [flatListProps],\n );\n\n const onResetMessageList = useCallback((callback?: () => void) => {\n resetWithStartingPoint(Number.MAX_SAFE_INTEGER, callback);\n }, []);\n\n const onResetMessageListWithStartingPoint = useCallback((startingPoint: number, callback?: () => void) => {\n resetWithStartingPoint(startingPoint, callback);\n }, []);\n\n // Changing the search item will trigger the focus animation on messages.\n const onUpdateSearchItem: GroupChannelProps['MessageList']['onUpdateSearchItem'] = useCallback((searchItem) => {\n // Clean up for animation trigger with useEffect\n setInternalSearchItem(undefined);\n setInternalSearchItem(searchItem);\n }, []);\n\n const onPending = (message: SendbirdFileMessage | SendbirdUserMessage) => {\n groupChannelPubSub.publish({ type: 'MESSAGE_SENT_PENDING', data: { message } });\n };\n\n const onSent = (message: SendbirdFileMessage | SendbirdUserMessage) => {\n groupChannelPubSub.publish({ type: 'MESSAGE_SENT_SUCCESS', data: { message } });\n };\n\n const onPressSendUserMessage: GroupChannelProps['Input']['onPressSendUserMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendUserMessage(params);\n const message = await sendUserMessage(processedParams, onPending);\n onSent(message);\n },\n );\n const onPressSendFileMessage: GroupChannelProps['Input']['onPressSendFileMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendFileMessage(params);\n const message = await sendFileMessage(processedParams, onPending);\n onSent(message);\n },\n );\n const onPressUpdateUserMessage: GroupChannelProps['Input']['onPressUpdateUserMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateUserMessage(params);\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n const onPressUpdateFileMessage: GroupChannelProps['Input']['onPressUpdateFileMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateFileMessage(params);\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => {\n if (!value) resetNewMessages();\n setScrolledAwayFromBottom(value);\n });\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n >\n <GroupChannelModule.Header\n shouldHideRight={navigateFromMessageSearch}\n onPressHeaderLeft={onPressHeaderLeft}\n onPressHeaderRight={onPressHeaderRight}\n />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelModule.StatusLoading />}>\n <GroupChannelModule.MessageList\n channel={channel}\n searchItem={internalSearchItem}\n onResetMessageList={onResetMessageList}\n onResetMessageListWithStartingPoint={onResetMessageListWithStartingPoint}\n onUpdateSearchItem={onUpdateSearchItem}\n enableMessageGrouping={enableMessageGrouping}\n currentUserId={currentUser?.userId}\n renderMessage={renderItem}\n messages={messages}\n newMessages={newMessages}\n onTopReached={prev}\n onBottomReached={next}\n hasNext={hasNext}\n scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\nexport default createGroupChannelFragment;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAE7D,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SAASC,uBAAuB,QAAQ,4BAA4B;AACpE,SACEC,IAAI,EACJC,IAAI,EAIJC,iBAAiB,EACjBC,gBAAgB,EAChBC,OAAO,EACPC,aAAa,QACR,uBAAuB;AAE9B,OAAOC,2BAA2B,MAAM,2CAA2C;AACnF,OAAOC,iBAAiB,MAAM,iCAAiC;AAC/D,OAAOC,oBAAoB,MAAM,oCAAoC;AACrE,OAAOC,iBAAiB,MAAM,iCAAiC;AAC/D,OAAOC,wBAAwB,MAAM,wDAAwD;AAO7F,SAASC,eAAe,QAAQ,qBAAqB;AACrD,OAAOC,MAAM,MAAM,iBAAiB;AAEpC,MAAMC,0BAA0B,GAAIC,UAAwC,IAA2B;EACrG,MAAMC,kBAAkB,GAAGL,wBAAwB,CAACI,UAAU,CAAC;EAE/D,OAAOE,IAAA,IAoBD;IAAA,IApBE;MACNC,UAAU;MACVC,uBAAuB,GAAIC,KAAK,iBAAKzB,KAAA,CAAA0B,aAAA,CAACb,iBAAiB,EAAKY,KAAK,CAAI;MACrEE,0BAA0B,GAAIF,KAAK,iBAAKzB,KAAA,CAAA0B,aAAA,CAACZ,oBAAoB,EAAKW,KAAK,CAAI;MAC3EG,aAAa;MACbC,qBAAqB,GAAG,IAAI;MAC5BC,qBAAqB;MACrBC,iBAAiB,GAAGzB,IAAI;MACxB0B,kBAAkB,GAAG1B,IAAI;MACzB2B,mBAAmB,GAAG3B,IAAI;MAC1B4B,gBAAgB,GAAG5B,IAAI;MACvB6B,uBAAuB,GAAG5B,IAAI;MAC9B6B,uBAAuB,GAAG7B,IAAI;MAC9B8B,yBAAyB,GAAG9B,IAAI;MAChC+B,yBAAyB,GAAG/B,IAAI;MAChCgC,OAAO;MACPC,mBAAmB;MACnBC,iBAAiB;MACjBC,cAAc,GAAGlC,iBAAiB;MAClCmC;IACF,CAAC,GAAArB,IAAA;IACC,MAAM;MAAEsB,GAAG;MAAEC,WAAW;MAAEC;IAAU,CAAC,GAAG7B,eAAe,EAAE;IAEzD,MAAM,CAAC8B,kBAAkB,EAAEC,qBAAqB,CAAC,GAAG7C,QAAQ,CAACoB,UAAU,CAAC;IACxE,MAAM0B,yBAAyB,GAAGhD,WAAW,CAAC,MAAMiD,OAAO,CAAC3B,UAAU,CAAC,EAAE,EAAE,CAAC;IAE5E,MAAM,CAAC4B,kBAAkB,CAAC,GAAGhD,QAAQ,CAAC,MAAMe,MAAM,EAAoC,CAAC;IACvF,MAAM,CAACkC,sBAAsB,EAAEC,yBAAyB,CAAC,GAAGlD,QAAQ,CAAC,KAAK,CAAC;IAC3E,MAAMmD,yBAAyB,GAAG3C,aAAa,CAACyC,sBAAsB,CAAC;IAEvE,MAAMG,SAAS,GAAG7C,OAAO,CAAC,MAAM;MAC9B,IAAIoC,SAAS,CAACU,KAAK,CAACC,YAAY,CAAClB,OAAO,CAACgB,SAAS,KAAK,MAAM,EAAE,OAAOnD,SAAS,CAACsD,IAAI,CAAC,KAChF,OAAOtD,SAAS,CAACuD,qBAAqB;IAC7C,CAAC,CAAC;IAEF,MAAM;MACJC,OAAO;MACPC,QAAQ;MACRC,WAAW;MACXC,gBAAgB;MAChBC,IAAI;MACJC,IAAI;MACJC,OAAO;MACPC,eAAe;MACfC,eAAe;MACfC,iBAAiB;MACjBC,iBAAiB;MACjBC,aAAa;MACbC,aAAa;MACbC;IACF,CAAC,GAAGpE,uBAAuB,CAACuC,GAAG,EAAEL,OAAO,EAAEM,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE6B,MAAM,EAAE;MAC7DC,sBAAsB,EAAEA,CAAA,KAAMrB,yBAAyB,CAACsB,OAAO;MAC/DC,kBAAkBA,CAAChB,QAAQ,EAAE;QAC3BV,kBAAkB,CAAC2B,OAAO,CAAC;UAAEC,IAAI,EAAE,mBAAmB;UAAEC,IAAI,EAAE;YAAEnB;UAAS;QAAE,CAAC,CAAC;MAC/E,CAAC;MACDoB,iBAAiBA,CAACpB,QAAQ,EAAE;QAC1BV,kBAAkB,CAAC2B,OAAO,CAAC;UAAEC,IAAI,EAAE,kBAAkB;UAAEC,IAAI,EAAE;YAAEnB;UAAS;QAAE,CAAC,CAAC;MAC9E,CAAC;MACDpB,iBAAiB;MACjBC,cAAc;MACdR,gBAAgB;MAChBqB,SAAS;MACT2B,aAAa,EAAEnC,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEmC,aAAa;MAChDC,iCAAiC,EAAE;IACrC,CAAC,CAAC;IAEF,MAAMC,UAA6D,GAAG3E,gBAAgB,CAAEgB,KAAK,IAAK;MAChG,IAAIG,aAAa,EAAE,OAAOA,aAAa,CAACH,KAAK,CAAC;MAC9C,oBAAOzB,KAAA,CAAA0B,aAAA,CAACd,2BAA2B,EAAKa,KAAK,CAAI;IACnD,CAAC,CAAC;IAEF,MAAM4D,qBAAqB,GAAGnF,OAAO,CACnC,OAAO;MACLoF,kBAAkB,eAAEtF,KAAA,CAAA0B,aAAA,CAACL,kBAAkB,CAACkE,WAAW,OAAG;MACtDC,qBAAqB,EAAE;QAAEC,QAAQ,EAAE;MAAE,CAAC;MACtC,GAAG9C;IACL,CAAC,CAAC,EACF,CAACA,aAAa,CAAC,CAChB;IAED,MAAM+C,kBAAkB,GAAGzF,WAAW,CAAE0F,QAAqB,IAAK;MAChElB,sBAAsB,CAACmB,MAAM,CAACC,gBAAgB,EAAEF,QAAQ,CAAC;IAC3D,CAAC,EAAE,EAAE,CAAC;IAEN,MAAMG,mCAAmC,GAAG7F,WAAW,CAAC,CAACiF,aAAqB,EAAES,QAAqB,KAAK;MACxGlB,sBAAsB,CAACS,aAAa,EAAES,QAAQ,CAAC;IACjD,CAAC,EAAE,EAAE,CAAC;;IAEN;IACA,MAAMI,kBAA0E,GAAG9F,WAAW,CAAEsB,UAAU,IAAK;MAC7G;MACAyB,qBAAqB,CAACgD,SAAS,CAAC;MAChChD,qBAAqB,CAACzB,UAAU,CAAC;IACnC,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM0E,SAAS,GAAIC,OAAkD,IAAK;MACxE/C,kBAAkB,CAAC2B,OAAO,CAAC;QAAEC,IAAI,EAAE,sBAAsB;QAAEC,IAAI,EAAE;UAAEkB;QAAQ;MAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAMC,MAAM,GAAID,OAAkD,IAAK;MACrE/C,kBAAkB,CAAC2B,OAAO,CAAC;QAAEC,IAAI,EAAE,sBAAsB;QAAEC,IAAI,EAAE;UAAEkB;QAAQ;MAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAME,sBAA4E,GAAG3F,gBAAgB,CACnG,MAAO4F,MAAM,IAAK;MAChB,MAAMC,eAAe,GAAG,MAAMnE,uBAAuB,CAACkE,MAAM,CAAC;MAC7D,MAAMH,OAAO,GAAG,MAAM9B,eAAe,CAACkC,eAAe,EAAEL,SAAS,CAAC;MACjEE,MAAM,CAACD,OAAO,CAAC;IACjB,CAAC,CACF;IACD,MAAMK,sBAA4E,GAAG9F,gBAAgB,CACnG,MAAO4F,MAAM,IAAK;MAChB,MAAMC,eAAe,GAAG,MAAMlE,uBAAuB,CAACiE,MAAM,CAAC;MAC7D,MAAMH,OAAO,GAAG,MAAM/B,eAAe,CAACmC,eAAe,EAAEL,SAAS,CAAC;MACjEE,MAAM,CAACD,OAAO,CAAC;IACjB,CAAC,CACF;IACD,MAAMM,wBAAgF,GAAG/F,gBAAgB,CACvG,OAAOyF,OAAO,EAAEG,MAAM,KAAK;MACzB,MAAMC,eAAe,GAAG,MAAMjE,yBAAyB,CAACgE,MAAM,CAAC;MAC/D,MAAM/B,iBAAiB,CAAC4B,OAAO,CAACO,SAAS,EAAEH,eAAe,CAAC;IAC7D,CAAC,CACF;IACD,MAAMI,wBAAgF,GAAGjG,gBAAgB,CACvG,OAAOyF,OAAO,EAAEG,MAAM,KAAK;MACzB,MAAMC,eAAe,GAAG,MAAMhE,yBAAyB,CAAC+D,MAAM,CAAC;MAC/D,MAAMhC,iBAAiB,CAAC6B,OAAO,CAACO,SAAS,EAAEH,eAAe,CAAC;IAC7D,CAAC,CACF;IACD,MAAMK,wBAAwB,GAAGlG,gBAAgB,CAAEmG,KAAc,IAAK;MACpE,IAAI,CAACA,KAAK,EAAE7C,gBAAgB,EAAE;MAC9BV,yBAAyB,CAACuD,KAAK,CAAC;IAClC,CAAC,CAAC;IAEF,oBACE5G,KAAA,CAAA0B,aAAA,CAACL,kBAAkB,CAACwF,QAAQ;MAC1BtE,OAAO,EAAEA,OAAQ;MACjBY,kBAAkB,EAAEA,kBAAmB;MACvCrB,qBAAqB,EAAEA,qBAAqB,IAAIgB,SAAS,CAACU,KAAK,CAACC,YAAY,CAAClB,OAAO,CAACT,qBAAsB;MAC3GU,mBAAmB,EAAEA;IAAoB,gBAEzCxC,KAAA,CAAA0B,aAAA,CAACL,kBAAkB,CAACyF,MAAM;MACxBC,eAAe,EAAE9D,yBAA0B;MAC3ClB,iBAAiB,EAAEA,iBAAkB;MACrCC,kBAAkB,EAAEA;IAAmB,EACvC,eACFhC,KAAA,CAAA0B,aAAA,CAACX,iBAAiB;MAAC6C,OAAO,EAAEA,OAAQ;MAACoD,gBAAgB,eAAEhH,KAAA,CAAA0B,aAAA,CAACL,kBAAkB,CAAC4F,aAAa;IAAI,gBAC1FjH,KAAA,CAAA0B,aAAA,CAACL,kBAAkB,CAAC6F,WAAW;MAC7B3E,OAAO,EAAEA,OAAQ;MACjBhB,UAAU,EAAEwB,kBAAmB;MAC/B2C,kBAAkB,EAAEA,kBAAmB;MACvCI,mCAAmC,EAAEA,mCAAoC;MACzEC,kBAAkB,EAAEA,kBAAmB;MACvClE,qBAAqB,EAAEA,qBAAsB;MAC7CsF,aAAa,EAAEtE,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE6B,MAAO;MACnC9C,aAAa,EAAEwD,UAAW;MAC1BvB,QAAQ,EAAEA,QAAS;MACnBC,WAAW,EAAEA,WAAY;MACzBsD,YAAY,EAAEnD,IAAK;MACnBoD,eAAe,EAAErD,IAAK;MACtBE,OAAO,EAAEA,OAAQ;MACjBd,sBAAsB,EAAEA,sBAAuB;MAC/CuD,wBAAwB,EAAEA,wBAAyB;MACnDnF,uBAAuB,EAAEA,uBAAwB;MACjDG,0BAA0B,EAAEA,0BAA2B;MACvD2F,qBAAqB,EAAE/C,aAAc;MACrCgD,eAAe,EAAE/C,aAAc;MAC/BvC,mBAAmB,EAAEA,mBAAoB;MACzCU,aAAa,EAAE0C;IAAsB,EACrC,eACFrF,KAAA,CAAA0B,aAAA,CAACL,kBAAkB,CAACmG,KAAK;MACvBC,oBAAoB,EAAEpG,kBAAkB,CAACoG,oBAAqB;MAC9DC,iBAAiB,EAAEA,iBAAiB,CAACnF,OAAO,CAAE;MAC9C6D,sBAAsB,EAAEA,sBAAuB;MAC/CG,sBAAsB,EAAEA,sBAAuB;MAC/CC,wBAAwB,EAAEA,wBAAyB;MACnDE,wBAAwB,EAAEA;IAAyB,EACnD,CACgB,CACQ;EAElC,CAAC;AACH,CAAC;AAED,SAASgB,iBAAiBA,CAACnF,OAA6B,EAAE;EACxD,IAAIA,OAAO,CAACoF,WAAW,EAAE;IACvB,OAAOpF,OAAO,CAACqF,MAAM,KAAK,UAAU;EACtC;EAEA,OAAO,IAAI;AACb;AAEA,eAAezG,0BAA0B"}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useState","ReplyType","useGroupChannelMessages","Box","NOOP","PASS","messageComparator","useFreshCallback","useIIFE","useRefTracker","GroupChannelMessageRenderer","GroupChannelTypingIndicatorBubble","NewMessagesButton","ScrollToBottomButton","StatusComposition","createGroupChannelModule","usePlatformService","useSendbirdChat","pubsub","createGroupChannelFragment","initModule","GroupChannelModule","_ref","searchItem","renderNewMessagesButton","props","createElement","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","onPressHeaderRight","onPressMediaMessage","onChannelDeleted","onBeforeSendUserMessage","onBeforeSendFileMessage","onBeforeUpdateUserMessage","onBeforeUpdateFileMessage","channel","keyboardAvoidOffset","collectionCreator","sortComparator","flatListProps","playerService","recorderService","sdk","currentUser","sbOptions","internalSearchItem","setInternalSearchItem","navigateFromMessageSearch","Boolean","groupChannelPubSub","scrolledAwayFromBottom","setScrolledAwayFromBottom","scrolledAwayFromBottomRef","replyType","uikit","groupChannel","NONE","ONLY_REPLY_TO_CHANNEL","loading","messages","newMessages","resetNewMessages","next","prev","hasNext","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","resetWithStartingPoint","userId","shouldCountNewMessages","current","onMessagesReceived","publish","type","data","onMessagesUpdated","startingPoint","enableCollectionWithoutLocalCache","onBlurFragment","Promise","allSettled","reset","_onPressHeaderLeft","_onPressHeaderRight","_onPressMediaMessage","message","uri","renderItem","content","isFirstItem","memoizedFlatListProps","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","onResetMessageList","callback","Number","MAX_SAFE_INTEGER","onResetMessageListWithStartingPoint","onUpdateSearchItem","undefined","onPending","onSent","onPressSendUserMessage","params","processedParams","onPressSendFileMessage","onPressUpdateUserMessage","messageId","onPressUpdateFileMessage","onScrolledAwayFromBottom","value","Provider","Header","shouldHideRight","LoadingComponent","StatusLoading","MessageList","currentUserId","onTopReached","onBottomReached","onResendFailedMessage","onDeleteMessage","Input","SuggestedMentionList","shouldRenderInput","isBroadcast","myRole"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { ReplyType } from '@sendbird/chat/message';\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport { Box } from '@sendbird/uikit-react-native-foundation';\nimport {\n NOOP,\n PASS,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n messageComparator,\n useFreshCallback,\n useIIFE,\n useRefTracker,\n} from '@sendbird/uikit-utils';\n\nimport GroupChannelMessageRenderer, {\n GroupChannelTypingIndicatorBubble,\n} from '../components/GroupChannelMessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type {\n GroupChannelFragment,\n GroupChannelModule,\n GroupChannelProps,\n GroupChannelPubSubContextPayload,\n} from '../domain/groupChannel/types';\nimport { usePlatformService, useSendbirdChat } from '../hooks/useContext';\nimport pubsub from '../utils/pubsub';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n searchItem,\n renderNewMessagesButton = (props) => <NewMessagesButton {...props} />,\n renderScrollToBottomButton = (props) => <ScrollToBottomButton {...props} />,\n renderMessage,\n enableMessageGrouping = true,\n enableTypingIndicator,\n onPressHeaderLeft = NOOP,\n onPressHeaderRight = NOOP,\n onPressMediaMessage = NOOP,\n onChannelDeleted = NOOP,\n onBeforeSendUserMessage = PASS,\n onBeforeSendFileMessage = PASS,\n onBeforeUpdateUserMessage = PASS,\n onBeforeUpdateFileMessage = PASS,\n channel,\n keyboardAvoidOffset,\n collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n }) => {\n const { playerService, recorderService } = usePlatformService();\n const { sdk, currentUser, sbOptions } = useSendbirdChat();\n\n const [internalSearchItem, setInternalSearchItem] = useState(searchItem);\n const navigateFromMessageSearch = useCallback(() => Boolean(searchItem), []);\n\n const [groupChannelPubSub] = useState(() => pubsub<GroupChannelPubSubContextPayload>());\n const [scrolledAwayFromBottom, setScrolledAwayFromBottom] = useState(false);\n const scrolledAwayFromBottomRef = useRefTracker(scrolledAwayFromBottom);\n\n const replyType = useIIFE(() => {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'none') return ReplyType.NONE;\n else return ReplyType.ONLY_REPLY_TO_CHANNEL;\n });\n\n const {\n loading,\n messages,\n newMessages,\n resetNewMessages,\n next,\n prev,\n hasNext,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n resetWithStartingPoint,\n } = useGroupChannelMessages(sdk, channel, currentUser?.userId, {\n shouldCountNewMessages: () => scrolledAwayFromBottomRef.current,\n onMessagesReceived(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_RECEIVED', data: { messages } });\n },\n onMessagesUpdated(messages) {\n groupChannelPubSub.publish({ type: 'MESSAGES_UPDATED', data: { messages } });\n },\n collectionCreator,\n sortComparator,\n onChannelDeleted,\n replyType,\n startingPoint: internalSearchItem?.startingPoint,\n enableCollectionWithoutLocalCache: true,\n });\n\n const onBlurFragment = () => {\n return Promise.allSettled([playerService.reset(), recorderService.reset()]);\n };\n const _onPressHeaderLeft = useFreshCallback(async () => {\n await onBlurFragment();\n onPressHeaderLeft();\n });\n const _onPressHeaderRight = useFreshCallback(async () => {\n await onBlurFragment();\n onPressHeaderRight();\n });\n const _onPressMediaMessage: NonNullable<GroupChannelProps['MessageList']['onPressMediaMessage']> = useFreshCallback(\n async (message, deleteMessage, uri) => {\n await onBlurFragment();\n onPressMediaMessage(message, deleteMessage, uri);\n },\n );\n\n useEffect(() => {\n return () => {\n onBlurFragment();\n };\n }, []);\n\n const renderItem: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n const content = renderMessage ? renderMessage(props) : <GroupChannelMessageRenderer {...props} />;\n return (\n <Box>\n {content}\n {props.isFirstItem && !hasNext() && <GroupChannelTypingIndicatorBubble />}\n </Box>\n );\n });\n\n const memoizedFlatListProps = useMemo(\n () => ({\n ListEmptyComponent: <GroupChannelModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }),\n [flatListProps],\n );\n\n const onResetMessageList = useCallback((callback?: () => void) => {\n resetWithStartingPoint(Number.MAX_SAFE_INTEGER, callback);\n }, []);\n\n const onResetMessageListWithStartingPoint = useCallback((startingPoint: number, callback?: () => void) => {\n resetWithStartingPoint(startingPoint, callback);\n }, []);\n\n // Changing the search item will trigger the focus animation on messages.\n const onUpdateSearchItem: GroupChannelProps['MessageList']['onUpdateSearchItem'] = useCallback((searchItem) => {\n // Clean up for animation trigger with useEffect\n setInternalSearchItem(undefined);\n setInternalSearchItem(searchItem);\n }, []);\n\n const onPending = (message: SendbirdFileMessage | SendbirdUserMessage) => {\n groupChannelPubSub.publish({ type: 'MESSAGE_SENT_PENDING', data: { message } });\n };\n\n const onSent = (message: SendbirdFileMessage | SendbirdUserMessage) => {\n groupChannelPubSub.publish({ type: 'MESSAGE_SENT_SUCCESS', data: { message } });\n };\n\n const onPressSendUserMessage: GroupChannelProps['Input']['onPressSendUserMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendUserMessage(params);\n const message = await sendUserMessage(processedParams, onPending);\n onSent(message);\n },\n );\n const onPressSendFileMessage: GroupChannelProps['Input']['onPressSendFileMessage'] = useFreshCallback(\n async (params) => {\n const processedParams = await onBeforeSendFileMessage(params);\n const message = await sendFileMessage(processedParams, onPending);\n onSent(message);\n },\n );\n const onPressUpdateUserMessage: GroupChannelProps['Input']['onPressUpdateUserMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateUserMessage(params);\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n const onPressUpdateFileMessage: GroupChannelProps['Input']['onPressUpdateFileMessage'] = useFreshCallback(\n async (message, params) => {\n const processedParams = await onBeforeUpdateFileMessage(params);\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => {\n if (!value) resetNewMessages();\n setScrolledAwayFromBottom(value);\n });\n\n return (\n <GroupChannelModule.Provider\n channel={channel}\n groupChannelPubSub={groupChannelPubSub}\n enableTypingIndicator={enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n messages={messages}\n onUpdateSearchItem={onUpdateSearchItem}\n >\n <GroupChannelModule.Header\n shouldHideRight={navigateFromMessageSearch}\n onPressHeaderLeft={_onPressHeaderLeft}\n onPressHeaderRight={_onPressHeaderRight}\n />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelModule.StatusLoading />}>\n <GroupChannelModule.MessageList\n channel={channel}\n searchItem={internalSearchItem}\n onResetMessageList={onResetMessageList}\n onResetMessageListWithStartingPoint={onResetMessageListWithStartingPoint}\n onUpdateSearchItem={onUpdateSearchItem}\n enableMessageGrouping={enableMessageGrouping}\n currentUserId={currentUser?.userId}\n renderMessage={renderItem}\n messages={messages}\n newMessages={newMessages}\n onTopReached={prev}\n onBottomReached={next}\n hasNext={hasNext}\n scrolledAwayFromBottom={scrolledAwayFromBottom}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressMediaMessage={_onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n SuggestedMentionList={GroupChannelModule.SuggestedMentionList}\n shouldRenderInput={shouldRenderInput(channel)}\n onPressSendUserMessage={onPressSendUserMessage}\n onPressSendFileMessage={onPressSendFileMessage}\n onPressUpdateUserMessage={onPressUpdateUserMessage}\n onPressUpdateFileMessage={onPressUpdateFileMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nfunction shouldRenderInput(channel: SendbirdGroupChannel) {\n if (channel.isBroadcast) {\n return channel.myRole === 'operator';\n }\n\n return true;\n}\n\nexport default createGroupChannelFragment;\n"],"mappings":"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"}
|
|
@@ -87,7 +87,7 @@ const useMessageSearch = (sdk, _ref2) => {
|
|
|
87
87
|
const query = getMessageSearchQuery(sdk, {
|
|
88
88
|
keyword,
|
|
89
89
|
channelUrl: channel.url,
|
|
90
|
-
messageTimestampFrom:
|
|
90
|
+
messageTimestampFrom: channel.messageOffsetTimestamp,
|
|
91
91
|
order: MessageSearchOrder.TIMESTAMP,
|
|
92
92
|
queryCreator
|
|
93
93
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useRef","useState","MessageSearchOrder","Logger","NOOP","useFreshCallback","useSafeAreaPadding","MessageSearchResultItem","StatusComposition","createMessageSearchModule","useSendbirdChat","getMessageSearchQuery","sdk","options","queryCreator","createMessageSearchQuery","createMessageSearchFragment","initModule","MessageSearchModule","_ref","onPressHeaderLeft","channel","renderSearchResultItem","onPressSearchResultItem","padding","keyword","setKeyword","search","searchResults","loading","next","error","query","useMessageSearch","renderItem","props","createElement","Provider","Header","onChangeKeyword","onPressHeaderRight","LoadingComponent","StatusLoading","Boolean","ErrorComponent","StatusError","onPressRetry","List","messages","flatListProps","keyboardDismissMode","keyboardShouldPersistTaps","onEndReached","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","_ref2","setQuery","setLoading","setError","setSearchResults","queryInProgress","length","current","channelUrl","url","messageTimestampFrom","Math","max","joinedAt","invitedAt","order","TIMESTAMP","result","err","warn","hasNext","prev"],"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":"AAAA,OAAOA,KAAK,IAAIC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE/C,SAASC,kBAAkB,QAAQ,wBAAwB;AAC3D,SACEC,MAAM,EACNC,IAAI,EAKJC,gBAAgB,EAChBC,kBAAkB,QACb,uBAAuB;AAE9B,OAAOC,uBAAuB,MAAM,uCAAuC;AAC3E,OAAOC,iBAAiB,MAAM,iCAAiC;AAC/D,SAASC,yBAAyB,QAAQ,yBAAyB;AAEnE,SAASC,eAAe,QAAQ,qBAAqB;AAarD,SAASC,qBAAqBA,CAACC,GAAoB,EAAEC,OAA2B,EAAE;EAChF,IAAIA,OAAO,CAACC,YAAY,EAAE,OAAOD,OAAO,CAACC,YAAY,CAACD,OAAO,CAAC;EAC9D,OAAOD,GAAG,CAACG,wBAAwB,CAACF,OAAO,CAAC;AAC9C;AAEA,MAAMG,2BAA2B,GAAIC,UAAyC,IAA4B;EACxG,MAAMC,mBAAmB,GAAGT,yBAAyB,CAACQ,UAAU,CAAC;EAEjE,OAAOE,IAAA,IAA0G;IAAA,IAAzG;MAAEC,iBAAiB,GAAGhB,IAAI;MAAEiB,OAAO;MAAEP,YAAY;MAAEQ,sBAAsB;MAAEC;IAAwB,CAAC,GAAAJ,IAAA;IAC1G,MAAMK,OAAO,GAAGlB,kBAAkB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE/D,MAAM;MAAEM;IAAI,CAAC,GAAGF,eAAe,EAAE;IACjC,MAAM;MAAEe,OAAO;MAAEC,UAAU;MAAEC,MAAM;MAAEC,aAAa;MAAEC,OAAO;MAAEC,IAAI;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGC,gBAAgB,CAACrB,GAAG,EAAE;MACxGS,OAAO;MACPP;IACF,CAAC,CAAC;IAEF,MAAMoB,UAAgE,GAAG7B,gBAAgB,CAAE8B,KAAK,IAAK;MACnG,IAAIb,sBAAsB,EAAE,OAAOA,sBAAsB,CAACa,KAAK,CAAC;MAChE,oBAAOpC,KAAA,CAAAqC,aAAA,CAAC7B,uBAAuB,EAAK4B,KAAK,CAAI;IAC/C,CAAC,CAAC;IAEF,oBACEpC,KAAA,CAAAqC,aAAA,CAAClB,mBAAmB,CAACmB,QAAQ,qBAC3BtC,KAAA,CAAAqC,aAAA,CAAClB,mBAAmB,CAACoB,MAAM;MACzBb,OAAO,EAAEA,OAAQ;MACjBc,eAAe,EAAEb,UAAW;MAC5BN,iBAAiB,EAAEA,iBAAkB;MACrCoB,kBAAkB,EAAEb;IAAO,EAC3B,eACF5B,KAAA,CAAAqC,aAAA,CAAC5B,iBAAiB;MAChBqB,OAAO,EAAEA,OAAQ;MACjBY,gBAAgB,eAAE1C,KAAA,CAAAqC,aAAA,CAAClB,mBAAmB,CAACwB,aAAa,OAAI;MACxDX,KAAK,EAAEY,OAAO,CAACZ,KAAK,CAAE;MACtBa,cAAc,eAAE7C,KAAA,CAAAqC,aAAA,CAAClB,mBAAmB,CAAC2B,WAAW;QAACC,YAAY,EAAEnB;MAAO;IAAI,GAEzEK,KAAK,iBACJjC,KAAA,CAAAqC,aAAA,CAAClB,mBAAmB,CAAC6B,IAAI;MACvB1B,OAAO,EAAEA,OAAQ;MACjBE,uBAAuB,EAAEA,uBAAwB;MACjDyB,QAAQ,EAAEpB,aAAc;MACxBN,sBAAsB,EAAEY,UAAW;MACnCe,aAAa,EAAE;QACbC,mBAAmB,EAAE,SAAS;QAC9BC,yBAAyB,EAAE,SAAS;QACpCC,YAAY,EAAEtB,IAAI;QAClBuB,kBAAkB,EAAEnC,mBAAmB,CAACoC,WAAW;QACnDC,qBAAqB,EAAE;UAAEC,QAAQ,EAAE,CAAC;UAAE,GAAGhC;QAAQ;MACnD;IAAE,EAEL,CACiB,CACS;EAEnC,CAAC;AACH,CAAC;AAED,MAAMS,gBAAgB,GAAGA,CACvBrB,GAAoB,EAAA6C,KAAA,KAEjB;EAAA,IADH;IAAEpC,OAAO;IAAEP;EAAkG,CAAC,GAAA2C,KAAA;EAE9G,MAAM,CAACzB,KAAK,EAAE0B,QAAQ,CAAC,GAAGzD,QAAQ,EAA8B;EAChE,MAAM,CAACwB,OAAO,EAAEC,UAAU,CAAC,GAAGzB,QAAQ,CAAC,EAAE,CAAC;EAC1C,MAAM,CAAC4B,OAAO,EAAE8B,UAAU,CAAC,GAAG1D,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM,CAAC8B,KAAK,EAAE6B,QAAQ,CAAC,GAAG3D,QAAQ,CAAU,IAAI,CAAC;EACjD,MAAM,CAAC2B,aAAa,EAAEiC,gBAAgB,CAAC,GAAG5D,QAAQ,CAAwB,EAAE,CAAC;EAC7E,MAAM6D,eAAe,GAAG9D,MAAM,CAAC,KAAK,CAAC;EAErC,MAAM2B,MAAM,GAAGtB,gBAAgB,CAAC,YAAY;IAC1C,IAAIoB,OAAO,CAACsC,MAAM,IAAI,CAAC,EAAE;IACzB,IAAID,eAAe,CAACE,OAAO,EAAE;IAE7B,MAAMhC,KAAK,GAAGrB,qBAAqB,CAACC,GAAG,EAAE;MACvCa,OAAO;MACPwC,UAAU,EAAE5C,OAAO,CAAC6C,GAAG;MACvBC,oBAAoB,EAAEC,IAAI,CAACC,GAAG,CAAChD,OAAO,CAACiD,QAAQ,EAAEjD,OAAO,CAACkD,SAAS,CAAC;MACnEC,KAAK,EAAEtE,kBAAkB,CAACuE,SAAS;MACnC3D;IACF,CAAC,CAAC;IAEF4C,QAAQ,CAAC1B,KAAK,CAAC;IACf2B,UAAU,CAAC,IAAI,CAAC;IAChBC,QAAQ,CAAC,IAAI,CAAC;IAEd,IAAI;MACFE,eAAe,CAACE,OAAO,GAAG,IAAI;MAC9B,MAAMU,MAAM,GAAG,MAAM1C,KAAK,CAACF,IAAI,EAAE;MACjC+B,gBAAgB,CAACa,MAAM,CAAC;IAC1B,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZxE,MAAM,CAACyE,IAAI,CAAC,wCAAwC,EAAED,GAAG,CAAC;MAC1Df,QAAQ,CAACe,GAAG,CAAC;IACf,CAAC,SAAS;MACRb,eAAe,CAACE,OAAO,GAAG,KAAK;MAC/BL,UAAU,CAAC,KAAK,CAAC;IACnB;EACF,CAAC,CAAC;EAEF,MAAM7B,IAAI,GAAGzB,gBAAgB,CAAC,YAAY;IACxC,IAAI,EAAC2B,KAAK,aAALA,KAAK,eAALA,KAAK,CAAE6C,OAAO,GAAE;IACrB,IAAIf,eAAe,CAACE,OAAO,EAAE;IAE7B,IAAI;MACFF,eAAe,CAACE,OAAO,GAAG,IAAI;MAC9B,MAAMU,MAAM,GAAG,MAAM1C,KAAK,CAACF,IAAI,EAAE;MACjC+B,gBAAgB,CAAEiB,IAAI,IAAK,CAAC,GAAGA,IAAI,EAAE,GAAGJ,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZxE,MAAM,CAACyE,IAAI,CAAC,sCAAsC,EAAED,GAAG,CAAC;MACxDf,QAAQ,CAACe,GAAG,CAAC;IACf,CAAC,SAAS;MACRb,eAAe,CAACE,OAAO,GAAG,KAAK;IACjC;EACF,CAAC,CAAC;EAEF,OAAO;IACLvC,OAAO;IACPC,UAAU;IAEVM,KAAK;IACLH,OAAO;IACPE,KAAK;IACLH,aAAa;IAEbD,MAAM;IACNG;EACF,CAAC;AACH,CAAC;AAED,eAAed,2BAA2B"}
|
|
1
|
+
{"version":3,"names":["React","useRef","useState","MessageSearchOrder","Logger","NOOP","useFreshCallback","useSafeAreaPadding","MessageSearchResultItem","StatusComposition","createMessageSearchModule","useSendbirdChat","getMessageSearchQuery","sdk","options","queryCreator","createMessageSearchQuery","createMessageSearchFragment","initModule","MessageSearchModule","_ref","onPressHeaderLeft","channel","renderSearchResultItem","onPressSearchResultItem","padding","keyword","setKeyword","search","searchResults","loading","next","error","query","useMessageSearch","renderItem","props","createElement","Provider","Header","onChangeKeyword","onPressHeaderRight","LoadingComponent","StatusLoading","Boolean","ErrorComponent","StatusError","onPressRetry","List","messages","flatListProps","keyboardDismissMode","keyboardShouldPersistTaps","onEndReached","ListEmptyComponent","StatusEmpty","contentContainerStyle","flexGrow","_ref2","setQuery","setLoading","setError","setSearchResults","queryInProgress","length","current","channelUrl","url","messageTimestampFrom","messageOffsetTimestamp","order","TIMESTAMP","result","err","warn","hasNext","prev"],"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,203 @@
|
|
|
1
|
+
import { useAlert, useToast } from '@sendbird/uikit-react-native-foundation';
|
|
2
|
+
import { isImage, shouldCompressImage, useIIFE } from '@sendbird/uikit-utils';
|
|
3
|
+
import SBUError from '../libs/SBUError';
|
|
4
|
+
import SBUUtils from '../libs/SBUUtils';
|
|
5
|
+
import { useLocalization, usePlatformService, useSendbirdChat } from './useContext';
|
|
6
|
+
export const useChannelInputItems = (channel, sendFileMessage) => {
|
|
7
|
+
const {
|
|
8
|
+
sbOptions,
|
|
9
|
+
imageCompressionConfig
|
|
10
|
+
} = useSendbirdChat();
|
|
11
|
+
const {
|
|
12
|
+
STRINGS
|
|
13
|
+
} = useLocalization();
|
|
14
|
+
const {
|
|
15
|
+
fileService,
|
|
16
|
+
mediaService
|
|
17
|
+
} = usePlatformService();
|
|
18
|
+
const {
|
|
19
|
+
alert
|
|
20
|
+
} = useAlert();
|
|
21
|
+
const toast = useToast();
|
|
22
|
+
const sheetItems = [];
|
|
23
|
+
const input = useIIFE(() => {
|
|
24
|
+
switch (true) {
|
|
25
|
+
case channel.isOpenChannel():
|
|
26
|
+
return sbOptions.uikit.openChannel.channel.input;
|
|
27
|
+
case channel.isGroupChannel():
|
|
28
|
+
return sbOptions.uikit.groupChannel.channel.input;
|
|
29
|
+
default:
|
|
30
|
+
return {
|
|
31
|
+
enableDocument: true,
|
|
32
|
+
camera: {
|
|
33
|
+
enablePhoto: true,
|
|
34
|
+
enableVideo: true
|
|
35
|
+
},
|
|
36
|
+
gallery: {
|
|
37
|
+
enablePhoto: true,
|
|
38
|
+
enableVideo: true
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
if (input.camera.enablePhoto) {
|
|
44
|
+
sheetItems.push({
|
|
45
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_PHOTO,
|
|
46
|
+
icon: 'camera',
|
|
47
|
+
onPress: async () => {
|
|
48
|
+
const mediaFile = await fileService.openCamera({
|
|
49
|
+
mediaType: 'photo',
|
|
50
|
+
onOpenFailure: error => {
|
|
51
|
+
if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
|
|
52
|
+
alert({
|
|
53
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
54
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
55
|
+
buttons: [{
|
|
56
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
57
|
+
onPress: () => SBUUtils.openSettings()
|
|
58
|
+
}]
|
|
59
|
+
});
|
|
60
|
+
} else {
|
|
61
|
+
toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
if (mediaFile) {
|
|
66
|
+
// Image compression
|
|
67
|
+
if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.type, sbOptions.chat.imageCompressionEnabled)) {
|
|
68
|
+
await SBUUtils.safeRun(async () => {
|
|
69
|
+
const compressed = await mediaService.compressImage({
|
|
70
|
+
uri: mediaFile.uri,
|
|
71
|
+
maxWidth: imageCompressionConfig.width,
|
|
72
|
+
maxHeight: imageCompressionConfig.height,
|
|
73
|
+
compressionRate: imageCompressionConfig.compressionRate
|
|
74
|
+
});
|
|
75
|
+
if (compressed) {
|
|
76
|
+
mediaFile.uri = compressed.uri;
|
|
77
|
+
mediaFile.size = compressed.size;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
sendFileMessage(mediaFile);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (input.camera.enableVideo) {
|
|
87
|
+
sheetItems.push({
|
|
88
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA_VIDEO,
|
|
89
|
+
icon: 'camera',
|
|
90
|
+
onPress: async () => {
|
|
91
|
+
const mediaFile = await fileService.openCamera({
|
|
92
|
+
mediaType: 'video',
|
|
93
|
+
onOpenFailure: error => {
|
|
94
|
+
if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
|
|
95
|
+
alert({
|
|
96
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
97
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
98
|
+
buttons: [{
|
|
99
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
100
|
+
onPress: () => SBUUtils.openSettings()
|
|
101
|
+
}]
|
|
102
|
+
});
|
|
103
|
+
} else {
|
|
104
|
+
toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
if (mediaFile) {
|
|
109
|
+
sendFileMessage(mediaFile);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (input.gallery.enablePhoto || input.gallery.enableVideo) {
|
|
115
|
+
const mediaType = (() => {
|
|
116
|
+
switch (true) {
|
|
117
|
+
case input.gallery.enablePhoto && input.gallery.enableVideo:
|
|
118
|
+
return 'all';
|
|
119
|
+
case input.gallery.enablePhoto && !input.gallery.enableVideo:
|
|
120
|
+
return 'photo';
|
|
121
|
+
case !input.gallery.enablePhoto && input.gallery.enableVideo:
|
|
122
|
+
return 'video';
|
|
123
|
+
default:
|
|
124
|
+
return 'all';
|
|
125
|
+
}
|
|
126
|
+
})();
|
|
127
|
+
sheetItems.push({
|
|
128
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY,
|
|
129
|
+
icon: 'photo',
|
|
130
|
+
onPress: async () => {
|
|
131
|
+
const mediaFiles = await fileService.openMediaLibrary({
|
|
132
|
+
selectionLimit: 1,
|
|
133
|
+
mediaType,
|
|
134
|
+
onOpenFailure: error => {
|
|
135
|
+
if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
|
|
136
|
+
alert({
|
|
137
|
+
title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
|
|
138
|
+
message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_DEVICE_STORAGE, STRINGS.LABELS.PERMISSION_APP_NAME),
|
|
139
|
+
buttons: [{
|
|
140
|
+
text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
|
|
141
|
+
onPress: () => SBUUtils.openSettings()
|
|
142
|
+
}]
|
|
143
|
+
});
|
|
144
|
+
} else {
|
|
145
|
+
toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (mediaFiles && mediaFiles[0]) {
|
|
150
|
+
const mediaFile = mediaFiles[0];
|
|
151
|
+
|
|
152
|
+
// Image compression
|
|
153
|
+
if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.type, sbOptions.chat.imageCompressionEnabled)) {
|
|
154
|
+
await SBUUtils.safeRun(async () => {
|
|
155
|
+
const compressed = await mediaService.compressImage({
|
|
156
|
+
uri: mediaFile.uri,
|
|
157
|
+
maxWidth: imageCompressionConfig.width,
|
|
158
|
+
maxHeight: imageCompressionConfig.height,
|
|
159
|
+
compressionRate: imageCompressionConfig.compressionRate
|
|
160
|
+
});
|
|
161
|
+
if (compressed) {
|
|
162
|
+
mediaFile.uri = compressed.uri;
|
|
163
|
+
mediaFile.size = compressed.size;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
sendFileMessage(mediaFile);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
if (input.enableDocument) {
|
|
173
|
+
sheetItems.push({
|
|
174
|
+
title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_FILES,
|
|
175
|
+
icon: 'document',
|
|
176
|
+
onPress: async () => {
|
|
177
|
+
const documentFile = await fileService.openDocument({
|
|
178
|
+
onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error')
|
|
179
|
+
});
|
|
180
|
+
if (documentFile) {
|
|
181
|
+
// Image compression
|
|
182
|
+
if (isImage(documentFile.uri, documentFile.type) && shouldCompressImage(documentFile.type, sbOptions.chat.imageCompressionEnabled)) {
|
|
183
|
+
await SBUUtils.safeRun(async () => {
|
|
184
|
+
const compressed = await mediaService.compressImage({
|
|
185
|
+
uri: documentFile.uri,
|
|
186
|
+
maxWidth: imageCompressionConfig.width,
|
|
187
|
+
maxHeight: imageCompressionConfig.height,
|
|
188
|
+
compressionRate: imageCompressionConfig.compressionRate
|
|
189
|
+
});
|
|
190
|
+
if (compressed) {
|
|
191
|
+
documentFile.uri = compressed.uri;
|
|
192
|
+
documentFile.size = compressed.size;
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
sendFileMessage(documentFile);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return sheetItems;
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=useChannelInputItems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useAlert","useToast","isImage","shouldCompressImage","useIIFE","SBUError","SBUUtils","useLocalization","usePlatformService","useSendbirdChat","useChannelInputItems","channel","sendFileMessage","sbOptions","imageCompressionConfig","STRINGS","fileService","mediaService","alert","toast","sheetItems","input","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","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","text","ALERT_PERMISSIONS_OK","openSettings","show","TOAST","OPEN_CAMERA_ERROR","uri","type","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"],"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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"}
|
|
@@ -63,7 +63,7 @@ const useConnection = () => {
|
|
|
63
63
|
Logger.warn('[useConnection]', 'clear cached-data');
|
|
64
64
|
await sdk.clearCachedData().catch(e => Logger.warn('[useConnection]', 'clear cached-data failure', e));
|
|
65
65
|
} else if (sdk.currentUser) {
|
|
66
|
-
await initEmoji(sdk, emojiManager);
|
|
66
|
+
await Promise.allSettled([initEmoji(sdk, emojiManager), initDashboardConfigs(sdk)]);
|
|
67
67
|
Logger.debug('[useConnection]', 'connected! (offline)');
|
|
68
68
|
setCurrentUser(sdk.currentUser);
|
|
69
69
|
return sdk.currentUser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useUIKitConfig","Logger","useSendbirdChat","usePushTokenRegistration","cacheRestrictCodes","isCacheRestrictedError","error","some","code","initEmoji","sdk","emojiManager","_sdk$appInfo","init","appInfo","emojiHash","container","getAllEmoji","useConnection","initDashboardConfigs","setCurrentUser","sbOptions","registerPushTokenForCurrentUser","unregisterPushTokenForCurrentUser","connect","userId","opts","debug","user","accessToken","nickname","updateCurrentUserInfo","then","updatedUser","catch","e","warn","chat","useUserIdForNicknameEnabled","autoPushTokenRegistrationEnabled","Promise","allSettled","isCacheEnabled","message","clearCachedData","currentUser","disconnect","undefined","reconnect"],"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":["useCallback","useUIKitConfig","Logger","useSendbirdChat","usePushTokenRegistration","cacheRestrictCodes","isCacheRestrictedError","error","some","code","initEmoji","sdk","emojiManager","_sdk$appInfo","init","appInfo","emojiHash","container","getAllEmoji","useConnection","initDashboardConfigs","setCurrentUser","sbOptions","registerPushTokenForCurrentUser","unregisterPushTokenForCurrentUser","connect","userId","opts","debug","user","accessToken","nickname","updateCurrentUserInfo","then","updatedUser","catch","e","warn","chat","useUserIdForNicknameEnabled","autoPushTokenRegistrationEnabled","Promise","allSettled","isCacheEnabled","message","clearCachedData","currentUser","disconnect","undefined","reconnect"],"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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"}
|