@sendbird/uikit-chat-hooks 1.1.2 → 2.0.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 (89) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/channel/useActiveGroupChannel.js +1 -1
  3. package/lib/commonjs/channel/useActiveGroupChannel.js.map +1 -1
  4. package/lib/commonjs/channel/useGroupChannelList/index.js +3 -0
  5. package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -1
  6. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +25 -26
  7. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  8. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +8 -11
  9. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  10. package/lib/commonjs/channel/useGroupChannelMessages/index.js +3 -0
  11. package/lib/commonjs/channel/useGroupChannelMessages/index.js.map +1 -1
  12. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +1 -1
  13. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +83 -87
  14. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  15. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +32 -20
  16. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  17. package/lib/commonjs/common/useMessageOutgoingStatus.js +8 -4
  18. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
  19. package/lib/commonjs/common/usePushTrigger.js +13 -5
  20. package/lib/commonjs/common/usePushTrigger.js.map +1 -1
  21. package/lib/commonjs/common/useTotalUnreadChannelCount.js +4 -2
  22. package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +1 -1
  23. package/lib/commonjs/common/useTotalUnreadMessageCount.js +12 -15
  24. package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
  25. package/lib/commonjs/handler/useChannelHandler.js +5 -3
  26. package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
  27. package/lib/commonjs/handler/useConnectionHandler.js +5 -3
  28. package/lib/commonjs/handler/useConnectionHandler.js.map +1 -1
  29. package/lib/commonjs/handler/useUserEventHandler.js +19 -6
  30. package/lib/commonjs/handler/useUserEventHandler.js.map +1 -1
  31. package/lib/commonjs/types.js.map +1 -1
  32. package/lib/module/channel/useActiveGroupChannel.js +1 -1
  33. package/lib/module/channel/useActiveGroupChannel.js.map +1 -1
  34. package/lib/module/channel/useGroupChannelList/index.js +2 -0
  35. package/lib/module/channel/useGroupChannelList/index.js.map +1 -1
  36. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +25 -27
  37. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  38. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +8 -12
  39. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  40. package/lib/module/channel/useGroupChannelMessages/index.js +2 -0
  41. package/lib/module/channel/useGroupChannelMessages/index.js.map +1 -1
  42. package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
  43. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +81 -87
  44. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  45. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +33 -21
  46. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  47. package/lib/module/common/useMessageOutgoingStatus.js +8 -4
  48. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
  49. package/lib/module/common/usePushTrigger.js +11 -5
  50. package/lib/module/common/usePushTrigger.js.map +1 -1
  51. package/lib/module/common/useTotalUnreadChannelCount.js +4 -2
  52. package/lib/module/common/useTotalUnreadChannelCount.js.map +1 -1
  53. package/lib/module/common/useTotalUnreadMessageCount.js +12 -17
  54. package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
  55. package/lib/module/handler/useChannelHandler.js +4 -3
  56. package/lib/module/handler/useChannelHandler.js.map +1 -1
  57. package/lib/module/handler/useConnectionHandler.js +4 -3
  58. package/lib/module/handler/useConnectionHandler.js.map +1 -1
  59. package/lib/module/handler/useUserEventHandler.js +19 -7
  60. package/lib/module/handler/useUserEventHandler.js.map +1 -1
  61. package/lib/module/types.js.map +1 -1
  62. package/lib/typescript/src/channel/useActiveGroupChannel.d.ts +2 -2
  63. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
  64. package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +4 -4
  65. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +2 -2
  66. package/lib/typescript/src/common/usePushTrigger.d.ts +9 -3
  67. package/lib/typescript/src/common/useTotalUnreadMessageCount.d.ts +4 -4
  68. package/lib/typescript/src/common/useUserList.d.ts +1 -1
  69. package/lib/typescript/src/handler/useChannelHandler.d.ts +2 -2
  70. package/lib/typescript/src/handler/useConnectionHandler.d.ts +2 -2
  71. package/lib/typescript/src/handler/useUserEventHandler.d.ts +2 -3
  72. package/lib/typescript/src/types.d.ts +7 -8
  73. package/package.json +5 -5
  74. package/src/channel/useActiveGroupChannel.ts +1 -1
  75. package/src/channel/useGroupChannelList/index.ts +3 -0
  76. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +21 -24
  77. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +10 -15
  78. package/src/channel/useGroupChannelMessages/index.ts +3 -0
  79. package/src/channel/useGroupChannelMessages/reducer.ts +4 -9
  80. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +79 -78
  81. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +59 -34
  82. package/src/common/useMessageOutgoingStatus.ts +8 -13
  83. package/src/common/usePushTrigger.ts +13 -7
  84. package/src/common/useTotalUnreadChannelCount.ts +4 -2
  85. package/src/common/useTotalUnreadMessageCount.ts +14 -25
  86. package/src/handler/useChannelHandler.ts +5 -5
  87. package/src/handler/useConnectionHandler.ts +5 -5
  88. package/src/handler/useUserEventHandler.ts +15 -8
  89. package/src/types.ts +10 -10
@@ -1,5 +1,6 @@
1
1
  import { useRef } from 'react';
2
- import { useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';
2
+ import { GroupChannelListOrder } from '@sendbird/chat/groupChannel';
3
+ import { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';
3
4
  import { useAppFeatures } from '../../common/useAppFeatures';
4
5
  import { useChannelHandler } from '../../handler/useChannelHandler';
5
6
  import { useGroupChannelListReducer } from './reducer';
@@ -8,16 +9,11 @@ const HOOK_NAME = 'useGroupChannelListWithQuery';
8
9
  const createGroupChannelListQuery = (sdk, queryCreator) => {
9
10
  const passedQuery = queryCreator === null || queryCreator === void 0 ? void 0 : queryCreator();
10
11
  if (passedQuery) return passedQuery;
11
- const defaultOptions = {
12
+ return sdk.groupChannel.createMyGroupChannelListQuery({
12
13
  includeEmpty: false,
13
14
  limit: 20,
14
- order: 'latest_last_message'
15
- };
16
- const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();
17
- defaultQuery.limit = defaultOptions.limit;
18
- defaultQuery.order = defaultOptions.order;
19
- defaultQuery.includeEmpty = defaultOptions.includeEmpty;
20
- return defaultQuery;
15
+ order: GroupChannelListOrder.LATEST_LAST_MESSAGE
16
+ });
21
17
  };
22
18
 
23
19
  export const useGroupChannelListWithQuery = (sdk, userId, options) => {
@@ -39,7 +35,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
39
35
 
40
36
  const updateChannelsAndMarkAsDelivered = channels => {
41
37
  updateChannels(channels);
42
- if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
38
+ if (deliveryReceiptEnabled) channels.forEach(channel => confirmAndMarkAsDelivered(sdk, channel));
43
39
  };
44
40
 
45
41
  const init = useFreshCallback(async uid => {
@@ -52,7 +48,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
52
48
  if ((_queryRef$current2 = queryRef.current) !== null && _queryRef$current2 !== void 0 && _queryRef$current2.hasNext) {
53
49
  const channels = await queryRef.current.next();
54
50
  setChannels(channels, true);
55
- if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
51
+ if (deliveryReceiptEnabled) channels.forEach(channel => confirmAndMarkAsDelivered(sdk, channel));
56
52
  }
57
53
  }
58
54
  });
@@ -90,7 +86,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
90
86
  if ((_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasNext) {
91
87
  const channels = await queryRef.current.next();
92
88
  setChannels(channels, false);
93
- if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
89
+ if (deliveryReceiptEnabled) channels.forEach(channel => confirmAndMarkAsDelivered(sdk, channel));
94
90
  }
95
91
  });
96
92
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["useRef","useAsyncEffect","useFreshCallback","useAppFeatures","useChannelHandler","useGroupChannelListReducer","HOOK_NAME","createGroupChannelListQuery","sdk","queryCreator","passedQuery","defaultOptions","includeEmpty","limit","order","defaultQuery","GroupChannel","createMyGroupChannelListQuery","useGroupChannelListWithQuery","userId","options","deliveryReceiptEnabled","queryRef","loading","groupChannels","refreshing","updateChannels","setChannels","deleteChannels","updateRefreshing","updateLoading","updateOrder","updateChannelsAndMarkAsDelivered","channels","forEach","channel","markAsDelivered","url","init","uid","current","hasNext","next","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelMemberCountChanged","onChannelDeleted","onUserJoined","onUserLeft","user","isMe","onUserBanned","refresh"],"sources":["useGroupChannelListWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport type { SendbirdChannel, SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../../types';\nimport { useGroupChannelListReducer } from './reducer';\n\nconst HOOK_NAME = 'useGroupChannelListWithQuery';\n\nconst createGroupChannelListQuery = (\n sdk: SendbirdChatSDK,\n queryCreator: UseGroupChannelListOptions['queryCreator'],\n) => {\n const passedQuery = queryCreator?.();\n if (passedQuery) return passedQuery;\n\n const defaultOptions = {\n includeEmpty: false,\n limit: 20,\n order: 'latest_last_message',\n } as const;\n const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();\n defaultQuery.limit = defaultOptions.limit;\n defaultQuery.order = defaultOptions.order;\n defaultQuery.includeEmpty = defaultOptions.includeEmpty;\n return defaultQuery;\n};\n\nexport const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n const queryRef = useRef<Sendbird.GroupChannelListQuery>();\n\n const {\n loading,\n groupChannels,\n refreshing,\n updateChannels,\n setChannels,\n deleteChannels,\n updateRefreshing,\n updateLoading,\n updateOrder,\n } = useGroupChannelListReducer();\n\n const updateChannelsAndMarkAsDelivered = (channels: SendbirdChannel[]) => {\n updateChannels(channels);\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n\n const init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createGroupChannelListQuery(sdk, options?.queryCreator);\n updateOrder(queryRef.current?.order);\n\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n\n setChannels(channels, true);\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n }\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, HOOK_NAME, {\n onChannelChanged: (channel) => updateChannelsAndMarkAsDelivered([channel]),\n onChannelFrozen: (channel) => updateChannels([channel]),\n onChannelUnfrozen: (channel) => updateChannels([channel]),\n onChannelMemberCountChanged: (channels) => updateChannels(channels),\n onChannelDeleted: (url) => deleteChannels([url]),\n onUserJoined: (channel) => updateChannelsAndMarkAsDelivered([channel]),\n onUserLeft: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered([channel]);\n },\n onUserBanned(channel, user) {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered([channel]);\n },\n });\n\n const refresh = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const next = useFreshCallback(async () => {\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n setChannels(channels, false);\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n });\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useRef","GroupChannelListOrder","confirmAndMarkAsDelivered","useAsyncEffect","useFreshCallback","useAppFeatures","useChannelHandler","useGroupChannelListReducer","HOOK_NAME","createGroupChannelListQuery","sdk","queryCreator","passedQuery","groupChannel","createMyGroupChannelListQuery","includeEmpty","limit","order","LATEST_LAST_MESSAGE","useGroupChannelListWithQuery","userId","options","deliveryReceiptEnabled","queryRef","loading","groupChannels","refreshing","updateChannels","setChannels","deleteChannels","updateRefreshing","updateLoading","updateOrder","updateChannelsAndMarkAsDelivered","channels","forEach","channel","init","uid","current","hasNext","next","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelMemberCountChanged","onChannelDeleted","url","onUserJoined","onUserLeft","user","isMe","onUserBanned","refresh"],"sources":["useGroupChannelListWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport { GroupChannelListOrder } from '@sendbird/chat/groupChannel';\nimport type { SendbirdChannel, SendbirdChatSDK, SendbirdGroupChannelListQuery } from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../../types';\nimport { useGroupChannelListReducer } from './reducer';\n\nconst HOOK_NAME = 'useGroupChannelListWithQuery';\n\nconst createGroupChannelListQuery = (\n sdk: SendbirdChatSDK,\n queryCreator: UseGroupChannelListOptions['queryCreator'],\n) => {\n const passedQuery = queryCreator?.();\n if (passedQuery) return passedQuery;\n\n return sdk.groupChannel.createMyGroupChannelListQuery({\n includeEmpty: false,\n limit: 20,\n order: GroupChannelListOrder.LATEST_LAST_MESSAGE,\n });\n};\n\nexport const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n const queryRef = useRef<SendbirdGroupChannelListQuery>();\n\n const {\n loading,\n groupChannels,\n refreshing,\n updateChannels,\n setChannels,\n deleteChannels,\n updateRefreshing,\n updateLoading,\n updateOrder,\n } = useGroupChannelListReducer();\n\n const updateChannelsAndMarkAsDelivered = (channels: SendbirdChannel[]) => {\n updateChannels(channels);\n if (deliveryReceiptEnabled) channels.forEach((channel) => confirmAndMarkAsDelivered(sdk, channel));\n };\n\n const init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createGroupChannelListQuery(sdk, options?.queryCreator);\n updateOrder(queryRef.current?.order);\n\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n\n setChannels(channels, true);\n if (deliveryReceiptEnabled) channels.forEach((channel) => confirmAndMarkAsDelivered(sdk, channel));\n }\n }\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, HOOK_NAME, {\n onChannelChanged: (channel) => updateChannelsAndMarkAsDelivered([channel]),\n onChannelFrozen: (channel) => updateChannels([channel]),\n onChannelUnfrozen: (channel) => updateChannels([channel]),\n onChannelMemberCountChanged: (channels) => updateChannels(channels),\n onChannelDeleted: (url) => deleteChannels([url]),\n onUserJoined: (channel) => updateChannelsAndMarkAsDelivered([channel]),\n onUserLeft: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered([channel]);\n },\n onUserBanned(channel, user) {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered([channel]);\n },\n });\n\n const refresh = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const next = useFreshCallback(async () => {\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n setChannels(channels, false);\n if (deliveryReceiptEnabled) channels.forEach((channel) => confirmAndMarkAsDelivered(sdk, channel));\n }\n });\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n };\n};\n"],"mappings":"AAAA,SAASA,MAAT,QAAuB,OAAvB;AAEA,SAASC,qBAAT,QAAsC,6BAAtC;AAEA,SAASC,yBAAT,EAAoCC,cAApC,EAAoDC,gBAApD,QAA4E,uBAA5E;AAEA,SAASC,cAAT,QAA+B,6BAA/B;AACA,SAASC,iBAAT,QAAkC,iCAAlC;AAEA,SAASC,0BAAT,QAA2C,WAA3C;AAEA,MAAMC,SAAS,GAAG,8BAAlB;;AAEA,MAAMC,2BAA2B,GAAG,CAClCC,GADkC,EAElCC,YAFkC,KAG/B;EACH,MAAMC,WAAW,GAAGD,YAAH,aAAGA,YAAH,uBAAGA,YAAY,EAAhC;EACA,IAAIC,WAAJ,EAAiB,OAAOA,WAAP;EAEjB,OAAOF,GAAG,CAACG,YAAJ,CAAiBC,6BAAjB,CAA+C;IACpDC,YAAY,EAAE,KADsC;IAEpDC,KAAK,EAAE,EAF6C;IAGpDC,KAAK,EAAEhB,qBAAqB,CAACiB;EAHuB,CAA/C,CAAP;AAKD,CAZD;;AAcA,OAAO,MAAMC,4BAAiD,GAAG,CAACT,GAAD,EAAMU,MAAN,EAAcC,OAAd,KAA0B;EACzF,MAAM;IAAEC;EAAF,IAA6BjB,cAAc,CAACK,GAAD,CAAjD;EACA,MAAMa,QAAQ,GAAGvB,MAAM,EAAvB;EAEA,MAAM;IACJwB,OADI;IAEJC,aAFI;IAGJC,UAHI;IAIJC,cAJI;IAKJC,WALI;IAMJC,cANI;IAOJC,gBAPI;IAQJC,aARI;IASJC;EATI,IAUFzB,0BAA0B,EAV9B;;EAYA,MAAM0B,gCAAgC,GAAIC,QAAD,IAAiC;IACxEP,cAAc,CAACO,QAAD,CAAd;IACA,IAAIZ,sBAAJ,EAA4BY,QAAQ,CAACC,OAAT,CAAkBC,OAAD,IAAalC,yBAAyB,CAACQ,GAAD,EAAM0B,OAAN,CAAvD;EAC7B,CAHD;;EAKA,MAAMC,IAAI,GAAGjC,gBAAgB,CAAC,MAAOkC,GAAP,IAAwB;IACpD,IAAIA,GAAJ,EAAS;MAAA;;MACPf,QAAQ,CAACgB,OAAT,GAAmB9B,2BAA2B,CAACC,GAAD,EAAMW,OAAN,aAAMA,OAAN,uBAAMA,OAAO,CAAEV,YAAf,CAA9C;MACAqB,WAAW,sBAACT,QAAQ,CAACgB,OAAV,sDAAC,kBAAkBtB,KAAnB,CAAX;;MAEA,0BAAIM,QAAQ,CAACgB,OAAb,+CAAI,mBAAkBC,OAAtB,EAA+B;QAC7B,MAAMN,QAAQ,GAAG,MAAMX,QAAQ,CAACgB,OAAT,CAAiBE,IAAjB,EAAvB;QAEAb,WAAW,CAACM,QAAD,EAAW,IAAX,CAAX;QACA,IAAIZ,sBAAJ,EAA4BY,QAAQ,CAACC,OAAT,CAAkBC,OAAD,IAAalC,yBAAyB,CAACQ,GAAD,EAAM0B,OAAN,CAAvD;MAC7B;IACF;EACF,CAZ4B,CAA7B;EAcAjC,cAAc,CAAC,YAAY;IACzB4B,aAAa,CAAC,IAAD,CAAb;IACA,MAAMM,IAAI,CAACjB,MAAD,CAAV;IACAW,aAAa,CAAC,KAAD,CAAb;EACD,CAJa,EAIX,CAACM,IAAD,EAAOjB,MAAP,CAJW,CAAd;EAMAd,iBAAiB,CAACI,GAAD,EAAMF,SAAN,EAAiB;IAChCkC,gBAAgB,EAAGN,OAAD,IAAaH,gCAAgC,CAAC,CAACG,OAAD,CAAD,CAD/B;IAEhCO,eAAe,EAAGP,OAAD,IAAaT,cAAc,CAAC,CAACS,OAAD,CAAD,CAFZ;IAGhCQ,iBAAiB,EAAGR,OAAD,IAAaT,cAAc,CAAC,CAACS,OAAD,CAAD,CAHd;IAIhCS,2BAA2B,EAAGX,QAAD,IAAcP,cAAc,CAACO,QAAD,CAJzB;IAKhCY,gBAAgB,EAAGC,GAAD,IAASlB,cAAc,CAAC,CAACkB,GAAD,CAAD,CALT;IAMhCC,YAAY,EAAGZ,OAAD,IAAaH,gCAAgC,CAAC,CAACG,OAAD,CAAD,CAN3B;IAOhCa,UAAU,EAAE,CAACb,OAAD,EAAUc,IAAV,KAAmB;MAC7B,MAAMC,IAAI,GAAGD,IAAI,CAAC9B,MAAL,KAAgBA,MAA7B;MACA,IAAI+B,IAAJ,EAAUtB,cAAc,CAAC,CAACO,OAAO,CAACW,GAAT,CAAD,CAAd,CAAV,KACKd,gCAAgC,CAAC,CAACG,OAAD,CAAD,CAAhC;IACN,CAX+B;;IAYhCgB,YAAY,CAAChB,OAAD,EAAUc,IAAV,EAAgB;MAC1B,MAAMC,IAAI,GAAGD,IAAI,CAAC9B,MAAL,KAAgBA,MAA7B;MACA,IAAI+B,IAAJ,EAAUtB,cAAc,CAAC,CAACO,OAAO,CAACW,GAAT,CAAD,CAAd,CAAV,KACKd,gCAAgC,CAAC,CAACG,OAAD,CAAD,CAAhC;IACN;;EAhB+B,CAAjB,CAAjB;EAmBA,MAAMiB,OAAO,GAAGjD,gBAAgB,CAAC,YAAY;IAC3C0B,gBAAgB,CAAC,IAAD,CAAhB;IACA,MAAMO,IAAI,CAACjB,MAAD,CAAV;IACAU,gBAAgB,CAAC,KAAD,CAAhB;EACD,CAJ+B,CAAhC;EAMA,MAAMW,IAAI,GAAGrC,gBAAgB,CAAC,YAAY;IAAA;;IACxC,0BAAImB,QAAQ,CAACgB,OAAb,+CAAI,mBAAkBC,OAAtB,EAA+B;MAC7B,MAAMN,QAAQ,GAAG,MAAMX,QAAQ,CAACgB,OAAT,CAAiBE,IAAjB,EAAvB;MACAb,WAAW,CAACM,QAAD,EAAW,KAAX,CAAX;MACA,IAAIZ,sBAAJ,EAA4BY,QAAQ,CAACC,OAAT,CAAkBC,OAAD,IAAalC,yBAAyB,CAACQ,GAAD,EAAM0B,OAAN,CAAvD;IAC7B;EACF,CAN4B,CAA7B;EAQA,OAAO;IACLZ,OADK;IAELC,aAFK;IAGL4B,OAHK;IAIL3B,UAJK;IAKLe;EALK,CAAP;AAOD,CAjFM"}
@@ -1,7 +1,9 @@
1
+ import { Logger } from '@sendbird/uikit-utils';
1
2
  import { useGroupChannelMessagesWithCollection } from './useGroupChannelMessagesWithCollection';
2
3
  import { useGroupChannelMessagesWithQuery } from './useGroupChannelMessagesWithQuery';
3
4
  export const useGroupChannelMessages = (sdk, channel, userId, options) => {
4
5
  if (sdk.isCacheEnabled || options !== null && options !== void 0 && options.enableCollectionWithoutLocalCache) {
6
+ if (options !== null && options !== void 0 && options.queryCreator) Logger.warn('`queryCreator` is ignored, please use `collectionCreator` instead.');
5
7
  return useGroupChannelMessagesWithCollection(sdk, channel, userId, options);
6
8
  } else {
7
9
  return useGroupChannelMessagesWithQuery(sdk, channel, userId, options);
@@ -1 +1 @@
1
- {"version":3,"names":["useGroupChannelMessagesWithCollection","useGroupChannelMessagesWithQuery","useGroupChannelMessages","sdk","channel","userId","options","isCacheEnabled","enableCollectionWithoutLocalCache"],"sources":["index.ts"],"sourcesContent":["import type { UseGroupChannelMessages } from '../../types';\nimport { useGroupChannelMessagesWithCollection } from './useGroupChannelMessagesWithCollection';\nimport { useGroupChannelMessagesWithQuery } from './useGroupChannelMessagesWithQuery';\n\nexport const useGroupChannelMessages: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n if (sdk.isCacheEnabled || options?.enableCollectionWithoutLocalCache) {\n return useGroupChannelMessagesWithCollection(sdk, channel, userId, options);\n } else {\n return useGroupChannelMessagesWithQuery(sdk, channel, userId, options);\n }\n};\n"],"mappings":"AACA,SAASA,qCAAT,QAAsD,yCAAtD;AACA,SAASC,gCAAT,QAAiD,oCAAjD;AAEA,OAAO,MAAMC,uBAAgD,GAAG,CAACC,GAAD,EAAMC,OAAN,EAAeC,MAAf,EAAuBC,OAAvB,KAAmC;EACjG,IAAIH,GAAG,CAACI,cAAJ,IAAsBD,OAAtB,aAAsBA,OAAtB,eAAsBA,OAAO,CAAEE,iCAAnC,EAAsE;IACpE,OAAOR,qCAAqC,CAACG,GAAD,EAAMC,OAAN,EAAeC,MAAf,EAAuBC,OAAvB,CAA5C;EACD,CAFD,MAEO;IACL,OAAOL,gCAAgC,CAACE,GAAD,EAAMC,OAAN,EAAeC,MAAf,EAAuBC,OAAvB,CAAvC;EACD;AACF,CANM"}
1
+ {"version":3,"names":["Logger","useGroupChannelMessagesWithCollection","useGroupChannelMessagesWithQuery","useGroupChannelMessages","sdk","channel","userId","options","isCacheEnabled","enableCollectionWithoutLocalCache","queryCreator","warn"],"sources":["index.ts"],"sourcesContent":["import { Logger } from '@sendbird/uikit-utils';\n\nimport type { UseGroupChannelMessages } from '../../types';\nimport { useGroupChannelMessagesWithCollection } from './useGroupChannelMessagesWithCollection';\nimport { useGroupChannelMessagesWithQuery } from './useGroupChannelMessagesWithQuery';\n\nexport const useGroupChannelMessages: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n if (sdk.isCacheEnabled || options?.enableCollectionWithoutLocalCache) {\n if (options?.queryCreator) Logger.warn('`queryCreator` is ignored, please use `collectionCreator` instead.');\n return useGroupChannelMessagesWithCollection(sdk, channel, userId, options);\n } else {\n return useGroupChannelMessagesWithQuery(sdk, channel, userId, options);\n }\n};\n"],"mappings":"AAAA,SAASA,MAAT,QAAuB,uBAAvB;AAGA,SAASC,qCAAT,QAAsD,yCAAtD;AACA,SAASC,gCAAT,QAAiD,oCAAjD;AAEA,OAAO,MAAMC,uBAAgD,GAAG,CAACC,GAAD,EAAMC,OAAN,EAAeC,MAAf,EAAuBC,OAAvB,KAAmC;EACjG,IAAIH,GAAG,CAACI,cAAJ,IAAsBD,OAAtB,aAAsBA,OAAtB,eAAsBA,OAAO,CAAEE,iCAAnC,EAAsE;IACpE,IAAIF,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEG,YAAb,EAA2BV,MAAM,CAACW,IAAP,CAAY,oEAAZ;IAC3B,OAAOV,qCAAqC,CAACG,GAAD,EAAMC,OAAN,EAAeC,MAAf,EAAuBC,OAAvB,CAA5C;EACD,CAHD,MAGO;IACL,OAAOL,gCAAgC,CAACE,GAAD,EAAMC,OAAN,EAAeC,MAAf,EAAuBC,OAAvB,CAAvC;EACD;AACF,CAPM"}
@@ -1 +1 @@
1
- {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","action","draft","type","key","value","status","messageMap","messages","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useGroupChannelMessagesReducer","userId","sortComparator","loading","refreshing","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type {\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n} from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseGroupChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdMessage>;\n nextMessageMap: Record<string, SendbirdMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing':\n case 'update_loading': {\n const key = action.type === 'update_loading' ? 'loading' : 'refreshing';\n draft[key] = action.value.status;\n\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';\n const messageMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearPrev) {\n draft[key] = messageMap;\n } else {\n draft[key] = { ...draft[key], ...messageMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n if (action.type === 'update_messages') {\n draft['nextMessageMap'] = {};\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useGroupChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","action","draft","type","key","value","status","messageMap","messages","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useGroupChannelMessagesReducer","userId","sortComparator","loading","refreshing","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseGroupChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n nextMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing':\n case 'update_loading': {\n const key = action.type === 'update_loading' ? 'loading' : 'refreshing';\n draft[key] = action.value.status;\n\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : ('nextMessageMap' as const);\n const messageMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearPrev) {\n draft[key] = messageMap;\n } else {\n draft[key] = { ...draft[key], ...messageMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n if (action.type === 'update_messages') {\n draft['nextMessageMap'] = {};\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useGroupChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":"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"}
@@ -1,26 +1,22 @@
1
1
  import { useCallback, useEffect, useRef } from 'react';
2
- import { Logger, NOOP, isDifferentChannel, useForceUpdate, useIsMountedRef } from '@sendbird/uikit-utils';
2
+ import { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';
3
+ import { Logger, confirmAndMarkAsDelivered, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate } from '@sendbird/uikit-utils';
3
4
  import { useAppFeatures } from '../../common/useAppFeatures';
4
5
  import { useChannelHandler } from '../../handler/useChannelHandler';
5
6
  import { useActiveGroupChannel } from '../useActiveGroupChannel';
6
7
  import { useGroupChannelMessagesReducer } from './reducer';
7
8
 
8
- const createMessageCollection = (sdk, channel, creator) => {
9
+ const createMessageCollection = (channel, creator) => {
9
10
  if (creator) return creator();
10
- const collection = channel.createMessageCollection();
11
- const filter = new sdk.MessageFilter();
12
- return collection.setLimit(100).setFilter(filter).build();
11
+ const filter = new MessageFilter();
12
+ return channel.createMessageCollection({
13
+ filter,
14
+ limit: 100
15
+ });
13
16
  };
14
17
 
15
- const HOOK_NAME = 'useGroupChannelMessagesWithCollection'; // FIXME: MessageCollection event handler bug, initialize(run async addObserver) -> dispose -> removeObserver -> addObserver called
16
-
18
+ const HOOK_NAME = 'useGroupChannelMessagesWithCollection';
17
19
  export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) => {
18
- const isMounted = useIsMountedRef();
19
-
20
- const disposeManuallyAfterUnmounted = () => {
21
- if (!isMounted.current && collectionRef.current) collectionRef.current.dispose();
22
- };
23
-
24
20
  const {
25
21
  deliveryReceiptEnabled
26
22
  } = useAppFeatures(sdk);
@@ -47,13 +43,13 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
47
43
 
48
44
  const channelMarkAs = async () => {
49
45
  try {
50
- if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);
46
+ if (deliveryReceiptEnabled) await confirmAndMarkAsDelivered(sdk, activeChannel);
51
47
  } catch (e) {
52
48
  Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
53
49
  }
54
50
 
55
51
  try {
56
- await sdk.markAsReadWithChannelUrls([activeChannel.url]);
52
+ await confirmAndMarkAsRead(sdk, [activeChannel]);
57
53
  } catch (e) {
58
54
  Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
59
55
  }
@@ -71,80 +67,66 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
71
67
  if (collectionRef.current) (_collectionRef$curren = collectionRef.current) === null || _collectionRef$curren === void 0 ? void 0 : _collectionRef$curren.dispose();
72
68
 
73
69
  if (uid) {
74
- collectionRef.current = createMessageCollection(sdk, activeChannel, options === null || options === void 0 ? void 0 : options.collectionCreator);
70
+ var _collectionRef$curren2;
71
+
72
+ collectionRef.current = createMessageCollection(activeChannel, options === null || options === void 0 ? void 0 : options.collectionCreator);
75
73
  updateNextMessages([], true, sdk.currentUser.userId);
76
74
  channelMarkAs();
77
- collectionRef.current.initialize(sdk.MessageCollection.MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API).onCacheResult((err, messages) => {
78
- if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);else {
79
- var _collectionRef$curren2, _collectionRef$curren3;
80
-
81
- Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);
82
- updateMessages(messages, true, sdk.currentUser.userId);
83
- updateMessages(((_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.pendingMessages) ?? [], false, sdk.currentUser.userId);
84
- updateMessages(((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.failedMessages) ?? [], false, sdk.currentUser.userId);
85
- if (messages !== null && messages !== void 0 && messages.length) callback === null || callback === void 0 ? void 0 : callback();
86
- }
87
- }).onApiResult((err, messages) => {
88
- if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);else {
89
- Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);
90
- updateMessages(messages, true, sdk.currentUser.userId);
91
-
92
- if (sdk.isCacheEnabled) {
93
- var _collectionRef$curren4, _collectionRef$curren5;
94
-
95
- updateMessages(((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.pendingMessages) ?? [], false, sdk.currentUser.userId);
96
- updateMessages(((_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.failedMessages) ?? [], false, sdk.currentUser.userId);
97
- }
98
- }
99
- callback === null || callback === void 0 ? void 0 : callback();
100
- });
101
- collectionRef.current.setMessageCollectionHandler({
102
- onMessagesAdded(_, channel, messages) {
103
- disposeManuallyAfterUnmounted();
75
+ (_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.setMessageCollectionHandler({
76
+ onMessagesAdded: (_, channel, messages) => {
104
77
  channelMarkAs();
105
78
  updateNextMessages(messages, false, sdk.currentUser.userId);
106
79
  updateChannel(channel);
107
80
  },
108
-
109
- onMessagesUpdated(_, channel, messages) {
110
- disposeManuallyAfterUnmounted();
81
+ onMessagesUpdated: (_, channel, messages) => {
111
82
  updateMessages(messages, false, sdk.currentUser.userId);
112
83
  updateChannel(channel);
113
84
  },
114
-
115
- onMessagesDeleted(_, channel, messages) {
116
- disposeManuallyAfterUnmounted();
117
- const msgIds = messages.map(m => m.messageId);
118
- const reqIds = messages.filter(m => 'reqId' in m).map(m => m.reqId);
119
- deleteMessages(msgIds, reqIds);
120
- deleteNextMessages(msgIds, reqIds);
85
+ onMessagesDeleted: (_, channel, messageIds) => {
86
+ deleteMessages(messageIds, []);
87
+ deleteNextMessages(messageIds, []);
121
88
  updateChannel(channel);
122
89
  },
123
-
124
- onChannelDeleted() {
90
+ onChannelDeleted: () => {
125
91
  var _options$onChannelDel;
126
92
 
127
- disposeManuallyAfterUnmounted();
128
93
  options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
129
94
  },
130
-
131
- onChannelUpdated(_, channel) {
132
- disposeManuallyAfterUnmounted();
95
+ onChannelUpdated: (_, channel) => {
133
96
  updateChannel(channel);
134
97
  },
135
-
136
- onHugeGapDetected() {
137
- disposeManuallyAfterUnmounted();
98
+ onHugeGapDetected: () => {
138
99
  init(uid);
139
100
  }
101
+ });
102
+ collectionRef.current.initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API).onCacheResult((err, messages) => {
103
+ if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);else {
104
+ var _collectionRef$curren3, _collectionRef$curren4;
140
105
 
106
+ Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);
107
+ updateMessages(messages, true, sdk.currentUser.userId);
108
+ updateMessages(((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.pendingMessages) ?? [], false, sdk.currentUser.userId);
109
+ updateMessages(((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.failedMessages) ?? [], false, sdk.currentUser.userId);
110
+ if (messages !== null && messages !== void 0 && messages.length) callback === null || callback === void 0 ? void 0 : callback();
111
+ }
112
+ }).onApiResult((err, messages) => {
113
+ if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);else {
114
+ Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);
115
+ updateMessages(messages, true, sdk.currentUser.userId);
116
+
117
+ if (sdk.isCacheEnabled) {
118
+ var _collectionRef$curren5, _collectionRef$curren6;
119
+
120
+ updateMessages(((_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.pendingMessages) ?? [], false, sdk.currentUser.userId);
121
+ updateMessages(((_collectionRef$curren6 = collectionRef.current) === null || _collectionRef$curren6 === void 0 ? void 0 : _collectionRef$curren6.failedMessages) ?? [], false, sdk.currentUser.userId);
122
+ }
123
+ }
124
+ callback === null || callback === void 0 ? void 0 : callback();
141
125
  });
142
126
  }
143
127
  }, [sdk, activeChannel.url, options === null || options === void 0 ? void 0 : options.collectionCreator]);
144
128
  useChannelHandler(sdk, HOOK_NAME, {
145
129
  onUserBanned(channel, bannedUser) {
146
- disposeManuallyAfterUnmounted();
147
-
148
130
  if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {
149
131
  if (bannedUser.userId === sdk.currentUser.userId) {
150
132
  var _options$onChannelDel2;
@@ -167,9 +149,9 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
167
149
  }, [init, userId]);
168
150
  useEffect(() => {
169
151
  return () => {
170
- var _collectionRef$curren6;
152
+ var _collectionRef$curren7;
171
153
 
172
- if (collectionRef.current) (_collectionRef$curren6 = collectionRef.current) === null || _collectionRef$curren6 === void 0 ? void 0 : _collectionRef$curren6.dispose();
154
+ if (collectionRef.current) (_collectionRef$curren7 = collectionRef.current) === null || _collectionRef$curren7 === void 0 ? void 0 : _collectionRef$curren7.dispose();
173
155
  };
174
156
  }, []);
175
157
  const refresh = useCallback(async () => {
@@ -177,27 +159,27 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
177
159
  init(userId, () => updateRefreshing(false));
178
160
  }, [init, userId]);
179
161
  const prev = useCallback(async () => {
180
- var _collectionRef$curren7;
162
+ var _collectionRef$curren8;
181
163
 
182
- if (collectionRef.current && (_collectionRef$curren7 = collectionRef.current) !== null && _collectionRef$curren7 !== void 0 && _collectionRef$curren7.hasPrevious) {
164
+ if (collectionRef.current && (_collectionRef$curren8 = collectionRef.current) !== null && _collectionRef$curren8 !== void 0 && _collectionRef$curren8.hasPrevious) {
183
165
  try {
184
- var _collectionRef$curren8;
166
+ var _collectionRef$curren9;
185
167
 
186
- const list = await ((_collectionRef$curren8 = collectionRef.current) === null || _collectionRef$curren8 === void 0 ? void 0 : _collectionRef$curren8.loadPrevious());
168
+ const list = await ((_collectionRef$curren9 = collectionRef.current) === null || _collectionRef$curren9 === void 0 ? void 0 : _collectionRef$curren9.loadPrevious());
187
169
  updateMessages(list, false, sdk.currentUser.userId);
188
170
  } catch {}
189
171
  }
190
172
  }, []);
191
173
  const next = useCallback(async () => {
192
- var _collectionRef$curren9;
174
+ var _collectionRef$curren10;
193
175
 
194
176
  const list = [];
195
177
 
196
- if (collectionRef.current && (_collectionRef$curren9 = collectionRef.current) !== null && _collectionRef$curren9 !== void 0 && _collectionRef$curren9.hasNext) {
178
+ if (collectionRef.current && (_collectionRef$curren10 = collectionRef.current) !== null && _collectionRef$curren10 !== void 0 && _collectionRef$curren10.hasNext) {
197
179
  try {
198
- var _collectionRef$curren10;
180
+ var _collectionRef$curren11;
199
181
 
200
- const fetchedList = await ((_collectionRef$curren10 = collectionRef.current) === null || _collectionRef$curren10 === void 0 ? void 0 : _collectionRef$curren10.loadNext());
182
+ const fetchedList = await ((_collectionRef$curren11 = collectionRef.current) === null || _collectionRef$curren11 === void 0 ? void 0 : _collectionRef$curren11.loadNext());
201
183
  list.push(...fetchedList);
202
184
  } catch {}
203
185
  }
@@ -213,41 +195,53 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
213
195
  }, [nextMessages.length]);
214
196
  const sendUserMessage = useCallback((params, onPending) => {
215
197
  return new Promise((resolve, reject) => {
216
- const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {
217
- if (error) reject(error);else {
198
+ activeChannel.sendUserMessage(params).onPending(pendingMessage => {
199
+ if (pendingMessage.isUserMessage()) {
200
+ onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
201
+ updateMessages([pendingMessage], false, sdk.currentUser.userId);
202
+ }
203
+ }).onSucceeded(sentMessage => {
204
+ if (sentMessage.isUserMessage()) {
218
205
  updateMessages([sentMessage], false, sdk.currentUser.userId);
219
206
  resolve(sentMessage);
220
207
  }
208
+ }).onFailed(err => {
209
+ reject(err);
221
210
  });
222
- onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
223
- updateMessages([pendingMessage], false, sdk.currentUser.userId);
224
211
  });
225
212
  }, [activeChannel]);
226
213
  const sendFileMessage = useCallback((params, onPending) => {
227
214
  return new Promise((resolve, reject) => {
228
- const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {
229
- if (error) reject(error);else {
215
+ activeChannel.sendFileMessage(params).onPending(pendingMessage => {
216
+ if (pendingMessage.isFileMessage()) {
217
+ updateMessages([pendingMessage], false, sdk.currentUser.userId);
218
+ onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
219
+ }
220
+ }).onSucceeded(sentMessage => {
221
+ if (sentMessage.isFileMessage()) {
230
222
  updateMessages([sentMessage], false, sdk.currentUser.userId);
231
223
  resolve(sentMessage);
232
224
  }
225
+ }).onFailed(err => {
226
+ reject(err);
233
227
  });
234
- updateMessages([pendingMessage], false, sdk.currentUser.userId);
235
- onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
236
228
  });
237
229
  }, [activeChannel]);
238
230
  const updateUserMessage = useCallback(async (messageId, params) => {
239
- const updatedMessage = await activeChannel.updateUserMessage(messageId, params, NOOP);
231
+ const updatedMessage = await activeChannel.updateUserMessage(messageId, params);
240
232
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
241
233
  return updatedMessage;
242
234
  }, [activeChannel]);
243
235
  const updateFileMessage = useCallback(async (messageId, params) => {
244
- const updatedMessage = await activeChannel.updateFileMessage(messageId, params, NOOP);
236
+ const updatedMessage = await activeChannel.updateFileMessage(messageId, params);
245
237
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
246
238
  return updatedMessage;
247
239
  }, [activeChannel]);
248
240
  const resendMessage = useCallback(async failedMessage => {
249
241
  const message = await (() => {
250
- if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);
242
+ if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage); // FIXME: v4 bugs
243
+ // @ts-ignore
244
+
251
245
  if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);
252
246
  return null;
253
247
  })();
@@ -259,9 +253,9 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
259
253
  if (message.isFileMessage()) await activeChannel.deleteMessage(message);
260
254
  } else {
261
255
  try {
262
- var _collectionRef$curren11;
256
+ var _collectionRef$curren12;
263
257
 
264
- await ((_collectionRef$curren11 = collectionRef.current) === null || _collectionRef$curren11 === void 0 ? void 0 : _collectionRef$curren11.removeFailedMessages([message]));
258
+ await ((_collectionRef$curren12 = collectionRef.current) === null || _collectionRef$curren12 === void 0 ? void 0 : _collectionRef$curren12.removeFailedMessage(message.reqId));
265
259
  } finally {
266
260
  deleteMessages([message.messageId], [message.reqId]);
267
261
  }
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","Logger","NOOP","isDifferentChannel","useForceUpdate","useIsMountedRef","useAppFeatures","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageCollection","sdk","channel","creator","collection","filter","MessageFilter","setLimit","setFilter","build","HOOK_NAME","useGroupChannelMessagesWithCollection","userId","options","isMounted","disposeManuallyAfterUnmounted","current","collectionRef","dispose","deliveryReceiptEnabled","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","markAsDelivered","url","e","warn","markAsReadWithChannelUrls","updateChannel","isGroupChannel","init","uid","callback","collectionCreator","currentUser","initialize","MessageCollection","MessageCollectionInitPolicy","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","setMessageCollectionHandler","onMessagesAdded","_","onMessagesUpdated","onMessagesDeleted","msgIds","map","m","messageId","reqIds","reqId","onChannelDeleted","onChannelUpdated","onHugeGapDetected","onUserBanned","bannedUser","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","sentMessage","sendFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","message","isUserMessage","resendUserMessage","isFileMessage","resendFileMessage","deleteMessage","sendingStatus","removeFailedMessages"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport type {\n SendbirdChannel,\n SendbirdChatSDK,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n SendbirdUserMessage,\n} from '@sendbird/uikit-utils';\nimport { Logger, NOOP, isDifferentChannel, useForceUpdate, useIsMountedRef } 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 createMessageCollection = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const collection = channel.createMessageCollection();\n const filter = new sdk.MessageFilter();\n return collection.setLimit(100).setFilter(filter).build();\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithCollection';\n\n// FIXME: MessageCollection event handler bug, initialize(run async addObserver) -> dispose -> removeObserver -> addObserver called\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const isMounted = useIsMountedRef();\n const disposeManuallyAfterUnmounted = () => {\n if (!isMounted.current && collectionRef.current) collectionRef.current.dispose();\n };\n\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdMessageCollection>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af\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 updateChannel = (channel: SendbirdChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n forceUpdate();\n }\n };\n\n const init = useCallback(\n async (uid?: string, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createMessageCollection(sdk, activeChannel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAs();\n\n collectionRef.current\n .initialize(sdk.MessageCollection.MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n if (messages?.length) callback?.();\n }\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n if (sdk.isCacheEnabled) {\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n }\n callback?.();\n });\n\n collectionRef.current.setMessageCollectionHandler({\n onMessagesAdded(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n channelMarkAs();\n updateNextMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesUpdated(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n updateMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesDeleted(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n const msgIds = messages.map((m) => m.messageId);\n const reqIds = messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => 'reqId' in m)\n .map((m) => m.reqId);\n\n deleteMessages(msgIds, reqIds);\n deleteNextMessages(msgIds, reqIds);\n updateChannel(channel);\n },\n onChannelDeleted() {\n disposeManuallyAfterUnmounted();\n options?.onChannelDeleted?.();\n },\n onChannelUpdated(_, channel) {\n disposeManuallyAfterUnmounted();\n updateChannel(channel);\n },\n onHugeGapDetected() {\n disposeManuallyAfterUnmounted();\n init(uid);\n },\n });\n }\n },\n [sdk, activeChannel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n disposeManuallyAfterUnmounted();\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n setActiveChannel(channel);\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy synchronous task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(userId, () => updateLoading(false));\n }, 0);\n }, [init, userId]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser.userId);\n } catch {}\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n const list = [];\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n list.push(...fetchedList);\n } catch {}\n }\n if (nextMessages.length > 0) {\n list.push(...nextMessages);\n }\n if (list.length > 0) {\n updateMessages(list, 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 updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n });\n\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\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 updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n });\n\n updateMessages([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, NOOP);\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, NOOP);\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) updateMessages([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 try {\n await collectionRef.current?.removeFailedMessages([message]);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\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","useEffect","useRef","MessageCollectionInitPolicy","MessageFilter","Logger","confirmAndMarkAsDelivered","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useAppFeatures","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","HOOK_NAME","useGroupChannelMessagesWithCollection","sdk","userId","options","deliveryReceiptEnabled","collectionRef","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","e","warn","updateChannel","isGroupChannel","init","uid","callback","current","dispose","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","onMessagesUpdated","onMessagesDeleted","messageIds","onChannelDeleted","onChannelUpdated","onHugeGapDetected","initialize","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","url","onUserBanned","bannedUser","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","sendFileMessage","isFileMessage","updateUserMessage","messageId","updatedMessage","updateFileMessage","resendMessage","failedMessage","message","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","removeFailedMessage","reqId"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type {\n SendbirdChannel,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsDelivered,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useForceUpdate,\n} 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 createMessageCollection = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const filter = new MessageFilter();\n return channel.createMessageCollection({ filter, limit: 100 });\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithCollection';\n\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdMessageCollection>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af\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) await confirmAndMarkAsDelivered(sdk, activeChannel);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await confirmAndMarkAsRead(sdk, [activeChannel]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const updateChannel = (channel: SendbirdChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n forceUpdate();\n }\n };\n\n const init = useCallback(\n async (uid?: string, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createMessageCollection(activeChannel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAs();\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, channel, messages) => {\n channelMarkAs();\n updateNextMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesUpdated: (_, channel, messages) => {\n updateMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesDeleted: (_, channel, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNextMessages(messageIds, []);\n updateChannel(channel);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, channel) => {\n updateChannel(channel);\n },\n onHugeGapDetected: () => {\n init(uid);\n },\n });\n\n collectionRef.current\n .initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n if (messages?.length) callback?.();\n }\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n if (sdk.isCacheEnabled) {\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n }\n callback?.();\n });\n }\n },\n [sdk, activeChannel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n setActiveChannel(channel);\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy synchronous task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(userId, () => updateLoading(false));\n }, 0);\n }, [init, userId]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser.userId);\n } catch {}\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n const list = [];\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n list.push(...fetchedList);\n } catch {}\n }\n if (nextMessages.length > 0) {\n list.push(...nextMessages);\n }\n if (list.length > 0) {\n updateMessages(list, 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 activeChannel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err) => {\n reject(err);\n });\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n activeChannel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n })\n .onFailed((err) => {\n reject(err);\n });\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 // FIXME: v4 bugs\n // @ts-ignore\n if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([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 try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\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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"}