@sendbird/uikit-chat-hooks 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/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
- package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelList/reducer.js +184 -0
- package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +134 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +118 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/common/useMessageOutgoingStatus.js +49 -0
- package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -0
- package/lib/commonjs/index.js +12 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
- package/lib/module/channel/useGroupChannelList/index.js.map +1 -0
- package/lib/module/channel/useGroupChannelList/reducer.js +174 -0
- package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +120 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +104 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/common/useMessageOutgoingStatus.js +36 -0
- package/lib/module/common/useMessageOutgoingStatus.js.map +1 -0
- package/lib/module/index.js +4 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/channel/{useGroupChannelList.d.ts → useGroupChannelList/index.d.ts} +1 -1
- package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +14 -0
- package/lib/typescript/src/channel/{useGroupChannelListWithCollection.d.ts → useGroupChannelList/useGroupChannelListWithCollection.d.ts} +1 -1
- package/lib/typescript/src/channel/{useGroupChannelListWithQuery.d.ts → useGroupChannelList/useGroupChannelListWithQuery.d.ts} +1 -1
- package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +3 -0
- package/lib/typescript/src/index.d.ts +4 -3
- package/lib/typescript/src/types.d.ts +0 -7
- package/package.json +3 -3
- package/src/channel/{useGroupChannelList.ts → useGroupChannelList/index.ts} +1 -1
- package/src/channel/useGroupChannelList/reducer.ts +154 -0
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +116 -0
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +114 -0
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +3 -3
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +2 -2
- package/src/common/useMessageOutgoingStatus.ts +56 -0
- package/src/index.ts +4 -3
- package/src/types.ts +0 -8
- package/lib/commonjs/channel/useGroupChannelList.js.map +0 -1
- package/lib/commonjs/channel/useGroupChannelListWithCollection.js +0 -148
- package/lib/commonjs/channel/useGroupChannelListWithCollection.js.map +0 -1
- package/lib/commonjs/channel/useGroupChannelListWithQuery.js +0 -130
- package/lib/commonjs/channel/useGroupChannelListWithQuery.js.map +0 -1
- package/lib/module/channel/useGroupChannelList.js.map +0 -1
- package/lib/module/channel/useGroupChannelListWithCollection.js +0 -135
- package/lib/module/channel/useGroupChannelListWithCollection.js.map +0 -1
- package/lib/module/channel/useGroupChannelListWithQuery.js +0 -117
- package/lib/module/channel/useGroupChannelListWithQuery.js.map +0 -1
- package/src/channel/useGroupChannelListWithCollection.ts +0 -139
- package/src/channel/useGroupChannelListWithQuery.ts +0 -119
|
@@ -56,13 +56,13 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
|
|
|
56
56
|
try {
|
|
57
57
|
if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);
|
|
58
58
|
} catch (e) {
|
|
59
|
-
_uikitUtils.Logger.
|
|
59
|
+
_uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
try {
|
|
63
63
|
await sdk.markAsReadWithChannelUrls([activeChannel.url]);
|
|
64
64
|
} catch (e) {
|
|
65
|
-
_uikitUtils.Logger.
|
|
65
|
+
_uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
68
|
|
package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createMessageQuery","channel","creator","query","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","deliveryReceiptEnabled","useAppFeatures","queryRef","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","markAsDelivered","url","e","Logger","error","markAsReadWithChannelUrls","init","useCallback","uid","current","queryCreator","hasMore","list","load","currentUser","channelUpdater","isGroupChannel","isDifferentChannel","useChannelHandler","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserEntered","onUserExited","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","useAsyncEffect","refresh","prev","next","length","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","sentMessage","sendFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","isUserMessage","resendUserMessage","isFileMessage","resendFileMessage","deleteMessage","sendingStatus","reqId"],"sources":["useGroupChannelMessagesWithQuery.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport type { SendbirdFileMessage, SendbirdGroupChannel, SendbirdOpenChannel } from '@sendbird/uikit-utils';\nimport { Logger, isDifferentChannel, useAsyncEffect, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageQuery = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['queryCreator'],\n) => {\n if (creator) return creator();\n const query = channel.createPreviousMessageListQuery();\n query.limit = 100;\n query.reverse = true;\n return query;\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithQuery';\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const queryRef = useRef<Sendbird.PreviousMessageListQuery>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n const forceUpdate = useForceUpdate();\n\n const {\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n updateMessages,\n updateNextMessages,\n deleteNextMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAs = async () => {\n try {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);\n } catch (e) {\n Logger.error(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await sdk.markAsReadWithChannelUrls([activeChannel.url]);\n } catch (e) {\n Logger.error(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(activeChannel, options?.queryCreator);\n channelMarkAs();\n if (queryRef.current?.hasMore) {\n const list = await queryRef.current?.load();\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n },\n [sdk, activeChannel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdGroupChannel | SendbirdOpenChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n setActiveChannel(channel);\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, HOOK_NAME, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n channelMarkAs();\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const channel = channels.find((c) => !isDifferentChannel(c, activeChannel));\n if (channel) channelUpdater(channel);\n },\n onChannelDeleted(channelUrl: string) {\n if (activeChannel.url === channelUrl) options?.onChannelDeleted?.();\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserLeft: channelUpdater,\n onUserEntered: channelUpdater,\n onUserExited: channelUpdater,\n onUserJoined: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (queryRef.current && queryRef.current?.hasMore) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n });\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n });\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateNextMessages([message], false, sdk.currentUser.userId);\n },\n [activeChannel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await activeChannel.deleteMessage(message);\n if (message.isFileMessage()) await activeChannel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\n },\n [activeChannel],\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n activeChannel,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createMessageQuery","channel","creator","query","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","deliveryReceiptEnabled","useAppFeatures","queryRef","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","markAsDelivered","url","e","Logger","warn","markAsReadWithChannelUrls","init","useCallback","uid","current","queryCreator","hasMore","list","load","currentUser","channelUpdater","isGroupChannel","isDifferentChannel","useChannelHandler","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserEntered","onUserExited","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","useAsyncEffect","refresh","prev","next","length","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","sentMessage","error","sendFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","isUserMessage","resendUserMessage","isFileMessage","resendFileMessage","deleteMessage","sendingStatus","reqId"],"sources":["useGroupChannelMessagesWithQuery.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport type { SendbirdFileMessage, SendbirdGroupChannel, SendbirdOpenChannel } from '@sendbird/uikit-utils';\nimport { Logger, isDifferentChannel, useAsyncEffect, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageQuery = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['queryCreator'],\n) => {\n if (creator) return creator();\n const query = channel.createPreviousMessageListQuery();\n query.limit = 100;\n query.reverse = true;\n return query;\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithQuery';\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const queryRef = useRef<Sendbird.PreviousMessageListQuery>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n const forceUpdate = useForceUpdate();\n\n const {\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n updateMessages,\n updateNextMessages,\n deleteNextMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAs = async () => {\n try {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await sdk.markAsReadWithChannelUrls([activeChannel.url]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(activeChannel, options?.queryCreator);\n channelMarkAs();\n if (queryRef.current?.hasMore) {\n const list = await queryRef.current?.load();\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n },\n [sdk, activeChannel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdGroupChannel | SendbirdOpenChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n setActiveChannel(channel);\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, HOOK_NAME, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n channelMarkAs();\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const channel = channels.find((c) => !isDifferentChannel(c, activeChannel));\n if (channel) channelUpdater(channel);\n },\n onChannelDeleted(channelUrl: string) {\n if (activeChannel.url === channelUrl) options?.onChannelDeleted?.();\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserLeft: channelUpdater,\n onUserEntered: channelUpdater,\n onUserExited: channelUpdater,\n onUserJoined: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (queryRef.current && queryRef.current?.hasMore) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n });\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n });\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateNextMessages([message], false, sdk.currentUser.userId);\n },\n [activeChannel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await activeChannel.deleteMessage(message);\n if (message.isFileMessage()) await activeChannel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\n },\n [activeChannel],\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n activeChannel,\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useMessageOutgoingStatus = void 0;
|
|
7
|
+
|
|
8
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
9
|
+
|
|
10
|
+
var _useChannelHandler = require("../handler/useChannelHandler");
|
|
11
|
+
|
|
12
|
+
var _useAppFeatures = require("./useAppFeatures");
|
|
13
|
+
|
|
14
|
+
const HOOK_NAME = 'useMessageOutgoingStatus';
|
|
15
|
+
|
|
16
|
+
const useMessageOutgoingStatus = (sdk, channel, message) => {
|
|
17
|
+
const features = (0, _useAppFeatures.useAppFeatures)(sdk);
|
|
18
|
+
const forceUpdate = (0, _uikitUtils.useForceUpdate)();
|
|
19
|
+
const currentUser = sdk.currentUser;
|
|
20
|
+
const uniqId = (0, _uikitUtils.useUniqId)(HOOK_NAME);
|
|
21
|
+
(0, _useChannelHandler.useChannelHandler)(sdk, `${HOOK_NAME}_${uniqId}`, {
|
|
22
|
+
onDeliveryReceiptUpdated(eventChannel) {
|
|
23
|
+
if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
|
|
24
|
+
if (!(0, _uikitUtils.isMyMessage)(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return;
|
|
25
|
+
forceUpdate();
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
onReadReceiptUpdated(eventChannel) {
|
|
29
|
+
if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
|
|
30
|
+
if (!(0, _uikitUtils.isMyMessage)(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return;
|
|
31
|
+
forceUpdate();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
});
|
|
35
|
+
if (!message) return 'NONE';
|
|
36
|
+
if (message.sendingStatus === 'pending') return 'PENDING';
|
|
37
|
+
if (message.sendingStatus === 'failed') return 'FAILED';
|
|
38
|
+
if (channel.getUnreadMemberCount(message) === 0) return 'READ';
|
|
39
|
+
|
|
40
|
+
if (features.deliveryReceiptEnabled) {
|
|
41
|
+
if (channel.getUndeliveredMemberCount(message) === 0) return 'DELIVERED';
|
|
42
|
+
return 'UNDELIVERED';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return 'UNREAD';
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
exports.useMessageOutgoingStatus = useMessageOutgoingStatus;
|
|
49
|
+
//# sourceMappingURL=useMessageOutgoingStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["HOOK_NAME","useMessageOutgoingStatus","sdk","channel","message","features","useAppFeatures","forceUpdate","useForceUpdate","currentUser","uniqId","useUniqId","useChannelHandler","onDeliveryReceiptUpdated","eventChannel","isDifferentChannel","isMyMessage","userId","onReadReceiptUpdated","sendingStatus","getUnreadMemberCount","deliveryReceiptEnabled","getUndeliveredMemberCount"],"sources":["useMessageOutgoingStatus.ts"],"sourcesContent":["import type {\n SendbirdAdminMessage,\n SendbirdChatSDK,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n} from '@sendbird/uikit-utils';\nimport { isDifferentChannel, isMyMessage, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport { useAppFeatures } from './useAppFeatures';\n\nconst HOOK_NAME = 'useMessageOutgoingStatus';\n\nexport type SBUOutgoingStatus = 'NONE' | 'PENDING' | 'FAILED' | 'UNDELIVERED' | 'DELIVERED' | 'UNREAD' | 'READ';\n\nexport const useMessageOutgoingStatus = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n message?: SendbirdFileMessage | SendbirdUserMessage | SendbirdAdminMessage | null,\n): SBUOutgoingStatus => {\n const features = useAppFeatures(sdk);\n const forceUpdate = useForceUpdate();\n const currentUser = sdk.currentUser;\n\n const uniqId = useUniqId(HOOK_NAME);\n useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {\n onDeliveryReceiptUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n onReadReceiptUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n });\n\n if (!message) return 'NONE';\n\n if (message.sendingStatus === 'pending') return 'PENDING';\n\n if (message.sendingStatus === 'failed') return 'FAILED';\n\n if (channel.getUnreadMemberCount(message) === 0) return 'READ';\n\n if (features.deliveryReceiptEnabled) {\n if (channel.getUndeliveredMemberCount(message) === 0) return 'DELIVERED';\n return 'UNDELIVERED';\n }\n\n return 'UNREAD';\n};\n"],"mappings":";;;;;;;AAOA;;AAEA;;AACA;;AAEA,MAAMA,SAAS,GAAG,0BAAlB;;AAIO,MAAMC,wBAAwB,GAAG,CACtCC,GADsC,EAEtCC,OAFsC,EAGtCC,OAHsC,KAIhB;EACtB,MAAMC,QAAQ,GAAG,IAAAC,8BAAA,EAAeJ,GAAf,CAAjB;EACA,MAAMK,WAAW,GAAG,IAAAC,0BAAA,GAApB;EACA,MAAMC,WAAW,GAAGP,GAAG,CAACO,WAAxB;EAEA,MAAMC,MAAM,GAAG,IAAAC,qBAAA,EAAUX,SAAV,CAAf;EACA,IAAAY,oCAAA,EAAkBV,GAAlB,EAAwB,GAAEF,SAAU,IAAGU,MAAO,EAA9C,EAAiD;IAC/CG,wBAAwB,CAACC,YAAD,EAAe;MACrC,IAAI,IAAAC,8BAAA,EAAmBZ,OAAnB,EAA4BW,YAA5B,CAAJ,EAA+C;MAC/C,IAAI,CAAC,IAAAE,uBAAA,EAAYZ,OAAZ,EAAqBK,WAArB,aAAqBA,WAArB,uBAAqBA,WAAW,CAAEQ,MAAlC,CAAL,EAAgD;MAEhDV,WAAW;IACZ,CAN8C;;IAO/CW,oBAAoB,CAACJ,YAAD,EAAe;MACjC,IAAI,IAAAC,8BAAA,EAAmBZ,OAAnB,EAA4BW,YAA5B,CAAJ,EAA+C;MAC/C,IAAI,CAAC,IAAAE,uBAAA,EAAYZ,OAAZ,EAAqBK,WAArB,aAAqBA,WAArB,uBAAqBA,WAAW,CAAEQ,MAAlC,CAAL,EAAgD;MAEhDV,WAAW;IACZ;;EAZ8C,CAAjD;EAeA,IAAI,CAACH,OAAL,EAAc,OAAO,MAAP;EAEd,IAAIA,OAAO,CAACe,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;EAEzC,IAAIf,OAAO,CAACe,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EAExC,IAAIhB,OAAO,CAACiB,oBAAR,CAA6BhB,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACgB,sBAAb,EAAqC;IACnC,IAAIlB,OAAO,CAACmB,yBAAR,CAAkClB,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CAvCM"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -45,6 +45,12 @@ Object.defineProperty(exports, "useGroupChannelMessages", {
|
|
|
45
45
|
return _useGroupChannelMessages.useGroupChannelMessages;
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
|
+
Object.defineProperty(exports, "useMessageOutgoingStatus", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _useMessageOutgoingStatus.useMessageOutgoingStatus;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
48
54
|
Object.defineProperty(exports, "usePushTrigger", {
|
|
49
55
|
enumerable: true,
|
|
50
56
|
get: function () {
|
|
@@ -82,15 +88,17 @@ var _useGroupChannelMessages = require("./channel/useGroupChannelMessages");
|
|
|
82
88
|
|
|
83
89
|
var _useActiveGroupChannel = require("./channel/useActiveGroupChannel");
|
|
84
90
|
|
|
85
|
-
var
|
|
91
|
+
var _useAppFeatures = require("./common/useAppFeatures");
|
|
86
92
|
|
|
87
|
-
var
|
|
93
|
+
var _useMessageOutgoingStatus = require("./common/useMessageOutgoingStatus");
|
|
88
94
|
|
|
89
|
-
var
|
|
95
|
+
var _usePushTrigger = require("./common/usePushTrigger");
|
|
90
96
|
|
|
91
97
|
var _useTotalUnreadChannelCount = require("./common/useTotalUnreadChannelCount");
|
|
92
98
|
|
|
93
|
-
var
|
|
99
|
+
var _useTotalUnreadMessageCount = require("./common/useTotalUnreadMessageCount");
|
|
100
|
+
|
|
101
|
+
var _useUserList = require("./common/useUserList");
|
|
94
102
|
|
|
95
103
|
var _useChannelHandler = require("./handler/useChannelHandler");
|
|
96
104
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { useGroupChannelList } from './channel/useGroupChannelList';\nexport { useGroupChannelMessages } from './channel/useGroupChannelMessages';\nexport { useActiveGroupChannel } from './channel/useActiveGroupChannel';\n\nexport {
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { useGroupChannelList } from './channel/useGroupChannelList';\nexport { useGroupChannelMessages } from './channel/useGroupChannelMessages';\nexport { useActiveGroupChannel } from './channel/useActiveGroupChannel';\n\nexport { useAppFeatures } from './common/useAppFeatures';\nexport { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';\nexport { usePushTrigger } from './common/usePushTrigger';\nexport { useTotalUnreadChannelCount } from './common/useTotalUnreadChannelCount';\nexport { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';\nexport { useUserList } from './common/useUserList';\n\nexport { useChannelHandler } from './handler/useChannelHandler';\nexport { useConnectionHandler } from './handler/useConnectionHandler';\nexport { useUserEventHandler } from './handler/useUserEventHandler';\n\nexport { CustomQuery } from './model/CustomQuery';\n\nexport type {\n UseGroupChannelList,\n UseGroupChannelListOptions,\n UseGroupChannelMessages,\n UseUserListOptions,\n UseGroupChannelMessagesOptions,\n UseUserListReturn,\n CustomQueryInterface,\n CustomBidirectionalQueryInterface,\n} from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type Sendbird from 'sendbird';\n\nimport type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdUserMessage,\n SendbirdUserMessageParams,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n *
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type Sendbird from 'sendbird';\n\nimport type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdUserMessage,\n SendbirdUserMessageParams,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get group channels state\n * */\n groupChannels: SendbirdGroupChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseGroupChannelListOptions = {\n queryCreator?: () => Sendbird.GroupChannelListQuery;\n collectionCreator?: () => SendbirdGroupChannelCollection;\n enableCollectionWithoutLocalCache?: boolean;\n};\n\n/**\n * @interface UseGroupChannelMessages\n * @description interface for group channel messages hook\n * - Receive new messages from other users -> append to state(nextMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> nextMessages append to state(messages)\n * */\nexport interface UseGroupChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Get messages, this state is for temporary data before render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * */\n nextMessages: SendbirdMessage[];\n\n /**\n * Get new messages from nextMessages\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessagesFromMembers: SendbirdMessage[];\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Activated channel\n * */\n activeChannel: SendbirdGroupChannel;\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => Sendbird.PreviousMessageListQuery;\n collectionCreator?: () => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User> {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get users state\n * */\n users: User[];\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useGroupChannelListWithCollection","useGroupChannelListWithQuery","useGroupChannelList","sdk","userId","options","isCacheEnabled","enableCollectionWithoutLocalCache"],"sources":["index.ts"],"sourcesContent":["import type { UseGroupChannelList } from '../../types';\nimport { useGroupChannelListWithCollection } from './useGroupChannelListWithCollection';\nimport { useGroupChannelListWithQuery } from './useGroupChannelListWithQuery';\n\nexport const useGroupChannelList: UseGroupChannelList = (sdk, userId, options) => {\n if (sdk.isCacheEnabled || options?.enableCollectionWithoutLocalCache) {\n return useGroupChannelListWithCollection(sdk, userId, options);\n } else {\n return useGroupChannelListWithQuery(sdk, userId, options);\n }\n};\n"],"mappings":"AACA,SAASA,iCAAT,QAAkD,qCAAlD;AACA,SAASC,4BAAT,QAA6C,gCAA7C;AAEA,OAAO,MAAMC,mBAAwC,GAAG,CAACC,GAAD,EAAMC,MAAN,EAAcC,OAAd,KAA0B;EAChF,IAAIF,GAAG,CAACG,cAAJ,IAAsBD,OAAtB,aAAsBA,OAAtB,eAAsBA,OAAO,CAAEE,iCAAnC,EAAsE;IACpE,OAAOP,iCAAiC,CAACG,GAAD,EAAMC,MAAN,EAAcC,OAAd,CAAxC;EACD,CAFD,MAEO;IACL,OAAOJ,4BAA4B,CAACE,GAAD,EAAMC,MAAN,EAAcC,OAAd,CAAnC;EACD;AACF,CANM"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { useReducer } from 'react';
|
|
2
|
+
import { getGroupChannels } from '@sendbird/uikit-utils';
|
|
3
|
+
|
|
4
|
+
const defaultReducer = (_ref, action) => {
|
|
5
|
+
let { ...draft
|
|
6
|
+
} = _ref;
|
|
7
|
+
const compareByOrder = createCompareByOrder(draft.order);
|
|
8
|
+
|
|
9
|
+
switch (action.type) {
|
|
10
|
+
case 'update_refreshing':
|
|
11
|
+
case 'update_loading':
|
|
12
|
+
{
|
|
13
|
+
const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
|
|
14
|
+
draft[key] = action.value.status;
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
case 'update_channels':
|
|
19
|
+
{
|
|
20
|
+
getGroupChannels(action.value.channels).forEach(freshChannel => {
|
|
21
|
+
const idx = draft.groupChannels.findIndex(staleChannel => staleChannel.url === freshChannel.url);
|
|
22
|
+
if (idx > -1) draft.groupChannels[idx] = freshChannel;
|
|
23
|
+
});
|
|
24
|
+
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
case 'delete_channels':
|
|
29
|
+
{
|
|
30
|
+
action.value.channelUrls.forEach(url => {
|
|
31
|
+
const idx = draft.groupChannels.findIndex(c => c.url === url);
|
|
32
|
+
if (idx > -1) draft.groupChannels.splice(idx, 1);
|
|
33
|
+
});
|
|
34
|
+
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
case 'set_channels':
|
|
39
|
+
{
|
|
40
|
+
if (action.value.clearPrev) {
|
|
41
|
+
draft.groupChannels = getGroupChannels(action.value.channels);
|
|
42
|
+
} else {
|
|
43
|
+
draft.groupChannels = [...draft.groupChannels, ...getGroupChannels(action.value.channels)];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
case 'update_order':
|
|
51
|
+
{
|
|
52
|
+
draft.order = action.value.order;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return draft;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const useGroupChannelListReducer = order => {
|
|
61
|
+
const [{
|
|
62
|
+
loading,
|
|
63
|
+
refreshing,
|
|
64
|
+
groupChannels
|
|
65
|
+
}, dispatch] = useReducer(defaultReducer, {
|
|
66
|
+
loading: true,
|
|
67
|
+
refreshing: false,
|
|
68
|
+
groupChannels: [],
|
|
69
|
+
order
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const updateChannels = channels => {
|
|
73
|
+
dispatch({
|
|
74
|
+
type: 'update_channels',
|
|
75
|
+
value: {
|
|
76
|
+
channels
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const deleteChannels = channelUrls => {
|
|
82
|
+
dispatch({
|
|
83
|
+
type: 'delete_channels',
|
|
84
|
+
value: {
|
|
85
|
+
channelUrls
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const setChannels = (channels, clearPrev) => {
|
|
91
|
+
dispatch({
|
|
92
|
+
type: 'set_channels',
|
|
93
|
+
value: {
|
|
94
|
+
channels,
|
|
95
|
+
clearPrev
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const updateLoading = status => {
|
|
101
|
+
dispatch({
|
|
102
|
+
type: 'update_loading',
|
|
103
|
+
value: {
|
|
104
|
+
status
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const updateRefreshing = status => {
|
|
110
|
+
dispatch({
|
|
111
|
+
type: 'update_refreshing',
|
|
112
|
+
value: {
|
|
113
|
+
status
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const updateOrder = order => {
|
|
119
|
+
dispatch({
|
|
120
|
+
type: 'update_order',
|
|
121
|
+
value: {
|
|
122
|
+
order
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
updateLoading,
|
|
129
|
+
updateRefreshing,
|
|
130
|
+
updateChannels,
|
|
131
|
+
deleteChannels,
|
|
132
|
+
setChannels,
|
|
133
|
+
updateOrder,
|
|
134
|
+
loading,
|
|
135
|
+
refreshing,
|
|
136
|
+
groupChannels
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const createCompareByOrder = order => {
|
|
141
|
+
if (!order) return undefined;
|
|
142
|
+
return (channel1, channel2) => {
|
|
143
|
+
switch (order) {
|
|
144
|
+
case 'latest_last_message':
|
|
145
|
+
{
|
|
146
|
+
if (channel1.lastMessage && channel2.lastMessage) {
|
|
147
|
+
return channel2.lastMessage.createdAt - channel1.lastMessage.createdAt;
|
|
148
|
+
} else if (channel1.lastMessage) {
|
|
149
|
+
return -1;
|
|
150
|
+
} else if (channel2.lastMessage) {
|
|
151
|
+
return 1;
|
|
152
|
+
} else {
|
|
153
|
+
return channel2.createdAt - channel1.createdAt;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
case 'chronological':
|
|
158
|
+
{
|
|
159
|
+
return channel2.createdAt - channel1.createdAt;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
case 'channel_name_alphabetical':
|
|
163
|
+
{
|
|
164
|
+
return channel1.name.localeCompare(channel2.name);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
default:
|
|
168
|
+
{
|
|
169
|
+
return 0;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useReducer","getGroupChannels","defaultReducer","action","draft","compareByOrder","createCompareByOrder","order","type","key","value","status","channels","forEach","freshChannel","idx","groupChannels","findIndex","staleChannel","url","sort","channelUrls","c","splice","clearPrev","useGroupChannelListReducer","loading","refreshing","dispatch","updateChannels","deleteChannels","setChannels","updateLoading","updateRefreshing","updateOrder","undefined","channel1","channel2","lastMessage","createdAt","name","localeCompare"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdChannel } from '@sendbird/uikit-utils';\nimport { SendbirdGroupChannel, getGroupChannels } from '@sendbird/uikit-utils';\n\ntype Order = 'latest_last_message' | 'chronological' | 'channel_name_alphabetical' | 'metadata_value_alphabetical';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_channels';\n value: { channels: SendbirdChannel[] };\n }\n | {\n type: 'delete_channels';\n value: { channelUrls: string[] };\n }\n | {\n type: 'set_channels';\n value: { channels: SendbirdChannel[]; clearPrev: boolean };\n }\n | {\n type: 'update_order';\n value: { order?: Order };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n groupChannels: SendbirdGroupChannel[];\n order?: Order;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n const compareByOrder = createCompareByOrder(draft.order);\n\n switch (action.type) {\n case 'update_refreshing':\n case 'update_loading': {\n const key = action.type === 'update_loading' ? 'loading' : 'refreshing';\n draft[key] = action.value.status;\n break;\n }\n case 'update_channels': {\n getGroupChannels(action.value.channels).forEach((freshChannel) => {\n const idx = draft.groupChannels.findIndex((staleChannel) => staleChannel.url === freshChannel.url);\n if (idx > -1) draft.groupChannels[idx] = freshChannel;\n });\n\n compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));\n break;\n }\n case 'delete_channels': {\n action.value.channelUrls.forEach((url) => {\n const idx = draft.groupChannels.findIndex((c) => c.url === url);\n if (idx > -1) draft.groupChannels.splice(idx, 1);\n });\n\n compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));\n break;\n }\n case 'set_channels': {\n if (action.value.clearPrev) {\n draft.groupChannels = getGroupChannels(action.value.channels);\n } else {\n draft.groupChannels = [...draft.groupChannels, ...getGroupChannels(action.value.channels)];\n }\n\n compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));\n break;\n }\n case 'update_order': {\n draft.order = action.value.order;\n break;\n }\n }\n return draft;\n};\n\nexport const useGroupChannelListReducer = (order?: Order) => {\n const [{ loading, refreshing, groupChannels }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n groupChannels: [],\n order,\n });\n\n const updateChannels = (channels: SendbirdChannel[]) => {\n dispatch({ type: 'update_channels', value: { channels } });\n };\n const deleteChannels = (channelUrls: string[]) => {\n dispatch({ type: 'delete_channels', value: { channelUrls } });\n };\n const setChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {\n dispatch({ type: 'set_channels', value: { channels, clearPrev } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n const updateOrder = (order?: Order) => {\n dispatch({ type: 'update_order', value: { order } });\n };\n\n return {\n updateLoading,\n updateRefreshing,\n updateChannels,\n deleteChannels,\n setChannels,\n\n updateOrder,\n\n loading,\n refreshing,\n groupChannels,\n };\n};\n\nconst createCompareByOrder = (order?: Order) => {\n if (!order) return undefined;\n\n return (channel1: SendbirdGroupChannel, channel2: SendbirdGroupChannel): number => {\n switch (order) {\n case 'latest_last_message': {\n if (channel1.lastMessage && channel2.lastMessage) {\n return channel2.lastMessage.createdAt - channel1.lastMessage.createdAt;\n } else if (channel1.lastMessage) {\n return -1;\n } else if (channel2.lastMessage) {\n return 1;\n } else {\n return channel2.createdAt - channel1.createdAt;\n }\n }\n\n case 'chronological': {\n return channel2.createdAt - channel1.createdAt;\n }\n\n case 'channel_name_alphabetical': {\n return channel1.name.localeCompare(channel2.name);\n }\n default: {\n return 0;\n }\n }\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { useAsyncEffect, useFreshCallback, useUniqId } from '@sendbird/uikit-utils';
|
|
3
|
+
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
4
|
+
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
5
|
+
import { useGroupChannelListReducer } from './reducer';
|
|
6
|
+
const HOOK_NAME = 'useGroupChannelListWithCollection';
|
|
7
|
+
|
|
8
|
+
const createGroupChannelListCollection = (sdk, collectionCreator) => {
|
|
9
|
+
const passedCollection = collectionCreator === null || collectionCreator === void 0 ? void 0 : collectionCreator();
|
|
10
|
+
if (passedCollection) return passedCollection;
|
|
11
|
+
const defaultOptions = {
|
|
12
|
+
includeEmpty: false,
|
|
13
|
+
limit: 5,
|
|
14
|
+
order: sdk.GroupChannelCollection.GroupChannelOrder.LATEST_LAST_MESSAGE
|
|
15
|
+
};
|
|
16
|
+
const collectionBuilder = sdk.GroupChannel.createGroupChannelCollection();
|
|
17
|
+
const groupChannelFilter = new sdk.GroupChannelFilter();
|
|
18
|
+
groupChannelFilter.includeEmpty = defaultOptions.includeEmpty;
|
|
19
|
+
return collectionBuilder.setFilter(groupChannelFilter).setLimit(defaultOptions.limit).setOrder(defaultOptions.order).build();
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const useGroupChannelListWithCollection = (sdk, userId, options) => {
|
|
23
|
+
const id = useUniqId(HOOK_NAME);
|
|
24
|
+
const {
|
|
25
|
+
deliveryReceiptEnabled
|
|
26
|
+
} = useAppFeatures(sdk);
|
|
27
|
+
const collectionRef = useRef();
|
|
28
|
+
const {
|
|
29
|
+
loading,
|
|
30
|
+
groupChannels,
|
|
31
|
+
refreshing,
|
|
32
|
+
setChannels,
|
|
33
|
+
deleteChannels,
|
|
34
|
+
updateRefreshing,
|
|
35
|
+
updateLoading
|
|
36
|
+
} = useGroupChannelListReducer();
|
|
37
|
+
|
|
38
|
+
const updateChannelsAndMarkAsDelivered = markAsDelivered => {
|
|
39
|
+
var _collectionRef$curren;
|
|
40
|
+
|
|
41
|
+
const channels = ((_collectionRef$curren = collectionRef.current) === null || _collectionRef$curren === void 0 ? void 0 : _collectionRef$curren.channelList) ?? [];
|
|
42
|
+
setChannels(channels, true);
|
|
43
|
+
if (markAsDelivered && deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const init = useFreshCallback(async uid => {
|
|
47
|
+
var _collectionRef$curren2;
|
|
48
|
+
|
|
49
|
+
if (collectionRef.current) (_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.dispose();
|
|
50
|
+
|
|
51
|
+
if (uid) {
|
|
52
|
+
var _collectionRef$curren3, _collectionRef$curren5;
|
|
53
|
+
|
|
54
|
+
collectionRef.current = createGroupChannelListCollection(sdk, options === null || options === void 0 ? void 0 : options.collectionCreator);
|
|
55
|
+
|
|
56
|
+
if ((_collectionRef$curren3 = collectionRef.current) !== null && _collectionRef$curren3 !== void 0 && _collectionRef$curren3.hasMore) {
|
|
57
|
+
var _collectionRef$curren4;
|
|
58
|
+
|
|
59
|
+
await ((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.loadMore());
|
|
60
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
(_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.setGroupChannelCollectionHandler({
|
|
64
|
+
onChannelsAdded() {
|
|
65
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
onChannelsUpdated() {
|
|
69
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
onChannelsDeleted() {
|
|
73
|
+
updateChannelsAndMarkAsDelivered(false);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
return () => {
|
|
81
|
+
var _collectionRef$curren6;
|
|
82
|
+
|
|
83
|
+
if (collectionRef.current) (_collectionRef$curren6 = collectionRef.current) === null || _collectionRef$curren6 === void 0 ? void 0 : _collectionRef$curren6.dispose();
|
|
84
|
+
};
|
|
85
|
+
}, []);
|
|
86
|
+
useAsyncEffect(async () => {
|
|
87
|
+
updateLoading(true);
|
|
88
|
+
await init(userId);
|
|
89
|
+
updateLoading(false);
|
|
90
|
+
}, [init, userId]);
|
|
91
|
+
useChannelHandler(sdk, `${HOOK_NAME}_${id}`, {
|
|
92
|
+
onUserBanned: (channel, user) => {
|
|
93
|
+
const isMe = user.userId === userId;
|
|
94
|
+
if (isMe) deleteChannels([channel.url]);else updateChannelsAndMarkAsDelivered(false);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const refresh = useFreshCallback(async () => {
|
|
98
|
+
updateRefreshing(true);
|
|
99
|
+
await init(userId);
|
|
100
|
+
updateRefreshing(false);
|
|
101
|
+
});
|
|
102
|
+
const next = useFreshCallback(async () => {
|
|
103
|
+
var _collectionRef$curren7;
|
|
104
|
+
|
|
105
|
+
if ((_collectionRef$curren7 = collectionRef.current) !== null && _collectionRef$curren7 !== void 0 && _collectionRef$curren7.hasMore) {
|
|
106
|
+
var _collectionRef$curren8;
|
|
107
|
+
|
|
108
|
+
await ((_collectionRef$curren8 = collectionRef.current) === null || _collectionRef$curren8 === void 0 ? void 0 : _collectionRef$curren8.loadMore());
|
|
109
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
loading,
|
|
114
|
+
groupChannels,
|
|
115
|
+
refresh,
|
|
116
|
+
refreshing,
|
|
117
|
+
next
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=useGroupChannelListWithCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useAsyncEffect","useFreshCallback","useUniqId","useAppFeatures","useChannelHandler","useGroupChannelListReducer","HOOK_NAME","createGroupChannelListCollection","sdk","collectionCreator","passedCollection","defaultOptions","includeEmpty","limit","order","GroupChannelCollection","GroupChannelOrder","LATEST_LAST_MESSAGE","collectionBuilder","GroupChannel","createGroupChannelCollection","groupChannelFilter","GroupChannelFilter","setFilter","setLimit","setOrder","build","useGroupChannelListWithCollection","userId","options","id","deliveryReceiptEnabled","collectionRef","loading","groupChannels","refreshing","setChannels","deleteChannels","updateRefreshing","updateLoading","updateChannelsAndMarkAsDelivered","markAsDelivered","channels","current","channelList","forEach","channel","url","init","uid","dispose","hasMore","loadMore","setGroupChannelCollectionHandler","onChannelsAdded","onChannelsUpdated","onChannelsDeleted","onUserBanned","user","isMe","refresh","next"],"sources":["useGroupChannelListWithCollection.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { SendbirdChatSDK, SendbirdGroupChannelCollection } from '@sendbird/uikit-utils';\nimport { useAsyncEffect, useFreshCallback, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../../types';\nimport { useGroupChannelListReducer } from './reducer';\n\nconst HOOK_NAME = 'useGroupChannelListWithCollection';\n\nconst createGroupChannelListCollection = (\n sdk: SendbirdChatSDK,\n collectionCreator: UseGroupChannelListOptions['collectionCreator'],\n) => {\n const passedCollection = collectionCreator?.();\n if (passedCollection) return passedCollection;\n\n const defaultOptions = {\n includeEmpty: false,\n limit: 5,\n order: sdk.GroupChannelCollection.GroupChannelOrder.LATEST_LAST_MESSAGE,\n };\n const collectionBuilder = sdk.GroupChannel.createGroupChannelCollection();\n const groupChannelFilter = new sdk.GroupChannelFilter();\n groupChannelFilter.includeEmpty = defaultOptions.includeEmpty;\n\n return collectionBuilder\n .setFilter(groupChannelFilter)\n .setLimit(defaultOptions.limit)\n .setOrder(defaultOptions.order)\n .build();\n};\n\nexport const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, userId, options) => {\n const id = useUniqId(HOOK_NAME);\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdGroupChannelCollection>();\n\n const { loading, groupChannels, refreshing, setChannels, deleteChannels, updateRefreshing, updateLoading } =\n useGroupChannelListReducer();\n\n const updateChannelsAndMarkAsDelivered = (markAsDelivered: boolean) => {\n const channels = collectionRef.current?.channelList ?? [];\n setChannels(channels, true);\n if (markAsDelivered && deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n\n const init = useFreshCallback(async (uid?: string) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);\n\n if (collectionRef.current?.hasMore) {\n await collectionRef.current?.loadMore();\n updateChannelsAndMarkAsDelivered(true);\n }\n\n collectionRef.current?.setGroupChannelCollectionHandler({\n onChannelsAdded() {\n updateChannelsAndMarkAsDelivered(true);\n },\n onChannelsUpdated() {\n updateChannelsAndMarkAsDelivered(true);\n },\n onChannelsDeleted() {\n updateChannelsAndMarkAsDelivered(false);\n },\n });\n }\n });\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, `${HOOK_NAME}_${id}`, {\n onUserBanned: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered(false);\n },\n });\n\n const refresh = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const next = useFreshCallback(async () => {\n if (collectionRef.current?.hasMore) {\n await collectionRef.current?.loadMore();\n updateChannelsAndMarkAsDelivered(true);\n }\n });\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n };\n};\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AAGA,SAASC,cAAT,EAAyBC,gBAAzB,EAA2CC,SAA3C,QAA4D,uBAA5D;AAEA,SAASC,cAAT,QAA+B,6BAA/B;AACA,SAASC,iBAAT,QAAkC,iCAAlC;AAEA,SAASC,0BAAT,QAA2C,WAA3C;AAEA,MAAMC,SAAS,GAAG,mCAAlB;;AAEA,MAAMC,gCAAgC,GAAG,CACvCC,GADuC,EAEvCC,iBAFuC,KAGpC;EACH,MAAMC,gBAAgB,GAAGD,iBAAH,aAAGA,iBAAH,uBAAGA,iBAAiB,EAA1C;EACA,IAAIC,gBAAJ,EAAsB,OAAOA,gBAAP;EAEtB,MAAMC,cAAc,GAAG;IACrBC,YAAY,EAAE,KADO;IAErBC,KAAK,EAAE,CAFc;IAGrBC,KAAK,EAAEN,GAAG,CAACO,sBAAJ,CAA2BC,iBAA3B,CAA6CC;EAH/B,CAAvB;EAKA,MAAMC,iBAAiB,GAAGV,GAAG,CAACW,YAAJ,CAAiBC,4BAAjB,EAA1B;EACA,MAAMC,kBAAkB,GAAG,IAAIb,GAAG,CAACc,kBAAR,EAA3B;EACAD,kBAAkB,CAACT,YAAnB,GAAkCD,cAAc,CAACC,YAAjD;EAEA,OAAOM,iBAAiB,CACrBK,SADI,CACMF,kBADN,EAEJG,QAFI,CAEKb,cAAc,CAACE,KAFpB,EAGJY,QAHI,CAGKd,cAAc,CAACG,KAHpB,EAIJY,KAJI,EAAP;AAKD,CArBD;;AAuBA,OAAO,MAAMC,iCAAsD,GAAG,CAACnB,GAAD,EAAMoB,MAAN,EAAcC,OAAd,KAA0B;EAC9F,MAAMC,EAAE,GAAG5B,SAAS,CAACI,SAAD,CAApB;EACA,MAAM;IAAEyB;EAAF,IAA6B5B,cAAc,CAACK,GAAD,CAAjD;EAEA,MAAMwB,aAAa,GAAGjC,MAAM,EAA5B;EAEA,MAAM;IAAEkC,OAAF;IAAWC,aAAX;IAA0BC,UAA1B;IAAsCC,WAAtC;IAAmDC,cAAnD;IAAmEC,gBAAnE;IAAqFC;EAArF,IACJlC,0BAA0B,EAD5B;;EAGA,MAAMmC,gCAAgC,GAAIC,eAAD,IAA8B;IAAA;;IACrE,MAAMC,QAAQ,GAAG,0BAAAV,aAAa,CAACW,OAAd,gFAAuBC,WAAvB,KAAsC,EAAvD;IACAR,WAAW,CAACM,QAAD,EAAW,IAAX,CAAX;IACA,IAAID,eAAe,IAAIV,sBAAvB,EAA+CW,QAAQ,CAACG,OAAT,CAAkBC,OAAD,IAAatC,GAAG,CAACiC,eAAJ,CAAoBK,OAAO,CAACC,GAA5B,CAA9B;EAChD,CAJD;;EAMA,MAAMC,IAAI,GAAG/C,gBAAgB,CAAC,MAAOgD,GAAP,IAAwB;IAAA;;IACpD,IAAIjB,aAAa,CAACW,OAAlB,EAA2B,0BAAAX,aAAa,CAACW,OAAd,kFAAuBO,OAAvB;;IAE3B,IAAID,GAAJ,EAAS;MAAA;;MACPjB,aAAa,CAACW,OAAd,GAAwBpC,gCAAgC,CAACC,GAAD,EAAMqB,OAAN,aAAMA,OAAN,uBAAMA,OAAO,CAAEpB,iBAAf,CAAxD;;MAEA,8BAAIuB,aAAa,CAACW,OAAlB,mDAAI,uBAAuBQ,OAA3B,EAAoC;QAAA;;QAClC,iCAAMnB,aAAa,CAACW,OAApB,2DAAM,uBAAuBS,QAAvB,EAAN;QACAZ,gCAAgC,CAAC,IAAD,CAAhC;MACD;;MAED,0BAAAR,aAAa,CAACW,OAAd,kFAAuBU,gCAAvB,CAAwD;QACtDC,eAAe,GAAG;UAChBd,gCAAgC,CAAC,IAAD,CAAhC;QACD,CAHqD;;QAItDe,iBAAiB,GAAG;UAClBf,gCAAgC,CAAC,IAAD,CAAhC;QACD,CANqD;;QAOtDgB,iBAAiB,GAAG;UAClBhB,gCAAgC,CAAC,KAAD,CAAhC;QACD;;MATqD,CAAxD;IAWD;EACF,CAvB4B,CAA7B;EAyBA1C,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MAAA;;MACX,IAAIkC,aAAa,CAACW,OAAlB,EAA2B,0BAAAX,aAAa,CAACW,OAAd,kFAAuBO,OAAvB;IAC5B,CAFD;EAGD,CAJQ,EAIN,EAJM,CAAT;EAMAlD,cAAc,CAAC,YAAY;IACzBuC,aAAa,CAAC,IAAD,CAAb;IACA,MAAMS,IAAI,CAACpB,MAAD,CAAV;IACAW,aAAa,CAAC,KAAD,CAAb;EACD,CAJa,EAIX,CAACS,IAAD,EAAOpB,MAAP,CAJW,CAAd;EAMAxB,iBAAiB,CAACI,GAAD,EAAO,GAAEF,SAAU,IAAGwB,EAAG,EAAzB,EAA4B;IAC3C2B,YAAY,EAAE,CAACX,OAAD,EAAUY,IAAV,KAAmB;MAC/B,MAAMC,IAAI,GAAGD,IAAI,CAAC9B,MAAL,KAAgBA,MAA7B;MACA,IAAI+B,IAAJ,EAAUtB,cAAc,CAAC,CAACS,OAAO,CAACC,GAAT,CAAD,CAAd,CAAV,KACKP,gCAAgC,CAAC,KAAD,CAAhC;IACN;EAL0C,CAA5B,CAAjB;EAQA,MAAMoB,OAAO,GAAG3D,gBAAgB,CAAC,YAAY;IAC3CqC,gBAAgB,CAAC,IAAD,CAAhB;IACA,MAAMU,IAAI,CAACpB,MAAD,CAAV;IACAU,gBAAgB,CAAC,KAAD,CAAhB;EACD,CAJ+B,CAAhC;EAMA,MAAMuB,IAAI,GAAG5D,gBAAgB,CAAC,YAAY;IAAA;;IACxC,8BAAI+B,aAAa,CAACW,OAAlB,mDAAI,uBAAuBQ,OAA3B,EAAoC;MAAA;;MAClC,iCAAMnB,aAAa,CAACW,OAApB,2DAAM,uBAAuBS,QAAvB,EAAN;MACAZ,gCAAgC,CAAC,IAAD,CAAhC;IACD;EACF,CAL4B,CAA7B;EAOA,OAAO;IACLP,OADK;IAELC,aAFK;IAGL0B,OAHK;IAILzB,UAJK;IAKL0B;EALK,CAAP;AAOD,CAhFM"}
|