@sendbird/uikit-chat-hooks 2.3.0 → 2.4.0

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 (105) hide show
  1. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +2 -4
  2. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  3. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +2 -3
  4. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  5. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +7 -8
  6. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  7. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +8 -7
  8. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  9. package/lib/commonjs/channel/useOpenChannel.js +33 -0
  10. package/lib/commonjs/channel/useOpenChannel.js.map +1 -0
  11. package/lib/commonjs/channel/useOpenChannelList/index.js +15 -0
  12. package/lib/commonjs/channel/useOpenChannelList/index.js.map +1 -0
  13. package/lib/commonjs/channel/useOpenChannelList/reducer.js +149 -0
  14. package/lib/commonjs/channel/useOpenChannelList/reducer.js.map +1 -0
  15. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js +119 -0
  16. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -0
  17. package/lib/commonjs/channel/useOpenChannelMessages/index.js +15 -0
  18. package/lib/commonjs/channel/useOpenChannelMessages/index.js.map +1 -0
  19. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +154 -0
  20. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +1 -0
  21. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +240 -0
  22. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -0
  23. package/lib/commonjs/common/useMessageOutgoingStatus.js +2 -4
  24. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
  25. package/lib/commonjs/common/useTotalUnreadChannelCount.js +2 -4
  26. package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +1 -1
  27. package/lib/commonjs/common/useTotalUnreadMessageCount.js +2 -4
  28. package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
  29. package/lib/commonjs/common/useUserList.js +2 -0
  30. package/lib/commonjs/common/useUserList.js.map +1 -1
  31. package/lib/commonjs/handler/useChannelHandler.js +34 -4
  32. package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
  33. package/lib/commonjs/index.js +24 -8
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/commonjs/types.js.map +1 -1
  36. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +3 -4
  37. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  38. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +3 -3
  39. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  40. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +8 -8
  41. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  42. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +9 -7
  43. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  44. package/lib/module/channel/useOpenChannel.js +22 -0
  45. package/lib/module/channel/useOpenChannel.js.map +1 -0
  46. package/lib/module/channel/useOpenChannelList/index.js +5 -0
  47. package/lib/module/channel/useOpenChannelList/index.js.map +1 -0
  48. package/lib/module/channel/useOpenChannelList/reducer.js +139 -0
  49. package/lib/module/channel/useOpenChannelList/reducer.js.map +1 -0
  50. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js +107 -0
  51. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -0
  52. package/lib/module/channel/useOpenChannelMessages/index.js +5 -0
  53. package/lib/module/channel/useOpenChannelMessages/index.js.map +1 -0
  54. package/lib/module/channel/useOpenChannelMessages/reducer.js +144 -0
  55. package/lib/module/channel/useOpenChannelMessages/reducer.js.map +1 -0
  56. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +228 -0
  57. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -0
  58. package/lib/module/common/useMessageOutgoingStatus.js +3 -4
  59. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
  60. package/lib/module/common/useTotalUnreadChannelCount.js +3 -5
  61. package/lib/module/common/useTotalUnreadChannelCount.js.map +1 -1
  62. package/lib/module/common/useTotalUnreadMessageCount.js +3 -4
  63. package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
  64. package/lib/module/common/useUserList.js +2 -0
  65. package/lib/module/common/useUserList.js.map +1 -1
  66. package/lib/module/handler/useChannelHandler.js +34 -4
  67. package/lib/module/handler/useChannelHandler.js.map +1 -1
  68. package/lib/module/index.js +3 -1
  69. package/lib/module/index.js.map +1 -1
  70. package/lib/module/types.js.map +1 -1
  71. package/lib/typescript/src/channel/useOpenChannel.d.ts +6 -0
  72. package/lib/typescript/src/channel/useOpenChannelList/index.d.ts +2 -0
  73. package/lib/typescript/src/channel/useOpenChannelList/reducer.d.ts +13 -0
  74. package/lib/typescript/src/channel/useOpenChannelList/useOpenChannelListWithQuery.d.ts +2 -0
  75. package/lib/typescript/src/channel/useOpenChannelMessages/index.d.ts +2 -0
  76. package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +15 -0
  77. package/lib/typescript/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.d.ts +2 -0
  78. package/lib/typescript/src/handler/useChannelHandler.d.ts +4 -1
  79. package/lib/typescript/src/index.d.ts +4 -2
  80. package/lib/typescript/src/types.d.ts +141 -3
  81. package/package.json +4 -4
  82. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +3 -5
  83. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +3 -4
  84. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +8 -8
  85. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +9 -6
  86. package/src/channel/useOpenChannel.ts +21 -0
  87. package/src/channel/useOpenChannelList/index.ts +6 -0
  88. package/src/channel/useOpenChannelList/reducer.ts +115 -0
  89. package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +112 -0
  90. package/src/channel/useOpenChannelMessages/index.ts +6 -0
  91. package/src/channel/useOpenChannelMessages/reducer.ts +125 -0
  92. package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +247 -0
  93. package/src/common/useMessageOutgoingStatus.ts +3 -5
  94. package/src/common/useTotalUnreadChannelCount.ts +3 -5
  95. package/src/common/useTotalUnreadMessageCount.ts +3 -4
  96. package/src/common/useUserList.ts +2 -0
  97. package/src/handler/useChannelHandler.ts +31 -5
  98. package/src/index.ts +8 -1
  99. package/src/types.ts +171 -2
  100. package/lib/commonjs/channel/useActiveGroupChannel.js +0 -22
  101. package/lib/commonjs/channel/useActiveGroupChannel.js.map +0 -1
  102. package/lib/module/channel/useActiveGroupChannel.js +0 -12
  103. package/lib/module/channel/useActiveGroupChannel.js.map +0 -1
  104. package/lib/typescript/src/channel/useActiveGroupChannel.d.ts +0 -5
  105. package/src/channel/useActiveGroupChannel.ts +0 -13
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useRef","NOOP","isDifferentChannel","useAsyncEffect","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useOpenChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","useOpenChannelMessagesWithQuery","sdk","userId","options","queryRef","forceUpdate","handlerId","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","init","uid","current","queryCreator","hasNext","list","load","currentUser","channelUpdater","isOpenChannel","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelParticipantCountChanged","onChannelDeleted","channelUrl","type","url","onOperatorUpdated","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","enter","error","onError","exit","catch","refresh","prev","next","length","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","err","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId"],"sources":["useOpenChannelMessagesWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport type { SendbirdBaseChannel, SendbirdOpenChannel, SendbirdPreviousMessageListQuery } from '@sendbird/uikit-utils';\nimport {\n NOOP,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseOpenChannelMessages, UseOpenChannelMessagesOptions } from '../../types';\nimport { useOpenChannelMessagesReducer } from './reducer';\n\nconst createMessageQuery = (channel: SendbirdOpenChannel, creator?: UseOpenChannelMessagesOptions['queryCreator']) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nexport const useOpenChannelMessagesWithQuery: UseOpenChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n const forceUpdate = useForceUpdate();\n const handlerId = useUniqHandlerId('useOpenChannelMessagesWithQuery');\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 } = useOpenChannelMessagesReducer(userId, options?.sortComparator);\n\n const init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isOpenChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useChannelHandler(\n sdk,\n handlerId,\n {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelParticipantCountChanged(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelUpdater(eventChannel);\n },\n onChannelDeleted(channelUrl, type) {\n if (channel.url === channelUrl && type === 'open') {\n options?.onChannelDeleted?.();\n }\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(channel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n },\n 'open',\n );\n\n useAsyncEffect(async () => {\n updateLoading(true);\n\n try {\n await channel.enter();\n await init(userId);\n } catch (error) {\n options?.onError?.(error);\n options?.onChannelDeleted?.();\n } finally {\n updateLoading(false);\n }\n\n return () => {\n channel.exit().catch(NOOP);\n };\n }, [init, userId]);\n\n const refresh: ReturnType<UseOpenChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const prev: ReturnType<UseOpenChannelMessages>['prev'] = useFreshCallback(async () => {\n if (queryRef.current && queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n });\n\n const next: ReturnType<UseOpenChannelMessages>['next'] = useFreshCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const sendUserMessage: ReturnType<UseOpenChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const sendFileMessage: ReturnType<UseOpenChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const updateUserMessage: ReturnType<UseOpenChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseOpenChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseOpenChannelMessages>['resendMessage'] = useFreshCallback(async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateNextMessages([message], false, sdk.currentUser.userId);\n });\n const deleteMessage: ReturnType<UseOpenChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\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 };\n};\n"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
- import { isDifferentChannel, isMyMessage, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';
1
+ import { isDifferentChannel, isMyMessage, useForceUpdate, useUniqHandlerId } from '@sendbird/uikit-utils';
2
2
  import { useChannelHandler } from '../handler/useChannelHandler';
3
3
  import { useAppFeatures } from './useAppFeatures';
4
- const HOOK_NAME = 'useMessageOutgoingStatus';
5
4
  export const useMessageOutgoingStatus = (sdk, channel, message) => {
6
5
  const features = useAppFeatures(sdk);
7
6
  const forceUpdate = useForceUpdate();
8
7
  const currentUser = sdk.currentUser;
9
- const uniqId = useUniqId(HOOK_NAME);
10
- useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {
8
+ const handlerId = useUniqHandlerId('useMessageOutgoingStatus');
9
+ useChannelHandler(sdk, handlerId, {
11
10
  onUndeliveredMemberStatusUpdated(eventChannel) {
12
11
  if (isDifferentChannel(channel, eventChannel)) return;
13
12
  if (!isMyMessage(message, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId)) return;
@@ -1 +1 @@
1
- {"version":3,"names":["isDifferentChannel","isMyMessage","useForceUpdate","useUniqId","useChannelHandler","useAppFeatures","HOOK_NAME","useMessageOutgoingStatus","sdk","channel","message","features","forceUpdate","currentUser","uniqId","onUndeliveredMemberStatusUpdated","eventChannel","userId","onUnreadMemberStatusUpdated","sendingStatus","isBroadcast","isSuper","getUnreadMemberCount","deliveryReceiptEnabled","getUndeliveredMemberCount"],"sources":["useMessageOutgoingStatus.ts"],"sourcesContent":["import type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMessage } 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?: SendbirdMessage | 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 onUndeliveredMemberStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n onUnreadMemberStatusUpdated(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 ('sendingStatus' in message) {\n if (message.sendingStatus === 'pending') return 'PENDING';\n if (message.sendingStatus === 'failed') return 'FAILED';\n }\n\n if (channel.isBroadcast || channel.isSuper) return 'NONE';\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":"AACA,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,gCAAgC,CAACC,YAAD,EAAe;MAC7C,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,2BAA2B,CAACF,YAAD,EAAe;MACxC,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,IAAI,mBAAmBA,OAAvB,EAAgC;IAC9B,IAAIA,OAAO,CAACS,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;IACzC,IAAIT,OAAO,CAACS,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EACzC;;EAED,IAAIV,OAAO,CAACW,WAAR,IAAuBX,OAAO,CAACY,OAAnC,EAA4C,OAAO,MAAP;EAE5C,IAAIZ,OAAO,CAACa,oBAAR,CAA6BZ,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACY,sBAAb,EAAqC;IACnC,IAAId,OAAO,CAACe,yBAAR,CAAkCd,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CA1CM"}
1
+ {"version":3,"names":["isDifferentChannel","isMyMessage","useForceUpdate","useUniqHandlerId","useChannelHandler","useAppFeatures","useMessageOutgoingStatus","sdk","channel","message","features","forceUpdate","currentUser","handlerId","onUndeliveredMemberStatusUpdated","eventChannel","userId","onUnreadMemberStatusUpdated","sendingStatus","isBroadcast","isSuper","getUnreadMemberCount","deliveryReceiptEnabled","getUndeliveredMemberCount"],"sources":["useMessageOutgoingStatus.ts"],"sourcesContent":["import type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMessage } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, isMyMessage, useForceUpdate, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport { useAppFeatures } from './useAppFeatures';\n\nexport type SBUOutgoingStatus = 'NONE' | 'PENDING' | 'FAILED' | 'UNDELIVERED' | 'DELIVERED' | 'UNREAD' | 'READ';\n\nexport const useMessageOutgoingStatus = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n message?: SendbirdMessage | null,\n): SBUOutgoingStatus => {\n const features = useAppFeatures(sdk);\n const forceUpdate = useForceUpdate();\n const currentUser = sdk.currentUser;\n const handlerId = useUniqHandlerId('useMessageOutgoingStatus');\n\n useChannelHandler(sdk, handlerId, {\n onUndeliveredMemberStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n onUnreadMemberStatusUpdated(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 ('sendingStatus' in message) {\n if (message.sendingStatus === 'pending') return 'PENDING';\n if (message.sendingStatus === 'failed') return 'FAILED';\n }\n\n if (channel.isBroadcast || channel.isSuper) return 'NONE';\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":"AACA,SAASA,kBAAT,EAA6BC,WAA7B,EAA0CC,cAA1C,EAA0DC,gBAA1D,QAAkF,uBAAlF;AAEA,SAASC,iBAAT,QAAkC,8BAAlC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AAIA,OAAO,MAAMC,wBAAwB,GAAG,CACtCC,GADsC,EAEtCC,OAFsC,EAGtCC,OAHsC,KAIhB;EACtB,MAAMC,QAAQ,GAAGL,cAAc,CAACE,GAAD,CAA/B;EACA,MAAMI,WAAW,GAAGT,cAAc,EAAlC;EACA,MAAMU,WAAW,GAAGL,GAAG,CAACK,WAAxB;EACA,MAAMC,SAAS,GAAGV,gBAAgB,CAAC,0BAAD,CAAlC;EAEAC,iBAAiB,CAACG,GAAD,EAAMM,SAAN,EAAiB;IAChCC,gCAAgC,CAACC,YAAD,EAAe;MAC7C,IAAIf,kBAAkB,CAACQ,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACd,WAAW,CAACQ,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ,CAN+B;;IAOhCM,2BAA2B,CAACF,YAAD,EAAe;MACxC,IAAIf,kBAAkB,CAACQ,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACd,WAAW,CAACQ,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ;;EAZ+B,CAAjB,CAAjB;EAeA,IAAI,CAACF,OAAL,EAAc,OAAO,MAAP;;EAEd,IAAI,mBAAmBA,OAAvB,EAAgC;IAC9B,IAAIA,OAAO,CAACS,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;IACzC,IAAIT,OAAO,CAACS,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EACzC;;EAED,IAAIV,OAAO,CAACW,WAAR,IAAuBX,OAAO,CAACY,OAAnC,EAA4C,OAAO,MAAP;EAE5C,IAAIZ,OAAO,CAACa,oBAAR,CAA6BZ,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACY,sBAAb,EAAqC;IACnC,IAAId,OAAO,CAACe,yBAAR,CAAkCd,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CA1CM"}
@@ -1,15 +1,13 @@
1
1
  import { useState } from 'react';
2
- import { truncatedCount, useAsyncEffect } from '@sendbird/uikit-utils';
3
- import { useUniqId } from '@sendbird/uikit-utils';
2
+ import { truncatedCount, useAsyncEffect, useUniqHandlerId } from '@sendbird/uikit-utils';
4
3
  import { useUserEventHandler } from '../handler/useUserEventHandler';
5
- const HOOK_NAME = 'useTotalUnreadChannelCount';
6
4
  export const useTotalUnreadChannelCount = (sdk, params) => {
7
- const id = useUniqId(HOOK_NAME);
5
+ const handlerId = useUniqHandlerId('useTotalUnreadChannelCount');
8
6
  const [unreadChannelCount, setUnreadChannelCount] = useState(0);
9
7
  useAsyncEffect(async () => {
10
8
  setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
11
9
  }, [sdk]);
12
- useUserEventHandler(sdk, HOOK_NAME + id, {
10
+ useUserEventHandler(sdk, handlerId, {
13
11
  onTotalUnreadMessageCountUpdated: async () => {
14
12
  setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
15
13
  }
@@ -1 +1 @@
1
- {"version":3,"names":["useState","truncatedCount","useAsyncEffect","useUniqId","useUserEventHandler","HOOK_NAME","useTotalUnreadChannelCount","sdk","params","id","unreadChannelCount","setUnreadChannelCount","groupChannel","getTotalUnreadChannelCount","onTotalUnreadMessageCountUpdated","maxCount"],"sources":["useTotalUnreadChannelCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedCount, useAsyncEffect } from '@sendbird/uikit-utils';\nimport { useUniqId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Params = {\n maxCount?: number;\n};\nconst HOOK_NAME = 'useTotalUnreadChannelCount';\nexport const useTotalUnreadChannelCount = (sdk: SendbirdChatSDK, params?: Params) => {\n const id = useUniqId(HOOK_NAME);\n const [unreadChannelCount, setUnreadChannelCount] = useState(0);\n\n useAsyncEffect(async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n }, [sdk]);\n\n useUserEventHandler(sdk, HOOK_NAME + id, {\n onTotalUnreadMessageCountUpdated: async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n },\n });\n\n return truncatedCount(unreadChannelCount, params?.maxCount);\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAGA,SAASC,cAAT,EAAyBC,cAAzB,QAA+C,uBAA/C;AACA,SAASC,SAAT,QAA0B,uBAA1B;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAKA,MAAMC,SAAS,GAAG,4BAAlB;AACA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,EAAE,GAAGN,SAAS,CAACE,SAAD,CAApB;EACA,MAAM,CAACK,kBAAD,EAAqBC,qBAArB,IAA8CX,QAAQ,CAAC,CAAD,CAA5D;EAEAE,cAAc,CAAC,YAAY;IACzBS,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFa,EAEX,CAACN,GAAD,CAFW,CAAd;EAIAH,mBAAmB,CAACG,GAAD,EAAMF,SAAS,GAAGI,EAAlB,EAAsB;IACvCK,gCAAgC,EAAE,YAAY;MAC5CH,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHsC,CAAtB,CAAnB;EAMA,OAAOZ,cAAc,CAACS,kBAAD,EAAqBF,MAArB,aAAqBA,MAArB,uBAAqBA,MAAM,CAAEO,QAA7B,CAArB;AACD,CAfM"}
1
+ {"version":3,"names":["useState","truncatedCount","useAsyncEffect","useUniqHandlerId","useUserEventHandler","useTotalUnreadChannelCount","sdk","params","handlerId","unreadChannelCount","setUnreadChannelCount","groupChannel","getTotalUnreadChannelCount","onTotalUnreadMessageCountUpdated","maxCount"],"sources":["useTotalUnreadChannelCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedCount, useAsyncEffect, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Params = {\n maxCount?: number;\n};\nexport const useTotalUnreadChannelCount = (sdk: SendbirdChatSDK, params?: Params) => {\n const handlerId = useUniqHandlerId('useTotalUnreadChannelCount');\n const [unreadChannelCount, setUnreadChannelCount] = useState(0);\n\n useAsyncEffect(async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n }, [sdk]);\n\n useUserEventHandler(sdk, handlerId, {\n onTotalUnreadMessageCountUpdated: async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n },\n });\n\n return truncatedCount(unreadChannelCount, params?.maxCount);\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAGA,SAASC,cAAT,EAAyBC,cAAzB,EAAyCC,gBAAzC,QAAiE,uBAAjE;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAKA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,SAAS,GAAGL,gBAAgB,CAAC,4BAAD,CAAlC;EACA,MAAM,CAACM,kBAAD,EAAqBC,qBAArB,IAA8CV,QAAQ,CAAC,CAAD,CAA5D;EAEAE,cAAc,CAAC,YAAY;IACzBQ,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFa,EAEX,CAACN,GAAD,CAFW,CAAd;EAIAF,mBAAmB,CAACE,GAAD,EAAME,SAAN,EAAiB;IAClCK,gCAAgC,EAAE,YAAY;MAC5CH,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHiC,CAAjB,CAAnB;EAMA,OAAOX,cAAc,CAACQ,kBAAD,EAAqBF,MAArB,aAAqBA,MAArB,uBAAqBA,MAAM,CAAEO,QAA7B,CAArB;AACD,CAfM"}
@@ -1,12 +1,11 @@
1
1
  import { useState } from 'react';
2
2
  import { SuperChannelFilter } from '@sendbird/chat/groupChannel';
3
- import { truncatedCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';
3
+ import { truncatedCount, useAsyncEffect, useUniqHandlerId } from '@sendbird/uikit-utils';
4
4
  import { useUserEventHandler } from '../handler/useUserEventHandler';
5
- const HOOK_NAME = 'useTotalUnreadMessageCount';
6
5
  export const useTotalUnreadMessageCount = (sdk, options) => {
7
6
  var _options$params, _options$params2;
8
7
 
9
- const id = useUniqId(HOOK_NAME);
8
+ const handlerId = useUniqHandlerId('useTotalUnreadMessageCount');
10
9
  const [unreadMessageCount, setUnreadMessageCount] = useState(0);
11
10
  useAsyncEffect(async () => {
12
11
  const unreadCount = await sdk.groupChannel.getTotalUnreadMessageCount({
@@ -15,7 +14,7 @@ export const useTotalUnreadMessageCount = (sdk, options) => {
15
14
  });
16
15
  setUnreadMessageCount(unreadCount);
17
16
  }, [sdk, options === null || options === void 0 ? void 0 : (_options$params = options.params) === null || _options$params === void 0 ? void 0 : _options$params.superChannelFilter, options === null || options === void 0 ? void 0 : (_options$params2 = options.params) === null || _options$params2 === void 0 ? void 0 : _options$params2.channelCustomTypesFilter]);
18
- useUserEventHandler(sdk, `${HOOK_NAME}_${id}`, {
17
+ useUserEventHandler(sdk, handlerId, {
19
18
  onTotalUnreadMessageCountUpdated: totalCount => setUnreadMessageCount(totalCount)
20
19
  });
21
20
  return truncatedCount(unreadMessageCount, options === null || options === void 0 ? void 0 : options.maxCount);
@@ -1 +1 @@
1
- {"version":3,"names":["useState","SuperChannelFilter","truncatedCount","useAsyncEffect","useUniqId","useUserEventHandler","HOOK_NAME","useTotalUnreadMessageCount","sdk","options","id","unreadMessageCount","setUnreadMessageCount","unreadCount","groupChannel","getTotalUnreadMessageCount","superChannelFilter","ALL","params","channelCustomTypesFilter","onTotalUnreadMessageCountUpdated","totalCount","maxCount"],"sources":["useTotalUnreadMessageCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { SuperChannelFilter, TotalUnreadMessageCountParams } from '@sendbird/chat/groupChannel';\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Options = {\n params?: TotalUnreadMessageCountParams;\n maxCount?: number;\n};\n\nconst HOOK_NAME = 'useTotalUnreadMessageCount';\nexport const useTotalUnreadMessageCount = (sdk: SendbirdChatSDK, options?: Options) => {\n const id = useUniqId(HOOK_NAME);\n const [unreadMessageCount, setUnreadMessageCount] = useState(0);\n\n useAsyncEffect(async () => {\n const unreadCount = await sdk.groupChannel.getTotalUnreadMessageCount({\n superChannelFilter: SuperChannelFilter.ALL,\n ...options?.params,\n });\n setUnreadMessageCount(unreadCount);\n }, [sdk, options?.params?.superChannelFilter, options?.params?.channelCustomTypesFilter]);\n\n useUserEventHandler(sdk, `${HOOK_NAME}_${id}`, {\n onTotalUnreadMessageCountUpdated: (totalCount: number) => setUnreadMessageCount(totalCount),\n });\n\n return truncatedCount(unreadMessageCount, options?.maxCount);\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAEA,SAASC,kBAAT,QAAkE,6BAAlE;AAEA,SAASC,cAAT,EAAyBC,cAAzB,EAAyCC,SAAzC,QAA0D,uBAA1D;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAOA,MAAMC,SAAS,GAAG,4BAAlB;AACA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,OAAvB,KAA6C;EAAA;;EACrF,MAAMC,EAAE,GAAGN,SAAS,CAACE,SAAD,CAApB;EACA,MAAM,CAACK,kBAAD,EAAqBC,qBAArB,IAA8CZ,QAAQ,CAAC,CAAD,CAA5D;EAEAG,cAAc,CAAC,YAAY;IACzB,MAAMU,WAAW,GAAG,MAAML,GAAG,CAACM,YAAJ,CAAiBC,0BAAjB,CAA4C;MACpEC,kBAAkB,EAAEf,kBAAkB,CAACgB,GAD6B;MAEpE,IAAGR,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAES,MAAZ;IAFoE,CAA5C,CAA1B;IAIAN,qBAAqB,CAACC,WAAD,CAArB;EACD,CANa,EAMX,CAACL,GAAD,EAAMC,OAAN,aAAMA,OAAN,0CAAMA,OAAO,CAAES,MAAf,oDAAM,gBAAiBF,kBAAvB,EAA2CP,OAA3C,aAA2CA,OAA3C,2CAA2CA,OAAO,CAAES,MAApD,qDAA2C,iBAAiBC,wBAA5D,CANW,CAAd;EAQAd,mBAAmB,CAACG,GAAD,EAAO,GAAEF,SAAU,IAAGI,EAAG,EAAzB,EAA4B;IAC7CU,gCAAgC,EAAGC,UAAD,IAAwBT,qBAAqB,CAACS,UAAD;EADlC,CAA5B,CAAnB;EAIA,OAAOnB,cAAc,CAACS,kBAAD,EAAqBF,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAEa,QAA9B,CAArB;AACD,CAjBM"}
1
+ {"version":3,"names":["useState","SuperChannelFilter","truncatedCount","useAsyncEffect","useUniqHandlerId","useUserEventHandler","useTotalUnreadMessageCount","sdk","options","handlerId","unreadMessageCount","setUnreadMessageCount","unreadCount","groupChannel","getTotalUnreadMessageCount","superChannelFilter","ALL","params","channelCustomTypesFilter","onTotalUnreadMessageCountUpdated","totalCount","maxCount"],"sources":["useTotalUnreadMessageCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { SuperChannelFilter, TotalUnreadMessageCountParams } from '@sendbird/chat/groupChannel';\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedCount, useAsyncEffect, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Options = {\n params?: TotalUnreadMessageCountParams;\n maxCount?: number;\n};\n\nexport const useTotalUnreadMessageCount = (sdk: SendbirdChatSDK, options?: Options) => {\n const handlerId = useUniqHandlerId('useTotalUnreadMessageCount');\n const [unreadMessageCount, setUnreadMessageCount] = useState(0);\n\n useAsyncEffect(async () => {\n const unreadCount = await sdk.groupChannel.getTotalUnreadMessageCount({\n superChannelFilter: SuperChannelFilter.ALL,\n ...options?.params,\n });\n setUnreadMessageCount(unreadCount);\n }, [sdk, options?.params?.superChannelFilter, options?.params?.channelCustomTypesFilter]);\n\n useUserEventHandler(sdk, handlerId, {\n onTotalUnreadMessageCountUpdated: (totalCount: number) => setUnreadMessageCount(totalCount),\n });\n\n return truncatedCount(unreadMessageCount, options?.maxCount);\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAEA,SAASC,kBAAT,QAAkE,6BAAlE;AAEA,SAASC,cAAT,EAAyBC,cAAzB,EAAyCC,gBAAzC,QAAiE,uBAAjE;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAOA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,OAAvB,KAA6C;EAAA;;EACrF,MAAMC,SAAS,GAAGL,gBAAgB,CAAC,4BAAD,CAAlC;EACA,MAAM,CAACM,kBAAD,EAAqBC,qBAArB,IAA8CX,QAAQ,CAAC,CAAD,CAA5D;EAEAG,cAAc,CAAC,YAAY;IACzB,MAAMS,WAAW,GAAG,MAAML,GAAG,CAACM,YAAJ,CAAiBC,0BAAjB,CAA4C;MACpEC,kBAAkB,EAAEd,kBAAkB,CAACe,GAD6B;MAEpE,IAAGR,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAES,MAAZ;IAFoE,CAA5C,CAA1B;IAIAN,qBAAqB,CAACC,WAAD,CAArB;EACD,CANa,EAMX,CAACL,GAAD,EAAMC,OAAN,aAAMA,OAAN,0CAAMA,OAAO,CAAES,MAAf,oDAAM,gBAAiBF,kBAAvB,EAA2CP,OAA3C,aAA2CA,OAA3C,2CAA2CA,OAAO,CAAES,MAApD,qDAA2C,iBAAiBC,wBAA5D,CANW,CAAd;EAQAb,mBAAmB,CAACE,GAAD,EAAME,SAAN,EAAiB;IAClCU,gCAAgC,EAAGC,UAAD,IAAwBT,qBAAqB,CAACS,UAAD;EAD7C,CAAjB,CAAnB;EAIA,OAAOlB,cAAc,CAACQ,kBAAD,EAAqBF,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAEa,QAA9B,CAArB;AACD,CAjBM"}
@@ -84,6 +84,7 @@ export const useUserList = (sdk, options) => {
84
84
  await init();
85
85
  } catch (e) {
86
86
  setError(e);
87
+ setUsers([]);
87
88
  } finally {
88
89
  setLoading(false);
89
90
  }
@@ -96,6 +97,7 @@ export const useUserList = (sdk, options) => {
96
97
  await init();
97
98
  } catch (e) {
98
99
  setError(e);
100
+ setUsers([]);
99
101
  } finally {
100
102
  setRefreshing(false);
101
103
  }
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","useRef","useState","Logger","SBErrorCode","SBErrorMessage","useAsyncEffect","useFreshCallback","createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","error","setError","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","sortComparator","sort","upsertUser","user","draft","userIdx","findIndex","it","userId","push","deleteUser","splice","updateUsers","clearPrev","prev","concat","init","current","hasNext","next","catch","e","code","NON_AUTHORIZED","warn","ACL","refresh","nextUsers"],"sources":["useUserList.ts"],"sourcesContent":["import { useMemo, useRef, useState } from 'react';\n\nimport type { Optional, SendbirdChatSDK, SendbirdUser, UserStruct } from '@sendbird/uikit-utils';\nimport { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport type { CustomQueryInterface, UseUserListOptions, UseUserListReturn } from '../types';\n\nconst createUserQuery = <User extends UserStruct>(\n sdk: SendbirdChatSDK,\n queryCreator?: UseUserListOptions<User>['queryCreator'],\n) => {\n if (queryCreator) return queryCreator();\n // In order to use the API, the option must be turned on in the dashboard.\n return sdk.createApplicationUserListQuery() as unknown as CustomQueryInterface<User>;\n};\n\n/**\n * Get user list from query.\n * default query uses 'instance.createApplicationUserListQuery'\n * The response type of hook is depends on return type of 'query.next()'\n *\n * You can call hook with your custom query using {@link CustomQuery}\n * Or you can create your 'CustomQueryClass' implemented {@link CustomQueryInterface}'\n *\n * ```example\n * const { users } = useUserList(sdk, {\n * queryCreator: () => {\n * const friendQuery = sdk.createFriendListQuery();\n * return new CustomQuery({\n * next: () => friendQuery.next(),\n * isLoading: () => friendQuery.isLoading,\n * hasNext: () => friendQuery.hasMore,\n * });\n * }\n * })\n * ```\n * */\nexport const useUserList = <\n Options extends UseUserListOptions<QueriedUser>,\n QueriedUser extends UserStruct = Options['queryCreator'] extends Optional<\n () => CustomQueryInterface<infer User extends UserStruct>\n >\n ? User\n : SendbirdUser,\n>(\n sdk: SendbirdChatSDK,\n options?: Options,\n): UseUserListReturn<QueriedUser> => {\n const query = useRef<CustomQueryInterface<QueriedUser>>();\n\n const [error, setError] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [users, setUsers] = useState<QueriedUser[]>([]);\n const sortedUsers = useMemo((): QueriedUser[] => {\n if (options?.sortComparator) return users.sort(options.sortComparator);\n return users;\n }, [users, options?.sortComparator]);\n\n const upsertUser = useFreshCallback((user: QueriedUser) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === user.userId);\n if (userIdx > -1) draft[userIdx] = user;\n else draft.push(user);\n return draft;\n });\n });\n\n const deleteUser = useFreshCallback((userId: QueriedUser['userId']) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === userId);\n if (userIdx > -1) draft.splice(userIdx, 1);\n return draft;\n });\n });\n\n const updateUsers = (users: QueriedUser[], clearPrev: boolean) => {\n if (clearPrev) setUsers(users);\n else setUsers((prev) => prev.concat(users));\n };\n\n const init = useFreshCallback(async () => {\n query.current = createUserQuery<QueriedUser>(sdk, options?.queryCreator);\n if (query.current?.hasNext) {\n const users = await query.current?.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(users, true);\n }\n });\n\n useAsyncEffect(async () => {\n setLoading(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n }, []);\n\n const refresh = useFreshCallback(async () => {\n setRefreshing(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n } finally {\n setRefreshing(false);\n }\n });\n\n const next = useFreshCallback(async () => {\n if (query.current && query.current?.hasNext) {\n const nextUsers = await query.current.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(nextUsers, false);\n }\n });\n\n return {\n loading,\n error,\n users: sortedUsers,\n upsertUser,\n deleteUser,\n next,\n refreshing,\n refresh,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useMemo","useRef","useState","Logger","SBErrorCode","SBErrorMessage","useAsyncEffect","useFreshCallback","createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","error","setError","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","sortComparator","sort","upsertUser","user","draft","userIdx","findIndex","it","userId","push","deleteUser","splice","updateUsers","clearPrev","prev","concat","init","current","hasNext","next","catch","e","code","NON_AUTHORIZED","warn","ACL","refresh","nextUsers"],"sources":["useUserList.ts"],"sourcesContent":["import { useMemo, useRef, useState } from 'react';\n\nimport type { Optional, SendbirdChatSDK, SendbirdUser, UserStruct } from '@sendbird/uikit-utils';\nimport { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport type { CustomQueryInterface, UseUserListOptions, UseUserListReturn } from '../types';\n\nconst createUserQuery = <User extends UserStruct>(\n sdk: SendbirdChatSDK,\n queryCreator?: UseUserListOptions<User>['queryCreator'],\n) => {\n if (queryCreator) return queryCreator();\n // In order to use the API, the option must be turned on in the dashboard.\n return sdk.createApplicationUserListQuery() as unknown as CustomQueryInterface<User>;\n};\n\n/**\n * Get user list from query.\n * default query uses 'instance.createApplicationUserListQuery'\n * The response type of hook is depends on return type of 'query.next()'\n *\n * You can call hook with your custom query using {@link CustomQuery}\n * Or you can create your 'CustomQueryClass' implemented {@link CustomQueryInterface}'\n *\n * ```example\n * const { users } = useUserList(sdk, {\n * queryCreator: () => {\n * const friendQuery = sdk.createFriendListQuery();\n * return new CustomQuery({\n * next: () => friendQuery.next(),\n * isLoading: () => friendQuery.isLoading,\n * hasNext: () => friendQuery.hasMore,\n * });\n * }\n * })\n * ```\n * */\nexport const useUserList = <\n Options extends UseUserListOptions<QueriedUser>,\n QueriedUser extends UserStruct = Options['queryCreator'] extends Optional<\n () => CustomQueryInterface<infer User extends UserStruct>\n >\n ? User\n : SendbirdUser,\n>(\n sdk: SendbirdChatSDK,\n options?: Options,\n): UseUserListReturn<QueriedUser> => {\n const query = useRef<CustomQueryInterface<QueriedUser>>();\n\n const [error, setError] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [users, setUsers] = useState<QueriedUser[]>([]);\n const sortedUsers = useMemo((): QueriedUser[] => {\n if (options?.sortComparator) return users.sort(options.sortComparator);\n return users;\n }, [users, options?.sortComparator]);\n\n const upsertUser = useFreshCallback((user: QueriedUser) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === user.userId);\n if (userIdx > -1) draft[userIdx] = user;\n else draft.push(user);\n return draft;\n });\n });\n\n const deleteUser = useFreshCallback((userId: QueriedUser['userId']) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === userId);\n if (userIdx > -1) draft.splice(userIdx, 1);\n return draft;\n });\n });\n\n const updateUsers = (users: QueriedUser[], clearPrev: boolean) => {\n if (clearPrev) setUsers(users);\n else setUsers((prev) => prev.concat(users));\n };\n\n const init = useFreshCallback(async () => {\n query.current = createUserQuery<QueriedUser>(sdk, options?.queryCreator);\n if (query.current?.hasNext) {\n const users = await query.current?.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(users, true);\n }\n });\n\n useAsyncEffect(async () => {\n setLoading(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n setUsers([]);\n } finally {\n setLoading(false);\n }\n }, []);\n\n const refresh = useFreshCallback(async () => {\n setRefreshing(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n setUsers([]);\n } finally {\n setRefreshing(false);\n }\n });\n\n const next = useFreshCallback(async () => {\n if (query.current && query.current?.hasNext) {\n const nextUsers = await query.current.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(nextUsers, false);\n }\n });\n\n return {\n loading,\n error,\n users: sortedUsers,\n upsertUser,\n deleteUser,\n next,\n refreshing,\n refresh,\n };\n};\n"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,EAA0BC,QAA1B,QAA0C,OAA1C;AAGA,SAASC,MAAT,EAAiBC,WAAjB,EAA8BC,cAA9B,EAA8CC,cAA9C,EAA8DC,gBAA9D,QAAsF,uBAAtF;;AAIA,MAAMC,eAAe,GAAG,CACtBC,GADsB,EAEtBC,YAFsB,KAGnB;EACH,IAAIA,YAAJ,EAAkB,OAAOA,YAAY,EAAnB,CADf,CAEH;;EACA,OAAOD,GAAG,CAACE,8BAAJ,EAAP;AACD,CAPD;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,OAAO,MAAMC,WAAW,GAAG,CAQzBH,GARyB,EASzBI,OATyB,KAUU;EACnC,MAAMC,KAAK,GAAGb,MAAM,EAApB;EAEA,MAAM,CAACc,KAAD,EAAQC,QAAR,IAAoBd,QAAQ,CAAU,IAAV,CAAlC;EACA,MAAM,CAACe,OAAD,EAAUC,UAAV,IAAwBhB,QAAQ,CAAC,KAAD,CAAtC;EACA,MAAM,CAACiB,UAAD,EAAaC,aAAb,IAA8BlB,QAAQ,CAAC,KAAD,CAA5C;EAEA,MAAM,CAACmB,KAAD,EAAQC,QAAR,IAAoBpB,QAAQ,CAAgB,EAAhB,CAAlC;EACA,MAAMqB,WAAW,GAAGvB,OAAO,CAAC,MAAqB;IAC/C,IAAIa,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEW,cAAb,EAA6B,OAAOH,KAAK,CAACI,IAAN,CAAWZ,OAAO,CAACW,cAAnB,CAAP;IAC7B,OAAOH,KAAP;EACD,CAH0B,EAGxB,CAACA,KAAD,EAAQR,OAAR,aAAQA,OAAR,uBAAQA,OAAO,CAAEW,cAAjB,CAHwB,CAA3B;EAKA,MAAME,UAAU,GAAGnB,gBAAgB,CAAEoB,IAAD,IAAuB;IACzDL,QAAQ,CAAC,QAAgB;MAAA,IAAf,CAAC,GAAGM,KAAJ,CAAe;MACvB,MAAMC,OAAO,GAAGD,KAAK,CAACE,SAAN,CAAiBC,EAAD,IAAQA,EAAE,CAACC,MAAH,KAAcL,IAAI,CAACK,MAA3C,CAAhB;MACA,IAAIH,OAAO,GAAG,CAAC,CAAf,EAAkBD,KAAK,CAACC,OAAD,CAAL,GAAiBF,IAAjB,CAAlB,KACKC,KAAK,CAACK,IAAN,CAAWN,IAAX;MACL,OAAOC,KAAP;IACD,CALO,CAAR;EAMD,CAPkC,CAAnC;EASA,MAAMM,UAAU,GAAG3B,gBAAgB,CAAEyB,MAAD,IAAmC;IACrEV,QAAQ,CAAC,SAAgB;MAAA,IAAf,CAAC,GAAGM,KAAJ,CAAe;MACvB,MAAMC,OAAO,GAAGD,KAAK,CAACE,SAAN,CAAiBC,EAAD,IAAQA,EAAE,CAACC,MAAH,KAAcA,MAAtC,CAAhB;MACA,IAAIH,OAAO,GAAG,CAAC,CAAf,EAAkBD,KAAK,CAACO,MAAN,CAAaN,OAAb,EAAsB,CAAtB;MAClB,OAAOD,KAAP;IACD,CAJO,CAAR;EAKD,CANkC,CAAnC;;EAQA,MAAMQ,WAAW,GAAG,CAACf,KAAD,EAAuBgB,SAAvB,KAA8C;IAChE,IAAIA,SAAJ,EAAef,QAAQ,CAACD,KAAD,CAAR,CAAf,KACKC,QAAQ,CAAEgB,IAAD,IAAUA,IAAI,CAACC,MAAL,CAAYlB,KAAZ,CAAX,CAAR;EACN,CAHD;;EAKA,MAAMmB,IAAI,GAAGjC,gBAAgB,CAAC,YAAY;IAAA;;IACxCO,KAAK,CAAC2B,OAAN,GAAgBjC,eAAe,CAAcC,GAAd,EAAmBI,OAAnB,aAAmBA,OAAnB,uBAAmBA,OAAO,CAAEH,YAA5B,CAA/B;;IACA,sBAAII,KAAK,CAAC2B,OAAV,2CAAI,eAAeC,OAAnB,EAA4B;MAAA;;MAC1B,MAAMrB,KAAK,GAAG,0BAAMP,KAAK,CAAC2B,OAAZ,oDAAM,gBAAeE,IAAf,GAAsBC,KAAtB,CAA6BC,CAAD,IAAO;QACrD1C,MAAM,CAACY,KAAP,CAAa8B,CAAb;QACA,IAAIA,CAAC,CAACC,IAAF,KAAW1C,WAAW,CAAC2C,cAA3B,EAA2C5C,MAAM,CAAC6C,IAAP,CAAY3C,cAAc,CAAC4C,GAA3B;QAC3C,MAAMJ,CAAN;MACD,CAJmB,CAAN,CAAd;MAKAT,WAAW,CAACf,KAAD,EAAQ,IAAR,CAAX;IACD;EACF,CAV4B,CAA7B;EAYAf,cAAc,CAAC,YAAY;IACzBY,UAAU,CAAC,IAAD,CAAV;IACAF,QAAQ,CAAC,IAAD,CAAR;;IACA,IAAI;MACF,MAAMwB,IAAI,EAAV;IACD,CAFD,CAEE,OAAOK,CAAP,EAAU;MACV7B,QAAQ,CAAC6B,CAAD,CAAR;MACAvB,QAAQ,CAAC,EAAD,CAAR;IACD,CALD,SAKU;MACRJ,UAAU,CAAC,KAAD,CAAV;IACD;EACF,CAXa,EAWX,EAXW,CAAd;EAaA,MAAMgC,OAAO,GAAG3C,gBAAgB,CAAC,YAAY;IAC3Ca,aAAa,CAAC,IAAD,CAAb;IACAJ,QAAQ,CAAC,IAAD,CAAR;;IACA,IAAI;MACF,MAAMwB,IAAI,EAAV;IACD,CAFD,CAEE,OAAOK,CAAP,EAAU;MACV7B,QAAQ,CAAC6B,CAAD,CAAR;MACAvB,QAAQ,CAAC,EAAD,CAAR;IACD,CALD,SAKU;MACRF,aAAa,CAAC,KAAD,CAAb;IACD;EACF,CAX+B,CAAhC;EAaA,MAAMuB,IAAI,GAAGpC,gBAAgB,CAAC,YAAY;IAAA;;IACxC,IAAIO,KAAK,CAAC2B,OAAN,uBAAiB3B,KAAK,CAAC2B,OAAvB,4CAAiB,gBAAeC,OAApC,EAA6C;MAC3C,MAAMS,SAAS,GAAG,MAAMrC,KAAK,CAAC2B,OAAN,CAAcE,IAAd,GAAqBC,KAArB,CAA4BC,CAAD,IAAO;QACxD1C,MAAM,CAACY,KAAP,CAAa8B,CAAb;QACA,IAAIA,CAAC,CAACC,IAAF,KAAW1C,WAAW,CAAC2C,cAA3B,EAA2C5C,MAAM,CAAC6C,IAAP,CAAY3C,cAAc,CAAC4C,GAA3B;QAC3C,MAAMJ,CAAN;MACD,CAJuB,CAAxB;MAKAT,WAAW,CAACe,SAAD,EAAY,KAAZ,CAAX;IACD;EACF,CAT4B,CAA7B;EAWA,OAAO;IACLlC,OADK;IAELF,KAFK;IAGLM,KAAK,EAAEE,WAHF;IAILG,UAJK;IAKLQ,UALK;IAMLS,IANK;IAOLxB,UAPK;IAQL+B;EARK,CAAP;AAUD,CAxGM"}
@@ -1,14 +1,32 @@
1
1
  import { useEffect, useLayoutEffect, useRef } from 'react';
2
2
  import { GroupChannelHandler } from '@sendbird/chat/groupChannel';
3
+ import { OpenChannelHandler } from '@sendbird/chat/openChannel';
3
4
  import { Logger } from '@sendbird/uikit-utils';
4
- export const useChannelHandler = (sdk, handlerId, hookHandler) => {
5
+
6
+ function getChannelHandler(type) {
7
+ switch (type) {
8
+ case 'open':
9
+ {
10
+ return new OpenChannelHandler();
11
+ }
12
+
13
+ case 'group':
14
+ default:
15
+ {
16
+ return new GroupChannelHandler();
17
+ }
18
+ }
19
+ }
20
+
21
+ export const useChannelHandler = function (sdk, handlerId, hookHandler) {
22
+ let type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'group';
5
23
  const handlerRef = useRef(hookHandler);
6
24
  useLayoutEffect(() => {
7
25
  handlerRef.current = hookHandler;
8
26
  });
9
27
  useEffect(() => {
10
28
  Logger.debug('[useChannelHandler] hook called by', handlerId);
11
- const handler = new GroupChannelHandler();
29
+ const handler = getChannelHandler(type);
12
30
  const handlerKeys = Object.keys(handler);
13
31
  handlerKeys.forEach(key => {
14
32
  handler[key] = function () {
@@ -22,8 +40,20 @@ export const useChannelHandler = (sdk, handlerId, hookHandler) => {
22
40
  (_handlerRef$current$k = (_handlerRef$current = handlerRef.current)[key]) === null || _handlerRef$current$k === void 0 ? void 0 : _handlerRef$current$k.call(_handlerRef$current, ...args);
23
41
  };
24
42
  });
25
- sdk.groupChannel.addGroupChannelHandler(handlerId, handler);
26
- return () => sdk.groupChannel.removeGroupChannelHandler(handlerId);
43
+
44
+ if (type === 'group') {
45
+ sdk.groupChannel.addGroupChannelHandler(handlerId, handler);
46
+ } else if (type === 'open') {
47
+ sdk.openChannel.addOpenChannelHandler(handlerId, handler);
48
+ }
49
+
50
+ return () => {
51
+ if (type === 'group') {
52
+ sdk.groupChannel.removeGroupChannelHandler(handlerId);
53
+ } else if (type === 'open') {
54
+ sdk.openChannel.removeOpenChannelHandler(handlerId);
55
+ }
56
+ };
27
57
  }, [sdk, handlerId]);
28
58
  };
29
59
  //# sourceMappingURL=useChannelHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useLayoutEffect","useRef","GroupChannelHandler","Logger","useChannelHandler","sdk","handlerId","hookHandler","handlerRef","current","debug","handler","handlerKeys","Object","keys","forEach","key","args","groupChannel","addGroupChannelHandler","removeGroupChannelHandler"],"sources":["useChannelHandler.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { GroupChannelHandler } from '@sendbird/chat/groupChannel';\nimport { Logger, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nexport const useChannelHandler = (\n sdk: SendbirdChatSDK,\n handlerId: string,\n hookHandler: Partial<GroupChannelHandler>,\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 GroupChannelHandler();\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.groupChannel.addGroupChannelHandler(handlerId, handler);\n return () => sdk.groupChannel.removeGroupChannelHandler(handlerId);\n }, [sdk, handlerId]);\n};\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,eAApB,EAAqCC,MAArC,QAAmD,OAAnD;AAEA,SAASC,mBAAT,QAAoC,6BAApC;AACA,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,GAAGP,MAAM,CAACM,WAAD,CAAzB;EACAP,eAAe,CAAC,MAAM;IACpBQ,UAAU,CAACC,OAAX,GAAqBF,WAArB;EACD,CAFc,CAAf;EAIAR,SAAS,CAAC,MAAM;IACdI,MAAM,CAACO,KAAP,CAAa,oCAAb,EAAmDJ,SAAnD;IAEA,MAAMK,OAAO,GAAG,IAAIT,mBAAJ,EAAhB;IACA,MAAMU,WAAW,GAAGC,MAAM,CAACC,IAAP,CAAYH,OAAZ,CAApB;IACAC,WAAW,CAACG,OAAZ,CAAqBC,GAAD,IAAS;MAC3BL,OAAO,CAACK,GAAD,CAAP,GAAe,YAAwB;QAAA;;QAAA,kCAApBC,IAAoB;UAApBA,IAAoB;QAAA;;QACrC;QACA,gDAAAT,UAAU,CAACC,OAAX,EAAmBO,GAAnB,2GAA0B,GAAGC,IAA7B;MACD,CAHD;IAID,CALD;IAOAZ,GAAG,CAACa,YAAJ,CAAiBC,sBAAjB,CAAwCb,SAAxC,EAAmDK,OAAnD;IACA,OAAO,MAAMN,GAAG,CAACa,YAAJ,CAAiBE,yBAAjB,CAA2Cd,SAA3C,CAAb;EACD,CAdQ,EAcN,CAACD,GAAD,EAAMC,SAAN,CAdM,CAAT;AAeD,CAzBM"}
1
+ {"version":3,"names":["useEffect","useLayoutEffect","useRef","GroupChannelHandler","OpenChannelHandler","Logger","getChannelHandler","type","useChannelHandler","sdk","handlerId","hookHandler","handlerRef","current","debug","handler","handlerKeys","Object","keys","forEach","key","args","groupChannel","addGroupChannelHandler","openChannel","addOpenChannelHandler","removeGroupChannelHandler","removeOpenChannelHandler"],"sources":["useChannelHandler.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { GroupChannelHandler } from '@sendbird/chat/groupChannel';\nimport { OpenChannelHandler } from '@sendbird/chat/openChannel';\nimport { Logger, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\ntype ChannelType = 'open' | 'group';\n\nfunction getChannelHandler(type: ChannelType) {\n switch (type) {\n case 'open': {\n return new OpenChannelHandler();\n }\n case 'group':\n default: {\n return new GroupChannelHandler();\n }\n }\n}\nexport const useChannelHandler = <T extends ChannelType = 'group'>(\n sdk: SendbirdChatSDK,\n handlerId: string,\n hookHandler: Partial<T extends 'group' ? GroupChannelHandler : OpenChannelHandler>,\n type = 'group' as T,\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 = getChannelHandler(type);\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 if (type === 'group') {\n sdk.groupChannel.addGroupChannelHandler(handlerId, handler);\n } else if (type === 'open') {\n sdk.openChannel.addOpenChannelHandler(handlerId, handler);\n }\n\n return () => {\n if (type === 'group') {\n sdk.groupChannel.removeGroupChannelHandler(handlerId);\n } else if (type === 'open') {\n sdk.openChannel.removeOpenChannelHandler(handlerId);\n }\n };\n }, [sdk, handlerId]);\n};\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,eAApB,EAAqCC,MAArC,QAAmD,OAAnD;AAEA,SAASC,mBAAT,QAAoC,6BAApC;AACA,SAASC,kBAAT,QAAmC,4BAAnC;AACA,SAASC,MAAT,QAAwC,uBAAxC;;AAIA,SAASC,iBAAT,CAA2BC,IAA3B,EAA8C;EAC5C,QAAQA,IAAR;IACE,KAAK,MAAL;MAAa;QACX,OAAO,IAAIH,kBAAJ,EAAP;MACD;;IACD,KAAK,OAAL;IACA;MAAS;QACP,OAAO,IAAID,mBAAJ,EAAP;MACD;EAPH;AASD;;AACD,OAAO,MAAMK,iBAAiB,GAAG,UAC/BC,GAD+B,EAE/BC,SAF+B,EAG/BC,WAH+B,EAK5B;EAAA,IADHJ,IACG,uEADI,OACJ;EACH,MAAMK,UAAU,GAAGV,MAAM,CAACS,WAAD,CAAzB;EACAV,eAAe,CAAC,MAAM;IACpBW,UAAU,CAACC,OAAX,GAAqBF,WAArB;EACD,CAFc,CAAf;EAIAX,SAAS,CAAC,MAAM;IACdK,MAAM,CAACS,KAAP,CAAa,oCAAb,EAAmDJ,SAAnD;IAEA,MAAMK,OAAO,GAAGT,iBAAiB,CAACC,IAAD,CAAjC;IACA,MAAMS,WAAW,GAAGC,MAAM,CAACC,IAAP,CAAYH,OAAZ,CAApB;IACAC,WAAW,CAACG,OAAZ,CAAqBC,GAAD,IAAS;MAC3BL,OAAO,CAACK,GAAD,CAAP,GAAe,YAAwB;QAAA;;QAAA,kCAApBC,IAAoB;UAApBA,IAAoB;QAAA;;QACrC;QACA,gDAAAT,UAAU,CAACC,OAAX,EAAmBO,GAAnB,2GAA0B,GAAGC,IAA7B;MACD,CAHD;IAID,CALD;;IAOA,IAAId,IAAI,KAAK,OAAb,EAAsB;MACpBE,GAAG,CAACa,YAAJ,CAAiBC,sBAAjB,CAAwCb,SAAxC,EAAmDK,OAAnD;IACD,CAFD,MAEO,IAAIR,IAAI,KAAK,MAAb,EAAqB;MAC1BE,GAAG,CAACe,WAAJ,CAAgBC,qBAAhB,CAAsCf,SAAtC,EAAiDK,OAAjD;IACD;;IAED,OAAO,MAAM;MACX,IAAIR,IAAI,KAAK,OAAb,EAAsB;QACpBE,GAAG,CAACa,YAAJ,CAAiBI,yBAAjB,CAA2ChB,SAA3C;MACD,CAFD,MAEO,IAAIH,IAAI,KAAK,MAAb,EAAqB;QAC1BE,GAAG,CAACe,WAAJ,CAAgBG,wBAAhB,CAAyCjB,SAAzC;MACD;IACF,CAND;EAOD,CAzBQ,EAyBN,CAACD,GAAD,EAAMC,SAAN,CAzBM,CAAT;AA0BD,CArCM"}
@@ -1,7 +1,9 @@
1
1
  export { useGroupChannelList } from './channel/useGroupChannelList';
2
2
  export { useGroupChannelMessages } from './channel/useGroupChannelMessages';
3
- export { useActiveGroupChannel } from './channel/useActiveGroupChannel';
4
3
  export { useGroupChannel } from './channel/useGroupChannel';
4
+ export { useOpenChannelList } from './channel/useOpenChannelList';
5
+ export { useOpenChannelMessages } from './channel/useOpenChannelMessages';
6
+ export { useOpenChannel } from './channel/useOpenChannel';
5
7
  export { useAppFeatures } from './common/useAppFeatures';
6
8
  export { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';
7
9
  export { usePushTrigger } from './common/usePushTrigger';
@@ -1 +1 @@
1
- {"version":3,"names":["useGroupChannelList","useGroupChannelMessages","useActiveGroupChannel","useGroupChannel","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';\nexport { useGroupChannel } from './channel/useGroupChannel';\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 UseGroupChannelMessagesOptions,\n UseUserListOptions,\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;AACA,SAASC,eAAT,QAAgC,2BAAhC;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
+ {"version":3,"names":["useGroupChannelList","useGroupChannelMessages","useGroupChannel","useOpenChannelList","useOpenChannelMessages","useOpenChannel","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 { useGroupChannel } from './channel/useGroupChannel';\n\nexport { useOpenChannelList } from './channel/useOpenChannelList';\nexport { useOpenChannelMessages } from './channel/useOpenChannelMessages';\nexport { useOpenChannel } from './channel/useOpenChannel';\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 UseGroupChannelMessagesOptions,\n UseUserListOptions,\n UseUserListReturn,\n CustomQueryInterface,\n CustomBidirectionalQueryInterface,\n UseOpenChannelMessagesOptions,\n UseOpenChannelListOptions,\n UseOpenChannelList,\n UseOpenChannelMessages,\n} from './types';\n"],"mappings":"AAAA,SAASA,mBAAT,QAAoC,+BAApC;AACA,SAASC,uBAAT,QAAwC,mCAAxC;AACA,SAASC,eAAT,QAAgC,2BAAhC;AAEA,SAASC,kBAAT,QAAmC,8BAAnC;AACA,SAASC,sBAAT,QAAuC,kCAAvC;AACA,SAASC,cAAT,QAA+B,0BAA/B;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 {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n UserStruct,\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?: () => SendbirdGroupChannelListQuery;\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: SendbirdFileMessageCreateParams,\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: SendbirdUserMessageCreateParams,\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: SendbirdFileMessageCreateParams) => 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: SendbirdUserMessageCreateParams) => 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\nexport type UseGroupChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\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 extends UserStruct> {\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 * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdOpenChannel,\n SendbirdOpenChannelListQuery,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n UserStruct,\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?: () => SendbirdGroupChannelListQuery;\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: SendbirdFileMessageCreateParams,\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: SendbirdUserMessageCreateParams,\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: SendbirdFileMessageUpdateParams) => 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: SendbirdUserMessageUpdateParams) => 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\nexport type UseGroupChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: () => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n};\n\n/**\n * @interface UseOpenChannelList\n * @description interface for open channel list hook\n * */\nexport interface UseOpenChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseOpenChannelListOptions): {\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 * Error state\n * */\n error: unknown | null;\n\n /**\n * Get open channels state\n * */\n openChannels: SendbirdOpenChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseOpenChannelListOptions = {\n queryCreator?: () => SendbirdOpenChannelListQuery;\n};\n\n/**\n * @interface UseOpenChannelMessages\n * @description interface for open 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 UseOpenChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdOpenChannel, userId?: string, options?: UseOpenChannelMessagesOptions): {\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: SendbirdFileMessageCreateParams,\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: SendbirdUserMessageCreateParams,\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: SendbirdFileMessageUpdateParams) => 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: SendbirdUserMessageUpdateParams) => 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\nexport type UseOpenChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n onChannelDeleted?: () => void;\n onError?: (error?: unknown) => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User extends UserStruct> {\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 * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { SendbirdChatSDK } from '@sendbird/uikit-utils';
2
+ export declare const useOpenChannel: (sdk: SendbirdChatSDK, channelUrl: string) => {
3
+ channel: import("@sendbird/chat/openChannel").OpenChannel | undefined;
4
+ loading: boolean;
5
+ error: unknown;
6
+ };
@@ -0,0 +1,2 @@
1
+ import type { UseOpenChannelList } from '../../types';
2
+ export declare const useOpenChannelList: UseOpenChannelList;
@@ -0,0 +1,13 @@
1
+ import type { SendbirdChannel } from '@sendbird/uikit-utils';
2
+ export declare const useOpenChannelListReducer: () => {
3
+ updateError: (error: unknown | null) => void;
4
+ updateLoading: (status: boolean) => void;
5
+ updateRefreshing: (status: boolean) => void;
6
+ updateChannels: (channels: SendbirdChannel[]) => void;
7
+ deleteChannels: (channelUrls: string[]) => void;
8
+ appendChannels: (channels: SendbirdChannel[], clearBeforeAction: boolean) => void;
9
+ error: unknown;
10
+ loading: boolean;
11
+ refreshing: boolean;
12
+ openChannels: import("@sendbird/chat/openChannel").OpenChannel[];
13
+ };
@@ -0,0 +1,2 @@
1
+ import type { UseOpenChannelList } from '../../types';
2
+ export declare const useOpenChannelListWithQuery: UseOpenChannelList;
@@ -0,0 +1,2 @@
1
+ import type { UseOpenChannelMessages } from '../../types';
2
+ export declare const useOpenChannelMessages: UseOpenChannelMessages;
@@ -0,0 +1,15 @@
1
+ import type { SendbirdBaseMessage } from '@sendbird/uikit-utils';
2
+ import type { UseOpenChannelMessagesOptions } from '../../types';
3
+ export declare const useOpenChannelMessagesReducer: (userId?: string, sortComparator?: UseOpenChannelMessagesOptions['sortComparator']) => {
4
+ updateLoading: (status: boolean) => void;
5
+ updateRefreshing: (status: boolean) => void;
6
+ updateMessages: (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => void;
7
+ updateNextMessages: (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => void;
8
+ deleteMessages: (messageIds: number[], reqIds: string[]) => void;
9
+ deleteNextMessages: (messageIds: number[], reqIds: string[]) => void;
10
+ loading: boolean;
11
+ refreshing: boolean;
12
+ messages: import("@sendbird/chat/message").BaseMessage[];
13
+ nextMessages: import("@sendbird/chat/message").BaseMessage[];
14
+ newMessagesFromMembers: import("@sendbird/chat/message").BaseMessage[];
15
+ };
@@ -0,0 +1,2 @@
1
+ import type { UseOpenChannelMessages } from '../../types';
2
+ export declare const useOpenChannelMessagesWithQuery: UseOpenChannelMessages;
@@ -1,3 +1,6 @@
1
1
  import { GroupChannelHandler } from '@sendbird/chat/groupChannel';
2
+ import { OpenChannelHandler } from '@sendbird/chat/openChannel';
2
3
  import { SendbirdChatSDK } from '@sendbird/uikit-utils';
3
- export declare const useChannelHandler: (sdk: SendbirdChatSDK, handlerId: string, hookHandler: Partial<GroupChannelHandler>) => void;
4
+ type ChannelType = 'open' | 'group';
5
+ export declare const useChannelHandler: <T extends ChannelType = "group">(sdk: SendbirdChatSDK, handlerId: string, hookHandler: Partial<T extends "group" ? GroupChannelHandler : OpenChannelHandler>, type?: T) => void;
6
+ export {};
@@ -1,7 +1,9 @@
1
1
  export { useGroupChannelList } from './channel/useGroupChannelList';
2
2
  export { useGroupChannelMessages } from './channel/useGroupChannelMessages';
3
- export { useActiveGroupChannel } from './channel/useActiveGroupChannel';
4
3
  export { useGroupChannel } from './channel/useGroupChannel';
4
+ export { useOpenChannelList } from './channel/useOpenChannelList';
5
+ export { useOpenChannelMessages } from './channel/useOpenChannelMessages';
6
+ export { useOpenChannel } from './channel/useOpenChannel';
5
7
  export { useAppFeatures } from './common/useAppFeatures';
6
8
  export { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';
7
9
  export { usePushTrigger } from './common/usePushTrigger';
@@ -12,4 +14,4 @@ export { useChannelHandler } from './handler/useChannelHandler';
12
14
  export { useConnectionHandler } from './handler/useConnectionHandler';
13
15
  export { useUserEventHandler } from './handler/useUserEventHandler';
14
16
  export { CustomQuery } from './model/CustomQuery';
15
- export type { UseGroupChannelList, UseGroupChannelListOptions, UseGroupChannelMessages, UseGroupChannelMessagesOptions, UseUserListOptions, UseUserListReturn, CustomQueryInterface, CustomBidirectionalQueryInterface, } from './types';
17
+ export type { UseGroupChannelList, UseGroupChannelListOptions, UseGroupChannelMessages, UseGroupChannelMessagesOptions, UseUserListOptions, UseUserListReturn, CustomQueryInterface, CustomBidirectionalQueryInterface, UseOpenChannelMessagesOptions, UseOpenChannelListOptions, UseOpenChannelList, UseOpenChannelMessages, } from './types';