@sendbird/uikit-chat-hooks 1.0.2 → 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.
Files changed (74) 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 +4 -5
  10. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  11. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +3 -3
  12. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  13. package/lib/commonjs/common/useAppFeatures.js +8 -28
  14. package/lib/commonjs/common/useAppFeatures.js.map +1 -1
  15. package/lib/commonjs/common/useMessageOutgoingStatus.js +49 -0
  16. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -0
  17. package/lib/commonjs/handler/useChannelHandler.js +16 -5
  18. package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
  19. package/lib/commonjs/index.js +12 -4
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/commonjs/types.js.map +1 -1
  22. package/lib/module/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
  23. package/lib/module/channel/useGroupChannelList/index.js.map +1 -0
  24. package/lib/module/channel/useGroupChannelList/reducer.js +174 -0
  25. package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -0
  26. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +120 -0
  27. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
  28. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +104 -0
  29. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
  30. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +4 -5
  31. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  32. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +3 -3
  33. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  34. package/lib/module/common/useAppFeatures.js +8 -27
  35. package/lib/module/common/useAppFeatures.js.map +1 -1
  36. package/lib/module/common/useMessageOutgoingStatus.js +36 -0
  37. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -0
  38. package/lib/module/handler/useChannelHandler.js +17 -6
  39. package/lib/module/handler/useChannelHandler.js.map +1 -1
  40. package/lib/module/index.js +4 -3
  41. package/lib/module/index.js.map +1 -1
  42. package/lib/module/types.js.map +1 -1
  43. package/lib/typescript/src/channel/{useGroupChannelList.d.ts → useGroupChannelList/index.d.ts} +1 -1
  44. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +14 -0
  45. package/lib/typescript/src/channel/{useGroupChannelListWithCollection.d.ts → useGroupChannelList/useGroupChannelListWithCollection.d.ts} +1 -1
  46. package/lib/typescript/src/channel/{useGroupChannelListWithQuery.d.ts → useGroupChannelList/useGroupChannelListWithQuery.d.ts} +1 -1
  47. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +3 -0
  48. package/lib/typescript/src/handler/useChannelHandler.d.ts +1 -2
  49. package/lib/typescript/src/index.d.ts +4 -3
  50. package/lib/typescript/src/types.d.ts +0 -7
  51. package/package.json +3 -3
  52. package/src/channel/{useGroupChannelList.ts → useGroupChannelList/index.ts} +1 -1
  53. package/src/channel/useGroupChannelList/reducer.ts +154 -0
  54. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +116 -0
  55. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +114 -0
  56. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +14 -20
  57. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +48 -53
  58. package/src/common/useAppFeatures.ts +5 -22
  59. package/src/common/useMessageOutgoingStatus.ts +56 -0
  60. package/src/handler/useChannelHandler.ts +11 -5
  61. package/src/index.ts +4 -3
  62. package/src/types.ts +0 -8
  63. package/lib/commonjs/channel/useGroupChannelList.js.map +0 -1
  64. package/lib/commonjs/channel/useGroupChannelListWithCollection.js +0 -148
  65. package/lib/commonjs/channel/useGroupChannelListWithCollection.js.map +0 -1
  66. package/lib/commonjs/channel/useGroupChannelListWithQuery.js +0 -130
  67. package/lib/commonjs/channel/useGroupChannelListWithQuery.js.map +0 -1
  68. package/lib/module/channel/useGroupChannelList.js.map +0 -1
  69. package/lib/module/channel/useGroupChannelListWithCollection.js +0 -135
  70. package/lib/module/channel/useGroupChannelListWithCollection.js.map +0 -1
  71. package/lib/module/channel/useGroupChannelListWithQuery.js +0 -117
  72. package/lib/module/channel/useGroupChannelListWithQuery.js.map +0 -1
  73. package/src/channel/useGroupChannelListWithCollection.ts +0 -144
  74. package/src/channel/useGroupChannelListWithQuery.ts +0 -124
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useRef","Logger","isDifferentChannel","useAsyncEffect","useForceUpdate","useAppFeatures","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","query","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","deliveryReceiptEnabled","queryRef","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","markAsDelivered","url","e","error","markAsReadWithChannelUrls","init","uid","current","queryCreator","hasMore","list","load","currentUser","channelUpdater","isGroupChannel","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","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(\n sdk,\n HOOK_NAME,\n {\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 [sdk],\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":["useCallback","useRef","Logger","isDifferentChannel","useAsyncEffect","useForceUpdate","useAppFeatures","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","query","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","deliveryReceiptEnabled","queryRef","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","markAsDelivered","url","e","warn","markAsReadWithChannelUrls","init","uid","current","queryCreator","hasMore","list","load","currentUser","channelUpdater","isGroupChannel","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","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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"}
@@ -1,33 +1,14 @@
1
- import { useMemo } from 'react';
2
1
  import { ApplicationAttributes, PremiumFeatures } from '@sendbird/uikit-utils';
3
2
  export const useAppFeatures = sdk => {
4
- var _sdk$appInfo2, _sdk$appInfo4, _sdk$appInfo6, _sdk$appInfo8;
5
-
6
- const deliveryReceiptEnabled = useMemo(() => {
7
- var _sdk$appInfo, _sdk$appInfo$premiumF, _sdk$appInfo$premiumF2;
8
-
9
- return Boolean((_sdk$appInfo = sdk.appInfo) === null || _sdk$appInfo === void 0 ? void 0 : (_sdk$appInfo$premiumF = _sdk$appInfo.premiumFeatureList) === null || _sdk$appInfo$premiumF === void 0 ? void 0 : (_sdk$appInfo$premiumF2 = _sdk$appInfo$premiumF.includes) === null || _sdk$appInfo$premiumF2 === void 0 ? void 0 : _sdk$appInfo$premiumF2.call(_sdk$appInfo$premiumF, PremiumFeatures.delivery_receipt));
10
- }, [(_sdk$appInfo2 = sdk.appInfo) === null || _sdk$appInfo2 === void 0 ? void 0 : _sdk$appInfo2.premiumFeatureList]);
11
- const broadcastChannelEnabled = useMemo(() => {
12
- var _sdk$appInfo3, _sdk$appInfo3$applica, _sdk$appInfo3$applica2;
13
-
14
- return Boolean((_sdk$appInfo3 = sdk.appInfo) === null || _sdk$appInfo3 === void 0 ? void 0 : (_sdk$appInfo3$applica = _sdk$appInfo3.applicationAttributes) === null || _sdk$appInfo3$applica === void 0 ? void 0 : (_sdk$appInfo3$applica2 = _sdk$appInfo3$applica.includes) === null || _sdk$appInfo3$applica2 === void 0 ? void 0 : _sdk$appInfo3$applica2.call(_sdk$appInfo3$applica, ApplicationAttributes.allow_broadcast_channel));
15
- }, [(_sdk$appInfo4 = sdk.appInfo) === null || _sdk$appInfo4 === void 0 ? void 0 : _sdk$appInfo4.applicationAttributes]);
16
- const superGroupChannelEnabled = useMemo(() => {
17
- var _sdk$appInfo5, _sdk$appInfo5$applica, _sdk$appInfo5$applica2;
18
-
19
- return Boolean((_sdk$appInfo5 = sdk.appInfo) === null || _sdk$appInfo5 === void 0 ? void 0 : (_sdk$appInfo5$applica = _sdk$appInfo5.applicationAttributes) === null || _sdk$appInfo5$applica === void 0 ? void 0 : (_sdk$appInfo5$applica2 = _sdk$appInfo5$applica.includes) === null || _sdk$appInfo5$applica2 === void 0 ? void 0 : _sdk$appInfo5$applica2.call(_sdk$appInfo5$applica, ApplicationAttributes.allow_super_group_channel));
20
- }, [(_sdk$appInfo6 = sdk.appInfo) === null || _sdk$appInfo6 === void 0 ? void 0 : _sdk$appInfo6.applicationAttributes]);
21
- const reactionEnabled = useMemo(() => {
22
- var _sdk$appInfo7, _sdk$appInfo7$applica, _sdk$appInfo7$applica2;
23
-
24
- return Boolean((_sdk$appInfo7 = sdk.appInfo) === null || _sdk$appInfo7 === void 0 ? void 0 : (_sdk$appInfo7$applica = _sdk$appInfo7.applicationAttributes) === null || _sdk$appInfo7$applica === void 0 ? void 0 : (_sdk$appInfo7$applica2 = _sdk$appInfo7$applica.includes) === null || _sdk$appInfo7$applica2 === void 0 ? void 0 : _sdk$appInfo7$applica2.call(_sdk$appInfo7$applica, ApplicationAttributes.reactions));
25
- }, [(_sdk$appInfo8 = sdk.appInfo) === null || _sdk$appInfo8 === void 0 ? void 0 : _sdk$appInfo8.applicationAttributes]);
3
+ const {
4
+ premiumFeatureList = [],
5
+ applicationAttributes = []
6
+ } = sdk.appInfo ?? {};
26
7
  return {
27
- deliveryReceiptEnabled,
28
- broadcastChannelEnabled,
29
- superGroupChannelEnabled,
30
- reactionEnabled
8
+ deliveryReceiptEnabled: Boolean(premiumFeatureList.includes(PremiumFeatures.delivery_receipt)),
9
+ broadcastChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_broadcast_channel)),
10
+ superGroupChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_super_group_channel)),
11
+ reactionEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.reactions))
31
12
  };
32
13
  };
33
14
  //# sourceMappingURL=useAppFeatures.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","ApplicationAttributes","PremiumFeatures","useAppFeatures","sdk","deliveryReceiptEnabled","Boolean","appInfo","premiumFeatureList","includes","delivery_receipt","broadcastChannelEnabled","applicationAttributes","allow_broadcast_channel","superGroupChannelEnabled","allow_super_group_channel","reactionEnabled","reactions"],"sources":["useAppFeatures.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { ApplicationAttributes, PremiumFeatures, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nexport const useAppFeatures = (sdk: SendbirdChatSDK) => {\n const deliveryReceiptEnabled = useMemo(() => {\n return Boolean(sdk.appInfo?.premiumFeatureList?.includes?.(PremiumFeatures.delivery_receipt));\n }, [sdk.appInfo?.premiumFeatureList]);\n\n const broadcastChannelEnabled = useMemo(() => {\n return Boolean(sdk.appInfo?.applicationAttributes?.includes?.(ApplicationAttributes.allow_broadcast_channel));\n }, [sdk.appInfo?.applicationAttributes]);\n\n const superGroupChannelEnabled = useMemo(() => {\n return Boolean(sdk.appInfo?.applicationAttributes?.includes?.(ApplicationAttributes.allow_super_group_channel));\n }, [sdk.appInfo?.applicationAttributes]);\n\n const reactionEnabled = useMemo(() => {\n return Boolean(sdk.appInfo?.applicationAttributes?.includes?.(ApplicationAttributes.reactions));\n }, [sdk.appInfo?.applicationAttributes]);\n\n return {\n deliveryReceiptEnabled,\n broadcastChannelEnabled,\n superGroupChannelEnabled,\n reactionEnabled,\n };\n};\n"],"mappings":"AAAA,SAASA,OAAT,QAAwB,OAAxB;AAEA,SAASC,qBAAT,EAAgCC,eAAhC,QAAwE,uBAAxE;AAEA,OAAO,MAAMC,cAAc,GAAIC,GAAD,IAA0B;EAAA;;EACtD,MAAMC,sBAAsB,GAAGL,OAAO,CAAC,MAAM;IAAA;;IAC3C,OAAOM,OAAO,iBAACF,GAAG,CAACG,OAAL,0EAAC,aAAaC,kBAAd,oFAAC,sBAAiCC,QAAlC,2DAAC,mDAA4CP,eAAe,CAACQ,gBAA5D,CAAD,CAAd;EACD,CAFqC,EAEnC,kBAACN,GAAG,CAACG,OAAL,kDAAC,cAAaC,kBAAd,CAFmC,CAAtC;EAIA,MAAMG,uBAAuB,GAAGX,OAAO,CAAC,MAAM;IAAA;;IAC5C,OAAOM,OAAO,kBAACF,GAAG,CAACG,OAAL,2EAAC,cAAaK,qBAAd,oFAAC,sBAAoCH,QAArC,2DAAC,mDAA+CR,qBAAqB,CAACY,uBAArE,CAAD,CAAd;EACD,CAFsC,EAEpC,kBAACT,GAAG,CAACG,OAAL,kDAAC,cAAaK,qBAAd,CAFoC,CAAvC;EAIA,MAAME,wBAAwB,GAAGd,OAAO,CAAC,MAAM;IAAA;;IAC7C,OAAOM,OAAO,kBAACF,GAAG,CAACG,OAAL,2EAAC,cAAaK,qBAAd,oFAAC,sBAAoCH,QAArC,2DAAC,mDAA+CR,qBAAqB,CAACc,yBAArE,CAAD,CAAd;EACD,CAFuC,EAErC,kBAACX,GAAG,CAACG,OAAL,kDAAC,cAAaK,qBAAd,CAFqC,CAAxC;EAIA,MAAMI,eAAe,GAAGhB,OAAO,CAAC,MAAM;IAAA;;IACpC,OAAOM,OAAO,kBAACF,GAAG,CAACG,OAAL,2EAAC,cAAaK,qBAAd,oFAAC,sBAAoCH,QAArC,2DAAC,mDAA+CR,qBAAqB,CAACgB,SAArE,CAAD,CAAd;EACD,CAF8B,EAE5B,kBAACb,GAAG,CAACG,OAAL,kDAAC,cAAaK,qBAAd,CAF4B,CAA/B;EAIA,OAAO;IACLP,sBADK;IAELM,uBAFK;IAGLG,wBAHK;IAILE;EAJK,CAAP;AAMD,CAvBM"}
1
+ {"version":3,"names":["ApplicationAttributes","PremiumFeatures","useAppFeatures","sdk","premiumFeatureList","applicationAttributes","appInfo","deliveryReceiptEnabled","Boolean","includes","delivery_receipt","broadcastChannelEnabled","allow_broadcast_channel","superGroupChannelEnabled","allow_super_group_channel","reactionEnabled","reactions"],"sources":["useAppFeatures.ts"],"sourcesContent":["import { ApplicationAttributes, PremiumFeatures, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nexport const useAppFeatures = (sdk: SendbirdChatSDK) => {\n const { premiumFeatureList = [], applicationAttributes = [] } = sdk.appInfo ?? {};\n return {\n deliveryReceiptEnabled: Boolean(premiumFeatureList.includes(PremiumFeatures.delivery_receipt)),\n broadcastChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_broadcast_channel)),\n superGroupChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_super_group_channel)),\n reactionEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.reactions)),\n };\n};\n"],"mappings":"AAAA,SAASA,qBAAT,EAAgCC,eAAhC,QAAwE,uBAAxE;AAEA,OAAO,MAAMC,cAAc,GAAIC,GAAD,IAA0B;EACtD,MAAM;IAAEC,kBAAkB,GAAG,EAAvB;IAA2BC,qBAAqB,GAAG;EAAnD,IAA0DF,GAAG,CAACG,OAAJ,IAAe,EAA/E;EACA,OAAO;IACLC,sBAAsB,EAAEC,OAAO,CAACJ,kBAAkB,CAACK,QAAnB,CAA4BR,eAAe,CAACS,gBAA5C,CAAD,CAD1B;IAELC,uBAAuB,EAAEH,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BT,qBAAqB,CAACY,uBAArD,CAAD,CAF3B;IAGLC,wBAAwB,EAAEL,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BT,qBAAqB,CAACc,yBAArD,CAAD,CAH5B;IAILC,eAAe,EAAEP,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BT,qBAAqB,CAACgB,SAArD,CAAD;EAJnB,CAAP;AAMD,CARM"}
@@ -0,0 +1,36 @@
1
+ import { isDifferentChannel, isMyMessage, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';
2
+ import { useChannelHandler } from '../handler/useChannelHandler';
3
+ import { useAppFeatures } from './useAppFeatures';
4
+ const HOOK_NAME = 'useMessageOutgoingStatus';
5
+ export const useMessageOutgoingStatus = (sdk, channel, message) => {
6
+ const features = useAppFeatures(sdk);
7
+ const forceUpdate = useForceUpdate();
8
+ const currentUser = sdk.currentUser;
9
+ const uniqId = useUniqId(HOOK_NAME);
10
+ useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {
11
+ onDeliveryReceiptUpdated(eventChannel) {
12
+ if (isDifferentChannel(channel, eventChannel)) return;
13
+ if (!isMyMessage(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return;
14
+ forceUpdate();
15
+ },
16
+
17
+ onReadReceiptUpdated(eventChannel) {
18
+ if (isDifferentChannel(channel, eventChannel)) return;
19
+ if (!isMyMessage(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return;
20
+ forceUpdate();
21
+ }
22
+
23
+ });
24
+ if (!message) return 'NONE';
25
+ if (message.sendingStatus === 'pending') return 'PENDING';
26
+ if (message.sendingStatus === 'failed') return 'FAILED';
27
+ if (channel.getUnreadMemberCount(message) === 0) return 'READ';
28
+
29
+ if (features.deliveryReceiptEnabled) {
30
+ if (channel.getUndeliveredMemberCount(message) === 0) return 'DELIVERED';
31
+ return 'UNDELIVERED';
32
+ }
33
+
34
+ return 'UNREAD';
35
+ };
36
+ //# sourceMappingURL=useMessageOutgoingStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isDifferentChannel","isMyMessage","useForceUpdate","useUniqId","useChannelHandler","useAppFeatures","HOOK_NAME","useMessageOutgoingStatus","sdk","channel","message","features","forceUpdate","currentUser","uniqId","onDeliveryReceiptUpdated","eventChannel","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,SAASA,kBAAT,EAA6BC,WAA7B,EAA0CC,cAA1C,EAA0DC,SAA1D,QAA2E,uBAA3E;AAEA,SAASC,iBAAT,QAAkC,8BAAlC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AAEA,MAAMC,SAAS,GAAG,0BAAlB;AAIA,OAAO,MAAMC,wBAAwB,GAAG,CACtCC,GADsC,EAEtCC,OAFsC,EAGtCC,OAHsC,KAIhB;EACtB,MAAMC,QAAQ,GAAGN,cAAc,CAACG,GAAD,CAA/B;EACA,MAAMI,WAAW,GAAGV,cAAc,EAAlC;EACA,MAAMW,WAAW,GAAGL,GAAG,CAACK,WAAxB;EAEA,MAAMC,MAAM,GAAGX,SAAS,CAACG,SAAD,CAAxB;EACAF,iBAAiB,CAACI,GAAD,EAAO,GAAEF,SAAU,IAAGQ,MAAO,EAA7B,EAAgC;IAC/CC,wBAAwB,CAACC,YAAD,EAAe;MACrC,IAAIhB,kBAAkB,CAACS,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACf,WAAW,CAACS,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ,CAN8C;;IAO/CM,oBAAoB,CAACF,YAAD,EAAe;MACjC,IAAIhB,kBAAkB,CAACS,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACf,WAAW,CAACS,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ;;EAZ8C,CAAhC,CAAjB;EAeA,IAAI,CAACF,OAAL,EAAc,OAAO,MAAP;EAEd,IAAIA,OAAO,CAACS,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;EAEzC,IAAIT,OAAO,CAACS,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EAExC,IAAIV,OAAO,CAACW,oBAAR,CAA6BV,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACU,sBAAb,EAAqC;IACnC,IAAIZ,OAAO,CAACa,yBAAR,CAAkCZ,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CAvCM"}
@@ -1,17 +1,28 @@
1
- import { useEffect } from 'react';
1
+ import { useEffect, useLayoutEffect, useRef } from 'react';
2
2
  import { Logger } from '@sendbird/uikit-utils';
3
- export const useChannelHandler = function (sdk, handlerId, hookHandler) {
4
- let deps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
3
+ export const useChannelHandler = (sdk, handlerId, hookHandler) => {
4
+ const handlerRef = useRef(hookHandler);
5
+ useLayoutEffect(() => {
6
+ handlerRef.current = hookHandler;
7
+ });
5
8
  useEffect(() => {
6
9
  Logger.debug('[useChannelHandler] hook called by', handlerId);
7
10
  const handler = new sdk.ChannelHandler();
8
11
  const handlerKeys = Object.keys(handler);
9
12
  handlerKeys.forEach(key => {
10
- const hookHandlerFn = hookHandler[key];
11
- if (hookHandlerFn) handler[key] = hookHandlerFn;
13
+ handler[key] = function () {
14
+ var _handlerRef$current$k, _handlerRef$current;
15
+
16
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
17
+ args[_key] = arguments[_key];
18
+ }
19
+
20
+ // @ts-ignore
21
+ (_handlerRef$current$k = (_handlerRef$current = handlerRef.current)[key]) === null || _handlerRef$current$k === void 0 ? void 0 : _handlerRef$current$k.call(_handlerRef$current, ...args);
22
+ };
12
23
  });
13
24
  sdk.addChannelHandler(handlerId, handler);
14
25
  return () => sdk.removeChannelHandler(handlerId);
15
- }, [sdk, handlerId, ...deps]);
26
+ }, [sdk, handlerId]);
16
27
  };
17
28
  //# sourceMappingURL=useChannelHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","Logger","useChannelHandler","sdk","handlerId","hookHandler","deps","debug","handler","ChannelHandler","handlerKeys","Object","keys","forEach","key","hookHandlerFn","addChannelHandler","removeChannelHandler"],"sources":["useChannelHandler.ts"],"sourcesContent":["import React, { useEffect } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport { Logger, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nexport const useChannelHandler = (\n sdk: SendbirdChatSDK,\n handlerId: string,\n hookHandler: Partial<Sendbird.ChannelHandler>,\n deps: React.DependencyList = [],\n) => {\n useEffect(() => {\n Logger.debug('[useChannelHandler] hook called by', handlerId);\n\n const handler = new sdk.ChannelHandler();\n const handlerKeys = Object.keys(handler) as (keyof typeof handler)[];\n handlerKeys.forEach((key) => {\n const hookHandlerFn = hookHandler[key];\n if (hookHandlerFn) handler[key] = hookHandlerFn as () => unknown;\n });\n\n sdk.addChannelHandler(handlerId, handler);\n return () => sdk.removeChannelHandler(handlerId);\n }, [sdk, handlerId, ...deps]);\n};\n"],"mappings":"AAAA,SAAgBA,SAAhB,QAAiC,OAAjC;AAGA,SAASC,MAAT,QAAwC,uBAAxC;AAEA,OAAO,MAAMC,iBAAiB,GAAG,UAC/BC,GAD+B,EAE/BC,SAF+B,EAG/BC,WAH+B,EAK5B;EAAA,IADHC,IACG,uEAD0B,EAC1B;EACHN,SAAS,CAAC,MAAM;IACdC,MAAM,CAACM,KAAP,CAAa,oCAAb,EAAmDH,SAAnD;IAEA,MAAMI,OAAO,GAAG,IAAIL,GAAG,CAACM,cAAR,EAAhB;IACA,MAAMC,WAAW,GAAGC,MAAM,CAACC,IAAP,CAAYJ,OAAZ,CAApB;IACAE,WAAW,CAACG,OAAZ,CAAqBC,GAAD,IAAS;MAC3B,MAAMC,aAAa,GAAGV,WAAW,CAACS,GAAD,CAAjC;MACA,IAAIC,aAAJ,EAAmBP,OAAO,CAACM,GAAD,CAAP,GAAeC,aAAf;IACpB,CAHD;IAKAZ,GAAG,CAACa,iBAAJ,CAAsBZ,SAAtB,EAAiCI,OAAjC;IACA,OAAO,MAAML,GAAG,CAACc,oBAAJ,CAAyBb,SAAzB,CAAb;EACD,CAZQ,EAYN,CAACD,GAAD,EAAMC,SAAN,EAAiB,GAAGE,IAApB,CAZM,CAAT;AAaD,CAnBM"}
1
+ {"version":3,"names":["useEffect","useLayoutEffect","useRef","Logger","useChannelHandler","sdk","handlerId","hookHandler","handlerRef","current","debug","handler","ChannelHandler","handlerKeys","Object","keys","forEach","key","args","addChannelHandler","removeChannelHandler"],"sources":["useChannelHandler.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport { Logger, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nexport const useChannelHandler = (\n sdk: SendbirdChatSDK,\n handlerId: string,\n hookHandler: Partial<Sendbird.ChannelHandler>,\n) => {\n const handlerRef = useRef(hookHandler);\n useLayoutEffect(() => {\n handlerRef.current = hookHandler;\n });\n\n useEffect(() => {\n Logger.debug('[useChannelHandler] hook called by', handlerId);\n\n const handler = new sdk.ChannelHandler();\n const handlerKeys = Object.keys(handler) as (keyof typeof handler)[];\n handlerKeys.forEach((key) => {\n handler[key] = (...args: unknown[]) => {\n // @ts-ignore\n handlerRef.current[key]?.(...args);\n };\n });\n\n sdk.addChannelHandler(handlerId, handler);\n return () => sdk.removeChannelHandler(handlerId);\n }, [sdk, handlerId]);\n};\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,eAApB,EAAqCC,MAArC,QAAmD,OAAnD;AAGA,SAASC,MAAT,QAAwC,uBAAxC;AAEA,OAAO,MAAMC,iBAAiB,GAAG,CAC/BC,GAD+B,EAE/BC,SAF+B,EAG/BC,WAH+B,KAI5B;EACH,MAAMC,UAAU,GAAGN,MAAM,CAACK,WAAD,CAAzB;EACAN,eAAe,CAAC,MAAM;IACpBO,UAAU,CAACC,OAAX,GAAqBF,WAArB;EACD,CAFc,CAAf;EAIAP,SAAS,CAAC,MAAM;IACdG,MAAM,CAACO,KAAP,CAAa,oCAAb,EAAmDJ,SAAnD;IAEA,MAAMK,OAAO,GAAG,IAAIN,GAAG,CAACO,cAAR,EAAhB;IACA,MAAMC,WAAW,GAAGC,MAAM,CAACC,IAAP,CAAYJ,OAAZ,CAApB;IACAE,WAAW,CAACG,OAAZ,CAAqBC,GAAD,IAAS;MAC3BN,OAAO,CAACM,GAAD,CAAP,GAAe,YAAwB;QAAA;;QAAA,kCAApBC,IAAoB;UAApBA,IAAoB;QAAA;;QACrC;QACA,gDAAAV,UAAU,CAACC,OAAX,EAAmBQ,GAAnB,2GAA0B,GAAGC,IAA7B;MACD,CAHD;IAID,CALD;IAOAb,GAAG,CAACc,iBAAJ,CAAsBb,SAAtB,EAAiCK,OAAjC;IACA,OAAO,MAAMN,GAAG,CAACe,oBAAJ,CAAyBd,SAAzB,CAAb;EACD,CAdQ,EAcN,CAACD,GAAD,EAAMC,SAAN,CAdM,CAAT;AAeD,CAzBM"}
@@ -1,11 +1,12 @@
1
1
  export { useGroupChannelList } from './channel/useGroupChannelList';
2
2
  export { useGroupChannelMessages } from './channel/useGroupChannelMessages';
3
3
  export { useActiveGroupChannel } from './channel/useActiveGroupChannel';
4
- export { useUserList } from './common/useUserList';
4
+ export { useAppFeatures } from './common/useAppFeatures';
5
+ export { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';
5
6
  export { usePushTrigger } from './common/usePushTrigger';
6
- export { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';
7
7
  export { useTotalUnreadChannelCount } from './common/useTotalUnreadChannelCount';
8
- export { useAppFeatures } from './common/useAppFeatures';
8
+ export { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';
9
+ export { useUserList } from './common/useUserList';
9
10
  export { useChannelHandler } from './handler/useChannelHandler';
10
11
  export { useConnectionHandler } from './handler/useConnectionHandler';
11
12
  export { useUserEventHandler } from './handler/useUserEventHandler';
@@ -1 +1 @@
1
- {"version":3,"names":["useGroupChannelList","useGroupChannelMessages","useActiveGroupChannel","useUserList","usePushTrigger","useTotalUnreadMessageCount","useTotalUnreadChannelCount","useAppFeatures","useChannelHandler","useConnectionHandler","useUserEventHandler","CustomQuery"],"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,SAASA,mBAAT,QAAoC,+BAApC;AACA,SAASC,uBAAT,QAAwC,mCAAxC;AACA,SAASC,qBAAT,QAAsC,iCAAtC;AAEA,SAASC,WAAT,QAA4B,sBAA5B;AACA,SAASC,cAAT,QAA+B,yBAA/B;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,cAAT,QAA+B,yBAA/B;AAEA,SAASC,iBAAT,QAAkC,6BAAlC;AACA,SAASC,oBAAT,QAAqC,gCAArC;AACA,SAASC,mBAAT,QAAoC,+BAApC;AAEA,SAASC,WAAT,QAA4B,qBAA5B"}
1
+ {"version":3,"names":["useGroupChannelList","useGroupChannelMessages","useActiveGroupChannel","useAppFeatures","useMessageOutgoingStatus","usePushTrigger","useTotalUnreadChannelCount","useTotalUnreadMessageCount","useUserList","useChannelHandler","useConnectionHandler","useUserEventHandler","CustomQuery"],"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,SAASA,mBAAT,QAAoC,+BAApC;AACA,SAASC,uBAAT,QAAwC,mCAAxC;AACA,SAASC,qBAAT,QAAsC,iCAAtC;AAEA,SAASC,cAAT,QAA+B,yBAA/B;AACA,SAASC,wBAAT,QAAyC,mCAAzC;AACA,SAASC,cAAT,QAA+B,yBAA/B;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,WAAT,QAA4B,sBAA5B;AAEA,SAASC,iBAAT,QAAkC,6BAAlC;AACA,SAASC,oBAAT,QAAqC,gCAArC;AACA,SAASC,mBAAT,QAAoC,+BAApC;AAEA,SAASC,WAAT,QAA4B,qBAA5B"}
@@ -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":""}
@@ -1,2 +1,2 @@
1
- import type { UseGroupChannelList } from '../types';
1
+ import type { UseGroupChannelList } from '../../types';
2
2
  export declare const useGroupChannelList: UseGroupChannelList;
@@ -0,0 +1,14 @@
1
+ import type { SendbirdChannel } from '@sendbird/uikit-utils';
2
+ declare type Order = 'latest_last_message' | 'chronological' | 'channel_name_alphabetical' | 'metadata_value_alphabetical';
3
+ export declare const useGroupChannelListReducer: (order?: Order) => {
4
+ updateLoading: (status: boolean) => void;
5
+ updateRefreshing: (status: boolean) => void;
6
+ updateChannels: (channels: SendbirdChannel[]) => void;
7
+ deleteChannels: (channelUrls: string[]) => void;
8
+ setChannels: (channels: SendbirdChannel[], clearPrev: boolean) => void;
9
+ updateOrder: (order?: Order) => void;
10
+ loading: boolean;
11
+ refreshing: boolean;
12
+ groupChannels: import("sendbird").GroupChannel[];
13
+ };
14
+ export {};
@@ -1,2 +1,2 @@
1
- import type { UseGroupChannelList } from '../types';
1
+ import type { UseGroupChannelList } from '../../types';
2
2
  export declare const useGroupChannelListWithCollection: UseGroupChannelList;
@@ -1,2 +1,2 @@
1
- import type { UseGroupChannelList } from '../types';
1
+ import type { UseGroupChannelList } from '../../types';
2
2
  export declare const useGroupChannelListWithQuery: UseGroupChannelList;
@@ -0,0 +1,3 @@
1
+ import type { SendbirdAdminMessage, SendbirdChatSDK, SendbirdFileMessage, SendbirdGroupChannel, SendbirdUserMessage } from '@sendbird/uikit-utils';
2
+ export declare type SBUOutgoingStatus = 'NONE' | 'PENDING' | 'FAILED' | 'UNDELIVERED' | 'DELIVERED' | 'UNREAD' | 'READ';
3
+ export declare const useMessageOutgoingStatus: (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, message?: SendbirdFileMessage | SendbirdUserMessage | SendbirdAdminMessage | null) => SBUOutgoingStatus;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import type Sendbird from 'sendbird';
3
2
  import { SendbirdChatSDK } from '@sendbird/uikit-utils';
4
- export declare const useChannelHandler: (sdk: SendbirdChatSDK, handlerId: string, hookHandler: Partial<Sendbird.ChannelHandler>, deps?: React.DependencyList) => void;
3
+ export declare const useChannelHandler: (sdk: SendbirdChatSDK, handlerId: string, hookHandler: Partial<Sendbird.ChannelHandler>) => void;
@@ -1,11 +1,12 @@
1
1
  export { useGroupChannelList } from './channel/useGroupChannelList';
2
2
  export { useGroupChannelMessages } from './channel/useGroupChannelMessages';
3
3
  export { useActiveGroupChannel } from './channel/useActiveGroupChannel';
4
- export { useUserList } from './common/useUserList';
4
+ export { useAppFeatures } from './common/useAppFeatures';
5
+ export { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';
5
6
  export { usePushTrigger } from './common/usePushTrigger';
6
- export { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';
7
7
  export { useTotalUnreadChannelCount } from './common/useTotalUnreadChannelCount';
8
- export { useAppFeatures } from './common/useAppFeatures';
8
+ export { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';
9
+ export { useUserList } from './common/useUserList';
9
10
  export { useChannelHandler } from './handler/useChannelHandler';
10
11
  export { useConnectionHandler } from './handler/useConnectionHandler';
11
12
  export { useUserEventHandler } from './handler/useUserEventHandler';
@@ -31,12 +31,6 @@ export interface UseGroupChannelList {
31
31
  * @return {Promise<void>}
32
32
  * */
33
33
  refresh: () => Promise<void>;
34
- /**
35
- * Update channel, update or insert channel to state
36
- * @param {SendbirdGroupChannel} channel
37
- * @return {void}
38
- * */
39
- update: (channel: SendbirdGroupChannel) => void;
40
34
  /**
41
35
  * Get group channels state
42
36
  * */
@@ -49,7 +43,6 @@ export interface UseGroupChannelList {
49
43
  };
50
44
  }
51
45
  export declare type UseGroupChannelListOptions = {
52
- sortComparator?: (a: SendbirdGroupChannel, b: SendbirdGroupChannel) => number;
53
46
  queryCreator?: () => Sendbird.GroupChannelListQuery;
54
47
  collectionCreator?: () => SendbirdGroupChannelCollection;
55
48
  enableCollectionWithoutLocalCache?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendbird/uikit-chat-hooks",
3
- "version": "1.0.2",
3
+ "version": "1.1.1",
4
4
  "description": "React hooks that built with SendbirdChat SDK",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -38,7 +38,7 @@
38
38
  "access": "public"
39
39
  },
40
40
  "dependencies": {
41
- "@sendbird/uikit-utils": "1.0.2"
41
+ "@sendbird/uikit-utils": "1.1.1"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/react": "*",
@@ -69,5 +69,5 @@
69
69
  "readmeFile": "./README.md",
70
70
  "displayName": "@sendbird/uikit-chat-hooks"
71
71
  },
72
- "gitHead": "257ece5f957e03ff5c08b79780b33d9d19adc5de"
72
+ "gitHead": "7b0384ecf1025f70e8a19f0490231273893f3f56"
73
73
  }
@@ -1,4 +1,4 @@
1
- import type { UseGroupChannelList } from '../types';
1
+ import type { UseGroupChannelList } from '../../types';
2
2
  import { useGroupChannelListWithCollection } from './useGroupChannelListWithCollection';
3
3
  import { useGroupChannelListWithQuery } from './useGroupChannelListWithQuery';
4
4
 
@@ -0,0 +1,154 @@
1
+ import { useReducer } from 'react';
2
+
3
+ import type { SendbirdChannel } from '@sendbird/uikit-utils';
4
+ import { SendbirdGroupChannel, getGroupChannels } from '@sendbird/uikit-utils';
5
+
6
+ type Order = 'latest_last_message' | 'chronological' | 'channel_name_alphabetical' | 'metadata_value_alphabetical';
7
+
8
+ type Action =
9
+ | {
10
+ type: 'update_loading' | 'update_refreshing';
11
+ value: { status: boolean };
12
+ }
13
+ | {
14
+ type: 'update_channels';
15
+ value: { channels: SendbirdChannel[] };
16
+ }
17
+ | {
18
+ type: 'delete_channels';
19
+ value: { channelUrls: string[] };
20
+ }
21
+ | {
22
+ type: 'set_channels';
23
+ value: { channels: SendbirdChannel[]; clearPrev: boolean };
24
+ }
25
+ | {
26
+ type: 'update_order';
27
+ value: { order?: Order };
28
+ };
29
+
30
+ type State = {
31
+ loading: boolean;
32
+ refreshing: boolean;
33
+ groupChannels: SendbirdGroupChannel[];
34
+ order?: Order;
35
+ };
36
+
37
+ const defaultReducer = ({ ...draft }: State, action: Action) => {
38
+ const compareByOrder = createCompareByOrder(draft.order);
39
+
40
+ switch (action.type) {
41
+ case 'update_refreshing':
42
+ case 'update_loading': {
43
+ const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
44
+ draft[key] = action.value.status;
45
+ break;
46
+ }
47
+ case 'update_channels': {
48
+ getGroupChannels(action.value.channels).forEach((freshChannel) => {
49
+ const idx = draft.groupChannels.findIndex((staleChannel) => staleChannel.url === freshChannel.url);
50
+ if (idx > -1) draft.groupChannels[idx] = freshChannel;
51
+ });
52
+
53
+ compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
54
+ break;
55
+ }
56
+ case 'delete_channels': {
57
+ action.value.channelUrls.forEach((url) => {
58
+ const idx = draft.groupChannels.findIndex((c) => c.url === url);
59
+ if (idx > -1) draft.groupChannels.splice(idx, 1);
60
+ });
61
+
62
+ compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
63
+ break;
64
+ }
65
+ case 'set_channels': {
66
+ if (action.value.clearPrev) {
67
+ draft.groupChannels = getGroupChannels(action.value.channels);
68
+ } else {
69
+ draft.groupChannels = [...draft.groupChannels, ...getGroupChannels(action.value.channels)];
70
+ }
71
+
72
+ compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
73
+ break;
74
+ }
75
+ case 'update_order': {
76
+ draft.order = action.value.order;
77
+ break;
78
+ }
79
+ }
80
+ return draft;
81
+ };
82
+
83
+ export const useGroupChannelListReducer = (order?: Order) => {
84
+ const [{ loading, refreshing, groupChannels }, dispatch] = useReducer(defaultReducer, {
85
+ loading: true,
86
+ refreshing: false,
87
+ groupChannels: [],
88
+ order,
89
+ });
90
+
91
+ const updateChannels = (channels: SendbirdChannel[]) => {
92
+ dispatch({ type: 'update_channels', value: { channels } });
93
+ };
94
+ const deleteChannels = (channelUrls: string[]) => {
95
+ dispatch({ type: 'delete_channels', value: { channelUrls } });
96
+ };
97
+ const setChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {
98
+ dispatch({ type: 'set_channels', value: { channels, clearPrev } });
99
+ };
100
+ const updateLoading = (status: boolean) => {
101
+ dispatch({ type: 'update_loading', value: { status } });
102
+ };
103
+ const updateRefreshing = (status: boolean) => {
104
+ dispatch({ type: 'update_refreshing', value: { status } });
105
+ };
106
+ const updateOrder = (order?: Order) => {
107
+ dispatch({ type: 'update_order', value: { order } });
108
+ };
109
+
110
+ return {
111
+ updateLoading,
112
+ updateRefreshing,
113
+ updateChannels,
114
+ deleteChannels,
115
+ setChannels,
116
+
117
+ updateOrder,
118
+
119
+ loading,
120
+ refreshing,
121
+ groupChannels,
122
+ };
123
+ };
124
+
125
+ const createCompareByOrder = (order?: Order) => {
126
+ if (!order) return undefined;
127
+
128
+ return (channel1: SendbirdGroupChannel, channel2: SendbirdGroupChannel): number => {
129
+ switch (order) {
130
+ case 'latest_last_message': {
131
+ if (channel1.lastMessage && channel2.lastMessage) {
132
+ return channel2.lastMessage.createdAt - channel1.lastMessage.createdAt;
133
+ } else if (channel1.lastMessage) {
134
+ return -1;
135
+ } else if (channel2.lastMessage) {
136
+ return 1;
137
+ } else {
138
+ return channel2.createdAt - channel1.createdAt;
139
+ }
140
+ }
141
+
142
+ case 'chronological': {
143
+ return channel2.createdAt - channel1.createdAt;
144
+ }
145
+
146
+ case 'channel_name_alphabetical': {
147
+ return channel1.name.localeCompare(channel2.name);
148
+ }
149
+ default: {
150
+ return 0;
151
+ }
152
+ }
153
+ };
154
+ };