@sendbird/uikit-react-native 2.5.0 → 3.0.0-rc.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 +6 -1
- package/lib/commonjs/components/{MessageRenderer/MessageTime.js → ChannelInput/AttachmentsButton.js} +20 -17
- package/lib/commonjs/components/ChannelInput/AttachmentsButton.js.map +1 -0
- package/lib/commonjs/components/ChannelInput/EditInput.js +10 -18
- package/lib/commonjs/components/ChannelInput/EditInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/SendInput.js +220 -163
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/index.js +5 -3
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +27 -27
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/ChatFlatList.js +18 -6
- package/lib/commonjs/components/ChatFlatList.js.map +1 -1
- package/lib/commonjs/components/{MessageRenderer/MessageDateSeparator.js → GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js} +3 -3
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map +1 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js +47 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map +1 -0
- package/lib/commonjs/components/{MessageRenderer/MessageOutgoingStatus.js → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js} +11 -14
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js.map +1 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +204 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -0
- package/lib/commonjs/components/MessageSearchResultItem.js +3 -2
- package/lib/commonjs/components/MessageSearchResultItem.js.map +1 -1
- package/lib/commonjs/components/OpenChannelMessageRenderer/index.js +15 -9
- package/lib/commonjs/components/OpenChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/constants.js +1 -7
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js +13 -13
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +29 -19
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/commonjs/contexts/SendbirdChatCtx.js +17 -14
- package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/commonjs/contexts/UserProfileCtx.js +6 -4
- package/lib/commonjs/contexts/UserProfileCtx.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput.js +4 -13
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js +10 -6
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListTypeSelector.js +3 -3
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -1
- package/lib/commonjs/domain/groupChannelList/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +11 -10
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/commonjs/domain/openChannel/component/OpenChannelInput.js +4 -8
- package/lib/commonjs/domain/openChannel/component/OpenChannelInput.js.map +1 -1
- package/lib/commonjs/domain/openChannel/types.js.map +1 -1
- package/lib/commonjs/domain/openChannelList/component/OpenChannelListList.js +3 -1
- package/lib/commonjs/domain/openChannelList/component/OpenChannelListList.js.map +1 -1
- package/lib/commonjs/domain/openChannelList/types.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelCreateFragment.js +1 -1
- package/lib/commonjs/fragments/createGroupChannelCreateFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +22 -100
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelInviteFragment.js +1 -1
- package/lib/commonjs/fragments/createGroupChannelInviteFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelListFragment.js +8 -13
- package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
- package/lib/commonjs/fragments/createMessageSearchFragment.js +2 -2
- package/lib/commonjs/fragments/createMessageSearchFragment.js.map +1 -1
- package/lib/commonjs/fragments/createOpenChannelFragment.js +1 -7
- package/lib/commonjs/fragments/createOpenChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createOpenChannelListFragment.js +2 -1
- package/lib/commonjs/fragments/createOpenChannelListFragment.js.map +1 -1
- package/lib/commonjs/hooks/useConnection.js +11 -7
- package/lib/commonjs/hooks/useConnection.js.map +1 -1
- package/lib/commonjs/hooks/useMentionTextInput.js +3 -2
- package/lib/commonjs/hooks/useMentionTextInput.js.map +1 -1
- package/lib/commonjs/index.js +20 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/libs/MentionManager.js +8 -9
- package/lib/commonjs/libs/MentionManager.js.map +1 -1
- package/lib/commonjs/libs/SBUUtils.js +7 -3
- package/lib/commonjs/libs/SBUUtils.js.map +1 -1
- package/lib/commonjs/localization/StringSet.type.js.map +1 -1
- package/lib/commonjs/localization/createBaseStringSet.js +20 -62
- package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
- package/lib/module/components/ChannelInput/AttachmentsButton.js +29 -0
- package/lib/module/components/ChannelInput/AttachmentsButton.js.map +1 -0
- package/lib/module/components/ChannelInput/EditInput.js +10 -18
- package/lib/module/components/ChannelInput/EditInput.js.map +1 -1
- package/lib/module/components/ChannelInput/SendInput.js +221 -164
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js +5 -3
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +28 -28
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/ChatFlatList.js +17 -5
- package/lib/module/components/ChatFlatList.js.map +1 -1
- package/lib/module/components/{MessageRenderer/MessageDateSeparator.js → GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js} +3 -3
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map +1 -0
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js +38 -0
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map +1 -0
- package/lib/module/components/{MessageRenderer/MessageOutgoingStatus.js → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js} +12 -15
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js.map +1 -0
- package/lib/module/components/GroupChannelMessageRenderer/index.js +196 -0
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -0
- package/lib/module/components/MessageSearchResultItem.js +2 -1
- package/lib/module/components/MessageSearchResultItem.js.map +1 -1
- package/lib/module/components/OpenChannelMessageRenderer/index.js +16 -10
- package/lib/module/components/OpenChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/constants.js +0 -5
- package/lib/module/constants.js.map +1 -1
- package/lib/module/containers/GroupChannelPreviewContainer.js +13 -13
- package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -1
- package/lib/module/containers/SendbirdUIKitContainer.js +29 -19
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/module/contexts/SendbirdChatCtx.js +17 -14
- package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/module/contexts/UserProfileCtx.js +6 -4
- package/lib/module/contexts/UserProfileCtx.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelInput.js +4 -13
- package/lib/module/domain/groupChannel/component/GroupChannelInput.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/domain/groupChannelList/component/GroupChannelListList.js +9 -4
- package/lib/module/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
- package/lib/module/domain/groupChannelList/component/GroupChannelListTypeSelector.js +3 -3
- package/lib/module/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -1
- package/lib/module/domain/groupChannelList/types.js.map +1 -1
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +11 -10
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/module/domain/openChannel/component/OpenChannelInput.js +4 -8
- package/lib/module/domain/openChannel/component/OpenChannelInput.js.map +1 -1
- package/lib/module/domain/openChannel/types.js.map +1 -1
- package/lib/module/domain/openChannelList/component/OpenChannelListList.js +3 -1
- package/lib/module/domain/openChannelList/component/OpenChannelListList.js.map +1 -1
- package/lib/module/domain/openChannelList/types.js.map +1 -1
- package/lib/module/fragments/createGroupChannelCreateFragment.js +1 -1
- package/lib/module/fragments/createGroupChannelCreateFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +24 -102
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelInviteFragment.js +1 -1
- package/lib/module/fragments/createGroupChannelInviteFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelListFragment.js +8 -13
- package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
- package/lib/module/fragments/createMessageSearchFragment.js +1 -1
- package/lib/module/fragments/createMessageSearchFragment.js.map +1 -1
- package/lib/module/fragments/createOpenChannelFragment.js +2 -8
- package/lib/module/fragments/createOpenChannelFragment.js.map +1 -1
- package/lib/module/fragments/createOpenChannelListFragment.js +2 -1
- package/lib/module/fragments/createOpenChannelListFragment.js.map +1 -1
- package/lib/module/hooks/useConnection.js +11 -7
- package/lib/module/hooks/useConnection.js.map +1 -1
- package/lib/module/hooks/useMentionTextInput.js +3 -2
- package/lib/module/hooks/useMentionTextInput.js.map +1 -1
- package/lib/module/index.js +5 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/libs/MentionManager.js +8 -9
- package/lib/module/libs/MentionManager.js.map +1 -1
- package/lib/module/libs/SBUUtils.js +7 -3
- package/lib/module/libs/SBUUtils.js.map +1 -1
- package/lib/module/localization/StringSet.type.js.map +1 -1
- package/lib/module/localization/createBaseStringSet.js +20 -62
- package/lib/module/localization/createBaseStringSet.js.map +1 -1
- package/lib/typescript/src/components/ChannelInput/AttachmentsButton.d.ts +6 -0
- package/lib/typescript/src/components/ChannelInput/index.d.ts +2 -14
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +2 -4
- package/lib/typescript/src/components/ChatFlatList.d.ts +1 -5
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.d.ts +6 -0
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.d.ts +5 -0
- package/lib/typescript/src/components/{MessageRenderer/MessageOutgoingStatus.d.ts → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.d.ts} +3 -1
- package/lib/typescript/src/components/{MessageRenderer → GroupChannelMessageRenderer}/index.d.ts +2 -13
- package/lib/typescript/src/components/MessageSearchResultItem.d.ts +2 -1
- package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +1 -1
- package/lib/typescript/src/constants.d.ts +0 -5
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +15 -10
- package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +33 -19
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +1 -4
- package/lib/typescript/src/domain/groupChannel/types.d.ts +2 -9
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListList.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelList/types.d.ts +8 -23
- package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
- 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/types.d.ts +2 -2
- package/lib/typescript/src/domain/openChannelList/component/OpenChannelListList.d.ts +1 -1
- package/lib/typescript/src/domain/openChannelList/types.d.ts +3 -12
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/libs/MentionManager.d.ts +4 -5
- package/lib/typescript/src/libs/SBUUtils.d.ts +1 -1
- package/lib/typescript/src/localization/StringSet.type.d.ts +2 -43
- package/package.json +13 -10
- package/src/components/ChannelInput/AttachmentsButton.tsx +32 -0
- package/src/components/ChannelInput/EditInput.tsx +17 -18
- package/src/components/ChannelInput/SendInput.tsx +237 -181
- package/src/components/ChannelInput/index.tsx +8 -21
- package/src/components/ChannelMessageList/index.tsx +33 -41
- package/src/components/ChatFlatList.tsx +39 -13
- package/src/components/{MessageRenderer/MessageDateSeparator.tsx → GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.tsx} +7 -5
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.tsx +29 -0
- package/src/components/{MessageRenderer/MessageOutgoingStatus.tsx → GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.tsx} +15 -15
- package/src/components/GroupChannelMessageRenderer/index.tsx +203 -0
- package/src/components/MessageSearchResultItem.tsx +3 -1
- package/src/components/OpenChannelMessageRenderer/index.tsx +10 -5
- package/src/constants.ts +0 -5
- package/src/containers/GroupChannelPreviewContainer.tsx +14 -13
- package/src/containers/SendbirdUIKitContainer.tsx +98 -90
- package/src/contexts/SendbirdChatCtx.tsx +49 -36
- package/src/contexts/UserProfileCtx.tsx +10 -5
- package/src/domain/groupChannel/component/GroupChannelInput.tsx +1 -10
- package/src/domain/groupChannel/types.ts +1 -14
- package/src/domain/groupChannelList/component/GroupChannelListList.tsx +8 -4
- package/src/domain/groupChannelList/component/GroupChannelListTypeSelector.tsx +3 -3
- package/src/domain/groupChannelList/types.ts +8 -30
- package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +22 -10
- package/src/domain/openChannel/component/OpenChannelInput.tsx +1 -5
- package/src/domain/openChannel/types.ts +1 -1
- package/src/domain/openChannelList/component/OpenChannelListList.tsx +2 -1
- package/src/domain/openChannelList/types.ts +6 -13
- package/src/fragments/createGroupChannelCreateFragment.tsx +1 -1
- package/src/fragments/createGroupChannelFragment.tsx +21 -97
- package/src/fragments/createGroupChannelInviteFragment.tsx +1 -1
- package/src/fragments/createGroupChannelListFragment.tsx +9 -15
- package/src/fragments/createMessageSearchFragment.tsx +1 -1
- package/src/fragments/createOpenChannelFragment.tsx +2 -3
- package/src/fragments/createOpenChannelListFragment.tsx +2 -1
- package/src/hooks/useConnection.ts +9 -7
- package/src/hooks/useMentionTextInput.ts +7 -2
- package/src/index.ts +4 -2
- package/src/libs/MentionManager.tsx +8 -7
- package/src/libs/SBUUtils.ts +7 -3
- package/src/localization/StringSet.type.ts +2 -46
- package/src/localization/createBaseStringSet.ts +19 -71
- package/src/version.ts +1 -1
- package/lib/commonjs/components/MessageRenderer/AdminMessage/index.js +0 -46
- package/lib/commonjs/components/MessageRenderer/AdminMessage/index.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js +0 -73
- package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js +0 -93
- package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +0 -132
- package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/FileMessage/index.js +0 -24
- package/lib/commonjs/components/MessageRenderer/FileMessage/index.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/MessageContainer.js +0 -27
- package/lib/commonjs/components/MessageRenderer/MessageContainer.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/MessageDateSeparator.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/MessageIncomingAvatar.js +0 -41
- package/lib/commonjs/components/MessageRenderer/MessageIncomingAvatar.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js +0 -41
- package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/MessageTime.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/UnknownMessage/index.js +0 -46
- package/lib/commonjs/components/MessageRenderer/UnknownMessage/index.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js +0 -113
- package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +0 -200
- package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/UserMessage/index.js +0 -22
- package/lib/commonjs/components/MessageRenderer/UserMessage/index.js.map +0 -1
- package/lib/commonjs/components/MessageRenderer/index.js +0 -186
- package/lib/commonjs/components/MessageRenderer/index.js.map +0 -1
- package/lib/module/components/MessageRenderer/AdminMessage/index.js +0 -38
- package/lib/module/components/MessageRenderer/AdminMessage/index.js.map +0 -1
- package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js +0 -65
- package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +0 -1
- package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js +0 -84
- package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +0 -1
- package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +0 -123
- package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +0 -1
- package/lib/module/components/MessageRenderer/FileMessage/index.js +0 -16
- package/lib/module/components/MessageRenderer/FileMessage/index.js.map +0 -1
- package/lib/module/components/MessageRenderer/MessageContainer.js +0 -19
- package/lib/module/components/MessageRenderer/MessageContainer.js.map +0 -1
- package/lib/module/components/MessageRenderer/MessageDateSeparator.js.map +0 -1
- package/lib/module/components/MessageRenderer/MessageIncomingAvatar.js +0 -33
- package/lib/module/components/MessageRenderer/MessageIncomingAvatar.js.map +0 -1
- package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js +0 -33
- package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js.map +0 -1
- package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js.map +0 -1
- package/lib/module/components/MessageRenderer/MessageTime.js +0 -26
- package/lib/module/components/MessageRenderer/MessageTime.js.map +0 -1
- package/lib/module/components/MessageRenderer/UnknownMessage/index.js +0 -38
- package/lib/module/components/MessageRenderer/UnknownMessage/index.js.map +0 -1
- package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js +0 -105
- package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +0 -1
- package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +0 -190
- package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +0 -1
- package/lib/module/components/MessageRenderer/UserMessage/index.js +0 -14
- package/lib/module/components/MessageRenderer/UserMessage/index.js.map +0 -1
- package/lib/module/components/MessageRenderer/index.js +0 -178
- package/lib/module/components/MessageRenderer/index.js.map +0 -1
- package/lib/typescript/src/components/MessageRenderer/AdminMessage/index.d.ts +0 -5
- package/lib/typescript/src/components/MessageRenderer/FileMessage/BaseFileMessage.d.ts +0 -6
- package/lib/typescript/src/components/MessageRenderer/FileMessage/ImageFileMessage.d.ts +0 -3
- package/lib/typescript/src/components/MessageRenderer/FileMessage/VideoFileMessage.d.ts +0 -3
- package/lib/typescript/src/components/MessageRenderer/FileMessage/index.d.ts +0 -15
- package/lib/typescript/src/components/MessageRenderer/MessageContainer.d.ts +0 -3
- package/lib/typescript/src/components/MessageRenderer/MessageDateSeparator.d.ts +0 -7
- package/lib/typescript/src/components/MessageRenderer/MessageIncomingAvatar.d.ts +0 -7
- package/lib/typescript/src/components/MessageRenderer/MessageIncomingSenderName.d.ts +0 -7
- package/lib/typescript/src/components/MessageRenderer/MessageTime.d.ts +0 -9
- package/lib/typescript/src/components/MessageRenderer/UnknownMessage/index.d.ts +0 -4
- package/lib/typescript/src/components/MessageRenderer/UserMessage/BaseUserMessage.d.ts +0 -3
- package/lib/typescript/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.d.ts +0 -7
- package/lib/typescript/src/components/MessageRenderer/UserMessage/index.d.ts +0 -9
- package/src/components/MessageRenderer/AdminMessage/index.tsx +0 -40
- package/src/components/MessageRenderer/FileMessage/BaseFileMessage.tsx +0 -51
- package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +0 -98
- package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +0 -113
- package/src/components/MessageRenderer/FileMessage/index.tsx +0 -20
- package/src/components/MessageRenderer/MessageContainer.tsx +0 -17
- package/src/components/MessageRenderer/MessageIncomingAvatar.tsx +0 -34
- package/src/components/MessageRenderer/MessageIncomingSenderName.tsx +0 -36
- package/src/components/MessageRenderer/MessageTime.tsx +0 -28
- package/src/components/MessageRenderer/UnknownMessage/index.tsx +0 -34
- package/src/components/MessageRenderer/UserMessage/BaseUserMessage.tsx +0 -102
- package/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.tsx +0 -188
- package/src/components/MessageRenderer/UserMessage/index.tsx +0 -24
- package/src/components/MessageRenderer/index.tsx +0 -198
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useRef","useState","KeyboardAvoidingView","Platform","View","useSafeAreaInsets","createStyleSheet","useUIKitTheme","replace","useIIFE","useSendbirdChat","useMentionTextInput","EditInput","SendInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","colors","features","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","userMentionEnabled","isGroupChannel","isBroadcast","inputKeyToRemount","length","inputHeight","setInputHeight","styles","inputDefault","height","useTypingTrigger","useTextPersistenceOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","shouldRenderInput","createElement","SafeAreaBottom","Fragment","keyboardVerticalOffset","behavior","style","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","bottomInset","endTyping","startTyping","setText","chatDisabled","textTmpRef","current","isUserMessage","setTimeout","_textInputRef$current","focus","_ref","justifyContent","width","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, TextInput, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { FileType } from '../../platform/types';\nimport type { MentionedUser, Range } from '../../types';\nimport EditInput from './EditInput';\nimport SendInput from './SendInput';\n\ntype UserMessageMentionParams = Required<{\n messageTemplate: SendbirdUserMessageCreateParams['mentionedMessageTemplate'];\n userIds: SendbirdUserMessageCreateParams['mentionedUserIds'];\n type: SendbirdUserMessageCreateParams['mentionType'];\n}>;\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n};\n\nexport type ChannelInputProps = {\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // mention\n SuggestedMentionList?: (props: SuggestedMentionListProps) => JSX.Element | null;\n\n /** @deprecated Please use `onPressSendUserMessage` **/\n onSendFileMessage?: (file: FileType) => Promise<void>;\n /** @deprecated Please use `onPressSendFileMessage` **/\n onSendUserMessage?: (text: string, mention?: UserMessageMentionParams) => Promise<void>;\n /** @deprecated Please use `onPressUpdateUserMessage` **/\n onUpdateFileMessage?: (editedFile: FileType, message: SendbirdFileMessage) => Promise<void>;\n /** @deprecated Please use `onPressUpdateFileMessage` **/\n onUpdateUserMessage?: (\n editedText: string,\n message: SendbirdUserMessage,\n mention?: UserMessageMentionParams,\n ) => Promise<void>;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n const { features, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (!messageToEdit) return 'send';\n if (messageToEdit.isFileMessage()) return 'send';\n return 'edit';\n });\n\n const mentionAvailable = features.userMentionEnabled && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n useTypingTrigger(text, channel);\n useTextPersistenceOnDisabled(text, onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n messageToEdit={messageToEdit}\n mentionedUsers={mentionedUsers}\n setMessageToEdit={setMessageToEdit}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel()) {\n useEffect(() => {\n if (text.length === 0) channel.endTyping();\n else channel.startTyping();\n }, [text]);\n }\n};\n\nconst useTextPersistenceOnDisabled = (text: string, setText: (val: string) => void, chatDisabled: boolean) => {\n const textTmpRef = useRef('');\n\n useEffect(() => {\n if (chatDisabled) {\n textTmpRef.current = text;\n setText('');\n } else {\n setText(textTmpRef.current);\n }\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","KeyboardAvoidingView","Platform","View","useSafeAreaInsets","createStyleSheet","useUIKitTheme","replace","useIIFE","useSendbirdChat","useMentionTextInput","AttachmentsButton","EditInput","SendInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","colors","sbOptions","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","length","inputHeight","setInputHeight","styles","inputDefault","height","useTypingTrigger","useTextPersistenceOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","shouldRenderInput","createElement","SafeAreaBottom","Fragment","keyboardVerticalOffset","behavior","style","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","bottomInset","endTyping","startTyping","setText","chatDisabled","textTmpRef","current","isUserMessage","setTimeout","_textInputRef$current","focus","_ref","justifyContent","width","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, TextInput, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport SendInput from './SendInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n};\n\nexport type ChannelInputProps = {\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // mention\n SuggestedMentionList?: (props: SuggestedMentionListProps) => JSX.Element | null;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => JSX.Element | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (!messageToEdit) return 'send';\n if (messageToEdit.isFileMessage()) return 'send';\n return 'edit';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n useTypingTrigger(text, channel);\n useTextPersistenceOnDisabled(text, onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n messageToEdit={messageToEdit}\n mentionedUsers={mentionedUsers}\n setMessageToEdit={setMessageToEdit}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel()) {\n useEffect(() => {\n if (text.length === 0) channel.endTyping();\n else channel.startTyping();\n }, [text]);\n }\n};\n\nconst useTextPersistenceOnDisabled = (text: string, setText: (val: string) => void, chatDisabled: boolean) => {\n const textTmpRef = useRef('');\n\n useEffect(() => {\n if (chatDisabled) {\n textTmpRef.current = text;\n setText('');\n } else {\n setText(textTmpRef.current);\n }\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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"}
|
|
@@ -4,8 +4,7 @@ import { View } from 'react-native';
|
|
|
4
4
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
5
5
|
import { ChannelFrozenBanner, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
6
|
import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, messageKeyExtractor, shouldRenderReaction, toMegabyte, useFreshCallback } from '@sendbird/uikit-utils';
|
|
7
|
-
import {
|
|
8
|
-
import { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';
|
|
7
|
+
import { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
|
|
9
8
|
import SBUUtils from '../../libs/SBUUtils';
|
|
10
9
|
import ChatFlatList from '../ChatFlatList';
|
|
11
10
|
import { ReactionAddons } from '../ReactionAddons';
|
|
@@ -31,8 +30,7 @@ const ChannelMessageList = (_ref, ref) => {
|
|
|
31
30
|
onTopReached,
|
|
32
31
|
flatListProps,
|
|
33
32
|
onPressNewMessagesButton,
|
|
34
|
-
onPressScrollToBottomButton
|
|
35
|
-
onPressImageMessage
|
|
33
|
+
onPressScrollToBottomButton
|
|
36
34
|
} = _ref;
|
|
37
35
|
const {
|
|
38
36
|
STRINGS
|
|
@@ -40,6 +38,9 @@ const ChannelMessageList = (_ref, ref) => {
|
|
|
40
38
|
const {
|
|
41
39
|
colors
|
|
42
40
|
} = useUIKitTheme();
|
|
41
|
+
const {
|
|
42
|
+
show
|
|
43
|
+
} = useUserProfile();
|
|
43
44
|
const {
|
|
44
45
|
left,
|
|
45
46
|
right
|
|
@@ -50,7 +51,6 @@ const ChannelMessageList = (_ref, ref) => {
|
|
|
50
51
|
onEditMessage,
|
|
51
52
|
onDeleteMessage,
|
|
52
53
|
onResendFailedMessage,
|
|
53
|
-
onPressImageMessage,
|
|
54
54
|
onPressMediaMessage
|
|
55
55
|
});
|
|
56
56
|
const safeAreaLayout = {
|
|
@@ -72,6 +72,7 @@ const ChannelMessageList = (_ref, ref) => {
|
|
|
72
72
|
nextMessage: messages[index - 1],
|
|
73
73
|
onPress,
|
|
74
74
|
onLongPress,
|
|
75
|
+
onShowUserProfile: show,
|
|
75
76
|
enableMessageGrouping,
|
|
76
77
|
channel,
|
|
77
78
|
currentUserId,
|
|
@@ -117,7 +118,6 @@ const useGetMessagePressActions = _ref3 => {
|
|
|
117
118
|
onResendFailedMessage,
|
|
118
119
|
onEditMessage,
|
|
119
120
|
onDeleteMessage,
|
|
120
|
-
onPressImageMessage,
|
|
121
121
|
onPressMediaMessage
|
|
122
122
|
} = _ref3;
|
|
123
123
|
const {
|
|
@@ -138,7 +138,7 @@ const useGetMessagePressActions = _ref3 => {
|
|
|
138
138
|
fileService
|
|
139
139
|
} = usePlatformService();
|
|
140
140
|
const {
|
|
141
|
-
|
|
141
|
+
sbOptions
|
|
142
142
|
} = useSendbirdChat();
|
|
143
143
|
const handleFailedMessage = message => {
|
|
144
144
|
openSheet({
|
|
@@ -189,16 +189,18 @@ const useGetMessagePressActions = _ref3 => {
|
|
|
189
189
|
toast.show(STRINGS.TOAST.COPY_OK, 'success');
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
192
|
+
if (!channel.isEphemeral) {
|
|
193
|
+
if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {
|
|
194
|
+
sheetItems.push({
|
|
195
|
+
icon: 'edit',
|
|
196
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,
|
|
197
|
+
onPress: () => onEditMessage(msg)
|
|
198
|
+
}, {
|
|
199
|
+
icon: 'delete',
|
|
200
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
|
|
201
|
+
onPress: () => confirmDelete(msg)
|
|
202
|
+
});
|
|
203
|
+
}
|
|
202
204
|
}
|
|
203
205
|
}
|
|
204
206
|
if (msg.isFileMessage()) {
|
|
@@ -222,12 +224,14 @@ const useGetMessagePressActions = _ref3 => {
|
|
|
222
224
|
});
|
|
223
225
|
}
|
|
224
226
|
});
|
|
225
|
-
if (
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
227
|
+
if (!channel.isEphemeral) {
|
|
228
|
+
if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {
|
|
229
|
+
sheetItems.push({
|
|
230
|
+
icon: 'delete',
|
|
231
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
|
|
232
|
+
onPress: () => confirmDelete(msg)
|
|
233
|
+
});
|
|
234
|
+
}
|
|
231
235
|
}
|
|
232
236
|
const fileType = getFileType(msg.type || getFileExtension(msg.name));
|
|
233
237
|
switch (fileType) {
|
|
@@ -236,10 +240,6 @@ const useGetMessagePressActions = _ref3 => {
|
|
|
236
240
|
case 'audio':
|
|
237
241
|
{
|
|
238
242
|
response.onPress = () => {
|
|
239
|
-
if (onPressImageMessage && fileType === 'image') {
|
|
240
|
-
Logger.warn(DEPRECATION_WARNING.CHANNEL.ON_PRESS_IMAGE_MESSAGE);
|
|
241
|
-
onPressImageMessage(msg, getAvailableUriFromFileMessage(msg));
|
|
242
|
-
}
|
|
243
243
|
onPressMediaMessage === null || onPressMediaMessage === void 0 ? void 0 : onPressMediaMessage(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));
|
|
244
244
|
};
|
|
245
245
|
break;
|
|
@@ -255,7 +255,7 @@ const useGetMessagePressActions = _ref3 => {
|
|
|
255
255
|
response.onLongPress = () => {
|
|
256
256
|
openSheet({
|
|
257
257
|
sheetItems,
|
|
258
|
-
HeaderComponent: shouldRenderReaction(channel,
|
|
258
|
+
HeaderComponent: shouldRenderReaction(channel, sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions) ? _ref4 => {
|
|
259
259
|
let {
|
|
260
260
|
onClose
|
|
261
261
|
} = _ref4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","DEPRECATION_WARNING","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","onPressImageMessage","STRINGS","colors","left","right","getMessagePressActions","useGetMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","message","prevMessage","nextMessage","focused","startingPoint","createdAt","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","toast","openSheet","alert","clipboardService","fileService","features","handleFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","catch","show","TOAST","RESEND_MSG_ERROR","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","confirmDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","DELETE_MSG_ERROR","msg","isUserMessage","isFileMessage","undefined","response","push","icon","CHANNEL_MESSAGE_COPY","setString","COPY_OK","sendingStatus","CHANNEL_MESSAGE_EDIT","CHANNEL_MESSAGE_DELETE","CHANNEL_MESSAGE_SAVE","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","DOWNLOAD_OK","log","err","DOWNLOAD_ERROR","warn","CHANNEL","ON_PRESS_IMAGE_MESSAGE","openURL","HeaderComponent","reactionEnabled","_ref4","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport { DEPRECATION_WARNING } from '../../constants';\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport type { CommonComponent } from '../../types';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<void>;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressAvatar?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n }) => React.ReactElement | null;\n renderNewMessagesButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n newMessages: SendbirdMessage[];\n }>;\n renderScrollToBottomButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n }>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n\n /** @deprecated Please use `onPressMediaMessage` instead **/\n onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n onPressImageMessage,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { left, right } = useSafeAreaInsets();\n const getMessagePressActions = useGetMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressImageMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress } = getMessagePressActions(item);\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onDeleteMessage,\n onPressImageMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressImageMessage'\n | 'onPressMediaMessage'\n>) => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { features } = useSendbirdChat();\n\n const handleFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => {\n onResendFailedMessage(message).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error'));\n },\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => confirmDelete(message),\n },\n ],\n });\n };\n const confirmDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(() => toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error'));\n },\n },\n ],\n });\n };\n\n return (msg: SendbirdMessage) => {\n if (!msg.isUserMessage() && !msg.isFileMessage()) {\n return { onPress: undefined, onLongPress: undefined };\n }\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const response: PressActions = {\n onPress: undefined,\n onLongPress: undefined,\n };\n\n if (msg.isUserMessage()) {\n sheetItems.push({\n icon: 'copy',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => {\n clipboardService.setString(msg.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n },\n });\n\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push(\n {\n icon: 'edit',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(msg),\n },\n {\n icon: 'delete',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n },\n );\n }\n }\n\n if (msg.isFileMessage()) {\n sheetItems.push({\n icon: 'download',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: async () => {\n if (toMegabyte(msg.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: msg.url, fileName: msg.name, fileType: msg.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n },\n });\n\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push({\n icon: 'delete',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n });\n }\n\n const fileType = getFileType(msg.type || getFileExtension(msg.name));\n switch (fileType) {\n case 'image':\n case 'video':\n case 'audio': {\n response.onPress = () => {\n if (onPressImageMessage && fileType === 'image') {\n Logger.warn(DEPRECATION_WARNING.CHANNEL.ON_PRESS_IMAGE_MESSAGE);\n onPressImageMessage(msg, getAvailableUriFromFileMessage(msg));\n }\n onPressMediaMessage?.(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));\n };\n break;\n }\n default: {\n response.onPress = () => SBUUtils.openURL(msg.url);\n break;\n }\n }\n }\n\n if (sheetItems.length > 0) {\n response.onLongPress = () => {\n openSheet({\n sheetItems,\n HeaderComponent: shouldRenderReaction(channel, features.reactionEnabled)\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={msg} channel={channel} onClose={onClose} />\n : undefined,\n });\n };\n }\n\n if (msg.sendingStatus === 'failed') {\n response.onLongPress = () => handleFailedMessage(msg);\n response.onPress = () => {\n onResendFailedMessage(msg).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error'));\n };\n }\n\n if (msg.sendingStatus === 'pending') {\n response.onLongPress = undefined;\n response.onPress = undefined;\n }\n\n return response;\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","getMessagePressActions","useGetMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","toast","openSheet","alert","clipboardService","fileService","sbOptions","handleFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","catch","TOAST","RESEND_MSG_ERROR","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","confirmDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","DELETE_MSG_ERROR","msg","isUserMessage","isFileMessage","undefined","response","push","icon","CHANNEL_MESSAGE_COPY","setString","COPY_OK","isEphemeral","sendingStatus","CHANNEL_MESSAGE_EDIT","CHANNEL_MESSAGE_DELETE","CHANNEL_MESSAGE_SAVE","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","DOWNLOAD_OK","log","err","DOWNLOAD_ERROR","openURL","HeaderComponent","uikitWithAppInfo","groupChannel","enableReactions","_ref4","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport type { CommonComponent } from '../../types';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<void>;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n }) => React.ReactElement | null;\n renderNewMessagesButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n newMessages: SendbirdMessage[];\n }>;\n renderScrollToBottomButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n }>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const getMessagePressActions = useGetMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress } = getMessagePressActions(item);\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useGetMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n 'channel' | 'currentUserId' | 'onEditMessage' | 'onDeleteMessage' | 'onResendFailedMessage' | 'onPressMediaMessage'\n>) => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const handleFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => {\n onResendFailedMessage(message).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error'));\n },\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => confirmDelete(message),\n },\n ],\n });\n };\n const confirmDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(() => toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error'));\n },\n },\n ],\n });\n };\n\n return (msg: SendbirdMessage) => {\n if (!msg.isUserMessage() && !msg.isFileMessage()) {\n return { onPress: undefined, onLongPress: undefined };\n }\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const response: PressActions = {\n onPress: undefined,\n onLongPress: undefined,\n };\n\n if (msg.isUserMessage()) {\n sheetItems.push({\n icon: 'copy',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => {\n clipboardService.setString(msg.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n },\n });\n\n if (!channel.isEphemeral) {\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push(\n {\n icon: 'edit',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(msg),\n },\n {\n icon: 'delete',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n },\n );\n }\n }\n }\n\n if (msg.isFileMessage()) {\n sheetItems.push({\n icon: 'download',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: async () => {\n if (toMegabyte(msg.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: msg.url, fileName: msg.name, fileType: msg.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n },\n });\n\n if (!channel.isEphemeral) {\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push({\n icon: 'delete',\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n });\n }\n }\n\n const fileType = getFileType(msg.type || getFileExtension(msg.name));\n switch (fileType) {\n case 'image':\n case 'video':\n case 'audio': {\n response.onPress = () => {\n onPressMediaMessage?.(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));\n };\n break;\n }\n default: {\n response.onPress = () => SBUUtils.openURL(msg.url);\n break;\n }\n }\n }\n\n if (sheetItems.length > 0) {\n response.onLongPress = () => {\n openSheet({\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions,\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={msg} channel={channel} onClose={onClose} />\n : undefined,\n });\n };\n }\n\n if (msg.sendingStatus === 'failed') {\n response.onLongPress = () => handleFailedMessage(msg);\n response.onPress = () => {\n onResendFailedMessage(msg).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error'));\n };\n }\n\n if (msg.sendingStatus === 'pending') {\n response.onLongPress = undefined;\n response.onPress = undefined;\n }\n\n return response;\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":";AAAA,OAAOA,KAAK,MAAe,OAAO;AAClC,SAAkDC,IAAI,QAAQ,cAAc;AAC5E,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,SAEEC,mBAAmB,EACnBC,gBAAgB,EAChBC,QAAQ,EACRC,cAAc,EACdC,QAAQ,EACRC,aAAa,QACR,yCAAyC;AAChD,SACEC,MAAM,EAMNC,8BAA8B,EAC9BC,gBAAgB,EAChBC,WAAW,EACXC,WAAW,EACXC,mBAAmB,EACnBC,oBAAoB,EACpBC,UAAU,EACVC,gBAAgB,QACX,uBAAuB;AAG9B,SAASC,eAAe,EAAEC,kBAAkB,EAAEC,eAAe,EAAEC,cAAc,QAAQ,wBAAwB;AAC7G,OAAOC,QAAQ,MAAM,qBAAqB;AAE1C,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,SAASC,cAAc,QAAQ,mBAAmB;AAoDlD,MAAMC,kBAAkB,GAAGA,CAAAC,IAAA,EAwBzBC,GAAkD,KAC/C;EAAA,IAxBH;IACEC,UAAU;IACVC,OAAO;IACPC,OAAO;IACPC,aAAa;IACbC,eAAe;IACfC,qBAAqB;IACrBC,mBAAmB;IACnBC,aAAa;IACbC,uBAAuB;IACvBC,0BAA0B;IAC1BC,aAAa;IACbC,QAAQ;IACRC,WAAW;IACXC,qBAAqB;IACrBC,wBAAwB;IACxBC,sBAAsB;IACtBC,eAAe;IACfC,YAAY;IACZC,aAAa;IACbC,wBAAwB;IACxBC;EAC0B,CAAC,GAAAtB,IAAA;EAG7B,MAAM;IAAEuB;EAAQ,CAAC,GAAG/B,eAAe,EAAE;EACrC,MAAM;IAAEgC;EAAO,CAAC,GAAG1C,aAAa,EAAE;EAClC,MAAM;IAAE2C;EAAK,CAAC,GAAG9B,cAAc,EAAE;EACjC,MAAM;IAAE+B,IAAI;IAAEC;EAAM,CAAC,GAAGnD,iBAAiB,EAAE;EAC3C,MAAMoD,sBAAsB,GAAGC,yBAAyB,CAAC;IACvDzB,OAAO;IACPK,aAAa;IACbJ,aAAa;IACbC,eAAe;IACfC,qBAAqB;IACrBC;EACF,CAAC,CAAC;EAEF,MAAMsB,cAAc,GAAG;IAAEC,WAAW,EAAEL,IAAI;IAAEM,YAAY,EAAEL;EAAM,CAAC;EAEjE,MAAMM,UAA2C,GAAG1C,gBAAgB,CAAC2C,KAAA,IAAqB;IAAA,IAApB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,KAAA;IACnF,MAAM;MAAEG,OAAO;MAAEC;IAAY,CAAC,GAAGV,sBAAsB,CAACO,IAAI,CAAC;IAC7D,OAAOvB,aAAa,CAAC;MACnB2B,OAAO,EAAEJ,IAAI;MACbK,WAAW,EAAE3B,QAAQ,CAACuB,KAAK,GAAG,CAAC,CAAC;MAChCK,WAAW,EAAE5B,QAAQ,CAACuB,KAAK,GAAG,CAAC,CAAC;MAChCC,OAAO;MACPC,WAAW;MACXI,iBAAiB,EAAEjB,IAAI;MACvBV,qBAAqB;MACrBX,OAAO;MACPK,aAAa;MACbkC,OAAO,EAAE,CAAC,CAAAzC,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE0C,aAAa,KAAI,CAAC,CAAC,MAAMT,IAAI,CAACU;IACtD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,oBACEvE,KAAA,CAAAwE,aAAA,CAACvE,IAAI;IAACwE,KAAK,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,eAAe,EAAEzB,MAAM,CAAC0B;IAAW,CAAC,EAAEpB,cAAc;EAAE,GAC5E1B,OAAO,CAAC+C,QAAQ,iBACf7E,KAAA,CAAAwE,aAAA,CAACrE,mBAAmB;IAACsE,KAAK,EAAEK,MAAM,CAACC,YAAa;IAACC,IAAI,EAAE/B,OAAO,CAACgC,MAAM,CAACC;EAA4B,EACnG,eACDlF,KAAA,CAAAwE,aAAA,CAACjD,YAAY,EAAA4D,QAAA,KACPrC,aAAa;IACjBD,YAAY,EAAEA,YAAa;IAC3BD,eAAe,EAAEA,eAAgB;IACjCF,wBAAwB,EAAEA,wBAAyB;IACnDf,GAAG,EAAEA,GAAI;IACTyD,IAAI,EAAE7C,QAAS;IACfoB,UAAU,EAAEA,UAAW;IACvB0B,YAAY,EAAEvE,mBAAoB;IAClCwE,qBAAqB,EAAE;IACrB;IACAxD,OAAO,CAAC+C,QAAQ,IAAIC,MAAM,CAACS,iBAAiB,EAC5CzC,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEwC,qBAAqB;EACpC,GACF,EACDlD,uBAAuB,iBACtBpC,KAAA,CAAAwE,aAAA,CAACvE,IAAI;IAACwE,KAAK,EAAE,CAACK,MAAM,CAACU,YAAY,EAAEhC,cAAc;EAAE,GAChDpB,uBAAuB,CAAC;IACvBqD,OAAO,EAAEjD,WAAW,CAACkD,MAAM,GAAG,CAAC,KAAK7D,OAAO,EAAE,IAAIc,sBAAsB,CAAC;IACxEoB,OAAO,EAAEA,CAAA,KAAMhB,wBAAwB,EAAE;IACzCP;EACF,CAAC,CAAC,CAEL,EACAH,0BAA0B,iBACzBrC,KAAA,CAAAwE,aAAA,CAACvE,IAAI;IAACwE,KAAK,EAAE,CAACK,MAAM,CAACa,YAAY,EAAEnC,cAAc;EAAE,GAChDnB,0BAA0B,CAAC;IAC1BoD,OAAO,EAAE5D,OAAO,EAAE,IAAIc,sBAAsB;IAC5CoB,OAAO,EAAEA,CAAA,KAAMf,2BAA2B;EAC5C,CAAC,CAAC,CAEL,CACI;AAEX,CAAC;AAED,MAAMO,yBAAyB,GAAGqC,KAAA,IAU5B;EAAA,IAVmF;IACvF9D,OAAO;IACPK,aAAa;IACbF,qBAAqB;IACrBF,aAAa;IACbC,eAAe;IACfE;EAIF,CAAC,GAAA0D,KAAA;EACC,MAAM;IAAE1C;EAAO,CAAC,GAAG1C,aAAa,EAAE;EAClC,MAAM;IAAEyC;EAAQ,CAAC,GAAG/B,eAAe,EAAE;EACrC,MAAM2E,KAAK,GAAGtF,QAAQ,EAAE;EACxB,MAAM;IAAEuF;EAAU,CAAC,GAAGxF,cAAc,EAAE;EACtC,MAAM;IAAEyF;EAAM,CAAC,GAAG1F,QAAQ,EAAE;EAC5B,MAAM;IAAE2F,gBAAgB;IAAEC;EAAY,CAAC,GAAG9E,kBAAkB,EAAE;EAC9D,MAAM;IAAE+E;EAAU,CAAC,GAAG9E,eAAe,EAAE;EAEvC,MAAM+E,mBAAmB,GAAIlC,OAA0B,IAAK;IAC1D6B,SAAS,CAAC;MACRM,UAAU,EAAE,CACV;QACEC,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAACqB,4BAA4B;QAClDvC,OAAO,EAAEA,CAAA,KAAM;UACb9B,qBAAqB,CAACgC,OAAO,CAAC,CAACsC,KAAK,CAAC,MAAMV,KAAK,CAAC1C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACjG;MACF,CAAC,EACD;QACEJ,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAACyB,6BAA6B;QACnDC,UAAU,EAAEzD,MAAM,CAAC0D,EAAE,CAACC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,WAAW;QACrDjD,OAAO,EAAEA,CAAA,KAAMkD,aAAa,CAAChD,OAAO;MACtC,CAAC;IAEL,CAAC,CAAC;EACJ,CAAC;EACD,MAAMgD,aAAa,GAAIhD,OAA0B,IAAK;IACpD8B,KAAK,CAAC;MACJM,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAACiC,oCAAoC;MAC1DC,OAAO,EAAE,CACP;QACEnC,IAAI,EAAE/B,OAAO,CAACgC,MAAM,CAACmC;MACvB,CAAC,EACD;QACEpC,IAAI,EAAE/B,OAAO,CAACgC,MAAM,CAACoC,iCAAiC;QACtD5C,KAAK,EAAE,aAAa;QACpBV,OAAO,EAAEA,CAAA,KAAM;UACb/B,eAAe,CAACiC,OAAO,CAAC,CAACsC,KAAK,CAAC,MAAMV,KAAK,CAAC1C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACc,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC3F;MACF,CAAC;IAEL,CAAC,CAAC;EACJ,CAAC;EAED,OAAQC,GAAoB,IAAK;IAC/B,IAAI,CAACA,GAAG,CAACC,aAAa,EAAE,IAAI,CAACD,GAAG,CAACE,aAAa,EAAE,EAAE;MAChD,OAAO;QAAE1D,OAAO,EAAE2D,SAAS;QAAE1D,WAAW,EAAE0D;MAAU,CAAC;IACvD;IAEA,MAAMtB,UAAyC,GAAG,EAAE;IACpD,MAAMuB,QAAsB,GAAG;MAC7B5D,OAAO,EAAE2D,SAAS;MAClB1D,WAAW,EAAE0D;IACf,CAAC;IAED,IAAIH,GAAG,CAACC,aAAa,EAAE,EAAE;MACvBpB,UAAU,CAACwB,IAAI,CAAC;QACdC,IAAI,EAAE,MAAM;QACZxB,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAAC6C,oBAAoB;QAC1C/D,OAAO,EAAEA,CAAA,KAAM;UACbiC,gBAAgB,CAAC+B,SAAS,CAACR,GAAG,CAACtD,OAAO,IAAI,EAAE,CAAC;UAC7C4B,KAAK,CAAC1C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACwB,OAAO,EAAE,SAAS,CAAC;QAC9C;MACF,CAAC,CAAC;MAEF,IAAI,CAAClG,OAAO,CAACmG,WAAW,EAAE;QACxB,IAAIpH,WAAW,CAAC0G,GAAG,EAAEpF,aAAa,CAAC,IAAIoF,GAAG,CAACW,aAAa,KAAK,WAAW,EAAE;UACxE9B,UAAU,CAACwB,IAAI,CACb;YACEC,IAAI,EAAE,MAAM;YACZxB,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAACkD,oBAAoB;YAC1CpE,OAAO,EAAEA,CAAA,KAAMhC,aAAa,CAACwF,GAAG;UAClC,CAAC,EACD;YACEM,IAAI,EAAE,QAAQ;YACdxB,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAACmD,sBAAsB;YAC5CrE,OAAO,EAAEA,CAAA,KAAMkD,aAAa,CAACM,GAAG;UAClC,CAAC,CACF;QACH;MACF;IACF;IAEA,IAAIA,GAAG,CAACE,aAAa,EAAE,EAAE;MACvBrB,UAAU,CAACwB,IAAI,CAAC;QACdC,IAAI,EAAE,UAAU;QAChBxB,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAACoD,oBAAoB;QAC1CtE,OAAO,EAAE,MAAAA,CAAA,KAAY;UACnB,IAAI/C,UAAU,CAACuG,GAAG,CAACe,IAAI,CAAC,GAAG,CAAC,EAAE;YAC5BzC,KAAK,CAAC1C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAAC+B,cAAc,EAAE,SAAS,CAAC;UACrD;UAEAtC,WAAW,CACRuC,IAAI,CAAC;YAAEC,OAAO,EAAElB,GAAG,CAACmB,GAAG;YAAEC,QAAQ,EAAEpB,GAAG,CAACqB,IAAI;YAAEC,QAAQ,EAAEtB,GAAG,CAACuB;UAAK,CAAC,CAAC,CAClEC,IAAI,CAAEpB,QAAQ,IAAK;YAClB9B,KAAK,CAAC1C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACwC,WAAW,EAAE,SAAS,CAAC;YAChDvI,MAAM,CAACwI,GAAG,CAAC,eAAe,EAAEtB,QAAQ,CAAC;UACvC,CAAC,CAAC,CACDpB,KAAK,CAAE2C,GAAG,IAAK;YACdrD,KAAK,CAAC1C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAAC2C,cAAc,EAAE,OAAO,CAAC;YACjD1I,MAAM,CAACwI,GAAG,CAAC,mBAAmB,EAAEC,GAAG,CAAC;UACtC,CAAC,CAAC;QACN;MACF,CAAC,CAAC;MAEF,IAAI,CAACpH,OAAO,CAACmG,WAAW,EAAE;QACxB,IAAIpH,WAAW,CAAC0G,GAAG,EAAEpF,aAAa,CAAC,IAAIoF,GAAG,CAACW,aAAa,KAAK,WAAW,EAAE;UACxE9B,UAAU,CAACwB,IAAI,CAAC;YACdC,IAAI,EAAE,QAAQ;YACdxB,KAAK,EAAEpD,OAAO,CAACgC,MAAM,CAACmD,sBAAsB;YAC5CrE,OAAO,EAAEA,CAAA,KAAMkD,aAAa,CAACM,GAAG;UAClC,CAAC,CAAC;QACJ;MACF;MAEA,MAAMsB,QAAQ,GAAGjI,WAAW,CAAC2G,GAAG,CAACuB,IAAI,IAAInI,gBAAgB,CAAC4G,GAAG,CAACqB,IAAI,CAAC,CAAC;MACpE,QAAQC,QAAQ;QACd,KAAK,OAAO;QACZ,KAAK,OAAO;QACZ,KAAK,OAAO;UAAE;YACZlB,QAAQ,CAAC5D,OAAO,GAAG,MAAM;cACvB7B,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAGqF,GAAG,EAAE,MAAMvF,eAAe,CAACuF,GAAG,CAAC,EAAE7G,8BAA8B,CAAC6G,GAAG,CAAC,CAAC;YAC7F,CAAC;YACD;UACF;QACA;UAAS;YACPI,QAAQ,CAAC5D,OAAO,GAAG,MAAMzC,QAAQ,CAAC8H,OAAO,CAAC7B,GAAG,CAACmB,GAAG,CAAC;YAClD;UACF;MAAC;IAEL;IAEA,IAAItC,UAAU,CAACV,MAAM,GAAG,CAAC,EAAE;MACzBiC,QAAQ,CAAC3D,WAAW,GAAG,MAAM;QAC3B8B,SAAS,CAAC;UACRM,UAAU;UACViD,eAAe,EAAEtI,oBAAoB,CACnCe,OAAO,EACPoE,SAAS,CAACoD,gBAAgB,CAACC,YAAY,CAACzH,OAAO,CAAC0H,eAAe,CAChE,GACGC,KAAA;YAAA,IAAC;cAAEC;YAAQ,CAAC,GAAAD,KAAA;YAAA,oBAAKzJ,KAAA,CAAAwE,aAAA,CAAChD,cAAc,CAACmI,WAAW;cAAC1F,OAAO,EAAEsD,GAAI;cAACzF,OAAO,EAAEA,OAAQ;cAAC4H,OAAO,EAAEA;YAAQ,EAAG;UAAA,IACjGhC;QACN,CAAC,CAAC;MACJ,CAAC;IACH;IAEA,IAAIH,GAAG,CAACW,aAAa,KAAK,QAAQ,EAAE;MAClCP,QAAQ,CAAC3D,WAAW,GAAG,MAAMmC,mBAAmB,CAACoB,GAAG,CAAC;MACrDI,QAAQ,CAAC5D,OAAO,GAAG,MAAM;QACvB9B,qBAAqB,CAACsF,GAAG,CAAC,CAAChB,KAAK,CAAC,MAAMV,KAAK,CAAC1C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACC,gBAAgB,EAAE,OAAO,CAAC,CAAC;MAC7F,CAAC;IACH;IAEA,IAAIc,GAAG,CAACW,aAAa,KAAK,SAAS,EAAE;MACnCP,QAAQ,CAAC3D,WAAW,GAAG0D,SAAS;MAChCC,QAAQ,CAAC5D,OAAO,GAAG2D,SAAS;IAC9B;IAEA,OAAOC,QAAQ;EACjB,CAAC;AACH,CAAC;AAED,MAAM7C,MAAM,GAAG1E,gBAAgB,CAAC;EAC9B2E,YAAY,EAAE;IACZ6E,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXC,GAAG,EAAE,CAAC;IACN1G,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT,CAAC;EACDkC,iBAAiB,EAAE;IACjBwE,aAAa,EAAE;EACjB,CAAC;EACDvE,YAAY,EAAE;IACZoE,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXG,MAAM,EAAE,EAAE;IACVC,SAAS,EAAE;EACb,CAAC;EACDtE,YAAY,EAAE;IACZiE,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXG,MAAM,EAAE,EAAE;IACV3G,KAAK,EAAE;EACT;AACF,CAAC,CAAC;;AAEF;AACA,4BAAerD,KAAK,CAACkK,UAAU,CAACzI,kBAAkB,CAAC"}
|
|
@@ -1,12 +1,27 @@
|
|
|
1
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); }
|
|
2
2
|
import React, { forwardRef, useRef } from 'react';
|
|
3
3
|
import { Platform, StyleSheet } from 'react-native';
|
|
4
|
-
import { FlatList } from '@sendbird/react-native-scrollview-enhancer';
|
|
5
4
|
import { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
5
|
import { NOOP, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';
|
|
7
6
|
let ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';
|
|
8
7
|
const BOTTOM_DETECT_THRESHOLD = 25;
|
|
9
8
|
const UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;
|
|
9
|
+
function shouldUseScrollViewEnhancer() {
|
|
10
|
+
if (Platform.constants.reactNativeVersion.major < 1) {
|
|
11
|
+
if (Platform.constants.reactNativeVersion.minor < 72) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
function getFlatList() {
|
|
18
|
+
try {
|
|
19
|
+
return !shouldUseScrollViewEnhancer() ? require('@sendbird/react-native-scrollview-enhancer').FlatList : require('react-native').FlatList;
|
|
20
|
+
} catch {
|
|
21
|
+
return require('react-native').FlatList;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const FlatList = getFlatList();
|
|
10
25
|
// FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}
|
|
11
26
|
const ChatFlatList = /*#__PURE__*/forwardRef(function CustomFlatList(_ref, ref) {
|
|
12
27
|
var _props$data;
|
|
@@ -14,7 +29,6 @@ const ChatFlatList = /*#__PURE__*/forwardRef(function CustomFlatList(_ref, ref)
|
|
|
14
29
|
onTopReached,
|
|
15
30
|
onBottomReached,
|
|
16
31
|
onScrolledAwayFromBottom,
|
|
17
|
-
onLeaveScrollBottom,
|
|
18
32
|
onScroll,
|
|
19
33
|
...props
|
|
20
34
|
} = _ref;
|
|
@@ -31,17 +45,15 @@ const ChatFlatList = /*#__PURE__*/forwardRef(function CustomFlatList(_ref, ref)
|
|
|
31
45
|
const currOffsetY = contentOffset.y;
|
|
32
46
|
if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {
|
|
33
47
|
onScrolledAwayFromBottom(false);
|
|
34
|
-
onLeaveScrollBottom === null || onLeaveScrollBottom === void 0 ? void 0 : onLeaveScrollBottom(false);
|
|
35
48
|
} else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {
|
|
36
49
|
onScrolledAwayFromBottom(true);
|
|
37
|
-
onLeaveScrollBottom === null || onLeaveScrollBottom === void 0 ? void 0 : onLeaveScrollBottom(true);
|
|
38
50
|
}
|
|
39
51
|
contentOffsetY.current = contentOffset.y;
|
|
40
52
|
});
|
|
41
53
|
if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {
|
|
42
54
|
ANDROID_BUG_ALERT_SHOWED = true;
|
|
43
55
|
// eslint-disable-next-line no-console
|
|
44
|
-
console.warn('UIKit Warning:
|
|
56
|
+
console.warn('UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\n' + 'Please refer to the link: https://github.com/facebook/react-native/issues/30034');
|
|
45
57
|
}
|
|
46
58
|
return /*#__PURE__*/React.createElement(FlatList, _extends({
|
|
47
59
|
bounces: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useRef","Platform","StyleSheet","
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useRef","Platform","StyleSheet","useUIKitTheme","NOOP","getMessageUniqId","useFreshCallback","ANDROID_BUG_ALERT_SHOWED","OS","BOTTOM_DETECT_THRESHOLD","UNREACHABLE_THRESHOLD","Number","MIN_SAFE_INTEGER","shouldUseScrollViewEnhancer","constants","reactNativeVersion","major","minor","getFlatList","require","FlatList","ChatFlatList","CustomFlatList","_ref","ref","_props$data","onTopReached","onBottomReached","onScrolledAwayFromBottom","onScroll","props","select","contentOffsetY","_onScroll","event","contentOffset","nativeEvent","prevOffsetY","current","currOffsetY","y","__DEV__","console","warn","createElement","_extends","bounces","removeClippedSubviews","keyboardDismissMode","keyboardShouldPersistTaps","indicatorStyle","light","dark","inverted","Boolean","data","length","onEndReached","onScrollToIndexFailed","onStartReached","scrollEventThrottle","keyExtractor","style","flex","flatten","maintainVisibleContentPosition","minIndexForVisible","autoscrollToTopThreshold"],"sources":["ChatFlatList.tsx"],"sourcesContent":["import React, { ForwardedRef, forwardRef, useRef } from 'react';\nimport { FlatListProps, Platform, FlatList as RNFlatList, ScrollViewProps, StyleSheet } from 'react-native';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { NOOP, SendbirdMessage, getMessageUniqId, useFreshCallback } from '@sendbird/uikit-utils';\n\nlet ANDROID_BUG_ALERT_SHOWED = Platform.OS !== 'android';\nconst BOTTOM_DETECT_THRESHOLD = 25;\nconst UNREACHABLE_THRESHOLD = Number.MIN_SAFE_INTEGER;\n\ntype FlatListBidirectional<T = SendbirdMessage> = (\n props: FlatListProps<T> & BidirectionalProps<T>,\n) => React.ReactElement;\ntype BidirectionalProps<T> = {\n onStartReached?: ((info: { distanceFromStart: number }) => void) | null | undefined;\n onStartReachedThreshold?: number | null | undefined;\n onEndReached?: ((info: { distanceFromEnd: number }) => void) | null | undefined;\n onEndReachedThreshold?: number | null | undefined;\n maintainVisibleContentPosition?: ScrollViewProps['maintainVisibleContentPosition'];\n ref: ForwardedRef<RNFlatList<T>>;\n};\n\nfunction shouldUseScrollViewEnhancer() {\n if (Platform.constants.reactNativeVersion.major < 1) {\n if (Platform.constants.reactNativeVersion.minor < 72) {\n return true;\n }\n }\n return false;\n}\n\nfunction getFlatList(): FlatListBidirectional {\n try {\n return !shouldUseScrollViewEnhancer()\n ? require('@sendbird/react-native-scrollview-enhancer').FlatList\n : require('react-native').FlatList;\n } catch {\n return require('react-native').FlatList;\n }\n}\n\nconst FlatList = getFlatList();\n\ntype Props = Omit<FlatListProps<SendbirdMessage>, 'onEndReached'> & {\n onBottomReached: () => void;\n onTopReached: () => void;\n onScrolledAwayFromBottom: (value: boolean) => void;\n};\n// FIXME: Inverted FlatList performance issue on Android {@link https://github.com/facebook/react-native/issues/30034}\nconst ChatFlatList = forwardRef<RNFlatList, Props>(function CustomFlatList(\n { onTopReached, onBottomReached, onScrolledAwayFromBottom, onScroll, ...props },\n ref,\n) {\n const { select } = useUIKitTheme();\n const contentOffsetY = useRef(0);\n\n const _onScroll = useFreshCallback<NonNullable<Props['onScroll']>>((event) => {\n onScroll?.(event);\n\n const { contentOffset } = event.nativeEvent;\n\n const prevOffsetY = contentOffsetY.current;\n const currOffsetY = contentOffset.y;\n\n if (BOTTOM_DETECT_THRESHOLD < prevOffsetY && currOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(false);\n } else if (BOTTOM_DETECT_THRESHOLD < currOffsetY && prevOffsetY <= BOTTOM_DETECT_THRESHOLD) {\n onScrolledAwayFromBottom(true);\n }\n\n contentOffsetY.current = contentOffset.y;\n });\n\n if (__DEV__ && !ANDROID_BUG_ALERT_SHOWED) {\n ANDROID_BUG_ALERT_SHOWED = true;\n // eslint-disable-next-line no-console\n console.warn(\n 'UIKit Warning: The inverted FlatList has a performance issue on Android. Maybe this is a bug.\\n' +\n 'Please refer to the link: https://github.com/facebook/react-native/issues/30034',\n );\n }\n\n return (\n <FlatList\n bounces={false}\n removeClippedSubviews\n keyboardDismissMode={'on-drag'}\n keyboardShouldPersistTaps={'handled'}\n indicatorStyle={select({ light: 'black', dark: 'white' })}\n {...props}\n // FIXME: inverted list of ListEmptyComponent is reversed {@link https://github.com/facebook/react-native/issues/21196#issuecomment-836937743}\n inverted={Boolean(props.data?.length)}\n ref={ref}\n onEndReached={onTopReached}\n onScrollToIndexFailed={NOOP}\n onStartReached={onBottomReached}\n scrollEventThrottle={16}\n onScroll={_onScroll}\n keyExtractor={getMessageUniqId}\n style={{ flex: 1, ...StyleSheet.flatten(props.style) }}\n maintainVisibleContentPosition={{ minIndexForVisible: 0, autoscrollToTopThreshold: UNREACHABLE_THRESHOLD }}\n />\n );\n});\n\nexport default ChatFlatList;\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { View } from 'react-native';
|
|
4
4
|
import { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
5
|
import { useLocalization } from '../../hooks/useContext';
|
|
6
|
-
const
|
|
6
|
+
const GroupChannelMessageDateSeparator = _ref => {
|
|
7
7
|
let {
|
|
8
8
|
message,
|
|
9
9
|
prevMessage
|
|
@@ -38,5 +38,5 @@ const styles = createStyleSheet({
|
|
|
38
38
|
paddingHorizontal: 10
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
|
-
export default
|
|
42
|
-
//# sourceMappingURL=
|
|
41
|
+
export default GroupChannelMessageDateSeparator;
|
|
42
|
+
//# sourceMappingURL=GroupChannelMessageDateSeparator.js.map
|
package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isSameDay","React","View","Text","createStyleSheet","useUIKitTheme","useLocalization","GroupChannelMessageDateSeparator","_ref","message","prevMessage","STRINGS","colors","sameDay","createdAt","createElement","style","styles","container","view","backgroundColor","ui","dateSeparator","default","none","background","caption1","color","text","GROUP_CHANNEL","LIST_DATE_SEPARATOR","Date","alignItems","marginVertical","borderRadius","paddingVertical","paddingHorizontal"],"sources":["GroupChannelMessageDateSeparator.tsx"],"sourcesContent":["import isSameDay from 'date-fns/isSameDay';\nimport React from 'react';\nimport { View } from 'react-native';\n\nimport { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\n\nconst GroupChannelMessageDateSeparator = ({\n message,\n prevMessage,\n}: {\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n}) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n\n const sameDay = isSameDay(message.createdAt, prevMessage?.createdAt ?? 0);\n if (sameDay) return null;\n\n return (\n <View style={styles.container}>\n <View style={[styles.view, { backgroundColor: colors.ui.dateSeparator.default.none.background }]}>\n <Text caption1 color={colors.ui.dateSeparator.default.none.text}>\n {STRINGS.GROUP_CHANNEL.LIST_DATE_SEPARATOR(new Date(message.createdAt))}\n </Text>\n </View>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n alignItems: 'center',\n marginVertical: 16,\n },\n view: {\n borderRadius: 10,\n paddingVertical: 4,\n paddingHorizontal: 10,\n },\n});\n\nexport default GroupChannelMessageDateSeparator;\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,oBAAoB;AAC1C,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AAEnC,SAASC,IAAI,EAAEC,gBAAgB,EAAEC,aAAa,QAAQ,yCAAyC;AAG/F,SAASC,eAAe,QAAQ,wBAAwB;AAExD,MAAMC,gCAAgC,GAAGC,IAAA,IAMnC;EAAA,IANoC;IACxCC,OAAO;IACPC;EAIF,CAAC,GAAAF,IAAA;EACC,MAAM;IAAEG;EAAQ,CAAC,GAAGL,eAAe,EAAE;EACrC,MAAM;IAAEM;EAAO,CAAC,GAAGP,aAAa,EAAE;EAElC,MAAMQ,OAAO,GAAGb,SAAS,CAACS,OAAO,CAACK,SAAS,EAAE,CAAAJ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,SAAS,KAAI,CAAC,CAAC;EACzE,IAAID,OAAO,EAAE,OAAO,IAAI;EAExB,oBACEZ,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACc,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC5BjB,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACc,KAAK,EAAE,CAACC,MAAM,CAACE,IAAI,EAAE;MAAEC,eAAe,EAAER,MAAM,CAACS,EAAE,CAACC,aAAa,CAACC,OAAO,CAACC,IAAI,CAACC;IAAW,CAAC;EAAE,gBAC/FxB,KAAA,CAAAc,aAAA,CAACZ,IAAI;IAACuB,QAAQ;IAACC,KAAK,EAAEf,MAAM,CAACS,EAAE,CAACC,aAAa,CAACC,OAAO,CAACC,IAAI,CAACI;EAAK,GAC7DjB,OAAO,CAACkB,aAAa,CAACC,mBAAmB,CAAC,IAAIC,IAAI,CAACtB,OAAO,CAACK,SAAS,CAAC,CAAC,CAClE,CACF,CACF;AAEX,CAAC;AAED,MAAMG,MAAM,GAAGb,gBAAgB,CAAC;EAC9Bc,SAAS,EAAE;IACTc,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDd,IAAI,EAAE;IACJe,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE;EACrB;AACF,CAAC,CAAC;AAEF,eAAe7B,gCAAgC"}
|
package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React, { useEffect, useRef } from 'react';
|
|
2
|
+
import { Animated, Easing } from 'react-native';
|
|
3
|
+
import { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../constants';
|
|
4
|
+
const GroupChannelMessageFocusAnimation = props => {
|
|
5
|
+
const translateY = useRef(new Animated.Value(0)).current;
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (props.focused) {
|
|
8
|
+
setTimeout(() => {
|
|
9
|
+
Animated.sequence([{
|
|
10
|
+
toValue: -10,
|
|
11
|
+
duration: 500
|
|
12
|
+
}, {
|
|
13
|
+
toValue: 0,
|
|
14
|
+
duration: 100
|
|
15
|
+
}, {
|
|
16
|
+
toValue: -10,
|
|
17
|
+
duration: 200
|
|
18
|
+
}, {
|
|
19
|
+
toValue: 0,
|
|
20
|
+
duration: 100
|
|
21
|
+
}].map(value => Animated.timing(translateY, {
|
|
22
|
+
...value,
|
|
23
|
+
useNativeDriver: true,
|
|
24
|
+
easing: Easing.inOut(Easing.ease)
|
|
25
|
+
}))).start();
|
|
26
|
+
}, MESSAGE_SEARCH_SAFE_SCROLL_DELAY + MESSAGE_FOCUS_ANIMATION_DELAY);
|
|
27
|
+
}
|
|
28
|
+
}, [props.focused]);
|
|
29
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
30
|
+
style: {
|
|
31
|
+
transform: [{
|
|
32
|
+
translateY
|
|
33
|
+
}]
|
|
34
|
+
}
|
|
35
|
+
}, props.children);
|
|
36
|
+
};
|
|
37
|
+
export default GroupChannelMessageFocusAnimation;
|
|
38
|
+
//# sourceMappingURL=GroupChannelMessageFocusAnimation.js.map
|
package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageFocusAnimation.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","Animated","Easing","MESSAGE_FOCUS_ANIMATION_DELAY","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","GroupChannelMessageFocusAnimation","props","translateY","Value","current","focused","setTimeout","sequence","toValue","duration","map","value","timing","useNativeDriver","easing","inOut","ease","start","createElement","View","style","transform","children"],"sources":["GroupChannelMessageFocusAnimation.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Animated, Easing } from 'react-native';\n\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../constants';\n\nconst GroupChannelMessageFocusAnimation = (props: React.PropsWithChildren<{ focused: boolean }>) => {\n const translateY = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n if (props.focused) {\n setTimeout(() => {\n Animated.sequence(\n [\n { toValue: -10, duration: 500 },\n { toValue: 0, duration: 100 },\n { toValue: -10, duration: 200 },\n { toValue: 0, duration: 100 },\n ].map((value) =>\n Animated.timing(translateY, { ...value, useNativeDriver: true, easing: Easing.inOut(Easing.ease) }),\n ),\n ).start();\n }, MESSAGE_SEARCH_SAFE_SCROLL_DELAY + MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n }, [props.focused]);\n\n return <Animated.View style={{ transform: [{ translateY }] }}>{props.children}</Animated.View>;\n};\n\nexport default GroupChannelMessageFocusAnimation;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SAASC,QAAQ,EAAEC,MAAM,QAAQ,cAAc;AAE/C,SAASC,6BAA6B,EAAEC,gCAAgC,QAAQ,iBAAiB;AAEjG,MAAMC,iCAAiC,GAAIC,KAAoD,IAAK;EAClG,MAAMC,UAAU,GAAGP,MAAM,CAAC,IAAIC,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO;EAExDV,SAAS,CAAC,MAAM;IACd,IAAIO,KAAK,CAACI,OAAO,EAAE;MACjBC,UAAU,CAAC,MAAM;QACfV,QAAQ,CAACW,QAAQ,CACf,CACE;UAAEC,OAAO,EAAE,CAAC,EAAE;UAAEC,QAAQ,EAAE;QAAI,CAAC,EAC/B;UAAED,OAAO,EAAE,CAAC;UAAEC,QAAQ,EAAE;QAAI,CAAC,EAC7B;UAAED,OAAO,EAAE,CAAC,EAAE;UAAEC,QAAQ,EAAE;QAAI,CAAC,EAC/B;UAAED,OAAO,EAAE,CAAC;UAAEC,QAAQ,EAAE;QAAI,CAAC,CAC9B,CAACC,GAAG,CAAEC,KAAK,IACVf,QAAQ,CAACgB,MAAM,CAACV,UAAU,EAAE;UAAE,GAAGS,KAAK;UAAEE,eAAe,EAAE,IAAI;UAAEC,MAAM,EAAEjB,MAAM,CAACkB,KAAK,CAAClB,MAAM,CAACmB,IAAI;QAAE,CAAC,CAAC,CACpG,CACF,CAACC,KAAK,EAAE;MACX,CAAC,EAAElB,gCAAgC,GAAGD,6BAA6B,CAAC;IACtE;EACF,CAAC,EAAE,CAACG,KAAK,CAACI,OAAO,CAAC,CAAC;EAEnB,oBAAOZ,KAAA,CAAAyB,aAAA,CAACtB,QAAQ,CAACuB,IAAI;IAACC,KAAK,EAAE;MAAEC,SAAS,EAAE,CAAC;QAAEnB;MAAW,CAAC;IAAE;EAAE,GAAED,KAAK,CAACqB,QAAQ,CAAiB;AAChG,CAAC;AAED,eAAetB,iCAAiC"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';
|
|
3
|
-
import { Icon, LoadingSpinner,
|
|
3
|
+
import { Icon, LoadingSpinner, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
4
4
|
import { useSendbirdChat } from '../../hooks/useContext';
|
|
5
5
|
const SIZE = 16;
|
|
6
|
-
const
|
|
6
|
+
const GroupChannelMessageOutgoingStatus = _ref => {
|
|
7
7
|
let {
|
|
8
8
|
channel,
|
|
9
|
-
message
|
|
9
|
+
message,
|
|
10
|
+
style
|
|
10
11
|
} = _ref;
|
|
11
12
|
if (!message.isUserMessage() && !message.isFileMessage()) return null;
|
|
13
|
+
if (channel.isEphemeral) return null;
|
|
12
14
|
const {
|
|
13
15
|
sdk
|
|
14
16
|
} = useSendbirdChat();
|
|
@@ -19,7 +21,7 @@ const MessageOutgoingStatus = _ref => {
|
|
|
19
21
|
if (outgoingStatus === 'PENDING') {
|
|
20
22
|
return /*#__PURE__*/React.createElement(LoadingSpinner, {
|
|
21
23
|
size: SIZE,
|
|
22
|
-
style:
|
|
24
|
+
style: style
|
|
23
25
|
});
|
|
24
26
|
}
|
|
25
27
|
if (outgoingStatus === 'FAILED') {
|
|
@@ -27,7 +29,7 @@ const MessageOutgoingStatus = _ref => {
|
|
|
27
29
|
icon: 'error',
|
|
28
30
|
size: SIZE,
|
|
29
31
|
color: colors.error,
|
|
30
|
-
style:
|
|
32
|
+
style: style
|
|
31
33
|
});
|
|
32
34
|
}
|
|
33
35
|
if (outgoingStatus === 'READ') {
|
|
@@ -35,7 +37,7 @@ const MessageOutgoingStatus = _ref => {
|
|
|
35
37
|
icon: 'done-all',
|
|
36
38
|
size: SIZE,
|
|
37
39
|
color: colors.secondary,
|
|
38
|
-
style:
|
|
40
|
+
style: style
|
|
39
41
|
});
|
|
40
42
|
}
|
|
41
43
|
if (outgoingStatus === 'UNREAD' || outgoingStatus === 'DELIVERED') {
|
|
@@ -43,7 +45,7 @@ const MessageOutgoingStatus = _ref => {
|
|
|
43
45
|
icon: 'done-all',
|
|
44
46
|
size: SIZE,
|
|
45
47
|
color: colors.onBackground03,
|
|
46
|
-
style:
|
|
48
|
+
style: style
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
51
|
if (outgoingStatus === 'UNDELIVERED') {
|
|
@@ -51,15 +53,10 @@ const MessageOutgoingStatus = _ref => {
|
|
|
51
53
|
icon: 'done',
|
|
52
54
|
size: SIZE,
|
|
53
55
|
color: colors.onBackground03,
|
|
54
|
-
style:
|
|
56
|
+
style: style
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
59
|
return null;
|
|
58
60
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
marginRight: 4
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
export default /*#__PURE__*/React.memo(MessageOutgoingStatus);
|
|
65
|
-
//# sourceMappingURL=MessageOutgoingStatus.js.map
|
|
61
|
+
export default /*#__PURE__*/React.memo(GroupChannelMessageOutgoingStatus);
|
|
62
|
+
//# sourceMappingURL=GroupChannelMessageOutgoingStatus.js.map
|
package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageOutgoingStatus.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useMessageOutgoingStatus","Icon","LoadingSpinner","useUIKitTheme","useSendbirdChat","SIZE","GroupChannelMessageOutgoingStatus","_ref","channel","message","style","isUserMessage","isFileMessage","isEphemeral","sdk","colors","outgoingStatus","createElement","size","icon","color","error","secondary","onBackground03","memo"],"sources":["GroupChannelMessageOutgoingStatus.tsx"],"sourcesContent":["import React from 'react';\nimport type { ImageStyle, StyleProp } from 'react-native';\n\nimport { useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';\nimport { Icon, LoadingSpinner, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdGroupChannel, SendbirdMessage } from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\n\nconst SIZE = 16;\n\ntype Props = {\n channel: SendbirdGroupChannel;\n message: SendbirdMessage;\n style?: StyleProp<ImageStyle>;\n};\nconst GroupChannelMessageOutgoingStatus = ({ channel, message, style }: Props) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return null;\n if (channel.isEphemeral) return null;\n\n const { sdk } = useSendbirdChat();\n const { colors } = useUIKitTheme();\n const outgoingStatus = useMessageOutgoingStatus(sdk, channel, message);\n\n if (outgoingStatus === 'PENDING') {\n return <LoadingSpinner size={SIZE} style={style} />;\n }\n\n if (outgoingStatus === 'FAILED') {\n return <Icon icon={'error'} size={SIZE} color={colors.error} style={style} />;\n }\n\n if (outgoingStatus === 'READ') {\n return <Icon icon={'done-all'} size={SIZE} color={colors.secondary} style={style} />;\n }\n\n if (outgoingStatus === 'UNREAD' || outgoingStatus === 'DELIVERED') {\n return <Icon icon={'done-all'} size={SIZE} color={colors.onBackground03} style={style} />;\n }\n\n if (outgoingStatus === 'UNDELIVERED') {\n return <Icon icon={'done'} size={SIZE} color={colors.onBackground03} style={style} />;\n }\n\n return null;\n};\n\nexport default React.memo(GroupChannelMessageOutgoingStatus);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,IAAI,EAAEC,cAAc,EAAEC,aAAa,QAAQ,yCAAyC;AAG7F,SAASC,eAAe,QAAQ,wBAAwB;AAExD,MAAMC,IAAI,GAAG,EAAE;AAOf,MAAMC,iCAAiC,GAAGC,IAAA,IAAwC;EAAA,IAAvC;IAAEC,OAAO;IAAEC,OAAO;IAAEC;EAAa,CAAC,GAAAH,IAAA;EAC3E,IAAI,CAACE,OAAO,CAACE,aAAa,EAAE,IAAI,CAACF,OAAO,CAACG,aAAa,EAAE,EAAE,OAAO,IAAI;EACrE,IAAIJ,OAAO,CAACK,WAAW,EAAE,OAAO,IAAI;EAEpC,MAAM;IAAEC;EAAI,CAAC,GAAGV,eAAe,EAAE;EACjC,MAAM;IAAEW;EAAO,CAAC,GAAGZ,aAAa,EAAE;EAClC,MAAMa,cAAc,GAAGhB,wBAAwB,CAACc,GAAG,EAAEN,OAAO,EAAEC,OAAO,CAAC;EAEtE,IAAIO,cAAc,KAAK,SAAS,EAAE;IAChC,oBAAOjB,KAAA,CAAAkB,aAAA,CAACf,cAAc;MAACgB,IAAI,EAAEb,IAAK;MAACK,KAAK,EAAEA;IAAM,EAAG;EACrD;EAEA,IAAIM,cAAc,KAAK,QAAQ,EAAE;IAC/B,oBAAOjB,KAAA,CAAAkB,aAAA,CAAChB,IAAI;MAACkB,IAAI,EAAE,OAAQ;MAACD,IAAI,EAAEb,IAAK;MAACe,KAAK,EAAEL,MAAM,CAACM,KAAM;MAACX,KAAK,EAAEA;IAAM,EAAG;EAC/E;EAEA,IAAIM,cAAc,KAAK,MAAM,EAAE;IAC7B,oBAAOjB,KAAA,CAAAkB,aAAA,CAAChB,IAAI;MAACkB,IAAI,EAAE,UAAW;MAACD,IAAI,EAAEb,IAAK;MAACe,KAAK,EAAEL,MAAM,CAACO,SAAU;MAACZ,KAAK,EAAEA;IAAM,EAAG;EACtF;EAEA,IAAIM,cAAc,KAAK,QAAQ,IAAIA,cAAc,KAAK,WAAW,EAAE;IACjE,oBAAOjB,KAAA,CAAAkB,aAAA,CAAChB,IAAI;MAACkB,IAAI,EAAE,UAAW;MAACD,IAAI,EAAEb,IAAK;MAACe,KAAK,EAAEL,MAAM,CAACQ,cAAe;MAACb,KAAK,EAAEA;IAAM,EAAG;EAC3F;EAEA,IAAIM,cAAc,KAAK,aAAa,EAAE;IACpC,oBAAOjB,KAAA,CAAAkB,aAAA,CAAChB,IAAI;MAACkB,IAAI,EAAE,MAAO;MAACD,IAAI,EAAEb,IAAK;MAACe,KAAK,EAAEL,MAAM,CAACQ,cAAe;MAACb,KAAK,EAAEA;IAAM,EAAG;EACvF;EAEA,OAAO,IAAI;AACb,CAAC;AAED,4BAAeX,KAAK,CAACyB,IAAI,CAAClB,iCAAiC,CAAC"}
|