@sendbird/uikit-chat-hooks 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/lib/commonjs/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
  2. package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -0
  3. package/lib/commonjs/channel/useGroupChannelList/reducer.js +184 -0
  4. package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -0
  5. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +134 -0
  6. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
  7. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +118 -0
  8. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
  9. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
  10. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  11. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
  12. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  13. package/lib/commonjs/common/useMessageOutgoingStatus.js +49 -0
  14. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -0
  15. package/lib/commonjs/index.js +12 -4
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/types.js.map +1 -1
  18. package/lib/module/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
  19. package/lib/module/channel/useGroupChannelList/index.js.map +1 -0
  20. package/lib/module/channel/useGroupChannelList/reducer.js +174 -0
  21. package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -0
  22. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +120 -0
  23. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
  24. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +104 -0
  25. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
  26. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
  27. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  28. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
  29. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  30. package/lib/module/common/useMessageOutgoingStatus.js +36 -0
  31. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -0
  32. package/lib/module/index.js +4 -3
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/module/types.js.map +1 -1
  35. package/lib/typescript/src/channel/{useGroupChannelList.d.ts → useGroupChannelList/index.d.ts} +1 -1
  36. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +14 -0
  37. package/lib/typescript/src/channel/{useGroupChannelListWithCollection.d.ts → useGroupChannelList/useGroupChannelListWithCollection.d.ts} +1 -1
  38. package/lib/typescript/src/channel/{useGroupChannelListWithQuery.d.ts → useGroupChannelList/useGroupChannelListWithQuery.d.ts} +1 -1
  39. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +3 -0
  40. package/lib/typescript/src/index.d.ts +4 -3
  41. package/lib/typescript/src/types.d.ts +0 -7
  42. package/package.json +3 -3
  43. package/src/channel/{useGroupChannelList.ts → useGroupChannelList/index.ts} +1 -1
  44. package/src/channel/useGroupChannelList/reducer.ts +154 -0
  45. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +116 -0
  46. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +114 -0
  47. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +3 -3
  48. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +2 -2
  49. package/src/common/useMessageOutgoingStatus.ts +56 -0
  50. package/src/index.ts +4 -3
  51. package/src/types.ts +0 -8
  52. package/lib/commonjs/channel/useGroupChannelList.js.map +0 -1
  53. package/lib/commonjs/channel/useGroupChannelListWithCollection.js +0 -148
  54. package/lib/commonjs/channel/useGroupChannelListWithCollection.js.map +0 -1
  55. package/lib/commonjs/channel/useGroupChannelListWithQuery.js +0 -130
  56. package/lib/commonjs/channel/useGroupChannelListWithQuery.js.map +0 -1
  57. package/lib/module/channel/useGroupChannelList.js.map +0 -1
  58. package/lib/module/channel/useGroupChannelListWithCollection.js +0 -135
  59. package/lib/module/channel/useGroupChannelListWithCollection.js.map +0 -1
  60. package/lib/module/channel/useGroupChannelListWithQuery.js +0 -117
  61. package/lib/module/channel/useGroupChannelListWithQuery.js.map +0 -1
  62. package/src/channel/useGroupChannelListWithCollection.ts +0 -139
  63. package/src/channel/useGroupChannelListWithQuery.ts +0 -119
@@ -1 +0,0 @@
1
- {"version":3,"names":["HOOK_NAME","createGroupChannelListCollection","sdk","collectionCreator","passedCollection","defaultCollection","GroupChannel","createGroupChannelCollection","filter","GroupChannelFilter","setLimit","setFilter","build","useGroupChannelListWithCollection","userId","options","id","useUniqId","deliveryReceiptEnabled","useAppFeatures","collectionRef","useRef","loading","setLoading","useState","refreshing","setRefreshing","groupChannelMap","setGroupChannelMap","groupChannels","useMemo","channels","Object","values","sortComparator","sort","updateChannels","clearPrev","c","isGroupChannel","arrayToMap","prev","forEach","channel","markAsDelivered","url","deleteChannels","channelUrls","draft","init","useCallback","uid","current","dispose","hasMore","loadMore","setGroupChannelCollectionHandler","onChannelsAdded","_","onChannelsUpdated","onChannelsDeleted","useEffect","useAsyncEffect","useChannelHandler","onUserBanned","user","isMe","refresh","update","next"],"sources":["useGroupChannelListWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type {\n SendbirdChannel,\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n} from '@sendbird/uikit-utils';\nimport { arrayToMap, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../common/useAppFeatures';\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../types';\n\ntype GroupChannelMap = Record<string, SendbirdGroupChannel>;\n\nconst HOOK_NAME = 'useGroupChannelListWithCollection';\nconst createGroupChannelListCollection = (\n sdk: SendbirdChatSDK,\n collectionCreator: UseGroupChannelListOptions['collectionCreator'],\n) => {\n const passedCollection = collectionCreator?.();\n if (passedCollection) return passedCollection;\n\n const defaultCollection = sdk.GroupChannel.createGroupChannelCollection();\n const filter = new sdk.GroupChannelFilter();\n return defaultCollection.setLimit(20).setFilter(filter).build();\n};\n\nexport const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, userId, options) => {\n const id = useUniqId(HOOK_NAME);\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdGroupChannelCollection>();\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [groupChannelMap, setGroupChannelMap] = useState<GroupChannelMap>({});\n const groupChannels = useMemo(() => {\n const channels = Object.values(groupChannelMap);\n if (options?.sortComparator) return channels.sort(options?.sortComparator);\n return channels;\n }, [groupChannelMap, options?.sortComparator]);\n\n // ---------- internal methods ---------- //\n const updateChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {\n const groupChannels = channels.filter((c): c is SendbirdGroupChannel => c.isGroupChannel());\n if (clearPrev) setGroupChannelMap(arrayToMap(groupChannels, 'url'));\n else setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(groupChannels, 'url') }));\n if (deliveryReceiptEnabled) groupChannels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n const deleteChannels = (channelUrls: string[]) => {\n setGroupChannelMap(({ ...draft }) => {\n channelUrls.forEach((url) => delete draft[url]);\n return draft;\n });\n };\n const init = useCallback(\n async (uid?: string) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);\n if (collectionRef.current?.hasMore) {\n updateChannels(await collectionRef.current?.loadMore(), true);\n }\n\n collectionRef.current?.setGroupChannelCollectionHandler({\n onChannelsAdded(_, channels) {\n updateChannels(channels, false);\n },\n onChannelsUpdated(_, channels) {\n updateChannels(channels, false);\n },\n onChannelsDeleted(_, channelUrls) {\n deleteChannels(channelUrls);\n },\n });\n }\n },\n [sdk, options?.collectionCreator],\n );\n // ---------- internal methods ends ---------- //\n\n // ---------- internal hooks ---------- //\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n useAsyncEffect(async () => {\n setLoading(true);\n await init(userId);\n setLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, `${HOOK_NAME}_${id}`, {\n onUserBanned: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel], false);\n },\n });\n // ---------- internal hooks ends ---------- //\n\n // ---------- returns methods ---------- //\n const refresh = useCallback(async () => {\n setRefreshing(true);\n await init(userId);\n setRefreshing(false);\n }, [init, userId]);\n\n const update = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);\n setGroupChannelMap((prev) => ({ ...prev, [channel.url]: channel }));\n },\n [sdk],\n );\n\n const next = useCallback(async () => {\n if (collectionRef.current?.hasMore) {\n const channels = await collectionRef.current?.loadMore();\n setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(channels, 'url') }));\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n }, [sdk]);\n // ---------- returns methods ends ---------- //\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n update,\n };\n};\n"],"mappings":"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"}
@@ -1,130 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useGroupChannelListWithQuery = void 0;
7
-
8
- var _react = require("react");
9
-
10
- var _uikitUtils = require("@sendbird/uikit-utils");
11
-
12
- var _useAppFeatures = require("../common/useAppFeatures");
13
-
14
- var _useChannelHandler = require("../handler/useChannelHandler");
15
-
16
- const HOOK_NAME = 'useGroupChannelListWithQuery';
17
-
18
- const createGroupChannelListQuery = (sdk, queryCreator) => {
19
- const passedQuery = queryCreator === null || queryCreator === void 0 ? void 0 : queryCreator();
20
- if (passedQuery) return passedQuery;
21
- const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();
22
- defaultQuery.limit = 20;
23
- return defaultQuery;
24
- };
25
-
26
- const useGroupChannelListWithQuery = (sdk, userId, options) => {
27
- const {
28
- deliveryReceiptEnabled
29
- } = (0, _useAppFeatures.useAppFeatures)(sdk);
30
- const queryRef = (0, _react.useRef)();
31
- const [loading, setLoading] = (0, _react.useState)(false);
32
- const [refreshing, setRefreshing] = (0, _react.useState)(false);
33
- const [groupChannelMap, setGroupChannelMap] = (0, _react.useState)({});
34
- const groupChannels = (0, _react.useMemo)(() => {
35
- const channels = Object.values(groupChannelMap);
36
- if (options !== null && options !== void 0 && options.sortComparator) return channels.sort(options === null || options === void 0 ? void 0 : options.sortComparator);
37
- return channels;
38
- }, [groupChannelMap, options === null || options === void 0 ? void 0 : options.sortComparator]); // ---------- internal methods ---------- //
39
-
40
- const updateChannels = (channels, clearPrev) => {
41
- const groupChannels = channels.filter(c => c.isGroupChannel());
42
- if (clearPrev) setGroupChannelMap((0, _uikitUtils.arrayToMap)(groupChannels, 'url'));else setGroupChannelMap(prev => ({ ...prev,
43
- ...(0, _uikitUtils.arrayToMap)(groupChannels, 'url')
44
- }));
45
- if (deliveryReceiptEnabled) groupChannels.forEach(channel => sdk.markAsDelivered(channel.url));
46
- };
47
-
48
- const deleteChannels = channelUrls => {
49
- setGroupChannelMap(_ref => {
50
- let { ...draft
51
- } = _ref;
52
- channelUrls.forEach(url => delete draft[url]);
53
- return draft;
54
- });
55
- };
56
-
57
- const init = (0, _react.useCallback)(async uid => {
58
- if (uid) {
59
- var _queryRef$current;
60
-
61
- queryRef.current = createGroupChannelListQuery(sdk, options === null || options === void 0 ? void 0 : options.queryCreator);
62
-
63
- if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
64
- const channels = await queryRef.current.next();
65
- updateChannels(channels, true);
66
- }
67
- }
68
- }, [sdk, options === null || options === void 0 ? void 0 : options.queryCreator]); // ---------- internal methods ends ---------- //
69
- // ---------- internal hooks ---------- //
70
-
71
- (0, _uikitUtils.useAsyncEffect)(async () => {
72
- setLoading(true);
73
- await init(userId);
74
- setLoading(false);
75
- }, [init, userId]);
76
- (0, _useChannelHandler.useChannelHandler)(sdk, HOOK_NAME, {
77
- onChannelChanged: channel => updateChannels([channel], false),
78
- onChannelFrozen: channel => updateChannels([channel], false),
79
- onChannelUnfrozen: channel => updateChannels([channel], false),
80
- onChannelMemberCountChanged: channels => updateChannels(channels, false),
81
- onChannelDeleted: url => deleteChannels([url]),
82
- onUserJoined: channel => updateChannels([channel], false),
83
- onUserLeft: (channel, user) => {
84
- const isMe = user.userId === userId;
85
- if (isMe) deleteChannels([channel.url]);else updateChannels([channel], false);
86
- },
87
-
88
- onUserBanned(channel, user) {
89
- const isMe = user.userId === userId;
90
- if (isMe) deleteChannels([channel.url]);else updateChannels([channel], false);
91
- }
92
-
93
- }); // ---------- internal hooks ends ---------- //
94
- // ---------- returns methods ---------- //
95
-
96
- const refresh = (0, _react.useCallback)(async () => {
97
- setRefreshing(true);
98
- await init(userId);
99
- setRefreshing(false);
100
- }, [init, userId]);
101
- const update = (0, _react.useCallback)(channel => {
102
- if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);
103
- setGroupChannelMap(prev => ({ ...prev,
104
- [channel.url]: channel
105
- }));
106
- }, [sdk]);
107
- const next = (0, _react.useCallback)(async () => {
108
- var _queryRef$current2;
109
-
110
- if ((_queryRef$current2 = queryRef.current) !== null && _queryRef$current2 !== void 0 && _queryRef$current2.hasNext) {
111
- const channels = await queryRef.current.next();
112
- setGroupChannelMap(prev => ({ ...prev,
113
- ...(0, _uikitUtils.arrayToMap)(channels, 'url')
114
- }));
115
- if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
116
- }
117
- }, [sdk]); // ---------- returns methods ends ---------- //
118
-
119
- return {
120
- loading,
121
- groupChannels,
122
- update,
123
- refresh,
124
- refreshing,
125
- next
126
- };
127
- };
128
-
129
- exports.useGroupChannelListWithQuery = useGroupChannelListWithQuery;
130
- //# sourceMappingURL=useGroupChannelListWithQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["HOOK_NAME","createGroupChannelListQuery","sdk","queryCreator","passedQuery","defaultQuery","GroupChannel","createMyGroupChannelListQuery","limit","useGroupChannelListWithQuery","userId","options","deliveryReceiptEnabled","useAppFeatures","queryRef","useRef","loading","setLoading","useState","refreshing","setRefreshing","groupChannelMap","setGroupChannelMap","groupChannels","useMemo","channels","Object","values","sortComparator","sort","updateChannels","clearPrev","filter","c","isGroupChannel","arrayToMap","prev","forEach","channel","markAsDelivered","url","deleteChannels","channelUrls","draft","init","useCallback","uid","current","hasNext","next","useAsyncEffect","useChannelHandler","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelMemberCountChanged","onChannelDeleted","onUserJoined","onUserLeft","user","isMe","onUserBanned","refresh","update"],"sources":["useGroupChannelListWithQuery.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport type { SendbirdChannel, SendbirdChatSDK, SendbirdGroupChannel } from '@sendbird/uikit-utils';\nimport { arrayToMap, useAsyncEffect } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../common/useAppFeatures';\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../types';\n\ntype GroupChannelMap = Record<string, SendbirdGroupChannel>;\n\nconst HOOK_NAME = 'useGroupChannelListWithQuery';\nconst createGroupChannelListQuery = (\n sdk: SendbirdChatSDK,\n queryCreator: UseGroupChannelListOptions['queryCreator'],\n) => {\n const passedQuery = queryCreator?.();\n if (passedQuery) return passedQuery;\n\n const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();\n defaultQuery.limit = 20;\n return defaultQuery;\n};\n\nexport const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n const queryRef = useRef<Sendbird.GroupChannelListQuery>();\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [groupChannelMap, setGroupChannelMap] = useState<GroupChannelMap>({});\n const groupChannels = useMemo(() => {\n const channels = Object.values(groupChannelMap);\n if (options?.sortComparator) return channels.sort(options?.sortComparator);\n return channels;\n }, [groupChannelMap, options?.sortComparator]);\n\n // ---------- internal methods ---------- //\n const updateChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {\n const groupChannels = channels.filter((c): c is SendbirdGroupChannel => c.isGroupChannel());\n if (clearPrev) setGroupChannelMap(arrayToMap(groupChannels, 'url'));\n else setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(groupChannels, 'url') }));\n\n if (deliveryReceiptEnabled) groupChannels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n const deleteChannels = (channelUrls: string[]) => {\n setGroupChannelMap(({ ...draft }) => {\n channelUrls.forEach((url) => delete draft[url]);\n return draft;\n });\n };\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createGroupChannelListQuery(sdk, options?.queryCreator);\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n updateChannels(channels, true);\n }\n }\n },\n [sdk, options?.queryCreator],\n );\n // ---------- internal methods ends ---------- //\n\n // ---------- internal hooks ---------- //\n useAsyncEffect(async () => {\n setLoading(true);\n await init(userId);\n setLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, HOOK_NAME, {\n onChannelChanged: (channel) => updateChannels([channel], false),\n onChannelFrozen: (channel) => updateChannels([channel], false),\n onChannelUnfrozen: (channel) => updateChannels([channel], false),\n onChannelMemberCountChanged: (channels) => updateChannels(channels, false),\n onChannelDeleted: (url) => deleteChannels([url]),\n onUserJoined: (channel) => updateChannels([channel], false),\n onUserLeft: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel], false);\n },\n onUserBanned(channel, user) {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel], false);\n },\n });\n // ---------- internal hooks ends ---------- //\n\n // ---------- returns methods ---------- //\n const refresh = useCallback(async () => {\n setRefreshing(true);\n await init(userId);\n setRefreshing(false);\n }, [init, userId]);\n\n const update = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);\n setGroupChannelMap((prev) => ({ ...prev, [channel.url]: channel }));\n },\n [sdk],\n );\n\n const next = useCallback(async () => {\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(channels, 'url') }));\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n }, [sdk]);\n // ---------- returns methods ends ---------- //\n\n return { loading, groupChannels, update, refresh, refreshing, next };\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["useGroupChannelListWithCollection","useGroupChannelListWithQuery","useGroupChannelList","sdk","userId","options","isCacheEnabled","enableCollectionWithoutLocalCache"],"sources":["useGroupChannelList.ts"],"sourcesContent":["import type { UseGroupChannelList } from '../types';\nimport { useGroupChannelListWithCollection } from './useGroupChannelListWithCollection';\nimport { useGroupChannelListWithQuery } from './useGroupChannelListWithQuery';\n\nexport const useGroupChannelList: UseGroupChannelList = (sdk, userId, options) => {\n if (sdk.isCacheEnabled || options?.enableCollectionWithoutLocalCache) {\n return useGroupChannelListWithCollection(sdk, userId, options);\n } else {\n return useGroupChannelListWithQuery(sdk, userId, options);\n }\n};\n"],"mappings":"AACA,SAASA,iCAAT,QAAkD,qCAAlD;AACA,SAASC,4BAAT,QAA6C,gCAA7C;AAEA,OAAO,MAAMC,mBAAwC,GAAG,CAACC,GAAD,EAAMC,MAAN,EAAcC,OAAd,KAA0B;EAChF,IAAIF,GAAG,CAACG,cAAJ,IAAsBD,OAAtB,aAAsBA,OAAtB,eAAsBA,OAAO,CAAEE,iCAAnC,EAAsE;IACpE,OAAOP,iCAAiC,CAACG,GAAD,EAAMC,MAAN,EAAcC,OAAd,CAAxC;EACD,CAFD,MAEO;IACL,OAAOJ,4BAA4B,CAACE,GAAD,EAAMC,MAAN,EAAcC,OAAd,CAAnC;EACD;AACF,CANM"}
@@ -1,135 +0,0 @@
1
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
- import { arrayToMap, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';
3
- import { useAppFeatures } from '../common/useAppFeatures';
4
- import { useChannelHandler } from '../handler/useChannelHandler';
5
- const HOOK_NAME = 'useGroupChannelListWithCollection';
6
-
7
- const createGroupChannelListCollection = (sdk, collectionCreator) => {
8
- const passedCollection = collectionCreator === null || collectionCreator === void 0 ? void 0 : collectionCreator();
9
- if (passedCollection) return passedCollection;
10
- const defaultCollection = sdk.GroupChannel.createGroupChannelCollection();
11
- const filter = new sdk.GroupChannelFilter();
12
- return defaultCollection.setLimit(20).setFilter(filter).build();
13
- };
14
-
15
- export const useGroupChannelListWithCollection = (sdk, userId, options) => {
16
- const id = useUniqId(HOOK_NAME);
17
- const {
18
- deliveryReceiptEnabled
19
- } = useAppFeatures(sdk);
20
- const collectionRef = useRef();
21
- const [loading, setLoading] = useState(false);
22
- const [refreshing, setRefreshing] = useState(false);
23
- const [groupChannelMap, setGroupChannelMap] = useState({});
24
- const groupChannels = useMemo(() => {
25
- const channels = Object.values(groupChannelMap);
26
- if (options !== null && options !== void 0 && options.sortComparator) return channels.sort(options === null || options === void 0 ? void 0 : options.sortComparator);
27
- return channels;
28
- }, [groupChannelMap, options === null || options === void 0 ? void 0 : options.sortComparator]); // ---------- internal methods ---------- //
29
-
30
- const updateChannels = (channels, clearPrev) => {
31
- const groupChannels = channels.filter(c => c.isGroupChannel());
32
- if (clearPrev) setGroupChannelMap(arrayToMap(groupChannels, 'url'));else setGroupChannelMap(prev => ({ ...prev,
33
- ...arrayToMap(groupChannels, 'url')
34
- }));
35
- if (deliveryReceiptEnabled) groupChannels.forEach(channel => sdk.markAsDelivered(channel.url));
36
- };
37
-
38
- const deleteChannels = channelUrls => {
39
- setGroupChannelMap(_ref => {
40
- let { ...draft
41
- } = _ref;
42
- channelUrls.forEach(url => delete draft[url]);
43
- return draft;
44
- });
45
- };
46
-
47
- const init = useCallback(async uid => {
48
- var _collectionRef$curren;
49
-
50
- if (collectionRef.current) (_collectionRef$curren = collectionRef.current) === null || _collectionRef$curren === void 0 ? void 0 : _collectionRef$curren.dispose();
51
-
52
- if (uid) {
53
- var _collectionRef$curren2, _collectionRef$curren4;
54
-
55
- collectionRef.current = createGroupChannelListCollection(sdk, options === null || options === void 0 ? void 0 : options.collectionCreator);
56
-
57
- if ((_collectionRef$curren2 = collectionRef.current) !== null && _collectionRef$curren2 !== void 0 && _collectionRef$curren2.hasMore) {
58
- var _collectionRef$curren3;
59
-
60
- updateChannels(await ((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.loadMore()), true);
61
- }
62
-
63
- (_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.setGroupChannelCollectionHandler({
64
- onChannelsAdded(_, channels) {
65
- updateChannels(channels, false);
66
- },
67
-
68
- onChannelsUpdated(_, channels) {
69
- updateChannels(channels, false);
70
- },
71
-
72
- onChannelsDeleted(_, channelUrls) {
73
- deleteChannels(channelUrls);
74
- }
75
-
76
- });
77
- }
78
- }, [sdk, options === null || options === void 0 ? void 0 : options.collectionCreator]); // ---------- internal methods ends ---------- //
79
- // ---------- internal hooks ---------- //
80
-
81
- useEffect(() => {
82
- return () => {
83
- var _collectionRef$curren5;
84
-
85
- if (collectionRef.current) (_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.dispose();
86
- };
87
- }, []);
88
- useAsyncEffect(async () => {
89
- setLoading(true);
90
- await init(userId);
91
- setLoading(false);
92
- }, [init, userId]);
93
- useChannelHandler(sdk, `${HOOK_NAME}_${id}`, {
94
- onUserBanned: (channel, user) => {
95
- const isMe = user.userId === userId;
96
- if (isMe) deleteChannels([channel.url]);else updateChannels([channel], false);
97
- }
98
- }); // ---------- internal hooks ends ---------- //
99
- // ---------- returns methods ---------- //
100
-
101
- const refresh = useCallback(async () => {
102
- setRefreshing(true);
103
- await init(userId);
104
- setRefreshing(false);
105
- }, [init, userId]);
106
- const update = useCallback(channel => {
107
- if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);
108
- setGroupChannelMap(prev => ({ ...prev,
109
- [channel.url]: channel
110
- }));
111
- }, [sdk]);
112
- const next = useCallback(async () => {
113
- var _collectionRef$curren6;
114
-
115
- if ((_collectionRef$curren6 = collectionRef.current) !== null && _collectionRef$curren6 !== void 0 && _collectionRef$curren6.hasMore) {
116
- var _collectionRef$curren7;
117
-
118
- const channels = await ((_collectionRef$curren7 = collectionRef.current) === null || _collectionRef$curren7 === void 0 ? void 0 : _collectionRef$curren7.loadMore());
119
- setGroupChannelMap(prev => ({ ...prev,
120
- ...arrayToMap(channels, 'url')
121
- }));
122
- if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
123
- }
124
- }, [sdk]); // ---------- returns methods ends ---------- //
125
-
126
- return {
127
- loading,
128
- groupChannels,
129
- refresh,
130
- refreshing,
131
- next,
132
- update
133
- };
134
- };
135
- //# sourceMappingURL=useGroupChannelListWithCollection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","arrayToMap","useAsyncEffect","useUniqId","useAppFeatures","useChannelHandler","HOOK_NAME","createGroupChannelListCollection","sdk","collectionCreator","passedCollection","defaultCollection","GroupChannel","createGroupChannelCollection","filter","GroupChannelFilter","setLimit","setFilter","build","useGroupChannelListWithCollection","userId","options","id","deliveryReceiptEnabled","collectionRef","loading","setLoading","refreshing","setRefreshing","groupChannelMap","setGroupChannelMap","groupChannels","channels","Object","values","sortComparator","sort","updateChannels","clearPrev","c","isGroupChannel","prev","forEach","channel","markAsDelivered","url","deleteChannels","channelUrls","draft","init","uid","current","dispose","hasMore","loadMore","setGroupChannelCollectionHandler","onChannelsAdded","_","onChannelsUpdated","onChannelsDeleted","onUserBanned","user","isMe","refresh","update","next"],"sources":["useGroupChannelListWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type {\n SendbirdChannel,\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n} from '@sendbird/uikit-utils';\nimport { arrayToMap, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../common/useAppFeatures';\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../types';\n\ntype GroupChannelMap = Record<string, SendbirdGroupChannel>;\n\nconst HOOK_NAME = 'useGroupChannelListWithCollection';\nconst createGroupChannelListCollection = (\n sdk: SendbirdChatSDK,\n collectionCreator: UseGroupChannelListOptions['collectionCreator'],\n) => {\n const passedCollection = collectionCreator?.();\n if (passedCollection) return passedCollection;\n\n const defaultCollection = sdk.GroupChannel.createGroupChannelCollection();\n const filter = new sdk.GroupChannelFilter();\n return defaultCollection.setLimit(20).setFilter(filter).build();\n};\n\nexport const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, userId, options) => {\n const id = useUniqId(HOOK_NAME);\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdGroupChannelCollection>();\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [groupChannelMap, setGroupChannelMap] = useState<GroupChannelMap>({});\n const groupChannels = useMemo(() => {\n const channels = Object.values(groupChannelMap);\n if (options?.sortComparator) return channels.sort(options?.sortComparator);\n return channels;\n }, [groupChannelMap, options?.sortComparator]);\n\n // ---------- internal methods ---------- //\n const updateChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {\n const groupChannels = channels.filter((c): c is SendbirdGroupChannel => c.isGroupChannel());\n if (clearPrev) setGroupChannelMap(arrayToMap(groupChannels, 'url'));\n else setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(groupChannels, 'url') }));\n if (deliveryReceiptEnabled) groupChannels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n const deleteChannels = (channelUrls: string[]) => {\n setGroupChannelMap(({ ...draft }) => {\n channelUrls.forEach((url) => delete draft[url]);\n return draft;\n });\n };\n const init = useCallback(\n async (uid?: string) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);\n if (collectionRef.current?.hasMore) {\n updateChannels(await collectionRef.current?.loadMore(), true);\n }\n\n collectionRef.current?.setGroupChannelCollectionHandler({\n onChannelsAdded(_, channels) {\n updateChannels(channels, false);\n },\n onChannelsUpdated(_, channels) {\n updateChannels(channels, false);\n },\n onChannelsDeleted(_, channelUrls) {\n deleteChannels(channelUrls);\n },\n });\n }\n },\n [sdk, options?.collectionCreator],\n );\n // ---------- internal methods ends ---------- //\n\n // ---------- internal hooks ---------- //\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n useAsyncEffect(async () => {\n setLoading(true);\n await init(userId);\n setLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, `${HOOK_NAME}_${id}`, {\n onUserBanned: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel], false);\n },\n });\n // ---------- internal hooks ends ---------- //\n\n // ---------- returns methods ---------- //\n const refresh = useCallback(async () => {\n setRefreshing(true);\n await init(userId);\n setRefreshing(false);\n }, [init, userId]);\n\n const update = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);\n setGroupChannelMap((prev) => ({ ...prev, [channel.url]: channel }));\n },\n [sdk],\n );\n\n const next = useCallback(async () => {\n if (collectionRef.current?.hasMore) {\n const channels = await collectionRef.current?.loadMore();\n setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(channels, 'url') }));\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n }, [sdk]);\n // ---------- returns methods ends ---------- //\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n update,\n };\n};\n"],"mappings":"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"}
@@ -1,117 +0,0 @@
1
- import { useCallback, useMemo, useRef, useState } from 'react';
2
- import { arrayToMap, useAsyncEffect } from '@sendbird/uikit-utils';
3
- import { useAppFeatures } from '../common/useAppFeatures';
4
- import { useChannelHandler } from '../handler/useChannelHandler';
5
- const HOOK_NAME = 'useGroupChannelListWithQuery';
6
-
7
- const createGroupChannelListQuery = (sdk, queryCreator) => {
8
- const passedQuery = queryCreator === null || queryCreator === void 0 ? void 0 : queryCreator();
9
- if (passedQuery) return passedQuery;
10
- const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();
11
- defaultQuery.limit = 20;
12
- return defaultQuery;
13
- };
14
-
15
- export const useGroupChannelListWithQuery = (sdk, userId, options) => {
16
- const {
17
- deliveryReceiptEnabled
18
- } = useAppFeatures(sdk);
19
- const queryRef = useRef();
20
- const [loading, setLoading] = useState(false);
21
- const [refreshing, setRefreshing] = useState(false);
22
- const [groupChannelMap, setGroupChannelMap] = useState({});
23
- const groupChannels = useMemo(() => {
24
- const channels = Object.values(groupChannelMap);
25
- if (options !== null && options !== void 0 && options.sortComparator) return channels.sort(options === null || options === void 0 ? void 0 : options.sortComparator);
26
- return channels;
27
- }, [groupChannelMap, options === null || options === void 0 ? void 0 : options.sortComparator]); // ---------- internal methods ---------- //
28
-
29
- const updateChannels = (channels, clearPrev) => {
30
- const groupChannels = channels.filter(c => c.isGroupChannel());
31
- if (clearPrev) setGroupChannelMap(arrayToMap(groupChannels, 'url'));else setGroupChannelMap(prev => ({ ...prev,
32
- ...arrayToMap(groupChannels, 'url')
33
- }));
34
- if (deliveryReceiptEnabled) groupChannels.forEach(channel => sdk.markAsDelivered(channel.url));
35
- };
36
-
37
- const deleteChannels = channelUrls => {
38
- setGroupChannelMap(_ref => {
39
- let { ...draft
40
- } = _ref;
41
- channelUrls.forEach(url => delete draft[url]);
42
- return draft;
43
- });
44
- };
45
-
46
- const init = useCallback(async uid => {
47
- if (uid) {
48
- var _queryRef$current;
49
-
50
- queryRef.current = createGroupChannelListQuery(sdk, options === null || options === void 0 ? void 0 : options.queryCreator);
51
-
52
- if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
53
- const channels = await queryRef.current.next();
54
- updateChannels(channels, true);
55
- }
56
- }
57
- }, [sdk, options === null || options === void 0 ? void 0 : options.queryCreator]); // ---------- internal methods ends ---------- //
58
- // ---------- internal hooks ---------- //
59
-
60
- useAsyncEffect(async () => {
61
- setLoading(true);
62
- await init(userId);
63
- setLoading(false);
64
- }, [init, userId]);
65
- useChannelHandler(sdk, HOOK_NAME, {
66
- onChannelChanged: channel => updateChannels([channel], false),
67
- onChannelFrozen: channel => updateChannels([channel], false),
68
- onChannelUnfrozen: channel => updateChannels([channel], false),
69
- onChannelMemberCountChanged: channels => updateChannels(channels, false),
70
- onChannelDeleted: url => deleteChannels([url]),
71
- onUserJoined: channel => updateChannels([channel], false),
72
- onUserLeft: (channel, user) => {
73
- const isMe = user.userId === userId;
74
- if (isMe) deleteChannels([channel.url]);else updateChannels([channel], false);
75
- },
76
-
77
- onUserBanned(channel, user) {
78
- const isMe = user.userId === userId;
79
- if (isMe) deleteChannels([channel.url]);else updateChannels([channel], false);
80
- }
81
-
82
- }); // ---------- internal hooks ends ---------- //
83
- // ---------- returns methods ---------- //
84
-
85
- const refresh = useCallback(async () => {
86
- setRefreshing(true);
87
- await init(userId);
88
- setRefreshing(false);
89
- }, [init, userId]);
90
- const update = useCallback(channel => {
91
- if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);
92
- setGroupChannelMap(prev => ({ ...prev,
93
- [channel.url]: channel
94
- }));
95
- }, [sdk]);
96
- const next = useCallback(async () => {
97
- var _queryRef$current2;
98
-
99
- if ((_queryRef$current2 = queryRef.current) !== null && _queryRef$current2 !== void 0 && _queryRef$current2.hasNext) {
100
- const channels = await queryRef.current.next();
101
- setGroupChannelMap(prev => ({ ...prev,
102
- ...arrayToMap(channels, 'url')
103
- }));
104
- if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
105
- }
106
- }, [sdk]); // ---------- returns methods ends ---------- //
107
-
108
- return {
109
- loading,
110
- groupChannels,
111
- update,
112
- refresh,
113
- refreshing,
114
- next
115
- };
116
- };
117
- //# sourceMappingURL=useGroupChannelListWithQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useMemo","useRef","useState","arrayToMap","useAsyncEffect","useAppFeatures","useChannelHandler","HOOK_NAME","createGroupChannelListQuery","sdk","queryCreator","passedQuery","defaultQuery","GroupChannel","createMyGroupChannelListQuery","limit","useGroupChannelListWithQuery","userId","options","deliveryReceiptEnabled","queryRef","loading","setLoading","refreshing","setRefreshing","groupChannelMap","setGroupChannelMap","groupChannels","channels","Object","values","sortComparator","sort","updateChannels","clearPrev","filter","c","isGroupChannel","prev","forEach","channel","markAsDelivered","url","deleteChannels","channelUrls","draft","init","uid","current","hasNext","next","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelMemberCountChanged","onChannelDeleted","onUserJoined","onUserLeft","user","isMe","onUserBanned","refresh","update"],"sources":["useGroupChannelListWithQuery.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport type { SendbirdChannel, SendbirdChatSDK, SendbirdGroupChannel } from '@sendbird/uikit-utils';\nimport { arrayToMap, useAsyncEffect } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../common/useAppFeatures';\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../types';\n\ntype GroupChannelMap = Record<string, SendbirdGroupChannel>;\n\nconst HOOK_NAME = 'useGroupChannelListWithQuery';\nconst createGroupChannelListQuery = (\n sdk: SendbirdChatSDK,\n queryCreator: UseGroupChannelListOptions['queryCreator'],\n) => {\n const passedQuery = queryCreator?.();\n if (passedQuery) return passedQuery;\n\n const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();\n defaultQuery.limit = 20;\n return defaultQuery;\n};\n\nexport const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n const queryRef = useRef<Sendbird.GroupChannelListQuery>();\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [groupChannelMap, setGroupChannelMap] = useState<GroupChannelMap>({});\n const groupChannels = useMemo(() => {\n const channels = Object.values(groupChannelMap);\n if (options?.sortComparator) return channels.sort(options?.sortComparator);\n return channels;\n }, [groupChannelMap, options?.sortComparator]);\n\n // ---------- internal methods ---------- //\n const updateChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {\n const groupChannels = channels.filter((c): c is SendbirdGroupChannel => c.isGroupChannel());\n if (clearPrev) setGroupChannelMap(arrayToMap(groupChannels, 'url'));\n else setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(groupChannels, 'url') }));\n\n if (deliveryReceiptEnabled) groupChannels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n const deleteChannels = (channelUrls: string[]) => {\n setGroupChannelMap(({ ...draft }) => {\n channelUrls.forEach((url) => delete draft[url]);\n return draft;\n });\n };\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createGroupChannelListQuery(sdk, options?.queryCreator);\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n updateChannels(channels, true);\n }\n }\n },\n [sdk, options?.queryCreator],\n );\n // ---------- internal methods ends ---------- //\n\n // ---------- internal hooks ---------- //\n useAsyncEffect(async () => {\n setLoading(true);\n await init(userId);\n setLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, HOOK_NAME, {\n onChannelChanged: (channel) => updateChannels([channel], false),\n onChannelFrozen: (channel) => updateChannels([channel], false),\n onChannelUnfrozen: (channel) => updateChannels([channel], false),\n onChannelMemberCountChanged: (channels) => updateChannels(channels, false),\n onChannelDeleted: (url) => deleteChannels([url]),\n onUserJoined: (channel) => updateChannels([channel], false),\n onUserLeft: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel], false);\n },\n onUserBanned(channel, user) {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel], false);\n },\n });\n // ---------- internal hooks ends ---------- //\n\n // ---------- returns methods ---------- //\n const refresh = useCallback(async () => {\n setRefreshing(true);\n await init(userId);\n setRefreshing(false);\n }, [init, userId]);\n\n const update = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);\n setGroupChannelMap((prev) => ({ ...prev, [channel.url]: channel }));\n },\n [sdk],\n );\n\n const next = useCallback(async () => {\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(channels, 'url') }));\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n }, [sdk]);\n // ---------- returns methods ends ---------- //\n\n return { loading, groupChannels, update, refresh, refreshing, next };\n};\n"],"mappings":"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"}
@@ -1,139 +0,0 @@
1
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
-
3
- import type {
4
- SendbirdChannel,
5
- SendbirdChatSDK,
6
- SendbirdGroupChannel,
7
- SendbirdGroupChannelCollection,
8
- } from '@sendbird/uikit-utils';
9
- import { arrayToMap, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';
10
-
11
- import { useAppFeatures } from '../common/useAppFeatures';
12
- import { useChannelHandler } from '../handler/useChannelHandler';
13
- import type { UseGroupChannelList, UseGroupChannelListOptions } from '../types';
14
-
15
- type GroupChannelMap = Record<string, SendbirdGroupChannel>;
16
-
17
- const HOOK_NAME = 'useGroupChannelListWithCollection';
18
- const createGroupChannelListCollection = (
19
- sdk: SendbirdChatSDK,
20
- collectionCreator: UseGroupChannelListOptions['collectionCreator'],
21
- ) => {
22
- const passedCollection = collectionCreator?.();
23
- if (passedCollection) return passedCollection;
24
-
25
- const defaultCollection = sdk.GroupChannel.createGroupChannelCollection();
26
- const filter = new sdk.GroupChannelFilter();
27
- return defaultCollection.setLimit(20).setFilter(filter).build();
28
- };
29
-
30
- export const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, userId, options) => {
31
- const id = useUniqId(HOOK_NAME);
32
- const { deliveryReceiptEnabled } = useAppFeatures(sdk);
33
-
34
- const collectionRef = useRef<SendbirdGroupChannelCollection>();
35
- const [loading, setLoading] = useState(false);
36
- const [refreshing, setRefreshing] = useState(false);
37
-
38
- const [groupChannelMap, setGroupChannelMap] = useState<GroupChannelMap>({});
39
- const groupChannels = useMemo(() => {
40
- const channels = Object.values(groupChannelMap);
41
- if (options?.sortComparator) return channels.sort(options?.sortComparator);
42
- return channels;
43
- }, [groupChannelMap, options?.sortComparator]);
44
-
45
- // ---------- internal methods ---------- //
46
- const updateChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {
47
- const groupChannels = channels.filter((c): c is SendbirdGroupChannel => c.isGroupChannel());
48
- if (clearPrev) setGroupChannelMap(arrayToMap(groupChannels, 'url'));
49
- else setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(groupChannels, 'url') }));
50
- if (deliveryReceiptEnabled) groupChannels.forEach((channel) => sdk.markAsDelivered(channel.url));
51
- };
52
- const deleteChannels = (channelUrls: string[]) => {
53
- setGroupChannelMap(({ ...draft }) => {
54
- channelUrls.forEach((url) => delete draft[url]);
55
- return draft;
56
- });
57
- };
58
- const init = useCallback(
59
- async (uid?: string) => {
60
- if (collectionRef.current) collectionRef.current?.dispose();
61
-
62
- if (uid) {
63
- collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);
64
- if (collectionRef.current?.hasMore) {
65
- updateChannels(await collectionRef.current?.loadMore(), true);
66
- }
67
-
68
- collectionRef.current?.setGroupChannelCollectionHandler({
69
- onChannelsAdded(_, channels) {
70
- updateChannels(channels, false);
71
- },
72
- onChannelsUpdated(_, channels) {
73
- updateChannels(channels, false);
74
- },
75
- onChannelsDeleted(_, channelUrls) {
76
- deleteChannels(channelUrls);
77
- },
78
- });
79
- }
80
- },
81
- [sdk, options?.collectionCreator],
82
- );
83
- // ---------- internal methods ends ---------- //
84
-
85
- // ---------- internal hooks ---------- //
86
- useEffect(() => {
87
- return () => {
88
- if (collectionRef.current) collectionRef.current?.dispose();
89
- };
90
- }, []);
91
-
92
- useAsyncEffect(async () => {
93
- setLoading(true);
94
- await init(userId);
95
- setLoading(false);
96
- }, [init, userId]);
97
-
98
- useChannelHandler(sdk, `${HOOK_NAME}_${id}`, {
99
- onUserBanned: (channel, user) => {
100
- const isMe = user.userId === userId;
101
- if (isMe) deleteChannels([channel.url]);
102
- else updateChannels([channel], false);
103
- },
104
- });
105
- // ---------- internal hooks ends ---------- //
106
-
107
- // ---------- returns methods ---------- //
108
- const refresh = useCallback(async () => {
109
- setRefreshing(true);
110
- await init(userId);
111
- setRefreshing(false);
112
- }, [init, userId]);
113
-
114
- const update = useCallback(
115
- (channel: SendbirdGroupChannel) => {
116
- if (deliveryReceiptEnabled) sdk.markAsDelivered(channel.url);
117
- setGroupChannelMap((prev) => ({ ...prev, [channel.url]: channel }));
118
- },
119
- [sdk],
120
- );
121
-
122
- const next = useCallback(async () => {
123
- if (collectionRef.current?.hasMore) {
124
- const channels = await collectionRef.current?.loadMore();
125
- setGroupChannelMap((prev) => ({ ...prev, ...arrayToMap(channels, 'url') }));
126
- if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));
127
- }
128
- }, [sdk]);
129
- // ---------- returns methods ends ---------- //
130
-
131
- return {
132
- loading,
133
- groupChannels,
134
- refresh,
135
- refreshing,
136
- next,
137
- update,
138
- };
139
- };