@sendbird/uikit-react-native 1.0.0-rc.1
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/LICENSE +21 -0
- package/README.md +410 -0
- package/lib/commonjs/InternalErrorBoundary.js +84 -0
- package/lib/commonjs/InternalErrorBoundary.js.map +1 -0
- package/lib/commonjs/InternalLocalCacheStorage.js +59 -0
- package/lib/commonjs/InternalLocalCacheStorage.js.map +1 -0
- package/lib/commonjs/SendbirdUIKitContainer.js +166 -0
- package/lib/commonjs/SendbirdUIKitContainer.js.map +1 -0
- package/lib/commonjs/components/ChannelCover.js +59 -0
- package/lib/commonjs/components/ChannelCover.js.map +1 -0
- package/lib/commonjs/components/ChatFlatList.js +118 -0
- package/lib/commonjs/components/ChatFlatList.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/AdminMessage/index.js +52 -0
- package/lib/commonjs/components/MessageRenderer/AdminMessage/index.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js +76 -0
- package/lib/commonjs/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js +61 -0
- package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/FileMessage/index.js +31 -0
- package/lib/commonjs/components/MessageRenderer/FileMessage/index.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/MessageContainer.js +33 -0
- package/lib/commonjs/components/MessageRenderer/MessageContainer.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/MessageDateSeparator.js +58 -0
- package/lib/commonjs/components/MessageRenderer/MessageDateSeparator.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/MessageIncomingAvatar.js +42 -0
- package/lib/commonjs/components/MessageRenderer/MessageIncomingAvatar.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js +48 -0
- package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js +134 -0
- package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/MessageTime.js +41 -0
- package/lib/commonjs/components/MessageRenderer/MessageTime.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/UnknownMessage/index.js +53 -0
- package/lib/commonjs/components/MessageRenderer/UnknownMessage/index.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js +54 -0
- package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +131 -0
- package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/UserMessage/index.js +31 -0
- package/lib/commonjs/components/MessageRenderer/UserMessage/index.js.map +1 -0
- package/lib/commonjs/components/MessageRenderer/index.js +189 -0
- package/lib/commonjs/components/MessageRenderer/index.js.map +1 -0
- package/lib/commonjs/components/NewMessagesButton.js +73 -0
- package/lib/commonjs/components/NewMessagesButton.js.map +1 -0
- package/lib/commonjs/components/ProviderLayout.js +37 -0
- package/lib/commonjs/components/ProviderLayout.js.map +1 -0
- package/lib/commonjs/components/ScrollToBottomButton.js +66 -0
- package/lib/commonjs/components/ScrollToBottomButton.js.map +1 -0
- package/lib/commonjs/components/StatusComposition.js +27 -0
- package/lib/commonjs/components/StatusComposition.js.map +1 -0
- package/lib/commonjs/components/TypedPlaceholder.js +80 -0
- package/lib/commonjs/components/TypedPlaceholder.js.map +1 -0
- package/lib/commonjs/components/UserActionBar.js +96 -0
- package/lib/commonjs/components/UserActionBar.js.map +1 -0
- package/lib/commonjs/components/UserSelectableBar.js +78 -0
- package/lib/commonjs/components/UserSelectableBar.js.map +1 -0
- package/lib/commonjs/constants.js +9 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/contexts/Localization.js +29 -0
- package/lib/commonjs/contexts/Localization.js.map +1 -0
- package/lib/commonjs/contexts/PlatformService.js +33 -0
- package/lib/commonjs/contexts/PlatformService.js.map +1 -0
- package/lib/commonjs/contexts/SendbirdChat.js +87 -0
- package/lib/commonjs/contexts/SendbirdChat.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js +88 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelHeader.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/EditInput.js +118 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/EditInput.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js +148 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js +115 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +343 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelStatusEmpty.js +34 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelStatusEmpty.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelStatusLoading.js +34 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelStatusLoading.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/index.js +70 -0
- package/lib/commonjs/domain/groupChannel/index.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/module/createGroupChannelModule.js +45 -0
- package/lib/commonjs/domain/groupChannel/module/createGroupChannelModule.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js +79 -0
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/types.js +6 -0
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListHeader.js +38 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListHeader.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js +96 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListStatusEmpty.js +34 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListStatusEmpty.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListStatusLoading.js +34 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListStatusLoading.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListTypeSelector.js +141 -0
- package/lib/commonjs/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/index.js +70 -0
- package/lib/commonjs/domain/groupChannelList/index.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/module/createGroupChannelListModule.js +45 -0
- package/lib/commonjs/domain/groupChannelList/module/createGroupChannelListModule.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/module/moduleContext.js +61 -0
- package/lib/commonjs/domain/groupChannelList/module/moduleContext.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/types.js +6 -0
- package/lib/commonjs/domain/groupChannelList/types.js.map +1 -0
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsHeader.js +49 -0
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsHeader.js.map +1 -0
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +77 -0
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -0
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +94 -0
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -0
- package/lib/commonjs/domain/groupChannelSettings/index.js +54 -0
- package/lib/commonjs/domain/groupChannelSettings/index.js.map +1 -0
- package/lib/commonjs/domain/groupChannelSettings/module/createGroupChannelSettingsModule.js +37 -0
- package/lib/commonjs/domain/groupChannelSettings/module/createGroupChannelSettingsModule.js.map +1 -0
- package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js +150 -0
- package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js.map +1 -0
- package/lib/commonjs/domain/groupChannelSettings/types.js +6 -0
- package/lib/commonjs/domain/groupChannelSettings/types.js.map +1 -0
- package/lib/commonjs/domain/groupChannelUserList/types.js +6 -0
- package/lib/commonjs/domain/groupChannelUserList/types.js.map +1 -0
- package/lib/commonjs/domain/userList/component/UserListHeader.js +56 -0
- package/lib/commonjs/domain/userList/component/UserListHeader.js.map +1 -0
- package/lib/commonjs/domain/userList/component/UserListList.js +57 -0
- package/lib/commonjs/domain/userList/component/UserListList.js.map +1 -0
- package/lib/commonjs/domain/userList/component/UserListStatusEmpty.js +34 -0
- package/lib/commonjs/domain/userList/component/UserListStatusEmpty.js.map +1 -0
- package/lib/commonjs/domain/userList/component/UserListStatusError.js +38 -0
- package/lib/commonjs/domain/userList/component/UserListStatusError.js.map +1 -0
- package/lib/commonjs/domain/userList/component/UserListStatusLoading.js +34 -0
- package/lib/commonjs/domain/userList/component/UserListStatusLoading.js.map +1 -0
- package/lib/commonjs/domain/userList/index.js +70 -0
- package/lib/commonjs/domain/userList/index.js.map +1 -0
- package/lib/commonjs/domain/userList/module/createUserListModule.js +45 -0
- package/lib/commonjs/domain/userList/module/createUserListModule.js.map +1 -0
- package/lib/commonjs/domain/userList/module/moduleContext.js +54 -0
- package/lib/commonjs/domain/userList/module/moduleContext.js.map +1 -0
- package/lib/commonjs/domain/userList/types.js +6 -0
- package/lib/commonjs/domain/userList/types.js.map +1 -0
- package/lib/commonjs/fragments/createGroupChannelCreateFragment.js +145 -0
- package/lib/commonjs/fragments/createGroupChannelCreateFragment.js.map +1 -0
- package/lib/commonjs/fragments/createGroupChannelFragment.js +154 -0
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -0
- package/lib/commonjs/fragments/createGroupChannelInviteFragment.js +139 -0
- package/lib/commonjs/fragments/createGroupChannelInviteFragment.js.map +1 -0
- package/lib/commonjs/fragments/createGroupChannelListFragment.js +141 -0
- package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -0
- package/lib/commonjs/fragments/createGroupChannelMembersFragment.js +134 -0
- package/lib/commonjs/fragments/createGroupChannelMembersFragment.js.map +1 -0
- package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js +67 -0
- package/lib/commonjs/fragments/createGroupChannelSettingsFragment.js.map +1 -0
- package/lib/commonjs/hooks/useConnection.js +102 -0
- package/lib/commonjs/hooks/useConnection.js.map +1 -0
- package/lib/commonjs/hooks/useContext.js +39 -0
- package/lib/commonjs/hooks/useContext.js.map +1 -0
- package/lib/commonjs/hooks/usePushTokenRegistration.js +83 -0
- package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -0
- package/lib/commonjs/index.js +449 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/localization/StringSet.en.js +19 -0
- package/lib/commonjs/localization/StringSet.en.js.map +1 -0
- package/lib/commonjs/localization/StringSet.type.js +178 -0
- package/lib/commonjs/localization/StringSet.type.js.map +1 -0
- package/lib/commonjs/platform/createClipboardService.expo.js +23 -0
- package/lib/commonjs/platform/createClipboardService.expo.js.map +1 -0
- package/lib/commonjs/platform/createClipboardService.native.js +23 -0
- package/lib/commonjs/platform/createClipboardService.native.js.map +1 -0
- package/lib/commonjs/platform/createFileService.expo.js +176 -0
- package/lib/commonjs/platform/createFileService.expo.js.map +1 -0
- package/lib/commonjs/platform/createFileService.native.js +253 -0
- package/lib/commonjs/platform/createFileService.native.js.map +1 -0
- package/lib/commonjs/platform/createNotificationService.expo.js +50 -0
- package/lib/commonjs/platform/createNotificationService.expo.js.map +1 -0
- package/lib/commonjs/platform/createNotificationService.native.js +65 -0
- package/lib/commonjs/platform/createNotificationService.native.js.map +1 -0
- package/lib/commonjs/platform/dynamicModule.js +114 -0
- package/lib/commonjs/platform/dynamicModule.js.map +1 -0
- package/lib/commonjs/platform/types.js +2 -0
- package/lib/commonjs/platform/types.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/expoPermissionGranted.js +32 -0
- package/lib/commonjs/utils/expoPermissionGranted.js.map +1 -0
- package/lib/commonjs/utils/fileTypeGuard.js +26 -0
- package/lib/commonjs/utils/fileTypeGuard.js.map +1 -0
- package/lib/commonjs/utils/nativePermissionGranted.js +23 -0
- package/lib/commonjs/utils/nativePermissionGranted.js.map +1 -0
- package/lib/commonjs/version.js +10 -0
- package/lib/commonjs/version.js.map +1 -0
- package/lib/module/InternalErrorBoundary.js +72 -0
- package/lib/module/InternalErrorBoundary.js.map +1 -0
- package/lib/module/InternalLocalCacheStorage.js +50 -0
- package/lib/module/InternalLocalCacheStorage.js.map +1 -0
- package/lib/module/SendbirdUIKitContainer.js +136 -0
- package/lib/module/SendbirdUIKitContainer.js.map +1 -0
- package/lib/module/components/ChannelCover.js +46 -0
- package/lib/module/components/ChannelCover.js.map +1 -0
- package/lib/module/components/ChatFlatList.js +102 -0
- package/lib/module/components/ChatFlatList.js.map +1 -0
- package/lib/module/components/MessageRenderer/AdminMessage/index.js +40 -0
- package/lib/module/components/MessageRenderer/AdminMessage/index.js.map +1 -0
- package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js +62 -0
- package/lib/module/components/MessageRenderer/FileMessage/BaseFileMessage.js.map +1 -0
- package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js +47 -0
- package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -0
- package/lib/module/components/MessageRenderer/FileMessage/index.js +17 -0
- package/lib/module/components/MessageRenderer/FileMessage/index.js.map +1 -0
- package/lib/module/components/MessageRenderer/MessageContainer.js +21 -0
- package/lib/module/components/MessageRenderer/MessageContainer.js.map +1 -0
- package/lib/module/components/MessageRenderer/MessageDateSeparator.js +44 -0
- package/lib/module/components/MessageRenderer/MessageDateSeparator.js.map +1 -0
- package/lib/module/components/MessageRenderer/MessageIncomingAvatar.js +30 -0
- package/lib/module/components/MessageRenderer/MessageIncomingAvatar.js.map +1 -0
- package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js +35 -0
- package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -0
- package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js +116 -0
- package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -0
- package/lib/module/components/MessageRenderer/MessageTime.js +28 -0
- package/lib/module/components/MessageRenderer/MessageTime.js.map +1 -0
- package/lib/module/components/MessageRenderer/UnknownMessage/index.js +40 -0
- package/lib/module/components/MessageRenderer/UnknownMessage/index.js.map +1 -0
- package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js +41 -0
- package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -0
- package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +115 -0
- package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -0
- package/lib/module/components/MessageRenderer/UserMessage/index.js +18 -0
- package/lib/module/components/MessageRenderer/UserMessage/index.js.map +1 -0
- package/lib/module/components/MessageRenderer/index.js +163 -0
- package/lib/module/components/MessageRenderer/index.js.map +1 -0
- package/lib/module/components/NewMessagesButton.js +58 -0
- package/lib/module/components/NewMessagesButton.js.map +1 -0
- package/lib/module/components/ProviderLayout.js +25 -0
- package/lib/module/components/ProviderLayout.js.map +1 -0
- package/lib/module/components/ScrollToBottomButton.js +52 -0
- package/lib/module/components/ScrollToBottomButton.js.map +1 -0
- package/lib/module/components/StatusComposition.js +17 -0
- package/lib/module/components/StatusComposition.js.map +1 -0
- package/lib/module/components/TypedPlaceholder.js +68 -0
- package/lib/module/components/TypedPlaceholder.js.map +1 -0
- package/lib/module/components/UserActionBar.js +81 -0
- package/lib/module/components/UserActionBar.js.map +1 -0
- package/lib/module/components/UserSelectableBar.js +63 -0
- package/lib/module/components/UserSelectableBar.js.map +1 -0
- package/lib/module/constants.js +2 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/contexts/Localization.js +14 -0
- package/lib/module/contexts/Localization.js.map +1 -0
- package/lib/module/contexts/PlatformService.js +18 -0
- package/lib/module/contexts/PlatformService.js.map +1 -0
- package/lib/module/contexts/SendbirdChat.js +66 -0
- package/lib/module/contexts/SendbirdChat.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelHeader.js +69 -0
- package/lib/module/domain/groupChannel/component/GroupChannelHeader.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelInput/EditInput.js +102 -0
- package/lib/module/domain/groupChannel/component/GroupChannelInput/EditInput.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js +134 -0
- package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js +92 -0
- package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +317 -0
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelStatusEmpty.js +21 -0
- package/lib/module/domain/groupChannel/component/GroupChannelStatusEmpty.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelStatusLoading.js +21 -0
- package/lib/module/domain/groupChannel/component/GroupChannelStatusLoading.js.map +1 -0
- package/lib/module/domain/groupChannel/index.js +8 -0
- package/lib/module/domain/groupChannel/index.js.map +1 -0
- package/lib/module/domain/groupChannel/module/createGroupChannelModule.js +30 -0
- package/lib/module/domain/groupChannel/module/createGroupChannelModule.js.map +1 -0
- package/lib/module/domain/groupChannel/module/moduleContext.js +57 -0
- package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -0
- package/lib/module/domain/groupChannel/types.js +2 -0
- package/lib/module/domain/groupChannel/types.js.map +1 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListHeader.js +24 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListHeader.js.map +1 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListList.js +79 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListList.js.map +1 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListStatusEmpty.js +21 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListStatusEmpty.js.map +1 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListStatusLoading.js +21 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListStatusLoading.js.map +1 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListTypeSelector.js +124 -0
- package/lib/module/domain/groupChannelList/component/GroupChannelListTypeSelector.js.map +1 -0
- package/lib/module/domain/groupChannelList/index.js +8 -0
- package/lib/module/domain/groupChannelList/index.js.map +1 -0
- package/lib/module/domain/groupChannelList/module/createGroupChannelListModule.js +30 -0
- package/lib/module/domain/groupChannelList/module/createGroupChannelListModule.js.map +1 -0
- package/lib/module/domain/groupChannelList/module/moduleContext.js +40 -0
- package/lib/module/domain/groupChannelList/module/moduleContext.js.map +1 -0
- package/lib/module/domain/groupChannelList/types.js +2 -0
- package/lib/module/domain/groupChannelList/types.js.map +1 -0
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsHeader.js +35 -0
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsHeader.js.map +1 -0
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +56 -0
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -0
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +78 -0
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -0
- package/lib/module/domain/groupChannelSettings/index.js +6 -0
- package/lib/module/domain/groupChannelSettings/index.js.map +1 -0
- package/lib/module/domain/groupChannelSettings/module/createGroupChannelSettingsModule.js +24 -0
- package/lib/module/domain/groupChannelSettings/module/createGroupChannelSettingsModule.js.map +1 -0
- package/lib/module/domain/groupChannelSettings/module/moduleContext.js +127 -0
- package/lib/module/domain/groupChannelSettings/module/moduleContext.js.map +1 -0
- package/lib/module/domain/groupChannelSettings/types.js +2 -0
- package/lib/module/domain/groupChannelSettings/types.js.map +1 -0
- package/lib/module/domain/groupChannelUserList/types.js +2 -0
- package/lib/module/domain/groupChannelUserList/types.js.map +1 -0
- package/lib/module/domain/userList/component/UserListHeader.js +42 -0
- package/lib/module/domain/userList/component/UserListHeader.js.map +1 -0
- package/lib/module/domain/userList/component/UserListList.js +42 -0
- package/lib/module/domain/userList/component/UserListList.js.map +1 -0
- package/lib/module/domain/userList/component/UserListStatusEmpty.js +21 -0
- package/lib/module/domain/userList/component/UserListStatusEmpty.js.map +1 -0
- package/lib/module/domain/userList/component/UserListStatusError.js +25 -0
- package/lib/module/domain/userList/component/UserListStatusError.js.map +1 -0
- package/lib/module/domain/userList/component/UserListStatusLoading.js +21 -0
- package/lib/module/domain/userList/component/UserListStatusLoading.js.map +1 -0
- package/lib/module/domain/userList/index.js +8 -0
- package/lib/module/domain/userList/index.js.map +1 -0
- package/lib/module/domain/userList/module/createUserListModule.js +30 -0
- package/lib/module/domain/userList/module/createUserListModule.js.map +1 -0
- package/lib/module/domain/userList/module/moduleContext.js +34 -0
- package/lib/module/domain/userList/module/moduleContext.js.map +1 -0
- package/lib/module/domain/userList/types.js +2 -0
- package/lib/module/domain/userList/types.js.map +1 -0
- package/lib/module/fragments/createGroupChannelCreateFragment.js +124 -0
- package/lib/module/fragments/createGroupChannelCreateFragment.js.map +1 -0
- package/lib/module/fragments/createGroupChannelFragment.js +132 -0
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -0
- package/lib/module/fragments/createGroupChannelInviteFragment.js +118 -0
- package/lib/module/fragments/createGroupChannelInviteFragment.js.map +1 -0
- package/lib/module/fragments/createGroupChannelListFragment.js +115 -0
- package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -0
- package/lib/module/fragments/createGroupChannelMembersFragment.js +114 -0
- package/lib/module/fragments/createGroupChannelMembersFragment.js.map +1 -0
- package/lib/module/fragments/createGroupChannelSettingsFragment.js +52 -0
- package/lib/module/fragments/createGroupChannelSettingsFragment.js.map +1 -0
- package/lib/module/hooks/useConnection.js +79 -0
- package/lib/module/hooks/useConnection.js.map +1 -0
- package/lib/module/hooks/useContext.js +20 -0
- package/lib/module/hooks/useContext.js.map +1 -0
- package/lib/module/hooks/usePushTokenRegistration.js +69 -0
- package/lib/module/hooks/usePushTokenRegistration.js.map +1 -0
- package/lib/module/index.js +57 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/localization/StringSet.en.js +7 -0
- package/lib/module/localization/StringSet.en.js.map +1 -0
- package/lib/module/localization/StringSet.type.js +173 -0
- package/lib/module/localization/StringSet.type.js.map +1 -0
- package/lib/module/platform/createClipboardService.expo.js +15 -0
- package/lib/module/platform/createClipboardService.expo.js.map +1 -0
- package/lib/module/platform/createClipboardService.native.js +15 -0
- package/lib/module/platform/createClipboardService.native.js.map +1 -0
- package/lib/module/platform/createFileService.expo.js +164 -0
- package/lib/module/platform/createFileService.expo.js.map +1 -0
- package/lib/module/platform/createFileService.native.js +237 -0
- package/lib/module/platform/createFileService.native.js.map +1 -0
- package/lib/module/platform/createNotificationService.expo.js +42 -0
- package/lib/module/platform/createNotificationService.expo.js.map +1 -0
- package/lib/module/platform/createNotificationService.native.js +57 -0
- package/lib/module/platform/createNotificationService.native.js.map +1 -0
- package/lib/module/platform/dynamicModule.js +103 -0
- package/lib/module/platform/dynamicModule.js.map +1 -0
- package/lib/module/platform/types.js +2 -0
- package/lib/module/platform/types.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/expoPermissionGranted.js +24 -0
- package/lib/module/utils/expoPermissionGranted.js.map +1 -0
- package/lib/module/utils/fileTypeGuard.js +18 -0
- package/lib/module/utils/fileTypeGuard.js.map +1 -0
- package/lib/module/utils/nativePermissionGranted.js +15 -0
- package/lib/module/utils/nativePermissionGranted.js.map +1 -0
- package/lib/module/version.js +3 -0
- package/lib/module/version.js.map +1 -0
- package/lib/typescript/__template__/component/__domain__Header.d.ts +4 -0
- package/lib/typescript/__template__/component/__domain__StatusEmpty.d.ts +3 -0
- package/lib/typescript/__template__/component/__domain__StatusLoading.d.ts +3 -0
- package/lib/typescript/__template__/component/__domain__View.d.ts +4 -0
- package/lib/typescript/__template__/create__domain__Fragment.d.ts +2 -0
- package/lib/typescript/__template__/index.d.ts +6 -0
- package/lib/typescript/__template__/module/create__domain__Module.d.ts +3 -0
- package/lib/typescript/__template__/module/moduleContext.d.ts +4 -0
- package/lib/typescript/__template__/types.d.ts +31 -0
- package/lib/typescript/src/InternalErrorBoundary.d.ts +18 -0
- package/lib/typescript/src/InternalLocalCacheStorage.d.ts +12 -0
- package/lib/typescript/src/SendbirdUIKitContainer.d.ts +42 -0
- package/lib/typescript/src/components/ChannelCover.d.ts +10 -0
- package/lib/typescript/src/components/ChatFlatList.d.ts +14 -0
- package/lib/typescript/src/components/MessageRenderer/AdminMessage/index.d.ts +6 -0
- package/lib/typescript/src/components/MessageRenderer/FileMessage/BaseFileMessage.d.ts +6 -0
- package/lib/typescript/src/components/MessageRenderer/FileMessage/ImageFileMessage.d.ts +4 -0
- package/lib/typescript/src/components/MessageRenderer/FileMessage/index.d.ts +6 -0
- package/lib/typescript/src/components/MessageRenderer/MessageContainer.d.ts +3 -0
- package/lib/typescript/src/components/MessageRenderer/MessageDateSeparator.d.ts +8 -0
- package/lib/typescript/src/components/MessageRenderer/MessageIncomingAvatar.d.ts +8 -0
- package/lib/typescript/src/components/MessageRenderer/MessageIncomingSenderName.d.ts +8 -0
- package/lib/typescript/src/components/MessageRenderer/MessageOutgoingStatus.d.ts +8 -0
- package/lib/typescript/src/components/MessageRenderer/MessageTime.d.ts +10 -0
- package/lib/typescript/src/components/MessageRenderer/UnknownMessage/index.d.ts +5 -0
- package/lib/typescript/src/components/MessageRenderer/UserMessage/BaseUserMessage.d.ts +4 -0
- package/lib/typescript/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.d.ts +8 -0
- package/lib/typescript/src/components/MessageRenderer/UserMessage/index.d.ts +6 -0
- package/lib/typescript/src/components/MessageRenderer/index.d.ts +23 -0
- package/lib/typescript/src/components/NewMessagesButton.d.ts +9 -0
- package/lib/typescript/src/components/ProviderLayout.d.ts +3 -0
- package/lib/typescript/src/components/ScrollToBottomButton.d.ts +7 -0
- package/lib/typescript/src/components/StatusComposition.d.ts +10 -0
- package/lib/typescript/src/components/TypedPlaceholder.d.ts +7 -0
- package/lib/typescript/src/components/UserActionBar.d.ts +11 -0
- package/lib/typescript/src/components/UserSelectableBar.d.ts +9 -0
- package/lib/typescript/src/constants.d.ts +1 -0
- package/lib/typescript/src/contexts/Localization.d.ts +12 -0
- package/lib/typescript/src/contexts/PlatformService.d.ts +10 -0
- package/lib/typescript/src/contexts/SendbirdChat.d.ts +24 -0
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelHeader.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/EditInput.d.ts +11 -0
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/SendInput.d.ts +9 -0
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/index.d.ts +9 -0
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +36 -0
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusEmpty.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelStatusLoading.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannel/index.d.ts +7 -0
- package/lib/typescript/src/domain/groupChannel/module/createGroupChannelModule.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannel/module/moduleContext.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannel/types.d.ts +102 -0
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListHeader.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListList.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusEmpty.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListStatusLoading.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelList/component/GroupChannelListTypeSelector.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelList/index.d.ts +7 -0
- package/lib/typescript/src/domain/groupChannelList/module/createGroupChannelListModule.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelList/module/moduleContext.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelList/types.d.ts +81 -0
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsHeader.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelSettings/index.d.ts +5 -0
- package/lib/typescript/src/domain/groupChannelSettings/module/createGroupChannelSettingsModule.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelSettings/module/moduleContext.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelSettings/types.d.ts +45 -0
- package/lib/typescript/src/domain/groupChannelUserList/types.d.ts +42 -0
- package/lib/typescript/src/domain/userList/component/UserListHeader.d.ts +10 -0
- package/lib/typescript/src/domain/userList/component/UserListList.d.ts +11 -0
- package/lib/typescript/src/domain/userList/component/UserListStatusEmpty.d.ts +3 -0
- package/lib/typescript/src/domain/userList/component/UserListStatusError.d.ts +3 -0
- package/lib/typescript/src/domain/userList/component/UserListStatusLoading.d.ts +3 -0
- package/lib/typescript/src/domain/userList/index.d.ts +7 -0
- package/lib/typescript/src/domain/userList/module/createUserListModule.d.ts +3 -0
- package/lib/typescript/src/domain/userList/module/moduleContext.d.ts +4 -0
- package/lib/typescript/src/domain/userList/types.d.ts +58 -0
- package/lib/typescript/src/fragments/createGroupChannelCreateFragment.d.ts +4 -0
- package/lib/typescript/src/fragments/createGroupChannelFragment.d.ts +3 -0
- package/lib/typescript/src/fragments/createGroupChannelInviteFragment.d.ts +4 -0
- package/lib/typescript/src/fragments/createGroupChannelListFragment.d.ts +3 -0
- package/lib/typescript/src/fragments/createGroupChannelMembersFragment.d.ts +5 -0
- package/lib/typescript/src/fragments/createGroupChannelSettingsFragment.d.ts +3 -0
- package/lib/typescript/src/hooks/useConnection.d.ts +11 -0
- package/lib/typescript/src/hooks/useContext.d.ts +22 -0
- package/lib/typescript/src/hooks/usePushTokenRegistration.d.ts +5 -0
- package/lib/typescript/src/index.d.ts +50 -0
- package/lib/typescript/src/localization/StringSet.en.d.ts +2 -0
- package/lib/typescript/src/localization/StringSet.type.d.ts +157 -0
- package/lib/typescript/src/platform/createClipboardService.expo.d.ts +4 -0
- package/lib/typescript/src/platform/createClipboardService.native.d.ts +4 -0
- package/lib/typescript/src/platform/createFileService.expo.d.ts +12 -0
- package/lib/typescript/src/platform/createFileService.native.d.ts +14 -0
- package/lib/typescript/src/platform/createNotificationService.expo.d.ts +4 -0
- package/lib/typescript/src/platform/createNotificationService.native.d.ts +8 -0
- package/lib/typescript/src/platform/dynamicModule.d.ts +23 -0
- package/lib/typescript/src/platform/types.d.ts +47 -0
- package/lib/typescript/src/types.d.ts +20 -0
- package/lib/typescript/src/utils/expoPermissionGranted.d.ts +13 -0
- package/lib/typescript/src/utils/fileTypeGuard.d.ts +4 -0
- package/lib/typescript/src/utils/nativePermissionGranted.d.ts +3 -0
- package/lib/typescript/src/version.d.ts +2 -0
- package/package.json +154 -0
- package/src/InternalErrorBoundary.tsx +52 -0
- package/src/InternalLocalCacheStorage.ts +45 -0
- package/src/SendbirdUIKitContainer.tsx +183 -0
- package/src/components/ChannelCover.tsx +44 -0
- package/src/components/ChatFlatList.tsx +96 -0
- package/src/components/MessageRenderer/AdminMessage/index.tsx +40 -0
- package/src/components/MessageRenderer/FileMessage/BaseFileMessage.tsx +48 -0
- package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +39 -0
- package/src/components/MessageRenderer/FileMessage/index.tsx +17 -0
- package/src/components/MessageRenderer/MessageContainer.tsx +17 -0
- package/src/components/MessageRenderer/MessageDateSeparator.tsx +43 -0
- package/src/components/MessageRenderer/MessageIncomingAvatar.tsx +24 -0
- package/src/components/MessageRenderer/MessageIncomingSenderName.tsx +33 -0
- package/src/components/MessageRenderer/MessageOutgoingStatus.tsx +88 -0
- package/src/components/MessageRenderer/MessageTime.tsx +24 -0
- package/src/components/MessageRenderer/UnknownMessage/index.tsx +34 -0
- package/src/components/MessageRenderer/UserMessage/BaseUserMessage.tsx +34 -0
- package/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.tsx +110 -0
- package/src/components/MessageRenderer/UserMessage/index.tsx +17 -0
- package/src/components/MessageRenderer/index.tsx +163 -0
- package/src/components/NewMessagesButton.tsx +52 -0
- package/src/components/ProviderLayout.tsx +17 -0
- package/src/components/ScrollToBottomButton.tsx +48 -0
- package/src/components/StatusComposition.tsx +16 -0
- package/src/components/TypedPlaceholder.tsx +48 -0
- package/src/components/UserActionBar.tsx +73 -0
- package/src/components/UserSelectableBar.tsx +58 -0
- package/src/constants.ts +1 -0
- package/src/contexts/Localization.tsx +17 -0
- package/src/contexts/PlatformService.tsx +23 -0
- package/src/contexts/SendbirdChat.tsx +110 -0
- package/src/domain/groupChannel/component/GroupChannelHeader.tsx +52 -0
- package/src/domain/groupChannel/component/GroupChannelInput/EditInput.tsx +92 -0
- package/src/domain/groupChannel/component/GroupChannelInput/SendInput.tsx +141 -0
- package/src/domain/groupChannel/component/GroupChannelInput/index.tsx +72 -0
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +308 -0
- package/src/domain/groupChannel/component/GroupChannelStatusEmpty.tsx +18 -0
- package/src/domain/groupChannel/component/GroupChannelStatusLoading.tsx +18 -0
- package/src/domain/groupChannel/index.ts +7 -0
- package/src/domain/groupChannel/module/createGroupChannelModule.tsx +21 -0
- package/src/domain/groupChannel/module/moduleContext.tsx +76 -0
- package/src/domain/groupChannel/types.ts +125 -0
- package/src/domain/groupChannelList/component/GroupChannelListHeader.tsx +20 -0
- package/src/domain/groupChannelList/component/GroupChannelListList.tsx +75 -0
- package/src/domain/groupChannelList/component/GroupChannelListStatusEmpty.tsx +18 -0
- package/src/domain/groupChannelList/component/GroupChannelListStatusLoading.tsx +18 -0
- package/src/domain/groupChannelList/component/GroupChannelListTypeSelector.tsx +114 -0
- package/src/domain/groupChannelList/index.ts +7 -0
- package/src/domain/groupChannelList/module/createGroupChannelListModule.tsx +21 -0
- package/src/domain/groupChannelList/module/moduleContext.tsx +40 -0
- package/src/domain/groupChannelList/types.ts +92 -0
- package/src/domain/groupChannelSettings/component/GroupChannelSettingsHeader.tsx +29 -0
- package/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.tsx +47 -0
- package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +77 -0
- package/src/domain/groupChannelSettings/index.ts +5 -0
- package/src/domain/groupChannelSettings/module/createGroupChannelSettingsModule.tsx +17 -0
- package/src/domain/groupChannelSettings/module/moduleContext.tsx +146 -0
- package/src/domain/groupChannelSettings/types.ts +50 -0
- package/src/domain/groupChannelUserList/types.ts +50 -0
- package/src/domain/userList/component/UserListHeader.tsx +39 -0
- package/src/domain/userList/component/UserListList.tsx +36 -0
- package/src/domain/userList/component/UserListStatusEmpty.tsx +18 -0
- package/src/domain/userList/component/UserListStatusError.tsx +19 -0
- package/src/domain/userList/component/UserListStatusLoading.tsx +18 -0
- package/src/domain/userList/index.ts +7 -0
- package/src/domain/userList/module/createUserListModule.tsx +21 -0
- package/src/domain/userList/module/moduleContext.tsx +36 -0
- package/src/domain/userList/types.ts +65 -0
- package/src/fragments/createGroupChannelCreateFragment.tsx +136 -0
- package/src/fragments/createGroupChannelFragment.tsx +153 -0
- package/src/fragments/createGroupChannelInviteFragment.tsx +127 -0
- package/src/fragments/createGroupChannelListFragment.tsx +113 -0
- package/src/fragments/createGroupChannelMembersFragment.tsx +112 -0
- package/src/fragments/createGroupChannelSettingsFragment.tsx +56 -0
- package/src/hooks/useConnection.ts +82 -0
- package/src/hooks/useContext.ts +25 -0
- package/src/hooks/usePushTokenRegistration.ts +64 -0
- package/src/index.ts +104 -0
- package/src/localization/StringSet.en.ts +7 -0
- package/src/localization/StringSet.type.ts +334 -0
- package/src/platform/createClipboardService.expo.ts +16 -0
- package/src/platform/createClipboardService.native.ts +16 -0
- package/src/platform/createFileService.expo.ts +142 -0
- package/src/platform/createFileService.native.ts +191 -0
- package/src/platform/createNotificationService.expo.ts +36 -0
- package/src/platform/createNotificationService.native.ts +60 -0
- package/src/platform/dynamicModule.ts +110 -0
- package/src/platform/types.ts +51 -0
- package/src/types.ts +18 -0
- package/src/utils/expoPermissionGranted.ts +39 -0
- package/src/utils/fileTypeGuard.ts +10 -0
- package/src/utils/nativePermissionGranted.ts +14 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
4
|
+
import { getAvailableUriFromFileMessage } from '@sendbird/uikit-utils';
|
|
5
|
+
|
|
6
|
+
import type { FileMessageProps } from './index';
|
|
7
|
+
|
|
8
|
+
const ImageFileMessage: React.FC<FileMessageProps> = ({ message }) => {
|
|
9
|
+
const { colors } = useUIKitTheme();
|
|
10
|
+
const [imageNotFound, setImageNotFound] = useState(false);
|
|
11
|
+
|
|
12
|
+
const fileUrl = getAvailableUriFromFileMessage(message);
|
|
13
|
+
const style = [styles.image, { backgroundColor: colors.onBackground04 }];
|
|
14
|
+
|
|
15
|
+
if (imageNotFound) {
|
|
16
|
+
return <Icon containerStyle={style} icon={'thumbnail-none'} size={48} color={colors.onBackground02} />;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<Image
|
|
21
|
+
source={{ uri: fileUrl }}
|
|
22
|
+
style={style}
|
|
23
|
+
resizeMode={'cover'}
|
|
24
|
+
resizeMethod={'resize'}
|
|
25
|
+
onError={() => setImageNotFound(true)}
|
|
26
|
+
/>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const styles = createStyleSheet({
|
|
31
|
+
image: {
|
|
32
|
+
width: 240,
|
|
33
|
+
maxWidth: 240,
|
|
34
|
+
height: 160,
|
|
35
|
+
borderRadius: 16,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
export default ImageFileMessage;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import { SendbirdFileMessage, getFileExtension, getFileType } from '@sendbird/uikit-utils';
|
|
4
|
+
|
|
5
|
+
import type { MessageRendererInterface } from '../index';
|
|
6
|
+
import BaseFileMessage from './BaseFileMessage';
|
|
7
|
+
import ImageFileMessage from './ImageFileMessage';
|
|
8
|
+
|
|
9
|
+
export type FileMessageProps = MessageRendererInterface<SendbirdFileMessage>;
|
|
10
|
+
const FileMessage: React.FC<FileMessageProps> = (props) => {
|
|
11
|
+
const fileType = getFileType(props.message.type || getFileExtension(props.message.name));
|
|
12
|
+
|
|
13
|
+
if (fileType === 'image') return <ImageFileMessage {...props} />;
|
|
14
|
+
return <BaseFileMessage {...props} type={fileType} />;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default React.memo(FileMessage);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { createStyleSheet } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
|
|
6
|
+
const MessageContainer: React.FC = ({ children }) => {
|
|
7
|
+
return <View style={styles.container}>{children}</View>;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const styles = createStyleSheet({
|
|
11
|
+
container: {
|
|
12
|
+
flexDirection: 'column',
|
|
13
|
+
paddingHorizontal: 16,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export default MessageContainer;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import isSameDay from 'date-fns/isSameDay';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { View } from 'react-native';
|
|
4
|
+
|
|
5
|
+
import { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
|
+
import type { SendbirdMessage } from '@sendbird/uikit-utils';
|
|
7
|
+
|
|
8
|
+
import { useLocalization } from '../../hooks/useContext';
|
|
9
|
+
|
|
10
|
+
type Props = {
|
|
11
|
+
message: SendbirdMessage;
|
|
12
|
+
prevMessage?: SendbirdMessage;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const MessageDateSeparator: React.FC<Props> = ({ message, prevMessage }) => {
|
|
16
|
+
const { STRINGS } = useLocalization();
|
|
17
|
+
const { colors } = useUIKitTheme();
|
|
18
|
+
const sameDay = isSameDay(message.createdAt, prevMessage?.createdAt ?? 0);
|
|
19
|
+
if (sameDay) return null;
|
|
20
|
+
return (
|
|
21
|
+
<View style={styles.container}>
|
|
22
|
+
<View style={[styles.view, { backgroundColor: colors.ui.dateSeparator.default.none.background }]}>
|
|
23
|
+
<Text caption1 color={colors.ui.dateSeparator.default.none.text}>
|
|
24
|
+
{STRINGS.GROUP_CHANNEL.LIST_DATE_SEPARATOR(new Date(message.createdAt))}
|
|
25
|
+
</Text>
|
|
26
|
+
</View>
|
|
27
|
+
</View>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const styles = createStyleSheet({
|
|
32
|
+
container: {
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
marginVertical: 16,
|
|
35
|
+
},
|
|
36
|
+
view: {
|
|
37
|
+
borderRadius: 10,
|
|
38
|
+
paddingVertical: 4,
|
|
39
|
+
paddingHorizontal: 10,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export default MessageDateSeparator;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { Avatar, createStyleSheet } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
import type { SendbirdMessage } from '@sendbird/uikit-utils';
|
|
6
|
+
|
|
7
|
+
type Props = { message: SendbirdMessage; grouping: boolean };
|
|
8
|
+
const MessageIncomingAvatar: React.FC<Props> = ({ message, grouping }) => {
|
|
9
|
+
if (grouping) return <View style={styles.avatar} />;
|
|
10
|
+
return (
|
|
11
|
+
<View style={styles.avatar}>
|
|
12
|
+
{(message.isFileMessage() || message.isUserMessage()) && <Avatar size={26} uri={message.sender?.profileUrl} />}
|
|
13
|
+
</View>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const styles = createStyleSheet({
|
|
18
|
+
avatar: {
|
|
19
|
+
width: 26,
|
|
20
|
+
marginRight: 12,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export default MessageIncomingAvatar;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
import type { SendbirdMessage } from '@sendbird/uikit-utils';
|
|
6
|
+
|
|
7
|
+
import { useLocalization } from '../../hooks/useContext';
|
|
8
|
+
|
|
9
|
+
type Props = { message: SendbirdMessage; grouping: boolean };
|
|
10
|
+
const MessageIncomingSenderName: React.FC<Props> = ({ message, grouping }) => {
|
|
11
|
+
const { colors } = useUIKitTheme();
|
|
12
|
+
const { STRINGS } = useLocalization();
|
|
13
|
+
if (grouping) return null;
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<View style={styles.sender}>
|
|
17
|
+
{(message.isFileMessage() || message.isUserMessage()) && (
|
|
18
|
+
<Text caption1 color={colors.ui.message.incoming.enabled.textSenderName}>
|
|
19
|
+
{message.sender?.nickname || STRINGS.LABELS.USER_NO_NAME}
|
|
20
|
+
</Text>
|
|
21
|
+
)}
|
|
22
|
+
</View>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const styles = createStyleSheet({
|
|
27
|
+
sender: {
|
|
28
|
+
marginLeft: 12,
|
|
29
|
+
marginBottom: 4,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export default MessageIncomingSenderName;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Icon, LoadingSpinner, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
4
|
+
import type {
|
|
5
|
+
SendbirdFileMessage,
|
|
6
|
+
SendbirdGroupChannel,
|
|
7
|
+
SendbirdMessage,
|
|
8
|
+
SendbirdUserMessage,
|
|
9
|
+
} from '@sendbird/uikit-utils';
|
|
10
|
+
import { useUniqId } from '@sendbird/uikit-utils';
|
|
11
|
+
|
|
12
|
+
import { useSendbirdChat } from '../../hooks/useContext';
|
|
13
|
+
|
|
14
|
+
const SIZE = 16;
|
|
15
|
+
|
|
16
|
+
type Props = { channel: SendbirdGroupChannel; message: SendbirdMessage };
|
|
17
|
+
const MessageOutgoingStatus: React.FC<Props> = ({ channel, message }) => {
|
|
18
|
+
if (!message.isUserMessage() && !message.isFileMessage()) return null;
|
|
19
|
+
|
|
20
|
+
const handlerId = useUniqId('MessageOutgoingStatus');
|
|
21
|
+
|
|
22
|
+
const { sdk, features } = useSendbirdChat();
|
|
23
|
+
const { colors } = useUIKitTheme();
|
|
24
|
+
|
|
25
|
+
const [state, setState] = useState(() => ({
|
|
26
|
+
unreadCount: channel.getUnreadMemberCount(message),
|
|
27
|
+
undeliveredCount: channel.getUndeliveredMemberCount(message),
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
const getCounts = (channel: SendbirdGroupChannel, message: SendbirdUserMessage | SendbirdFileMessage) => {
|
|
31
|
+
return {
|
|
32
|
+
unreadCount: channel.getUnreadMemberCount(message),
|
|
33
|
+
undeliveredCount: channel.getUndeliveredMemberCount(message),
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const id = String(handlerId);
|
|
39
|
+
if (message.sendingStatus === 'succeeded' && state.unreadCount === 0 && state.undeliveredCount === 0) {
|
|
40
|
+
sdk.removeChannelHandler(id);
|
|
41
|
+
} else {
|
|
42
|
+
const handler = new sdk.ChannelHandler();
|
|
43
|
+
handler.onReadReceiptUpdated = (channel) => {
|
|
44
|
+
if (channel.url === message.channelUrl) setState(getCounts(channel, message));
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
if (features.deliveryReceiptEnabled) {
|
|
48
|
+
handler.onDeliveryReceiptUpdated = (channel) => {
|
|
49
|
+
if (channel.url === message.channelUrl && channel.isGroupChannel()) setState(getCounts(channel, message));
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
sdk.addChannelHandler(id, handler);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return () => {
|
|
56
|
+
sdk.removeChannelHandler(id);
|
|
57
|
+
};
|
|
58
|
+
}, [message.sendingStatus]);
|
|
59
|
+
|
|
60
|
+
if (message.sendingStatus === 'pending') {
|
|
61
|
+
return <LoadingSpinner size={SIZE} style={styles.container} />;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (message.sendingStatus === 'failed') {
|
|
65
|
+
return <Icon icon={'error'} size={SIZE} color={colors.error} style={styles.container} />;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (state.unreadCount === 0) {
|
|
69
|
+
return <Icon icon={'done-all'} size={SIZE} color={colors.secondary} style={styles.container} />;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (features.deliveryReceiptEnabled) {
|
|
73
|
+
if (state.undeliveredCount === 0) {
|
|
74
|
+
return <Icon icon={'done-all'} size={SIZE} color={colors.onBackground03} style={styles.container} />;
|
|
75
|
+
}
|
|
76
|
+
return <Icon icon={'done'} size={SIZE} color={colors.onBackground03} style={styles.container} />;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return <Icon icon={'done-all'} size={SIZE} color={colors.onBackground03} style={styles.container} />;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const styles = createStyleSheet({
|
|
83
|
+
container: {
|
|
84
|
+
marginRight: 4,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
export default React.memo(MessageOutgoingStatus);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleProp, View, ViewStyle } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { Text, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
import type { SendbirdMessage } from '@sendbird/uikit-utils';
|
|
6
|
+
|
|
7
|
+
import { useLocalization } from '../../hooks/useContext';
|
|
8
|
+
|
|
9
|
+
type Props = { message: SendbirdMessage; grouping: boolean; style?: StyleProp<ViewStyle> };
|
|
10
|
+
const MessageTime: React.FC<Props> = ({ message, grouping, style }) => {
|
|
11
|
+
const { STRINGS } = useLocalization();
|
|
12
|
+
const { colors } = useUIKitTheme();
|
|
13
|
+
if (grouping) return null;
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<View style={style}>
|
|
17
|
+
<Text caption4 color={colors.ui.message.incoming.enabled.textTime}>
|
|
18
|
+
{STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_TIME(message)}
|
|
19
|
+
</Text>
|
|
20
|
+
</View>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default MessageTime;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
|
|
6
|
+
import { useLocalization } from '../../../hooks/useContext';
|
|
7
|
+
import type { MessageRendererInterface } from '../index';
|
|
8
|
+
|
|
9
|
+
export type UnknownMessageProps = MessageRendererInterface;
|
|
10
|
+
const UnknownMessage: React.FC<UnknownMessageProps> = ({ message, variant, pressed }) => {
|
|
11
|
+
const { STRINGS } = useLocalization();
|
|
12
|
+
const { colors } = useUIKitTheme();
|
|
13
|
+
const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];
|
|
14
|
+
return (
|
|
15
|
+
<View style={[styles.container, { backgroundColor: color.background }]}>
|
|
16
|
+
<Text body3 color={colors.onBackground01}>
|
|
17
|
+
{STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message)}
|
|
18
|
+
</Text>
|
|
19
|
+
<Text body3 color={colors.onBackground02}>
|
|
20
|
+
{STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message)}
|
|
21
|
+
</Text>
|
|
22
|
+
</View>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const styles = createStyleSheet({
|
|
27
|
+
container: {
|
|
28
|
+
paddingHorizontal: 12,
|
|
29
|
+
paddingVertical: 6,
|
|
30
|
+
borderRadius: 16,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
export default UnknownMessage;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { Text, URLParsedText, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
|
|
6
|
+
import { useLocalization } from '../../../hooks/useContext';
|
|
7
|
+
import type { UserMessageProps } from './index';
|
|
8
|
+
|
|
9
|
+
const BaseUserMessage: React.FC<UserMessageProps> = ({ message, variant, pressed }) => {
|
|
10
|
+
const { colors } = useUIKitTheme();
|
|
11
|
+
const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];
|
|
12
|
+
const { STRINGS } = useLocalization();
|
|
13
|
+
return (
|
|
14
|
+
<View style={[styles.container, { backgroundColor: color.background }]}>
|
|
15
|
+
<URLParsedText body3 strict color={color.textMsg}>
|
|
16
|
+
{message.message}
|
|
17
|
+
{Boolean(message.updatedAt) && (
|
|
18
|
+
<Text body3 color={color.textEdited}>
|
|
19
|
+
{STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX}
|
|
20
|
+
</Text>
|
|
21
|
+
)}
|
|
22
|
+
</URLParsedText>
|
|
23
|
+
</View>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
26
|
+
const styles = createStyleSheet({
|
|
27
|
+
container: {
|
|
28
|
+
paddingHorizontal: 12,
|
|
29
|
+
paddingVertical: 6,
|
|
30
|
+
borderRadius: 16,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
export default BaseUserMessage;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Linking, TouchableOpacity, View } from 'react-native';
|
|
3
|
+
import type Sendbird from 'sendbird';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
Icon,
|
|
7
|
+
Image,
|
|
8
|
+
Text,
|
|
9
|
+
URLParsedText,
|
|
10
|
+
createStyleSheet,
|
|
11
|
+
useUIKitTheme,
|
|
12
|
+
} from '@sendbird/uikit-react-native-foundation';
|
|
13
|
+
import { conditionChaining } from '@sendbird/uikit-utils';
|
|
14
|
+
|
|
15
|
+
import { useLocalization } from '../../../hooks/useContext';
|
|
16
|
+
import type { UserMessageProps } from './index';
|
|
17
|
+
|
|
18
|
+
type Props = UserMessageProps & { ogMetaData: Sendbird.OGMetaData };
|
|
19
|
+
const OpenGraphUserMessage: React.FC<Props> = ({ message, variant, pressed, ogMetaData }) => {
|
|
20
|
+
const { STRINGS } = useLocalization();
|
|
21
|
+
const { colors, select, palette } = useUIKitTheme();
|
|
22
|
+
const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];
|
|
23
|
+
const [imageNotFound, setImageNotFound] = useState(false);
|
|
24
|
+
return (
|
|
25
|
+
<View style={[styles.container, { backgroundColor: color.background }]}>
|
|
26
|
+
<View style={styles.messageContainer}>
|
|
27
|
+
<URLParsedText body3 color={color.textMsg}>
|
|
28
|
+
{message.message}
|
|
29
|
+
{Boolean(message.updatedAt) && (
|
|
30
|
+
<Text body3 color={color.textEdited}>
|
|
31
|
+
{STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX}
|
|
32
|
+
</Text>
|
|
33
|
+
)}
|
|
34
|
+
</URLParsedText>
|
|
35
|
+
</View>
|
|
36
|
+
<TouchableOpacity activeOpacity={0.7} onPress={() => Linking.openURL(ogMetaData.url).catch()}>
|
|
37
|
+
<View
|
|
38
|
+
style={[
|
|
39
|
+
styles.ogImageContainer,
|
|
40
|
+
{ backgroundColor: select({ dark: palette.background500, light: palette.background200 }) },
|
|
41
|
+
]}
|
|
42
|
+
>
|
|
43
|
+
{conditionChaining(
|
|
44
|
+
[imageNotFound],
|
|
45
|
+
[
|
|
46
|
+
<Icon containerStyle={styles.ogImage} icon={'thumbnail-none'} size={48} color={colors.onBackground02} />,
|
|
47
|
+
<Image
|
|
48
|
+
source={{ uri: ogMetaData.defaultImage?.url }}
|
|
49
|
+
style={styles.ogImage}
|
|
50
|
+
resizeMode={'cover'}
|
|
51
|
+
onError={() => setImageNotFound(true)}
|
|
52
|
+
/>,
|
|
53
|
+
],
|
|
54
|
+
)}
|
|
55
|
+
</View>
|
|
56
|
+
<View
|
|
57
|
+
style={[
|
|
58
|
+
styles.ogContainer,
|
|
59
|
+
{ backgroundColor: select({ dark: palette.background400, light: palette.background100 }) },
|
|
60
|
+
]}
|
|
61
|
+
>
|
|
62
|
+
<Text numberOfLines={3} body2 color={colors.onBackground01} style={styles.ogTitle}>
|
|
63
|
+
{ogMetaData.title}
|
|
64
|
+
</Text>
|
|
65
|
+
{Boolean(ogMetaData.description) && (
|
|
66
|
+
<Text numberOfLines={1} caption2 color={colors.onBackground01} style={styles.ogDesc}>
|
|
67
|
+
{ogMetaData.description}
|
|
68
|
+
</Text>
|
|
69
|
+
)}
|
|
70
|
+
<Text numberOfLines={1} caption2 color={colors.onBackground02}>
|
|
71
|
+
{ogMetaData.url}
|
|
72
|
+
</Text>
|
|
73
|
+
</View>
|
|
74
|
+
</TouchableOpacity>
|
|
75
|
+
</View>
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const styles = createStyleSheet({
|
|
80
|
+
container: {
|
|
81
|
+
borderRadius: 16,
|
|
82
|
+
overflow: 'hidden',
|
|
83
|
+
},
|
|
84
|
+
messageContainer: {
|
|
85
|
+
paddingVertical: 6,
|
|
86
|
+
paddingHorizontal: 12,
|
|
87
|
+
},
|
|
88
|
+
ogContainer: {
|
|
89
|
+
paddingHorizontal: 12,
|
|
90
|
+
paddingTop: 8,
|
|
91
|
+
paddingBottom: 12,
|
|
92
|
+
},
|
|
93
|
+
ogImageContainer: {
|
|
94
|
+
width: 240,
|
|
95
|
+
height: 136,
|
|
96
|
+
},
|
|
97
|
+
ogImage: {
|
|
98
|
+
width: '100%',
|
|
99
|
+
height: '100%',
|
|
100
|
+
},
|
|
101
|
+
ogTitle: {
|
|
102
|
+
marginBottom: 4,
|
|
103
|
+
},
|
|
104
|
+
ogDesc: {
|
|
105
|
+
lineHeight: 14,
|
|
106
|
+
marginBottom: 8,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
export default OpenGraphUserMessage;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import type { SendbirdUserMessage } from '@sendbird/uikit-utils';
|
|
4
|
+
|
|
5
|
+
import type { MessageRendererInterface } from '../index';
|
|
6
|
+
import BaseUserMessage from './BaseUserMessage';
|
|
7
|
+
import OpenGraphUserMessage from './OpenGraphUserMessage';
|
|
8
|
+
|
|
9
|
+
export type UserMessageProps = MessageRendererInterface<SendbirdUserMessage>;
|
|
10
|
+
const UserMessage: React.FC<UserMessageProps> = (props) => {
|
|
11
|
+
if (props.message.ogMetaData) {
|
|
12
|
+
return <OpenGraphUserMessage {...props} ogMetaData={props.message.ogMetaData} />;
|
|
13
|
+
}
|
|
14
|
+
return <BaseUserMessage {...props} />;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default React.memo(UserMessage);
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Pressable, View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { createStyleSheet } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
import type { SendbirdMessage } from '@sendbird/uikit-utils';
|
|
6
|
+
import { calcMessageGrouping, conditionChaining, isMyMessage, useIIFE } from '@sendbird/uikit-utils';
|
|
7
|
+
|
|
8
|
+
import { DEFAULT_LONG_PRESS_DELAY } from '../../constants';
|
|
9
|
+
import type { GroupChannelProps } from '../../domain/groupChannel/types';
|
|
10
|
+
import AdminMessage from './AdminMessage';
|
|
11
|
+
import FileMessage from './FileMessage';
|
|
12
|
+
import MessageContainer from './MessageContainer';
|
|
13
|
+
import MessageDateSeparator from './MessageDateSeparator';
|
|
14
|
+
import MessageIncomingAvatar from './MessageIncomingAvatar';
|
|
15
|
+
import MessageIncomingSenderName from './MessageIncomingSenderName';
|
|
16
|
+
import MessageOutgoingStatus from './MessageOutgoingStatus';
|
|
17
|
+
import MessageTime from './MessageTime';
|
|
18
|
+
import UnknownMessage from './UnknownMessage';
|
|
19
|
+
import UserMessage from './UserMessage';
|
|
20
|
+
|
|
21
|
+
type MessageStyleVariant = 'outgoing' | 'incoming';
|
|
22
|
+
export interface MessageRendererInterface<T = SendbirdMessage> {
|
|
23
|
+
message: T;
|
|
24
|
+
prevMessage?: SendbirdMessage;
|
|
25
|
+
nextMessage?: SendbirdMessage;
|
|
26
|
+
variant: MessageStyleVariant;
|
|
27
|
+
groupWithPrev: boolean;
|
|
28
|
+
groupWithNext: boolean;
|
|
29
|
+
pressed: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const MessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({
|
|
33
|
+
currentUserId,
|
|
34
|
+
channel,
|
|
35
|
+
message,
|
|
36
|
+
onPress,
|
|
37
|
+
onLongPress,
|
|
38
|
+
...rest
|
|
39
|
+
}) => {
|
|
40
|
+
const variant: MessageStyleVariant = isMyMessage(message, currentUserId) ? 'outgoing' : 'incoming';
|
|
41
|
+
const isOutgoing = variant === 'outgoing';
|
|
42
|
+
const isIncoming = variant === 'incoming';
|
|
43
|
+
const variantContainerStyle = { incoming: styles.chatIncoming, outgoing: styles.chatOutgoing }[variant];
|
|
44
|
+
|
|
45
|
+
const { groupWithPrev, groupWithNext } = calcMessageGrouping(
|
|
46
|
+
Boolean(rest.enableMessageGrouping),
|
|
47
|
+
message,
|
|
48
|
+
rest.prevMessage,
|
|
49
|
+
rest.nextMessage,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const messageComponent = useIIFE(() => {
|
|
53
|
+
const pressableProps = {
|
|
54
|
+
style: styles.msgContainer,
|
|
55
|
+
disabled: !onPress && !onLongPress,
|
|
56
|
+
onPress,
|
|
57
|
+
onLongPress,
|
|
58
|
+
delayLongPress: DEFAULT_LONG_PRESS_DELAY,
|
|
59
|
+
};
|
|
60
|
+
const messageProps = { ...rest, variant, groupWithNext, groupWithPrev };
|
|
61
|
+
|
|
62
|
+
if (message.isUserMessage()) {
|
|
63
|
+
return (
|
|
64
|
+
<Pressable {...pressableProps}>
|
|
65
|
+
{({ pressed }) => <UserMessage message={message} pressed={pressed} {...messageProps} />}
|
|
66
|
+
</Pressable>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (message.isFileMessage()) {
|
|
71
|
+
return (
|
|
72
|
+
<Pressable {...pressableProps}>
|
|
73
|
+
{({ pressed }) => <FileMessage message={message} pressed={pressed} {...messageProps} />}
|
|
74
|
+
</Pressable>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (message.isAdminMessage()) {
|
|
79
|
+
return <AdminMessage message={message} pressed={false} {...messageProps} />;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<Pressable {...pressableProps}>
|
|
84
|
+
{({ pressed }) => <UnknownMessage message={message} pressed={pressed} {...messageProps} />}
|
|
85
|
+
</Pressable>
|
|
86
|
+
);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<MessageContainer>
|
|
91
|
+
<MessageDateSeparator message={message} prevMessage={rest.prevMessage} />
|
|
92
|
+
{message.isAdminMessage() && messageComponent}
|
|
93
|
+
{!message.isAdminMessage() && (
|
|
94
|
+
<View
|
|
95
|
+
style={[
|
|
96
|
+
variantContainerStyle,
|
|
97
|
+
conditionChaining(
|
|
98
|
+
[groupWithNext, Boolean(rest.nextMessage)],
|
|
99
|
+
[styles.chatGroup, styles.chatNonGroup, styles.chatLastMessage],
|
|
100
|
+
),
|
|
101
|
+
]}
|
|
102
|
+
>
|
|
103
|
+
{isOutgoing && (
|
|
104
|
+
<View style={styles.outgoingContainer}>
|
|
105
|
+
<MessageOutgoingStatus channel={channel} message={message} />
|
|
106
|
+
<MessageTime message={message} grouping={groupWithNext} style={styles.timeOutgoing} />
|
|
107
|
+
</View>
|
|
108
|
+
)}
|
|
109
|
+
{isIncoming && <MessageIncomingAvatar message={message} grouping={groupWithNext} />}
|
|
110
|
+
<View>
|
|
111
|
+
{isIncoming && <MessageIncomingSenderName message={message} grouping={groupWithPrev} />}
|
|
112
|
+
<View style={styles.bubbleContainer}>
|
|
113
|
+
{messageComponent}
|
|
114
|
+
{isIncoming && <MessageTime message={message} grouping={groupWithNext} style={styles.timeIncoming} />}
|
|
115
|
+
</View>
|
|
116
|
+
</View>
|
|
117
|
+
</View>
|
|
118
|
+
)}
|
|
119
|
+
</MessageContainer>
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const styles = createStyleSheet({
|
|
124
|
+
chatIncoming: {
|
|
125
|
+
flexDirection: 'row',
|
|
126
|
+
justifyContent: 'flex-start',
|
|
127
|
+
alignItems: 'flex-end',
|
|
128
|
+
},
|
|
129
|
+
chatOutgoing: {
|
|
130
|
+
flexDirection: 'row',
|
|
131
|
+
justifyContent: 'flex-end',
|
|
132
|
+
alignItems: 'flex-end',
|
|
133
|
+
},
|
|
134
|
+
timeIncoming: {
|
|
135
|
+
marginLeft: 4,
|
|
136
|
+
},
|
|
137
|
+
timeOutgoing: {
|
|
138
|
+
marginRight: 4,
|
|
139
|
+
},
|
|
140
|
+
chatGroup: {
|
|
141
|
+
marginBottom: 2,
|
|
142
|
+
},
|
|
143
|
+
chatNonGroup: {
|
|
144
|
+
marginBottom: 16,
|
|
145
|
+
},
|
|
146
|
+
chatLastMessage: {
|
|
147
|
+
marginBottom: 16,
|
|
148
|
+
},
|
|
149
|
+
msgContainer: {
|
|
150
|
+
maxWidth: 240,
|
|
151
|
+
},
|
|
152
|
+
bubbleContainer: {
|
|
153
|
+
flexDirection: 'row',
|
|
154
|
+
alignItems: 'flex-end',
|
|
155
|
+
},
|
|
156
|
+
outgoingContainer: {
|
|
157
|
+
flexDirection: 'row',
|
|
158
|
+
alignItems: 'center',
|
|
159
|
+
justifyContent: 'center',
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
export default React.memo(MessageRenderer);
|