@sendbird/uikit-chat-hooks 1.1.0 → 1.1.2

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.
Files changed (63) hide show
  1. package/lib/commonjs/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
  2. package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -0
  3. package/lib/commonjs/channel/useGroupChannelList/reducer.js +184 -0
  4. package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -0
  5. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +134 -0
  6. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
  7. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +118 -0
  8. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
  9. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
  10. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  11. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
  12. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  13. package/lib/commonjs/common/useMessageOutgoingStatus.js +49 -0
  14. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -0
  15. package/lib/commonjs/index.js +12 -4
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/types.js.map +1 -1
  18. package/lib/module/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
  19. package/lib/module/channel/useGroupChannelList/index.js.map +1 -0
  20. package/lib/module/channel/useGroupChannelList/reducer.js +174 -0
  21. package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -0
  22. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +120 -0
  23. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
  24. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +104 -0
  25. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
  26. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
  27. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  28. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
  29. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  30. package/lib/module/common/useMessageOutgoingStatus.js +36 -0
  31. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -0
  32. package/lib/module/index.js +4 -3
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/module/types.js.map +1 -1
  35. package/lib/typescript/src/channel/{useGroupChannelList.d.ts → useGroupChannelList/index.d.ts} +1 -1
  36. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +14 -0
  37. package/lib/typescript/src/channel/{useGroupChannelListWithCollection.d.ts → useGroupChannelList/useGroupChannelListWithCollection.d.ts} +1 -1
  38. package/lib/typescript/src/channel/{useGroupChannelListWithQuery.d.ts → useGroupChannelList/useGroupChannelListWithQuery.d.ts} +1 -1
  39. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +3 -0
  40. package/lib/typescript/src/index.d.ts +4 -3
  41. package/lib/typescript/src/types.d.ts +0 -7
  42. package/package.json +3 -3
  43. package/src/channel/{useGroupChannelList.ts → useGroupChannelList/index.ts} +1 -1
  44. package/src/channel/useGroupChannelList/reducer.ts +154 -0
  45. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +116 -0
  46. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +114 -0
  47. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +3 -3
  48. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +2 -2
  49. package/src/common/useMessageOutgoingStatus.ts +56 -0
  50. package/src/index.ts +4 -3
  51. package/src/types.ts +0 -8
  52. package/lib/commonjs/channel/useGroupChannelList.js.map +0 -1
  53. package/lib/commonjs/channel/useGroupChannelListWithCollection.js +0 -148
  54. package/lib/commonjs/channel/useGroupChannelListWithCollection.js.map +0 -1
  55. package/lib/commonjs/channel/useGroupChannelListWithQuery.js +0 -130
  56. package/lib/commonjs/channel/useGroupChannelListWithQuery.js.map +0 -1
  57. package/lib/module/channel/useGroupChannelList.js.map +0 -1
  58. package/lib/module/channel/useGroupChannelListWithCollection.js +0 -135
  59. package/lib/module/channel/useGroupChannelListWithCollection.js.map +0 -1
  60. package/lib/module/channel/useGroupChannelListWithQuery.js +0 -117
  61. package/lib/module/channel/useGroupChannelListWithQuery.js.map +0 -1
  62. package/src/channel/useGroupChannelListWithCollection.ts +0 -139
  63. 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.error(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
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.error(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
65
+ _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
66
66
  }
67
67
  };
68
68
 
@@ -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":";;;;;;;AAAA;;AAIA;;AAEA;;AACA;;AAEA;;AACA;;AAEA,MAAMA,kBAAkB,GAAG,CACzBC,OADyB,EAEzBC,OAFyB,KAGtB;EACH,IAAIA,OAAJ,EAAa,OAAOA,OAAO,EAAd;EACb,MAAMC,KAAK,GAAGF,OAAO,CAACG,8BAAR,EAAd;EACAD,KAAK,CAACE,KAAN,GAAc,GAAd;EACAF,KAAK,CAACG,OAAN,GAAgB,IAAhB;EACA,OAAOH,KAAP;AACD,CATD;;AAWA,MAAMI,SAAS,GAAG,kCAAlB;;AACO,MAAMC,gCAAyD,GAAG,CAACC,GAAD,EAAMR,OAAN,EAAeS,MAAf,EAAuBC,OAAvB,KAAmC;EAC1G,MAAM;IAAEC;EAAF,IAA6B,IAAAC,8BAAA,EAAeJ,GAAf,CAAnC;EAEA,MAAMK,QAAQ,GAAG,IAAAC,aAAA,GAAjB,CAH0G,CAK1G;;EACA,MAAM;IAAEC,aAAF;IAAiBC;EAAjB,IAAsC,IAAAC,4CAAA,EAAsBT,GAAtB,EAA2BR,OAA3B,CAA5C;EACA,MAAMkB,WAAW,GAAG,IAAAC,0BAAA,GAApB;EAEA,MAAM;IACJC,OADI;IAEJC,UAFI;IAGJC,QAHI;IAIJC,YAJI;IAKJC,sBALI;IAMJC,cANI;IAOJC,kBAPI;IAQJC,kBARI;IASJC,cATI;IAUJC,aAVI;IAWJC;EAXI,IAYF,IAAAC,uCAAA,EAA+BtB,MAA/B,EAAuCC,OAAvC,aAAuCA,OAAvC,uBAAuCA,OAAO,CAAEsB,cAAhD,CAZJ;;EAcA,MAAMC,aAAa,GAAG,YAAY;IAChC,IAAI;MACF,IAAItB,sBAAJ,EAA4BH,GAAG,CAAC0B,eAAJ,CAAoBnB,aAAa,CAACoB,GAAlC;IAC7B,CAFD,CAEE,OAAOC,CAAP,EAAU;MACVC,kBAAA,CAAOC,IAAP,CAAa,IAAGhC,SAAU,2BAA1B,EAAsD8B,CAAtD;IACD;;IACD,IAAI;MACF,MAAM5B,GAAG,CAAC+B,yBAAJ,CAA8B,CAACxB,aAAa,CAACoB,GAAf,CAA9B,CAAN;IACD,CAFD,CAEE,OAAOC,CAAP,EAAU;MACVC,kBAAA,CAAOC,IAAP,CAAa,IAAGhC,SAAU,sBAA1B,EAAiD8B,CAAjD;IACD;EACF,CAXD;;EAaA,MAAMI,IAAI,GAAG,IAAAC,kBAAA,EACX,MAAOC,GAAP,IAAwB;IACtB,IAAIA,GAAJ,EAAS;MAAA;;MACP7B,QAAQ,CAAC8B,OAAT,GAAmB5C,kBAAkB,CAACgB,aAAD,EAAgBL,OAAhB,aAAgBA,OAAhB,uBAAgBA,OAAO,CAAEkC,YAAzB,CAArC;MACAX,aAAa;;MACb,yBAAIpB,QAAQ,CAAC8B,OAAb,8CAAI,kBAAkBE,OAAtB,EAA+B;QAAA;;QAC7B,MAAMC,IAAI,GAAG,6BAAMjC,QAAQ,CAAC8B,OAAf,uDAAM,mBAAkBI,IAAlB,EAAN,CAAb;QACAtB,cAAc,CAACqB,IAAD,EAAO,IAAP,EAAatC,GAAG,CAACwC,WAAJ,CAAgBvC,MAA7B,CAAd;MACD;;MACDiB,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAWlB,GAAG,CAACwC,WAAJ,CAAgBvC,MAA3B,CAAlB;IACD;EACF,CAXU,EAYX,CAACD,GAAD,EAAMO,aAAa,CAACoB,GAApB,EAAyBzB,OAAzB,aAAyBA,OAAzB,uBAAyBA,OAAO,CAAEkC,YAAlC,CAZW,CAAb;;EAeA,MAAMK,cAAc,GAAIjD,OAAD,IAAyD;IAC9E,IAAIA,OAAO,CAACkD,cAAR,MAA4B,CAAC,IAAAC,8BAAA,EAAmBnD,OAAnB,EAA4Be,aAA5B,CAAjC,EAA6E;MAC3EC,gBAAgB,CAAChB,OAAD,CAAhB;MACAkB,WAAW;IACZ;EACF,CALD;;EAOA,IAAAkC,oCAAA,EAAkB5C,GAAlB,EAAuBF,SAAvB,EAAkC;IAChC;IACA+C,iBAAiB,CAACC,YAAD,EAAeC,OAAf,EAAwB;MACvC,IAAI,IAAAJ,8BAAA,EAAmBpC,aAAnB,EAAkCuC,YAAlC,CAAJ,EAAqD;MACrDrB,aAAa;MACbP,kBAAkB,CAAC,CAAC6B,OAAD,CAAD,EAAY,KAAZ,EAAmB/C,GAAG,CAACwC,WAAJ,CAAgBvC,MAAnC,CAAlB;IACD,CAN+B;;IAOhC+C,gBAAgB,CAACF,YAAD,EAAeC,OAAf,EAAwB;MACtC,IAAI,IAAAJ,8BAAA,EAAmBpC,aAAnB,EAAkCuC,YAAlC,CAAJ,EAAqD;MACrD7B,cAAc,CAAC,CAAC8B,OAAD,CAAD,EAAY,KAAZ,EAAmB/C,GAAG,CAACwC,WAAJ,CAAgBvC,MAAnC,CAAd;IACD,CAV+B;;IAWhCgD,gBAAgB,CAACH,YAAD,EAAeI,SAAf,EAA0B;MACxC,IAAI,IAAAP,8BAAA,EAAmBpC,aAAnB,EAAkCuC,YAAlC,CAAJ,EAAqD;MACrD1B,cAAc,CAAC,CAAC8B,SAAD,CAAD,EAAc,EAAd,CAAd;MACA/B,kBAAkB,CAAC,CAAC+B,SAAD,CAAD,EAAc,EAAd,CAAlB;IACD,CAf+B;;IAgBhC;IACAC,gBAAgB,EAAEV,cAjBc;IAkBhCW,eAAe,EAAEX,cAlBe;IAmBhCY,iBAAiB,EAAEZ,cAnBa;IAoBhCa,eAAe,EAAEb,cApBe;;IAqBhCc,2BAA2B,CAACC,QAAD,EAAW;MACpC,MAAMhE,OAAO,GAAGgE,QAAQ,CAACC,IAAT,CAAeC,CAAD,IAAO,CAAC,IAAAf,8BAAA,EAAmBe,CAAnB,EAAsBnD,aAAtB,CAAtB,CAAhB;MACA,IAAIf,OAAJ,EAAaiD,cAAc,CAACjD,OAAD,CAAd;IACd,CAxB+B;;IAyBhCmE,gBAAgB,CAACC,UAAD,EAAqB;MAAA;;MACnC,IAAIrD,aAAa,CAACoB,GAAd,KAAsBiC,UAA1B,EAAsC1D,OAAO,SAAP,IAAAA,OAAO,WAAP,qCAAAA,OAAO,CAAEyD,gBAAT,qFAAAzD,OAAO;IAC9C,CA3B+B;;IA4BhC;IACA2D,iBAAiB,EAAEpB,cA7Ba;IA8BhCqB,UAAU,EAAErB,cA9BoB;IA+BhCsB,aAAa,EAAEtB,cA/BiB;IAgChCuB,YAAY,EAAEvB,cAhCkB;IAiChCwB,YAAY,EAAExB,cAjCkB;IAkChCyB,cAAc,EAAEzB,cAlCgB;IAmChC0B,WAAW,EAAE1B,cAnCmB;IAoChC2B,aAAa,EAAE3B,cApCiB;;IAqChC4B,YAAY,CAACvB,YAAD,EAAewB,UAAf,EAA2B;MACrC,IAAI,IAAA3B,8BAAA,EAAmBpC,aAAnB,EAAkCuC,YAAlC,CAAJ,EAAqD;;MAErD,IAAIwB,UAAU,CAACrE,MAAX,KAAsBD,GAAG,CAACwC,WAAJ,CAAgBvC,MAA1C,EAAkD;QAAA;;QAChDC,OAAO,SAAP,IAAAA,OAAO,WAAP,sCAAAA,OAAO,CAAEyD,gBAAT,uFAAAzD,OAAO;MACR,CAFD,MAEO;QACLuC,cAAc,CAACK,YAAD,CAAd;MACD;IACF;;EA7C+B,CAAlC;EAgDA,IAAAyB,0BAAA,EAAe,YAAY;IACzBlD,aAAa,CAAC,IAAD,CAAb;IACA,MAAMW,IAAI,CAAC/B,MAAD,CAAV;IACAoB,aAAa,CAAC,KAAD,CAAb;EACD,CAJD,EAIG,CAACW,IAAD,EAAO/B,MAAP,CAJH;EAMA,MAAMuE,OAAuD,GAAG,IAAAvC,kBAAA,EAAY,YAAY;IACtFX,gBAAgB,CAAC,IAAD,CAAhB;IACA,MAAMU,IAAI,CAAC/B,MAAD,CAAV;IACAqB,gBAAgB,CAAC,KAAD,CAAhB;EACD,CAJ+D,EAI7D,CAACU,IAAD,EAAO/B,MAAP,CAJ6D,CAAhE;EAMA,MAAMwE,IAAiD,GAAG,IAAAxC,kBAAA,EAAY,YAAY;IAAA;;IAChF,IAAI5B,QAAQ,CAAC8B,OAAT,0BAAoB9B,QAAQ,CAAC8B,OAA7B,+CAAoB,mBAAkBE,OAA1C,EAAmD;MAAA;;MACjD,MAAMC,IAAI,GAAG,6BAAMjC,QAAQ,CAAC8B,OAAf,uDAAM,mBAAkBI,IAAlB,EAAN,CAAb;MACAtB,cAAc,CAACqB,IAAD,EAAO,KAAP,EAActC,GAAG,CAACwC,WAAJ,CAAgBvC,MAA9B,CAAd;IACD;EACF,CALyD,EAKvD,EALuD,CAA1D;EAOA,MAAMyE,IAAiD,GAAG,IAAAzC,kBAAA,EAAY,YAAY;IAChF,IAAIlB,YAAY,CAAC4D,MAAb,GAAsB,CAA1B,EAA6B;MAC3B1D,cAAc,CAACF,YAAD,EAAe,KAAf,EAAsBf,GAAG,CAACwC,WAAJ,CAAgBvC,MAAtC,CAAd;MACAiB,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAWlB,GAAG,CAACwC,WAAJ,CAAgBvC,MAA3B,CAAlB;IACD;EACF,CALyD,EAKvD,CAACc,YAAY,CAAC4D,MAAd,CALuD,CAA1D;EAOA,MAAMC,eAAuE,GAAG,IAAA3C,kBAAA,EAC9E,CAAC4C,MAAD,EAASC,SAAT,KAAuB;IACrB,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC,MAAMC,cAAc,GAAG3E,aAAa,CAACqE,eAAd,CAA8BC,MAA9B,EAAsC,CAACM,WAAD,EAAcC,KAAd,KAAwB;QACnF,IAAIA,KAAJ,EAAWH,MAAM,CAACG,KAAD,CAAN,CAAX,KACK;UACHlE,kBAAkB,CAAC,CAACiE,WAAD,CAAD,EAAgB,KAAhB,EAAuBnF,GAAG,CAACwC,WAAJ,CAAgBvC,MAAvC,CAAlB;UACA+E,OAAO,CAACG,WAAD,CAAP;QACD;MACF,CANsB,CAAvB;MAOAjE,kBAAkB,CAAC,CAACgE,cAAD,CAAD,EAAmB,KAAnB,EAA0BlF,GAAG,CAACwC,WAAJ,CAAgBvC,MAA1C,CAAlB;MACA6E,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAGI,cAAH,CAAT;IACD,CAVM,CAAP;EAWD,CAb6E,EAc9E,CAAC3E,aAAD,CAd8E,CAAhF;EAgBA,MAAM8E,eAAuE,GAAG,IAAApD,kBAAA,EAC9E,CAAC4C,MAAD,EAASC,SAAT,KAAuB;IACrB,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC,MAAMC,cAAc,GAAG3E,aAAa,CAAC8E,eAAd,CAA8BR,MAA9B,EAAsC,CAACM,WAAD,EAAcC,KAAd,KAAwB;QACnF,IAAIA,KAAJ,EAAWH,MAAM,CAACG,KAAD,CAAN,CAAX,KACK;UACHlE,kBAAkB,CAAC,CAACiE,WAAD,CAAD,EAAgB,KAAhB,EAAuBnF,GAAG,CAACwC,WAAJ,CAAgBvC,MAAvC,CAAlB;UACA+E,OAAO,CAACG,WAAD,CAAP;QACD;MACF,CANsB,CAAvB;MAOAjE,kBAAkB,CAAC,CAACgE,cAAD,CAAD,EAAmB,KAAnB,EAA0BlF,GAAG,CAACwC,WAAJ,CAAgBvC,MAA1C,CAAlB;MACA6E,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAGI,cAAH,CAAT;IACD,CAVM,CAAP;EAWD,CAb6E,EAc9E,CAAC3E,aAAD,CAd8E,CAAhF;EAgBA,MAAM+E,iBAA2E,GAAG,IAAArD,kBAAA,EAClF,OAAOiB,SAAP,EAAkB2B,MAAlB,KAA6B;IAC3B,MAAMU,cAAc,GAAG,MAAMhF,aAAa,CAAC+E,iBAAd,CAAgCpC,SAAhC,EAA2C2B,MAA3C,CAA7B;IACA5D,cAAc,CAAC,CAACsE,cAAD,CAAD,EAAmB,KAAnB,EAA0BvF,GAAG,CAACwC,WAAJ,CAAgBvC,MAA1C,CAAd;IACA,OAAOsF,cAAP;EACD,CALiF,EAMlF,CAAChF,aAAD,CANkF,CAApF;EAQA,MAAMiF,iBAA2E,GAAG,IAAAvD,kBAAA,EAClF,OAAOiB,SAAP,EAAkB2B,MAAlB,KAA6B;IAC3B,MAAMU,cAAc,GAAG,MAAMhF,aAAa,CAACiF,iBAAd,CAAgCtC,SAAhC,EAA2C2B,MAA3C,CAA7B;IACA5D,cAAc,CAAC,CAACsE,cAAD,CAAD,EAAmB,KAAnB,EAA0BvF,GAAG,CAACwC,WAAJ,CAAgBvC,MAA1C,CAAd;IACA,OAAOsF,cAAP;EACD,CALiF,EAMlF,CAAChF,aAAD,CANkF,CAApF;EAQA,MAAMkF,aAAmE,GAAG,IAAAxD,kBAAA,EAC1E,MAAOyD,aAAP,IAAyB;IACvB,MAAM3C,OAAO,GAAG,MAAM,CAAC,MAAM;MAC3B,IAAI2C,aAAa,CAACC,aAAd,EAAJ,EAAmC,OAAOpF,aAAa,CAACqF,iBAAd,CAAgCF,aAAhC,CAAP;MACnC,IAAIA,aAAa,CAACG,aAAd,EAAJ,EAAmC,OAAOtF,aAAa,CAACuF,iBAAd,CAAgCJ,aAAhC,CAAP;MACnC,OAAO,IAAP;IACD,CAJqB,GAAtB;IAMA,IAAI3C,OAAJ,EAAa7B,kBAAkB,CAAC,CAAC6B,OAAD,CAAD,EAAY,KAAZ,EAAmB/C,GAAG,CAACwC,WAAJ,CAAgBvC,MAAnC,CAAlB;EACd,CATyE,EAU1E,CAACM,aAAD,CAV0E,CAA5E;EAYA,MAAMwF,aAAmE,GAAG,IAAA9D,kBAAA,EAC1E,MAAOc,OAAP,IAAmB;IACjB,IAAIA,OAAO,CAACiD,aAAR,KAA0B,WAA9B,EAA2C;MACzC,IAAIjD,OAAO,CAAC4C,aAAR,EAAJ,EAA6B,MAAMpF,aAAa,CAACwF,aAAd,CAA4BhD,OAA5B,CAAN;MAC7B,IAAIA,OAAO,CAAC8C,aAAR,EAAJ,EAA6B,MAAMtF,aAAa,CAACwF,aAAd,CAA4BhD,OAA5B,CAAN;IAC9B,CAHD,MAGO;MACL3B,cAAc,CAAC,CAAC2B,OAAO,CAACG,SAAT,CAAD,EAAsB,CAACH,OAAO,CAACkD,KAAT,CAAtB,CAAd;IACD;EACF,CARyE,EAS1E,CAAC1F,aAAD,CAT0E,CAA5E;EAYA,OAAO;IACLK,OADK;IAELC,UAFK;IAGL2D,OAHK;IAIL1D,QAJK;IAKLC,YALK;IAMLC,sBANK;IAOL0D,IAPK;IAQLD,IARK;IASLG,eATK;IAULS,eAVK;IAWLC,iBAXK;IAYLE,iBAZK;IAaLC,aAbK;IAcLM,aAdK;IAeLxF;EAfK,CAAP;AAiBD,CA7NM"}
@@ -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"}
@@ -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 _useUserList = require("./common/useUserList");
91
+ var _useAppFeatures = require("./common/useAppFeatures");
86
92
 
87
- var _usePushTrigger = require("./common/usePushTrigger");
93
+ var _useMessageOutgoingStatus = require("./common/useMessageOutgoingStatus");
88
94
 
89
- var _useTotalUnreadMessageCount = require("./common/useTotalUnreadMessageCount");
95
+ var _usePushTrigger = require("./common/usePushTrigger");
90
96
 
91
97
  var _useTotalUnreadChannelCount = require("./common/useTotalUnreadChannelCount");
92
98
 
93
- var _useAppFeatures = require("./common/useAppFeatures");
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 { useUserList } from './common/useUserList';\nexport { usePushTrigger } from './common/usePushTrigger';\nexport { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';\nexport { useTotalUnreadChannelCount } from './common/useTotalUnreadChannelCount';\nexport { useAppFeatures } from './common/useAppFeatures';\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;;AAEA;;AACA;;AACA;;AAEA"}
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 * Update channel, update or insert channel to state\n * @param {SendbirdGroupChannel} channel\n * @return {void}\n * */\n update: (channel: SendbirdGroupChannel) => 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 sortComparator?: (a: SendbirdGroupChannel, b: SendbirdGroupChannel) => number;\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":""}
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":""}
@@ -7,4 +7,4 @@ export const useGroupChannelList = (sdk, userId, options) => {
7
7
  return useGroupChannelListWithQuery(sdk, userId, options);
8
8
  }
9
9
  };
10
- //# sourceMappingURL=useGroupChannelList.js.map
10
+ //# sourceMappingURL=index.js.map
@@ -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: 20,
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: 20,\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":"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"}