@sendbird/uikit-react-native 1.1.0 → 1.1.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/lib/commonjs/components/FileViewer.js +3 -10
- package/lib/commonjs/components/FileViewer.js.map +1 -1
- package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js +20 -56
- package/lib/commonjs/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -1
- package/lib/commonjs/{components → containers}/GroupChannelPreviewContainer.js +30 -53
- package/lib/commonjs/containers/GroupChannelPreviewContainer.js.map +1 -0
- package/lib/commonjs/{InternalErrorBoundary.js → containers/InternalErrorBoundaryContainer.js} +5 -5
- package/lib/commonjs/containers/InternalErrorBoundaryContainer.js.map +1 -0
- package/lib/commonjs/{SendbirdUIKitContainer.js → containers/SendbirdUIKitContainer.js} +10 -10
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -0
- package/lib/commonjs/domain/groupChannelList/types.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelListFragment.js +5 -5
- package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/{InternalLocalCacheStorage.js → libs/InternalLocalCacheStorage.js} +0 -0
- package/lib/commonjs/libs/InternalLocalCacheStorage.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/FileViewer.js +4 -8
- package/lib/module/components/FileViewer.js.map +1 -1
- package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js +17 -51
- package/lib/module/components/MessageRenderer/MessageOutgoingStatus.js.map +1 -1
- package/lib/module/{components → containers}/GroupChannelPreviewContainer.js +28 -51
- package/lib/module/containers/GroupChannelPreviewContainer.js.map +1 -0
- package/lib/module/{InternalErrorBoundary.js → containers/InternalErrorBoundaryContainer.js} +5 -5
- package/lib/module/containers/InternalErrorBoundaryContainer.js.map +1 -0
- package/lib/module/{SendbirdUIKitContainer.js → containers/SendbirdUIKitContainer.js} +10 -10
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -0
- package/lib/module/domain/groupChannelList/types.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelListFragment.js +5 -5
- package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/{InternalLocalCacheStorage.js → libs/InternalLocalCacheStorage.js} +0 -0
- package/lib/module/libs/InternalLocalCacheStorage.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/{components → containers}/GroupChannelPreviewContainer.d.ts +0 -0
- package/lib/typescript/src/{InternalErrorBoundary.d.ts → containers/InternalErrorBoundaryContainer.d.ts} +3 -3
- package/lib/typescript/src/{SendbirdUIKitContainer.d.ts → containers/SendbirdUIKitContainer.d.ts} +4 -4
- package/lib/typescript/src/domain/groupChannelList/types.d.ts +2 -2
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/{InternalLocalCacheStorage.d.ts → libs/InternalLocalCacheStorage.d.ts} +2 -2
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +5 -5
- package/src/components/FileViewer.tsx +7 -8
- package/src/components/MessageRenderer/MessageOutgoingStatus.tsx +13 -46
- package/src/{components → containers}/GroupChannelPreviewContainer.tsx +20 -37
- package/src/{InternalErrorBoundary.tsx → containers/InternalErrorBoundaryContainer.tsx} +4 -4
- package/src/{SendbirdUIKitContainer.tsx → containers/SendbirdUIKitContainer.tsx} +13 -13
- package/src/domain/groupChannelList/types.ts +2 -2
- package/src/fragments/createGroupChannelFragment.tsx +1 -1
- package/src/fragments/createGroupChannelListFragment.tsx +5 -5
- package/src/index.ts +1 -1
- package/src/{InternalLocalCacheStorage.ts → libs/InternalLocalCacheStorage.ts} +1 -1
- package/src/version.ts +1 -1
- package/lib/commonjs/InternalErrorBoundary.js.map +0 -1
- package/lib/commonjs/InternalLocalCacheStorage.js.map +0 -1
- package/lib/commonjs/SendbirdUIKitContainer.js.map +0 -1
- package/lib/commonjs/components/GroupChannelPreviewContainer.js.map +0 -1
- package/lib/commonjs/components/SBUPressable.js +0 -45
- package/lib/commonjs/components/SBUPressable.js.map +0 -1
- package/lib/module/InternalErrorBoundary.js.map +0 -1
- package/lib/module/InternalLocalCacheStorage.js.map +0 -1
- package/lib/module/SendbirdUIKitContainer.js.map +0 -1
- package/lib/module/components/GroupChannelPreviewContainer.js.map +0 -1
- package/lib/module/components/SBUPressable.js +0 -33
- package/lib/module/components/SBUPressable.js.map +0 -1
- package/lib/typescript/src/components/SBUPressable.d.ts +0 -18
- package/src/components/SBUPressable.tsx +0 -40
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createGroupChannelFragment","initModule","GroupChannelModule","createGroupChannelModule","renderNewMessagesButton","props","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","NOOP","onPressHeaderRight","onPressImageMessage","onPressMediaMessage","onChannelDeleted","onBeforeSendFileMessage","PASS","onBeforeSendUserMessage","channel","keyboardAvoidOffset","queryCreator","collectionCreator","sortComparator","messageComparator","flatListProps","sdk","currentUser","useSendbirdChat","activeChannel","messages","nextMessages","newMessagesFromMembers","next","prev","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","loading","useGroupChannelMessages","userId","enableCollectionWithoutLocalCache","_renderMessage","useFreshCallback","memoizedFlatListProps","useMemo","ListEmptyComponent","contentContainerStyle","flexGrow","onSendFileMessage","file","params","FileMessageParams","processedParams","onSendUserMessage","text","UserMessageParams","message","onUpdateFileMessage","editedFile","messageId","onUpdateUserMessage","editedText"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport { NOOP, PASS, messageComparator, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport MessageRenderer from '../components/MessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type { GroupChannelFragment, GroupChannelModule, GroupChannelProps } from '../domain/groupChannel/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n renderNewMessagesButton = (props) => <NewMessagesButton {...props} />,\n renderScrollToBottomButton = (props) => <ScrollToBottomButton {...props} />,\n renderMessage,\n enableMessageGrouping = true,\n enableTypingIndicator = true,\n onPressHeaderLeft = NOOP,\n onPressHeaderRight = NOOP,\n onPressImageMessage,\n onPressMediaMessage = NOOP,\n onChannelDeleted = NOOP,\n onBeforeSendFileMessage = PASS,\n onBeforeSendUserMessage = PASS,\n channel,\n keyboardAvoidOffset,\n queryCreator,\n collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n }) => {\n const { sdk, currentUser } = useSendbirdChat();\n\n const {\n activeChannel,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n loading,\n } = useGroupChannelMessages(sdk, channel, currentUser?.userId, {\n collectionCreator,\n queryCreator,\n sortComparator,\n onChannelDeleted,\n enableCollectionWithoutLocalCache: true,\n });\n\n const _renderMessage: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n if (renderMessage) return renderMessage(props);\n return <MessageRenderer {...props} />;\n });\n\n const memoizedFlatListProps = useMemo(\n () => ({\n ListEmptyComponent: <GroupChannelModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }),\n [loading, flatListProps],\n );\n\n const onSendFileMessage: GroupChannelProps['Input']['onSendFileMessage'] = useFreshCallback(async (file) => {\n const params = new sdk.FileMessageParams();\n params.file = file;\n const processedParams = await onBeforeSendFileMessage(params);\n await sendFileMessage(processedParams);\n });\n const onSendUserMessage: GroupChannelProps['Input']['onSendUserMessage'] = useFreshCallback(async (text) => {\n const params = new sdk.UserMessageParams();\n params.message = text;\n const processedParams = await onBeforeSendUserMessage(params);\n await sendUserMessage(processedParams);\n });\n const onUpdateFileMessage: GroupChannelProps['Input']['onUpdateFileMessage'] = useFreshCallback(\n async (editedFile, message) => {\n const params = new sdk.FileMessageParams();\n params.file = editedFile;\n const processedParams = await onBeforeSendFileMessage(params);\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n const onUpdateUserMessage: GroupChannelProps['Input']['onUpdateUserMessage'] = useFreshCallback(\n async (editedText, message) => {\n const params = new sdk.UserMessageParams();\n params.message = editedText;\n const processedParams = await onBeforeSendUserMessage(params);\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n\n return (\n <GroupChannelModule.Provider\n channel={activeChannel}\n enableTypingIndicator={enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n >\n <GroupChannelModule.Header onPressHeaderLeft={onPressHeaderLeft} onPressHeaderRight={onPressHeaderRight} />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelModule.StatusLoading />}>\n <GroupChannelModule.MessageList\n enableMessageGrouping={enableMessageGrouping}\n currentUserId={currentUser?.userId}\n channel={activeChannel}\n renderMessage={_renderMessage}\n messages={messages}\n nextMessages={nextMessages}\n newMessagesFromMembers={newMessagesFromMembers}\n onTopReached={prev}\n onBottomReached={next}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressImageMessage={onPressImageMessage}\n onPressMediaMessage={onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n channel={activeChannel}\n onSendFileMessage={onSendFileMessage}\n onSendUserMessage={onSendUserMessage}\n onUpdateFileMessage={onUpdateFileMessage}\n onUpdateUserMessage={onUpdateUserMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nexport default createGroupChannelFragment;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createGroupChannelFragment","initModule","GroupChannelModule","createGroupChannelModule","renderNewMessagesButton","props","renderScrollToBottomButton","renderMessage","enableMessageGrouping","enableTypingIndicator","onPressHeaderLeft","NOOP","onPressHeaderRight","onPressImageMessage","onPressMediaMessage","onChannelDeleted","onBeforeSendFileMessage","PASS","onBeforeSendUserMessage","channel","keyboardAvoidOffset","queryCreator","collectionCreator","sortComparator","messageComparator","flatListProps","sdk","currentUser","useSendbirdChat","activeChannel","messages","nextMessages","newMessagesFromMembers","next","prev","sendFileMessage","sendUserMessage","updateFileMessage","updateUserMessage","resendMessage","deleteMessage","loading","useGroupChannelMessages","userId","enableCollectionWithoutLocalCache","_renderMessage","useFreshCallback","memoizedFlatListProps","useMemo","ListEmptyComponent","contentContainerStyle","flexGrow","onSendFileMessage","file","params","FileMessageParams","processedParams","onSendUserMessage","text","UserMessageParams","message","onUpdateFileMessage","editedFile","messageId","onUpdateUserMessage","editedText"],"sources":["createGroupChannelFragment.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { useGroupChannelMessages } from '@sendbird/uikit-chat-hooks';\nimport { NOOP, PASS, messageComparator, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport MessageRenderer from '../components/MessageRenderer';\nimport NewMessagesButton from '../components/NewMessagesButton';\nimport ScrollToBottomButton from '../components/ScrollToBottomButton';\nimport StatusComposition from '../components/StatusComposition';\nimport createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';\nimport type { GroupChannelFragment, GroupChannelModule, GroupChannelProps } from '../domain/groupChannel/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelFragment = (initModule?: Partial<GroupChannelModule>): GroupChannelFragment => {\n const GroupChannelModule = createGroupChannelModule(initModule);\n\n return ({\n renderNewMessagesButton = (props) => <NewMessagesButton {...props} />,\n renderScrollToBottomButton = (props) => <ScrollToBottomButton {...props} />,\n renderMessage,\n enableMessageGrouping = true,\n enableTypingIndicator = true,\n onPressHeaderLeft = NOOP,\n onPressHeaderRight = NOOP,\n onPressImageMessage,\n onPressMediaMessage = NOOP,\n onChannelDeleted = NOOP,\n onBeforeSendFileMessage = PASS,\n onBeforeSendUserMessage = PASS,\n channel,\n keyboardAvoidOffset,\n queryCreator,\n collectionCreator,\n sortComparator = messageComparator,\n flatListProps,\n }) => {\n const { sdk, currentUser } = useSendbirdChat();\n\n const {\n activeChannel,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendFileMessage,\n sendUserMessage,\n updateFileMessage,\n updateUserMessage,\n resendMessage,\n deleteMessage,\n loading,\n } = useGroupChannelMessages(sdk, channel, currentUser?.userId, {\n collectionCreator,\n queryCreator,\n sortComparator,\n onChannelDeleted,\n enableCollectionWithoutLocalCache: !queryCreator,\n });\n\n const _renderMessage: GroupChannelProps['MessageList']['renderMessage'] = useFreshCallback((props) => {\n if (renderMessage) return renderMessage(props);\n return <MessageRenderer {...props} />;\n });\n\n const memoizedFlatListProps = useMemo(\n () => ({\n ListEmptyComponent: <GroupChannelModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }),\n [loading, flatListProps],\n );\n\n const onSendFileMessage: GroupChannelProps['Input']['onSendFileMessage'] = useFreshCallback(async (file) => {\n const params = new sdk.FileMessageParams();\n params.file = file;\n const processedParams = await onBeforeSendFileMessage(params);\n await sendFileMessage(processedParams);\n });\n const onSendUserMessage: GroupChannelProps['Input']['onSendUserMessage'] = useFreshCallback(async (text) => {\n const params = new sdk.UserMessageParams();\n params.message = text;\n const processedParams = await onBeforeSendUserMessage(params);\n await sendUserMessage(processedParams);\n });\n const onUpdateFileMessage: GroupChannelProps['Input']['onUpdateFileMessage'] = useFreshCallback(\n async (editedFile, message) => {\n const params = new sdk.FileMessageParams();\n params.file = editedFile;\n const processedParams = await onBeforeSendFileMessage(params);\n await updateFileMessage(message.messageId, processedParams);\n },\n );\n const onUpdateUserMessage: GroupChannelProps['Input']['onUpdateUserMessage'] = useFreshCallback(\n async (editedText, message) => {\n const params = new sdk.UserMessageParams();\n params.message = editedText;\n const processedParams = await onBeforeSendUserMessage(params);\n await updateUserMessage(message.messageId, processedParams);\n },\n );\n\n return (\n <GroupChannelModule.Provider\n channel={activeChannel}\n enableTypingIndicator={enableTypingIndicator}\n keyboardAvoidOffset={keyboardAvoidOffset}\n >\n <GroupChannelModule.Header onPressHeaderLeft={onPressHeaderLeft} onPressHeaderRight={onPressHeaderRight} />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelModule.StatusLoading />}>\n <GroupChannelModule.MessageList\n enableMessageGrouping={enableMessageGrouping}\n currentUserId={currentUser?.userId}\n channel={activeChannel}\n renderMessage={_renderMessage}\n messages={messages}\n nextMessages={nextMessages}\n newMessagesFromMembers={newMessagesFromMembers}\n onTopReached={prev}\n onBottomReached={next}\n renderNewMessagesButton={renderNewMessagesButton}\n renderScrollToBottomButton={renderScrollToBottomButton}\n onResendFailedMessage={resendMessage}\n onDeleteMessage={deleteMessage}\n onPressImageMessage={onPressImageMessage}\n onPressMediaMessage={onPressMediaMessage}\n flatListProps={memoizedFlatListProps}\n />\n <GroupChannelModule.Input\n channel={activeChannel}\n onSendFileMessage={onSendFileMessage}\n onSendUserMessage={onSendUserMessage}\n onUpdateFileMessage={onUpdateFileMessage}\n onUpdateUserMessage={onUpdateUserMessage}\n />\n </StatusComposition>\n </GroupChannelModule.Provider>\n );\n };\n};\n\nexport default createGroupChannelFragment;\n"],"mappings":"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"}
|
|
@@ -13,10 +13,10 @@ var _uikitChatHooks = require("@sendbird/uikit-chat-hooks");
|
|
|
13
13
|
|
|
14
14
|
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
15
15
|
|
|
16
|
-
var _GroupChannelPreviewContainer = _interopRequireDefault(require("../components/GroupChannelPreviewContainer"));
|
|
17
|
-
|
|
18
16
|
var _StatusComposition = _interopRequireDefault(require("../components/StatusComposition"));
|
|
19
17
|
|
|
18
|
+
var _GroupChannelPreviewContainer = _interopRequireDefault(require("../containers/GroupChannelPreviewContainer"));
|
|
19
|
+
|
|
20
20
|
var _createGroupChannelListModule = _interopRequireDefault(require("../domain/groupChannelList/module/createGroupChannelListModule"));
|
|
21
21
|
|
|
22
22
|
var _useContext = require("../hooks/useContext");
|
|
@@ -35,7 +35,7 @@ const createGroupChannelListFragment = initModule => {
|
|
|
35
35
|
onPressChannel,
|
|
36
36
|
onPressCreateChannel,
|
|
37
37
|
queryCreator,
|
|
38
|
-
|
|
38
|
+
collectionCreator,
|
|
39
39
|
renderGroupChannelPreview,
|
|
40
40
|
// skipTypeSelection = true,
|
|
41
41
|
flatListProps = {},
|
|
@@ -53,8 +53,8 @@ const createGroupChannelListFragment = initModule => {
|
|
|
53
53
|
loading
|
|
54
54
|
} = (0, _uikitChatHooks.useGroupChannelList)(sdk, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId, {
|
|
55
55
|
queryCreator,
|
|
56
|
-
|
|
57
|
-
enableCollectionWithoutLocalCache:
|
|
56
|
+
collectionCreator,
|
|
57
|
+
enableCollectionWithoutLocalCache: !queryCreator
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
if (features.deliveryReceiptEnabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createGroupChannelListFragment","initModule","GroupChannelListModule","createGroupChannelListModule","TypeSelectorHeader","onPressChannel","onPressCreateChannel","queryCreator","
|
|
1
|
+
{"version":3,"names":["createGroupChannelListFragment","initModule","GroupChannelListModule","createGroupChannelListModule","TypeSelectorHeader","onPressChannel","onPressCreateChannel","queryCreator","collectionCreator","renderGroupChannelPreview","flatListProps","menuItemCreator","PASS","sdk","currentUser","features","markAsDeliveredWithChannel","useSendbirdChat","groupChannels","next","loading","useGroupChannelList","userId","enableCollectionWithoutLocalCache","deliveryReceiptEnabled","useEffect","listener","AppState","addEventListener","status","forEach","remove","_renderGroupChannelPreview","useFreshCallback","channel","onLongPressChannel","Logger","warn","ListEmptyComponent","contentContainerStyle","flexGrow"],"sources":["createGroupChannelListFragment.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { AppState } from 'react-native';\n\nimport { useGroupChannelList } from '@sendbird/uikit-chat-hooks';\nimport { Logger, PASS, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport StatusComposition from '../components/StatusComposition';\nimport GroupChannelPreviewContainer from '../containers/GroupChannelPreviewContainer';\nimport createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';\nimport type {\n GroupChannelListFragment,\n GroupChannelListModule,\n GroupChannelListProps,\n} from '../domain/groupChannelList/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelListFragment = (initModule?: Partial<GroupChannelListModule>): GroupChannelListFragment => {\n const GroupChannelListModule = createGroupChannelListModule(initModule);\n return ({\n TypeSelectorHeader,\n onPressChannel,\n onPressCreateChannel,\n queryCreator,\n collectionCreator,\n renderGroupChannelPreview,\n // skipTypeSelection = true,\n flatListProps = {},\n menuItemCreator = PASS,\n }) => {\n const { sdk, currentUser, features, markAsDeliveredWithChannel } = useSendbirdChat();\n const { groupChannels, next, loading } = useGroupChannelList(sdk, currentUser?.userId, {\n queryCreator,\n collectionCreator,\n enableCollectionWithoutLocalCache: !queryCreator,\n });\n\n if (features.deliveryReceiptEnabled) {\n useEffect(() => {\n const listener = AppState.addEventListener('change', (status) => {\n if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);\n });\n return () => listener.remove();\n }, []);\n }\n\n const _renderGroupChannelPreview: GroupChannelListProps['List']['renderGroupChannelPreview'] = useFreshCallback(\n (channel, onLongPressChannel) => {\n if (renderGroupChannelPreview) return renderGroupChannelPreview(channel, onLongPressChannel);\n return (\n <GroupChannelPreviewContainer\n channel={channel}\n onPress={() => onPressChannel(channel)}\n onLongPress={() => onLongPressChannel()}\n />\n );\n },\n );\n\n if (!currentUser) {\n Logger.warn('Cannot render GroupChannelListFragment, User is not connected');\n return null;\n }\n\n return (\n <GroupChannelListModule.Provider>\n <GroupChannelListModule.Header />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelListModule.StatusLoading />}>\n <GroupChannelListModule.List\n menuItemCreator={menuItemCreator}\n renderGroupChannelPreview={_renderGroupChannelPreview}\n groupChannels={groupChannels}\n onLoadNext={next}\n flatListProps={{\n ListEmptyComponent: <GroupChannelListModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }}\n />\n </StatusComposition>\n <GroupChannelListModule.TypeSelector\n // NOTE: not included in first iteration\n skipTypeSelection\n Header={TypeSelectorHeader}\n onSelectType={onPressCreateChannel}\n />\n </GroupChannelListModule.Provider>\n );\n };\n};\n\nexport default createGroupChannelListFragment;\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;AACA;;AAMA;;;;;;;;AAEA,MAAMA,8BAA8B,GAAIC,UAAD,IAA4E;EACjH,MAAMC,sBAAsB,GAAG,IAAAC,qCAAA,EAA6BF,UAA7B,CAA/B;EACA,OAAO,QAUD;IAAA,IAVE;MACNG,kBADM;MAENC,cAFM;MAGNC,oBAHM;MAINC,YAJM;MAKNC,iBALM;MAMNC,yBANM;MAON;MACAC,aAAa,GAAG,EARV;MASNC,eAAe,GAAGC;IATZ,CAUF;IACJ,MAAM;MAAEC,GAAF;MAAOC,WAAP;MAAoBC,QAApB;MAA8BC;IAA9B,IAA6D,IAAAC,2BAAA,GAAnE;IACA,MAAM;MAAEC,aAAF;MAAiBC,IAAjB;MAAuBC;IAAvB,IAAmC,IAAAC,mCAAA,EAAoBR,GAApB,EAAyBC,WAAzB,aAAyBA,WAAzB,uBAAyBA,WAAW,CAAEQ,MAAtC,EAA8C;MACrFf,YADqF;MAErFC,iBAFqF;MAGrFe,iCAAiC,EAAE,CAAChB;IAHiD,CAA9C,CAAzC;;IAMA,IAAIQ,QAAQ,CAACS,sBAAb,EAAqC;MACnC,IAAAC,gBAAA,EAAU,MAAM;QACd,MAAMC,QAAQ,GAAGC,qBAAA,CAASC,gBAAT,CAA0B,QAA1B,EAAqCC,MAAD,IAAY;UAC/D,IAAIA,MAAM,KAAK,QAAf,EAAyBX,aAAa,CAACY,OAAd,CAAsBd,0BAAtB;QAC1B,CAFgB,CAAjB;;QAGA,OAAO,MAAMU,QAAQ,CAACK,MAAT,EAAb;MACD,CALD,EAKG,EALH;IAMD;;IAED,MAAMC,0BAAsF,GAAG,IAAAC,4BAAA,EAC7F,CAACC,OAAD,EAAUC,kBAAV,KAAiC;MAC/B,IAAI1B,yBAAJ,EAA+B,OAAOA,yBAAyB,CAACyB,OAAD,EAAUC,kBAAV,CAAhC;MAC/B,oBACE,6BAAC,qCAAD;QACE,OAAO,EAAED,OADX;QAEE,OAAO,EAAE,MAAM7B,cAAc,CAAC6B,OAAD,CAF/B;QAGE,WAAW,EAAE,MAAMC,kBAAkB;MAHvC,EADF;IAOD,CAV4F,CAA/F;;IAaA,IAAI,CAACrB,WAAL,EAAkB;MAChBsB,kBAAA,CAAOC,IAAP,CAAY,+DAAZ;;MACA,OAAO,IAAP;IACD;;IAED,oBACE,6BAAC,sBAAD,CAAwB,QAAxB,qBACE,6BAAC,sBAAD,CAAwB,MAAxB,OADF,eAEE,6BAAC,0BAAD;MAAmB,OAAO,EAAEjB,OAA5B;MAAqC,gBAAgB,eAAE,6BAAC,sBAAD,CAAwB,aAAxB;IAAvD,gBACE,6BAAC,sBAAD,CAAwB,IAAxB;MACE,eAAe,EAAET,eADnB;MAEE,yBAAyB,EAAEqB,0BAF7B;MAGE,aAAa,EAAEd,aAHjB;MAIE,UAAU,EAAEC,IAJd;MAKE,aAAa,EAAE;QACbmB,kBAAkB,eAAE,6BAAC,sBAAD,CAAwB,WAAxB,OADP;QAEbC,qBAAqB,EAAE;UAAEC,QAAQ,EAAE;QAAZ,CAFV;QAGb,GAAG9B;MAHU;IALjB,EADF,CAFF,eAeE,6BAAC,sBAAD,CAAwB,YAAxB;MACE;MACA,iBAAiB,MAFnB;MAGE,MAAM,EAAEN,kBAHV;MAIE,YAAY,EAAEE;IAJhB,EAfF,CADF;EAwBD,CArED;AAsED,CAxED;;eA0EeN,8B"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -433,7 +433,7 @@ Object.keys(_types).forEach(function (key) {
|
|
|
433
433
|
});
|
|
434
434
|
});
|
|
435
435
|
|
|
436
|
-
var _SendbirdUIKitContainer = _interopRequireWildcard(require("./SendbirdUIKitContainer"));
|
|
436
|
+
var _SendbirdUIKitContainer = _interopRequireWildcard(require("./containers/SendbirdUIKitContainer"));
|
|
437
437
|
|
|
438
438
|
var _types2 = require("./types");
|
|
439
439
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Logger","setLogLevel","__DEV__","setTitle","Platform","OS"],"sources":["index.ts"],"sourcesContent":["/** Components **/\nimport { Platform } from 'react-native';\n\nimport { Logger } from '@sendbird/uikit-utils';\n\nexport { default as MessageRenderer } from './components/MessageRenderer';\nexport { default as ChannelCover } from './components/ChannelCover';\nexport { default as ChatFlatList } from './components/ChatFlatList';\nexport { default as FileViewer } from './components/FileViewer';\nexport { default as NewMessagesButton } from './components/NewMessagesButton';\nexport { default as ProviderLayout } from './components/ProviderLayout';\nexport { default as ScrollToBottomButton } from './components/ScrollToBottomButton';\nexport { default as StatusComposition } from './components/StatusComposition';\nexport { default as TypedPlaceholder } from './components/TypedPlaceholder';\nexport { default as UserActionBar } from './components/UserActionBar';\nexport { default as UserSelectableBar } from './components/UserSelectableBar';\n\n/** Fragments **/\nexport { default as createGroupChannelCreateFragment } from './fragments/createGroupChannelCreateFragment';\nexport { default as createGroupChannelFragment } from './fragments/createGroupChannelFragment';\nexport { default as createGroupChannelSettingsFragment } from './fragments/createGroupChannelSettingsFragment';\nexport { default as createGroupChannelInviteFragment } from './fragments/createGroupChannelInviteFragment';\nexport { default as createGroupChannelListFragment } from './fragments/createGroupChannelListFragment';\nexport { default as createGroupChannelMembersFragment } from './fragments/createGroupChannelMembersFragment';\n\n/** Context **/\nexport { SendbirdChatContext, SendbirdChatProvider } from './contexts/SendbirdChat';\nexport { PlatformServiceContext, PlatformServiceProvider } from './contexts/PlatformService';\nexport { LocalizationContext, LocalizationProvider } from './contexts/Localization';\n\n/** Hooks **/\nexport { default as useConnection } from './hooks/useConnection';\nexport { default as usePushTokenRegistration } from './hooks/usePushTokenRegistration';\nexport { useLocalization, usePlatformService, useSendbirdChat } from './hooks/useContext';\n\n/** Localization **/\nexport { default as StringSetEn } from './localization/StringSet.en';\nexport { createBaseStringSet } from './localization/StringSet.type';\nexport type { StringSet } from './localization/StringSet.type';\n\n/** Platform API **/\nexport { default as createNativeFileService } from './platform/createFileService.native';\nexport { default as createNativeClipboardService } from './platform/createClipboardService.native';\nexport { default as createNativeNotificationService } from './platform/createNotificationService.native';\nexport { default as createNativeMediaService } from './platform/createMediaService.native';\nexport { default as createExpoFileService } from './platform/createFileService.expo';\nexport { default as createExpoClipboardService } from './platform/createClipboardService.expo';\nexport { default as createExpoNotificationService } from './platform/createNotificationService.expo';\nexport { default as createExpoMediaService } from './platform/createMediaService.expo';\n\nexport type {\n FileServiceInterface,\n ClipboardServiceInterface,\n FilePickerServiceInterface,\n FileSystemServiceInterface,\n SaveOptions,\n OpenDocumentOptions,\n OpenCameraOptions,\n OpenMediaLibraryOptions,\n OpenResultListener,\n DownloadedPath,\n Unsubscribe,\n FilePickerResponse,\n FileType,\n NotificationServiceInterface,\n} from './platform/types';\n\n/** Domain **/\nexport * from './domain/groupChannel';\nexport type {\n GroupChannelProps,\n GroupChannelModule,\n GroupChannelFragment,\n GroupChannelContextsType,\n} from './domain/groupChannel/types';\n\nexport * from './domain/groupChannelSettings';\nexport type {\n GroupChannelSettingsProps,\n GroupChannelSettingsModule,\n GroupChannelSettingsFragment,\n GroupChannelSettingsContextsType,\n} from './domain/groupChannelSettings/types';\n\nexport * from './domain/groupChannelList';\nexport type {\n GroupChannelType,\n GroupChannelListProps,\n GroupChannelListModule,\n GroupChannelListFragment,\n GroupChannelListContextsType,\n} from './domain/groupChannelList/types';\n\nexport * from './domain/userList';\nexport type { UserListProps, UserListModule, UserListContextsType } from './domain/userList/types';\nexport * from './domain/groupChannelUserList/types';\n\n/** UIKit **/\nexport {\n default as SendbirdUIKitContainer,\n SendbirdUIKit,\n SendbirdUIKitContainerProps,\n} from './SendbirdUIKitContainer';\n\nexport * from './types';\n\nLogger.setLogLevel(__DEV__ ? 'warn' : 'none');\nLogger.setTitle(`[UIKIT_${Platform.OS}]`);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AAGA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAoBA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAQA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAQA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AASA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAGA;;AAMA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;;;;;;;AAxGA;;AAiBA;;AAQA;;AAKA;;AAKA;;AAKA;;AA2BA;;AA8BA;AASAA,kBAAA,CAAOC,WAAP,CAAmBC,OAAO,GAAG,MAAH,GAAY,MAAtC;;AACAF,kBAAA,CAAOG,QAAP,CAAiB,UAASC,qBAAA,CAASC,EAAG,GAAtC"}
|
|
1
|
+
{"version":3,"names":["Logger","setLogLevel","__DEV__","setTitle","Platform","OS"],"sources":["index.ts"],"sourcesContent":["/** Components **/\nimport { Platform } from 'react-native';\n\nimport { Logger } from '@sendbird/uikit-utils';\n\nexport { default as MessageRenderer } from './components/MessageRenderer';\nexport { default as ChannelCover } from './components/ChannelCover';\nexport { default as ChatFlatList } from './components/ChatFlatList';\nexport { default as FileViewer } from './components/FileViewer';\nexport { default as NewMessagesButton } from './components/NewMessagesButton';\nexport { default as ProviderLayout } from './components/ProviderLayout';\nexport { default as ScrollToBottomButton } from './components/ScrollToBottomButton';\nexport { default as StatusComposition } from './components/StatusComposition';\nexport { default as TypedPlaceholder } from './components/TypedPlaceholder';\nexport { default as UserActionBar } from './components/UserActionBar';\nexport { default as UserSelectableBar } from './components/UserSelectableBar';\n\n/** Fragments **/\nexport { default as createGroupChannelCreateFragment } from './fragments/createGroupChannelCreateFragment';\nexport { default as createGroupChannelFragment } from './fragments/createGroupChannelFragment';\nexport { default as createGroupChannelSettingsFragment } from './fragments/createGroupChannelSettingsFragment';\nexport { default as createGroupChannelInviteFragment } from './fragments/createGroupChannelInviteFragment';\nexport { default as createGroupChannelListFragment } from './fragments/createGroupChannelListFragment';\nexport { default as createGroupChannelMembersFragment } from './fragments/createGroupChannelMembersFragment';\n\n/** Context **/\nexport { SendbirdChatContext, SendbirdChatProvider } from './contexts/SendbirdChat';\nexport { PlatformServiceContext, PlatformServiceProvider } from './contexts/PlatformService';\nexport { LocalizationContext, LocalizationProvider } from './contexts/Localization';\n\n/** Hooks **/\nexport { default as useConnection } from './hooks/useConnection';\nexport { default as usePushTokenRegistration } from './hooks/usePushTokenRegistration';\nexport { useLocalization, usePlatformService, useSendbirdChat } from './hooks/useContext';\n\n/** Localization **/\nexport { default as StringSetEn } from './localization/StringSet.en';\nexport { createBaseStringSet } from './localization/StringSet.type';\nexport type { StringSet } from './localization/StringSet.type';\n\n/** Platform API **/\nexport { default as createNativeFileService } from './platform/createFileService.native';\nexport { default as createNativeClipboardService } from './platform/createClipboardService.native';\nexport { default as createNativeNotificationService } from './platform/createNotificationService.native';\nexport { default as createNativeMediaService } from './platform/createMediaService.native';\nexport { default as createExpoFileService } from './platform/createFileService.expo';\nexport { default as createExpoClipboardService } from './platform/createClipboardService.expo';\nexport { default as createExpoNotificationService } from './platform/createNotificationService.expo';\nexport { default as createExpoMediaService } from './platform/createMediaService.expo';\n\nexport type {\n FileServiceInterface,\n ClipboardServiceInterface,\n FilePickerServiceInterface,\n FileSystemServiceInterface,\n SaveOptions,\n OpenDocumentOptions,\n OpenCameraOptions,\n OpenMediaLibraryOptions,\n OpenResultListener,\n DownloadedPath,\n Unsubscribe,\n FilePickerResponse,\n FileType,\n NotificationServiceInterface,\n} from './platform/types';\n\n/** Domain **/\nexport * from './domain/groupChannel';\nexport type {\n GroupChannelProps,\n GroupChannelModule,\n GroupChannelFragment,\n GroupChannelContextsType,\n} from './domain/groupChannel/types';\n\nexport * from './domain/groupChannelSettings';\nexport type {\n GroupChannelSettingsProps,\n GroupChannelSettingsModule,\n GroupChannelSettingsFragment,\n GroupChannelSettingsContextsType,\n} from './domain/groupChannelSettings/types';\n\nexport * from './domain/groupChannelList';\nexport type {\n GroupChannelType,\n GroupChannelListProps,\n GroupChannelListModule,\n GroupChannelListFragment,\n GroupChannelListContextsType,\n} from './domain/groupChannelList/types';\n\nexport * from './domain/userList';\nexport type { UserListProps, UserListModule, UserListContextsType } from './domain/userList/types';\nexport * from './domain/groupChannelUserList/types';\n\n/** UIKit **/\nexport {\n default as SendbirdUIKitContainer,\n SendbirdUIKit,\n SendbirdUIKitContainerProps,\n} from './containers/SendbirdUIKitContainer';\n\nexport * from './types';\n\nLogger.setLogLevel(__DEV__ ? 'warn' : 'none');\nLogger.setTitle(`[UIKIT_${Platform.OS}]`);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AAGA;;AACA;;AAIA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAoBA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAQA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAQA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AASA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAGA;;AAMA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;;;;;;;AAxGA;;AAiBA;;AAQA;;AAKA;;AAKA;;AAKA;;AA2BA;;AA8BA;AASAA,kBAAA,CAAOC,WAAP,CAAmBC,OAAO,GAAG,MAAH,GAAY,MAAtC;;AACAF,kBAAA,CAAOG,QAAP,CAAiB,UAASC,qBAAA,CAASC,EAAG,GAAtC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["InternalLocalCacheStorage","constructor","storage","getAllKeys","getItem","key","removeItem","setItem","value","multiGet","keys","Promise","all","map","multiRemove","multiSet","keyValuePairs"],"sources":["InternalLocalCacheStorage.ts"],"sourcesContent":["import type { KeyValuePairGet, KeyValuePairSet, LocalCacheStorage } from '../types';\n\nexport default class InternalLocalCacheStorage implements LocalCacheStorage {\n constructor(private storage: LocalCacheStorage) {}\n\n getAllKeys() {\n return this.storage.getAllKeys();\n }\n\n getItem(key: string) {\n return this.storage.getItem(key);\n }\n\n removeItem(key: string) {\n return this.storage.removeItem(key);\n }\n\n setItem(key: string, value: string) {\n return this.storage.setItem(key, value);\n }\n\n async multiGet(keys: string[]) {\n if (this.storage.multiGet) {\n return this.storage.multiGet(keys);\n } else {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n }\n }\n\n async multiRemove(keys: string[]) {\n if (this.storage.multiRemove) {\n await this.storage.multiRemove(keys);\n } else {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n }\n }\n\n async multiSet(keyValuePairs: Array<KeyValuePairSet>) {\n if (this.storage.multiSet) {\n await this.storage.multiSet(keyValuePairs);\n } else {\n await Promise.all(keyValuePairs.map(([key, value]) => this.storage.setItem(key, value)));\n }\n }\n}\n"],"mappings":";;;;;;;AAEe,MAAMA,yBAAN,CAA6D;EAC1EC,WAAW,CAASC,OAAT,EAAqC;IAAA,KAA5BA,OAA4B,GAA5BA,OAA4B;EAAE;;EAElDC,UAAU,GAAG;IACX,OAAO,KAAKD,OAAL,CAAaC,UAAb,EAAP;EACD;;EAEDC,OAAO,CAACC,GAAD,EAAc;IACnB,OAAO,KAAKH,OAAL,CAAaE,OAAb,CAAqBC,GAArB,CAAP;EACD;;EAEDC,UAAU,CAACD,GAAD,EAAc;IACtB,OAAO,KAAKH,OAAL,CAAaI,UAAb,CAAwBD,GAAxB,CAAP;EACD;;EAEDE,OAAO,CAACF,GAAD,EAAcG,KAAd,EAA6B;IAClC,OAAO,KAAKN,OAAL,CAAaK,OAAb,CAAqBF,GAArB,EAA0BG,KAA1B,CAAP;EACD;;EAEa,MAARC,QAAQ,CAACC,IAAD,EAAiB;IAC7B,IAAI,KAAKR,OAAL,CAAaO,QAAjB,EAA2B;MACzB,OAAO,KAAKP,OAAL,CAAaO,QAAb,CAAsBC,IAAtB,CAAP;IACD,CAFD,MAEO;MACL,OAAOC,OAAO,CAACC,GAAR,CAAYF,IAAI,CAACG,GAAL,CAAS,MAAOR,GAAP,IAAe,CAACA,GAAD,EAAM,MAAM,KAAKD,OAAL,CAAaC,GAAb,CAAZ,CAAxB,CAAZ,CAAP;IACD;EACF;;EAEgB,MAAXS,WAAW,CAACJ,IAAD,EAAiB;IAChC,IAAI,KAAKR,OAAL,CAAaY,WAAjB,EAA8B;MAC5B,MAAM,KAAKZ,OAAL,CAAaY,WAAb,CAAyBJ,IAAzB,CAAN;IACD,CAFD,MAEO;MACL,MAAMC,OAAO,CAACC,GAAR,CAAYF,IAAI,CAACG,GAAL,CAAS,MAAOR,GAAP,IAAe,KAAKC,UAAL,CAAgBD,GAAhB,CAAxB,CAAZ,CAAN;IACD;EACF;;EAEa,MAARU,QAAQ,CAACC,aAAD,EAAwC;IACpD,IAAI,KAAKd,OAAL,CAAaa,QAAjB,EAA2B;MACzB,MAAM,KAAKb,OAAL,CAAaa,QAAb,CAAsBC,aAAtB,CAAN;IACD,CAFD,MAEO;MACL,MAAML,OAAO,CAACC,GAAR,CAAYI,aAAa,CAACH,GAAd,CAAkB;QAAA,IAAC,CAACR,GAAD,EAAMG,KAAN,CAAD;QAAA,OAAkB,KAAKN,OAAL,CAAaK,OAAb,CAAqBF,GAArB,EAA0BG,KAA1B,CAAlB;MAAA,CAAlB,CAAZ,CAAN;IACD;EACF;;AAzCyE"}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '1.1.
|
|
1
|
+
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '1.1.1';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAhB;eACeA,O"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import { StatusBar, StyleSheet, View } from 'react-native';
|
|
2
|
+
import { StatusBar, StyleSheet, TouchableOpacity, View } from 'react-native';
|
|
3
3
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
4
4
|
import { Icon, Image, LoadingSpinner, Text, createStyleSheet, useAlert, useHeaderStyle, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
5
|
import { Logger, getFileExtension, getFileType, isMyMessage, toMegabyte, useIIFE } from '@sendbird/uikit-utils';
|
|
6
6
|
import { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';
|
|
7
|
-
import SBUPressable from './SBUPressable';
|
|
8
7
|
|
|
9
8
|
const FileViewer = _ref => {
|
|
10
9
|
let {
|
|
@@ -194,8 +193,7 @@ const FileViewerHeader = _ref2 => {
|
|
|
194
193
|
height: defaultHeight + topInset,
|
|
195
194
|
backgroundColor: palette.overlay01
|
|
196
195
|
}]
|
|
197
|
-
}, /*#__PURE__*/React.createElement(
|
|
198
|
-
as: 'TouchableOpacity',
|
|
196
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
199
197
|
onPress: onClose,
|
|
200
198
|
style: styles.barButton
|
|
201
199
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
@@ -242,8 +240,7 @@ const FileViewerFooter = _ref3 => {
|
|
|
242
240
|
height: defaultHeight + bottomInset,
|
|
243
241
|
backgroundColor: palette.overlay01
|
|
244
242
|
}]
|
|
245
|
-
}, /*#__PURE__*/React.createElement(
|
|
246
|
-
as: 'TouchableOpacity',
|
|
243
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
247
244
|
onPress: onPressDownload,
|
|
248
245
|
style: styles.barButton
|
|
249
246
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
@@ -252,8 +249,7 @@ const FileViewerFooter = _ref3 => {
|
|
|
252
249
|
color: palette.onBackgroundDark01
|
|
253
250
|
})), /*#__PURE__*/React.createElement(View, {
|
|
254
251
|
style: styles.barTitleContainer
|
|
255
|
-
}), /*#__PURE__*/React.createElement(
|
|
256
|
-
as: 'TouchableOpacity',
|
|
252
|
+
}), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
257
253
|
onPress: onPressDelete,
|
|
258
254
|
style: styles.barButton,
|
|
259
255
|
disabled: !deleteShown
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useState","StatusBar","StyleSheet","View","useSafeAreaInsets","Icon","Image","LoadingSpinner","Text","createStyleSheet","useAlert","useHeaderStyle","useToast","useUIKitTheme","Logger","getFileExtension","getFileType","isMyMessage","toMegabyte","useIIFE","useLocalization","usePlatformService","useSendbirdChat","SBUPressable","FileViewer","headerShown","deleteMessage","headerTopInset","fileMessage","onPressDownload","onPressDelete","onClose","loading","setLoading","bottom","currentUser","palette","topInset","statusBarTranslucent","defaultHeight","STRINGS","fileService","mediaService","toast","alert","basicTopInset","canDelete","userId","fileType","type","url","VideoComponent","fileViewer","uri","absoluteFill","top","_onPressDelete","title","GROUP_CHANNEL","DIALOG_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL","DIALOG_MESSAGE_DELETE_CONFIRM_OK","style","onPress","then","catch","show","TOAST","DELETE_MSG_ERROR","_onPressDownload","size","DOWNLOAD_START","save","fileUrl","fileName","name","response","DOWNLOAD_OK","log","err","DOWNLOAD_ERROR","flex","backgroundColor","background700","alignItems","justifyContent","position","primary300","FILE_VIEWER","TITLE","SUBTITLE","FileViewerHeader","subtitle","left","right","styles","headerContainer","paddingLeft","paddingHorizontal","paddingRight","paddingTop","height","overlay01","barButton","onBackgroundDark01","barTitleContainer","headerTitle","FileViewerFooter","bottomInset","deleteShown","footerContainer","paddingBottom","flexDirection","width","marginBottom"],"sources":["FileViewer.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { StatusBar, StyleSheet, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Icon,\n Image,\n LoadingSpinner,\n Text,\n createStyleSheet,\n useAlert,\n useHeaderStyle,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage } from '@sendbird/uikit-utils';\nimport { Logger, getFileExtension, getFileType, isMyMessage, toMegabyte, useIIFE } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';\nimport SBUPressable from './SBUPressable';\n\ntype Props = {\n fileMessage: SendbirdFileMessage;\n deleteMessage: () => Promise<void>;\n\n onClose: () => void;\n onPressDownload?: (message: SendbirdFileMessage) => void;\n onPressDelete?: (message: SendbirdFileMessage) => void;\n\n headerShown?: boolean;\n headerTopInset?: number;\n};\nconst FileViewer = ({\n headerShown = true,\n deleteMessage,\n headerTopInset,\n fileMessage,\n onPressDownload,\n onPressDelete,\n onClose,\n}: Props) => {\n const [loading, setLoading] = useState(true);\n\n const { bottom } = useSafeAreaInsets();\n\n const { currentUser } = useSendbirdChat();\n const { palette } = useUIKitTheme();\n const { topInset, statusBarTranslucent, defaultHeight } = useHeaderStyle();\n const { STRINGS } = useLocalization();\n const { fileService, mediaService } = usePlatformService();\n const toast = useToast();\n const { alert } = useAlert();\n\n const basicTopInset = statusBarTranslucent ? topInset : 0;\n const canDelete = isMyMessage(fileMessage, currentUser?.userId);\n const fileType = getFileType(fileMessage.type || getFileExtension(fileMessage.url));\n\n useEffect(() => {\n if (!mediaService?.VideoComponent || fileType === 'file') {\n onClose();\n }\n }, [mediaService]);\n\n const fileViewer = useIIFE(() => {\n switch (fileType) {\n case 'image': {\n return (\n <Image\n source={{ uri: fileMessage.url }}\n style={StyleSheet.absoluteFill}\n resizeMode={'contain'}\n onLoadEnd={() => setLoading(false)}\n />\n );\n }\n\n case 'video':\n case 'audio': {\n if (!mediaService?.VideoComponent) return null;\n return (\n <mediaService.VideoComponent\n source={{ uri: fileMessage.url }}\n style={[StyleSheet.absoluteFill, { top: basicTopInset + defaultHeight, bottom: defaultHeight + bottom }]}\n resizeMode={'contain'}\n onLoad={() => setLoading(false)}\n />\n );\n }\n\n default: {\n return null;\n }\n }\n });\n\n const _onPressDelete = () => {\n if (!canDelete) return;\n\n if (onPressDelete) {\n onPressDelete(fileMessage);\n } else {\n alert({\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n deleteMessage()\n .then(() => {\n onClose();\n })\n .catch(() => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n });\n },\n },\n ],\n });\n }\n };\n\n const _onPressDownload = () => {\n if (onPressDownload) {\n onPressDownload(fileMessage);\n } else {\n if (toMegabyte(fileMessage.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: fileMessage.url, fileName: fileMessage.name, fileType: fileMessage.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 return (\n <View style={{ flex: 1, backgroundColor: palette.background700 }}>\n <StatusBar barStyle={'light-content'} animated />\n <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>\n {fileViewer}\n {loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}\n </View>\n {headerShown && (\n <FileViewerHeader\n title={STRINGS.FILE_VIEWER.TITLE(fileMessage)}\n subtitle={STRINGS.FILE_VIEWER.SUBTITLE(fileMessage)}\n topInset={headerTopInset ?? basicTopInset}\n onClose={onClose}\n />\n )}\n <FileViewerFooter\n bottomInset={bottom}\n deleteShown={canDelete}\n onPressDelete={_onPressDelete}\n onPressDownload={_onPressDownload}\n />\n </View>\n );\n};\n\ntype HeaderProps = {\n topInset: number;\n onClose: () => void;\n title: string;\n subtitle: string;\n};\nconst FileViewerHeader = ({ topInset, onClose, subtitle, title }: HeaderProps) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <View\n style={[\n styles.headerContainer,\n {\n paddingLeft: styles.headerContainer.paddingHorizontal + left,\n paddingRight: styles.headerContainer.paddingHorizontal + right,\n },\n { paddingTop: topInset, height: defaultHeight + topInset, backgroundColor: palette.overlay01 },\n ]}\n >\n <SBUPressable as={'TouchableOpacity'} onPress={onClose} style={styles.barButton}>\n <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />\n </SBUPressable>\n <View style={styles.barTitleContainer}>\n <Text h2 color={palette.onBackgroundDark01} style={styles.headerTitle}>\n {title}\n </Text>\n <Text caption2 color={palette.onBackgroundDark01}>\n {subtitle}\n </Text>\n </View>\n <View style={styles.barButton} />\n </View>\n );\n};\n\ntype FooterProps = {\n bottomInset: number;\n deleteShown: boolean;\n onPressDelete: () => void;\n onPressDownload: () => void;\n};\nconst FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: FooterProps) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <View\n style={[\n styles.footerContainer,\n {\n paddingLeft: styles.headerContainer.paddingHorizontal + left,\n paddingRight: styles.headerContainer.paddingHorizontal + right,\n },\n {\n paddingBottom: bottomInset,\n height: defaultHeight + bottomInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <SBUPressable as={'TouchableOpacity'} onPress={onPressDownload} style={styles.barButton}>\n <Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />\n </SBUPressable>\n <View style={styles.barTitleContainer} />\n <SBUPressable as={'TouchableOpacity'} onPress={onPressDelete} style={styles.barButton} disabled={!deleteShown}>\n {deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}\n </SBUPressable>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n headerContainer: {\n top: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n barButton: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n barTitleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerTitle: {\n marginBottom: 2,\n },\n footerContainer: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n});\n\nexport default FileViewer;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,EAA2BC,QAA3B,QAA2C,OAA3C;AACA,SAASC,SAAT,EAAoBC,UAApB,EAAgCC,IAAhC,QAA4C,cAA5C;AACA,SAASC,iBAAT,QAAkC,gCAAlC;AAEA,SACEC,IADF,EAEEC,KAFF,EAGEC,cAHF,EAIEC,IAJF,EAKEC,gBALF,EAMEC,QANF,EAOEC,cAPF,EAQEC,QARF,EASEC,aATF,QAUO,yCAVP;AAYA,SAASC,MAAT,EAAiBC,gBAAjB,EAAmCC,WAAnC,EAAgDC,WAAhD,EAA6DC,UAA7D,EAAyEC,OAAzE,QAAwF,uBAAxF;AAEA,SAASC,eAAT,EAA0BC,kBAA1B,EAA8CC,eAA9C,QAAqE,qBAArE;AACA,OAAOC,YAAP,MAAyB,gBAAzB;;AAaA,MAAMC,UAAU,GAAG,QAQN;EAAA,IARO;IAClBC,WAAW,GAAG,IADI;IAElBC,aAFkB;IAGlBC,cAHkB;IAIlBC,WAJkB;IAKlBC,eALkB;IAMlBC,aANkB;IAOlBC;EAPkB,CAQP;EACX,MAAM,CAACC,OAAD,EAAUC,UAAV,IAAwBjC,QAAQ,CAAC,IAAD,CAAtC;EAEA,MAAM;IAAEkC;EAAF,IAAa9B,iBAAiB,EAApC;EAEA,MAAM;IAAE+B;EAAF,IAAkBb,eAAe,EAAvC;EACA,MAAM;IAAEc;EAAF,IAAcvB,aAAa,EAAjC;EACA,MAAM;IAAEwB,QAAF;IAAYC,oBAAZ;IAAkCC;EAAlC,IAAoD5B,cAAc,EAAxE;EACA,MAAM;IAAE6B;EAAF,IAAcpB,eAAe,EAAnC;EACA,MAAM;IAAEqB,WAAF;IAAeC;EAAf,IAAgCrB,kBAAkB,EAAxD;EACA,MAAMsB,KAAK,GAAG/B,QAAQ,EAAtB;EACA,MAAM;IAAEgC;EAAF,IAAYlC,QAAQ,EAA1B;EAEA,MAAMmC,aAAa,GAAGP,oBAAoB,GAAGD,QAAH,GAAc,CAAxD;EACA,MAAMS,SAAS,GAAG7B,WAAW,CAACW,WAAD,EAAcO,WAAd,aAAcA,WAAd,uBAAcA,WAAW,CAAEY,MAA3B,CAA7B;EACA,MAAMC,QAAQ,GAAGhC,WAAW,CAACY,WAAW,CAACqB,IAAZ,IAAoBlC,gBAAgB,CAACa,WAAW,CAACsB,GAAb,CAArC,CAA5B;EAEAnD,SAAS,CAAC,MAAM;IACd,IAAI,EAAC2C,YAAD,aAACA,YAAD,eAACA,YAAY,CAAES,cAAf,KAAiCH,QAAQ,KAAK,MAAlD,EAA0D;MACxDjB,OAAO;IACR;EACF,CAJQ,EAIN,CAACW,YAAD,CAJM,CAAT;EAMA,MAAMU,UAAU,GAAGjC,OAAO,CAAC,MAAM;IAC/B,QAAQ6B,QAAR;MACE,KAAK,OAAL;QAAc;UACZ,oBACE,oBAAC,KAAD;YACE,MAAM,EAAE;cAAEK,GAAG,EAAEzB,WAAW,CAACsB;YAAnB,CADV;YAEE,KAAK,EAAEhD,UAAU,CAACoD,YAFpB;YAGE,UAAU,EAAE,SAHd;YAIE,SAAS,EAAE,MAAMrB,UAAU,CAAC,KAAD;UAJ7B,EADF;QAQD;;MAED,KAAK,OAAL;MACA,KAAK,OAAL;QAAc;UACZ,IAAI,EAACS,YAAD,aAACA,YAAD,eAACA,YAAY,CAAES,cAAf,CAAJ,EAAmC,OAAO,IAAP;UACnC,oBACE,oBAAC,YAAD,CAAc,cAAd;YACE,MAAM,EAAE;cAAEE,GAAG,EAAEzB,WAAW,CAACsB;YAAnB,CADV;YAEE,KAAK,EAAE,CAAChD,UAAU,CAACoD,YAAZ,EAA0B;cAAEC,GAAG,EAAEV,aAAa,GAAGN,aAAvB;cAAsCL,MAAM,EAAEK,aAAa,GAAGL;YAA9D,CAA1B,CAFT;YAGE,UAAU,EAAE,SAHd;YAIE,MAAM,EAAE,MAAMD,UAAU,CAAC,KAAD;UAJ1B,EADF;QAQD;;MAED;QAAS;UACP,OAAO,IAAP;QACD;IA3BH;EA6BD,CA9ByB,CAA1B;;EAgCA,MAAMuB,cAAc,GAAG,MAAM;IAC3B,IAAI,CAACV,SAAL,EAAgB;;IAEhB,IAAIhB,aAAJ,EAAmB;MACjBA,aAAa,CAACF,WAAD,CAAb;IACD,CAFD,MAEO;MACLgB,KAAK,CAAC;QACJa,KAAK,EAAEjB,OAAO,CAACkB,aAAR,CAAsBC,mCADzB;QAEJC,OAAO,EAAE,CACP;UACEC,IAAI,EAAErB,OAAO,CAACkB,aAAR,CAAsBI;QAD9B,CADO,EAIP;UACED,IAAI,EAAErB,OAAO,CAACkB,aAAR,CAAsBK,gCAD9B;UAEEC,KAAK,EAAE,aAFT;UAGEC,OAAO,EAAE,MAAM;YACbvC,aAAa,GACVwC,IADH,CACQ,MAAM;cACVnC,OAAO;YACR,CAHH,EAIGoC,KAJH,CAIS,MAAM;cACXxB,KAAK,CAACyB,IAAN,CAAW5B,OAAO,CAAC6B,KAAR,CAAcC,gBAAzB,EAA2C,OAA3C;YACD,CANH;UAOD;QAXH,CAJO;MAFL,CAAD,CAAL;IAqBD;EACF,CA5BD;;EA8BA,MAAMC,gBAAgB,GAAG,MAAM;IAC7B,IAAI1C,eAAJ,EAAqB;MACnBA,eAAe,CAACD,WAAD,CAAf;IACD,CAFD,MAEO;MACL,IAAIV,UAAU,CAACU,WAAW,CAAC4C,IAAb,CAAV,GAA+B,CAAnC,EAAsC;QACpC7B,KAAK,CAACyB,IAAN,CAAW5B,OAAO,CAAC6B,KAAR,CAAcI,cAAzB,EAAyC,SAAzC;MACD;;MAEDhC,WAAW,CACRiC,IADH,CACQ;QAAEC,OAAO,EAAE/C,WAAW,CAACsB,GAAvB;QAA4B0B,QAAQ,EAAEhD,WAAW,CAACiD,IAAlD;QAAwD7B,QAAQ,EAAEpB,WAAW,CAACqB;MAA9E,CADR,EAEGiB,IAFH,CAESY,QAAD,IAAc;QAClBnC,KAAK,CAACyB,IAAN,CAAW5B,OAAO,CAAC6B,KAAR,CAAcU,WAAzB,EAAsC,SAAtC;QACAjE,MAAM,CAACkE,GAAP,CAAW,eAAX,EAA4BF,QAA5B;MACD,CALH,EAMGX,KANH,CAMUc,GAAD,IAAS;QACdtC,KAAK,CAACyB,IAAN,CAAW5B,OAAO,CAAC6B,KAAR,CAAca,cAAzB,EAAyC,OAAzC;QACApE,MAAM,CAACkE,GAAP,CAAW,mBAAX,EAAgCC,GAAhC;MACD,CATH;IAUD;EACF,CAnBD;;EAqBA,oBACE,oBAAC,IAAD;IAAM,KAAK,EAAE;MAAEE,IAAI,EAAE,CAAR;MAAWC,eAAe,EAAEhD,OAAO,CAACiD;IAApC;EAAb,gBACE,oBAAC,SAAD;IAAW,QAAQ,EAAE,eAArB;IAAsC,QAAQ;EAA9C,EADF,eAEE,oBAAC,IAAD;IAAM,KAAK,EAAE;MAAEF,IAAI,EAAE,CAAR;MAAWG,UAAU,EAAE,QAAvB;MAAiCC,cAAc,EAAE;IAAjD;EAAb,GACGnC,UADH,EAEGpB,OAAO,iBAAI,oBAAC,cAAD;IAAgB,KAAK,EAAE;MAAEwD,QAAQ,EAAE;IAAZ,CAAvB;IAAiD,IAAI,EAAE,EAAvD;IAA2D,KAAK,EAAEpD,OAAO,CAACqD;EAA1E,EAFd,CAFF,EAMGhE,WAAW,iBACV,oBAAC,gBAAD;IACE,KAAK,EAAEe,OAAO,CAACkD,WAAR,CAAoBC,KAApB,CAA0B/D,WAA1B,CADT;IAEE,QAAQ,EAAEY,OAAO,CAACkD,WAAR,CAAoBE,QAApB,CAA6BhE,WAA7B,CAFZ;IAGE,QAAQ,EAAED,cAAc,IAAIkB,aAH9B;IAIE,OAAO,EAAEd;EAJX,EAPJ,eAcE,oBAAC,gBAAD;IACE,WAAW,EAAEG,MADf;IAEE,WAAW,EAAEY,SAFf;IAGE,aAAa,EAAEU,cAHjB;IAIE,eAAe,EAAEe;EAJnB,EAdF,CADF;AAuBD,CAzID;;AAiJA,MAAMsB,gBAAgB,GAAG,SAAyD;EAAA,IAAxD;IAAExD,QAAF;IAAYN,OAAZ;IAAqB+D,QAArB;IAA+BrC;EAA/B,CAAwD;EAChF,MAAM;IAAErB;EAAF,IAAcvB,aAAa,EAAjC;EACA,MAAM;IAAE0B;EAAF,IAAoB5B,cAAc,EAAxC;EACA,MAAM;IAAEoF,IAAF;IAAQC;EAAR,IAAkB5F,iBAAiB,EAAzC;EAEA,oBACE,oBAAC,IAAD;IACE,KAAK,EAAE,CACL6F,MAAM,CAACC,eADF,EAEL;MACEC,WAAW,EAAEF,MAAM,CAACC,eAAP,CAAuBE,iBAAvB,GAA2CL,IAD1D;MAEEM,YAAY,EAAEJ,MAAM,CAACC,eAAP,CAAuBE,iBAAvB,GAA2CJ;IAF3D,CAFK,EAML;MAAEM,UAAU,EAAEjE,QAAd;MAAwBkE,MAAM,EAAEhE,aAAa,GAAGF,QAAhD;MAA0D+C,eAAe,EAAEhD,OAAO,CAACoE;IAAnF,CANK;EADT,gBAUE,oBAAC,YAAD;IAAc,EAAE,EAAE,kBAAlB;IAAsC,OAAO,EAAEzE,OAA/C;IAAwD,KAAK,EAAEkE,MAAM,CAACQ;EAAtE,gBACE,oBAAC,IAAD;IAAM,IAAI,EAAE,OAAZ;IAAqB,IAAI,EAAE,EAA3B;IAA+B,KAAK,EAAErE,OAAO,CAACsE;EAA9C,EADF,CAVF,eAaE,oBAAC,IAAD;IAAM,KAAK,EAAET,MAAM,CAACU;EAApB,gBACE,oBAAC,IAAD;IAAM,EAAE,MAAR;IAAS,KAAK,EAAEvE,OAAO,CAACsE,kBAAxB;IAA4C,KAAK,EAAET,MAAM,CAACW;EAA1D,GACGnD,KADH,CADF,eAIE,oBAAC,IAAD;IAAM,QAAQ,MAAd;IAAe,KAAK,EAAErB,OAAO,CAACsE;EAA9B,GACGZ,QADH,CAJF,CAbF,eAqBE,oBAAC,IAAD;IAAM,KAAK,EAAEG,MAAM,CAACQ;EAApB,EArBF,CADF;AAyBD,CA9BD;;AAsCA,MAAMI,gBAAgB,GAAG,SAA+E;EAAA,IAA9E;IAAEC,WAAF;IAAeC,WAAf;IAA4BjF,aAA5B;IAA2CD;EAA3C,CAA8E;EACtG,MAAM;IAAEO;EAAF,IAAcvB,aAAa,EAAjC;EACA,MAAM;IAAE0B;EAAF,IAAoB5B,cAAc,EAAxC;EACA,MAAM;IAAEoF,IAAF;IAAQC;EAAR,IAAkB5F,iBAAiB,EAAzC;EAEA,oBACE,oBAAC,IAAD;IACE,KAAK,EAAE,CACL6F,MAAM,CAACe,eADF,EAEL;MACEb,WAAW,EAAEF,MAAM,CAACC,eAAP,CAAuBE,iBAAvB,GAA2CL,IAD1D;MAEEM,YAAY,EAAEJ,MAAM,CAACC,eAAP,CAAuBE,iBAAvB,GAA2CJ;IAF3D,CAFK,EAML;MACEiB,aAAa,EAAEH,WADjB;MAEEP,MAAM,EAAEhE,aAAa,GAAGuE,WAF1B;MAGE1B,eAAe,EAAEhD,OAAO,CAACoE;IAH3B,CANK;EADT,gBAcE,oBAAC,YAAD;IAAc,EAAE,EAAE,kBAAlB;IAAsC,OAAO,EAAE3E,eAA/C;IAAgE,KAAK,EAAEoE,MAAM,CAACQ;EAA9E,gBACE,oBAAC,IAAD;IAAM,IAAI,EAAE,UAAZ;IAAwB,IAAI,EAAE,EAA9B;IAAkC,KAAK,EAAErE,OAAO,CAACsE;EAAjD,EADF,CAdF,eAiBE,oBAAC,IAAD;IAAM,KAAK,EAAET,MAAM,CAACU;EAApB,EAjBF,eAkBE,oBAAC,YAAD;IAAc,EAAE,EAAE,kBAAlB;IAAsC,OAAO,EAAE7E,aAA/C;IAA8D,KAAK,EAAEmE,MAAM,CAACQ,SAA5E;IAAuF,QAAQ,EAAE,CAACM;EAAlG,GACGA,WAAW,iBAAI,oBAAC,IAAD;IAAM,IAAI,EAAE,QAAZ;IAAsB,IAAI,EAAE,EAA5B;IAAgC,KAAK,EAAE3E,OAAO,CAACsE;EAA/C,EADlB,CAlBF,CADF;AAwBD,CA7BD;;AA+BA,MAAMT,MAAM,GAAGxF,gBAAgB,CAAC;EAC9ByF,eAAe,EAAE;IACf3C,GAAG,EAAE,CADU;IAEfwC,IAAI,EAAE,CAFS;IAGfC,KAAK,EAAE,CAHQ;IAIfR,QAAQ,EAAE,UAJK;IAKf0B,aAAa,EAAE,KALA;IAMf5B,UAAU,EAAE,QANG;IAOfC,cAAc,EAAE,QAPD;IAQfa,iBAAiB,EAAE;EARJ,CADa;EAW9BK,SAAS,EAAE;IACTU,KAAK,EAAE,EADE;IAETZ,MAAM,EAAE,EAFC;IAGTjB,UAAU,EAAE,QAHH;IAITC,cAAc,EAAE;EAJP,CAXmB;EAiB9BoB,iBAAiB,EAAE;IACjBxB,IAAI,EAAE,CADW;IAEjBG,UAAU,EAAE,QAFK;IAGjBC,cAAc,EAAE;EAHC,CAjBW;EAsB9BqB,WAAW,EAAE;IACXQ,YAAY,EAAE;EADH,CAtBiB;EAyB9BJ,eAAe,EAAE;IACfxB,QAAQ,EAAE,UADK;IAEfO,IAAI,EAAE,CAFS;IAGfC,KAAK,EAAE,CAHQ;IAIf9D,MAAM,EAAE,CAJO;IAKfgF,aAAa,EAAE,KALA;IAMf5B,UAAU,EAAE,QANG;IAOfC,cAAc,EAAE,QAPD;IAQfa,iBAAiB,EAAE;EARJ;AAzBa,CAAD,CAA/B;AAqCA,eAAe5E,UAAf"}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","StatusBar","StyleSheet","TouchableOpacity","View","useSafeAreaInsets","Icon","Image","LoadingSpinner","Text","createStyleSheet","useAlert","useHeaderStyle","useToast","useUIKitTheme","Logger","getFileExtension","getFileType","isMyMessage","toMegabyte","useIIFE","useLocalization","usePlatformService","useSendbirdChat","FileViewer","headerShown","deleteMessage","headerTopInset","fileMessage","onPressDownload","onPressDelete","onClose","loading","setLoading","bottom","currentUser","palette","topInset","statusBarTranslucent","defaultHeight","STRINGS","fileService","mediaService","toast","alert","basicTopInset","canDelete","userId","fileType","type","url","VideoComponent","fileViewer","uri","absoluteFill","top","_onPressDelete","title","GROUP_CHANNEL","DIALOG_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL","DIALOG_MESSAGE_DELETE_CONFIRM_OK","style","onPress","then","catch","show","TOAST","DELETE_MSG_ERROR","_onPressDownload","size","DOWNLOAD_START","save","fileUrl","fileName","name","response","DOWNLOAD_OK","log","err","DOWNLOAD_ERROR","flex","backgroundColor","background700","alignItems","justifyContent","position","primary300","FILE_VIEWER","TITLE","SUBTITLE","FileViewerHeader","subtitle","left","right","styles","headerContainer","paddingLeft","paddingHorizontal","paddingRight","paddingTop","height","overlay01","barButton","onBackgroundDark01","barTitleContainer","headerTitle","FileViewerFooter","bottomInset","deleteShown","footerContainer","paddingBottom","flexDirection","width","marginBottom"],"sources":["FileViewer.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { StatusBar, StyleSheet, TouchableOpacity, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Icon,\n Image,\n LoadingSpinner,\n Text,\n createStyleSheet,\n useAlert,\n useHeaderStyle,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage } from '@sendbird/uikit-utils';\nimport { Logger, getFileExtension, getFileType, isMyMessage, toMegabyte, useIIFE } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';\n\ntype Props = {\n fileMessage: SendbirdFileMessage;\n deleteMessage: () => Promise<void>;\n\n onClose: () => void;\n onPressDownload?: (message: SendbirdFileMessage) => void;\n onPressDelete?: (message: SendbirdFileMessage) => void;\n\n headerShown?: boolean;\n headerTopInset?: number;\n};\nconst FileViewer = ({\n headerShown = true,\n deleteMessage,\n headerTopInset,\n fileMessage,\n onPressDownload,\n onPressDelete,\n onClose,\n}: Props) => {\n const [loading, setLoading] = useState(true);\n\n const { bottom } = useSafeAreaInsets();\n\n const { currentUser } = useSendbirdChat();\n const { palette } = useUIKitTheme();\n const { topInset, statusBarTranslucent, defaultHeight } = useHeaderStyle();\n const { STRINGS } = useLocalization();\n const { fileService, mediaService } = usePlatformService();\n const toast = useToast();\n const { alert } = useAlert();\n\n const basicTopInset = statusBarTranslucent ? topInset : 0;\n const canDelete = isMyMessage(fileMessage, currentUser?.userId);\n const fileType = getFileType(fileMessage.type || getFileExtension(fileMessage.url));\n\n useEffect(() => {\n if (!mediaService?.VideoComponent || fileType === 'file') {\n onClose();\n }\n }, [mediaService]);\n\n const fileViewer = useIIFE(() => {\n switch (fileType) {\n case 'image': {\n return (\n <Image\n source={{ uri: fileMessage.url }}\n style={StyleSheet.absoluteFill}\n resizeMode={'contain'}\n onLoadEnd={() => setLoading(false)}\n />\n );\n }\n\n case 'video':\n case 'audio': {\n if (!mediaService?.VideoComponent) return null;\n return (\n <mediaService.VideoComponent\n source={{ uri: fileMessage.url }}\n style={[StyleSheet.absoluteFill, { top: basicTopInset + defaultHeight, bottom: defaultHeight + bottom }]}\n resizeMode={'contain'}\n onLoad={() => setLoading(false)}\n />\n );\n }\n\n default: {\n return null;\n }\n }\n });\n\n const _onPressDelete = () => {\n if (!canDelete) return;\n\n if (onPressDelete) {\n onPressDelete(fileMessage);\n } else {\n alert({\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n deleteMessage()\n .then(() => {\n onClose();\n })\n .catch(() => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n });\n },\n },\n ],\n });\n }\n };\n\n const _onPressDownload = () => {\n if (onPressDownload) {\n onPressDownload(fileMessage);\n } else {\n if (toMegabyte(fileMessage.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: fileMessage.url, fileName: fileMessage.name, fileType: fileMessage.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 return (\n <View style={{ flex: 1, backgroundColor: palette.background700 }}>\n <StatusBar barStyle={'light-content'} animated />\n <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>\n {fileViewer}\n {loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}\n </View>\n {headerShown && (\n <FileViewerHeader\n title={STRINGS.FILE_VIEWER.TITLE(fileMessage)}\n subtitle={STRINGS.FILE_VIEWER.SUBTITLE(fileMessage)}\n topInset={headerTopInset ?? basicTopInset}\n onClose={onClose}\n />\n )}\n <FileViewerFooter\n bottomInset={bottom}\n deleteShown={canDelete}\n onPressDelete={_onPressDelete}\n onPressDownload={_onPressDownload}\n />\n </View>\n );\n};\n\ntype HeaderProps = {\n topInset: number;\n onClose: () => void;\n title: string;\n subtitle: string;\n};\nconst FileViewerHeader = ({ topInset, onClose, subtitle, title }: HeaderProps) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <View\n style={[\n styles.headerContainer,\n {\n paddingLeft: styles.headerContainer.paddingHorizontal + left,\n paddingRight: styles.headerContainer.paddingHorizontal + right,\n },\n { paddingTop: topInset, height: defaultHeight + topInset, backgroundColor: palette.overlay01 },\n ]}\n >\n <TouchableOpacity onPress={onClose} style={styles.barButton}>\n <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />\n </TouchableOpacity>\n <View style={styles.barTitleContainer}>\n <Text h2 color={palette.onBackgroundDark01} style={styles.headerTitle}>\n {title}\n </Text>\n <Text caption2 color={palette.onBackgroundDark01}>\n {subtitle}\n </Text>\n </View>\n <View style={styles.barButton} />\n </View>\n );\n};\n\ntype FooterProps = {\n bottomInset: number;\n deleteShown: boolean;\n onPressDelete: () => void;\n onPressDownload: () => void;\n};\nconst FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: FooterProps) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <View\n style={[\n styles.footerContainer,\n {\n paddingLeft: styles.headerContainer.paddingHorizontal + left,\n paddingRight: styles.headerContainer.paddingHorizontal + right,\n },\n {\n paddingBottom: bottomInset,\n height: defaultHeight + bottomInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <TouchableOpacity onPress={onPressDownload} style={styles.barButton}>\n <Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />\n </TouchableOpacity>\n <View style={styles.barTitleContainer} />\n <TouchableOpacity onPress={onPressDelete} style={styles.barButton} disabled={!deleteShown}>\n {deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}\n </TouchableOpacity>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n headerContainer: {\n top: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n barButton: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n barTitleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerTitle: {\n marginBottom: 2,\n },\n footerContainer: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n});\n\nexport default FileViewer;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';
|
|
2
3
|
import { Icon, LoadingSpinner, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
3
|
-
import { isDifferentChannel, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';
|
|
4
4
|
import { useSendbirdChat } from '../../hooks/useContext';
|
|
5
5
|
const SIZE = 16;
|
|
6
6
|
|
|
@@ -11,50 +11,21 @@ const MessageOutgoingStatus = _ref => {
|
|
|
11
11
|
} = _ref;
|
|
12
12
|
if (!message.isUserMessage() && !message.isFileMessage()) return null;
|
|
13
13
|
const {
|
|
14
|
-
sdk
|
|
15
|
-
features
|
|
14
|
+
sdk
|
|
16
15
|
} = useSendbirdChat();
|
|
17
16
|
const {
|
|
18
17
|
colors
|
|
19
18
|
} = useUIKitTheme();
|
|
20
|
-
const
|
|
21
|
-
const forceUpdate = useForceUpdate();
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
const handlerId = `MessageOutgoingStatus_${uniqId}`;
|
|
19
|
+
const outgoingStatus = useMessageOutgoingStatus(sdk, channel, message);
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
sdk.removeChannelHandler(handlerId);
|
|
27
|
-
} else {
|
|
28
|
-
const handler = new sdk.ChannelHandler();
|
|
29
|
-
|
|
30
|
-
handler.onReadReceiptUpdated = eventChannel => {
|
|
31
|
-
if (isDifferentChannel(channel, eventChannel)) return;
|
|
32
|
-
forceUpdate();
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
if (features.deliveryReceiptEnabled) {
|
|
36
|
-
handler.onDeliveryReceiptUpdated = eventChannel => {
|
|
37
|
-
if (isDifferentChannel(channel, eventChannel)) return;
|
|
38
|
-
forceUpdate();
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
sdk.addChannelHandler(handlerId, handler);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return () => {
|
|
46
|
-
sdk.removeChannelHandler(handlerId);
|
|
47
|
-
};
|
|
48
|
-
}, [message.sendingStatus]);
|
|
49
|
-
|
|
50
|
-
if (message.sendingStatus === 'pending') {
|
|
21
|
+
if (outgoingStatus === 'PENDING') {
|
|
51
22
|
return /*#__PURE__*/React.createElement(LoadingSpinner, {
|
|
52
23
|
size: SIZE,
|
|
53
24
|
style: styles.container
|
|
54
25
|
});
|
|
55
26
|
}
|
|
56
27
|
|
|
57
|
-
if (
|
|
28
|
+
if (outgoingStatus === 'FAILED') {
|
|
58
29
|
return /*#__PURE__*/React.createElement(Icon, {
|
|
59
30
|
icon: 'error',
|
|
60
31
|
size: SIZE,
|
|
@@ -63,7 +34,7 @@ const MessageOutgoingStatus = _ref => {
|
|
|
63
34
|
});
|
|
64
35
|
}
|
|
65
36
|
|
|
66
|
-
if (
|
|
37
|
+
if (outgoingStatus === 'READ') {
|
|
67
38
|
return /*#__PURE__*/React.createElement(Icon, {
|
|
68
39
|
icon: 'done-all',
|
|
69
40
|
size: SIZE,
|
|
@@ -72,16 +43,16 @@ const MessageOutgoingStatus = _ref => {
|
|
|
72
43
|
});
|
|
73
44
|
}
|
|
74
45
|
|
|
75
|
-
if (
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
46
|
+
if (outgoingStatus === 'UNREAD' || outgoingStatus === 'DELIVERED') {
|
|
47
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
48
|
+
icon: 'done-all',
|
|
49
|
+
size: SIZE,
|
|
50
|
+
color: colors.onBackground03,
|
|
51
|
+
style: styles.container
|
|
52
|
+
});
|
|
53
|
+
}
|
|
84
54
|
|
|
55
|
+
if (outgoingStatus === 'UNDELIVERED') {
|
|
85
56
|
return /*#__PURE__*/React.createElement(Icon, {
|
|
86
57
|
icon: 'done',
|
|
87
58
|
size: SIZE,
|
|
@@ -90,12 +61,7 @@ const MessageOutgoingStatus = _ref => {
|
|
|
90
61
|
});
|
|
91
62
|
}
|
|
92
63
|
|
|
93
|
-
return
|
|
94
|
-
icon: 'done-all',
|
|
95
|
-
size: SIZE,
|
|
96
|
-
color: colors.onBackground03,
|
|
97
|
-
style: styles.container
|
|
98
|
-
});
|
|
64
|
+
return null;
|
|
99
65
|
};
|
|
100
66
|
|
|
101
67
|
const styles = createStyleSheet({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","useMessageOutgoingStatus","Icon","LoadingSpinner","createStyleSheet","useUIKitTheme","useSendbirdChat","SIZE","MessageOutgoingStatus","channel","message","isUserMessage","isFileMessage","sdk","colors","outgoingStatus","styles","container","error","secondary","onBackground03","marginRight","memo"],"sources":["MessageOutgoingStatus.tsx"],"sourcesContent":["import React from 'react';\n\nimport { useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';\nimport { Icon, LoadingSpinner, createStyleSheet, 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 = { channel: SendbirdGroupChannel; message: SendbirdMessage };\nconst MessageOutgoingStatus = ({ channel, message }: Props) => {\n if (!message.isUserMessage() && !message.isFileMessage()) 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={styles.container} />;\n }\n\n if (outgoingStatus === 'FAILED') {\n return <Icon icon={'error'} size={SIZE} color={colors.error} style={styles.container} />;\n }\n\n if (outgoingStatus === 'READ') {\n return <Icon icon={'done-all'} size={SIZE} color={colors.secondary} style={styles.container} />;\n }\n\n if (outgoingStatus === 'UNREAD' || outgoingStatus === 'DELIVERED') {\n return <Icon icon={'done-all'} size={SIZE} color={colors.onBackground03} style={styles.container} />;\n }\n\n if (outgoingStatus === 'UNDELIVERED') {\n return <Icon icon={'done'} size={SIZE} color={colors.onBackground03} style={styles.container} />;\n }\n\n return null;\n};\n\nconst styles = createStyleSheet({\n container: {\n marginRight: 4,\n },\n});\n\nexport default React.memo(MessageOutgoingStatus);\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,SAASC,wBAAT,QAAyC,4BAAzC;AACA,SAASC,IAAT,EAAeC,cAAf,EAA+BC,gBAA/B,EAAiDC,aAAjD,QAAsE,yCAAtE;AAGA,SAASC,eAAT,QAAgC,wBAAhC;AAEA,MAAMC,IAAI,GAAG,EAAb;;AAGA,MAAMC,qBAAqB,GAAG,QAAiC;EAAA,IAAhC;IAAEC,OAAF;IAAWC;EAAX,CAAgC;EAC7D,IAAI,CAACA,OAAO,CAACC,aAAR,EAAD,IAA4B,CAACD,OAAO,CAACE,aAAR,EAAjC,EAA0D,OAAO,IAAP;EAE1D,MAAM;IAAEC;EAAF,IAAUP,eAAe,EAA/B;EACA,MAAM;IAAEQ;EAAF,IAAaT,aAAa,EAAhC;EACA,MAAMU,cAAc,GAAGd,wBAAwB,CAACY,GAAD,EAAMJ,OAAN,EAAeC,OAAf,CAA/C;;EAEA,IAAIK,cAAc,KAAK,SAAvB,EAAkC;IAChC,oBAAO,oBAAC,cAAD;MAAgB,IAAI,EAAER,IAAtB;MAA4B,KAAK,EAAES,MAAM,CAACC;IAA1C,EAAP;EACD;;EAED,IAAIF,cAAc,KAAK,QAAvB,EAAiC;IAC/B,oBAAO,oBAAC,IAAD;MAAM,IAAI,EAAE,OAAZ;MAAqB,IAAI,EAAER,IAA3B;MAAiC,KAAK,EAAEO,MAAM,CAACI,KAA/C;MAAsD,KAAK,EAAEF,MAAM,CAACC;IAApE,EAAP;EACD;;EAED,IAAIF,cAAc,KAAK,MAAvB,EAA+B;IAC7B,oBAAO,oBAAC,IAAD;MAAM,IAAI,EAAE,UAAZ;MAAwB,IAAI,EAAER,IAA9B;MAAoC,KAAK,EAAEO,MAAM,CAACK,SAAlD;MAA6D,KAAK,EAAEH,MAAM,CAACC;IAA3E,EAAP;EACD;;EAED,IAAIF,cAAc,KAAK,QAAnB,IAA+BA,cAAc,KAAK,WAAtD,EAAmE;IACjE,oBAAO,oBAAC,IAAD;MAAM,IAAI,EAAE,UAAZ;MAAwB,IAAI,EAAER,IAA9B;MAAoC,KAAK,EAAEO,MAAM,CAACM,cAAlD;MAAkE,KAAK,EAAEJ,MAAM,CAACC;IAAhF,EAAP;EACD;;EAED,IAAIF,cAAc,KAAK,aAAvB,EAAsC;IACpC,oBAAO,oBAAC,IAAD;MAAM,IAAI,EAAE,MAAZ;MAAoB,IAAI,EAAER,IAA1B;MAAgC,KAAK,EAAEO,MAAM,CAACM,cAA9C;MAA8D,KAAK,EAAEJ,MAAM,CAACC;IAA5E,EAAP;EACD;;EAED,OAAO,IAAP;AACD,CA5BD;;AA8BA,MAAMD,MAAM,GAAGZ,gBAAgB,CAAC;EAC9Ba,SAAS,EAAE;IACTI,WAAW,EAAE;EADJ;AADmB,CAAD,CAA/B;AAMA,4BAAerB,KAAK,CAACsB,IAAN,CAAWd,qBAAX,CAAf"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import Icon from '@sendbird/uikit-react-native-foundation
|
|
5
|
-
import { getFileExtension, getFileType, isDifferentChannel, isMyMessage,
|
|
2
|
+
import { Pressable } from 'react-native';
|
|
3
|
+
import { useChannelHandler, useMessageOutgoingStatus } from '@sendbird/uikit-chat-hooks';
|
|
4
|
+
import { GroupChannelPreview, Icon, LoadingSpinner, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
import { getFileExtension, getFileType, isDifferentChannel, isMyMessage, useIIFE, useUniqId } from '@sendbird/uikit-utils';
|
|
6
|
+
import ChannelCover from '../components/ChannelCover';
|
|
7
|
+
import { DEFAULT_LONG_PRESS_DELAY } from '../constants';
|
|
6
8
|
import { useLocalization, useSendbirdChat } from '../hooks/useContext';
|
|
7
|
-
import ChannelCover from './ChannelCover';
|
|
8
|
-
import SBUPressable from './SBUPressable';
|
|
9
9
|
const iconMapper = {
|
|
10
10
|
audio: 'file-audio',
|
|
11
11
|
image: 'photo',
|
|
@@ -31,7 +31,6 @@ const GroupChannelPreviewContainer = _ref => {
|
|
|
31
31
|
colors
|
|
32
32
|
} = useUIKitTheme();
|
|
33
33
|
const [typingUsers, setTypingUsers] = useState([]);
|
|
34
|
-
const forceUpdate = useForceUpdate();
|
|
35
34
|
|
|
36
35
|
if (features.channelListTypingIndicatorEnabled) {
|
|
37
36
|
const typingId = useUniqId('GroupChannelPreviewContainer');
|
|
@@ -44,26 +43,7 @@ const GroupChannelPreviewContainer = _ref => {
|
|
|
44
43
|
});
|
|
45
44
|
}
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
const receiptId = useUniqId('GroupChannelPreviewContainer');
|
|
49
|
-
useChannelHandler(sdk, `GroupChannelPreviewContainer_ReceiptStatus_${receiptId}`, {
|
|
50
|
-
onDeliveryReceiptUpdated(eventChannel) {
|
|
51
|
-
if (isDifferentChannel(channel, eventChannel)) return;
|
|
52
|
-
if (!eventChannel.isGroupChannel() || !eventChannel.lastMessage) return;
|
|
53
|
-
if (!isMyMessage(eventChannel.lastMessage, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return;
|
|
54
|
-
forceUpdate();
|
|
55
|
-
},
|
|
56
|
-
|
|
57
|
-
onReadReceiptUpdated(eventChannel) {
|
|
58
|
-
if (isDifferentChannel(channel, eventChannel)) return;
|
|
59
|
-
if (!eventChannel.isGroupChannel() || !eventChannel.lastMessage) return;
|
|
60
|
-
if (!isMyMessage(eventChannel.lastMessage, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return;
|
|
61
|
-
forceUpdate();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
46
|
+
const outgoingStatus = useMessageOutgoingStatus(sdk, channel, channel.lastMessage);
|
|
67
47
|
const bodyText = useIIFE(() => {
|
|
68
48
|
if (typingUsers.length > 0) return STRINGS.LABELS.TYPING_INDICATOR_TYPINGS(typingUsers) || '';else return STRINGS.GROUP_CHANNEL_LIST.CHANNEL_PREVIEW_BODY(channel);
|
|
69
49
|
});
|
|
@@ -71,6 +51,7 @@ const GroupChannelPreviewContainer = _ref => {
|
|
|
71
51
|
var _channel$lastMessage;
|
|
72
52
|
|
|
73
53
|
if (!((_channel$lastMessage = channel.lastMessage) !== null && _channel$lastMessage !== void 0 && _channel$lastMessage.isFileMessage())) return undefined;
|
|
54
|
+
if (typingUsers.length > 0) return undefined;
|
|
74
55
|
return iconMapper[getFileType(channel.lastMessage.type || getFileExtension(channel.lastMessage.name))];
|
|
75
56
|
});
|
|
76
57
|
const titleCaptionIcon = useIIFE(() => {
|
|
@@ -78,14 +59,14 @@ const GroupChannelPreviewContainer = _ref => {
|
|
|
78
59
|
if (!features.channelListMessageReceiptStatusEnabled) return undefined;
|
|
79
60
|
if (!isMyMessage(channel.lastMessage, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return undefined;
|
|
80
61
|
|
|
81
|
-
if (
|
|
62
|
+
if (outgoingStatus === 'PENDING') {
|
|
82
63
|
return /*#__PURE__*/React.createElement(LoadingSpinner, {
|
|
83
64
|
size: 16,
|
|
84
65
|
style: styles.titleCaptionIcon
|
|
85
66
|
});
|
|
86
67
|
}
|
|
87
68
|
|
|
88
|
-
if (
|
|
69
|
+
if (outgoingStatus === 'FAILED') {
|
|
89
70
|
return /*#__PURE__*/React.createElement(Icon, {
|
|
90
71
|
icon: 'error',
|
|
91
72
|
size: 16,
|
|
@@ -94,41 +75,37 @@ const GroupChannelPreviewContainer = _ref => {
|
|
|
94
75
|
});
|
|
95
76
|
}
|
|
96
77
|
|
|
97
|
-
if (
|
|
78
|
+
if (outgoingStatus === 'UNDELIVERED') {
|
|
79
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
80
|
+
icon: 'done',
|
|
81
|
+
size: 16,
|
|
82
|
+
color: colors.onBackground03,
|
|
83
|
+
containerStyle: styles.titleCaptionIcon
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (outgoingStatus === 'DELIVERED' || outgoingStatus === 'UNREAD') {
|
|
98
88
|
return /*#__PURE__*/React.createElement(Icon, {
|
|
99
89
|
icon: 'done-all',
|
|
100
90
|
size: 16,
|
|
101
|
-
color: colors.
|
|
91
|
+
color: colors.onBackground03,
|
|
102
92
|
style: styles.titleCaptionIcon
|
|
103
93
|
});
|
|
104
94
|
}
|
|
105
95
|
|
|
106
|
-
if (
|
|
107
|
-
if (channel.getUndeliveredMemberCount(channel.lastMessage) === 0) {
|
|
108
|
-
return /*#__PURE__*/React.createElement(Icon, {
|
|
109
|
-
icon: 'done-all',
|
|
110
|
-
size: 16,
|
|
111
|
-
color: colors.onBackground03,
|
|
112
|
-
style: styles.titleCaptionIcon
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
|
|
96
|
+
if (outgoingStatus === 'READ') {
|
|
116
97
|
return /*#__PURE__*/React.createElement(Icon, {
|
|
117
|
-
icon: 'done',
|
|
98
|
+
icon: 'done-all',
|
|
118
99
|
size: 16,
|
|
119
|
-
color: colors.
|
|
120
|
-
|
|
100
|
+
color: colors.secondary,
|
|
101
|
+
style: styles.titleCaptionIcon
|
|
121
102
|
});
|
|
122
103
|
}
|
|
123
104
|
|
|
124
|
-
return
|
|
125
|
-
icon: 'done-all',
|
|
126
|
-
size: 16,
|
|
127
|
-
color: colors.onBackground03,
|
|
128
|
-
style: styles.titleCaptionIcon
|
|
129
|
-
});
|
|
105
|
+
return undefined;
|
|
130
106
|
});
|
|
131
|
-
return /*#__PURE__*/React.createElement(
|
|
107
|
+
return /*#__PURE__*/React.createElement(Pressable, {
|
|
108
|
+
delayLongPress: DEFAULT_LONG_PRESS_DELAY,
|
|
132
109
|
onPress: onPress,
|
|
133
110
|
onLongPress: onLongPress
|
|
134
111
|
}, /*#__PURE__*/React.createElement(GroupChannelPreview, {
|