@sendbird/uikit-chat-hooks 2.5.0 → 3.0.0-rc.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.
- package/README.md +4 -0
- package/lib/commonjs/channel/useGroupChannel.js +21 -13
- package/lib/commonjs/channel/useGroupChannel.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/reducer.js +7 -6
- package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +2 -2
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +3 -3
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/index.js +4 -1
- package/lib/commonjs/channel/useGroupChannelMessages/index.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -4
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +8 -8
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannel.js +21 -13
- package/lib/commonjs/channel/useOpenChannel.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelList/reducer.js +1 -1
- package/lib/commonjs/channel/useOpenChannelList/reducer.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +1 -3
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/useGroupChannel.js +22 -14
- package/lib/module/channel/useGroupChannel.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/reducer.js +8 -7
- package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +2 -2
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +3 -3
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/index.js +4 -1
- package/lib/module/channel/useGroupChannelMessages/index.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -4
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +8 -8
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/channel/useOpenChannel.js +22 -14
- package/lib/module/channel/useOpenChannel.js.map +1 -1
- package/lib/module/channel/useOpenChannelList/reducer.js +2 -2
- package/lib/module/channel/useOpenChannelList/reducer.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +1 -3
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/channel/useGroupChannel.d.ts +2 -2
- package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
- package/lib/typescript/src/channel/useOpenChannel.d.ts +2 -2
- package/lib/typescript/src/types.d.ts +2 -8
- package/package.json +7 -7
- package/src/channel/useGroupChannel.ts +13 -10
- package/src/channel/useGroupChannelList/reducer.ts +9 -8
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +2 -2
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +3 -3
- package/src/channel/useGroupChannelMessages/index.ts +8 -1
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +5 -4
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +9 -13
- package/src/channel/useOpenChannel.ts +13 -10
- package/src/channel/useOpenChannelList/reducer.ts +2 -2
- package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +0 -3
- package/src/types.ts +2 -10
|
@@ -296,9 +296,7 @@ export const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) =
|
|
|
296
296
|
updateFileMessage,
|
|
297
297
|
resendMessage,
|
|
298
298
|
deleteMessage,
|
|
299
|
-
resetNewMessages
|
|
300
|
-
nextMessages: newMessages,
|
|
301
|
-
newMessagesFromMembers: newMessages
|
|
299
|
+
resetNewMessages
|
|
302
300
|
};
|
|
303
301
|
};
|
|
304
302
|
//# sourceMappingURL=useOpenChannelMessagesWithQuery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useRef","ASYNC_NOOP","NOOP","isDifferentChannel","isMyMessage","useAsyncEffect","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useConnectionHandler","useChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","useOpenChannelMessagesWithQuery","sdk","userId","options","queryRef","forceUpdate","handlerId","loading","refreshing","messages","newMessages","updateMessages","updateNewMessages","deleteNewMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","init","uid","_queryRef$current","current","queryCreator","hasNext","_queryRef$current2","list","load","currentUser","channelUpdater","isOpenChannel","onReconnectSucceeded","_queryRef$current3","_queryRef$current4","_queryRef$current5","_queryRef$current6","_queryRef$current7","_queryRef$current8","_queryRef$current9","_queryRef$current10","_queryRef$current11","_queryRef$current12","_queryRef$current13","_queryRef$current14","_queryRef$current15","_queryRef$current16","_queryRef$current17","_queryRef$current18","lastMessage","messageContext","updatedMessages","addedMessages","deletedMessageIds","changeLogsContext","hasMore","token","messageQueryContext","timestamp","createdAt","changelogsParams","replyType","includeMetaArray","includeReactions","includeThreadInfo","includeParentMessageInfo","changeLogsByTS","getMessageChangeLogsSinceTimestamp","push","changeLogsByToken","getMessageChangeLogsSinceToken","messageQueryParams","prevResultSize","nextResultSize","customTypesFilter","messageTypeFilter","senderUserIdsFilter","showSubchannelMessagesOnly","queriedMessages","getMessagesByTimestamp","length","unshift","_options$shouldCountN","shouldCountNewMessages","call","onMessagesReceived","onMessageReceived","eventChannel","message","_options$shouldCountN2","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelParticipantCountChanged","onChannelDeleted","channelUrl","type","url","_options$onChannelDel","onOperatorUpdated","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","_options$onChannelDel2","enter","error","_options$onError","_options$onChannelDel3","onError","exit","catch","refresh","prev","_queryRef$current19","_queryRef$current20","hasPrev","_queryRef$current21","next","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","err","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId","resetNewMessages","nextMessages","newMessagesFromMembers"],"sources":["useOpenChannelMessagesWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdOpenChannel,\n SendbirdPreviousMessageListQuery,\n} from '@sendbird/uikit-utils';\nimport {\n ASYNC_NOOP,\n NOOP,\n isDifferentChannel,\n isMyMessage,\n useAsyncEffect,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport { useConnectionHandler } from '../../handler/useConnectionHandler';\nimport type { UseOpenChannelMessages, UseOpenChannelMessagesOptions } from '../../types';\nimport { useChannelMessagesReducer } from '../useChannelMessagesReducer';\n\nconst createMessageQuery = (channel: SendbirdOpenChannel, creator?: UseOpenChannelMessagesOptions['queryCreator']) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nexport const useOpenChannelMessagesWithQuery: UseOpenChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n const forceUpdate = useForceUpdate();\n const handlerId = useUniqHandlerId('useOpenChannelMessagesWithQuery');\n\n const {\n loading,\n refreshing,\n messages,\n newMessages,\n updateMessages,\n updateNewMessages,\n deleteNewMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useChannelMessagesReducer(options?.sortComparator);\n\n const init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNewMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isOpenChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useConnectionHandler(sdk, handlerId, {\n async onReconnectSucceeded() {\n const lastMessage = messages[0];\n if (!lastMessage) return;\n\n const messageContext = {\n updatedMessages: [] as SendbirdBaseMessage[],\n addedMessages: [] as SendbirdBaseMessage[],\n deletedMessageIds: [] as number[],\n };\n const changeLogsContext = {\n hasMore: false,\n token: '',\n };\n const messageQueryContext = {\n hasMore: false,\n timestamp: lastMessage.createdAt,\n };\n\n // Updated & Deleted messages\n const changelogsParams = {\n replyType: queryRef.current?.replyType,\n includeMetaArray: queryRef.current?.includeMetaArray,\n includeReactions: queryRef.current?.includeReactions,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n };\n\n const changeLogsByTS = await channel.getMessageChangeLogsSinceTimestamp(lastMessage.createdAt);\n changeLogsContext.token = changeLogsByTS.token;\n changeLogsContext.hasMore = changeLogsByTS.hasMore;\n messageContext.updatedMessages.push(...changeLogsByTS.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByTS.deletedMessageIds);\n\n while (changeLogsContext.hasMore) {\n const changeLogsByToken = await channel.getMessageChangeLogsSinceToken(changeLogsByTS.token, changelogsParams);\n changeLogsContext.token = changeLogsByToken.token;\n changeLogsContext.hasMore = changeLogsByToken.hasMore;\n messageContext.updatedMessages.push(...changeLogsByToken.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByToken.deletedMessageIds);\n }\n\n // Added messages\n const messageQueryParams = {\n prevResultSize: 0,\n nextResultSize: queryRef.current?.limit ?? 100,\n reverse: queryRef.current?.reverse,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeReactions: queryRef.current?.includeReactions,\n includeMetaArray: queryRef.current?.includeMetaArray,\n replyType: queryRef.current?.replyType,\n customTypesFilter: queryRef.current?.customTypesFilter,\n messageTypeFilter: queryRef.current?.messageTypeFilter,\n senderUserIdsFilter: queryRef.current?.senderUserIdsFilter,\n showSubchannelMessagesOnly: queryRef.current?.showSubchannelMessagesOnly,\n };\n\n const queriedMessages = await channel.getMessagesByTimestamp(lastMessage.createdAt, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n\n while (messageQueryContext.hasMore) {\n const queriedMessages = await channel.getMessagesByTimestamp(messageQueryContext.timestamp, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n }\n\n // Update to View\n updateMessages(\n [...messageContext.addedMessages, ...messageContext.updatedMessages],\n false,\n sdk.currentUser.userId,\n );\n deleteMessages(messageContext.deletedMessageIds, []);\n\n if (messageContext.addedMessages.length > 0) {\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages(messageContext.addedMessages, false, sdk.currentUser.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived(messageContext.addedMessages);\n }\n }\n },\n });\n\n useChannelHandler(\n sdk,\n handlerId,\n {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser.userId)) return;\n\n updateMessages([message], false, sdk.currentUser.userId);\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages([message], false, sdk.currentUser.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived([message]);\n }\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser.userId)) return;\n\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNewMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelParticipantCountChanged(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelUpdater(eventChannel);\n },\n onChannelDeleted(channelUrl, type) {\n if (channel.url === channelUrl && type === 'open') {\n options?.onChannelDeleted?.();\n }\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(channel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n },\n 'open',\n );\n\n useAsyncEffect(async () => {\n updateLoading(true);\n\n try {\n await channel.enter();\n await init(userId);\n } catch (error) {\n options?.onError?.(error);\n options?.onChannelDeleted?.();\n } finally {\n updateLoading(false);\n }\n\n return () => {\n channel.exit().catch(NOOP);\n };\n }, [channel.url, userId]);\n\n const refresh: ReturnType<UseOpenChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const prev: ReturnType<UseOpenChannelMessages>['prev'] = useFreshCallback(async () => {\n if (queryRef.current && queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n });\n const hasPrev: ReturnType<UseOpenChannelMessages>['hasPrev'] = useFreshCallback(\n () => queryRef.current?.hasNext ?? false,\n );\n\n const next: ReturnType<UseOpenChannelMessages>['next'] = useFreshCallback(ASYNC_NOOP);\n const hasNext: ReturnType<UseOpenChannelMessages>['hasNext'] = useFreshCallback(() => false);\n\n const sendUserMessage: ReturnType<UseOpenChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const sendFileMessage: ReturnType<UseOpenChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n 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);\n }\n })\n .onFailed((err, sentMessage) => {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const updateUserMessage: ReturnType<UseOpenChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseOpenChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseOpenChannelMessages>['resendMessage'] = useFreshCallback(async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([message], false, sdk.currentUser.userId);\n });\n const deleteMessage: ReturnType<UseOpenChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\n });\n const resetNewMessages: ReturnType<UseOpenChannelMessages>['resetNewMessages'] = useFreshCallback(() => {\n updateNewMessages([], true, sdk.currentUser.userId);\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n newMessages,\n next,\n hasNext,\n prev,\n hasPrev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n resetNewMessages,\n\n nextMessages: newMessages,\n newMessagesFromMembers: newMessages,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useRef","ASYNC_NOOP","NOOP","isDifferentChannel","isMyMessage","useAsyncEffect","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useConnectionHandler","useChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","useOpenChannelMessagesWithQuery","sdk","userId","options","queryRef","forceUpdate","handlerId","loading","refreshing","messages","newMessages","updateMessages","updateNewMessages","deleteNewMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","init","uid","_queryRef$current","current","queryCreator","hasNext","_queryRef$current2","list","load","currentUser","channelUpdater","isOpenChannel","onReconnectSucceeded","_queryRef$current3","_queryRef$current4","_queryRef$current5","_queryRef$current6","_queryRef$current7","_queryRef$current8","_queryRef$current9","_queryRef$current10","_queryRef$current11","_queryRef$current12","_queryRef$current13","_queryRef$current14","_queryRef$current15","_queryRef$current16","_queryRef$current17","_queryRef$current18","lastMessage","messageContext","updatedMessages","addedMessages","deletedMessageIds","changeLogsContext","hasMore","token","messageQueryContext","timestamp","createdAt","changelogsParams","replyType","includeMetaArray","includeReactions","includeThreadInfo","includeParentMessageInfo","changeLogsByTS","getMessageChangeLogsSinceTimestamp","push","changeLogsByToken","getMessageChangeLogsSinceToken","messageQueryParams","prevResultSize","nextResultSize","customTypesFilter","messageTypeFilter","senderUserIdsFilter","showSubchannelMessagesOnly","queriedMessages","getMessagesByTimestamp","length","unshift","_options$shouldCountN","shouldCountNewMessages","call","onMessagesReceived","onMessageReceived","eventChannel","message","_options$shouldCountN2","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelParticipantCountChanged","onChannelDeleted","channelUrl","type","url","_options$onChannelDel","onOperatorUpdated","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","_options$onChannelDel2","enter","error","_options$onError","_options$onChannelDel3","onError","exit","catch","refresh","prev","_queryRef$current19","_queryRef$current20","hasPrev","_queryRef$current21","next","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","err","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId","resetNewMessages"],"sources":["useOpenChannelMessagesWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdOpenChannel,\n SendbirdPreviousMessageListQuery,\n} from '@sendbird/uikit-utils';\nimport {\n ASYNC_NOOP,\n NOOP,\n isDifferentChannel,\n isMyMessage,\n useAsyncEffect,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport { useConnectionHandler } from '../../handler/useConnectionHandler';\nimport type { UseOpenChannelMessages, UseOpenChannelMessagesOptions } from '../../types';\nimport { useChannelMessagesReducer } from '../useChannelMessagesReducer';\n\nconst createMessageQuery = (channel: SendbirdOpenChannel, creator?: UseOpenChannelMessagesOptions['queryCreator']) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nexport const useOpenChannelMessagesWithQuery: UseOpenChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n const forceUpdate = useForceUpdate();\n const handlerId = useUniqHandlerId('useOpenChannelMessagesWithQuery');\n\n const {\n loading,\n refreshing,\n messages,\n newMessages,\n updateMessages,\n updateNewMessages,\n deleteNewMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useChannelMessagesReducer(options?.sortComparator);\n\n const init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNewMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isOpenChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useConnectionHandler(sdk, handlerId, {\n async onReconnectSucceeded() {\n const lastMessage = messages[0];\n if (!lastMessage) return;\n\n const messageContext = {\n updatedMessages: [] as SendbirdBaseMessage[],\n addedMessages: [] as SendbirdBaseMessage[],\n deletedMessageIds: [] as number[],\n };\n const changeLogsContext = {\n hasMore: false,\n token: '',\n };\n const messageQueryContext = {\n hasMore: false,\n timestamp: lastMessage.createdAt,\n };\n\n // Updated & Deleted messages\n const changelogsParams = {\n replyType: queryRef.current?.replyType,\n includeMetaArray: queryRef.current?.includeMetaArray,\n includeReactions: queryRef.current?.includeReactions,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n };\n\n const changeLogsByTS = await channel.getMessageChangeLogsSinceTimestamp(lastMessage.createdAt);\n changeLogsContext.token = changeLogsByTS.token;\n changeLogsContext.hasMore = changeLogsByTS.hasMore;\n messageContext.updatedMessages.push(...changeLogsByTS.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByTS.deletedMessageIds);\n\n while (changeLogsContext.hasMore) {\n const changeLogsByToken = await channel.getMessageChangeLogsSinceToken(changeLogsByTS.token, changelogsParams);\n changeLogsContext.token = changeLogsByToken.token;\n changeLogsContext.hasMore = changeLogsByToken.hasMore;\n messageContext.updatedMessages.push(...changeLogsByToken.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByToken.deletedMessageIds);\n }\n\n // Added messages\n const messageQueryParams = {\n prevResultSize: 0,\n nextResultSize: queryRef.current?.limit ?? 100,\n reverse: queryRef.current?.reverse,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeReactions: queryRef.current?.includeReactions,\n includeMetaArray: queryRef.current?.includeMetaArray,\n replyType: queryRef.current?.replyType,\n customTypesFilter: queryRef.current?.customTypesFilter,\n messageTypeFilter: queryRef.current?.messageTypeFilter,\n senderUserIdsFilter: queryRef.current?.senderUserIdsFilter,\n showSubchannelMessagesOnly: queryRef.current?.showSubchannelMessagesOnly,\n };\n\n const queriedMessages = await channel.getMessagesByTimestamp(lastMessage.createdAt, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n\n while (messageQueryContext.hasMore) {\n const queriedMessages = await channel.getMessagesByTimestamp(messageQueryContext.timestamp, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n }\n\n // Update to View\n updateMessages(\n [...messageContext.addedMessages, ...messageContext.updatedMessages],\n false,\n sdk.currentUser.userId,\n );\n deleteMessages(messageContext.deletedMessageIds, []);\n\n if (messageContext.addedMessages.length > 0) {\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages(messageContext.addedMessages, false, sdk.currentUser.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived(messageContext.addedMessages);\n }\n }\n },\n });\n\n useChannelHandler(\n sdk,\n handlerId,\n {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser.userId)) return;\n\n updateMessages([message], false, sdk.currentUser.userId);\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages([message], false, sdk.currentUser.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived([message]);\n }\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser.userId)) return;\n\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNewMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelParticipantCountChanged(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelUpdater(eventChannel);\n },\n onChannelDeleted(channelUrl, type) {\n if (channel.url === channelUrl && type === 'open') {\n options?.onChannelDeleted?.();\n }\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(channel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n },\n 'open',\n );\n\n useAsyncEffect(async () => {\n updateLoading(true);\n\n try {\n await channel.enter();\n await init(userId);\n } catch (error) {\n options?.onError?.(error);\n options?.onChannelDeleted?.();\n } finally {\n updateLoading(false);\n }\n\n return () => {\n channel.exit().catch(NOOP);\n };\n }, [channel.url, userId]);\n\n const refresh: ReturnType<UseOpenChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const prev: ReturnType<UseOpenChannelMessages>['prev'] = useFreshCallback(async () => {\n if (queryRef.current && queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n });\n const hasPrev: ReturnType<UseOpenChannelMessages>['hasPrev'] = useFreshCallback(\n () => queryRef.current?.hasNext ?? false,\n );\n\n const next: ReturnType<UseOpenChannelMessages>['next'] = useFreshCallback(ASYNC_NOOP);\n const hasNext: ReturnType<UseOpenChannelMessages>['hasNext'] = useFreshCallback(() => false);\n\n const sendUserMessage: ReturnType<UseOpenChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const sendFileMessage: ReturnType<UseOpenChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n 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);\n }\n })\n .onFailed((err, sentMessage) => {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const updateUserMessage: ReturnType<UseOpenChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseOpenChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseOpenChannelMessages>['resendMessage'] = useFreshCallback(async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([message], false, sdk.currentUser.userId);\n });\n const deleteMessage: ReturnType<UseOpenChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\n });\n const resetNewMessages: ReturnType<UseOpenChannelMessages>['resetNewMessages'] = useFreshCallback(() => {\n updateNewMessages([], true, sdk.currentUser.userId);\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n newMessages,\n next,\n hasNext,\n prev,\n hasPrev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n resetNewMessages,\n };\n};\n"],"mappings":"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"}
|
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdOpenChannel,\n SendbirdOpenChannelListQuery,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n UserStruct,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get group channels state\n * */\n groupChannels: SendbirdGroupChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseGroupChannelListOptions = {\n queryCreator?: () => SendbirdGroupChannelListQuery;\n collectionCreator?: () => SendbirdGroupChannelCollection;\n enableCollectionWithoutLocalCache?: boolean;\n};\n\n/**\n * @interface UseGroupChannelMessages\n * @description interface for group channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> fetch next messages and append to state(messages)\n * */\nexport interface UseGroupChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * reset message list with starting point\n * */\n resetWithStartingPoint: (startingPoint: number, callback?: () => void) => void;\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /** @deprecated Please use `newMessages` instead **/\n newMessagesFromMembers: SendbirdMessage[];\n /** @deprecated Please use `newMessages` instead **/\n nextMessages: SendbirdMessage[];\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: (options?: Pick<UseGroupChannelMessagesOptions, 'startingPoint'>) => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n shouldCountNewMessages?: () => boolean;\n startingPoint?: number;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseOpenChannelList\n * @description interface for open channel list hook\n * */\nexport interface UseOpenChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseOpenChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Get open channels state\n * */\n openChannels: SendbirdOpenChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseOpenChannelListOptions = {\n queryCreator?: () => SendbirdOpenChannelListQuery;\n};\n\n/**\n * @interface UseOpenChannelMessages\n * @description interface for open channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> noop\n * */\nexport interface UseOpenChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdOpenChannel, userId?: string, options?: UseOpenChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /** @deprecated Please use `newMessages` instead **/\n newMessagesFromMembers: SendbirdMessage[];\n /** @deprecated Please use `newMessages` instead **/\n nextMessages: SendbirdMessage[];\n };\n}\n\nexport type UseOpenChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n onChannelDeleted?: () => void;\n onError?: (error?: unknown) => void;\n shouldCountNewMessages?: () => boolean;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User extends UserStruct> {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get users state\n * */\n users: User[];\n\n /**\n * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ReplyType } from '@sendbird/chat/message';\nimport type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdOpenChannel,\n SendbirdOpenChannelListQuery,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n UserStruct,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get group channels state\n * */\n groupChannels: SendbirdGroupChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseGroupChannelListOptions = {\n queryCreator?: () => SendbirdGroupChannelListQuery;\n collectionCreator?: () => SendbirdGroupChannelCollection;\n enableCollectionWithoutLocalCache?: boolean;\n};\n\n/**\n * @interface UseGroupChannelMessages\n * @description interface for group channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> fetch next messages and append to state(messages)\n * */\nexport interface UseGroupChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * reset message list with starting point\n * */\n resetWithStartingPoint: (startingPoint: number, callback?: () => void) => void;\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\n replyType?: ReplyType;\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: (options?: Pick<UseGroupChannelMessagesOptions, 'startingPoint'>) => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n shouldCountNewMessages?: () => boolean;\n startingPoint?: number;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseOpenChannelList\n * @description interface for open channel list hook\n * */\nexport interface UseOpenChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseOpenChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Get open channels state\n * */\n openChannels: SendbirdOpenChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseOpenChannelListOptions = {\n queryCreator?: () => SendbirdOpenChannelListQuery;\n};\n\n/**\n * @interface UseOpenChannelMessages\n * @description interface for open channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> noop\n * */\nexport interface UseOpenChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdOpenChannel, userId?: string, options?: UseOpenChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseOpenChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n onChannelDeleted?: () => void;\n onError?: (error?: unknown) => void;\n shouldCountNewMessages?: () => boolean;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User extends UserStruct> {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get users state\n * */\n users: User[];\n\n /**\n * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SendbirdChatSDK } from '@sendbird/uikit-utils';
|
|
2
2
|
export declare const useGroupChannel: (sdk: SendbirdChatSDK, channelUrl: string) => {
|
|
3
|
-
channel: import("@sendbird/chat/groupChannel").GroupChannel | undefined;
|
|
4
3
|
loading: boolean;
|
|
5
|
-
|
|
4
|
+
channel?: import("@sendbird/chat/groupChannel").GroupChannel | undefined;
|
|
5
|
+
error?: unknown;
|
|
6
6
|
};
|
|
@@ -5,7 +5,7 @@ export declare const useGroupChannelListReducer: (order?: Order) => {
|
|
|
5
5
|
updateRefreshing: (status: boolean) => void;
|
|
6
6
|
updateChannels: (channels: SendbirdChannel[]) => void;
|
|
7
7
|
deleteChannels: (channelUrls: string[]) => void;
|
|
8
|
-
|
|
8
|
+
appendChannels: (channels: SendbirdChannel[], clearBeforeAction: boolean) => void;
|
|
9
9
|
updateOrder: (order?: Order) => void;
|
|
10
10
|
loading: boolean;
|
|
11
11
|
refreshing: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SendbirdChatSDK } from '@sendbird/uikit-utils';
|
|
2
2
|
export declare const useOpenChannel: (sdk: SendbirdChatSDK, channelUrl: string) => {
|
|
3
|
-
channel: import("@sendbird/chat/openChannel").OpenChannel | undefined;
|
|
4
3
|
loading: boolean;
|
|
5
|
-
|
|
4
|
+
channel?: import("@sendbird/chat/openChannel").OpenChannel | undefined;
|
|
5
|
+
error?: unknown;
|
|
6
6
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ReplyType } from '@sendbird/chat/message';
|
|
1
2
|
import type { SendbirdChatSDK, SendbirdError, SendbirdFileMessage, SendbirdFileMessageCreateParams, SendbirdFileMessageUpdateParams, SendbirdGroupChannel, SendbirdGroupChannelCollection, SendbirdGroupChannelListQuery, SendbirdMessage, SendbirdMessageCollection, SendbirdOpenChannel, SendbirdOpenChannelListQuery, SendbirdPreviousMessageListQuery, SendbirdUserMessage, SendbirdUserMessageCreateParams, SendbirdUserMessageUpdateParams, UserStruct } from '@sendbird/uikit-utils';
|
|
2
3
|
export interface CustomQueryInterface<Data> {
|
|
3
4
|
isLoading: boolean;
|
|
@@ -150,13 +151,10 @@ export interface UseGroupChannelMessages {
|
|
|
150
151
|
* @return {Promise<void>}
|
|
151
152
|
* */
|
|
152
153
|
deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;
|
|
153
|
-
/** @deprecated Please use `newMessages` instead **/
|
|
154
|
-
newMessagesFromMembers: SendbirdMessage[];
|
|
155
|
-
/** @deprecated Please use `newMessages` instead **/
|
|
156
|
-
nextMessages: SendbirdMessage[];
|
|
157
154
|
};
|
|
158
155
|
}
|
|
159
156
|
export type UseGroupChannelMessagesOptions = {
|
|
157
|
+
replyType?: ReplyType;
|
|
160
158
|
sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;
|
|
161
159
|
queryCreator?: () => SendbirdPreviousMessageListQuery;
|
|
162
160
|
collectionCreator?: (options?: Pick<UseGroupChannelMessagesOptions, 'startingPoint'>) => SendbirdMessageCollection;
|
|
@@ -303,10 +301,6 @@ export interface UseOpenChannelMessages {
|
|
|
303
301
|
* @return {Promise<void>}
|
|
304
302
|
* */
|
|
305
303
|
deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;
|
|
306
|
-
/** @deprecated Please use `newMessages` instead **/
|
|
307
|
-
newMessagesFromMembers: SendbirdMessage[];
|
|
308
|
-
/** @deprecated Please use `newMessages` instead **/
|
|
309
|
-
nextMessages: SendbirdMessage[];
|
|
310
304
|
};
|
|
311
305
|
}
|
|
312
306
|
export type UseOpenChannelMessagesOptions = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendbird/uikit-chat-hooks",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-rc.1",
|
|
4
4
|
"description": "A set of React hooks for integrating Sendbird chat functionality into your React app.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sendbird",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"scripts": {
|
|
26
26
|
"test": "jest",
|
|
27
27
|
"build": "bob build",
|
|
28
|
-
"clean": "del lib"
|
|
28
|
+
"clean": "del lib",
|
|
29
|
+
"publish:next": "npm publish --tag next"
|
|
29
30
|
},
|
|
30
31
|
"repository": {
|
|
31
32
|
"type": "git",
|
|
@@ -43,17 +44,17 @@
|
|
|
43
44
|
"access": "public"
|
|
44
45
|
},
|
|
45
46
|
"dependencies": {
|
|
46
|
-
"@sendbird/uikit-utils": "
|
|
47
|
+
"@sendbird/uikit-utils": "3.0.0-rc.1"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
|
49
|
-
"@sendbird/uikit-testing-tools": "
|
|
50
|
+
"@sendbird/uikit-testing-tools": "3.0.0-rc.1",
|
|
50
51
|
"@types/react": "*",
|
|
51
52
|
"react": "17.0.2",
|
|
52
53
|
"react-native-builder-bob": "^0.18.0",
|
|
53
54
|
"typescript": "4.9.4"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
56
|
-
"@sendbird/chat": "^4.
|
|
57
|
+
"@sendbird/chat": "^4.9.2",
|
|
57
58
|
"react": ">=16.13.1"
|
|
58
59
|
},
|
|
59
60
|
"react-native-builder-bob": {
|
|
@@ -74,6 +75,5 @@
|
|
|
74
75
|
"entryPoint": "./src/index.ts",
|
|
75
76
|
"readmeFile": "./README.md",
|
|
76
77
|
"displayName": "@sendbird/uikit-chat-hooks"
|
|
77
|
-
}
|
|
78
|
-
"gitHead": "4e2d6a30075a8fb6cf2615c5c20d50a0d0ddfcda"
|
|
78
|
+
}
|
|
79
79
|
}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useReducer } from 'react';
|
|
2
2
|
|
|
3
3
|
import { SendbirdChatSDK, SendbirdGroupChannel, useAsyncEffect } from '@sendbird/uikit-utils';
|
|
4
4
|
|
|
5
|
+
type State = { loading: boolean; channel?: SendbirdGroupChannel; error?: unknown };
|
|
6
|
+
|
|
7
|
+
const initialState: State = { loading: true, error: undefined, channel: undefined };
|
|
8
|
+
const reducer = (state: State, nextState: Partial<State>) => ({ ...state, ...nextState });
|
|
9
|
+
|
|
5
10
|
export const useGroupChannel = (sdk: SendbirdChatSDK, channelUrl: string) => {
|
|
6
|
-
const [
|
|
7
|
-
const [loading, setLoading] = useState(true);
|
|
8
|
-
const [error, setError] = useState<unknown>();
|
|
11
|
+
const [state, setState] = useReducer(reducer, initialState);
|
|
9
12
|
|
|
10
13
|
useAsyncEffect(async () => {
|
|
14
|
+
setState(initialState);
|
|
15
|
+
|
|
11
16
|
try {
|
|
12
|
-
|
|
17
|
+
setState({ channel: await sdk.groupChannel.getChannel(channelUrl), loading: false });
|
|
13
18
|
} catch (e) {
|
|
14
|
-
|
|
15
|
-
} finally {
|
|
16
|
-
setLoading(false);
|
|
19
|
+
setState({ error: e, loading: false });
|
|
17
20
|
}
|
|
18
|
-
}, []);
|
|
21
|
+
}, [channelUrl]);
|
|
19
22
|
|
|
20
|
-
return
|
|
23
|
+
return state;
|
|
21
24
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useReducer } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { SendbirdChannel } from '@sendbird/uikit-utils';
|
|
4
|
-
import { SendbirdGroupChannel, getGroupChannels } from '@sendbird/uikit-utils';
|
|
4
|
+
import { SendbirdGroupChannel, getGroupChannels, mergeObjectArrays } from '@sendbird/uikit-utils';
|
|
5
5
|
|
|
6
6
|
type Order = 'latest_last_message' | 'chronological' | 'channel_name_alphabetical' | 'metadata_value_alphabetical';
|
|
7
7
|
|
|
@@ -19,7 +19,7 @@ type Action =
|
|
|
19
19
|
value: { channelUrls: string[] };
|
|
20
20
|
}
|
|
21
21
|
| {
|
|
22
|
-
type: '
|
|
22
|
+
type: 'append_channels';
|
|
23
23
|
value: { channels: SendbirdChannel[]; clearBeforeAction: boolean };
|
|
24
24
|
}
|
|
25
25
|
| {
|
|
@@ -64,11 +64,12 @@ const defaultReducer = ({ ...draft }: State, action: Action) => {
|
|
|
64
64
|
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
65
65
|
break;
|
|
66
66
|
}
|
|
67
|
-
case '
|
|
67
|
+
case 'append_channels': {
|
|
68
|
+
const groupChannels = getGroupChannels(action.value.channels);
|
|
68
69
|
if (action.value.clearBeforeAction) {
|
|
69
|
-
draft.groupChannels =
|
|
70
|
+
draft.groupChannels = groupChannels;
|
|
70
71
|
} else {
|
|
71
|
-
draft.groupChannels =
|
|
72
|
+
draft.groupChannels = mergeObjectArrays(draft.groupChannels, groupChannels, 'url');
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
@@ -98,8 +99,8 @@ export const useGroupChannelListReducer = (order?: Order) => {
|
|
|
98
99
|
const deleteChannels = (channelUrls: string[]) => {
|
|
99
100
|
dispatch({ type: 'delete_channels', value: { channelUrls } });
|
|
100
101
|
};
|
|
101
|
-
const
|
|
102
|
-
dispatch({ type: '
|
|
102
|
+
const appendChannels = (channels: SendbirdChannel[], clearBeforeAction: boolean) => {
|
|
103
|
+
dispatch({ type: 'append_channels', value: { channels, clearBeforeAction } });
|
|
103
104
|
};
|
|
104
105
|
const updateLoading = (status: boolean) => {
|
|
105
106
|
dispatch({ type: 'update_loading', value: { status } });
|
|
@@ -116,7 +117,7 @@ export const useGroupChannelListReducer = (order?: Order) => {
|
|
|
116
117
|
updateRefreshing,
|
|
117
118
|
updateChannels,
|
|
118
119
|
deleteChannels,
|
|
119
|
-
|
|
120
|
+
appendChannels,
|
|
120
121
|
|
|
121
122
|
updateOrder,
|
|
122
123
|
|
|
@@ -32,7 +32,7 @@ export const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, user
|
|
|
32
32
|
|
|
33
33
|
const collectionRef = useRef<SendbirdGroupChannelCollection>();
|
|
34
34
|
|
|
35
|
-
const { loading, groupChannels, refreshing,
|
|
35
|
+
const { loading, groupChannels, refreshing, appendChannels, deleteChannels, updateRefreshing, updateLoading } =
|
|
36
36
|
useGroupChannelListReducer();
|
|
37
37
|
|
|
38
38
|
const updateChannelsAndMarkAsDelivered = (
|
|
@@ -41,7 +41,7 @@ export const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, user
|
|
|
41
41
|
updatedChannels?: SendbirdBaseChannel[],
|
|
42
42
|
) => {
|
|
43
43
|
const channels = collectionRef.current?.channels ?? [];
|
|
44
|
-
|
|
44
|
+
appendChannels(channels, true);
|
|
45
45
|
if (markAsDelivered && deliveryReceiptEnabled) {
|
|
46
46
|
switch (source) {
|
|
47
47
|
case GroupChannelEventSource.EVENT_MESSAGE_RECEIVED:
|
|
@@ -33,7 +33,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
33
33
|
groupChannels,
|
|
34
34
|
refreshing,
|
|
35
35
|
updateChannels,
|
|
36
|
-
|
|
36
|
+
appendChannels,
|
|
37
37
|
deleteChannels,
|
|
38
38
|
updateRefreshing,
|
|
39
39
|
updateLoading,
|
|
@@ -53,7 +53,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
53
53
|
if (queryRef.current?.hasNext) {
|
|
54
54
|
const channels = await queryRef.current.next();
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
appendChannels(channels, true);
|
|
57
57
|
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -96,7 +96,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
96
96
|
const next = useFreshCallback(async () => {
|
|
97
97
|
if (queryRef.current?.hasNext) {
|
|
98
98
|
const channels = await queryRef.current.next();
|
|
99
|
-
|
|
99
|
+
appendChannels(channels, false);
|
|
100
100
|
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
101
101
|
}
|
|
102
102
|
});
|
|
@@ -6,9 +6,16 @@ import { useGroupChannelMessagesWithQuery } from './useGroupChannelMessagesWithQ
|
|
|
6
6
|
|
|
7
7
|
export const useGroupChannelMessages: UseGroupChannelMessages = (sdk, channel, userId, options) => {
|
|
8
8
|
if (sdk.isCacheEnabled || options?.enableCollectionWithoutLocalCache) {
|
|
9
|
-
if (options?.queryCreator)
|
|
9
|
+
if (options?.queryCreator) printIgnoredWarning();
|
|
10
10
|
return useGroupChannelMessagesWithCollection(sdk, channel, userId, options);
|
|
11
11
|
} else {
|
|
12
12
|
return useGroupChannelMessagesWithQuery(sdk, channel, userId, options);
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
|
+
|
|
16
|
+
const printIgnoredWarning = () => {
|
|
17
|
+
Logger.warn(
|
|
18
|
+
'If sdk.isCacheEnabled or enableCollectionWithoutLocalCache is turned on, queryCreator is ignored' +
|
|
19
|
+
'Please use collectionCreator instead.',
|
|
20
|
+
);
|
|
21
|
+
};
|
|
@@ -24,10 +24,13 @@ const MESSAGE_LIMIT = {
|
|
|
24
24
|
const createMessageCollection = (
|
|
25
25
|
channel: SendbirdGroupChannel,
|
|
26
26
|
limit: number,
|
|
27
|
-
options
|
|
27
|
+
options: UseGroupChannelMessagesOptions,
|
|
28
28
|
) => {
|
|
29
29
|
if (options?.collectionCreator) return options?.collectionCreator({ startingPoint: options?.startingPoint });
|
|
30
|
+
|
|
30
31
|
const filter = new MessageFilter();
|
|
32
|
+
if (options.replyType) filter.replyType = options.replyType;
|
|
33
|
+
|
|
31
34
|
return channel.createMessageCollection({ filter, limit, startingPoint: options?.startingPoint });
|
|
32
35
|
};
|
|
33
36
|
|
|
@@ -87,7 +90,7 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
87
90
|
|
|
88
91
|
collectionInitializedRef.current = false;
|
|
89
92
|
collectionRef.current = createMessageCollection(channel, limit, {
|
|
90
|
-
|
|
93
|
+
...options,
|
|
91
94
|
startingPoint,
|
|
92
95
|
});
|
|
93
96
|
|
|
@@ -371,7 +374,5 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
371
374
|
resendMessage,
|
|
372
375
|
deleteMessage,
|
|
373
376
|
resetWithStartingPoint,
|
|
374
|
-
nextMessages: newMessages,
|
|
375
|
-
newMessagesFromMembers: newMessages,
|
|
376
377
|
};
|
|
377
378
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
2
|
|
|
3
|
+
import type { PreviousMessageListQueryParams } from '@sendbird/chat/message';
|
|
3
4
|
import type {
|
|
4
5
|
SendbirdBaseChannel,
|
|
5
6
|
SendbirdGroupChannel,
|
|
@@ -21,15 +22,13 @@ import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
|
21
22
|
import type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';
|
|
22
23
|
import { useChannelMessagesReducer } from '../useChannelMessagesReducer';
|
|
23
24
|
|
|
24
|
-
const createMessageQuery = (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
reverse: true,
|
|
32
|
-
});
|
|
25
|
+
const createMessageQuery = (channel: SendbirdGroupChannel, options?: UseGroupChannelMessagesOptions) => {
|
|
26
|
+
if (options?.queryCreator) return options.queryCreator();
|
|
27
|
+
|
|
28
|
+
const params: PreviousMessageListQueryParams = { limit: 100, reverse: true };
|
|
29
|
+
if (options?.replyType) params.replyType = options.replyType;
|
|
30
|
+
|
|
31
|
+
return channel.createPreviousMessageListQuery(params);
|
|
33
32
|
};
|
|
34
33
|
|
|
35
34
|
export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {
|
|
@@ -64,7 +63,7 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
64
63
|
channelMarkAsRead();
|
|
65
64
|
updateNewMessages([], true, sdk.currentUser.userId);
|
|
66
65
|
|
|
67
|
-
queryRef.current = createMessageQuery(channel, options
|
|
66
|
+
queryRef.current = createMessageQuery(channel, options);
|
|
68
67
|
if (queryRef.current?.hasNext) {
|
|
69
68
|
const list = await queryRef.current?.load();
|
|
70
69
|
updateMessages(list, true, sdk.currentUser.userId);
|
|
@@ -281,8 +280,5 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
281
280
|
resetWithStartingPoint() {
|
|
282
281
|
Logger.warn('resetWithStartingPoint is not supported in Query, please use Collection instead.');
|
|
283
282
|
},
|
|
284
|
-
|
|
285
|
-
nextMessages: newMessages,
|
|
286
|
-
newMessagesFromMembers: newMessages,
|
|
287
283
|
};
|
|
288
284
|
};
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useReducer } from 'react';
|
|
2
2
|
|
|
3
3
|
import { SendbirdChatSDK, SendbirdOpenChannel, useAsyncEffect } from '@sendbird/uikit-utils';
|
|
4
4
|
|
|
5
|
+
type State = { loading: boolean; channel?: SendbirdOpenChannel; error?: unknown };
|
|
6
|
+
|
|
7
|
+
const initialState: State = { loading: true, error: undefined, channel: undefined };
|
|
8
|
+
const reducer = (state: State, nextState: Partial<State>) => ({ ...state, ...nextState });
|
|
9
|
+
|
|
5
10
|
export const useOpenChannel = (sdk: SendbirdChatSDK, channelUrl: string) => {
|
|
6
|
-
const [
|
|
7
|
-
const [loading, setLoading] = useState(true);
|
|
8
|
-
const [error, setError] = useState<unknown>();
|
|
11
|
+
const [state, setState] = useReducer(reducer, initialState);
|
|
9
12
|
|
|
10
13
|
useAsyncEffect(async () => {
|
|
14
|
+
setState(initialState);
|
|
15
|
+
|
|
11
16
|
try {
|
|
12
|
-
|
|
17
|
+
setState({ channel: await sdk.openChannel.getChannel(channelUrl), loading: false });
|
|
13
18
|
} catch (e) {
|
|
14
|
-
|
|
15
|
-
} finally {
|
|
16
|
-
setLoading(false);
|
|
19
|
+
setState({ error: e, loading: false });
|
|
17
20
|
}
|
|
18
|
-
}, []);
|
|
21
|
+
}, [channelUrl]);
|
|
19
22
|
|
|
20
|
-
return
|
|
23
|
+
return state;
|
|
21
24
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useReducer } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { SendbirdChannel, SendbirdOpenChannel } from '@sendbird/uikit-utils';
|
|
4
|
-
import { getOpenChannels } from '@sendbird/uikit-utils';
|
|
4
|
+
import { getOpenChannels, mergeObjectArrays } from '@sendbird/uikit-utils';
|
|
5
5
|
|
|
6
6
|
type Action =
|
|
7
7
|
| {
|
|
@@ -63,7 +63,7 @@ const defaultReducer = ({ ...draft }: State, action: Action) => {
|
|
|
63
63
|
if (action.value.clearBeforeAction) {
|
|
64
64
|
draft.openChannels = openChannels;
|
|
65
65
|
} else {
|
|
66
|
-
draft.openChannels =
|
|
66
|
+
draft.openChannels = mergeObjectArrays(draft.openChannels, openChannels, 'url');
|
|
67
67
|
}
|
|
68
68
|
break;
|
|
69
69
|
}
|