@sendbird/uikit-chat-hooks 2.0.1 → 2.0.3
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.
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +14 -6
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +11 -7
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +10 -14
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +1 -12
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +15 -7
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +11 -7
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +12 -15
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -12
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/package.json +3 -3
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +20 -8
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +10 -7
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +11 -19
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +1 -10
|
@@ -35,7 +35,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
|
|
|
35
35
|
|
|
36
36
|
const updateChannelsAndMarkAsDelivered = channels => {
|
|
37
37
|
updateChannels(channels);
|
|
38
|
-
if (deliveryReceiptEnabled)
|
|
38
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
const init = useFreshCallback(async uid => {
|
|
@@ -48,7 +48,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
|
|
|
48
48
|
if ((_queryRef$current2 = queryRef.current) !== null && _queryRef$current2 !== void 0 && _queryRef$current2.hasNext) {
|
|
49
49
|
const channels = await queryRef.current.next();
|
|
50
50
|
setChannels(channels, true);
|
|
51
|
-
if (deliveryReceiptEnabled)
|
|
51
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
});
|
|
@@ -58,20 +58,24 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
|
|
|
58
58
|
updateLoading(false);
|
|
59
59
|
}, [init, userId]);
|
|
60
60
|
useChannelHandler(sdk, HOOK_NAME, {
|
|
61
|
-
onChannelChanged: channel =>
|
|
61
|
+
onChannelChanged: channel => updateChannels([channel]),
|
|
62
62
|
onChannelFrozen: channel => updateChannels([channel]),
|
|
63
63
|
onChannelUnfrozen: channel => updateChannels([channel]),
|
|
64
64
|
onChannelMemberCountChanged: channels => updateChannels(channels),
|
|
65
65
|
onChannelDeleted: url => deleteChannels([url]),
|
|
66
|
-
onUserJoined: channel =>
|
|
66
|
+
onUserJoined: channel => updateChannels([channel]),
|
|
67
67
|
onUserLeft: (channel, user) => {
|
|
68
68
|
const isMe = user.userId === userId;
|
|
69
|
-
if (isMe) deleteChannels([channel.url]);else
|
|
69
|
+
if (isMe) deleteChannels([channel.url]);else updateChannels([channel]);
|
|
70
70
|
},
|
|
71
71
|
|
|
72
72
|
onUserBanned(channel, user) {
|
|
73
73
|
const isMe = user.userId === userId;
|
|
74
|
-
if (isMe) deleteChannels([channel.url]);else
|
|
74
|
+
if (isMe) deleteChannels([channel.url]);else updateChannels([channel]);
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
onMessageReceived(channel) {
|
|
78
|
+
updateChannelsAndMarkAsDelivered([channel]);
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
});
|
|
@@ -86,7 +90,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
|
|
|
86
90
|
if ((_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasNext) {
|
|
87
91
|
const channels = await queryRef.current.next();
|
|
88
92
|
setChannels(channels, false);
|
|
89
|
-
if (deliveryReceiptEnabled)
|
|
93
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
90
94
|
}
|
|
91
95
|
});
|
|
92
96
|
return {
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
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","init","uid","current","hasNext","next","onChannelChanged","channel","onChannelFrozen","onChannelUnfrozen","onChannelMemberCountChanged","onChannelDeleted","url","onUserJoined","onUserLeft","user","isMe","onUserBanned","onMessageReceived","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) confirmAndMarkAsDelivered(channels);\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) confirmAndMarkAsDelivered(channels);\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) => updateChannels([channel]),\n onChannelFrozen: (channel) => updateChannels([channel]),\n onChannelUnfrozen: (channel) => updateChannels([channel]),\n onChannelMemberCountChanged: (channels) => updateChannels(channels),\n onChannelDeleted: (url) => deleteChannels([url]),\n onUserJoined: (channel) => updateChannels([channel]),\n onUserLeft: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel]);\n },\n onUserBanned(channel, user) {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannels([channel]);\n },\n onMessageReceived(channel) {\n 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) confirmAndMarkAsDelivered(channels);\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,EAA4BpB,yBAAyB,CAACgC,QAAD,CAAzB;EAC7B,CAHD;;EAKA,MAAMC,IAAI,GAAG/B,gBAAgB,CAAC,MAAOgC,GAAP,IAAwB;IACpD,IAAIA,GAAJ,EAAS;MAAA;;MACPb,QAAQ,CAACc,OAAT,GAAmB5B,2BAA2B,CAACC,GAAD,EAAMW,OAAN,aAAMA,OAAN,uBAAMA,OAAO,CAAEV,YAAf,CAA9C;MACAqB,WAAW,sBAACT,QAAQ,CAACc,OAAV,sDAAC,kBAAkBpB,KAAnB,CAAX;;MAEA,0BAAIM,QAAQ,CAACc,OAAb,+CAAI,mBAAkBC,OAAtB,EAA+B;QAC7B,MAAMJ,QAAQ,GAAG,MAAMX,QAAQ,CAACc,OAAT,CAAiBE,IAAjB,EAAvB;QAEAX,WAAW,CAACM,QAAD,EAAW,IAAX,CAAX;QACA,IAAIZ,sBAAJ,EAA4BpB,yBAAyB,CAACgC,QAAD,CAAzB;MAC7B;IACF;EACF,CAZ4B,CAA7B;EAcA/B,cAAc,CAAC,YAAY;IACzB4B,aAAa,CAAC,IAAD,CAAb;IACA,MAAMI,IAAI,CAACf,MAAD,CAAV;IACAW,aAAa,CAAC,KAAD,CAAb;EACD,CAJa,EAIX,CAACI,IAAD,EAAOf,MAAP,CAJW,CAAd;EAMAd,iBAAiB,CAACI,GAAD,EAAMF,SAAN,EAAiB;IAChCgC,gBAAgB,EAAGC,OAAD,IAAad,cAAc,CAAC,CAACc,OAAD,CAAD,CADb;IAEhCC,eAAe,EAAGD,OAAD,IAAad,cAAc,CAAC,CAACc,OAAD,CAAD,CAFZ;IAGhCE,iBAAiB,EAAGF,OAAD,IAAad,cAAc,CAAC,CAACc,OAAD,CAAD,CAHd;IAIhCG,2BAA2B,EAAGV,QAAD,IAAcP,cAAc,CAACO,QAAD,CAJzB;IAKhCW,gBAAgB,EAAGC,GAAD,IAASjB,cAAc,CAAC,CAACiB,GAAD,CAAD,CALT;IAMhCC,YAAY,EAAGN,OAAD,IAAad,cAAc,CAAC,CAACc,OAAD,CAAD,CANT;IAOhCO,UAAU,EAAE,CAACP,OAAD,EAAUQ,IAAV,KAAmB;MAC7B,MAAMC,IAAI,GAAGD,IAAI,CAAC7B,MAAL,KAAgBA,MAA7B;MACA,IAAI8B,IAAJ,EAAUrB,cAAc,CAAC,CAACY,OAAO,CAACK,GAAT,CAAD,CAAd,CAAV,KACKnB,cAAc,CAAC,CAACc,OAAD,CAAD,CAAd;IACN,CAX+B;;IAYhCU,YAAY,CAACV,OAAD,EAAUQ,IAAV,EAAgB;MAC1B,MAAMC,IAAI,GAAGD,IAAI,CAAC7B,MAAL,KAAgBA,MAA7B;MACA,IAAI8B,IAAJ,EAAUrB,cAAc,CAAC,CAACY,OAAO,CAACK,GAAT,CAAD,CAAd,CAAV,KACKnB,cAAc,CAAC,CAACc,OAAD,CAAD,CAAd;IACN,CAhB+B;;IAiBhCW,iBAAiB,CAACX,OAAD,EAAU;MACzBR,gCAAgC,CAAC,CAACQ,OAAD,CAAD,CAAhC;IACD;;EAnB+B,CAAjB,CAAjB;EAsBA,MAAMY,OAAO,GAAGjD,gBAAgB,CAAC,YAAY;IAC3C0B,gBAAgB,CAAC,IAAD,CAAhB;IACA,MAAMK,IAAI,CAACf,MAAD,CAAV;IACAU,gBAAgB,CAAC,KAAD,CAAhB;EACD,CAJ+B,CAAhC;EAMA,MAAMS,IAAI,GAAGnC,gBAAgB,CAAC,YAAY;IAAA;;IACxC,0BAAImB,QAAQ,CAACc,OAAb,+CAAI,mBAAkBC,OAAtB,EAA+B;MAC7B,MAAMJ,QAAQ,GAAG,MAAMX,QAAQ,CAACc,OAAT,CAAiBE,IAAjB,EAAvB;MACAX,WAAW,CAACM,QAAD,EAAW,KAAX,CAAX;MACA,IAAIZ,sBAAJ,EAA4BpB,yBAAyB,CAACgC,QAAD,CAAzB;IAC7B;EACF,CAN4B,CAA7B;EAQA,OAAO;IACLV,OADK;IAELC,aAFK;IAGL4B,OAHK;IAIL3B,UAJK;IAKLa;EALK,CAAP;AAOD,CApFM"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
-
import { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
|
-
import { Logger,
|
|
4
|
-
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
2
|
+
import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate } from '@sendbird/uikit-utils';
|
|
5
4
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
6
5
|
import { useActiveGroupChannel } from '../useActiveGroupChannel';
|
|
7
6
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
@@ -17,9 +16,6 @@ const createMessageCollection = (channel, creator) => {
|
|
|
17
16
|
|
|
18
17
|
const HOOK_NAME = 'useGroupChannelMessagesWithCollection';
|
|
19
18
|
export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) => {
|
|
20
|
-
const {
|
|
21
|
-
deliveryReceiptEnabled
|
|
22
|
-
} = useAppFeatures(sdk);
|
|
23
19
|
const collectionRef = useRef(); // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af
|
|
24
20
|
|
|
25
21
|
const {
|
|
@@ -43,13 +39,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
43
39
|
|
|
44
40
|
const channelMarkAs = async () => {
|
|
45
41
|
try {
|
|
46
|
-
|
|
47
|
-
} catch (e) {
|
|
48
|
-
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
await confirmAndMarkAsRead(sdk, [activeChannel]);
|
|
42
|
+
await confirmAndMarkAsRead([activeChannel]);
|
|
53
43
|
} catch (e) {
|
|
54
44
|
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
55
45
|
}
|
|
@@ -73,8 +63,15 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
73
63
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
74
64
|
channelMarkAs();
|
|
75
65
|
(_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.setMessageCollectionHandler({
|
|
76
|
-
onMessagesAdded: (_,
|
|
77
|
-
|
|
66
|
+
onMessagesAdded: (_, __, messages) => {
|
|
67
|
+
switch (_.source) {
|
|
68
|
+
case MessageEventSource.EVENT_MESSAGE_RECEIVED:
|
|
69
|
+
case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
70
|
+
case MessageEventSource.SYNC_MESSAGE_FILL:
|
|
71
|
+
channelMarkAs();
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
|
|
78
75
|
updateNextMessages(messages, false, sdk.currentUser.userId);
|
|
79
76
|
updateChannel(channel);
|
|
80
77
|
},
|
package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","HOOK_NAME","useGroupChannelMessagesWithCollection","sdk","userId","options","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","_","__","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","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, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type {\n SendbirdChannel,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate } from '@sendbird/uikit-utils';\n\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 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 await confirmAndMarkAsRead([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: (_, __, messages) => {\n switch (_.source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n channelMarkAs();\n break;\n }\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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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { useCallback, useRef } from 'react';
|
|
2
|
-
import { Logger,
|
|
3
|
-
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
2
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useAsyncEffect, useForceUpdate } from '@sendbird/uikit-utils';
|
|
4
3
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
5
4
|
import { useActiveGroupChannel } from '../useActiveGroupChannel';
|
|
6
5
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
@@ -15,9 +14,6 @@ const createMessageQuery = (channel, creator) => {
|
|
|
15
14
|
|
|
16
15
|
const HOOK_NAME = 'useGroupChannelMessagesWithQuery';
|
|
17
16
|
export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
|
|
18
|
-
const {
|
|
19
|
-
deliveryReceiptEnabled
|
|
20
|
-
} = useAppFeatures(sdk);
|
|
21
17
|
const queryRef = useRef(); // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel
|
|
22
18
|
|
|
23
19
|
const {
|
|
@@ -41,13 +37,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
41
37
|
|
|
42
38
|
const channelMarkAs = async () => {
|
|
43
39
|
try {
|
|
44
|
-
|
|
45
|
-
} catch (e) {
|
|
46
|
-
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
await confirmAndMarkAsRead(sdk, [activeChannel]);
|
|
40
|
+
await confirmAndMarkAsRead([channel]);
|
|
51
41
|
} catch (e) {
|
|
52
42
|
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
53
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useRef","Logger","confirmAndMarkAsDelivered","confirmAndMarkAsRead","isDifferentChannel","useAsyncEffect","useForceUpdate","useAppFeatures","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","deliveryReceiptEnabled","queryRef","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","e","warn","init","uid","current","queryCreator","catch","hasNext","list","load","currentUser","url","channelUpdater","isGroupChannel","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","refresh","prev","next","length","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","err","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId"],"sources":["useGroupChannelMessagesWithQuery.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport type { SendbirdBaseChannel, SendbirdGroupChannel } from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsDelivered,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n} from '@sendbird/uikit-utils';\nimport type { SendbirdPreviousMessageListQuery } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageQuery = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['queryCreator'],\n) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithQuery';\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n const forceUpdate = useForceUpdate();\n\n const {\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n updateMessages,\n updateNextMessages,\n deleteNextMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAs = async () => {\n try {\n if (deliveryReceiptEnabled) 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 init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(activeChannel, options?.queryCreator);\n channelMarkAs().catch();\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n },\n [sdk, activeChannel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n setActiveChannel(channel);\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, HOOK_NAME, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n channelMarkAs();\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const channel = channels.find((c) => !isDifferentChannel(c, activeChannel));\n if (channel) channelUpdater(channel);\n },\n onChannelDeleted(channelUrl: string) {\n if (activeChannel.url === channelUrl) options?.onChannelDeleted?.();\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserLeft: channelUpdater,\n // onUserEntered: channelUpdater,\n // onUserExited: channelUpdater,\n onUserJoined: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (queryRef.current && queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n activeChannel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err) => {\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 updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err) => {\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) updateNextMessages([message], false, sdk.currentUser.userId);\n },\n [activeChannel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await activeChannel.deleteMessage(message);\n if (message.isFileMessage()) await activeChannel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\n },\n [activeChannel],\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n activeChannel,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useCallback","useRef","Logger","confirmAndMarkAsRead","isDifferentChannel","useAsyncEffect","useForceUpdate","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","queryRef","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","e","warn","init","uid","current","queryCreator","catch","hasNext","list","load","currentUser","url","channelUpdater","isGroupChannel","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","refresh","prev","next","length","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","err","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId"],"sources":["useGroupChannelMessagesWithQuery.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport type { SendbirdBaseChannel, SendbirdGroupChannel } from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n} from '@sendbird/uikit-utils';\nimport type { SendbirdPreviousMessageListQuery } from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageQuery = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['queryCreator'],\n) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithQuery';\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n const forceUpdate = useForceUpdate();\n\n const {\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n updateMessages,\n updateNextMessages,\n deleteNextMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAs = async () => {\n try {\n await confirmAndMarkAsRead([channel]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(activeChannel, options?.queryCreator);\n channelMarkAs().catch();\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n },\n [sdk, activeChannel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n setActiveChannel(channel);\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, HOOK_NAME, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n channelMarkAs();\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const channel = channels.find((c) => !isDifferentChannel(c, activeChannel));\n if (channel) channelUpdater(channel);\n },\n onChannelDeleted(channelUrl: string) {\n if (activeChannel.url === channelUrl) options?.onChannelDeleted?.();\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserLeft: channelUpdater,\n // onUserEntered: channelUpdater,\n // onUserExited: channelUpdater,\n onUserJoined: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (queryRef.current && queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n activeChannel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err) => {\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 updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err) => {\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) updateNextMessages([message], false, sdk.currentUser.userId);\n },\n [activeChannel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await activeChannel.deleteMessage(message);\n if (message.isFileMessage()) await activeChannel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\n },\n [activeChannel],\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n activeChannel,\n };\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendbird/uikit-chat-hooks",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "React hooks that built with SendbirdChat SDK",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@sendbird/uikit-utils": "2.0.
|
|
41
|
+
"@sendbird/uikit-utils": "2.0.3"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/react": "*",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"readmeFile": "./README.md",
|
|
70
70
|
"displayName": "@sendbird/uikit-chat-hooks"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "e3a34ae962741ffd2b647a466cf97e38f5006379"
|
|
73
73
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
import { GroupChannelFilter, GroupChannelListOrder } from '@sendbird/chat/groupChannel';
|
|
4
|
-
import type { SendbirdChatSDK, SendbirdGroupChannelCollection } from '@sendbird/uikit-utils';
|
|
3
|
+
import { GroupChannelEventSource, GroupChannelFilter, GroupChannelListOrder } from '@sendbird/chat/groupChannel';
|
|
4
|
+
import type { SendbirdBaseChannel, SendbirdChatSDK, SendbirdGroupChannelCollection } from '@sendbird/uikit-utils';
|
|
5
5
|
import { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback, useUniqId } from '@sendbird/uikit-utils';
|
|
6
6
|
|
|
7
7
|
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
@@ -37,11 +37,23 @@ export const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, user
|
|
|
37
37
|
const { loading, groupChannels, refreshing, setChannels, deleteChannels, updateRefreshing, updateLoading } =
|
|
38
38
|
useGroupChannelListReducer();
|
|
39
39
|
|
|
40
|
-
const updateChannelsAndMarkAsDelivered = (
|
|
40
|
+
const updateChannelsAndMarkAsDelivered = (
|
|
41
|
+
markAsDelivered: boolean,
|
|
42
|
+
source?: GroupChannelEventSource,
|
|
43
|
+
updatedChannels?: SendbirdBaseChannel[],
|
|
44
|
+
) => {
|
|
41
45
|
const channels = collectionRef.current?.channels ?? [];
|
|
42
46
|
setChannels(channels, true);
|
|
43
47
|
if (markAsDelivered && deliveryReceiptEnabled) {
|
|
44
|
-
|
|
48
|
+
switch (source) {
|
|
49
|
+
case GroupChannelEventSource.EVENT_MESSAGE_RECEIVED:
|
|
50
|
+
case GroupChannelEventSource.EVENT_MESSAGE_SENT:
|
|
51
|
+
case GroupChannelEventSource.SYNC_CHANNEL_BACKGROUND:
|
|
52
|
+
case GroupChannelEventSource.SYNC_CHANNEL_CHANGELOGS:
|
|
53
|
+
case undefined:
|
|
54
|
+
confirmAndMarkAsDelivered(updatedChannels ?? channels);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
45
57
|
}
|
|
46
58
|
};
|
|
47
59
|
|
|
@@ -52,11 +64,11 @@ export const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, user
|
|
|
52
64
|
collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);
|
|
53
65
|
|
|
54
66
|
collectionRef.current?.setGroupChannelCollectionHandler({
|
|
55
|
-
onChannelsAdded: () => {
|
|
56
|
-
updateChannelsAndMarkAsDelivered(true);
|
|
67
|
+
onChannelsAdded: (context, channels) => {
|
|
68
|
+
updateChannelsAndMarkAsDelivered(true, context.source, channels);
|
|
57
69
|
},
|
|
58
|
-
onChannelsUpdated: () => {
|
|
59
|
-
updateChannelsAndMarkAsDelivered(true);
|
|
70
|
+
onChannelsUpdated: (context, channels) => {
|
|
71
|
+
updateChannelsAndMarkAsDelivered(true, context.source, channels);
|
|
60
72
|
},
|
|
61
73
|
onChannelsDeleted: () => {
|
|
62
74
|
updateChannelsAndMarkAsDelivered(false);
|
|
@@ -43,7 +43,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
43
43
|
|
|
44
44
|
const updateChannelsAndMarkAsDelivered = (channels: SendbirdChannel[]) => {
|
|
45
45
|
updateChannels(channels);
|
|
46
|
-
if (deliveryReceiptEnabled)
|
|
46
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
const init = useFreshCallback(async (uid?: string) => {
|
|
@@ -55,7 +55,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
55
55
|
const channels = await queryRef.current.next();
|
|
56
56
|
|
|
57
57
|
setChannels(channels, true);
|
|
58
|
-
if (deliveryReceiptEnabled)
|
|
58
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
});
|
|
@@ -67,21 +67,24 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
67
67
|
}, [init, userId]);
|
|
68
68
|
|
|
69
69
|
useChannelHandler(sdk, HOOK_NAME, {
|
|
70
|
-
onChannelChanged: (channel) =>
|
|
70
|
+
onChannelChanged: (channel) => updateChannels([channel]),
|
|
71
71
|
onChannelFrozen: (channel) => updateChannels([channel]),
|
|
72
72
|
onChannelUnfrozen: (channel) => updateChannels([channel]),
|
|
73
73
|
onChannelMemberCountChanged: (channels) => updateChannels(channels),
|
|
74
74
|
onChannelDeleted: (url) => deleteChannels([url]),
|
|
75
|
-
onUserJoined: (channel) =>
|
|
75
|
+
onUserJoined: (channel) => updateChannels([channel]),
|
|
76
76
|
onUserLeft: (channel, user) => {
|
|
77
77
|
const isMe = user.userId === userId;
|
|
78
78
|
if (isMe) deleteChannels([channel.url]);
|
|
79
|
-
else
|
|
79
|
+
else updateChannels([channel]);
|
|
80
80
|
},
|
|
81
81
|
onUserBanned(channel, user) {
|
|
82
82
|
const isMe = user.userId === userId;
|
|
83
83
|
if (isMe) deleteChannels([channel.url]);
|
|
84
|
-
else
|
|
84
|
+
else updateChannels([channel]);
|
|
85
|
+
},
|
|
86
|
+
onMessageReceived(channel) {
|
|
87
|
+
updateChannelsAndMarkAsDelivered([channel]);
|
|
85
88
|
},
|
|
86
89
|
});
|
|
87
90
|
|
|
@@ -95,7 +98,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
95
98
|
if (queryRef.current?.hasNext) {
|
|
96
99
|
const channels = await queryRef.current.next();
|
|
97
100
|
setChannels(channels, false);
|
|
98
|
-
if (deliveryReceiptEnabled)
|
|
101
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
99
102
|
}
|
|
100
103
|
});
|
|
101
104
|
|
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
import { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
|
+
import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
4
4
|
import type {
|
|
5
5
|
SendbirdChannel,
|
|
6
6
|
SendbirdFileMessage,
|
|
7
7
|
SendbirdGroupChannel,
|
|
8
8
|
SendbirdMessageCollection,
|
|
9
9
|
} from '@sendbird/uikit-utils';
|
|
10
|
-
import {
|
|
11
|
-
Logger,
|
|
12
|
-
confirmAndMarkAsDelivered,
|
|
13
|
-
confirmAndMarkAsRead,
|
|
14
|
-
isDifferentChannel,
|
|
15
|
-
useForceUpdate,
|
|
16
|
-
} from '@sendbird/uikit-utils';
|
|
10
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate } from '@sendbird/uikit-utils';
|
|
17
11
|
|
|
18
|
-
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
19
12
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
20
13
|
import type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';
|
|
21
14
|
import { useActiveGroupChannel } from '../useActiveGroupChannel';
|
|
@@ -33,8 +26,6 @@ const createMessageCollection = (
|
|
|
33
26
|
const HOOK_NAME = 'useGroupChannelMessagesWithCollection';
|
|
34
27
|
|
|
35
28
|
export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {
|
|
36
|
-
const { deliveryReceiptEnabled } = useAppFeatures(sdk);
|
|
37
|
-
|
|
38
29
|
const collectionRef = useRef<SendbirdMessageCollection>();
|
|
39
30
|
|
|
40
31
|
// NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af
|
|
@@ -57,12 +48,7 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
57
48
|
|
|
58
49
|
const channelMarkAs = async () => {
|
|
59
50
|
try {
|
|
60
|
-
|
|
61
|
-
} catch (e) {
|
|
62
|
-
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
|
|
63
|
-
}
|
|
64
|
-
try {
|
|
65
|
-
await confirmAndMarkAsRead(sdk, [activeChannel]);
|
|
51
|
+
await confirmAndMarkAsRead([activeChannel]);
|
|
66
52
|
} catch (e) {
|
|
67
53
|
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
68
54
|
}
|
|
@@ -84,8 +70,14 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
84
70
|
channelMarkAs();
|
|
85
71
|
|
|
86
72
|
collectionRef.current?.setMessageCollectionHandler({
|
|
87
|
-
onMessagesAdded: (_,
|
|
88
|
-
|
|
73
|
+
onMessagesAdded: (_, __, messages) => {
|
|
74
|
+
switch (_.source) {
|
|
75
|
+
case MessageEventSource.EVENT_MESSAGE_RECEIVED:
|
|
76
|
+
case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
77
|
+
case MessageEventSource.SYNC_MESSAGE_FILL:
|
|
78
|
+
channelMarkAs();
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
89
81
|
updateNextMessages(messages, false, sdk.currentUser.userId);
|
|
90
82
|
updateChannel(channel);
|
|
91
83
|
},
|