@sendbird/uikit-chat-hooks 2.3.0 → 2.4.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/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +2 -4
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +2 -3
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +7 -8
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +8 -7
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannel.js +33 -0
- package/lib/commonjs/channel/useOpenChannel.js.map +1 -0
- package/lib/commonjs/channel/useOpenChannelList/index.js +15 -0
- package/lib/commonjs/channel/useOpenChannelList/index.js.map +1 -0
- package/lib/commonjs/channel/useOpenChannelList/reducer.js +149 -0
- package/lib/commonjs/channel/useOpenChannelList/reducer.js.map +1 -0
- package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js +119 -0
- package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -0
- package/lib/commonjs/channel/useOpenChannelMessages/index.js +15 -0
- package/lib/commonjs/channel/useOpenChannelMessages/index.js.map +1 -0
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +154 -0
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +1 -0
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +240 -0
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -0
- package/lib/commonjs/common/useMessageOutgoingStatus.js +2 -4
- package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/commonjs/common/useTotalUnreadChannelCount.js +2 -4
- package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +1 -1
- package/lib/commonjs/common/useTotalUnreadMessageCount.js +2 -4
- package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/commonjs/common/useUserList.js +2 -0
- package/lib/commonjs/common/useUserList.js.map +1 -1
- package/lib/commonjs/handler/useChannelHandler.js +34 -4
- package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
- package/lib/commonjs/index.js +24 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +3 -4
- 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/useGroupChannelMessagesWithCollection.js +8 -8
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +9 -7
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/channel/useOpenChannel.js +22 -0
- package/lib/module/channel/useOpenChannel.js.map +1 -0
- package/lib/module/channel/useOpenChannelList/index.js +5 -0
- package/lib/module/channel/useOpenChannelList/index.js.map +1 -0
- package/lib/module/channel/useOpenChannelList/reducer.js +139 -0
- package/lib/module/channel/useOpenChannelList/reducer.js.map +1 -0
- package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js +107 -0
- package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -0
- package/lib/module/channel/useOpenChannelMessages/index.js +5 -0
- package/lib/module/channel/useOpenChannelMessages/index.js.map +1 -0
- package/lib/module/channel/useOpenChannelMessages/reducer.js +144 -0
- package/lib/module/channel/useOpenChannelMessages/reducer.js.map +1 -0
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +228 -0
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -0
- package/lib/module/common/useMessageOutgoingStatus.js +3 -4
- package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/module/common/useTotalUnreadChannelCount.js +3 -5
- package/lib/module/common/useTotalUnreadChannelCount.js.map +1 -1
- package/lib/module/common/useTotalUnreadMessageCount.js +3 -4
- package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/module/common/useUserList.js +2 -0
- package/lib/module/common/useUserList.js.map +1 -1
- package/lib/module/handler/useChannelHandler.js +34 -4
- package/lib/module/handler/useChannelHandler.js.map +1 -1
- package/lib/module/index.js +3 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/channel/useOpenChannel.d.ts +6 -0
- package/lib/typescript/src/channel/useOpenChannelList/index.d.ts +2 -0
- package/lib/typescript/src/channel/useOpenChannelList/reducer.d.ts +13 -0
- package/lib/typescript/src/channel/useOpenChannelList/useOpenChannelListWithQuery.d.ts +2 -0
- package/lib/typescript/src/channel/useOpenChannelMessages/index.d.ts +2 -0
- package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +15 -0
- package/lib/typescript/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.d.ts +2 -0
- package/lib/typescript/src/handler/useChannelHandler.d.ts +4 -1
- package/lib/typescript/src/index.d.ts +4 -2
- package/lib/typescript/src/types.d.ts +141 -3
- package/package.json +4 -4
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +3 -5
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +3 -4
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +8 -8
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +9 -6
- package/src/channel/useOpenChannel.ts +21 -0
- package/src/channel/useOpenChannelList/index.ts +6 -0
- package/src/channel/useOpenChannelList/reducer.ts +115 -0
- package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +112 -0
- package/src/channel/useOpenChannelMessages/index.ts +6 -0
- package/src/channel/useOpenChannelMessages/reducer.ts +125 -0
- package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +247 -0
- package/src/common/useMessageOutgoingStatus.ts +3 -5
- package/src/common/useTotalUnreadChannelCount.ts +3 -5
- package/src/common/useTotalUnreadMessageCount.ts +3 -4
- package/src/common/useUserList.ts +2 -0
- package/src/handler/useChannelHandler.ts +31 -5
- package/src/index.ts +8 -1
- package/src/types.ts +171 -2
- package/lib/commonjs/channel/useActiveGroupChannel.js +0 -22
- package/lib/commonjs/channel/useActiveGroupChannel.js.map +0 -1
- package/lib/module/channel/useActiveGroupChannel.js +0 -12
- package/lib/module/channel/useActiveGroupChannel.js.map +0 -1
- package/lib/typescript/src/channel/useActiveGroupChannel.d.ts +0 -5
- package/src/channel/useActiveGroupChannel.ts +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n UserStruct,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get group channels state\n * */\n groupChannels: SendbirdGroupChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseGroupChannelListOptions = {\n queryCreator?: () => SendbirdGroupChannelListQuery;\n collectionCreator?: () => SendbirdGroupChannelCollection;\n enableCollectionWithoutLocalCache?: boolean;\n};\n\n/**\n * @interface UseGroupChannelMessages\n * @description interface for group channel messages hook\n * - Receive new messages from other users -> append to state(nextMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> nextMessages append to state(messages)\n * */\nexport interface UseGroupChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Get messages, this state is for temporary data before render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * */\n nextMessages: SendbirdMessage[];\n\n /**\n * Get new messages from nextMessages\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessagesFromMembers: SendbirdMessage[];\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageCreateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageCreateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: () => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User extends UserStruct> {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get users state\n * */\n users: User[];\n\n /**\n * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdOpenChannel,\n SendbirdOpenChannelListQuery,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n UserStruct,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get group channels state\n * */\n groupChannels: SendbirdGroupChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseGroupChannelListOptions = {\n queryCreator?: () => SendbirdGroupChannelListQuery;\n collectionCreator?: () => SendbirdGroupChannelCollection;\n enableCollectionWithoutLocalCache?: boolean;\n};\n\n/**\n * @interface UseGroupChannelMessages\n * @description interface for group channel messages hook\n * - Receive new messages from other users -> append to state(nextMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> nextMessages append to state(messages)\n * */\nexport interface UseGroupChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Get messages, this state is for temporary data before render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * */\n nextMessages: SendbirdMessage[];\n\n /**\n * Get new messages from nextMessages\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessagesFromMembers: SendbirdMessage[];\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: () => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n};\n\n/**\n * @interface UseOpenChannelList\n * @description interface for open channel list hook\n * */\nexport interface UseOpenChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseOpenChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Get open channels state\n * */\n openChannels: SendbirdOpenChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseOpenChannelListOptions = {\n queryCreator?: () => SendbirdOpenChannelListQuery;\n};\n\n/**\n * @interface UseOpenChannelMessages\n * @description interface for open channel messages hook\n * - Receive new messages from other users -> append to state(nextMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> nextMessages append to state(messages)\n * */\nexport interface UseOpenChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdOpenChannel, userId?: string, options?: UseOpenChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Get messages, this state is for temporary data before render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * */\n nextMessages: SendbirdMessage[];\n\n /**\n * Get new messages from nextMessages\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessagesFromMembers: SendbirdMessage[];\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseOpenChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n onChannelDeleted?: () => void;\n onError?: (error?: unknown) => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User extends UserStruct> {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get users state\n * */\n users: User[];\n\n /**\n * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { GroupChannelEventSource, GroupChannelFilter, GroupChannelListOrder } from '@sendbird/chat/groupChannel';
|
|
3
|
-
import { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback,
|
|
3
|
+
import { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
4
4
|
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
5
5
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
6
6
|
import { useGroupChannelListReducer } from './reducer';
|
|
7
|
-
const HOOK_NAME = 'useGroupChannelListWithCollection';
|
|
8
7
|
|
|
9
8
|
const createGroupChannelListCollection = (sdk, collectionCreator) => {
|
|
10
9
|
const passedCollection = collectionCreator === null || collectionCreator === void 0 ? void 0 : collectionCreator();
|
|
@@ -19,7 +18,7 @@ const createGroupChannelListCollection = (sdk, collectionCreator) => {
|
|
|
19
18
|
};
|
|
20
19
|
|
|
21
20
|
export const useGroupChannelListWithCollection = (sdk, userId, options) => {
|
|
22
|
-
const
|
|
21
|
+
const handlerId = useUniqHandlerId('useGroupChannelListWithCollection');
|
|
23
22
|
const {
|
|
24
23
|
deliveryReceiptEnabled
|
|
25
24
|
} = useAppFeatures(sdk);
|
|
@@ -94,7 +93,7 @@ export const useGroupChannelListWithCollection = (sdk, userId, options) => {
|
|
|
94
93
|
await init(userId);
|
|
95
94
|
updateLoading(false);
|
|
96
95
|
}, [init, userId]);
|
|
97
|
-
useChannelHandler(sdk,
|
|
96
|
+
useChannelHandler(sdk, handlerId, {
|
|
98
97
|
onUserBanned: (channel, user) => {
|
|
99
98
|
const isMe = user.userId === userId;
|
|
100
99
|
if (isMe) deleteChannels([channel.url]);else updateChannelsAndMarkAsDelivered(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","GroupChannelEventSource","GroupChannelFilter","GroupChannelListOrder","confirmAndMarkAsDelivered","useAsyncEffect","useFreshCallback","
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","GroupChannelEventSource","GroupChannelFilter","GroupChannelListOrder","confirmAndMarkAsDelivered","useAsyncEffect","useFreshCallback","useUniqHandlerId","useAppFeatures","useChannelHandler","useGroupChannelListReducer","createGroupChannelListCollection","sdk","collectionCreator","passedCollection","filter","includeEmpty","groupChannel","createGroupChannelCollection","limit","order","LATEST_LAST_MESSAGE","useGroupChannelListWithCollection","userId","options","handlerId","deliveryReceiptEnabled","collectionRef","loading","groupChannels","refreshing","setChannels","deleteChannels","updateRefreshing","updateLoading","updateChannelsAndMarkAsDelivered","markAsDelivered","source","updatedChannels","channels","current","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT","SYNC_CHANNEL_BACKGROUND","SYNC_CHANNEL_CHANGELOGS","undefined","init","uid","dispose","setGroupChannelCollectionHandler","onChannelsAdded","context","onChannelsUpdated","onChannelsDeleted","hasMore","loadMore","onUserBanned","channel","user","isMe","url","refresh","next"],"sources":["useGroupChannelListWithCollection.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { GroupChannelEventSource, GroupChannelFilter, GroupChannelListOrder } from '@sendbird/chat/groupChannel';\nimport type { SendbirdBaseChannel, SendbirdChatSDK, SendbirdGroupChannelCollection } from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback, useUniqHandlerId } 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 createGroupChannelListCollection = (\n sdk: SendbirdChatSDK,\n collectionCreator: UseGroupChannelListOptions['collectionCreator'],\n) => {\n const passedCollection = collectionCreator?.();\n if (passedCollection) return passedCollection;\n\n const filter = new GroupChannelFilter();\n filter.includeEmpty = false;\n\n return sdk.groupChannel.createGroupChannelCollection({\n filter,\n limit: 20,\n order: GroupChannelListOrder.LATEST_LAST_MESSAGE,\n });\n};\n\nexport const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, userId, options) => {\n const handlerId = useUniqHandlerId('useGroupChannelListWithCollection');\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdGroupChannelCollection>();\n\n const { loading, groupChannels, refreshing, setChannels, deleteChannels, updateRefreshing, updateLoading } =\n useGroupChannelListReducer();\n\n const updateChannelsAndMarkAsDelivered = (\n markAsDelivered: boolean,\n source?: GroupChannelEventSource,\n updatedChannels?: SendbirdBaseChannel[],\n ) => {\n const channels = collectionRef.current?.channels ?? [];\n setChannels(channels, true);\n if (markAsDelivered && deliveryReceiptEnabled) {\n switch (source) {\n case GroupChannelEventSource.EVENT_MESSAGE_RECEIVED:\n case GroupChannelEventSource.EVENT_MESSAGE_SENT:\n case GroupChannelEventSource.SYNC_CHANNEL_BACKGROUND:\n case GroupChannelEventSource.SYNC_CHANNEL_CHANGELOGS:\n case undefined:\n confirmAndMarkAsDelivered(updatedChannels ?? channels);\n break;\n }\n }\n };\n\n const init = useFreshCallback(async (uid?: string) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);\n\n collectionRef.current?.setGroupChannelCollectionHandler({\n onChannelsAdded: (context, channels) => {\n updateChannelsAndMarkAsDelivered(true, context.source, channels);\n },\n onChannelsUpdated: (context, channels) => {\n updateChannelsAndMarkAsDelivered(true, context.source, channels);\n },\n onChannelsDeleted: () => {\n updateChannelsAndMarkAsDelivered(false);\n },\n });\n\n if (collectionRef.current?.hasMore) {\n await collectionRef.current?.loadMore();\n updateChannelsAndMarkAsDelivered(true);\n }\n }\n });\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, handlerId, {\n onUserBanned: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered(false);\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 (collectionRef.current?.hasMore) {\n await collectionRef.current?.loadMore();\n updateChannelsAndMarkAsDelivered(true);\n }\n });\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
2
|
import { GroupChannelListOrder } from '@sendbird/chat/groupChannel';
|
|
3
|
-
import { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';
|
|
3
|
+
import { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
4
4
|
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
5
5
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
6
6
|
import { useGroupChannelListReducer } from './reducer';
|
|
7
|
-
const HOOK_NAME = 'useGroupChannelListWithQuery';
|
|
8
7
|
|
|
9
8
|
const createGroupChannelListQuery = (sdk, queryCreator) => {
|
|
10
9
|
const passedQuery = queryCreator === null || queryCreator === void 0 ? void 0 : queryCreator();
|
|
@@ -21,6 +20,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
|
|
|
21
20
|
deliveryReceiptEnabled
|
|
22
21
|
} = useAppFeatures(sdk);
|
|
23
22
|
const queryRef = useRef();
|
|
23
|
+
const handlerId = useUniqHandlerId('useGroupChannelListWithQuery');
|
|
24
24
|
const {
|
|
25
25
|
loading,
|
|
26
26
|
groupChannels,
|
|
@@ -57,7 +57,7 @@ export const useGroupChannelListWithQuery = (sdk, userId, options) => {
|
|
|
57
57
|
await init(userId);
|
|
58
58
|
updateLoading(false);
|
|
59
59
|
}, [init, userId]);
|
|
60
|
-
useChannelHandler(sdk,
|
|
60
|
+
useChannelHandler(sdk, handlerId, {
|
|
61
61
|
onChannelChanged: channel => updateChannels([channel]),
|
|
62
62
|
onChannelFrozen: channel => updateChannels([channel]),
|
|
63
63
|
onChannelUnfrozen: channel => updateChannels([channel]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useRef","GroupChannelListOrder","confirmAndMarkAsDelivered","useAsyncEffect","useFreshCallback","useAppFeatures","useChannelHandler","useGroupChannelListReducer","
|
|
1
|
+
{"version":3,"names":["useRef","GroupChannelListOrder","confirmAndMarkAsDelivered","useAsyncEffect","useFreshCallback","useUniqHandlerId","useAppFeatures","useChannelHandler","useGroupChannelListReducer","createGroupChannelListQuery","sdk","queryCreator","passedQuery","groupChannel","createMyGroupChannelListQuery","includeEmpty","limit","order","LATEST_LAST_MESSAGE","useGroupChannelListWithQuery","userId","options","deliveryReceiptEnabled","queryRef","handlerId","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, useUniqHandlerId } 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 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 const handlerId = useUniqHandlerId('useGroupChannelListWithQuery');\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, handlerId, {\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":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
|
-
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate, useFreshCallback } from '@sendbird/uikit-utils';
|
|
3
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
4
4
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
5
5
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
6
6
|
|
|
@@ -13,10 +13,10 @@ const createMessageCollection = (channel, creator) => {
|
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
const HOOK_NAME = 'useGroupChannelMessagesWithCollection';
|
|
17
16
|
export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) => {
|
|
18
17
|
const forceUpdate = useForceUpdate();
|
|
19
18
|
const collectionRef = useRef();
|
|
19
|
+
const handlerId = useUniqHandlerId('useGroupChannelMessagesWithCollection');
|
|
20
20
|
const {
|
|
21
21
|
loading,
|
|
22
22
|
refreshing,
|
|
@@ -42,7 +42,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
42
42
|
break;
|
|
43
43
|
}
|
|
44
44
|
} catch (e) {
|
|
45
|
-
Logger.warn(
|
|
45
|
+
Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
|
|
@@ -96,18 +96,18 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
96
96
|
}
|
|
97
97
|
});
|
|
98
98
|
collectionRef.current.initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API).onCacheResult((err, messages) => {
|
|
99
|
-
if (err) sdk.isCacheEnabled && Logger.error(
|
|
99
|
+
if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);else {
|
|
100
100
|
var _collectionRef$curren3, _collectionRef$curren4;
|
|
101
101
|
|
|
102
|
-
Logger.debug(
|
|
102
|
+
Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);
|
|
103
103
|
updateMessages(messages, true, sdk.currentUser.userId);
|
|
104
104
|
updateMessages(((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.pendingMessages) ?? [], false, sdk.currentUser.userId);
|
|
105
105
|
updateMessages(((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.failedMessages) ?? [], false, sdk.currentUser.userId);
|
|
106
106
|
}
|
|
107
107
|
callback === null || callback === void 0 ? void 0 : callback();
|
|
108
108
|
}).onApiResult((err, messages) => {
|
|
109
|
-
if (err) Logger.warn(
|
|
110
|
-
Logger.debug(
|
|
109
|
+
if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);else {
|
|
110
|
+
Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);
|
|
111
111
|
updateMessages(messages, true, sdk.currentUser.userId);
|
|
112
112
|
|
|
113
113
|
if (sdk.isCacheEnabled) {
|
|
@@ -121,7 +121,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
}, [sdk, channel.url, options === null || options === void 0 ? void 0 : options.collectionCreator]);
|
|
124
|
-
useChannelHandler(sdk,
|
|
124
|
+
useChannelHandler(sdk, handlerId, {
|
|
125
125
|
onUserBanned(channel, bannedUser) {
|
|
126
126
|
if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
|
|
127
127
|
if (bannedUser.userId === sdk.currentUser.userId) {
|
package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useFreshCallback","useChannelHandler","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","HOOK_NAME","useGroupChannelMessagesWithCollection","sdk","userId","options","forceUpdate","collectionRef","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","undefined","e","warn","init","uid","callback","current","dispose","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","__","onMessagesUpdated","nextMessageIds","map","it","messageId","nonAddedMessagesFromReceivedEvent","indexOf","onMessagesDeleted","messageIds","onChannelDeleted","onChannelUpdated","eventChannel","isGroupChannel","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","messageCandidates","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","_failedMessage","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resentMessage","resendUserMessage","resendFileMessage","deleteMessage","message","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 SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useForceUpdate,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\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 forceUpdate = useForceUpdate();\n const collectionRef = useRef<SendbirdMessageCollection>();\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 channelMarkAsRead = async (source?: MessageEventSource) => {\n try {\n switch (source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n case undefined:\n await confirmAndMarkAsRead([channel]);\n break;\n }\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAsRead]`, e);\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(channel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAsRead();\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, __, messages) => {\n channelMarkAsRead(_.source);\n updateNextMessages(messages, false, sdk.currentUser.userId);\n },\n onMessagesUpdated: (_, __, messages) => {\n channelMarkAsRead(_.source);\n\n // NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.\n if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n const nextMessageIds = nextMessages.map((it) => it.messageId);\n const nonAddedMessagesFromReceivedEvent = messages.filter(\n (it) => nextMessageIds.indexOf(it.messageId) === -1,\n );\n updateNextMessages(nonAddedMessagesFromReceivedEvent, false, sdk.currentUser.userId);\n }\n\n // NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.\n // This is not intended behavior but not bugs.\n if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n updateMessages(messages, false, sdk.currentUser.userId);\n }\n },\n onMessagesDeleted: (_, __, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNextMessages(messageIds, []);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, eventChannel) => {\n if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {\n forceUpdate();\n }\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\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 }\n callback?.();\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\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, channel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy 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'] = useFreshCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n });\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(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'] = useFreshCallback(async () => {\n const messageCandidates: SendbirdBaseMessage[] = [];\n\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n messageCandidates.push(...fetchedList);\n } catch {}\n }\n\n if (nextMessages.length > 0) {\n messageCandidates.push(...nextMessages);\n }\n\n if (messageCandidates.length > 0) {\n updateMessages(messageCandidates, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\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, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['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 as SendbirdFileMessage);\n }\n })\n .onFailed((err, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['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<UseGroupChannelMessages>['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<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(\n async (failedMessage) => {\n const resentMessage = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);\n },\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['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 try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","useGroupChannelMessagesWithCollection","sdk","userId","options","forceUpdate","collectionRef","handlerId","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","undefined","e","warn","init","uid","callback","current","dispose","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","__","onMessagesUpdated","nextMessageIds","map","it","messageId","nonAddedMessagesFromReceivedEvent","indexOf","onMessagesDeleted","messageIds","onChannelDeleted","onChannelUpdated","eventChannel","isGroupChannel","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","messageCandidates","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","_failedMessage","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resentMessage","resendUserMessage","resendFileMessage","deleteMessage","message","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 SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\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\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const forceUpdate = useForceUpdate();\n const collectionRef = useRef<SendbirdMessageCollection>();\n const handlerId = useUniqHandlerId('useGroupChannelMessagesWithCollection');\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 channelMarkAsRead = async (source?: MessageEventSource) => {\n try {\n switch (source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n case undefined:\n await confirmAndMarkAsRead([channel]);\n break;\n }\n } catch (e) {\n Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);\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(channel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAsRead();\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, __, messages) => {\n channelMarkAsRead(_.source);\n updateNextMessages(messages, false, sdk.currentUser.userId);\n },\n onMessagesUpdated: (_, __, messages) => {\n channelMarkAsRead(_.source);\n\n // NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.\n if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n const nextMessageIds = nextMessages.map((it) => it.messageId);\n const nonAddedMessagesFromReceivedEvent = messages.filter(\n (it) => nextMessageIds.indexOf(it.messageId) === -1,\n );\n updateNextMessages(nonAddedMessagesFromReceivedEvent, false, sdk.currentUser.userId);\n }\n\n // NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.\n // This is not intended behavior but not bugs.\n if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n updateMessages(messages, false, sdk.currentUser.userId);\n }\n },\n onMessagesDeleted: (_, __, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNextMessages(messageIds, []);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, eventChannel) => {\n if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {\n forceUpdate();\n }\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('[useGroupChannelMessagesWithCollection/onCacheResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);\n\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 }\n callback?.();\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);\n\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, channel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, handlerId, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy 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'] = useFreshCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n });\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(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'] = useFreshCallback(async () => {\n const messageCandidates: SendbirdBaseMessage[] = [];\n\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n messageCandidates.push(...fetchedList);\n } catch {}\n }\n\n if (nextMessages.length > 0) {\n messageCandidates.push(...nextMessages);\n }\n\n if (messageCandidates.length > 0) {\n updateMessages(messageCandidates, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\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, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['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 as SendbirdFileMessage);\n }\n })\n .onFailed((err, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['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<UseGroupChannelMessages>['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<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(\n async (failedMessage) => {\n const resentMessage = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);\n },\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['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 try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback, useRef } from 'react';
|
|
2
|
-
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useAsyncEffect, useForceUpdate } from '@sendbird/uikit-utils';
|
|
2
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useAsyncEffect, useForceUpdate, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
3
3
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
4
4
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
5
5
|
|
|
@@ -11,9 +11,9 @@ const createMessageQuery = (channel, creator) => {
|
|
|
11
11
|
});
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
const HOOK_NAME = 'useGroupChannelMessagesWithQuery';
|
|
15
14
|
export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
|
|
16
15
|
const queryRef = useRef();
|
|
16
|
+
const handlerId = useUniqHandlerId('useGroupChannelMessagesWithQuery');
|
|
17
17
|
const forceUpdate = useForceUpdate();
|
|
18
18
|
const {
|
|
19
19
|
loading,
|
|
@@ -33,7 +33,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
33
33
|
try {
|
|
34
34
|
await confirmAndMarkAsRead([channel]);
|
|
35
35
|
} catch (e) {
|
|
36
|
-
Logger.warn(
|
|
36
|
+
Logger.warn('[useGroupChannelMessagesWithQuery/channelMarkAsRead]', e);
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
|
|
@@ -42,7 +42,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
42
42
|
var _queryRef$current;
|
|
43
43
|
|
|
44
44
|
queryRef.current = createMessageQuery(channel, options === null || options === void 0 ? void 0 : options.queryCreator);
|
|
45
|
-
channelMarkAsRead()
|
|
45
|
+
channelMarkAsRead();
|
|
46
46
|
|
|
47
47
|
if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
|
|
48
48
|
var _queryRef$current2;
|
|
@@ -61,7 +61,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
useChannelHandler(sdk,
|
|
64
|
+
useChannelHandler(sdk, handlerId, {
|
|
65
65
|
// Messages
|
|
66
66
|
onMessageReceived(eventChannel, message) {
|
|
67
67
|
if (isDifferentChannel(channel, eventChannel)) return;
|
|
@@ -158,7 +158,8 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
158
158
|
updateNextMessages([sentMessage], false, sdk.currentUser.userId);
|
|
159
159
|
resolve(sentMessage);
|
|
160
160
|
}
|
|
161
|
-
}).onFailed(err => {
|
|
161
|
+
}).onFailed((err, sentMessage) => {
|
|
162
|
+
updateNextMessages([sentMessage], false, sdk.currentUser.userId);
|
|
162
163
|
reject(err);
|
|
163
164
|
});
|
|
164
165
|
});
|
|
@@ -175,7 +176,8 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
175
176
|
updateNextMessages([sentMessage], false, sdk.currentUser.userId);
|
|
176
177
|
resolve(sentMessage);
|
|
177
178
|
}
|
|
178
|
-
}).onFailed(err => {
|
|
179
|
+
}).onFailed((err, sentMessage) => {
|
|
180
|
+
updateNextMessages([sentMessage], false, sdk.currentUser.userId);
|
|
179
181
|
reject(err);
|
|
180
182
|
});
|
|
181
183
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useRef","Logger","confirmAndMarkAsRead","isDifferentChannel","useAsyncEffect","useForceUpdate","useChannelHandler","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","queryRef","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","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","foundChannel","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 {\n SendbirdBaseChannel,\n SendbirdGroupChannel,\n SendbirdPreviousMessageListQuery,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\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 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 channelMarkAsRead = async () => {\n try {\n await confirmAndMarkAsRead([channel]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAsRead]`, e);\n }\n };\n\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n channelMarkAsRead().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, channel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, HOOK_NAME, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelMarkAsRead();\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const foundChannel = channels.find((c) => !isDifferentChannel(c, channel));\n if (foundChannel) channelUpdater(foundChannel);\n },\n onChannelDeleted(channelUrl: string) {\n if (channel.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(channel, 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 channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err) => {\n reject(err);\n });\n });\n },\n [channel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err) => {\n reject(err);\n });\n });\n },\n [channel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [channel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [channel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateNextMessages([message], false, sdk.currentUser.userId);\n },\n [channel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n 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 [channel],\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useCallback","useRef","Logger","confirmAndMarkAsRead","isDifferentChannel","useAsyncEffect","useForceUpdate","useUniqHandlerId","useChannelHandler","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","useGroupChannelMessagesWithQuery","sdk","userId","options","queryRef","handlerId","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","e","warn","init","uid","current","queryCreator","hasNext","list","load","currentUser","url","channelUpdater","isGroupChannel","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","foundChannel","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 {\n SendbirdBaseChannel,\n SendbirdGroupChannel,\n SendbirdPreviousMessageListQuery,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\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\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n const handlerId = useUniqHandlerId('useGroupChannelMessagesWithQuery');\n\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 channelMarkAsRead = async () => {\n try {\n await confirmAndMarkAsRead([channel]);\n } catch (e) {\n Logger.warn('[useGroupChannelMessagesWithQuery/channelMarkAsRead]', e);\n }\n };\n\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n channelMarkAsRead();\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, channel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, handlerId, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelMarkAsRead();\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const foundChannel = channels.find((c) => !isDifferentChannel(c, channel));\n if (foundChannel) channelUpdater(foundChannel);\n },\n onChannelDeleted(channelUrl: string) {\n if (channel.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(channel, 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 channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n [channel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n [channel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [channel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [channel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateNextMessages([message], false, sdk.currentUser.userId);\n },\n [channel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n 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 [channel],\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { useAsyncEffect } from '@sendbird/uikit-utils';
|
|
3
|
+
export const useOpenChannel = (sdk, channelUrl) => {
|
|
4
|
+
const [channel, setChannel] = useState();
|
|
5
|
+
const [loading, setLoading] = useState(true);
|
|
6
|
+
const [error, setError] = useState();
|
|
7
|
+
useAsyncEffect(async () => {
|
|
8
|
+
try {
|
|
9
|
+
setChannel(await sdk.openChannel.getChannel(channelUrl));
|
|
10
|
+
} catch (e) {
|
|
11
|
+
setError(e);
|
|
12
|
+
} finally {
|
|
13
|
+
setLoading(false);
|
|
14
|
+
}
|
|
15
|
+
}, []);
|
|
16
|
+
return {
|
|
17
|
+
channel,
|
|
18
|
+
loading,
|
|
19
|
+
error
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=useOpenChannel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useAsyncEffect","useOpenChannel","sdk","channelUrl","channel","setChannel","loading","setLoading","error","setError","openChannel","getChannel","e"],"sources":["useOpenChannel.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { SendbirdChatSDK, SendbirdOpenChannel, useAsyncEffect } from '@sendbird/uikit-utils';\n\nexport const useOpenChannel = (sdk: SendbirdChatSDK, channelUrl: string) => {\n const [channel, setChannel] = useState<SendbirdOpenChannel>();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<unknown>();\n\n useAsyncEffect(async () => {\n try {\n setChannel(await sdk.openChannel.getChannel(channelUrl));\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { channel, loading, error };\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAEA,SAA+CC,cAA/C,QAAqE,uBAArE;AAEA,OAAO,MAAMC,cAAc,GAAG,CAACC,GAAD,EAAuBC,UAAvB,KAA8C;EAC1E,MAAM,CAACC,OAAD,EAAUC,UAAV,IAAwBN,QAAQ,EAAtC;EACA,MAAM,CAACO,OAAD,EAAUC,UAAV,IAAwBR,QAAQ,CAAC,IAAD,CAAtC;EACA,MAAM,CAACS,KAAD,EAAQC,QAAR,IAAoBV,QAAQ,EAAlC;EAEAC,cAAc,CAAC,YAAY;IACzB,IAAI;MACFK,UAAU,CAAC,MAAMH,GAAG,CAACQ,WAAJ,CAAgBC,UAAhB,CAA2BR,UAA3B,CAAP,CAAV;IACD,CAFD,CAEE,OAAOS,CAAP,EAAU;MACVH,QAAQ,CAACG,CAAD,CAAR;IACD,CAJD,SAIU;MACRL,UAAU,CAAC,KAAD,CAAV;IACD;EACF,CARa,EAQX,EARW,CAAd;EAUA,OAAO;IAAEH,OAAF;IAAWE,OAAX;IAAoBE;EAApB,CAAP;AACD,CAhBM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useOpenChannelListWithQuery","useOpenChannelList","sdk","userId","options"],"sources":["index.ts"],"sourcesContent":["import type { UseOpenChannelList } from '../../types';\nimport { useOpenChannelListWithQuery } from './useOpenChannelListWithQuery';\n\nexport const useOpenChannelList: UseOpenChannelList = (sdk, userId, options) => {\n return useOpenChannelListWithQuery(sdk, userId, options);\n};\n"],"mappings":"AACA,SAASA,2BAAT,QAA4C,+BAA5C;AAEA,OAAO,MAAMC,kBAAsC,GAAG,CAACC,GAAD,EAAMC,MAAN,EAAcC,OAAd,KAA0B;EAC9E,OAAOJ,2BAA2B,CAACE,GAAD,EAAMC,MAAN,EAAcC,OAAd,CAAlC;AACD,CAFM"}
|