stream-chat-react-native-core 5.24.0-beta.1 → 5.24.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +52 -18
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/ChannelPreview.js +4 -1
- package/lib/commonjs/components/ChannelPreview/ChannelPreview.js.map +1 -1
- package/lib/commonjs/components/MessageList/MessageList.js +31 -30
- package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +37 -35
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/i18n/fr.json +12 -12
- package/lib/commonjs/i18n/hi.json +12 -12
- package/lib/commonjs/i18n/it.json +12 -12
- package/lib/commonjs/i18n/nl.json +12 -12
- package/lib/commonjs/i18n/ru.json +12 -12
- package/lib/commonjs/i18n/tr.json +12 -12
- package/lib/commonjs/utils/utils.js +1 -3
- package/lib/commonjs/utils/utils.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +52 -18
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/module/components/ChannelPreview/ChannelPreview.js +4 -1
- package/lib/module/components/ChannelPreview/ChannelPreview.js.map +1 -1
- package/lib/module/components/MessageList/MessageList.js +31 -30
- package/lib/module/components/MessageList/MessageList.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +37 -35
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/i18n/fr.json +12 -12
- package/lib/module/i18n/hi.json +12 -12
- package/lib/module/i18n/it.json +12 -12
- package/lib/module/i18n/nl.json +12 -12
- package/lib/module/i18n/ru.json +12 -12
- package/lib/module/i18n/tr.json +12 -12
- package/lib/module/utils/utils.js +1 -3
- package/lib/module/utils/utils.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/ChannelPreview/ChannelPreview.d.ts +1 -1
- package/lib/typescript/i18n/fr.json +12 -12
- package/lib/typescript/i18n/hi.json +12 -12
- package/lib/typescript/i18n/it.json +12 -12
- package/lib/typescript/i18n/nl.json +12 -12
- package/lib/typescript/i18n/ru.json +12 -12
- package/lib/typescript/i18n/tr.json +12 -12
- package/lib/typescript/utils/utils.d.ts +0 -1
- package/package.json +1 -1
- package/src/components/ChannelList/hooks/usePaginatedChannels.ts +6 -3
- package/src/components/ChannelPreview/ChannelPreview.tsx +5 -5
- package/src/components/MessageList/MessageList.tsx +11 -3
- package/src/contexts/messageInputContext/MessageInputContext.tsx +3 -2
- package/src/i18n/fr.json +12 -12
- package/src/i18n/hi.json +12 -12
- package/src/i18n/it.json +12 -12
- package/src/i18n/nl.json +12 -12
- package/src/i18n/ru.json +12 -12
- package/src/i18n/tr.json +12 -12
- package/src/utils/utils.ts +0 -2
- package/src/version.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_emojiRegex","_interopRequireDefault","require","_debounce","_compiled","FileState","Object","freeze","FINISHED","NOT_SUPPORTED","UPLOAD_FAILED","UPLOADED","UPLOADING","exports","ProgressIndicatorTypes","IN_PROGRESS","INACTIVE","RETRY","MessageStatusTypes","FAILED","RECEIVED","SENDING","getIndicatorTypeForFileState","fileState","enableOfflineSupport","_indicatorMap","indicatorMap","_defineProperty2","isBlockedMessage","message","pattern","type","text","test","defaultAutoCompleteSuggestionsLimit","defaultMentionAllAppUsersQuery","filters","options","sort","isUserResponse","user","undefined","getCommands","channel","_channel$getConfig","getConfig","commands","getMembers","members","state","values","length","filter","member","map","getWatchers","watchers","_toConsumableArray2","getMembersAndWatchers","users","concat","reduce","acc","cur","id","queryMembers","_ref","_asyncToGenerator2","_regenerator","mark","_callee","query","onReady","_options$limit","limit","response","_users","_args","arguments","wrap","_callee$","_context","prev","next","name","$autocomplete","sent","forEach","push","stop","_x","_x2","_x3","apply","queryMembersDebounced","debounce","leading","trailing","queryUsers","_ref2","_callee2","client","_options$limit2","_options$mentionAllAp","mentionAllAppUsersQuery","_users2","_args2","_callee2$","_context2","_extends2","$ne","userID","$or","_x4","_x5","_x6","queryUsersDebounced","isCommandTrigger","trigger","isEmojiTrigger","isMentionTrigger","ACITriggerSettings","_ref3","onMentionSelectItem","dataProvider","indexOf","_options$limit3","selectedCommands","command","_command$name","a","b","_a$name","_b$name","nameA","toLowerCase","nameB","result","slice","output","entity","caretPosition","key","_","compiledEmojis","emojiArray","names","some","includes","emoji","emojiLib","skin_variations","tone","index","unicode","callback","item","mentionAllAppUsersEnabled","data","matchingUsers","_user$name","makeImageCompatibleUrl","url","trim","getUrlWithoutParams","indexOfQuestion","substring","isLocalUrl","generateRandomId","Number","Math","random","toString","replace","hasOnlyEmojis","emojiOnlyString","matchAll","EmojiRegex","join","originalTextWithNoSpaces","replaceAll","e","urlRegex","stringifyMessage","_ref4","deleted_at","latest_reactions","reply_count","status","updated_at","_ref5","toISOString","reduceMessagesToString","messages"],"sources":["utils.ts"],"sourcesContent":["import type React from 'react';\n\nimport EmojiRegex from 'emoji-regex';\nimport type { DebouncedFunc } from 'lodash';\nimport debounce from 'lodash/debounce';\nimport type {\n Channel,\n ChannelMemberAPIResponse,\n ChannelMemberResponse,\n CommandResponse,\n FormatMessageResponse,\n StreamChat,\n UserResponse,\n} from 'stream-chat';\n\nimport type { MessageType } from '../components/MessageList/hooks/useMessageList';\nimport type { MentionAllAppUsersQuery } from '../contexts/messageInputContext/MessageInputContext';\nimport type {\n SuggestionCommand,\n SuggestionComponentType,\n SuggestionUser,\n} from '../contexts/suggestionsContext/SuggestionsContext';\nimport { compiledEmojis, Emoji } from '../emoji-data/compiled';\nimport type { IconProps } from '../icons/utils/base';\nimport type { TableRowJoinedUser } from '../store/types';\nimport type { DefaultStreamChatGenerics, ValueOf } from '../types/types';\n\nexport type ReactionData = {\n Icon: React.FC<IconProps>;\n type: string;\n};\n\nexport const FileState = Object.freeze({\n // finished and uploaded state are the same thing. First is set on frontend,\n // while later is set on backend side\n // TODO: Unify both of them\n FINISHED: 'finished',\n NOT_SUPPORTED: 'not_supported',\n UPLOAD_FAILED: 'upload_failed',\n UPLOADED: 'uploaded',\n UPLOADING: 'uploading',\n});\n\nexport const ProgressIndicatorTypes: {\n IN_PROGRESS: 'in_progress';\n INACTIVE: 'inactive';\n NOT_SUPPORTED: 'not_supported';\n RETRY: 'retry';\n} = Object.freeze({\n IN_PROGRESS: 'in_progress',\n INACTIVE: 'inactive',\n NOT_SUPPORTED: 'not_supported',\n RETRY: 'retry',\n});\n\nexport const MessageStatusTypes = {\n FAILED: 'failed',\n RECEIVED: 'received',\n SENDING: 'sending',\n};\n\nexport type FileStateValue = typeof FileState[keyof typeof FileState];\n\ntype Progress = ValueOf<typeof ProgressIndicatorTypes>;\ntype IndicatorStatesMap = Record<ValueOf<typeof FileState>, Progress | null>;\n\nexport const getIndicatorTypeForFileState = (\n fileState: FileStateValue,\n enableOfflineSupport: boolean,\n): Progress | null => {\n const indicatorMap: IndicatorStatesMap = {\n [FileState.UPLOADING]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.IN_PROGRESS,\n // If offline support is disabled, then there is no need\n [FileState.UPLOAD_FAILED]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.RETRY,\n [FileState.NOT_SUPPORTED]: ProgressIndicatorTypes.NOT_SUPPORTED,\n [FileState.UPLOADED]: ProgressIndicatorTypes.INACTIVE,\n [FileState.FINISHED]: ProgressIndicatorTypes.INACTIVE,\n };\n\n return indicatorMap[fileState];\n};\n\nexport const isBlockedMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: MessageType<StreamChatGenerics> | TableRowJoinedUser<'messages'>,\n) => {\n // The only indicator for the blocked message is its message type is error and that the message text contains \"Message was blocked by moderation policies\".\n const pattern = /\\bMessage was blocked by moderation policies\\b/;\n return message.type === 'error' && message.text && pattern.test(message.text);\n};\n\nconst defaultAutoCompleteSuggestionsLimit = 10;\nconst defaultMentionAllAppUsersQuery = {\n filters: {},\n options: {},\n sort: {},\n};\n\nconst isUserResponse = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n user: SuggestionUser<StreamChatGenerics> | undefined,\n): user is SuggestionUser<StreamChatGenerics> =>\n (user as SuggestionUser<StreamChatGenerics>) !== undefined;\n\nconst getCommands = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => channel.getConfig()?.commands || [];\n\nconst getMembers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const members = channel.state.members;\n\n return Object.values(members).length\n ? (\n Object.values(members).filter((member) => member.user) as Array<\n ChannelMemberResponse<StreamChatGenerics> & { user: UserResponse<StreamChatGenerics> }\n >\n ).map((member) => member.user)\n : [];\n};\n\nconst getWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const watchers = channel.state.watchers;\n return Object.values(watchers).length ? [...Object.values(watchers)] : [];\n};\n\nconst getMembersAndWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const users = [...getMembers(channel), ...getWatchers(channel)];\n\n return Object.values(\n users.reduce((acc, cur) => {\n if (!acc[cur.id]) {\n acc[cur.id] = cur;\n }\n\n return acc;\n }, {} as { [key: string]: SuggestionUser<StreamChatGenerics> }),\n );\n};\n\nconst queryMembers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n } = {},\n): Promise<void> => {\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n\n if (typeof query === 'string') {\n const response = (await (channel as unknown as Channel).queryMembers(\n {\n name: { $autocomplete: query },\n },\n {},\n { limit },\n )) as ChannelMemberAPIResponse<StreamChatGenerics>;\n\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.members.forEach((member) => isUserResponse(member.user) && users.push(member.user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryMembersDebounced = debounce(queryMembers, 200, {\n leading: false,\n trailing: true,\n});\n\nconst queryUsers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n } = {},\n): Promise<void> => {\n if (typeof query === 'string') {\n const {\n limit = defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersQuery = defaultMentionAllAppUsersQuery,\n } = options;\n const filters = {\n id: { $ne: client.userID },\n ...mentionAllAppUsersQuery?.filters,\n };\n\n if (query) {\n // @ts-ignore\n filters.$or = [{ id: { $autocomplete: query } }, { name: { $autocomplete: query } }];\n }\n\n const response = await client.queryUsers(\n // @ts-ignore\n filters,\n { id: 1, ...mentionAllAppUsersQuery?.sort },\n { limit, ...mentionAllAppUsersQuery?.options },\n );\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.users.forEach((user) => isUserResponse(user) && users.push(user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryUsersDebounced = debounce(queryUsers, 200, {\n leading: false,\n trailing: true,\n});\n\nexport const isCommandTrigger = (trigger: Trigger): trigger is '/' => trigger === '/';\n\nexport const isEmojiTrigger = (trigger: Trigger): trigger is ':' => trigger === ':';\n\nexport const isMentionTrigger = (trigger: Trigger): trigger is '@' => trigger === '@';\n\nexport type Trigger = '/' | '@' | ':';\n\nexport type TriggerSettings<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n '/'?: {\n dataProvider: (\n query: CommandResponse<StreamChatGenerics>['name'],\n text: string,\n onReady?: (\n data: CommandResponse<StreamChatGenerics>[],\n q: CommandResponse<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n },\n ) => SuggestionCommand<StreamChatGenerics>[];\n output: (entity: CommandResponse<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n ':'?: {\n dataProvider: (\n query: Emoji['name'],\n _: string,\n onReady?: (data: Emoji[], q: Emoji['name']) => void,\n ) => Emoji[];\n output: (entity: Emoji) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n '@'?: {\n callback: (item: SuggestionUser<StreamChatGenerics>) => void;\n dataProvider: (\n query: SuggestionUser<StreamChatGenerics>['name'],\n _: string,\n onReady?: (\n data: SuggestionUser<StreamChatGenerics>[],\n q: SuggestionUser<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersEnabled?: boolean;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n ) => SuggestionUser<StreamChatGenerics>[] | Promise<void> | void;\n output: (entity: SuggestionUser<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n};\n\nexport type ACITriggerSettingsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n onMentionSelectItem: (item: SuggestionUser<StreamChatGenerics>) => void;\n};\n\nexport type QueryUsersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n) => Promise<void>;\n\nexport type QueryMembersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n },\n) => Promise<void>;\n\n/**\n * ACI = AutoCompleteInput\n *\n * DataProvider accepts `onReady` function, which will execute once the data is ready.\n * Another approach would have been to simply return the data from dataProvider and let the\n * component await for it and then execute the required logic. We are going for callback instead\n * of async-await since we have debounce function in dataProvider. Which will delay the execution\n * of api call on trailing end of debounce (lets call it a1) but will return with result of\n * previous call without waiting for a1. So in this case, we want to execute onReady, when trailing\n * end of debounce executes.\n */\nexport const ACITriggerSettings = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n onMentionSelectItem,\n}: ACITriggerSettingsParams<StreamChatGenerics>): TriggerSettings<StreamChatGenerics> => ({\n '/': {\n dataProvider: (query, text, onReady, options = {}) => {\n if (text.indexOf('/') !== 0) return [];\n\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n const selectedCommands = !query\n ? getCommands(channel)\n : getCommands(channel).filter((command) => query && command.name?.indexOf(query) !== -1);\n\n // sort alphabetically unless the you're matching the first char\n selectedCommands.sort((a, b) => {\n let nameA = a.name?.toLowerCase() || '';\n let nameB = b.name?.toLowerCase() || '';\n if (query && nameA.indexOf(query) === 0) {\n nameA = `0${nameA}`;\n }\n if (query && nameB.indexOf(query) === 0) {\n nameB = `0${nameB}`;\n }\n if (nameA < nameB) return -1;\n if (nameA > nameB) return 1;\n\n return 0;\n });\n\n const result = selectedCommands.slice(0, limit);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: `${entity.name}`,\n text: `/${entity.name}`,\n }),\n type: 'command',\n },\n ':': {\n dataProvider: (query, _, onReady) => {\n if (!query) return [];\n\n const result = compiledEmojis.emojiArray.reduce((acc, cur) => {\n if (acc.length >= 10) return acc;\n\n if (cur.names.some((name) => name.includes(query))) {\n const emoji = compiledEmojis.emojiLib[cur.name];\n // Since there can be no emojiLib for the current name we need to check for it being undefined\n if (emoji?.skin_variations) {\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-1`,\n skin_variations: undefined,\n });\n emoji.skin_variations.forEach((tone, index) =>\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-${index + 2}`,\n skin_variations: undefined,\n unicode: tone,\n }),\n );\n } else if (emoji) {\n acc.push(emoji);\n }\n }\n\n return acc;\n }, [] as Emoji[]);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.name,\n text: entity.unicode,\n }),\n type: 'emoji',\n },\n '@': {\n callback: (item) => {\n onMentionSelectItem(item);\n },\n dataProvider: (\n query,\n _,\n onReady,\n options = {\n limit: defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersEnabled: false,\n mentionAllAppUsersQuery: defaultMentionAllAppUsersQuery,\n },\n ) => {\n if (options?.mentionAllAppUsersEnabled) {\n return (queryUsersDebounced as DebouncedFunc<QueryUsersFunction<StreamChatGenerics>>)(\n client,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n mentionAllAppUsersQuery: options.mentionAllAppUsersQuery,\n },\n );\n }\n\n /**\n * By default, we return maximum 100 members via queryChannels api call.\n * Thus it is safe to assume, that if number of members in channel.state is < 100,\n * then all the members are already available on client side and we don't need to\n * make any api call to queryMembers endpoint.\n */\n if (!query || Object.values(channel.state.members).length < 100) {\n const users = getMembersAndWatchers(channel);\n\n const matchingUsers = users.filter((user) => {\n if (!query) return true;\n if (user.name?.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n if (user.id.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n return false;\n });\n\n const data = matchingUsers.slice(0, options?.limit);\n\n if (onReady) {\n onReady(data, query);\n }\n\n return data;\n }\n\n return (queryMembersDebounced as DebouncedFunc<QueryMembersFunction<StreamChatGenerics>>)(\n channel,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n },\n );\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.id,\n text: `@${entity.name || entity.id}`,\n }),\n type: 'mention',\n },\n});\n\nexport const makeImageCompatibleUrl = (url: string) =>\n (url.indexOf('//') === 0 ? `https:${url}` : url).trim();\n\nexport const getUrlWithoutParams = (url?: string) => {\n if (!url) return url;\n\n const indexOfQuestion = url.indexOf('?');\n if (indexOfQuestion === -1) return url;\n\n return url.substring(0, url.indexOf('?'));\n};\n\nexport const isLocalUrl = (url: string) => url.indexOf('http') !== 0;\n\nexport const generateRandomId = (a = ''): string =>\n a\n ? /* eslint-disable no-bitwise */\n ((Number(a) ^ (Math.random() * 16)) >> (Number(a) / 4)).toString(16)\n : `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateRandomId);\n\n/*\n * Returns true if the message text only contains emojis\n */\nexport const hasOnlyEmojis = (text: string) => {\n try {\n // get all emojis in the string\n const emojiOnlyString = [...text.matchAll(EmojiRegex())].join('');\n // remove all spaces from original text\n const originalTextWithNoSpaces = text.replaceAll(/\\s/g, '');\n // check if both are the same\n return (\n emojiOnlyString.length !== 0 && emojiOnlyString.length === originalTextWithNoSpaces.length\n );\n } catch (e) {\n return false;\n }\n};\nexport const urlRegex =\n /(?:\\s|^)((?:https?:\\/\\/)?(?:[a-z0-9-]+(?:\\.[a-z0-9-]+)+)(?::[0-9]+)?(?:\\/(?:[^\\s]+)?)?)/g;\n\n/**\n * Stringifies a message object\n * @param {FormatMessageResponse<StreamChatGenerics>} message - the message object to be stringified\n * @returns {string} The stringified message\n */\nconst stringifyMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n deleted_at,\n latest_reactions,\n reply_count,\n status,\n type,\n updated_at,\n}: FormatMessageResponse<StreamChatGenerics>): string =>\n `${type}${deleted_at}${\n latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''\n }${reply_count}${status}${updated_at?.toISOString?.() || updated_at}`;\n\n/**\n * Reduces a list of messages to strings that are used in useEffect & useMemo\n * @param {messages} messages - the array of messages to be compared\n * @returns {string} The mapped message string\n */\nexport const reduceMessagesToString = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n messages: FormatMessageResponse<StreamChatGenerics>[],\n): string => messages.map(stringifyMessage).join();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_emojiRegex","_interopRequireDefault","require","_debounce","_compiled","FileState","Object","freeze","FINISHED","NOT_SUPPORTED","UPLOAD_FAILED","UPLOADED","UPLOADING","exports","ProgressIndicatorTypes","IN_PROGRESS","INACTIVE","RETRY","MessageStatusTypes","FAILED","RECEIVED","SENDING","getIndicatorTypeForFileState","fileState","enableOfflineSupport","_indicatorMap","indicatorMap","_defineProperty2","isBlockedMessage","message","pattern","type","text","test","defaultAutoCompleteSuggestionsLimit","defaultMentionAllAppUsersQuery","filters","options","sort","isUserResponse","user","undefined","getCommands","channel","_channel$getConfig","getConfig","commands","getMembers","members","state","values","length","filter","member","map","getWatchers","watchers","_toConsumableArray2","getMembersAndWatchers","users","concat","reduce","acc","cur","id","queryMembers","_ref","_asyncToGenerator2","_regenerator","mark","_callee","query","onReady","_options$limit","limit","response","_users","_args","arguments","wrap","_callee$","_context","prev","next","name","$autocomplete","sent","forEach","push","stop","_x","_x2","_x3","apply","queryMembersDebounced","debounce","leading","trailing","queryUsers","_ref2","_callee2","client","_options$limit2","_options$mentionAllAp","mentionAllAppUsersQuery","_users2","_args2","_callee2$","_context2","_extends2","$ne","userID","$or","_x4","_x5","_x6","queryUsersDebounced","isCommandTrigger","trigger","isEmojiTrigger","isMentionTrigger","ACITriggerSettings","_ref3","onMentionSelectItem","dataProvider","indexOf","_options$limit3","selectedCommands","command","_command$name","a","b","_a$name","_b$name","nameA","toLowerCase","nameB","result","slice","output","entity","caretPosition","key","_","compiledEmojis","emojiArray","names","some","includes","emoji","emojiLib","skin_variations","tone","index","unicode","callback","item","mentionAllAppUsersEnabled","data","matchingUsers","_user$name","makeImageCompatibleUrl","url","trim","getUrlWithoutParams","indexOfQuestion","substring","isLocalUrl","generateRandomId","Number","Math","random","toString","replace","hasOnlyEmojis","emojiOnlyString","matchAll","EmojiRegex","join","originalTextWithNoSpaces","replaceAll","e","stringifyMessage","_ref4","deleted_at","latest_reactions","reply_count","status","updated_at","_ref5","toISOString","reduceMessagesToString","messages"],"sources":["utils.ts"],"sourcesContent":["import type React from 'react';\n\nimport EmojiRegex from 'emoji-regex';\nimport type { DebouncedFunc } from 'lodash';\nimport debounce from 'lodash/debounce';\nimport type {\n Channel,\n ChannelMemberAPIResponse,\n ChannelMemberResponse,\n CommandResponse,\n FormatMessageResponse,\n StreamChat,\n UserResponse,\n} from 'stream-chat';\n\nimport type { MessageType } from '../components/MessageList/hooks/useMessageList';\nimport type { MentionAllAppUsersQuery } from '../contexts/messageInputContext/MessageInputContext';\nimport type {\n SuggestionCommand,\n SuggestionComponentType,\n SuggestionUser,\n} from '../contexts/suggestionsContext/SuggestionsContext';\nimport { compiledEmojis, Emoji } from '../emoji-data/compiled';\nimport type { IconProps } from '../icons/utils/base';\nimport type { TableRowJoinedUser } from '../store/types';\nimport type { DefaultStreamChatGenerics, ValueOf } from '../types/types';\n\nexport type ReactionData = {\n Icon: React.FC<IconProps>;\n type: string;\n};\n\nexport const FileState = Object.freeze({\n // finished and uploaded state are the same thing. First is set on frontend,\n // while later is set on backend side\n // TODO: Unify both of them\n FINISHED: 'finished',\n NOT_SUPPORTED: 'not_supported',\n UPLOAD_FAILED: 'upload_failed',\n UPLOADED: 'uploaded',\n UPLOADING: 'uploading',\n});\n\nexport const ProgressIndicatorTypes: {\n IN_PROGRESS: 'in_progress';\n INACTIVE: 'inactive';\n NOT_SUPPORTED: 'not_supported';\n RETRY: 'retry';\n} = Object.freeze({\n IN_PROGRESS: 'in_progress',\n INACTIVE: 'inactive',\n NOT_SUPPORTED: 'not_supported',\n RETRY: 'retry',\n});\n\nexport const MessageStatusTypes = {\n FAILED: 'failed',\n RECEIVED: 'received',\n SENDING: 'sending',\n};\n\nexport type FileStateValue = typeof FileState[keyof typeof FileState];\n\ntype Progress = ValueOf<typeof ProgressIndicatorTypes>;\ntype IndicatorStatesMap = Record<ValueOf<typeof FileState>, Progress | null>;\n\nexport const getIndicatorTypeForFileState = (\n fileState: FileStateValue,\n enableOfflineSupport: boolean,\n): Progress | null => {\n const indicatorMap: IndicatorStatesMap = {\n [FileState.UPLOADING]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.IN_PROGRESS,\n // If offline support is disabled, then there is no need\n [FileState.UPLOAD_FAILED]: enableOfflineSupport\n ? ProgressIndicatorTypes.INACTIVE\n : ProgressIndicatorTypes.RETRY,\n [FileState.NOT_SUPPORTED]: ProgressIndicatorTypes.NOT_SUPPORTED,\n [FileState.UPLOADED]: ProgressIndicatorTypes.INACTIVE,\n [FileState.FINISHED]: ProgressIndicatorTypes.INACTIVE,\n };\n\n return indicatorMap[fileState];\n};\n\nexport const isBlockedMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: MessageType<StreamChatGenerics> | TableRowJoinedUser<'messages'>,\n) => {\n // The only indicator for the blocked message is its message type is error and that the message text contains \"Message was blocked by moderation policies\".\n const pattern = /\\bMessage was blocked by moderation policies\\b/;\n return message.type === 'error' && message.text && pattern.test(message.text);\n};\n\nconst defaultAutoCompleteSuggestionsLimit = 10;\nconst defaultMentionAllAppUsersQuery = {\n filters: {},\n options: {},\n sort: {},\n};\n\nconst isUserResponse = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n user: SuggestionUser<StreamChatGenerics> | undefined,\n): user is SuggestionUser<StreamChatGenerics> =>\n (user as SuggestionUser<StreamChatGenerics>) !== undefined;\n\nconst getCommands = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => channel.getConfig()?.commands || [];\n\nconst getMembers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const members = channel.state.members;\n\n return Object.values(members).length\n ? (\n Object.values(members).filter((member) => member.user) as Array<\n ChannelMemberResponse<StreamChatGenerics> & { user: UserResponse<StreamChatGenerics> }\n >\n ).map((member) => member.user)\n : [];\n};\n\nconst getWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const watchers = channel.state.watchers;\n return Object.values(watchers).length ? [...Object.values(watchers)] : [];\n};\n\nconst getMembersAndWatchers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n) => {\n const users = [...getMembers(channel), ...getWatchers(channel)];\n\n return Object.values(\n users.reduce((acc, cur) => {\n if (!acc[cur.id]) {\n acc[cur.id] = cur;\n }\n\n return acc;\n }, {} as { [key: string]: SuggestionUser<StreamChatGenerics> }),\n );\n};\n\nconst queryMembers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n } = {},\n): Promise<void> => {\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n\n if (typeof query === 'string') {\n const response = (await (channel as unknown as Channel).queryMembers(\n {\n name: { $autocomplete: query },\n },\n {},\n { limit },\n )) as ChannelMemberAPIResponse<StreamChatGenerics>;\n\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.members.forEach((member) => isUserResponse(member.user) && users.push(member.user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryMembersDebounced = debounce(queryMembers, 200, {\n leading: false,\n trailing: true,\n});\n\nconst queryUsers = async <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n } = {},\n): Promise<void> => {\n if (typeof query === 'string') {\n const {\n limit = defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersQuery = defaultMentionAllAppUsersQuery,\n } = options;\n const filters = {\n id: { $ne: client.userID },\n ...mentionAllAppUsersQuery?.filters,\n };\n\n if (query) {\n // @ts-ignore\n filters.$or = [{ id: { $autocomplete: query } }, { name: { $autocomplete: query } }];\n }\n\n const response = await client.queryUsers(\n // @ts-ignore\n filters,\n { id: 1, ...mentionAllAppUsersQuery?.sort },\n { limit, ...mentionAllAppUsersQuery?.options },\n );\n const users: SuggestionUser<StreamChatGenerics>[] = [];\n response.users.forEach((user) => isUserResponse(user) && users.push(user));\n if (onReady && users) {\n onReady(users);\n }\n }\n};\n\nexport const queryUsersDebounced = debounce(queryUsers, 200, {\n leading: false,\n trailing: true,\n});\n\nexport const isCommandTrigger = (trigger: Trigger): trigger is '/' => trigger === '/';\n\nexport const isEmojiTrigger = (trigger: Trigger): trigger is ':' => trigger === ':';\n\nexport const isMentionTrigger = (trigger: Trigger): trigger is '@' => trigger === '@';\n\nexport type Trigger = '/' | '@' | ':';\n\nexport type TriggerSettings<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n '/'?: {\n dataProvider: (\n query: CommandResponse<StreamChatGenerics>['name'],\n text: string,\n onReady?: (\n data: CommandResponse<StreamChatGenerics>[],\n q: CommandResponse<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n },\n ) => SuggestionCommand<StreamChatGenerics>[];\n output: (entity: CommandResponse<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n ':'?: {\n dataProvider: (\n query: Emoji['name'],\n _: string,\n onReady?: (data: Emoji[], q: Emoji['name']) => void,\n ) => Emoji[];\n output: (entity: Emoji) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n '@'?: {\n callback: (item: SuggestionUser<StreamChatGenerics>) => void;\n dataProvider: (\n query: SuggestionUser<StreamChatGenerics>['name'],\n _: string,\n onReady?: (\n data: SuggestionUser<StreamChatGenerics>[],\n q: SuggestionUser<StreamChatGenerics>['name'],\n ) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersEnabled?: boolean;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n ) => SuggestionUser<StreamChatGenerics>[] | Promise<void> | void;\n output: (entity: SuggestionUser<StreamChatGenerics>) => {\n caretPosition: string;\n key: string;\n text: string;\n };\n type: SuggestionComponentType;\n };\n};\n\nexport type ACITriggerSettingsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n onMentionSelectItem: (item: SuggestionUser<StreamChatGenerics>) => void;\n};\n\nexport type QueryUsersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n client: StreamChat<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;\n },\n) => Promise<void>;\n\nexport type QueryMembersFunction<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n channel: Channel<StreamChatGenerics>,\n query: SuggestionUser<StreamChatGenerics>['name'],\n onReady?: (users: SuggestionUser<StreamChatGenerics>[]) => void,\n options?: {\n limit?: number;\n },\n) => Promise<void>;\n\n/**\n * ACI = AutoCompleteInput\n *\n * DataProvider accepts `onReady` function, which will execute once the data is ready.\n * Another approach would have been to simply return the data from dataProvider and let the\n * component await for it and then execute the required logic. We are going for callback instead\n * of async-await since we have debounce function in dataProvider. Which will delay the execution\n * of api call on trailing end of debounce (lets call it a1) but will return with result of\n * previous call without waiting for a1. So in this case, we want to execute onReady, when trailing\n * end of debounce executes.\n */\nexport const ACITriggerSettings = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n onMentionSelectItem,\n}: ACITriggerSettingsParams<StreamChatGenerics>): TriggerSettings<StreamChatGenerics> => ({\n '/': {\n dataProvider: (query, text, onReady, options = {}) => {\n if (text.indexOf('/') !== 0) return [];\n\n const { limit = defaultAutoCompleteSuggestionsLimit } = options;\n const selectedCommands = !query\n ? getCommands(channel)\n : getCommands(channel).filter((command) => query && command.name?.indexOf(query) !== -1);\n\n // sort alphabetically unless the you're matching the first char\n selectedCommands.sort((a, b) => {\n let nameA = a.name?.toLowerCase() || '';\n let nameB = b.name?.toLowerCase() || '';\n if (query && nameA.indexOf(query) === 0) {\n nameA = `0${nameA}`;\n }\n if (query && nameB.indexOf(query) === 0) {\n nameB = `0${nameB}`;\n }\n if (nameA < nameB) return -1;\n if (nameA > nameB) return 1;\n\n return 0;\n });\n\n const result = selectedCommands.slice(0, limit);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: `${entity.name}`,\n text: `/${entity.name}`,\n }),\n type: 'command',\n },\n ':': {\n dataProvider: (query, _, onReady) => {\n if (!query) return [];\n\n const result = compiledEmojis.emojiArray.reduce((acc, cur) => {\n if (acc.length >= 10) return acc;\n\n if (cur.names.some((name) => name.includes(query))) {\n const emoji = compiledEmojis.emojiLib[cur.name];\n // Since there can be no emojiLib for the current name we need to check for it being undefined\n if (emoji?.skin_variations) {\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-1`,\n skin_variations: undefined,\n });\n emoji.skin_variations.forEach((tone, index) =>\n acc.push({\n ...emoji,\n name: `${emoji.name}-tone-${index + 2}`,\n skin_variations: undefined,\n unicode: tone,\n }),\n );\n } else if (emoji) {\n acc.push(emoji);\n }\n }\n\n return acc;\n }, [] as Emoji[]);\n\n if (onReady) {\n onReady(result, query);\n }\n\n return result;\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.name,\n text: entity.unicode,\n }),\n type: 'emoji',\n },\n '@': {\n callback: (item) => {\n onMentionSelectItem(item);\n },\n dataProvider: (\n query,\n _,\n onReady,\n options = {\n limit: defaultAutoCompleteSuggestionsLimit,\n mentionAllAppUsersEnabled: false,\n mentionAllAppUsersQuery: defaultMentionAllAppUsersQuery,\n },\n ) => {\n if (options?.mentionAllAppUsersEnabled) {\n return (queryUsersDebounced as DebouncedFunc<QueryUsersFunction<StreamChatGenerics>>)(\n client,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n mentionAllAppUsersQuery: options.mentionAllAppUsersQuery,\n },\n );\n }\n\n /**\n * By default, we return maximum 100 members via queryChannels api call.\n * Thus it is safe to assume, that if number of members in channel.state is < 100,\n * then all the members are already available on client side and we don't need to\n * make any api call to queryMembers endpoint.\n */\n if (!query || Object.values(channel.state.members).length < 100) {\n const users = getMembersAndWatchers(channel);\n\n const matchingUsers = users.filter((user) => {\n if (!query) return true;\n if (user.name?.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n if (user.id.toLowerCase().indexOf(query.toLowerCase()) !== -1) {\n return true;\n }\n return false;\n });\n\n const data = matchingUsers.slice(0, options?.limit);\n\n if (onReady) {\n onReady(data, query);\n }\n\n return data;\n }\n\n return (queryMembersDebounced as DebouncedFunc<QueryMembersFunction<StreamChatGenerics>>)(\n channel,\n query,\n (data) => {\n if (onReady) {\n onReady(data, query);\n }\n },\n {\n limit: options.limit,\n },\n );\n },\n output: (entity) => ({\n caretPosition: 'next',\n key: entity.id,\n text: `@${entity.name || entity.id}`,\n }),\n type: 'mention',\n },\n});\n\nexport const makeImageCompatibleUrl = (url: string) =>\n (url.indexOf('//') === 0 ? `https:${url}` : url).trim();\n\nexport const getUrlWithoutParams = (url?: string) => {\n if (!url) return url;\n\n const indexOfQuestion = url.indexOf('?');\n if (indexOfQuestion === -1) return url;\n\n return url.substring(0, url.indexOf('?'));\n};\n\nexport const isLocalUrl = (url: string) => url.indexOf('http') !== 0;\n\nexport const generateRandomId = (a = ''): string =>\n a\n ? /* eslint-disable no-bitwise */\n ((Number(a) ^ (Math.random() * 16)) >> (Number(a) / 4)).toString(16)\n : `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateRandomId);\n\n/*\n * Returns true if the message text only contains emojis\n */\nexport const hasOnlyEmojis = (text: string) => {\n try {\n // get all emojis in the string\n const emojiOnlyString = [...text.matchAll(EmojiRegex())].join('');\n // remove all spaces from original text\n const originalTextWithNoSpaces = text.replaceAll(/\\s/g, '');\n // check if both are the same\n return (\n emojiOnlyString.length !== 0 && emojiOnlyString.length === originalTextWithNoSpaces.length\n );\n } catch (e) {\n return false;\n }\n};\n\n/**\n * Stringifies a message object\n * @param {FormatMessageResponse<StreamChatGenerics>} message - the message object to be stringified\n * @returns {string} The stringified message\n */\nconst stringifyMessage = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n deleted_at,\n latest_reactions,\n reply_count,\n status,\n type,\n updated_at,\n}: FormatMessageResponse<StreamChatGenerics>): string =>\n `${type}${deleted_at}${\n latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''\n }${reply_count}${status}${updated_at?.toISOString?.() || updated_at}`;\n\n/**\n * Reduces a list of messages to strings that are used in useEffect & useMemo\n * @param {messages} messages - the array of messages to be compared\n * @returns {string} The mapped message string\n */\nexport const reduceMessagesToString = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n messages: FormatMessageResponse<StreamChatGenerics>[],\n): string => messages.map(stringifyMessage).join();\n"],"mappings":"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"}
|
|
@@ -199,9 +199,23 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
|
|
|
199
199
|
return _ref3.apply(this, arguments);
|
|
200
200
|
};
|
|
201
201
|
}();
|
|
202
|
-
var reloadList = function
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
var reloadList = function () {
|
|
203
|
+
var _ref4 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3() {
|
|
204
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
205
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
206
|
+
case 0:
|
|
207
|
+
_context3.next = 2;
|
|
208
|
+
return queryChannels('reload');
|
|
209
|
+
case 2:
|
|
210
|
+
case "end":
|
|
211
|
+
return _context3.stop();
|
|
212
|
+
}
|
|
213
|
+
}, _callee3);
|
|
214
|
+
}));
|
|
215
|
+
return function reloadList() {
|
|
216
|
+
return _ref4.apply(this, arguments);
|
|
217
|
+
};
|
|
218
|
+
}();
|
|
205
219
|
var filterStr = (0, _react.useMemo)(function () {
|
|
206
220
|
return JSON.stringify(filters);
|
|
207
221
|
}, [filters]);
|
|
@@ -233,12 +247,32 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
|
|
|
233
247
|
};
|
|
234
248
|
var listener;
|
|
235
249
|
if (enableOfflineSupport) {
|
|
236
|
-
listener = _DBSyncManager.DBSyncManager.onSyncStatusChange(function (
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
250
|
+
listener = _DBSyncManager.DBSyncManager.onSyncStatusChange(function () {
|
|
251
|
+
var _ref5 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(syncStatus) {
|
|
252
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
253
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
254
|
+
case 0:
|
|
255
|
+
if (!syncStatus) {
|
|
256
|
+
_context4.next = 5;
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
loadOfflineChannels();
|
|
260
|
+
_context4.next = 4;
|
|
261
|
+
return reloadList();
|
|
262
|
+
case 4:
|
|
263
|
+
setForceUpdate(function (u) {
|
|
264
|
+
return u + 1;
|
|
265
|
+
});
|
|
266
|
+
case 5:
|
|
267
|
+
case "end":
|
|
268
|
+
return _context4.stop();
|
|
269
|
+
}
|
|
270
|
+
}, _callee4);
|
|
271
|
+
}));
|
|
272
|
+
return function (_x) {
|
|
273
|
+
return _ref5.apply(this, arguments);
|
|
274
|
+
};
|
|
275
|
+
}());
|
|
242
276
|
loadOfflineChannels();
|
|
243
277
|
var dbSyncStatus = _DBSyncManager.DBSyncManager.getSyncStatus();
|
|
244
278
|
if (dbSyncStatus) {
|
|
@@ -246,15 +280,15 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
|
|
|
246
280
|
}
|
|
247
281
|
} else {
|
|
248
282
|
listener = client.on('connection.changed', function () {
|
|
249
|
-
var
|
|
250
|
-
return _regenerator["default"].wrap(function
|
|
251
|
-
while (1) switch (
|
|
283
|
+
var _ref6 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5(event) {
|
|
284
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
285
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
252
286
|
case 0:
|
|
253
287
|
if (!event.online) {
|
|
254
|
-
|
|
288
|
+
_context5.next = 4;
|
|
255
289
|
break;
|
|
256
290
|
}
|
|
257
|
-
|
|
291
|
+
_context5.next = 3;
|
|
258
292
|
return refreshList();
|
|
259
293
|
case 3:
|
|
260
294
|
setForceUpdate(function (u) {
|
|
@@ -262,12 +296,12 @@ var usePaginatedChannels = function usePaginatedChannels(_ref) {
|
|
|
262
296
|
});
|
|
263
297
|
case 4:
|
|
264
298
|
case "end":
|
|
265
|
-
return
|
|
299
|
+
return _context5.stop();
|
|
266
300
|
}
|
|
267
|
-
},
|
|
301
|
+
}, _callee5);
|
|
268
302
|
}));
|
|
269
|
-
return function (
|
|
270
|
-
return
|
|
303
|
+
return function (_x2) {
|
|
304
|
+
return _ref6.apply(this, arguments);
|
|
271
305
|
};
|
|
272
306
|
}());
|
|
273
307
|
reloadList();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_ActiveChannelsRefContext","_ChatContext","_useIsMountedRef","_getChannelsForFilterSort","_date","_DBSyncManager","_utils","waitSeconds","seconds","Promise","resolve","setTimeout","ONE_SECOND_IN_MS","DEFAULT_OPTIONS","message_limit","MAX_NUMBER_OF_RETRIES","RETRY_INTERVAL_IN_MS","usePaginatedChannels","_ref","enableOfflineSupport","_ref$filters","filters","_ref$options","options","setForceUpdate","_ref$sort","sort","_useState","useState","_useState2","_slicedToArray2","channels","setChannels","_useState3","undefined","_useState4","error","setError","_useState5","_useState6","staticChannelsActive","setStaticChannelsActive","_useState7","_useState8","activeQueryType","setActiveQueryType","_useState9","_useState10","hasNextPage","setHasNextPage","activeChannels","useActiveChannelsRefContext","isMountedRef","useIsMountedRef","_useChatContext","useChatContext","client","filtersRef","useRef","sortRef","activeRequestId","isQueryingRef","lastRefresh","Date","now","queryChannels","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","_options$limit","queryType","retryCount","hasUpdatedData","isQueryStale","currentRequestId","newOptions","channelQueryResponse","newChannels","_args","arguments","wrap","_callee$","_context","prev","next","length","current","abrupt","JSON","stringify","some","Boolean","_extends2","limit","MAX_QUERY_CHANNELS_LIMIT","offset","skipInitialization","sent","concat","_toConsumableArray2","map","c","existingChannel","cid","t0","console","warn","Error","stop","apply","refreshList","_ref3","_callee2","_callee2$","_context2","reloadList","filterStr","useMemo","sortStr","useEffect","loadOfflineChannels","_client$user","user","id","channelsFromDB","getChannelsForFilterSort","currentUserId","offlineChannels","hydrateActiveChannels","offlineMode","e","listener","DBSyncManager","onSyncStatusChange","syncStatus","dbSyncStatus","getSyncStatus","on","_ref4","_callee3","event","_callee3$","_context3","online","u","_x","_listener","unsubscribe","loadingChannels","loadingNextPage","loadNextPage","refreshing","exports"],"sources":["usePaginatedChannels.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort } from 'stream-chat';\n\nimport { useActiveChannelsRefContext } from '../../../contexts/activeChannelsRefContext/ActiveChannelsRefContext';\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\n\nimport { getChannelsForFilterSort } from '../../../store/apis/getChannelsForFilterSort';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ONE_SECOND_IN_MS } from '../../../utils/date';\nimport { DBSyncManager } from '../../../utils/DBSyncManager';\nimport { MAX_QUERY_CHANNELS_LIMIT } from '../utils';\n\nconst waitSeconds = (seconds: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, seconds * ONE_SECOND_IN_MS);\n });\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n enableOfflineSupport: boolean;\n filters: ChannelFilters<StreamChatGenerics>;\n options: ChannelOptions;\n setForceUpdate: React.Dispatch<React.SetStateAction<number>>;\n sort: ChannelSort<StreamChatGenerics>;\n };\n\nconst DEFAULT_OPTIONS = {\n message_limit: 10,\n};\n\nconst MAX_NUMBER_OF_RETRIES = 3;\nconst RETRY_INTERVAL_IN_MS = 5000;\n\ntype QueryType = 'queryLocalDB' | 'reload' | 'refresh' | 'loadChannels';\n\nexport type QueryChannels = (queryType?: QueryType, retryCount?: number) => Promise<void>;\n\nexport const usePaginatedChannels = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n enableOfflineSupport,\n filters = {},\n options = DEFAULT_OPTIONS,\n setForceUpdate,\n sort = {},\n}: Parameters<StreamChatGenerics>) => {\n const [channels, setChannels] = useState<Channel<StreamChatGenerics>[] | null>(null);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [staticChannelsActive, setStaticChannelsActive] = useState<boolean>(false);\n const [activeQueryType, setActiveQueryType] = useState<QueryType | null>('queryLocalDB');\n const [hasNextPage, setHasNextPage] = useState<boolean>(false);\n const activeChannels = useActiveChannelsRefContext();\n const isMountedRef = useIsMountedRef();\n const { client } = useChatContext<StreamChatGenerics>();\n\n const filtersRef = useRef<typeof filters | null>(null);\n const sortRef = useRef<typeof sort | null>(null);\n const activeRequestId = useRef<number>(0);\n const isQueryingRef = useRef(false);\n const lastRefresh = useRef(Date.now());\n\n const queryChannels: QueryChannels = async (\n queryType: QueryType = 'loadChannels',\n retryCount = 0,\n ): Promise<void> => {\n if (!client || !isMountedRef.current) return;\n\n const hasUpdatedData =\n queryType === 'loadChannels' ||\n queryType === 'refresh' ||\n [\n JSON.stringify(filtersRef.current) !== JSON.stringify(filters),\n JSON.stringify(sortRef.current) !== JSON.stringify(sort),\n ].some(Boolean);\n\n const isQueryStale = () => !isMountedRef || activeRequestId.current !== currentRequestId;\n\n /**\n * We don't need to make another call to query channels if we don't\n * have new data for the query to include\n * */\n if (!hasUpdatedData) {\n if (activeQueryType === null) return;\n }\n\n filtersRef.current = filters;\n sortRef.current = sort;\n isQueryingRef.current = true;\n setError(undefined);\n activeRequestId.current++;\n const currentRequestId = activeRequestId.current;\n setActiveQueryType(queryType);\n\n const newOptions = {\n limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT,\n offset:\n queryType === 'loadChannels' && !staticChannelsActive && channels ? channels.length : 0,\n ...options,\n };\n\n try {\n /**\n * We skipInitialization here for handling race condition between ChannelList, Channel (and Thread)\n * when they all (may) update the channel state at the same time (when connection state recovers)\n * TODO: if we move the channel state to a single context and share it between ChannelList, Channel and Thread we can remove this\n */\n const channelQueryResponse = await client.queryChannels(filters, sort, newOptions, {\n skipInitialization: enableOfflineSupport ? undefined : activeChannels.current,\n });\n if (isQueryStale() || !isMountedRef.current) {\n return;\n }\n\n const newChannels =\n queryType === 'loadChannels' && !staticChannelsActive && channels\n ? [...channels, ...channelQueryResponse]\n : channelQueryResponse.map((c) => {\n const existingChannel = client.activeChannels[c.cid];\n if (existingChannel) {\n return existingChannel;\n }\n\n return c;\n });\n\n setChannels(newChannels);\n setStaticChannelsActive(false);\n setHasNextPage(channelQueryResponse.length >= newOptions.limit);\n isQueryingRef.current = false;\n } catch (err: unknown) {\n isQueryingRef.current = false;\n await waitSeconds(2);\n\n if (isQueryStale()) {\n return;\n }\n\n // querying.current check is needed in order to make sure the next query call doesnt flick an error\n // state and then succeed (reconnect case)\n if (retryCount === MAX_NUMBER_OF_RETRIES && !isQueryingRef.current) {\n setActiveQueryType(null);\n console.warn(err);\n\n setError(\n new Error(\n `Maximum number of retries reached in queryChannels. Last error message is: ${err}`,\n ),\n );\n return;\n }\n\n return queryChannels(queryType, retryCount + 1);\n }\n\n setActiveQueryType(null);\n };\n\n const refreshList = async () => {\n const now = Date.now();\n // Only allow pull-to-refresh 5 seconds after last successful refresh.\n if (now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined) {\n return;\n }\n\n lastRefresh.current = Date.now();\n await queryChannels('refresh');\n };\n\n const reloadList = () => queryChannels('reload');\n\n /**\n * Equality check using stringified filters/sort ensure that we don't make un-necessary queryChannels api calls\n * for the scenario:\n *\n * <ChannelList\n * filters={{\n * members: { $in: ['vishal'] }\n * }}\n * ...\n * />\n *\n * Here we have passed filters as inline object, which means on every re-render of\n * parent component, ChannelList will receive new object reference (even though value is same), which\n * in return will trigger useEffect. To avoid this, we can add a value check.\n */\n const filterStr = useMemo(() => JSON.stringify(filters), [filters]);\n const sortStr = useMemo(() => JSON.stringify(sort), [sort]);\n\n useEffect(() => {\n const loadOfflineChannels = () => {\n if (!client?.user?.id) return;\n\n try {\n const channelsFromDB = getChannelsForFilterSort({\n currentUserId: client.user.id,\n filters,\n sort,\n });\n\n if (channelsFromDB) {\n const offlineChannels = client.hydrateActiveChannels(channelsFromDB, {\n offlineMode: true,\n skipInitialization: [], // passing empty array will clear out the existing messages from channel state, this removes the possibility of duplicate messages\n });\n\n setChannels(offlineChannels);\n setStaticChannelsActive(true);\n }\n } catch (e) {\n console.warn('Failed to get channels from database: ', e);\n }\n\n setActiveQueryType(null);\n };\n\n let listener: ReturnType<typeof DBSyncManager.onSyncStatusChange>;\n if (enableOfflineSupport) {\n // Any time DB is synced, we need to update the UI with local DB channels first,\n // and then call queryChannels to ensure any new channels are added to UI.\n listener = DBSyncManager.onSyncStatusChange((syncStatus) => {\n if (syncStatus) {\n loadOfflineChannels();\n reloadList();\n }\n });\n // On start, load the channels from local db.\n loadOfflineChannels();\n\n // If db is already synced (sync api and pending api calls), then\n // right away call queryChannels.\n const dbSyncStatus = DBSyncManager.getSyncStatus();\n if (dbSyncStatus) {\n reloadList();\n }\n } else {\n listener = client.on('connection.changed', async (event) => {\n if (event.online) {\n await refreshList();\n setForceUpdate((u) => u + 1);\n }\n });\n\n reloadList();\n }\n\n return () => listener?.unsubscribe?.();\n }, [filterStr, sortStr]);\n\n return {\n channels,\n error,\n hasNextPage,\n loadingChannels:\n activeQueryType === 'queryLocalDB'\n ? true\n : (activeQueryType === 'reload' || activeQueryType === null) && channels === null,\n loadingNextPage: activeQueryType === 'loadChannels',\n loadNextPage: queryChannels,\n refreshing: activeQueryType === 'refresh',\n refreshList,\n reloadList,\n // Although channels can be null, there is no practical case where channels will be null\n // when setChannels is used. setChannels is only recommended to be used for overriding\n // event handler. Thus instead of adding if check for channels === null, its better to\n // simply reassign types here.\n setChannels,\n staticChannelsActive,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","require","_ActiveChannelsRefContext","_ChatContext","_useIsMountedRef","_getChannelsForFilterSort","_date","_DBSyncManager","_utils","waitSeconds","seconds","Promise","resolve","setTimeout","ONE_SECOND_IN_MS","DEFAULT_OPTIONS","message_limit","MAX_NUMBER_OF_RETRIES","RETRY_INTERVAL_IN_MS","usePaginatedChannels","_ref","enableOfflineSupport","_ref$filters","filters","_ref$options","options","setForceUpdate","_ref$sort","sort","_useState","useState","_useState2","_slicedToArray2","channels","setChannels","_useState3","undefined","_useState4","error","setError","_useState5","_useState6","staticChannelsActive","setStaticChannelsActive","_useState7","_useState8","activeQueryType","setActiveQueryType","_useState9","_useState10","hasNextPage","setHasNextPage","activeChannels","useActiveChannelsRefContext","isMountedRef","useIsMountedRef","_useChatContext","useChatContext","client","filtersRef","useRef","sortRef","activeRequestId","isQueryingRef","lastRefresh","Date","now","queryChannels","_ref2","_asyncToGenerator2","_regenerator","mark","_callee","_options$limit","queryType","retryCount","hasUpdatedData","isQueryStale","currentRequestId","newOptions","channelQueryResponse","newChannels","_args","arguments","wrap","_callee$","_context","prev","next","length","current","abrupt","JSON","stringify","some","Boolean","_extends2","limit","MAX_QUERY_CHANNELS_LIMIT","offset","skipInitialization","sent","concat","_toConsumableArray2","map","c","existingChannel","cid","t0","console","warn","Error","stop","apply","refreshList","_ref3","_callee2","_callee2$","_context2","reloadList","_ref4","_callee3","_callee3$","_context3","filterStr","useMemo","sortStr","useEffect","loadOfflineChannels","_client$user","user","id","channelsFromDB","getChannelsForFilterSort","currentUserId","offlineChannels","hydrateActiveChannels","offlineMode","e","listener","DBSyncManager","onSyncStatusChange","_ref5","_callee4","syncStatus","_callee4$","_context4","u","_x","dbSyncStatus","getSyncStatus","on","_ref6","_callee5","event","_callee5$","_context5","online","_x2","_listener","unsubscribe","loadingChannels","loadingNextPage","loadNextPage","refreshing","exports"],"sources":["usePaginatedChannels.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { Channel, ChannelFilters, ChannelOptions, ChannelSort } from 'stream-chat';\n\nimport { useActiveChannelsRefContext } from '../../../contexts/activeChannelsRefContext/ActiveChannelsRefContext';\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\n\nimport { getChannelsForFilterSort } from '../../../store/apis/getChannelsForFilterSort';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ONE_SECOND_IN_MS } from '../../../utils/date';\nimport { DBSyncManager } from '../../../utils/DBSyncManager';\nimport { MAX_QUERY_CHANNELS_LIMIT } from '../utils';\n\nconst waitSeconds = (seconds: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, seconds * ONE_SECOND_IN_MS);\n });\n\ntype Parameters<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n {\n enableOfflineSupport: boolean;\n filters: ChannelFilters<StreamChatGenerics>;\n options: ChannelOptions;\n setForceUpdate: React.Dispatch<React.SetStateAction<number>>;\n sort: ChannelSort<StreamChatGenerics>;\n };\n\nconst DEFAULT_OPTIONS = {\n message_limit: 10,\n};\n\nconst MAX_NUMBER_OF_RETRIES = 3;\nconst RETRY_INTERVAL_IN_MS = 5000;\n\ntype QueryType = 'queryLocalDB' | 'reload' | 'refresh' | 'loadChannels';\n\nexport type QueryChannels = (queryType?: QueryType, retryCount?: number) => Promise<void>;\n\nexport const usePaginatedChannels = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n enableOfflineSupport,\n filters = {},\n options = DEFAULT_OPTIONS,\n setForceUpdate,\n sort = {},\n}: Parameters<StreamChatGenerics>) => {\n const [channels, setChannels] = useState<Channel<StreamChatGenerics>[] | null>(null);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [staticChannelsActive, setStaticChannelsActive] = useState<boolean>(false);\n const [activeQueryType, setActiveQueryType] = useState<QueryType | null>('queryLocalDB');\n const [hasNextPage, setHasNextPage] = useState<boolean>(false);\n const activeChannels = useActiveChannelsRefContext();\n const isMountedRef = useIsMountedRef();\n const { client } = useChatContext<StreamChatGenerics>();\n\n const filtersRef = useRef<typeof filters | null>(null);\n const sortRef = useRef<typeof sort | null>(null);\n const activeRequestId = useRef<number>(0);\n const isQueryingRef = useRef(false);\n const lastRefresh = useRef(Date.now());\n\n const queryChannels: QueryChannels = async (\n queryType: QueryType = 'loadChannels',\n retryCount = 0,\n ): Promise<void> => {\n if (!client || !isMountedRef.current) return;\n\n const hasUpdatedData =\n queryType === 'loadChannels' ||\n queryType === 'refresh' ||\n [\n JSON.stringify(filtersRef.current) !== JSON.stringify(filters),\n JSON.stringify(sortRef.current) !== JSON.stringify(sort),\n ].some(Boolean);\n\n const isQueryStale = () => !isMountedRef || activeRequestId.current !== currentRequestId;\n\n /**\n * We don't need to make another call to query channels if we don't\n * have new data for the query to include\n * */\n if (!hasUpdatedData) {\n if (activeQueryType === null) return;\n }\n\n filtersRef.current = filters;\n sortRef.current = sort;\n isQueryingRef.current = true;\n setError(undefined);\n activeRequestId.current++;\n const currentRequestId = activeRequestId.current;\n setActiveQueryType(queryType);\n\n const newOptions = {\n limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT,\n offset:\n queryType === 'loadChannels' && !staticChannelsActive && channels ? channels.length : 0,\n ...options,\n };\n\n try {\n /**\n * We skipInitialization here for handling race condition between ChannelList, Channel (and Thread)\n * when they all (may) update the channel state at the same time (when connection state recovers)\n * TODO: if we move the channel state to a single context and share it between ChannelList, Channel and Thread we can remove this\n */\n const channelQueryResponse = await client.queryChannels(filters, sort, newOptions, {\n skipInitialization: enableOfflineSupport ? undefined : activeChannels.current,\n });\n if (isQueryStale() || !isMountedRef.current) {\n return;\n }\n\n const newChannels =\n queryType === 'loadChannels' && !staticChannelsActive && channels\n ? [...channels, ...channelQueryResponse]\n : channelQueryResponse.map((c) => {\n const existingChannel = client.activeChannels[c.cid];\n if (existingChannel) {\n return existingChannel;\n }\n\n return c;\n });\n\n setChannels(newChannels);\n setStaticChannelsActive(false);\n setHasNextPage(channelQueryResponse.length >= newOptions.limit);\n isQueryingRef.current = false;\n } catch (err: unknown) {\n isQueryingRef.current = false;\n await waitSeconds(2);\n\n if (isQueryStale()) {\n return;\n }\n\n // querying.current check is needed in order to make sure the next query call doesnt flick an error\n // state and then succeed (reconnect case)\n if (retryCount === MAX_NUMBER_OF_RETRIES && !isQueryingRef.current) {\n setActiveQueryType(null);\n console.warn(err);\n\n setError(\n new Error(\n `Maximum number of retries reached in queryChannels. Last error message is: ${err}`,\n ),\n );\n return;\n }\n\n return queryChannels(queryType, retryCount + 1);\n }\n\n setActiveQueryType(null);\n };\n\n const refreshList = async () => {\n const now = Date.now();\n // Only allow pull-to-refresh 5 seconds after last successful refresh.\n if (now - lastRefresh.current < RETRY_INTERVAL_IN_MS && error === undefined) {\n return;\n }\n\n lastRefresh.current = Date.now();\n await queryChannels('refresh');\n };\n\n const reloadList = async () => {\n await queryChannels('reload');\n };\n\n /**\n * Equality check using stringified filters/sort ensure that we don't make un-necessary queryChannels api calls\n * for the scenario:\n *\n * <ChannelList\n * filters={{\n * members: { $in: ['vishal'] }\n * }}\n * ...\n * />\n *\n * Here we have passed filters as inline object, which means on every re-render of\n * parent component, ChannelList will receive new object reference (even though value is same), which\n * in return will trigger useEffect. To avoid this, we can add a value check.\n */\n const filterStr = useMemo(() => JSON.stringify(filters), [filters]);\n const sortStr = useMemo(() => JSON.stringify(sort), [sort]);\n\n useEffect(() => {\n const loadOfflineChannels = () => {\n if (!client?.user?.id) return;\n\n try {\n const channelsFromDB = getChannelsForFilterSort({\n currentUserId: client.user.id,\n filters,\n sort,\n });\n\n if (channelsFromDB) {\n const offlineChannels = client.hydrateActiveChannels(channelsFromDB, {\n offlineMode: true,\n skipInitialization: [], // passing empty array will clear out the existing messages from channel state, this removes the possibility of duplicate messages\n });\n\n setChannels(offlineChannels);\n setStaticChannelsActive(true);\n }\n } catch (e) {\n console.warn('Failed to get channels from database: ', e);\n }\n\n setActiveQueryType(null);\n };\n\n let listener: ReturnType<typeof DBSyncManager.onSyncStatusChange>;\n if (enableOfflineSupport) {\n // Any time DB is synced, we need to update the UI with local DB channels first,\n // and then call queryChannels to ensure any new channels are added to UI.\n listener = DBSyncManager.onSyncStatusChange(async (syncStatus) => {\n if (syncStatus) {\n loadOfflineChannels();\n await reloadList();\n setForceUpdate((u) => u + 1);\n }\n });\n // On start, load the channels from local db.\n loadOfflineChannels();\n\n // If db is already synced (sync api and pending api calls), then\n // right away call queryChannels.\n const dbSyncStatus = DBSyncManager.getSyncStatus();\n if (dbSyncStatus) {\n reloadList();\n }\n } else {\n listener = client.on('connection.changed', async (event) => {\n if (event.online) {\n await refreshList();\n setForceUpdate((u) => u + 1);\n }\n });\n\n reloadList();\n }\n\n return () => listener?.unsubscribe?.();\n }, [filterStr, sortStr]);\n\n return {\n channels,\n error,\n hasNextPage,\n loadingChannels:\n activeQueryType === 'queryLocalDB'\n ? true\n : (activeQueryType === 'reload' || activeQueryType === null) && channels === null,\n loadingNextPage: activeQueryType === 'loadChannels',\n loadNextPage: queryChannels,\n refreshing: activeQueryType === 'refresh',\n refreshList,\n reloadList,\n // Although channels can be null, there is no practical case where channels will be null\n // when setChannels is used. setChannels is only recommended to be used for overriding\n // event handler. Thus instead of adding if check for channels === null, its better to\n // simply reassign types here.\n setChannels,\n staticChannelsActive,\n };\n};\n"],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
18
18
|
var ChannelPreviewWithContext = function ChannelPreviewWithContext(props) {
|
|
19
19
|
var channel = props.channel,
|
|
20
20
|
client = props.client,
|
|
21
|
+
channelListForceUpdate = props.forceUpdate,
|
|
21
22
|
Preview = props.Preview;
|
|
22
23
|
var _useState = (0, _react.useState)(channel.state.messages[channel.state.messages.length - 1]),
|
|
23
24
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
@@ -48,7 +49,7 @@ var ChannelPreviewWithContext = function ChannelPreviewWithContext(props) {
|
|
|
48
49
|
}
|
|
49
50
|
var newUnreadCount = channel.countUnread();
|
|
50
51
|
setUnread(newUnreadCount);
|
|
51
|
-
}, [channelLastMessageString]);
|
|
52
|
+
}, [channelLastMessageString, channelListForceUpdate]);
|
|
52
53
|
(0, _react.useEffect)(function () {
|
|
53
54
|
var handleNewMessageEvent = function handleNewMessageEvent(event) {
|
|
54
55
|
var message = event.message;
|
|
@@ -105,9 +106,11 @@ var ChannelPreview = function ChannelPreview(props) {
|
|
|
105
106
|
var _useChatContext = (0, _ChatContext.useChatContext)(),
|
|
106
107
|
client = _useChatContext.client;
|
|
107
108
|
var _useChannelsContext = (0, _ChannelsContext.useChannelsContext)(),
|
|
109
|
+
forceUpdate = _useChannelsContext.forceUpdate,
|
|
108
110
|
Preview = _useChannelsContext.Preview;
|
|
109
111
|
return _react["default"].createElement(ChannelPreviewWithContext, (0, _extends2["default"])({
|
|
110
112
|
client: client,
|
|
113
|
+
forceUpdate: forceUpdate,
|
|
111
114
|
Preview: Preview
|
|
112
115
|
}, props, {
|
|
113
116
|
__self: _this,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_useLatestMessagePreview","_ChannelsContext","_ChatContext","_useTranslatedMessage","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChannelPreviewWithContext","props","channel","client","Preview","_useState","useState","state","messages","length","_useState2","_slicedToArray2","lastMessage","setLastMessage","translatedLastMessage","useTranslatedMessage","_useState3","_useState4","forceUpdate","setForceUpdate","_useState5","countUnread","_useState6","unread","setUnread","latestMessagePreview","useLatestMessagePreview","channelLastMessage","channelLastMessageString","id","updated_at","useEffect","_client$on","on","unsubscribe","newUnreadCount","handleNewMessageEvent","event","message","parent_id","show_in_channel","handleUpdatedOrDeletedMessage","prevLastMessage","_event$message","listeners","forEach","l","handleReadEvent","_event$user","_event$user2","user","userID","prev","listener","createElement","__self","__source","fileName","lineNumber","columnNumber","ChannelPreview","_useChatContext","useChatContext","_useChannelsContext","useChannelsContext","_extends2","exports"],"sources":["ChannelPreview.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, Event, MessageResponse } from 'stream-chat';\n\nimport { useLatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\n\nimport { useTranslatedMessage } from '../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<ChannelsContextValue<StreamChatGenerics>, 'Preview'> & {\n /**\n * The previewed channel\n */\n channel: Channel<StreamChatGenerics>;\n };\n\n/**\n * This component manages state for the ChannelPreviewMessenger UI component and receives\n * all props from the ChannelListMessenger component.\n */\nconst ChannelPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { channel, client, Preview } = props;\n\n const [lastMessage, setLastMessage] = useState<\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>\n | undefined\n >(channel.state.messages[channel.state.messages.length - 1]);\n\n const translatedLastMessage = useTranslatedMessage<StreamChatGenerics>(\n lastMessage || ({} as MessageResponse<StreamChatGenerics>),\n );\n\n const [forceUpdate, setForceUpdate] = useState(0);\n const [unread, setUnread] = useState(channel.countUnread());\n\n const latestMessagePreview = useLatestMessagePreview(channel, forceUpdate, translatedLastMessage);\n\n const channelLastMessage = channel.lastMessage();\n const channelLastMessageString = `${channelLastMessage?.id}${channelLastMessage?.updated_at}`;\n\n useEffect(() => {\n const { unsubscribe } = client.on('notification.mark_read', () => {\n setUnread(channel.countUnread());\n });\n return unsubscribe;\n }, []);\n\n useEffect(() => {\n if (\n channelLastMessage &&\n (channelLastMessage.id !== lastMessage?.id ||\n channelLastMessage.updated_at !== lastMessage?.updated_at)\n ) {\n setLastMessage(channelLastMessage);\n }\n\n const newUnreadCount = channel.countUnread();\n setUnread(newUnreadCount);\n }, [channelLastMessageString]);\n\n useEffect(() => {\n const handleNewMessageEvent = (event: Event<StreamChatGenerics>) => {\n const message = event.message;\n if (message && (!message.parent_id || message.show_in_channel)) {\n setLastMessage(event.message);\n setUnread(channel.countUnread());\n }\n };\n\n const handleUpdatedOrDeletedMessage = (event: Event<StreamChatGenerics>) => {\n setLastMessage((prevLastMessage) => {\n if (prevLastMessage?.id === event.message?.id) {\n return event.message;\n }\n return prevLastMessage;\n });\n };\n\n const listeners = [\n channel.on('message.new', handleNewMessageEvent),\n channel.on('message.updated', handleUpdatedOrDeletedMessage),\n channel.on('message.deleted', handleUpdatedOrDeletedMessage),\n ];\n\n return () => listeners.forEach((l) => l.unsubscribe());\n }, []);\n\n useEffect(() => {\n const handleReadEvent = (event: Event<StreamChatGenerics>) => {\n if (event.user?.id === client.userID) {\n setUnread(0);\n } else if (event.user?.id) {\n setForceUpdate((prev) => prev + 1);\n }\n };\n\n const listener = channel.on('message.read', handleReadEvent);\n return () => listener.unsubscribe();\n }, []);\n\n return <Preview channel={channel} latestMessagePreview={latestMessagePreview} unread={unread} />;\n};\n\nexport type ChannelPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>> &\n Pick<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewProps<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { Preview } = useChannelsContext<StreamChatGenerics>();\n\n return <ChannelPreviewWithContext {...{ client, Preview }} {...props} />;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_useLatestMessagePreview","_ChannelsContext","_ChatContext","_useTranslatedMessage","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChannelPreviewWithContext","props","channel","client","channelListForceUpdate","forceUpdate","Preview","_useState","useState","state","messages","length","_useState2","_slicedToArray2","lastMessage","setLastMessage","translatedLastMessage","useTranslatedMessage","_useState3","_useState4","setForceUpdate","_useState5","countUnread","_useState6","unread","setUnread","latestMessagePreview","useLatestMessagePreview","channelLastMessage","channelLastMessageString","id","updated_at","useEffect","_client$on","on","unsubscribe","newUnreadCount","handleNewMessageEvent","event","message","parent_id","show_in_channel","handleUpdatedOrDeletedMessage","prevLastMessage","_event$message","listeners","forEach","l","handleReadEvent","_event$user","_event$user2","user","userID","prev","listener","createElement","__self","__source","fileName","lineNumber","columnNumber","ChannelPreview","_useChatContext","useChatContext","_useChannelsContext","useChannelsContext","_extends2","exports"],"sources":["ChannelPreview.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, Event, MessageResponse } from 'stream-chat';\n\nimport { useLatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\n\nimport { useTranslatedMessage } from '../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<ChannelsContextValue<StreamChatGenerics>, 'Preview' | 'forceUpdate'> & {\n /**\n * The previewed channel\n */\n channel: Channel<StreamChatGenerics>;\n };\n\n/**\n * This component manages state for the ChannelPreviewMessenger UI component and receives\n * all props from the ChannelListMessenger component.\n */\nconst ChannelPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { channel, client, forceUpdate: channelListForceUpdate, Preview } = props;\n\n const [lastMessage, setLastMessage] = useState<\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>\n | undefined\n >(channel.state.messages[channel.state.messages.length - 1]);\n\n const translatedLastMessage = useTranslatedMessage<StreamChatGenerics>(\n lastMessage || ({} as MessageResponse<StreamChatGenerics>),\n );\n\n const [forceUpdate, setForceUpdate] = useState(0);\n const [unread, setUnread] = useState(channel.countUnread());\n\n const latestMessagePreview = useLatestMessagePreview(channel, forceUpdate, translatedLastMessage);\n\n const channelLastMessage = channel.lastMessage();\n const channelLastMessageString = `${channelLastMessage?.id}${channelLastMessage?.updated_at}`;\n\n useEffect(() => {\n const { unsubscribe } = client.on('notification.mark_read', () => {\n setUnread(channel.countUnread());\n });\n return unsubscribe;\n }, []);\n\n useEffect(() => {\n if (\n channelLastMessage &&\n (channelLastMessage.id !== lastMessage?.id ||\n channelLastMessage.updated_at !== lastMessage?.updated_at)\n ) {\n setLastMessage(channelLastMessage);\n }\n\n const newUnreadCount = channel.countUnread();\n setUnread(newUnreadCount);\n }, [channelLastMessageString, channelListForceUpdate]);\n\n useEffect(() => {\n const handleNewMessageEvent = (event: Event<StreamChatGenerics>) => {\n const message = event.message;\n if (message && (!message.parent_id || message.show_in_channel)) {\n setLastMessage(event.message);\n setUnread(channel.countUnread());\n }\n };\n\n const handleUpdatedOrDeletedMessage = (event: Event<StreamChatGenerics>) => {\n setLastMessage((prevLastMessage) => {\n if (prevLastMessage?.id === event.message?.id) {\n return event.message;\n }\n return prevLastMessage;\n });\n };\n\n const listeners = [\n channel.on('message.new', handleNewMessageEvent),\n channel.on('message.updated', handleUpdatedOrDeletedMessage),\n channel.on('message.deleted', handleUpdatedOrDeletedMessage),\n ];\n\n return () => listeners.forEach((l) => l.unsubscribe());\n }, []);\n\n useEffect(() => {\n const handleReadEvent = (event: Event<StreamChatGenerics>) => {\n if (event.user?.id === client.userID) {\n setUnread(0);\n } else if (event.user?.id) {\n setForceUpdate((prev) => prev + 1);\n }\n };\n\n const listener = channel.on('message.read', handleReadEvent);\n return () => listener.unsubscribe();\n }, []);\n\n return <Preview channel={channel} latestMessagePreview={latestMessagePreview} unread={unread} />;\n};\n\nexport type ChannelPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>> &\n Pick<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewProps<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { forceUpdate, Preview } = useChannelsContext<StreamChatGenerics>();\n\n return <ChannelPreviewWithContext {...{ client, forceUpdate, Preview }} {...props} />;\n};\n"],"mappings":"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"}
|