@sendbird/uikit-react-native 3.1.2 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -42
- package/lib/commonjs/components/ChannelInput/MessageToReplyPreview.js +145 -0
- package/lib/commonjs/components/ChannelInput/MessageToReplyPreview.js.map +1 -0
- package/lib/commonjs/components/ChannelInput/SendInput.js +147 -312
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js +238 -0
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js.map +1 -0
- package/lib/commonjs/components/ChannelInput/index.js +5 -1
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +24 -13
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +100 -5
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/MessageSearchResultItem.js +1 -0
- package/lib/commonjs/components/MessageSearchResultItem.js.map +1 -1
- package/lib/commonjs/components/OpenChannelMessageRenderer/index.js +1 -0
- package/lib/commonjs/components/OpenChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +2 -2
- package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/index.js.map +1 -1
- package/lib/commonjs/components/StatusComposition.js.map +1 -1
- package/lib/commonjs/constants.js +5 -1
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js +1 -0
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/commonjs/containers/InternalErrorBoundaryContainer.js.map +1 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +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/GroupChannelMessageList.js +27 -42
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js +109 -5
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/domain/userList/types.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +30 -4
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createMessageSearchFragment.js +1 -1
- package/lib/commonjs/fragments/createMessageSearchFragment.js.map +1 -1
- package/lib/commonjs/hooks/useChannelInputItems.js +211 -0
- package/lib/commonjs/hooks/useChannelInputItems.js.map +1 -0
- package/lib/commonjs/hooks/useConnection.js +1 -1
- package/lib/commonjs/hooks/useConnection.js.map +1 -1
- package/lib/commonjs/hooks/useVoiceMessageInput.js +207 -0
- package/lib/commonjs/hooks/useVoiceMessageInput.js.map +1 -0
- package/lib/commonjs/index.js +32 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/libs/MentionManager.js.map +1 -1
- package/lib/commonjs/libs/SBUUtils.js +4 -0
- package/lib/commonjs/libs/SBUUtils.js.map +1 -1
- package/lib/commonjs/libs/VoiceMessageConfig.js +30 -0
- package/lib/commonjs/libs/VoiceMessageConfig.js.map +1 -0
- package/lib/commonjs/localization/StringSet.type.js.map +1 -1
- package/lib/commonjs/localization/createBaseStringSet.js +24 -9
- package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
- package/lib/commonjs/platform/createFileService.expo.js +10 -0
- package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
- package/lib/commonjs/platform/createFileService.native.js +19 -0
- package/lib/commonjs/platform/createFileService.native.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.expo.js +137 -0
- package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -0
- package/lib/commonjs/platform/createPlayerService.native.js +139 -0
- package/lib/commonjs/platform/createPlayerService.native.js.map +1 -0
- package/lib/commonjs/platform/createRecorderService.expo.js +158 -0
- package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -0
- package/lib/commonjs/platform/createRecorderService.native.js +157 -0
- package/lib/commonjs/platform/createRecorderService.native.js.map +1 -0
- package/lib/commonjs/platform/types.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/MessageToReplyPreview.js +137 -0
- package/lib/module/components/ChannelInput/MessageToReplyPreview.js.map +1 -0
- package/lib/module/components/ChannelInput/SendInput.js +149 -314
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/components/ChannelInput/VoiceMessageInput.js +228 -0
- package/lib/module/components/ChannelInput/VoiceMessageInput.js.map +1 -0
- package/lib/module/components/ChannelInput/index.js +5 -1
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +2 -2
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +24 -13
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js +99 -6
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/MessageSearchResultItem.js +2 -1
- package/lib/module/components/MessageSearchResultItem.js.map +1 -1
- package/lib/module/components/OpenChannelMessageRenderer/index.js +1 -0
- package/lib/module/components/OpenChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +2 -2
- package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/index.js.map +1 -1
- package/lib/module/components/StatusComposition.js.map +1 -1
- package/lib/module/constants.js +2 -0
- package/lib/module/constants.js.map +1 -1
- package/lib/module/containers/GroupChannelPreviewContainer.js +2 -1
- package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/module/containers/InternalErrorBoundaryContainer.js.map +1 -1
- package/lib/module/containers/SendbirdUIKitContainer.js +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/GroupChannelMessageList.js +28 -43
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannel/module/moduleContext.js +111 -7
- package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/domain/userList/types.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +32 -6
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createMessageSearchFragment.js +1 -1
- package/lib/module/fragments/createMessageSearchFragment.js.map +1 -1
- package/lib/module/hooks/useChannelInputItems.js +203 -0
- package/lib/module/hooks/useChannelInputItems.js.map +1 -0
- package/lib/module/hooks/useConnection.js +1 -1
- package/lib/module/hooks/useConnection.js.map +1 -1
- package/lib/module/hooks/useVoiceMessageInput.js +199 -0
- package/lib/module/hooks/useVoiceMessageInput.js.map +1 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/libs/MentionManager.js.map +1 -1
- package/lib/module/libs/SBUUtils.js +4 -0
- package/lib/module/libs/SBUUtils.js.map +1 -1
- package/lib/module/libs/VoiceMessageConfig.js +23 -0
- package/lib/module/libs/VoiceMessageConfig.js.map +1 -0
- package/lib/module/localization/StringSet.type.js.map +1 -1
- package/lib/module/localization/createBaseStringSet.js +25 -10
- package/lib/module/localization/createBaseStringSet.js.map +1 -1
- package/lib/module/platform/createFileService.expo.js +10 -0
- package/lib/module/platform/createFileService.expo.js.map +1 -1
- package/lib/module/platform/createFileService.native.js +19 -0
- package/lib/module/platform/createFileService.native.js.map +1 -1
- package/lib/module/platform/createPlayerService.expo.js +129 -0
- package/lib/module/platform/createPlayerService.expo.js.map +1 -0
- package/lib/module/platform/createPlayerService.native.js +132 -0
- package/lib/module/platform/createPlayerService.native.js.map +1 -0
- package/lib/module/platform/createRecorderService.expo.js +150 -0
- package/lib/module/platform/createRecorderService.expo.js.map +1 -0
- package/lib/module/platform/createRecorderService.native.js +149 -0
- package/lib/module/platform/createRecorderService.native.js.map +1 -0
- package/lib/module/platform/types.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelCover.d.ts +2 -1
- package/lib/typescript/src/components/ChannelInput/AttachmentsButton.d.ts +2 -1
- package/lib/typescript/src/components/ChannelInput/MessageToReplyPreview.d.ts +7 -0
- package/lib/typescript/src/components/ChannelInput/VoiceMessageInput.d.ts +11 -0
- package/lib/typescript/src/components/ChannelInput/index.d.ts +7 -3
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +1 -1
- package/lib/typescript/src/components/FileViewer.d.ts +2 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.d.ts +2 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.d.ts +1 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.d.ts +1 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +4 -2
- package/lib/typescript/src/components/NewMessagesButton.d.ts +1 -1
- package/lib/typescript/src/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.d.ts +2 -1
- package/lib/typescript/src/components/ProviderLayout.d.ts +1 -1
- package/lib/typescript/src/components/ReactionAddons/BottomSheetReactionAddon.d.ts +2 -1
- package/lib/typescript/src/components/ReactionAddons/MessageReactionAddon.d.ts +2 -1
- package/lib/typescript/src/components/ReactionAddons/ReactionRoundedButton.d.ts +3 -2
- package/lib/typescript/src/components/ReactionAddons/index.d.ts +3 -2
- package/lib/typescript/src/components/ReactionBottomSheets/ReactionListBottomSheet.d.ts +2 -1
- package/lib/typescript/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.d.ts +2 -1
- package/lib/typescript/src/components/ReactionBottomSheets/index.d.ts +4 -4
- package/lib/typescript/src/components/ScrollToBottomButton.d.ts +1 -1
- package/lib/typescript/src/components/StatusComposition.d.ts +4 -4
- package/lib/typescript/src/components/TypedPlaceholder.d.ts +2 -1
- package/lib/typescript/src/components/UserActionBar.d.ts +2 -1
- package/lib/typescript/src/components/UserSelectableBar.d.ts +2 -1
- package/lib/typescript/src/constants.d.ts +2 -0
- package/lib/typescript/src/containers/GroupChannelPreviewContainer.d.ts +2 -1
- package/lib/typescript/src/containers/InternalErrorBoundaryContainer.d.ts +3 -3
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +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 +45 -0
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelBannedUsers/component/GroupChannelBannedUsersStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListTypeSelector.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelModeration/component/GroupChannelModerationHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelModeration/component/GroupChannelModerationMenu.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelMutedMembers/component/GroupChannelMutedMembersStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelNotifications/component/GroupChannelNotificationsView.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsList.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelOperators/component/GroupChannelOperatorsStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.d.ts +2 -1
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchHeader.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchList.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/messageSearch/component/MessageSearchStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +2 -2
- package/lib/typescript/src/domain/openChannel/component/OpenChannelInput.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelMessageList.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelBannedUsers/component/OpenChannelBannedUsersStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelCreate/component/OpenChannelCreateStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelModeration/component/OpenChannelModerationHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelModeration/component/OpenChannelModerationMenu.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelMutedParticipants/component/OpenChannelMutedParticipantsStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsList.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelOperators/component/OpenChannelOperatorsStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsHeader.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsInfo.d.ts +2 -1
- package/lib/typescript/src/domain/openChannelSettings/component/OpenChannelSettingsMenu.d.ts +2 -1
- package/lib/typescript/src/domain/userList/component/UserListHeader.d.ts +3 -3
- package/lib/typescript/src/domain/userList/component/UserListList.d.ts +1 -1
- package/lib/typescript/src/domain/userList/component/UserListStatusEmpty.d.ts +2 -1
- package/lib/typescript/src/domain/userList/component/UserListStatusLoading.d.ts +2 -1
- package/lib/typescript/src/domain/userList/types.d.ts +2 -2
- package/lib/typescript/src/hooks/useChannelInputItems.d.ts +10 -0
- package/lib/typescript/src/hooks/useVoiceMessageInput.d.ts +53 -0
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/libs/MentionManager.d.ts +2 -1
- package/lib/typescript/src/libs/SBUUtils.d.ts +1 -0
- package/lib/typescript/src/libs/VoiceMessageConfig.d.ts +25 -0
- package/lib/typescript/src/localization/StringSet.type.d.ts +7 -0
- package/lib/typescript/src/platform/createPlayerService.expo.d.ts +7 -0
- package/lib/typescript/src/platform/createPlayerService.native.d.ts +9 -0
- package/lib/typescript/src/platform/createRecorderService.expo.d.ts +7 -0
- package/lib/typescript/src/platform/createRecorderService.native.d.ts +9 -0
- package/lib/typescript/src/platform/types.d.ts +100 -1
- package/lib/typescript/src/types.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +9 -11
- package/src/components/ChannelInput/MessageToReplyPreview.tsx +133 -0
- package/src/components/ChannelInput/SendInput.tsx +129 -320
- package/src/components/ChannelInput/VoiceMessageInput.tsx +206 -0
- package/src/components/ChannelInput/index.tsx +12 -4
- package/src/components/ChannelMessageList/index.tsx +3 -1
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +24 -11
- package/src/components/GroupChannelMessageRenderer/index.tsx +80 -3
- package/src/components/MessageSearchResultItem.tsx +2 -1
- package/src/components/OpenChannelMessageRenderer/index.tsx +1 -0
- package/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.tsx +2 -2
- package/src/components/ReactionBottomSheets/index.tsx +3 -2
- package/src/components/StatusComposition.tsx +3 -3
- package/src/constants.ts +2 -0
- package/src/containers/GroupChannelPreviewContainer.tsx +2 -0
- package/src/containers/InternalErrorBoundaryContainer.tsx +1 -1
- package/src/containers/SendbirdUIKitContainer.tsx +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/GroupChannelMessageList.tsx +29 -43
- package/src/domain/groupChannel/module/moduleContext.tsx +119 -7
- package/src/domain/groupChannel/types.ts +41 -0
- package/src/domain/userList/types.ts +2 -2
- package/src/fragments/createGroupChannelFragment.tsx +32 -5
- package/src/fragments/createMessageSearchFragment.tsx +1 -1
- package/src/hooks/useChannelInputItems.ts +215 -0
- package/src/hooks/useConnection.ts +1 -1
- package/src/hooks/useVoiceMessageInput.ts +237 -0
- package/src/index.ts +4 -0
- package/src/libs/MentionManager.tsx +1 -1
- package/src/libs/SBUUtils.ts +5 -0
- package/src/libs/VoiceMessageConfig.ts +28 -0
- package/src/localization/StringSet.type.ts +8 -0
- package/src/localization/createBaseStringSet.ts +27 -11
- package/src/platform/createFileService.expo.ts +10 -0
- package/src/platform/createFileService.native.ts +19 -0
- package/src/platform/createPlayerService.expo.tsx +142 -0
- package/src/platform/createPlayerService.native.tsx +148 -0
- package/src/platform/createRecorderService.expo.tsx +160 -0
- package/src/platform/createRecorderService.native.tsx +170 -0
- package/src/platform/types.ts +114 -1
- package/src/types.ts +1 -1
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Box","OpenChannelMessage","calcMessageGrouping","getMessageType","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","OpenChannelMessageDateSeparator","OpenChannelMessageRenderer","_ref","channel","message","onPress","onLongPress","onShowUserProfile","enableMessageGrouping","prevMessage","nextMessage","sbOptions","STRINGS","mediaService","groupWithPrev","Boolean","messageProps","onPressURL","url","openURL","onPressAvatar","sender","hideMessageButton","grouped","strings","edited","OPEN_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","senderName","nickname","LABELS","USER_NO_NAME","sentDate","MESSAGE_BUBBLE_TIME","fileName","isFileMessage","MESSAGE_BUBBLE_FILE_TITLE","unknownTitle","MESSAGE_BUBBLE_UNKNOWN_TITLE","unknownDescription","MESSAGE_BUBBLE_UNKNOWN_DESC","renderMessage","createElement","Admin","_extends","User","uikitWithAppInfo","openChannel","enableOgtag","OpenGraphUser","File","ImageFile","VideoFile","fetchThumbnailFromVideoSource","uri","getVideoThumbnail","timeMills","Unknown","memo"],"sources":["index.tsx"],"sourcesContent":["import React from 'react';\n\nimport type { OpenChannelMessageProps } from '@sendbird/uikit-react-native-foundation';\nimport { Box, OpenChannelMessage } from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdAdminMessage,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n calcMessageGrouping,\n getMessageType,\n} from '@sendbird/uikit-utils';\n\nimport type { OpenChannelProps } from '../../domain/openChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport OpenChannelMessageDateSeparator from './OpenChannelMessageDateSeparator';\n\nconst OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage'] = ({\n channel,\n message,\n onPress,\n onLongPress,\n onShowUserProfile,\n enableMessageGrouping,\n prevMessage,\n nextMessage,\n}) => {\n const { sbOptions } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { mediaService } = usePlatformService();\n const { groupWithPrev } = calcMessageGrouping(Boolean(enableMessageGrouping), message, prevMessage, nextMessage);\n\n const messageProps: Omit<OpenChannelMessageProps<SendbirdMessage>, 'message'> = {\n channel,\n onPress,\n onLongPress,\n onPressURL: (url) => SBUUtils.openURL(url),\n onPressAvatar: () => 'sender' in message && onShowUserProfile?.(message.sender, { hideMessageButton: true }),\n grouped: groupWithPrev,\n strings: {\n edited: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,\n senderName: ('sender' in message && message.sender.nickname) || STRINGS.LABELS.USER_NO_NAME,\n sentDate: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_TIME(message),\n fileName: message.isFileMessage() ? STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '',\n unknownTitle: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message),\n unknownDescription: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message),\n },\n };\n const renderMessage = () => {\n switch (getMessageType(message)) {\n case 'admin': {\n return <OpenChannelMessage.Admin message={message as SendbirdAdminMessage} {...messageProps} />;\n }\n case 'user': {\n return <OpenChannelMessage.User message={message as SendbirdUserMessage} {...messageProps} />;\n }\n case 'user.opengraph': {\n if (sbOptions.uikitWithAppInfo.openChannel.channel.enableOgtag) {\n return <OpenChannelMessage.OpenGraphUser message={message as SendbirdUserMessage} {...messageProps} />;\n } else {\n return <OpenChannelMessage.User message={message as SendbirdUserMessage} {...messageProps} />;\n }\n }\n case 'file':\n case 'file.audio': {\n return <OpenChannelMessage.File message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.image': {\n return <OpenChannelMessage.ImageFile message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.video': {\n return (\n <OpenChannelMessage.VideoFile\n message={message as SendbirdFileMessage}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n {...messageProps}\n />\n );\n }\n case 'unknown':\n default: {\n return <OpenChannelMessage.Unknown message={message} {...messageProps} />;\n }\n }\n };\n\n return (\n <Box>\n <OpenChannelMessageDateSeparator message={message} prevMessage={prevMessage} />\n {renderMessage()}\n </Box>\n );\n};\n\nexport default React.memo(OpenChannelMessageRenderer);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","Box","OpenChannelMessage","calcMessageGrouping","getMessageType","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","OpenChannelMessageDateSeparator","OpenChannelMessageRenderer","_ref","channel","message","onPress","onLongPress","onShowUserProfile","enableMessageGrouping","prevMessage","nextMessage","sbOptions","STRINGS","mediaService","groupWithPrev","Boolean","messageProps","onPressURL","url","openURL","onPressAvatar","sender","hideMessageButton","grouped","strings","edited","OPEN_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","senderName","nickname","LABELS","USER_NO_NAME","sentDate","MESSAGE_BUBBLE_TIME","fileName","isFileMessage","MESSAGE_BUBBLE_FILE_TITLE","unknownTitle","MESSAGE_BUBBLE_UNKNOWN_TITLE","unknownDescription","MESSAGE_BUBBLE_UNKNOWN_DESC","renderMessage","createElement","Admin","_extends","User","uikitWithAppInfo","openChannel","enableOgtag","OpenGraphUser","File","ImageFile","VideoFile","fetchThumbnailFromVideoSource","uri","getVideoThumbnail","timeMills","Unknown","memo"],"sources":["index.tsx"],"sourcesContent":["import React from 'react';\n\nimport type { OpenChannelMessageProps } from '@sendbird/uikit-react-native-foundation';\nimport { Box, OpenChannelMessage } from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdAdminMessage,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n calcMessageGrouping,\n getMessageType,\n} from '@sendbird/uikit-utils';\n\nimport type { OpenChannelProps } from '../../domain/openChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport OpenChannelMessageDateSeparator from './OpenChannelMessageDateSeparator';\n\nconst OpenChannelMessageRenderer: OpenChannelProps['Fragment']['renderMessage'] = ({\n channel,\n message,\n onPress,\n onLongPress,\n onShowUserProfile,\n enableMessageGrouping,\n prevMessage,\n nextMessage,\n}) => {\n const { sbOptions } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { mediaService } = usePlatformService();\n const { groupWithPrev } = calcMessageGrouping(Boolean(enableMessageGrouping), message, prevMessage, nextMessage);\n\n const messageProps: Omit<OpenChannelMessageProps<SendbirdMessage>, 'message'> = {\n channel,\n onPress,\n onLongPress,\n onPressURL: (url) => SBUUtils.openURL(url),\n onPressAvatar: () => 'sender' in message && onShowUserProfile?.(message.sender, { hideMessageButton: true }),\n grouped: groupWithPrev,\n strings: {\n edited: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,\n senderName: ('sender' in message && message.sender.nickname) || STRINGS.LABELS.USER_NO_NAME,\n sentDate: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_TIME(message),\n fileName: message.isFileMessage() ? STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '',\n unknownTitle: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message),\n unknownDescription: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message),\n },\n };\n const renderMessage = () => {\n switch (getMessageType(message)) {\n case 'admin': {\n return <OpenChannelMessage.Admin message={message as SendbirdAdminMessage} {...messageProps} />;\n }\n case 'user': {\n return <OpenChannelMessage.User message={message as SendbirdUserMessage} {...messageProps} />;\n }\n case 'user.opengraph': {\n if (sbOptions.uikitWithAppInfo.openChannel.channel.enableOgtag) {\n return <OpenChannelMessage.OpenGraphUser message={message as SendbirdUserMessage} {...messageProps} />;\n } else {\n return <OpenChannelMessage.User message={message as SendbirdUserMessage} {...messageProps} />;\n }\n }\n case 'file':\n case 'file.voice':\n case 'file.audio': {\n return <OpenChannelMessage.File message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.image': {\n return <OpenChannelMessage.ImageFile message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.video': {\n return (\n <OpenChannelMessage.VideoFile\n message={message as SendbirdFileMessage}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n {...messageProps}\n />\n );\n }\n case 'unknown':\n default: {\n return <OpenChannelMessage.Unknown message={message} {...messageProps} />;\n }\n }\n };\n\n return (\n <Box>\n <OpenChannelMessageDateSeparator message={message} prevMessage={prevMessage} />\n {renderMessage()}\n </Box>\n );\n};\n\nexport default React.memo(OpenChannelMessageRenderer);\n"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ const ReactionUserListBottomSheet = _ref => {
|
|
|
11
11
|
reactionCtx,
|
|
12
12
|
chatCtx,
|
|
13
13
|
localizationCtx,
|
|
14
|
-
|
|
14
|
+
onPressUserProfile
|
|
15
15
|
} = _ref;
|
|
16
16
|
const {
|
|
17
17
|
width
|
|
@@ -139,7 +139,7 @@ const ReactionUserListBottomSheet = _ref => {
|
|
|
139
139
|
onPress: async () => {
|
|
140
140
|
if (user) {
|
|
141
141
|
await onClose();
|
|
142
|
-
|
|
142
|
+
onPressUserProfile(user);
|
|
143
143
|
}
|
|
144
144
|
},
|
|
145
145
|
style: styles.pageItem
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useRef","useState","Animated","Easing","Pressable","ScrollView","View","useWindowDimensions","useSafeAreaInsets","Avatar","Divider","Image","Modal","Text","createStyleSheet","useUIKitTheme","getReactionCount","truncatedCount","ReactionUserListBottomSheet","_ref","visible","onClose","onDismiss","reactionCtx","chatCtx","localizationCtx","userProfileCtx","width","bottom","left","right","colors","tabIndex","setTabIndex","scrollRef","tabIndicatorValue","tabIndicatorAnimated","x","Value","current","focusedWithLayoutCalculated","emojiManager","channel","message","focusIndex","STRINGS","color","ui","reaction","default","reactions","focusedReaction","containerSafeArea","paddingLeft","styles","layout","paddingHorizontal","paddingRight","focusTab","index","animated","arguments","length","undefined","indicatorValue","_scrollRef$current","animateTabIndicator","scrollTo","baseConfig","duration","easing","inOut","ease","useNativeDriver","parallel","timing","toValue","start","layoutCalculated","every","Boolean","renderTabs","createElement","style","tabsWrapper","map","isFocused","key","isLastItem","emoji","allEmojiMap","tabItem","marginRight","onPress","onLayout","e","nativeEvent","source","uri","url","tabEmoji","button","selected","highlight","enabled","tabIndicator","backgroundColor","renderPage","Fragment","userIds","userId","isGroupChannel","user","members","find","show","pageItem","size","profileUrl","containerStyle","avatar","subtitle2","flex","nickname","LABELS","USER_NO_NAME","type","backgroundStyle","modal","container","paddingBottom","dialog","none","background","ref","horizontal","bounces","showsHorizontalScrollIndicator","contentContainerStyle","tabsContainer","top","showsVerticalScrollIndicator","pageContainer","overflow","borderTopLeftRadius","borderTopRightRadius","paddingTop","alignItems","justifyContent","flexGrow","flexDirection","height","position"],"sources":["ReactionUserListBottomSheet.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Animated, Easing, Pressable, ScrollView, View, useWindowDimensions } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Avatar,\n Divider,\n Image,\n Modal,\n Text,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdReaction, getReactionCount, truncatedCount } from '@sendbird/uikit-utils';\n\nimport type { ReactionBottomSheetProps } from './index';\n\nconst ReactionUserListBottomSheet = ({\n visible,\n onClose,\n onDismiss,\n reactionCtx,\n chatCtx,\n localizationCtx,\n userProfileCtx,\n}: ReactionBottomSheetProps) => {\n const { width } = useWindowDimensions();\n const { bottom, left, right } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n\n const [tabIndex, setTabIndex] = useState(0);\n const scrollRef = useRef<ScrollView>();\n const tabIndicatorValue = useRef<Array<{ x: number; width: number }>>([]);\n const tabIndicatorAnimated = useRef({ x: new Animated.Value(0), width: new Animated.Value(0) }).current;\n const focusedWithLayoutCalculated = useRef(false);\n\n const { emojiManager } = chatCtx;\n const { channel, message, focusIndex } = reactionCtx;\n const { STRINGS } = localizationCtx;\n\n const color = colors.ui.reaction.default;\n const reactions = message?.reactions ?? [];\n const focusedReaction = reactions[tabIndex] as SendbirdReaction | undefined;\n const containerSafeArea = {\n paddingLeft: left + styles.layout.paddingHorizontal,\n paddingRight: right + styles.layout.paddingHorizontal,\n };\n\n const focusTab = (index: number, animated = true) => {\n const indicatorValue = tabIndicatorValue.current[index];\n if (indicatorValue) {\n setTabIndex(index);\n animateTabIndicator(indicatorValue.x, indicatorValue.width, animated);\n scrollRef.current?.scrollTo({ x: indicatorValue.x, animated });\n }\n };\n\n const animateTabIndicator = (x: number, width: number, animated = true) => {\n const baseConfig = { duration: animated ? 300 : 0, easing: Easing.inOut(Easing.ease), useNativeDriver: false };\n Animated.parallel([\n Animated.timing(tabIndicatorAnimated.x, { toValue: x, ...baseConfig }),\n Animated.timing(tabIndicatorAnimated.width, { toValue: width, ...baseConfig }),\n ]).start();\n };\n\n const layoutCalculated = () => {\n return tabIndicatorValue.current.length === reactions.length && tabIndicatorValue.current.every(Boolean);\n };\n\n useEffect(() => {\n if (!visible) {\n tabIndicatorValue.current = [];\n tabIndicatorAnimated.x = new Animated.Value(0);\n tabIndicatorAnimated.width = new Animated.Value(0);\n focusedWithLayoutCalculated.current = false;\n }\n }, [visible]);\n\n const renderTabs = () => {\n return (\n <Pressable style={styles.tabsWrapper}>\n {reactions.map((reaction, index) => {\n const isFocused = focusedReaction?.key === reaction.key;\n const isLastItem = reactions.length - 1 === index;\n const emoji = emojiManager.allEmojiMap[reaction.key];\n\n return (\n <Pressable\n key={reaction.key}\n style={[styles.tabItem, isLastItem && { marginRight: styles.layout.marginRight }]}\n onPress={() => focusTab(index)}\n onLayout={(e) => {\n tabIndicatorValue.current[index] = e.nativeEvent.layout;\n if (layoutCalculated()) {\n if (focusedWithLayoutCalculated.current) {\n focusTab(tabIndex, false);\n } else {\n focusedWithLayoutCalculated.current = true;\n focusTab(focusIndex);\n }\n }\n }}\n >\n <Image source={{ uri: emoji.url }} style={styles.tabEmoji} />\n <Text button color={isFocused ? color.selected.highlight : color.enabled.highlight}>\n {truncatedCount(getReactionCount(reaction))}\n </Text>\n </Pressable>\n );\n })}\n <Animated.View\n style={[\n styles.tabIndicator,\n {\n left: tabIndicatorAnimated.x,\n width: tabIndicatorAnimated.width,\n backgroundColor: color.selected.highlight,\n },\n ]}\n />\n </Pressable>\n );\n };\n\n const renderPage = () => {\n return (\n <>\n {focusedReaction?.userIds.map((userId) => {\n if (channel?.isGroupChannel()) {\n const user = channel.members.find((x) => x.userId === userId);\n return (\n <Pressable\n key={userId}\n onPress={async () => {\n if (user) {\n await onClose();\n userProfileCtx.show(user);\n }\n }}\n style={styles.pageItem}\n >\n <Avatar size={36} uri={user?.profileUrl} containerStyle={styles.avatar} />\n <Text subtitle2 style={{ flex: 1 }}>\n {user?.nickname || STRINGS.LABELS.USER_NO_NAME}\n </Text>\n </Pressable>\n );\n }\n return null;\n })}\n </>\n );\n };\n\n return (\n <Modal\n type={'slide-no-gesture'}\n visible={Boolean(visible && channel && message)}\n onClose={onClose}\n onDismiss={onDismiss}\n backgroundStyle={styles.modal}\n >\n <View\n style={[\n styles.container,\n { width, paddingBottom: bottom, backgroundColor: colors.ui.dialog.default.none.background },\n ]}\n >\n <ScrollView\n ref={scrollRef as never}\n horizontal\n bounces={false}\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={[containerSafeArea, styles.tabsContainer]}\n >\n {renderTabs()}\n </ScrollView>\n <Divider style={{ top: -1 }} />\n <ScrollView\n bounces={false}\n showsVerticalScrollIndicator={false}\n style={styles.pageContainer}\n contentContainerStyle={containerSafeArea}\n >\n {renderPage()}\n </ScrollView>\n </View>\n </Modal>\n );\n};\n\nconst styles = createStyleSheet({\n layout: {\n paddingHorizontal: 16,\n marginRight: 0,\n },\n container: {\n overflow: 'hidden',\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n paddingTop: 16,\n alignItems: 'center',\n },\n modal: {\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n tabsContainer: {\n flexGrow: 1,\n },\n tabsWrapper: {\n flexGrow: 1,\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'center',\n height: 44,\n },\n tabItem: {\n marginRight: 16,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n tabEmoji: {\n width: 28,\n height: 28,\n marginRight: 4,\n },\n tabIndicator: {\n position: 'absolute',\n bottom: 0,\n height: 3,\n },\n pageContainer: {\n height: 216,\n width: '100%',\n },\n pageItem: {\n flexDirection: 'row',\n width: '100%',\n height: 48,\n alignItems: 'center',\n },\n avatar: {\n marginRight: 16,\n },\n});\n\nexport default ReactionUserListBottomSheet;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","Animated","Easing","Pressable","ScrollView","View","useWindowDimensions","useSafeAreaInsets","Avatar","Divider","Image","Modal","Text","createStyleSheet","useUIKitTheme","getReactionCount","truncatedCount","ReactionUserListBottomSheet","_ref","visible","onClose","onDismiss","reactionCtx","chatCtx","localizationCtx","onPressUserProfile","width","bottom","left","right","colors","tabIndex","setTabIndex","scrollRef","tabIndicatorValue","tabIndicatorAnimated","x","Value","current","focusedWithLayoutCalculated","emojiManager","channel","message","focusIndex","STRINGS","color","ui","reaction","default","reactions","focusedReaction","containerSafeArea","paddingLeft","styles","layout","paddingHorizontal","paddingRight","focusTab","index","animated","arguments","length","undefined","indicatorValue","_scrollRef$current","animateTabIndicator","scrollTo","baseConfig","duration","easing","inOut","ease","useNativeDriver","parallel","timing","toValue","start","layoutCalculated","every","Boolean","renderTabs","createElement","style","tabsWrapper","map","isFocused","key","isLastItem","emoji","allEmojiMap","tabItem","marginRight","onPress","onLayout","e","nativeEvent","source","uri","url","tabEmoji","button","selected","highlight","enabled","tabIndicator","backgroundColor","renderPage","Fragment","userIds","userId","isGroupChannel","user","members","find","pageItem","size","profileUrl","containerStyle","avatar","subtitle2","flex","nickname","LABELS","USER_NO_NAME","type","backgroundStyle","modal","container","paddingBottom","dialog","none","background","ref","horizontal","bounces","showsHorizontalScrollIndicator","contentContainerStyle","tabsContainer","top","showsVerticalScrollIndicator","pageContainer","overflow","borderTopLeftRadius","borderTopRightRadius","paddingTop","alignItems","justifyContent","flexGrow","flexDirection","height","position"],"sources":["ReactionUserListBottomSheet.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Animated, Easing, Pressable, ScrollView, View, useWindowDimensions } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Avatar,\n Divider,\n Image,\n Modal,\n Text,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdReaction, getReactionCount, truncatedCount } from '@sendbird/uikit-utils';\n\nimport type { ReactionBottomSheetProps } from './index';\n\nconst ReactionUserListBottomSheet = ({\n visible,\n onClose,\n onDismiss,\n reactionCtx,\n chatCtx,\n localizationCtx,\n onPressUserProfile,\n}: ReactionBottomSheetProps) => {\n const { width } = useWindowDimensions();\n const { bottom, left, right } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n\n const [tabIndex, setTabIndex] = useState(0);\n const scrollRef = useRef<ScrollView>();\n const tabIndicatorValue = useRef<Array<{ x: number; width: number }>>([]);\n const tabIndicatorAnimated = useRef({ x: new Animated.Value(0), width: new Animated.Value(0) }).current;\n const focusedWithLayoutCalculated = useRef(false);\n\n const { emojiManager } = chatCtx;\n const { channel, message, focusIndex } = reactionCtx;\n const { STRINGS } = localizationCtx;\n\n const color = colors.ui.reaction.default;\n const reactions = message?.reactions ?? [];\n const focusedReaction = reactions[tabIndex] as SendbirdReaction | undefined;\n const containerSafeArea = {\n paddingLeft: left + styles.layout.paddingHorizontal,\n paddingRight: right + styles.layout.paddingHorizontal,\n };\n\n const focusTab = (index: number, animated = true) => {\n const indicatorValue = tabIndicatorValue.current[index];\n if (indicatorValue) {\n setTabIndex(index);\n animateTabIndicator(indicatorValue.x, indicatorValue.width, animated);\n scrollRef.current?.scrollTo({ x: indicatorValue.x, animated });\n }\n };\n\n const animateTabIndicator = (x: number, width: number, animated = true) => {\n const baseConfig = { duration: animated ? 300 : 0, easing: Easing.inOut(Easing.ease), useNativeDriver: false };\n Animated.parallel([\n Animated.timing(tabIndicatorAnimated.x, { toValue: x, ...baseConfig }),\n Animated.timing(tabIndicatorAnimated.width, { toValue: width, ...baseConfig }),\n ]).start();\n };\n\n const layoutCalculated = () => {\n return tabIndicatorValue.current.length === reactions.length && tabIndicatorValue.current.every(Boolean);\n };\n\n useEffect(() => {\n if (!visible) {\n tabIndicatorValue.current = [];\n tabIndicatorAnimated.x = new Animated.Value(0);\n tabIndicatorAnimated.width = new Animated.Value(0);\n focusedWithLayoutCalculated.current = false;\n }\n }, [visible]);\n\n const renderTabs = () => {\n return (\n <Pressable style={styles.tabsWrapper}>\n {reactions.map((reaction, index) => {\n const isFocused = focusedReaction?.key === reaction.key;\n const isLastItem = reactions.length - 1 === index;\n const emoji = emojiManager.allEmojiMap[reaction.key];\n\n return (\n <Pressable\n key={reaction.key}\n style={[styles.tabItem, isLastItem && { marginRight: styles.layout.marginRight }]}\n onPress={() => focusTab(index)}\n onLayout={(e) => {\n tabIndicatorValue.current[index] = e.nativeEvent.layout;\n if (layoutCalculated()) {\n if (focusedWithLayoutCalculated.current) {\n focusTab(tabIndex, false);\n } else {\n focusedWithLayoutCalculated.current = true;\n focusTab(focusIndex);\n }\n }\n }}\n >\n <Image source={{ uri: emoji.url }} style={styles.tabEmoji} />\n <Text button color={isFocused ? color.selected.highlight : color.enabled.highlight}>\n {truncatedCount(getReactionCount(reaction))}\n </Text>\n </Pressable>\n );\n })}\n <Animated.View\n style={[\n styles.tabIndicator,\n {\n left: tabIndicatorAnimated.x,\n width: tabIndicatorAnimated.width,\n backgroundColor: color.selected.highlight,\n },\n ]}\n />\n </Pressable>\n );\n };\n\n const renderPage = () => {\n return (\n <>\n {focusedReaction?.userIds.map((userId) => {\n if (channel?.isGroupChannel()) {\n const user = channel.members.find((x) => x.userId === userId);\n return (\n <Pressable\n key={userId}\n onPress={async () => {\n if (user) {\n await onClose();\n onPressUserProfile(user);\n }\n }}\n style={styles.pageItem}\n >\n <Avatar size={36} uri={user?.profileUrl} containerStyle={styles.avatar} />\n <Text subtitle2 style={{ flex: 1 }}>\n {user?.nickname || STRINGS.LABELS.USER_NO_NAME}\n </Text>\n </Pressable>\n );\n }\n return null;\n })}\n </>\n );\n };\n\n return (\n <Modal\n type={'slide-no-gesture'}\n visible={Boolean(visible && channel && message)}\n onClose={onClose}\n onDismiss={onDismiss}\n backgroundStyle={styles.modal}\n >\n <View\n style={[\n styles.container,\n { width, paddingBottom: bottom, backgroundColor: colors.ui.dialog.default.none.background },\n ]}\n >\n <ScrollView\n ref={scrollRef as never}\n horizontal\n bounces={false}\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={[containerSafeArea, styles.tabsContainer]}\n >\n {renderTabs()}\n </ScrollView>\n <Divider style={{ top: -1 }} />\n <ScrollView\n bounces={false}\n showsVerticalScrollIndicator={false}\n style={styles.pageContainer}\n contentContainerStyle={containerSafeArea}\n >\n {renderPage()}\n </ScrollView>\n </View>\n </Modal>\n );\n};\n\nconst styles = createStyleSheet({\n layout: {\n paddingHorizontal: 16,\n marginRight: 0,\n },\n container: {\n overflow: 'hidden',\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n paddingTop: 16,\n alignItems: 'center',\n },\n modal: {\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n tabsContainer: {\n flexGrow: 1,\n },\n tabsWrapper: {\n flexGrow: 1,\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'center',\n height: 44,\n },\n tabItem: {\n marginRight: 16,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n tabEmoji: {\n width: 28,\n height: 28,\n marginRight: 4,\n },\n tabIndicator: {\n position: 'absolute',\n bottom: 0,\n height: 3,\n },\n pageContainer: {\n height: 216,\n width: '100%',\n },\n pageItem: {\n flexDirection: 'row',\n width: '100%',\n height: 48,\n alignItems: 'center',\n },\n avatar: {\n marginRight: 16,\n },\n});\n\nexport default ReactionUserListBottomSheet;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ReactionList","UserList","ReactionBottomSheets"],"sources":["index.tsx"],"sourcesContent":["import type React from 'react';\n\nimport type {
|
|
1
|
+
{"version":3,"names":["ReactionList","UserList","ReactionBottomSheets"],"sources":["index.tsx"],"sourcesContent":["import type React from 'react';\n\nimport type { SendbirdMember, SendbirdUser } from '@sendbird/uikit-utils';\n\nimport type { LocalizationContext } from '../../contexts/LocalizationCtx';\nimport type { ReactionContext } from '../../contexts/ReactionCtx';\nimport type { SendbirdChatContext } from '../../contexts/SendbirdChatCtx';\nimport ReactionList from './ReactionListBottomSheet';\nimport UserList from './ReactionUserListBottomSheet';\n\ntype GetFromContext<T> = T extends React.Context<infer Value> ? NonNullable<Value> : never;\nexport type ReactionBottomSheetProps = {\n visible: boolean;\n onDismiss: () => void;\n onClose: () => Promise<void>;\n onPressUserProfile: (user: SendbirdUser | SendbirdMember) => void;\n chatCtx: GetFromContext<typeof SendbirdChatContext>;\n reactionCtx: GetFromContext<typeof ReactionContext>;\n localizationCtx: GetFromContext<typeof LocalizationContext>;\n};\n\nexport const ReactionBottomSheets = {\n ReactionList,\n UserList,\n};\n"],"mappings":"AAOA,OAAOA,YAAY,MAAM,2BAA2B;AACpD,OAAOC,QAAQ,MAAM,+BAA+B;AAapD,OAAO,MAAMC,oBAAoB,GAAG;EAClCF,YAAY;EACZC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","StatusComposition","_ref","children","error","ErrorComponent","LoadingComponent","loading","createElement","Fragment"],"sources":["StatusComposition.tsx"],"sourcesContent":["import React from 'react';\n\ntype Props = {\n loading?: boolean;\n LoadingComponent?:
|
|
1
|
+
{"version":3,"names":["React","StatusComposition","_ref","children","error","ErrorComponent","LoadingComponent","loading","createElement","Fragment"],"sources":["StatusComposition.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\n\ntype Props = {\n loading?: boolean;\n LoadingComponent?: ReactNode;\n error?: boolean;\n ErrorComponent?: ReactNode;\n children: React.ReactNode;\n};\nconst StatusComposition = ({ children, error, ErrorComponent, LoadingComponent, loading }: Props) => {\n if (loading && LoadingComponent) return <>{LoadingComponent}</>;\n if (error && ErrorComponent) return <>{ErrorComponent}</>;\n return <>{children}</>;\n};\n\nexport default StatusComposition;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqB,OAAO;AASxC,MAAMC,iBAAiB,GAAGC,IAAA,IAA2E;EAAA,IAA1E;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,cAAc;IAAEC,gBAAgB;IAAEC;EAAe,CAAC,GAAAL,IAAA;EAC9F,IAAIK,OAAO,IAAID,gBAAgB,EAAE,oBAAON,KAAA,CAAAQ,aAAA,CAAAR,KAAA,CAAAS,QAAA,QAAGH,gBAAgB,CAAI;EAC/D,IAAIF,KAAK,IAAIC,cAAc,EAAE,oBAAOL,KAAA,CAAAQ,aAAA,CAAAR,KAAA,CAAAS,QAAA,QAAGJ,cAAc,CAAI;EACzD,oBAAOL,KAAA,CAAAQ,aAAA,CAAAR,KAAA,CAAAS,QAAA,QAAGN,QAAQ,CAAI;AACxB,CAAC;AAED,eAAeF,iBAAiB"}
|
package/lib/module/constants.js
CHANGED
|
@@ -2,4 +2,6 @@ export const DEFAULT_LONG_PRESS_DELAY = 350;
|
|
|
2
2
|
export const MESSAGE_SEARCH_SAFE_SCROLL_DELAY = 500;
|
|
3
3
|
export const MESSAGE_FOCUS_ANIMATION_DELAY = 250;
|
|
4
4
|
export const UNKNOWN_USER_ID = '##__USER_ID_IS_NOT_PROVIDED__##';
|
|
5
|
+
export const VOICE_MESSAGE_META_ARRAY_DURATION_KEY = 'KEY_VOICE_MESSAGE_DURATION';
|
|
6
|
+
export const VOICE_MESSAGE_META_ARRAY_MESSAGE_TYPE_KEY = 'KEY_INTERNAL_MESSAGE_TYPE';
|
|
5
7
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_LONG_PRESS_DELAY","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","MESSAGE_FOCUS_ANIMATION_DELAY","UNKNOWN_USER_ID"],"sources":["constants.ts"],"sourcesContent":["export const DEFAULT_LONG_PRESS_DELAY = 350;\nexport const MESSAGE_SEARCH_SAFE_SCROLL_DELAY = 500;\nexport const MESSAGE_FOCUS_ANIMATION_DELAY = 250;\n\nexport const UNKNOWN_USER_ID = '##__USER_ID_IS_NOT_PROVIDED__##';\n"],"mappings":"AAAA,OAAO,MAAMA,wBAAwB,GAAG,GAAG;AAC3C,OAAO,MAAMC,gCAAgC,GAAG,GAAG;AACnD,OAAO,MAAMC,6BAA6B,GAAG,GAAG;AAEhD,OAAO,MAAMC,eAAe,GAAG,iCAAiC"}
|
|
1
|
+
{"version":3,"names":["DEFAULT_LONG_PRESS_DELAY","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","MESSAGE_FOCUS_ANIMATION_DELAY","UNKNOWN_USER_ID","VOICE_MESSAGE_META_ARRAY_DURATION_KEY","VOICE_MESSAGE_META_ARRAY_MESSAGE_TYPE_KEY"],"sources":["constants.ts"],"sourcesContent":["export const DEFAULT_LONG_PRESS_DELAY = 350;\nexport const MESSAGE_SEARCH_SAFE_SCROLL_DELAY = 500;\nexport const MESSAGE_FOCUS_ANIMATION_DELAY = 250;\n\nexport const UNKNOWN_USER_ID = '##__USER_ID_IS_NOT_PROVIDED__##';\nexport const VOICE_MESSAGE_META_ARRAY_DURATION_KEY = 'KEY_VOICE_MESSAGE_DURATION';\nexport const VOICE_MESSAGE_META_ARRAY_MESSAGE_TYPE_KEY = 'KEY_INTERNAL_MESSAGE_TYPE';\n"],"mappings":"AAAA,OAAO,MAAMA,wBAAwB,GAAG,GAAG;AAC3C,OAAO,MAAMC,gCAAgC,GAAG,GAAG;AACnD,OAAO,MAAMC,6BAA6B,GAAG,GAAG;AAEhD,OAAO,MAAMC,eAAe,GAAG,iCAAiC;AAChE,OAAO,MAAMC,qCAAqC,GAAG,4BAA4B;AACjF,OAAO,MAAMC,yCAAyC,GAAG,2BAA2B"}
|
|
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
|
|
|
2
2
|
import { Pressable } from 'react-native';
|
|
3
3
|
import { useChannelHandler, useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';
|
|
4
4
|
import { GroupChannelPreview, Icon, LoadingSpinner, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
-
import { convertFileTypeToMessageType, getFileIconFromMessageType, getFileTypeFromMessage, isDifferentChannel, isMyMessage, useIIFE, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
5
|
+
import { convertFileTypeToMessageType, getFileIconFromMessageType, getFileTypeFromMessage, isDifferentChannel, isMyMessage, isVoiceMessage, useIIFE, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
6
6
|
import ChannelCover from '../components/ChannelCover';
|
|
7
7
|
import { DEFAULT_LONG_PRESS_DELAY } from '../constants';
|
|
8
8
|
import { useLocalization, useSendbirdChat } from '../hooks/useContext';
|
|
@@ -41,6 +41,7 @@ const GroupChannelPreviewContainer = _ref => {
|
|
|
41
41
|
var _channel$lastMessage;
|
|
42
42
|
if (!((_channel$lastMessage = channel.lastMessage) !== null && _channel$lastMessage !== void 0 && _channel$lastMessage.isFileMessage())) return undefined;
|
|
43
43
|
if (typingUsers.length > 0) return undefined;
|
|
44
|
+
if (isVoiceMessage(channel.lastMessage)) return undefined;
|
|
44
45
|
return getFileTypeFromMessage(channel.lastMessage);
|
|
45
46
|
});
|
|
46
47
|
const titleCaptionIcon = useIIFE(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","Pressable","useChannelHandler","useMessageOutgoingStatus","GroupChannelPreview","Icon","LoadingSpinner","createStyleSheet","useUIKitTheme","convertFileTypeToMessageType","getFileIconFromMessageType","getFileTypeFromMessage","isDifferentChannel","isMyMessage","useIIFE","useUniqHandlerId","ChannelCover","DEFAULT_LONG_PRESS_DELAY","useLocalization","useSendbirdChat","GroupChannelPreviewContainer","_ref","onPress","onLongPress","channel","currentUser","sdk","sbOptions","mentionManager","STRINGS","colors","typingUsers","setTypingUsers","handlerId","onTypingStatusUpdated","eventChannel","uikit","groupChannel","channelList","enableTypingIndicator","getTypingUsers","outgoingStatus","lastMessage","bodyText","length","LABELS","TYPING_INDICATOR_TYPINGS","GROUP_CHANNEL_LIST","CHANNEL_PREVIEW_BODY","fileType","_channel$lastMessage","isFileMessage","undefined","titleCaptionIcon","isEphemeral","enableMessageReceiptStatus","userId","createElement","size","style","styles","icon","color","error","onBackground03","containerStyle","secondary","unreadMessageCount","delayLongPress","customCover","coverUrl","title","CHANNEL_PREVIEW_TITLE","titleCaptionLeft","titleCaption","CHANNEL_PREVIEW_TITLE_CAPTION","body","bodyIcon","badgeCount","mentioned","unreadMentionCount","mentionTrigger","config","trigger","memberCount","frozen","isFrozen","broadcast","isBroadcast","notificationOff","myPushTriggerOption","marginRight","broadcastCover","padding","borderRadius"],"sources":["GroupChannelPreviewContainer.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Pressable } from 'react-native';\n\nimport { useChannelHandler, useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';\nimport {\n GroupChannelPreview,\n Icon,\n LoadingSpinner,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdGroupChannel,\n SendbirdUser,\n convertFileTypeToMessageType,\n getFileIconFromMessageType,\n getFileTypeFromMessage,\n isDifferentChannel,\n isMyMessage,\n useIIFE,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport ChannelCover from '../components/ChannelCover';\nimport { DEFAULT_LONG_PRESS_DELAY } from '../constants';\nimport { useLocalization, useSendbirdChat } from '../hooks/useContext';\n\ntype Props = {\n channel: SendbirdGroupChannel;\n onPress: () => void;\n onLongPress: () => void;\n};\nconst GroupChannelPreviewContainer = ({ onPress, onLongPress, channel }: Props) => {\n const { currentUser, sdk, sbOptions, mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n\n const [typingUsers, setTypingUsers] = useState<SendbirdUser[]>([]);\n\n const handlerId = useUniqHandlerId('GroupChannelPreviewContainer_TypingIndicator');\n useChannelHandler(sdk, handlerId, {\n onTypingStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!sbOptions.uikit.groupChannel.channelList.enableTypingIndicator) return;\n setTypingUsers(eventChannel.getTypingUsers());\n },\n });\n\n const outgoingStatus = useMessageOutgoingStatus(sdk, channel, channel.lastMessage);\n\n const bodyText = useIIFE(() => {\n if (typingUsers.length > 0) return STRINGS.LABELS.TYPING_INDICATOR_TYPINGS(typingUsers) || '';\n else return STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_BODY(channel);\n });\n\n const fileType = useIIFE(() => {\n if (!channel.lastMessage?.isFileMessage()) return undefined;\n if (typingUsers.length > 0) return undefined;\n return getFileTypeFromMessage(channel.lastMessage);\n });\n\n const titleCaptionIcon = useIIFE(() => {\n if (!channel.lastMessage || channel.isEphemeral) return undefined;\n if (!sbOptions.uikit.groupChannel.channelList.enableMessageReceiptStatus) return undefined;\n if (!isMyMessage(channel.lastMessage, currentUser?.userId)) return undefined;\n\n if (outgoingStatus === 'PENDING') {\n return <LoadingSpinner size={16} style={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'FAILED') {\n return <Icon icon={'error'} size={16} color={colors.error} style={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'UNDELIVERED') {\n return <Icon icon={'done'} size={16} color={colors.onBackground03} containerStyle={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'DELIVERED' || outgoingStatus === 'UNREAD') {\n return <Icon icon={'done-all'} size={16} color={colors.onBackground03} style={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'READ') {\n return <Icon icon={'done-all'} size={16} color={colors.secondary} style={styles.titleCaptionIcon} />;\n }\n\n return undefined;\n });\n\n const unreadMessageCount = useIIFE(() => (channel.isEphemeral ? 0 : channel.unreadMessageCount));\n\n return (\n <Pressable delayLongPress={DEFAULT_LONG_PRESS_DELAY} onPress={onPress} onLongPress={onLongPress}>\n <GroupChannelPreview\n customCover={<ChannelCover channel={channel} size={56} />}\n coverUrl={channel.coverUrl}\n title={STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_TITLE(currentUser?.userId ?? '', channel)}\n titleCaptionLeft={titleCaptionIcon}\n titleCaption={STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_TITLE_CAPTION(channel)}\n body={bodyText}\n bodyIcon={fileType && getFileIconFromMessageType(convertFileTypeToMessageType(fileType))}\n badgeCount={unreadMessageCount}\n mentioned={channel.unreadMentionCount > 0}\n mentionTrigger={mentionManager.config.trigger}\n memberCount={channel.memberCount > 2 ? channel.memberCount : undefined}\n frozen={channel.isFrozen}\n broadcast={channel.isBroadcast}\n notificationOff={channel.myPushTriggerOption === 'off'}\n />\n </Pressable>\n );\n};\n\nconst styles = createStyleSheet({\n titleCaptionIcon: {\n marginRight: 4,\n },\n broadcastCover: {\n padding: 12,\n borderRadius: 28,\n },\n});\n\nexport default GroupChannelPreviewContainer;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,SAAS,QAAQ,cAAc;AAExC,SAASC,iBAAiB,EAAEC,wBAAwB,QAAQ,4BAA4B;AACxF,SACEC,mBAAmB,EACnBC,IAAI,EACJC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,QACR,yCAAyC;AAChD,SAGEC,4BAA4B,EAC5BC,0BAA0B,EAC1BC,sBAAsB,EACtBC,kBAAkB,EAClBC,WAAW,EACXC,OAAO,EACPC,gBAAgB,QACX,uBAAuB;AAE9B,OAAOC,YAAY,MAAM,4BAA4B;AACrD,SAASC,wBAAwB,QAAQ,cAAc;AACvD,SAASC,eAAe,EAAEC,eAAe,QAAQ,qBAAqB;AAOtE,MAAMC,4BAA4B,GAAGC,IAAA,IAA8C;EAAA,IAA7C;IAAEC,OAAO;IAAEC,WAAW;IAAEC;EAAe,CAAC,GAAAH,IAAA;EAC5E,MAAM;IAAEI,WAAW;IAAEC,GAAG;IAAEC,SAAS;IAAEC;EAAe,CAAC,GAAGT,eAAe,EAAE;EACzE,MAAM;IAAEU;EAAQ,CAAC,GAAGX,eAAe,EAAE;EACrC,MAAM;IAAEY;EAAO,CAAC,GAAGtB,aAAa,EAAE;EAElC,MAAM,CAACuB,WAAW,EAAEC,cAAc,CAAC,GAAGhC,QAAQ,CAAiB,EAAE,CAAC;EAElE,MAAMiC,SAAS,GAAGlB,gBAAgB,CAAC,8CAA8C,CAAC;EAClFb,iBAAiB,CAACwB,GAAG,EAAEO,SAAS,EAAE;IAChCC,qBAAqBA,CAACC,YAAY,EAAE;MAClC,IAAIvB,kBAAkB,CAACY,OAAO,EAAEW,YAAY,CAAC,EAAE;MAC/C,IAAI,CAACR,SAAS,CAACS,KAAK,CAACC,YAAY,CAACC,WAAW,CAACC,qBAAqB,EAAE;MACrEP,cAAc,CAACG,YAAY,CAACK,cAAc,EAAE,CAAC;IAC/C;EACF,CAAC,CAAC;EAEF,MAAMC,cAAc,GAAGtC,wBAAwB,CAACuB,GAAG,EAAEF,OAAO,EAAEA,OAAO,CAACkB,WAAW,CAAC;EAElF,MAAMC,QAAQ,GAAG7B,OAAO,CAAC,MAAM;IAC7B,IAAIiB,WAAW,CAACa,MAAM,GAAG,CAAC,EAAE,OAAOf,OAAO,CAACgB,MAAM,CAACC,wBAAwB,CAACf,WAAW,CAAC,IAAI,EAAE,CAAC,KACzF,OAAOF,OAAO,CAACkB,kBAAkB,CAACC,oBAAoB,CAACxB,OAAO,CAAC;EACtE,CAAC,CAAC;EAEF,MAAMyB,QAAQ,GAAGnC,OAAO,CAAC,MAAM;IAAA,IAAAoC,oBAAA;IAC7B,IAAI,GAAAA,oBAAA,GAAC1B,OAAO,CAACkB,WAAW,cAAAQ,oBAAA,eAAnBA,oBAAA,CAAqBC,aAAa,EAAE,GAAE,OAAOC,SAAS;IAC3D,IAAIrB,WAAW,CAACa,MAAM,GAAG,CAAC,EAAE,OAAOQ,SAAS;IAC5C,OAAOzC,sBAAsB,CAACa,OAAO,CAACkB,WAAW,CAAC;EACpD,CAAC,CAAC;EAEF,MAAMW,gBAAgB,GAAGvC,OAAO,CAAC,MAAM;IACrC,IAAI,CAACU,OAAO,CAACkB,WAAW,IAAIlB,OAAO,CAAC8B,WAAW,EAAE,OAAOF,SAAS;IACjE,IAAI,CAACzB,SAAS,CAACS,KAAK,CAACC,YAAY,CAACC,WAAW,CAACiB,0BAA0B,EAAE,OAAOH,SAAS;IAC1F,IAAI,CAACvC,WAAW,CAACW,OAAO,CAACkB,WAAW,EAAEjB,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE+B,MAAM,CAAC,EAAE,OAAOJ,SAAS;IAE5E,IAAIX,cAAc,KAAK,SAAS,EAAE;MAChC,oBAAO1C,KAAA,CAAA0D,aAAA,CAACnD,cAAc;QAACoD,IAAI,EAAE,EAAG;QAACC,KAAK,EAAEC,MAAM,CAACP;MAAiB,EAAG;IACrE;IAEA,IAAIZ,cAAc,KAAK,QAAQ,EAAE;MAC/B,oBAAO1C,KAAA,CAAA0D,aAAA,CAACpD,IAAI;QAACwD,IAAI,EAAE,OAAQ;QAACH,IAAI,EAAE,EAAG;QAACI,KAAK,EAAEhC,MAAM,CAACiC,KAAM;QAACJ,KAAK,EAAEC,MAAM,CAACP;MAAiB,EAAG;IAC/F;IAEA,IAAIZ,cAAc,KAAK,aAAa,EAAE;MACpC,oBAAO1C,KAAA,CAAA0D,aAAA,CAACpD,IAAI;QAACwD,IAAI,EAAE,MAAO;QAACH,IAAI,EAAE,EAAG;QAACI,KAAK,EAAEhC,MAAM,CAACkC,cAAe;QAACC,cAAc,EAAEL,MAAM,CAACP;MAAiB,EAAG;IAChH;IAEA,IAAIZ,cAAc,KAAK,WAAW,IAAIA,cAAc,KAAK,QAAQ,EAAE;MACjE,oBAAO1C,KAAA,CAAA0D,aAAA,CAACpD,IAAI;QAACwD,IAAI,EAAE,UAAW;QAACH,IAAI,EAAE,EAAG;QAACI,KAAK,EAAEhC,MAAM,CAACkC,cAAe;QAACL,KAAK,EAAEC,MAAM,CAACP;MAAiB,EAAG;IAC3G;IAEA,IAAIZ,cAAc,KAAK,MAAM,EAAE;MAC7B,oBAAO1C,KAAA,CAAA0D,aAAA,CAACpD,IAAI;QAACwD,IAAI,EAAE,UAAW;QAACH,IAAI,EAAE,EAAG;QAACI,KAAK,EAAEhC,MAAM,CAACoC,SAAU;QAACP,KAAK,EAAEC,MAAM,CAACP;MAAiB,EAAG;IACtG;IAEA,OAAOD,SAAS;EAClB,CAAC,CAAC;EAEF,MAAMe,kBAAkB,GAAGrD,OAAO,CAAC,MAAOU,OAAO,CAAC8B,WAAW,GAAG,CAAC,GAAG9B,OAAO,CAAC2C,kBAAmB,CAAC;EAEhG,oBACEpE,KAAA,CAAA0D,aAAA,CAACxD,SAAS;IAACmE,cAAc,EAAEnD,wBAAyB;IAACK,OAAO,EAAEA,OAAQ;IAACC,WAAW,EAAEA;EAAY,gBAC9FxB,KAAA,CAAA0D,aAAA,CAACrD,mBAAmB;IAClBiE,WAAW,eAAEtE,KAAA,CAAA0D,aAAA,CAACzC,YAAY;MAACQ,OAAO,EAAEA,OAAQ;MAACkC,IAAI,EAAE;IAAG,EAAI;IAC1DY,QAAQ,EAAE9C,OAAO,CAAC8C,QAAS;IAC3BC,KAAK,EAAE1C,OAAO,CAACkB,kBAAkB,CAACyB,qBAAqB,CAAC,CAAA/C,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE+B,MAAM,KAAI,EAAE,EAAEhC,OAAO,CAAE;IAC5FiD,gBAAgB,EAAEpB,gBAAiB;IACnCqB,YAAY,EAAE7C,OAAO,CAACkB,kBAAkB,CAAC4B,6BAA6B,CAACnD,OAAO,CAAE;IAChFoD,IAAI,EAAEjC,QAAS;IACfkC,QAAQ,EAAE5B,QAAQ,IAAIvC,0BAA0B,CAACD,4BAA4B,CAACwC,QAAQ,CAAC,CAAE;IACzF6B,UAAU,EAAEX,kBAAmB;IAC/BY,SAAS,EAAEvD,OAAO,CAACwD,kBAAkB,GAAG,CAAE;IAC1CC,cAAc,EAAErD,cAAc,CAACsD,MAAM,CAACC,OAAQ;IAC9CC,WAAW,EAAE5D,OAAO,CAAC4D,WAAW,GAAG,CAAC,GAAG5D,OAAO,CAAC4D,WAAW,GAAGhC,SAAU;IACvEiC,MAAM,EAAE7D,OAAO,CAAC8D,QAAS;IACzBC,SAAS,EAAE/D,OAAO,CAACgE,WAAY;IAC/BC,eAAe,EAAEjE,OAAO,CAACkE,mBAAmB,KAAK;EAAM,EACvD,CACQ;AAEhB,CAAC;AAED,MAAM9B,MAAM,GAAGrD,gBAAgB,CAAC;EAC9B8C,gBAAgB,EAAE;IAChBsC,WAAW,EAAE;EACf,CAAC;EACDC,cAAc,EAAE;IACdC,OAAO,EAAE,EAAE;IACXC,YAAY,EAAE;EAChB;AACF,CAAC,CAAC;AAEF,eAAe1E,4BAA4B"}
|
|
1
|
+
{"version":3,"names":["React","useState","Pressable","useChannelHandler","useMessageOutgoingStatus","GroupChannelPreview","Icon","LoadingSpinner","createStyleSheet","useUIKitTheme","convertFileTypeToMessageType","getFileIconFromMessageType","getFileTypeFromMessage","isDifferentChannel","isMyMessage","isVoiceMessage","useIIFE","useUniqHandlerId","ChannelCover","DEFAULT_LONG_PRESS_DELAY","useLocalization","useSendbirdChat","GroupChannelPreviewContainer","_ref","onPress","onLongPress","channel","currentUser","sdk","sbOptions","mentionManager","STRINGS","colors","typingUsers","setTypingUsers","handlerId","onTypingStatusUpdated","eventChannel","uikit","groupChannel","channelList","enableTypingIndicator","getTypingUsers","outgoingStatus","lastMessage","bodyText","length","LABELS","TYPING_INDICATOR_TYPINGS","GROUP_CHANNEL_LIST","CHANNEL_PREVIEW_BODY","fileType","_channel$lastMessage","isFileMessage","undefined","titleCaptionIcon","isEphemeral","enableMessageReceiptStatus","userId","createElement","size","style","styles","icon","color","error","onBackground03","containerStyle","secondary","unreadMessageCount","delayLongPress","customCover","coverUrl","title","CHANNEL_PREVIEW_TITLE","titleCaptionLeft","titleCaption","CHANNEL_PREVIEW_TITLE_CAPTION","body","bodyIcon","badgeCount","mentioned","unreadMentionCount","mentionTrigger","config","trigger","memberCount","frozen","isFrozen","broadcast","isBroadcast","notificationOff","myPushTriggerOption","marginRight","broadcastCover","padding","borderRadius"],"sources":["GroupChannelPreviewContainer.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Pressable } from 'react-native';\n\nimport { useChannelHandler, useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';\nimport {\n GroupChannelPreview,\n Icon,\n LoadingSpinner,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdGroupChannel,\n SendbirdUser,\n convertFileTypeToMessageType,\n getFileIconFromMessageType,\n getFileTypeFromMessage,\n isDifferentChannel,\n isMyMessage,\n isVoiceMessage,\n useIIFE,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport ChannelCover from '../components/ChannelCover';\nimport { DEFAULT_LONG_PRESS_DELAY } from '../constants';\nimport { useLocalization, useSendbirdChat } from '../hooks/useContext';\n\ntype Props = {\n channel: SendbirdGroupChannel;\n onPress: () => void;\n onLongPress: () => void;\n};\nconst GroupChannelPreviewContainer = ({ onPress, onLongPress, channel }: Props) => {\n const { currentUser, sdk, sbOptions, mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n\n const [typingUsers, setTypingUsers] = useState<SendbirdUser[]>([]);\n\n const handlerId = useUniqHandlerId('GroupChannelPreviewContainer_TypingIndicator');\n useChannelHandler(sdk, handlerId, {\n onTypingStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!sbOptions.uikit.groupChannel.channelList.enableTypingIndicator) return;\n setTypingUsers(eventChannel.getTypingUsers());\n },\n });\n\n const outgoingStatus = useMessageOutgoingStatus(sdk, channel, channel.lastMessage);\n\n const bodyText = useIIFE(() => {\n if (typingUsers.length > 0) return STRINGS.LABELS.TYPING_INDICATOR_TYPINGS(typingUsers) || '';\n else return STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_BODY(channel);\n });\n\n const fileType = useIIFE(() => {\n if (!channel.lastMessage?.isFileMessage()) return undefined;\n if (typingUsers.length > 0) return undefined;\n if (isVoiceMessage(channel.lastMessage)) return undefined;\n return getFileTypeFromMessage(channel.lastMessage);\n });\n\n const titleCaptionIcon = useIIFE(() => {\n if (!channel.lastMessage || channel.isEphemeral) return undefined;\n if (!sbOptions.uikit.groupChannel.channelList.enableMessageReceiptStatus) return undefined;\n if (!isMyMessage(channel.lastMessage, currentUser?.userId)) return undefined;\n\n if (outgoingStatus === 'PENDING') {\n return <LoadingSpinner size={16} style={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'FAILED') {\n return <Icon icon={'error'} size={16} color={colors.error} style={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'UNDELIVERED') {\n return <Icon icon={'done'} size={16} color={colors.onBackground03} containerStyle={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'DELIVERED' || outgoingStatus === 'UNREAD') {\n return <Icon icon={'done-all'} size={16} color={colors.onBackground03} style={styles.titleCaptionIcon} />;\n }\n\n if (outgoingStatus === 'READ') {\n return <Icon icon={'done-all'} size={16} color={colors.secondary} style={styles.titleCaptionIcon} />;\n }\n\n return undefined;\n });\n\n const unreadMessageCount = useIIFE(() => (channel.isEphemeral ? 0 : channel.unreadMessageCount));\n\n return (\n <Pressable delayLongPress={DEFAULT_LONG_PRESS_DELAY} onPress={onPress} onLongPress={onLongPress}>\n <GroupChannelPreview\n customCover={<ChannelCover channel={channel} size={56} />}\n coverUrl={channel.coverUrl}\n title={STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_TITLE(currentUser?.userId ?? '', channel)}\n titleCaptionLeft={titleCaptionIcon}\n titleCaption={STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_TITLE_CAPTION(channel)}\n body={bodyText}\n bodyIcon={fileType && getFileIconFromMessageType(convertFileTypeToMessageType(fileType))}\n badgeCount={unreadMessageCount}\n mentioned={channel.unreadMentionCount > 0}\n mentionTrigger={mentionManager.config.trigger}\n memberCount={channel.memberCount > 2 ? channel.memberCount : undefined}\n frozen={channel.isFrozen}\n broadcast={channel.isBroadcast}\n notificationOff={channel.myPushTriggerOption === 'off'}\n />\n </Pressable>\n );\n};\n\nconst styles = createStyleSheet({\n titleCaptionIcon: {\n marginRight: 4,\n },\n broadcastCover: {\n padding: 12,\n borderRadius: 28,\n },\n});\n\nexport default GroupChannelPreviewContainer;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","TypedPlaceholder","DefaultErrorBoundaryComponent","props","createElement","style","flex","justifyContent","alignItems","type","onPressRetry","reset","InternalErrorBoundaryContainer","PureComponent","constructor","arguments","_defineProperty","error","errorInfo","_this$props$onError","_this$props","setState","onError","call","state","_this$props$ErrorInfo","_this$props2","ErrorInfoComponent","Fragment","children"],"sources":["InternalErrorBoundaryContainer.tsx"],"sourcesContent":["import React, { ErrorInfo } from 'react';\nimport { View } from 'react-native';\n\nimport TypedPlaceholder from '../components/TypedPlaceholder';\nimport type { ErrorBoundaryProps } from '../types';\n\nconst DefaultErrorBoundaryComponent = (props: ErrorBoundaryProps) => {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <TypedPlaceholder type={'error-wrong'} onPressRetry={props.reset} />\n </View>\n );\n};\n\nclass InternalErrorBoundaryContainer extends React.PureComponent<{\n onError?: (props: ErrorBoundaryProps) => void;\n ErrorInfoComponent?: (props: ErrorBoundaryProps) =>
|
|
1
|
+
{"version":3,"names":["React","View","TypedPlaceholder","DefaultErrorBoundaryComponent","props","createElement","style","flex","justifyContent","alignItems","type","onPressRetry","reset","InternalErrorBoundaryContainer","PureComponent","constructor","arguments","_defineProperty","error","errorInfo","_this$props$onError","_this$props","setState","onError","call","state","_this$props$ErrorInfo","_this$props2","ErrorInfoComponent","Fragment","children"],"sources":["InternalErrorBoundaryContainer.tsx"],"sourcesContent":["import React, { ErrorInfo } from 'react';\nimport { View } from 'react-native';\n\nimport TypedPlaceholder from '../components/TypedPlaceholder';\nimport type { ErrorBoundaryProps } from '../types';\n\nconst DefaultErrorBoundaryComponent = (props: ErrorBoundaryProps) => {\n return (\n <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <TypedPlaceholder type={'error-wrong'} onPressRetry={props.reset} />\n </View>\n );\n};\n\nclass InternalErrorBoundaryContainer extends React.PureComponent<{\n onError?: (props: ErrorBoundaryProps) => void;\n ErrorInfoComponent?: (props: ErrorBoundaryProps) => React.ReactNode;\n children?: React.ReactNode;\n}> {\n static defaultProps = {\n ErrorInfoComponent: DefaultErrorBoundaryComponent,\n };\n\n state: { error: Error | null; errorInfo: ErrorInfo | null } = {\n error: null,\n errorInfo: null,\n };\n\n componentDidCatch = (error: Error, errorInfo: ErrorInfo) => {\n this.setState({ error, errorInfo });\n this.props.onError?.({ error, errorInfo, reset: this.reset });\n };\n\n reset = () => {\n this.setState({ error: null, errorInfo: null });\n };\n\n render = () => {\n if (this.state.error && this.state.errorInfo) {\n return (\n this.props.ErrorInfoComponent?.({\n error: this.state.error,\n errorInfo: this.state.errorInfo,\n reset: this.reset,\n }) ?? null\n );\n }\n\n return <>{this.props.children}</>;\n };\n}\n\nexport default InternalErrorBoundaryContainer;\n"],"mappings":";;;AAAA,OAAOA,KAAK,MAAqB,OAAO;AACxC,SAASC,IAAI,QAAQ,cAAc;AAEnC,OAAOC,gBAAgB,MAAM,gCAAgC;AAG7D,MAAMC,6BAA6B,GAAIC,KAAyB,IAAK;EACnE,oBACEJ,KAAA,CAAAK,aAAA,CAACJ,IAAI;IAACK,KAAK,EAAE;MAAEC,IAAI,EAAE,CAAC;MAAEC,cAAc,EAAE,QAAQ;MAAEC,UAAU,EAAE;IAAS;EAAE,gBACvET,KAAA,CAAAK,aAAA,CAACH,gBAAgB;IAACQ,IAAI,EAAE,aAAc;IAACC,YAAY,EAAEP,KAAK,CAACQ;EAAM,EAAG,CAC/D;AAEX,CAAC;AAED,MAAMC,8BAA8B,SAASb,KAAK,CAACc,aAAa,CAI7D;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,gBAK6D;MAC5DC,KAAK,EAAE,IAAI;MACXC,SAAS,EAAE;IACb,CAAC;IAAAF,eAAA,4BAEmB,CAACC,KAAY,EAAEC,SAAoB,KAAK;MAAA,IAAAC,mBAAA,EAAAC,WAAA;MAC1D,IAAI,CAACC,QAAQ,CAAC;QAAEJ,KAAK;QAAEC;MAAU,CAAC,CAAC;MACnC,CAAAC,mBAAA,IAAAC,WAAA,OAAI,CAACjB,KAAK,EAACmB,OAAO,cAAAH,mBAAA,uBAAlBA,mBAAA,CAAAI,IAAA,CAAAH,WAAA,EAAqB;QAAEH,KAAK;QAAEC,SAAS;QAAEP,KAAK,EAAE,IAAI,CAACA;MAAM,CAAC,CAAC;IAC/D,CAAC;IAAAK,eAAA,gBAEO,MAAM;MACZ,IAAI,CAACK,QAAQ,CAAC;QAAEJ,KAAK,EAAE,IAAI;QAAEC,SAAS,EAAE;MAAK,CAAC,CAAC;IACjD,CAAC;IAAAF,eAAA,iBAEQ,MAAM;MACb,IAAI,IAAI,CAACQ,KAAK,CAACP,KAAK,IAAI,IAAI,CAACO,KAAK,CAACN,SAAS,EAAE;QAAA,IAAAO,qBAAA,EAAAC,YAAA;QAC5C,OACE,EAAAD,qBAAA,IAAAC,YAAA,OAAI,CAACvB,KAAK,EAACwB,kBAAkB,cAAAF,qBAAA,uBAA7BA,qBAAA,CAAAF,IAAA,CAAAG,YAAA,EAAgC;UAC9BT,KAAK,EAAE,IAAI,CAACO,KAAK,CAACP,KAAK;UACvBC,SAAS,EAAE,IAAI,CAACM,KAAK,CAACN,SAAS;UAC/BP,KAAK,EAAE,IAAI,CAACA;QACd,CAAC,CAAC,KAAI,IAAI;MAEd;MAEA,oBAAOZ,KAAA,CAAAK,aAAA,CAAAL,KAAA,CAAA6B,QAAA,QAAG,IAAI,CAACzB,KAAK,CAAC0B,QAAQ,CAAI;IACnC,CAAC;EAAA;AACH;AAACb,eAAA,CApCKJ,8BAA8B,kBAKZ;EACpBe,kBAAkB,EAAEzB;AACtB,CAAC;AA+BH,eAAeU,8BAA8B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
1
2
|
import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
2
3
|
import { Platform } from 'react-native';
|
|
3
4
|
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
4
|
-
import
|
|
5
|
+
import SendbirdChat, { DeviceOsPlatform, SendbirdPlatform, SendbirdProduct } from '@sendbird/chat';
|
|
5
6
|
import { GroupChannelModule } from '@sendbird/chat/groupChannel';
|
|
6
7
|
import { OpenChannelModule } from '@sendbird/chat/openChannel';
|
|
7
8
|
import { DialogProvider, Header, HeaderStyleProvider, LightUIKitTheme, ToastProvider, UIKitThemeProvider } from '@sendbird/uikit-react-native-foundation';
|
|
@@ -17,6 +18,7 @@ import ImageCompressionConfig from '../libs/ImageCompressionConfig';
|
|
|
17
18
|
import InternalLocalCacheStorage from '../libs/InternalLocalCacheStorage';
|
|
18
19
|
import MentionConfig from '../libs/MentionConfig';
|
|
19
20
|
import MentionManager from '../libs/MentionManager';
|
|
21
|
+
import VoiceMessageConfig from '../libs/VoiceMessageConfig';
|
|
20
22
|
import StringSetEn from '../localization/StringSet.en';
|
|
21
23
|
import SBUDynamicModule from '../platform/dynamicModule';
|
|
22
24
|
import VERSION from '../version';
|
|
@@ -31,8 +33,16 @@ export const SendbirdUIKit = Object.freeze({
|
|
|
31
33
|
IMAGE_COMPRESSION: true
|
|
32
34
|
}
|
|
33
35
|
});
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
+
const chatOmitKeys = ['appId', 'newInstance', 'modules', 'debugMode', 'appVersion', 'localCacheEnabled', 'useAsyncStorageStore'];
|
|
37
|
+
function sanitizeChatOptions(chatOptions) {
|
|
38
|
+
const opts = {
|
|
39
|
+
...chatOptions
|
|
40
|
+
};
|
|
41
|
+
chatOmitKeys.forEach(key => delete opts[key]);
|
|
42
|
+
return opts;
|
|
43
|
+
}
|
|
44
|
+
const SendbirdUIKitContainer = props => {
|
|
45
|
+
const {
|
|
36
46
|
children,
|
|
37
47
|
appId,
|
|
38
48
|
chatOptions,
|
|
@@ -43,9 +53,8 @@ const SendbirdUIKitContainer = _ref => {
|
|
|
43
53
|
errorBoundary,
|
|
44
54
|
toast,
|
|
45
55
|
userProfile,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
} = _ref;
|
|
56
|
+
reaction
|
|
57
|
+
} = props;
|
|
49
58
|
if (!chatOptions.localCacheStorage) {
|
|
50
59
|
throw new Error('SendbirdUIKitContainer: chatOptions.localCacheStorage is required');
|
|
51
60
|
}
|
|
@@ -56,34 +65,23 @@ const SendbirdUIKitContainer = _ref => {
|
|
|
56
65
|
const [sdkInstance, setSdkInstance] = useState(() => {
|
|
57
66
|
const sendbird = initializeSendbird(appId, {
|
|
58
67
|
internalStorage,
|
|
59
|
-
...chatOptions
|
|
68
|
+
...sanitizeChatOptions(chatOptions)
|
|
60
69
|
});
|
|
61
70
|
unsubscribes.current = sendbird.unsubscribes;
|
|
62
71
|
return sendbird.chatSDK;
|
|
63
72
|
});
|
|
73
|
+
const {
|
|
74
|
+
imageCompressionConfig,
|
|
75
|
+
voiceMessageConfig,
|
|
76
|
+
mentionConfig
|
|
77
|
+
} = useConfigInstance(props);
|
|
64
78
|
const emojiManager = useMemo(() => new EmojiManager(internalStorage), [internalStorage]);
|
|
65
|
-
const mentionManager = useMemo(() =>
|
|
66
|
-
const config = new MentionConfig({
|
|
67
|
-
mentionLimit: (userMention === null || userMention === void 0 ? void 0 : userMention.mentionLimit) || MentionConfig.DEFAULT.MENTION_LIMIT,
|
|
68
|
-
suggestionLimit: (userMention === null || userMention === void 0 ? void 0 : userMention.suggestionLimit) || MentionConfig.DEFAULT.SUGGESTION_LIMIT,
|
|
69
|
-
debounceMills: (userMention === null || userMention === void 0 ? void 0 : userMention.debounceMills) ?? MentionConfig.DEFAULT.DEBOUNCE_MILLS,
|
|
70
|
-
delimiter: MentionConfig.DEFAULT.DELIMITER,
|
|
71
|
-
trigger: MentionConfig.DEFAULT.TRIGGER
|
|
72
|
-
});
|
|
73
|
-
return new MentionManager(config);
|
|
74
|
-
}, [userMention === null || userMention === void 0 ? void 0 : userMention.mentionLimit, userMention === null || userMention === void 0 ? void 0 : userMention.suggestionLimit, userMention === null || userMention === void 0 ? void 0 : userMention.debounceMills]);
|
|
75
|
-
const imageCompressionConfig = useMemo(() => {
|
|
76
|
-
return new ImageCompressionConfig({
|
|
77
|
-
compressionRate: (imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.compressionRate) || ImageCompressionConfig.DEFAULT.COMPRESSION_RATE,
|
|
78
|
-
width: imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.width,
|
|
79
|
-
height: imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.height
|
|
80
|
-
});
|
|
81
|
-
}, [imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.compressionRate, imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.width, imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.height]);
|
|
79
|
+
const mentionManager = useMemo(() => new MentionManager(mentionConfig), [mentionConfig]);
|
|
82
80
|
useLayoutEffect(() => {
|
|
83
81
|
if (!isFirstMount) {
|
|
84
82
|
const sendbird = initializeSendbird(appId, {
|
|
85
83
|
internalStorage,
|
|
86
|
-
...chatOptions
|
|
84
|
+
...sanitizeChatOptions(chatOptions)
|
|
87
85
|
});
|
|
88
86
|
setSdkInstance(sendbird.chatSDK);
|
|
89
87
|
unsubscribes.current = sendbird.unsubscribes;
|
|
@@ -121,6 +119,7 @@ const SendbirdUIKitContainer = _ref => {
|
|
|
121
119
|
emojiManager: emojiManager,
|
|
122
120
|
mentionManager: mentionManager,
|
|
123
121
|
imageCompressionConfig: imageCompressionConfig,
|
|
122
|
+
voiceMessageConfig: voiceMessageConfig,
|
|
124
123
|
enableAutoPushTokenRegistration: chatOptions.enableAutoPushTokenRegistration ?? SendbirdUIKit.DEFAULT.AUTO_PUSH_TOKEN_REGISTRATION,
|
|
125
124
|
enableUseUserIdForNickname: chatOptions.enableUseUserIdForNickname ?? SendbirdUIKit.DEFAULT.USE_USER_ID_FOR_NICKNAME,
|
|
126
125
|
enableImageCompression: chatOptions.enableImageCompression ?? SendbirdUIKit.DEFAULT.IMAGE_COMPRESSION
|
|
@@ -130,7 +129,10 @@ const SendbirdUIKitContainer = _ref => {
|
|
|
130
129
|
fileService: platformServices.file,
|
|
131
130
|
notificationService: platformServices.notification,
|
|
132
131
|
clipboardService: platformServices.clipboard,
|
|
133
|
-
mediaService: platformServices.media
|
|
132
|
+
mediaService: platformServices.media,
|
|
133
|
+
playerService: platformServices.player,
|
|
134
|
+
recorderService: platformServices.recorder,
|
|
135
|
+
voiceMessageConfig: voiceMessageConfig
|
|
134
136
|
}, /*#__PURE__*/React.createElement(UIKitThemeProvider, {
|
|
135
137
|
theme: (styles === null || styles === void 0 ? void 0 : styles.theme) ?? LightUIKitTheme
|
|
136
138
|
}, /*#__PURE__*/React.createElement(HeaderStyleProvider, {
|
|
@@ -139,11 +141,9 @@ const SendbirdUIKitContainer = _ref => {
|
|
|
139
141
|
statusBarTranslucent: (styles === null || styles === void 0 ? void 0 : styles.statusBarTranslucent) ?? true
|
|
140
142
|
}, /*#__PURE__*/React.createElement(ToastProvider, {
|
|
141
143
|
dismissTimeout: toast === null || toast === void 0 ? void 0 : toast.dismissTimeout
|
|
142
|
-
}, /*#__PURE__*/React.createElement(UserProfileProvider, {
|
|
143
|
-
onCreateChannel: userProfile === null || userProfile === void 0 ? void 0 : userProfile.onCreateChannel,
|
|
144
|
-
onBeforeCreateChannel: userProfile === null || userProfile === void 0 ? void 0 : userProfile.onBeforeCreateChannel,
|
|
144
|
+
}, /*#__PURE__*/React.createElement(UserProfileProvider, _extends({}, userProfile, {
|
|
145
145
|
statusBarTranslucent: (styles === null || styles === void 0 ? void 0 : styles.statusBarTranslucent) ?? true
|
|
146
|
-
}, /*#__PURE__*/React.createElement(ReactionProvider,
|
|
146
|
+
}), /*#__PURE__*/React.createElement(ReactionProvider, reaction, /*#__PURE__*/React.createElement(LocalizationContext.Consumer, null, value => {
|
|
147
147
|
const STRINGS = (value === null || value === void 0 ? void 0 : value.STRINGS) || defaultStringSet;
|
|
148
148
|
return /*#__PURE__*/React.createElement(DialogProvider, {
|
|
149
149
|
defaultLabels: {
|
|
@@ -164,16 +164,16 @@ const initializeSendbird = (appId, options) => {
|
|
|
164
164
|
const unsubscribes = [];
|
|
165
165
|
const {
|
|
166
166
|
internalStorage,
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
onInitialized,
|
|
168
|
+
...chatInitParams
|
|
169
169
|
} = options;
|
|
170
|
-
chatSDK =
|
|
170
|
+
chatSDK = SendbirdChat.init({
|
|
171
|
+
...chatInitParams,
|
|
171
172
|
appId,
|
|
172
173
|
newInstance: true,
|
|
173
174
|
modules: [new GroupChannelModule(), new OpenChannelModule()],
|
|
174
|
-
localCacheEnabled:
|
|
175
|
-
useAsyncStorageStore: internalStorage
|
|
176
|
-
localCacheEncryption
|
|
175
|
+
localCacheEnabled: true,
|
|
176
|
+
useAsyncStorageStore: internalStorage
|
|
177
177
|
});
|
|
178
178
|
if (onInitialized) {
|
|
179
179
|
chatSDK = onInitialized(chatSDK);
|
|
@@ -256,5 +256,43 @@ function getReactNativeVersion() {
|
|
|
256
256
|
} = Platform.constants.reactNativeVersion;
|
|
257
257
|
return `${major}.${minor}.${patch}`;
|
|
258
258
|
}
|
|
259
|
+
const useConfigInstance = _ref => {
|
|
260
|
+
var _voiceMessage$recorde3, _voiceMessage$recorde4;
|
|
261
|
+
let {
|
|
262
|
+
imageCompression,
|
|
263
|
+
userMention,
|
|
264
|
+
voiceMessage
|
|
265
|
+
} = _ref;
|
|
266
|
+
const mentionConfig = useMemo(() => {
|
|
267
|
+
return new MentionConfig({
|
|
268
|
+
mentionLimit: (userMention === null || userMention === void 0 ? void 0 : userMention.mentionLimit) || MentionConfig.DEFAULT.MENTION_LIMIT,
|
|
269
|
+
suggestionLimit: (userMention === null || userMention === void 0 ? void 0 : userMention.suggestionLimit) || MentionConfig.DEFAULT.SUGGESTION_LIMIT,
|
|
270
|
+
debounceMills: (userMention === null || userMention === void 0 ? void 0 : userMention.debounceMills) ?? MentionConfig.DEFAULT.DEBOUNCE_MILLS,
|
|
271
|
+
delimiter: MentionConfig.DEFAULT.DELIMITER,
|
|
272
|
+
trigger: MentionConfig.DEFAULT.TRIGGER
|
|
273
|
+
});
|
|
274
|
+
}, [userMention === null || userMention === void 0 ? void 0 : userMention.mentionLimit, userMention === null || userMention === void 0 ? void 0 : userMention.suggestionLimit, userMention === null || userMention === void 0 ? void 0 : userMention.debounceMills]);
|
|
275
|
+
const imageCompressionConfig = useMemo(() => {
|
|
276
|
+
return new ImageCompressionConfig({
|
|
277
|
+
compressionRate: (imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.compressionRate) || ImageCompressionConfig.DEFAULT.COMPRESSION_RATE,
|
|
278
|
+
width: imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.width,
|
|
279
|
+
height: imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.height
|
|
280
|
+
});
|
|
281
|
+
}, [imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.compressionRate, imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.width, imageCompression === null || imageCompression === void 0 ? void 0 : imageCompression.height]);
|
|
282
|
+
const voiceMessageConfig = useMemo(() => {
|
|
283
|
+
var _voiceMessage$recorde, _voiceMessage$recorde2;
|
|
284
|
+
return new VoiceMessageConfig({
|
|
285
|
+
recorder: {
|
|
286
|
+
minDuration: (voiceMessage === null || voiceMessage === void 0 ? void 0 : (_voiceMessage$recorde = voiceMessage.recorder) === null || _voiceMessage$recorde === void 0 ? void 0 : _voiceMessage$recorde.minDuration) ?? VoiceMessageConfig.DEFAULT.RECORDER.MIN_DURATION,
|
|
287
|
+
maxDuration: (voiceMessage === null || voiceMessage === void 0 ? void 0 : (_voiceMessage$recorde2 = voiceMessage.recorder) === null || _voiceMessage$recorde2 === void 0 ? void 0 : _voiceMessage$recorde2.maxDuration) ?? VoiceMessageConfig.DEFAULT.RECORDER.MAX_DURATION
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}, [voiceMessage === null || voiceMessage === void 0 ? void 0 : (_voiceMessage$recorde3 = voiceMessage.recorder) === null || _voiceMessage$recorde3 === void 0 ? void 0 : _voiceMessage$recorde3.minDuration, voiceMessage === null || voiceMessage === void 0 ? void 0 : (_voiceMessage$recorde4 = voiceMessage.recorder) === null || _voiceMessage$recorde4 === void 0 ? void 0 : _voiceMessage$recorde4.maxDuration]);
|
|
291
|
+
return {
|
|
292
|
+
mentionConfig,
|
|
293
|
+
imageCompressionConfig,
|
|
294
|
+
voiceMessageConfig
|
|
295
|
+
};
|
|
296
|
+
};
|
|
259
297
|
export default SendbirdUIKitContainer;
|
|
260
298
|
//# sourceMappingURL=SendbirdUIKitContainer.js.map
|