stream-chat-react-native-core 3.9.0 → 3.9.2-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +5 -5
  2. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  3. package/lib/commonjs/components/Channel/Channel.js +103 -75
  4. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  5. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +32 -11
  6. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  7. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +23 -24
  8. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  9. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js +1 -1
  10. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  11. package/lib/commonjs/hooks/useIsMountedRef.js +19 -0
  12. package/lib/commonjs/hooks/useIsMountedRef.js.map +1 -0
  13. package/lib/commonjs/hooks/useStreami18n.js +4 -1
  14. package/lib/commonjs/hooks/useStreami18n.js.map +1 -1
  15. package/lib/commonjs/i18n/fr.json +1 -1
  16. package/lib/commonjs/version.json +1 -1
  17. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +5 -5
  18. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  19. package/lib/module/components/Channel/Channel.js +103 -75
  20. package/lib/module/components/Channel/Channel.js.map +1 -1
  21. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +32 -11
  22. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  23. package/lib/module/components/Chat/hooks/useIsOnline.js +23 -24
  24. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  25. package/lib/module/components/Message/MessageSimple/utils/renderText.js +1 -1
  26. package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  27. package/lib/module/hooks/useIsMountedRef.js +19 -0
  28. package/lib/module/hooks/useIsMountedRef.js.map +1 -0
  29. package/lib/module/hooks/useStreami18n.js +4 -1
  30. package/lib/module/hooks/useStreami18n.js.map +1 -1
  31. package/lib/module/i18n/fr.json +1 -1
  32. package/lib/module/version.json +1 -1
  33. package/lib/typescript/hooks/useIsMountedRef.d.ts +20 -0
  34. package/lib/typescript/hooks/useStreami18n.d.ts +1 -1
  35. package/lib/typescript/i18n/fr.json +1 -1
  36. package/package.json +1 -1
  37. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +3 -8
  38. package/src/components/Channel/Channel.tsx +43 -15
  39. package/src/components/Channel/__tests__/Channel.test.js +18 -2
  40. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +7 -1
  41. package/src/components/Chat/hooks/useIsOnline.ts +16 -17
  42. package/src/components/Message/MessageSimple/utils/renderText.tsx +1 -1
  43. package/src/hooks/useIsMountedRef.ts +36 -0
  44. package/src/hooks/useStreami18n.ts +5 -3
  45. package/src/i18n/fr.json +1 -1
  46. package/src/version.json +1 -1
@@ -315,7 +315,7 @@ var AutoCompleteInputWithContext = function AutoCompleteInputWithContext(props)
315
315
  }
316
316
 
317
317
  var textToModify = text.slice(0, selectionEnd.current);
318
- var startOfTokenPosition = textToModify.search(new RegExp("\\" + trigger + ("[^\\" + trigger + '\\s' + "]") + "*$"));
318
+ var startOfTokenPosition = textToModify.lastIndexOf(trigger, selectionEnd.current);
319
319
  var newCaretPosition = computeCaretPosition(newTokenString, startOfTokenPosition);
320
320
  var modifiedText = "" + textToModify.substring(0, startOfTokenPosition) + newTokenString;
321
321
  stopTracking();
@@ -383,7 +383,7 @@ var AutoCompleteInputWithContext = function AutoCompleteInputWithContext(props)
383
383
 
384
384
  var handleMentions = function handleMentions(_ref6) {
385
385
  var tokenMatch = _ref6.tokenMatch;
386
- var lastToken = tokenMatch == null ? void 0 : tokenMatch[tokenMatch.length - 1].trim();
386
+ var lastToken = tokenMatch == null ? void 0 : tokenMatch[tokenMatch.length - 1];
387
387
  var handleMentionsTrigger = lastToken && Object.keys(triggerSettings).find(function (trigger) {
388
388
  return trigger === lastToken[0];
389
389
  }) || null;
@@ -473,7 +473,7 @@ var AutoCompleteInputWithContext = function AutoCompleteInputWithContext(props)
473
473
  break;
474
474
  }
475
475
 
476
- mentionTokenMatch = text.slice(0, selectionEnd.current).match(/(?!^|\W)?@[^\s]*\s?[^\s]*$/g);
476
+ mentionTokenMatch = text.slice(0, selectionEnd.current).match(/(?!^|\W)?@[^\s@]*\s?[^\s@]*$/g);
477
477
 
478
478
  if (mentionTokenMatch) {
479
479
  handleMentions({
@@ -541,7 +541,7 @@ var AutoCompleteInputWithContext = function AutoCompleteInputWithContext(props)
541
541
  __self: _this,
542
542
  __source: {
543
543
  fileName: _jsxFileName,
544
- lineNumber: 421,
544
+ lineNumber: 416,
545
545
  columnNumber: 5
546
546
  }
547
547
  }));
@@ -615,7 +615,7 @@ var AutoCompleteInput = function AutoCompleteInput(props) {
615
615
  __self: _this,
616
616
  __source: {
617
617
  fileName: _jsxFileName,
618
- lineNumber: 529,
618
+ lineNumber: 524,
619
619
  columnNumber: 5
620
620
  }
621
621
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["AutoCompleteInput.tsx"],"names":["styles","StyleSheet","create","inputBox","flex","fontSize","includeFontPadding","padding","paddingTop","textAlignVertical","computeCaretPosition","token","startOfTokenPosition","length","isCommand","text","split","AutoCompleteInputWithContext","props","additionalTextInputProps","autoCompleteSuggestionsLimit","closeSuggestions","giphyActive","giphyEnabled","maxMessageLength","mentionAllAppUsersEnabled","mentionAllAppUsersQuery","numberOfLines","onChange","openSuggestions","setGiphyActive","setInputBoxRef","setShowMoreOptions","t","triggerSettings","updateSuggestionsContext","updateSuggestions","isTrackingStarted","selectionEnd","textHeight","setTextHeight","theme","colors","black","grey","messageInput","handleChange","newText","fromUpdate","handleSuggestionsThrottled","startTracking","trigger","triggerSetting","current","Component","component","undefined","stopTracking","query","dataProvider","data","queryCallback","onSelect","item","onSelectSuggestion","limit","handleSelectionChange","end","nativeEvent","selection","newTokenString","output","textToModify","slice","search","RegExp","newCaretPosition","modifiedText","substring","replace","startsWith","callback","handleCommand","actualToken","trim","handleMentions","tokenMatch","lastToken","handleMentionsTrigger","Object","keys","find","handleEmojis","handleEmojisTrigger","handleSuggestions","test","mentionTokenMatch","match","emojiTokenMatch","leading","height","contentSize","color","maxHeight","event","onBlur","areEqual","prevProps","nextProps","prevGiphyActive","prevT","prevText","nextGiphyActive","nextT","nextText","giphyActiveEqual","tEqual","textEqual","MemoizedAutoCompleteInput","React","memo","AutoCompleteInput","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { StyleSheet, TextInput } from 'react-native';\nimport throttle from 'lodash/throttle';\n\nimport { CommandsHeader } from './CommandsHeader';\nimport { EmojisHeader } from './EmojisHeader';\n\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n isSuggestionCommand,\n isSuggestionEmoji,\n isSuggestionUser,\n Suggestion,\n SuggestionCommand,\n SuggestionsContextValue,\n SuggestionUser,\n useSuggestionsContext,\n} from '../../contexts/suggestionsContext/SuggestionsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\nimport { isCommandTrigger, isEmojiTrigger, isMentionTrigger } from '../../utils/utils';\n\nimport type { TextInputProps } from 'react-native';\n\nimport type { Emoji } from '../../emoji-data/compiled';\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../types/types';\nimport type { Trigger } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n inputBox: {\n flex: 1,\n fontSize: 14,\n includeFontPadding: false, // for android vertical text centering\n padding: 0, // removal of default text input padding on android\n paddingTop: 0, // removal of iOS top padding for weird centering\n textAlignVertical: 'center', // for android vertical text centering\n },\n});\n\nconst computeCaretPosition = (token: string, startOfTokenPosition: number) =>\n startOfTokenPosition + token.length;\n\nconst isCommand = (text: string) => text[0] === '/' && text.split(' ').length <= 1;\n\ntype AutoCompleteInputPropsWithContext<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Pick<ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'giphyEnabled'> &\n Pick<\n MessageInputContextValue<At, Ch, Co, Ev, Me, Re, Us>,\n | 'additionalTextInputProps'\n | 'autoCompleteSuggestionsLimit'\n | 'giphyActive'\n | 'maxMessageLength'\n | 'mentionAllAppUsersEnabled'\n | 'mentionAllAppUsersQuery'\n | 'numberOfLines'\n | 'onChange'\n | 'setGiphyActive'\n | 'setInputBoxRef'\n | 'setShowMoreOptions'\n | 'text'\n | 'triggerSettings'\n > &\n Pick<\n SuggestionsContextValue<Co, Us>,\n 'closeSuggestions' | 'openSuggestions' | 'updateSuggestions'\n > &\n Pick<TranslationContextValue, 't'>;\n\nexport type AutoCompleteInputProps<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>>;\n\nconst AutoCompleteInputWithContext = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n additionalTextInputProps,\n autoCompleteSuggestionsLimit,\n closeSuggestions,\n giphyActive,\n giphyEnabled,\n maxMessageLength,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n numberOfLines,\n onChange,\n openSuggestions,\n setGiphyActive,\n setInputBoxRef,\n setShowMoreOptions,\n t,\n text,\n triggerSettings,\n updateSuggestions: updateSuggestionsContext,\n } = props;\n\n const isTrackingStarted = useRef(false);\n const selectionEnd = useRef(0);\n const [textHeight, setTextHeight] = useState(0);\n\n const {\n theme: {\n colors: { black, grey },\n messageInput: { inputBox },\n },\n } = useTheme();\n\n const handleChange = (newText: string, fromUpdate = false) => {\n if (!fromUpdate) {\n onChange(newText);\n } else {\n handleSuggestionsThrottled(newText);\n }\n };\n\n useEffect(() => {\n handleChange(text, true);\n }, [text]);\n\n const startTracking = (trigger: Trigger) => {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n isTrackingStarted.current = true;\n const { component: Component } = triggerSetting;\n openSuggestions(\n typeof Component === 'string' ? Component : <Component />,\n trigger === ':' ? (\n <EmojisHeader title='' />\n ) : trigger === '/' ? (\n <CommandsHeader />\n ) : undefined,\n );\n }\n };\n\n const stopTracking = () => {\n isTrackingStarted.current = false;\n closeSuggestions();\n };\n\n const updateSuggestions = async ({\n query,\n trigger,\n }: {\n query: Suggestion['name'];\n trigger: Trigger;\n }) => {\n if (isMentionTrigger(trigger)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n await triggerSetting.dataProvider(\n query as SuggestionUser<Us>['name'],\n text,\n (data, queryCallback) => {\n if (query === queryCallback) {\n updateSuggestionsContext({\n data,\n onSelect: (item) => onSelectSuggestion({ item, trigger }),\n });\n }\n },\n {\n limit: autoCompleteSuggestionsLimit,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n },\n );\n }\n } else if (isCommandTrigger(trigger)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n await triggerSetting.dataProvider(\n query as SuggestionCommand<Co>['name'],\n text,\n (data, queryCallback) => {\n if (query !== queryCallback) {\n return;\n }\n\n updateSuggestionsContext({\n data,\n onSelect: (item) => onSelectSuggestion({ item, trigger }),\n });\n },\n {\n limit: autoCompleteSuggestionsLimit,\n },\n );\n }\n } else {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n await triggerSetting.dataProvider(query as Emoji['name'], text, (data, queryCallback) => {\n if (query !== queryCallback) {\n return;\n }\n\n updateSuggestionsContext(\n {\n data,\n onSelect: (item) => onSelectSuggestion({ item, trigger }),\n },\n <EmojisHeader title={query} />,\n );\n });\n }\n }\n };\n\n const handleSelectionChange: TextInputProps['onSelectionChange'] = ({\n nativeEvent: {\n selection: { end },\n },\n }) => {\n selectionEnd.current = end;\n };\n\n const onSelectSuggestion = ({\n item,\n trigger,\n }: {\n item: Suggestion<Co, Us>;\n trigger: Trigger;\n }) => {\n if (!trigger || !triggerSettings[trigger]) {\n return;\n }\n\n let newTokenString = '';\n if (isCommandTrigger(trigger) && isSuggestionCommand(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n newTokenString = `${triggerSetting.output(item).text} `;\n }\n }\n if (isEmojiTrigger(trigger) && isSuggestionEmoji(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n newTokenString = `${triggerSetting.output(item).text} `;\n }\n }\n if (isMentionTrigger(trigger) && isSuggestionUser(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n newTokenString = `${triggerSetting.output(item).text} `;\n }\n }\n\n const textToModify = text.slice(0, selectionEnd.current);\n\n const startOfTokenPosition = textToModify.search(\n /**\n * It's important to escape the trigger char for chars like [, (,...\n */\n new RegExp(`\\\\${trigger}${`[^\\\\${trigger}${'\\\\s'}]`}*$`),\n );\n\n const newCaretPosition = computeCaretPosition(newTokenString, startOfTokenPosition);\n\n const modifiedText = `${textToModify.substring(0, startOfTokenPosition)}${newTokenString}`;\n\n stopTracking();\n\n const newText = text.replace(textToModify, modifiedText);\n\n if (giphyEnabled && newText.startsWith('/giphy ')) {\n onChange(newText.slice(7)); // 7 because of '/giphy ' length\n setGiphyActive(true);\n } else {\n onChange(newText);\n }\n\n selectionEnd.current = newCaretPosition || 0;\n\n if (isMentionTrigger(trigger) && isSuggestionUser(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n triggerSetting.callback(item);\n }\n }\n };\n\n const handleCommand = async (text: string) => {\n if (!isCommand(text)) {\n return false;\n }\n\n if (!isTrackingStarted.current) {\n startTracking('/');\n }\n const actualToken = text.trim().slice(1);\n await updateSuggestions({ query: actualToken, trigger: '/' });\n\n return true;\n };\n\n const handleMentions = ({ tokenMatch }: { tokenMatch: RegExpMatchArray | null }) => {\n const lastToken = tokenMatch?.[tokenMatch.length - 1].trim();\n const handleMentionsTrigger =\n (lastToken && Object.keys(triggerSettings).find((trigger) => trigger === lastToken[0])) ||\n null;\n\n /*\n if we lost the trigger token or there is no following character we want to close\n the autocomplete\n */\n if (!lastToken || lastToken.length <= 0) {\n stopTracking();\n return;\n }\n\n const actualToken = lastToken.slice(1);\n\n // if trigger is not configured step out from the function, otherwise proceed\n if (!handleMentionsTrigger) {\n return;\n }\n\n if (!isTrackingStarted.current) {\n startTracking('@');\n }\n\n updateSuggestions({ query: actualToken, trigger: '@' });\n };\n\n const handleEmojis = ({ tokenMatch }: { tokenMatch: RegExpMatchArray | null }) => {\n const lastToken = tokenMatch?.[tokenMatch.length - 1].trim();\n const handleEmojisTrigger =\n (lastToken && Object.keys(triggerSettings).find((trigger) => trigger === lastToken[0])) ||\n null;\n\n /*\n if we lost the trigger token or there is no following character we want to close\n the autocomplete\n */\n if (!lastToken || lastToken.length <= 0) {\n stopTracking();\n return;\n }\n\n const actualToken = lastToken.slice(1);\n\n // if trigger is not configured step out from the function, otherwise proceed\n if (!handleEmojisTrigger) {\n return;\n }\n\n if (!isTrackingStarted.current) {\n startTracking(':');\n }\n\n updateSuggestions({ query: actualToken, trigger: ':' });\n };\n\n const handleSuggestions = async (text: string) => {\n if (\n /\\s/.test(text.slice(selectionEnd.current - 1, selectionEnd.current)) &&\n isTrackingStarted.current\n ) {\n stopTracking();\n } else if (giphyEnabled && !(await handleCommand(text))) {\n const mentionTokenMatch = text\n .slice(0, selectionEnd.current)\n .match(/(?!^|\\W)?@[^\\s]*\\s?[^\\s]*$/g);\n if (mentionTokenMatch) {\n handleMentions({ tokenMatch: mentionTokenMatch });\n } else {\n const emojiTokenMatch = text\n .slice(0, selectionEnd.current)\n .match(/(?!^|\\W)?:\\w{2,}[^\\s]*\\s?[^\\s]*$/g);\n handleEmojis({ tokenMatch: emojiTokenMatch });\n }\n }\n };\n\n const handleSuggestionsThrottled = throttle(handleSuggestions, 100, {\n leading: false,\n });\n\n return (\n <TextInput\n maxLength={maxMessageLength}\n multiline\n onChangeText={(newText) => {\n if (giphyEnabled && newText.startsWith('/giphy ')) {\n handleChange(newText.slice(7)); // 7 because of '/giphy' length\n setGiphyActive(true);\n } else {\n handleChange(newText);\n }\n }}\n onContentSizeChange={({\n nativeEvent: {\n contentSize: { height },\n },\n }) => {\n if (!textHeight) {\n setTextHeight(height);\n }\n }}\n onSelectionChange={handleSelectionChange}\n placeholder={giphyActive ? t('Search GIFs') : t('Send a message')}\n placeholderTextColor={grey}\n ref={setInputBoxRef}\n style={[\n styles.inputBox,\n {\n color: black,\n maxHeight: (textHeight || 17) * numberOfLines,\n },\n inputBox,\n ]}\n testID='auto-complete-text-input'\n value={text}\n {...additionalTextInputProps}\n onBlur={(event) => {\n if (additionalTextInputProps?.onBlur) {\n additionalTextInputProps?.onBlur(event);\n }\n setShowMoreOptions(true);\n }}\n />\n );\n};\n\nconst areEqual = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n prevProps: AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n nextProps: AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const { giphyActive: prevGiphyActive, t: prevT, text: prevText } = prevProps;\n const { giphyActive: nextGiphyActive, t: nextT, text: nextText } = nextProps;\n\n const giphyActiveEqual = prevGiphyActive === nextGiphyActive;\n if (!giphyActiveEqual) return false;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const textEqual = prevText === nextText;\n if (!textEqual) return false;\n\n return true;\n};\n\nconst MemoizedAutoCompleteInput = React.memo(\n AutoCompleteInputWithContext,\n areEqual,\n) as typeof AutoCompleteInputWithContext;\n\nexport const AutoCompleteInput = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: AutoCompleteInputProps<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const { giphyEnabled } = useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();\n const {\n additionalTextInputProps,\n autoCompleteSuggestionsLimit,\n giphyActive,\n maxMessageLength,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n numberOfLines,\n onChange,\n setGiphyActive,\n setInputBoxRef,\n setShowMoreOptions,\n text,\n triggerSettings,\n } = useMessageInputContext<At, Ch, Co, Ev, Me, Re, Us>();\n const { closeSuggestions, openSuggestions, updateSuggestions } = useSuggestionsContext<Co, Us>();\n const { t } = useTranslationContext();\n\n return (\n <MemoizedAutoCompleteInput\n {...{\n additionalTextInputProps,\n autoCompleteSuggestionsLimit,\n closeSuggestions,\n giphyActive,\n giphyEnabled,\n maxMessageLength,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n numberOfLines,\n onChange,\n openSuggestions,\n setGiphyActive,\n setInputBoxRef,\n setShowMoreOptions,\n t,\n text,\n triggerSettings,\n updateSuggestions,\n }}\n {...props}\n />\n );\n};\n\nAutoCompleteInput.displayName = 'AutoCompleteInput{messageInput{inputBox}}';\n"]}
1
+ {"version":3,"sources":["AutoCompleteInput.tsx"],"names":["styles","StyleSheet","create","inputBox","flex","fontSize","includeFontPadding","padding","paddingTop","textAlignVertical","computeCaretPosition","token","startOfTokenPosition","length","isCommand","text","split","AutoCompleteInputWithContext","props","additionalTextInputProps","autoCompleteSuggestionsLimit","closeSuggestions","giphyActive","giphyEnabled","maxMessageLength","mentionAllAppUsersEnabled","mentionAllAppUsersQuery","numberOfLines","onChange","openSuggestions","setGiphyActive","setInputBoxRef","setShowMoreOptions","t","triggerSettings","updateSuggestionsContext","updateSuggestions","isTrackingStarted","selectionEnd","textHeight","setTextHeight","theme","colors","black","grey","messageInput","handleChange","newText","fromUpdate","handleSuggestionsThrottled","startTracking","trigger","triggerSetting","current","Component","component","undefined","stopTracking","query","dataProvider","data","queryCallback","onSelect","item","onSelectSuggestion","limit","handleSelectionChange","end","nativeEvent","selection","newTokenString","output","textToModify","slice","lastIndexOf","newCaretPosition","modifiedText","substring","replace","startsWith","callback","handleCommand","actualToken","trim","handleMentions","tokenMatch","lastToken","handleMentionsTrigger","Object","keys","find","handleEmojis","handleEmojisTrigger","handleSuggestions","test","mentionTokenMatch","match","emojiTokenMatch","leading","height","contentSize","color","maxHeight","event","onBlur","areEqual","prevProps","nextProps","prevGiphyActive","prevT","prevText","nextGiphyActive","nextT","nextText","giphyActiveEqual","tEqual","textEqual","MemoizedAutoCompleteInput","React","memo","AutoCompleteInput","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { StyleSheet, TextInput } from 'react-native';\nimport throttle from 'lodash/throttle';\n\nimport { CommandsHeader } from './CommandsHeader';\nimport { EmojisHeader } from './EmojisHeader';\n\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n isSuggestionCommand,\n isSuggestionEmoji,\n isSuggestionUser,\n Suggestion,\n SuggestionCommand,\n SuggestionsContextValue,\n SuggestionUser,\n useSuggestionsContext,\n} from '../../contexts/suggestionsContext/SuggestionsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\nimport { isCommandTrigger, isEmojiTrigger, isMentionTrigger } from '../../utils/utils';\n\nimport type { TextInputProps } from 'react-native';\n\nimport type { Emoji } from '../../emoji-data/compiled';\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../types/types';\nimport type { Trigger } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n inputBox: {\n flex: 1,\n fontSize: 14,\n includeFontPadding: false, // for android vertical text centering\n padding: 0, // removal of default text input padding on android\n paddingTop: 0, // removal of iOS top padding for weird centering\n textAlignVertical: 'center', // for android vertical text centering\n },\n});\n\nconst computeCaretPosition = (token: string, startOfTokenPosition: number) =>\n startOfTokenPosition + token.length;\n\nconst isCommand = (text: string) => text[0] === '/' && text.split(' ').length <= 1;\n\ntype AutoCompleteInputPropsWithContext<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Pick<ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'giphyEnabled'> &\n Pick<\n MessageInputContextValue<At, Ch, Co, Ev, Me, Re, Us>,\n | 'additionalTextInputProps'\n | 'autoCompleteSuggestionsLimit'\n | 'giphyActive'\n | 'maxMessageLength'\n | 'mentionAllAppUsersEnabled'\n | 'mentionAllAppUsersQuery'\n | 'numberOfLines'\n | 'onChange'\n | 'setGiphyActive'\n | 'setInputBoxRef'\n | 'setShowMoreOptions'\n | 'text'\n | 'triggerSettings'\n > &\n Pick<\n SuggestionsContextValue<Co, Us>,\n 'closeSuggestions' | 'openSuggestions' | 'updateSuggestions'\n > &\n Pick<TranslationContextValue, 't'>;\n\nexport type AutoCompleteInputProps<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>>;\n\nconst AutoCompleteInputWithContext = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n additionalTextInputProps,\n autoCompleteSuggestionsLimit,\n closeSuggestions,\n giphyActive,\n giphyEnabled,\n maxMessageLength,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n numberOfLines,\n onChange,\n openSuggestions,\n setGiphyActive,\n setInputBoxRef,\n setShowMoreOptions,\n t,\n text,\n triggerSettings,\n updateSuggestions: updateSuggestionsContext,\n } = props;\n\n const isTrackingStarted = useRef(false);\n const selectionEnd = useRef(0);\n const [textHeight, setTextHeight] = useState(0);\n\n const {\n theme: {\n colors: { black, grey },\n messageInput: { inputBox },\n },\n } = useTheme();\n\n const handleChange = (newText: string, fromUpdate = false) => {\n if (!fromUpdate) {\n onChange(newText);\n } else {\n handleSuggestionsThrottled(newText);\n }\n };\n\n useEffect(() => {\n handleChange(text, true);\n }, [text]);\n\n const startTracking = (trigger: Trigger) => {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n isTrackingStarted.current = true;\n const { component: Component } = triggerSetting;\n openSuggestions(\n typeof Component === 'string' ? Component : <Component />,\n trigger === ':' ? (\n <EmojisHeader title='' />\n ) : trigger === '/' ? (\n <CommandsHeader />\n ) : undefined,\n );\n }\n };\n\n const stopTracking = () => {\n isTrackingStarted.current = false;\n closeSuggestions();\n };\n\n const updateSuggestions = async ({\n query,\n trigger,\n }: {\n query: Suggestion['name'];\n trigger: Trigger;\n }) => {\n if (isMentionTrigger(trigger)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n await triggerSetting.dataProvider(\n query as SuggestionUser<Us>['name'],\n text,\n (data, queryCallback) => {\n if (query === queryCallback) {\n updateSuggestionsContext({\n data,\n onSelect: (item) => onSelectSuggestion({ item, trigger }),\n });\n }\n },\n {\n limit: autoCompleteSuggestionsLimit,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n },\n );\n }\n } else if (isCommandTrigger(trigger)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n await triggerSetting.dataProvider(\n query as SuggestionCommand<Co>['name'],\n text,\n (data, queryCallback) => {\n if (query !== queryCallback) {\n return;\n }\n\n updateSuggestionsContext({\n data,\n onSelect: (item) => onSelectSuggestion({ item, trigger }),\n });\n },\n {\n limit: autoCompleteSuggestionsLimit,\n },\n );\n }\n } else {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n await triggerSetting.dataProvider(query as Emoji['name'], text, (data, queryCallback) => {\n if (query !== queryCallback) {\n return;\n }\n\n updateSuggestionsContext(\n {\n data,\n onSelect: (item) => onSelectSuggestion({ item, trigger }),\n },\n <EmojisHeader title={query} />,\n );\n });\n }\n }\n };\n\n const handleSelectionChange: TextInputProps['onSelectionChange'] = ({\n nativeEvent: {\n selection: { end },\n },\n }) => {\n selectionEnd.current = end;\n };\n\n const onSelectSuggestion = ({\n item,\n trigger,\n }: {\n item: Suggestion<Co, Us>;\n trigger: Trigger;\n }) => {\n if (!trigger || !triggerSettings[trigger]) {\n return;\n }\n\n let newTokenString = '';\n if (isCommandTrigger(trigger) && isSuggestionCommand(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n newTokenString = `${triggerSetting.output(item).text} `;\n }\n }\n if (isEmojiTrigger(trigger) && isSuggestionEmoji(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n newTokenString = `${triggerSetting.output(item).text} `;\n }\n }\n if (isMentionTrigger(trigger) && isSuggestionUser(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n newTokenString = `${triggerSetting.output(item).text} `;\n }\n }\n\n const textToModify = text.slice(0, selectionEnd.current);\n\n const startOfTokenPosition = textToModify.lastIndexOf(trigger, selectionEnd.current);\n\n const newCaretPosition = computeCaretPosition(newTokenString, startOfTokenPosition);\n\n const modifiedText = `${textToModify.substring(0, startOfTokenPosition)}${newTokenString}`;\n\n stopTracking();\n\n const newText = text.replace(textToModify, modifiedText);\n\n if (giphyEnabled && newText.startsWith('/giphy ')) {\n onChange(newText.slice(7)); // 7 because of '/giphy ' length\n setGiphyActive(true);\n } else {\n onChange(newText);\n }\n\n selectionEnd.current = newCaretPosition || 0;\n\n if (isMentionTrigger(trigger) && isSuggestionUser(item)) {\n const triggerSetting = triggerSettings[trigger];\n if (triggerSetting) {\n triggerSetting.callback(item);\n }\n }\n };\n\n const handleCommand = async (text: string) => {\n if (!isCommand(text)) {\n return false;\n }\n\n if (!isTrackingStarted.current) {\n startTracking('/');\n }\n const actualToken = text.trim().slice(1);\n await updateSuggestions({ query: actualToken, trigger: '/' });\n\n return true;\n };\n\n const handleMentions = ({ tokenMatch }: { tokenMatch: RegExpMatchArray | null }) => {\n const lastToken = tokenMatch?.[tokenMatch.length - 1];\n const handleMentionsTrigger =\n (lastToken && Object.keys(triggerSettings).find((trigger) => trigger === lastToken[0])) ||\n null;\n\n /*\n if we lost the trigger token or there is no following character we want to close\n the autocomplete\n */\n if (!lastToken || lastToken.length <= 0) {\n stopTracking();\n return;\n }\n\n const actualToken = lastToken.slice(1);\n\n // if trigger is not configured step out from the function, otherwise proceed\n if (!handleMentionsTrigger) {\n return;\n }\n\n if (!isTrackingStarted.current) {\n startTracking('@');\n }\n\n updateSuggestions({ query: actualToken, trigger: '@' });\n };\n\n const handleEmojis = ({ tokenMatch }: { tokenMatch: RegExpMatchArray | null }) => {\n const lastToken = tokenMatch?.[tokenMatch.length - 1].trim();\n const handleEmojisTrigger =\n (lastToken && Object.keys(triggerSettings).find((trigger) => trigger === lastToken[0])) ||\n null;\n\n /*\n if we lost the trigger token or there is no following character we want to close\n the autocomplete\n */\n if (!lastToken || lastToken.length <= 0) {\n stopTracking();\n return;\n }\n\n const actualToken = lastToken.slice(1);\n\n // if trigger is not configured step out from the function, otherwise proceed\n if (!handleEmojisTrigger) {\n return;\n }\n\n if (!isTrackingStarted.current) {\n startTracking(':');\n }\n\n updateSuggestions({ query: actualToken, trigger: ':' });\n };\n\n const handleSuggestions = async (text: string) => {\n if (\n /\\s/.test(text.slice(selectionEnd.current - 1, selectionEnd.current)) &&\n isTrackingStarted.current\n ) {\n stopTracking();\n } else if (giphyEnabled && !(await handleCommand(text))) {\n const mentionTokenMatch = text\n .slice(0, selectionEnd.current)\n .match(/(?!^|\\W)?@[^\\s@]*\\s?[^\\s@]*$/g);\n if (mentionTokenMatch) {\n handleMentions({ tokenMatch: mentionTokenMatch });\n } else {\n const emojiTokenMatch = text\n .slice(0, selectionEnd.current)\n .match(/(?!^|\\W)?:\\w{2,}[^\\s]*\\s?[^\\s]*$/g);\n handleEmojis({ tokenMatch: emojiTokenMatch });\n }\n }\n };\n\n const handleSuggestionsThrottled = throttle(handleSuggestions, 100, {\n leading: false,\n });\n\n return (\n <TextInput\n maxLength={maxMessageLength}\n multiline\n onChangeText={(newText) => {\n if (giphyEnabled && newText.startsWith('/giphy ')) {\n handleChange(newText.slice(7)); // 7 because of '/giphy' length\n setGiphyActive(true);\n } else {\n handleChange(newText);\n }\n }}\n onContentSizeChange={({\n nativeEvent: {\n contentSize: { height },\n },\n }) => {\n if (!textHeight) {\n setTextHeight(height);\n }\n }}\n onSelectionChange={handleSelectionChange}\n placeholder={giphyActive ? t('Search GIFs') : t('Send a message')}\n placeholderTextColor={grey}\n ref={setInputBoxRef}\n style={[\n styles.inputBox,\n {\n color: black,\n maxHeight: (textHeight || 17) * numberOfLines,\n },\n inputBox,\n ]}\n testID='auto-complete-text-input'\n value={text}\n {...additionalTextInputProps}\n onBlur={(event) => {\n if (additionalTextInputProps?.onBlur) {\n additionalTextInputProps?.onBlur(event);\n }\n setShowMoreOptions(true);\n }}\n />\n );\n};\n\nconst areEqual = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n prevProps: AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n nextProps: AutoCompleteInputPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const { giphyActive: prevGiphyActive, t: prevT, text: prevText } = prevProps;\n const { giphyActive: nextGiphyActive, t: nextT, text: nextText } = nextProps;\n\n const giphyActiveEqual = prevGiphyActive === nextGiphyActive;\n if (!giphyActiveEqual) return false;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const textEqual = prevText === nextText;\n if (!textEqual) return false;\n\n return true;\n};\n\nconst MemoizedAutoCompleteInput = React.memo(\n AutoCompleteInputWithContext,\n areEqual,\n) as typeof AutoCompleteInputWithContext;\n\nexport const AutoCompleteInput = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: AutoCompleteInputProps<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const { giphyEnabled } = useChannelContext<At, Ch, Co, Ev, Me, Re, Us>();\n const {\n additionalTextInputProps,\n autoCompleteSuggestionsLimit,\n giphyActive,\n maxMessageLength,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n numberOfLines,\n onChange,\n setGiphyActive,\n setInputBoxRef,\n setShowMoreOptions,\n text,\n triggerSettings,\n } = useMessageInputContext<At, Ch, Co, Ev, Me, Re, Us>();\n const { closeSuggestions, openSuggestions, updateSuggestions } = useSuggestionsContext<Co, Us>();\n const { t } = useTranslationContext();\n\n return (\n <MemoizedAutoCompleteInput\n {...{\n additionalTextInputProps,\n autoCompleteSuggestionsLimit,\n closeSuggestions,\n giphyActive,\n giphyEnabled,\n maxMessageLength,\n mentionAllAppUsersEnabled,\n mentionAllAppUsersQuery,\n numberOfLines,\n onChange,\n openSuggestions,\n setGiphyActive,\n setInputBoxRef,\n setShowMoreOptions,\n t,\n text,\n triggerSettings,\n updateSuggestions,\n }}\n {...props}\n />\n );\n};\n\nAutoCompleteInput.displayName = 'AutoCompleteInput{messageInput{inputBox}}';\n"]}
@@ -203,7 +203,7 @@ var debounceOptions = {
203
203
  var unreadMessagesOnInitialLoadLimit = 2;
204
204
 
205
205
  var ChannelWithContext = function ChannelWithContext(props) {
206
- var _channel$state, _channel$state$thread, _client$user, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _channel$data, _ref28, _channel$getConfig2;
206
+ var _channel$state, _channel$state$thread, _client$user, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _channel$data, _ref28;
207
207
 
208
208
  var additionalKeyboardAvoidingViewProps = props.additionalKeyboardAvoidingViewProps,
209
209
  additionalTextInputProps = props.additionalTextInputProps,
@@ -422,93 +422,98 @@ var ChannelWithContext = function ChannelWithContext(props) {
422
422
 
423
423
  var _useState = (0, _react.useState)(false),
424
424
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
425
- editing = _useState2[0],
426
- setEditing = _useState2[1];
425
+ deleted = _useState2[0],
426
+ setDeleted = _useState2[1];
427
427
 
428
428
  var _useState3 = (0, _react.useState)(false),
429
429
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
430
- error = _useState4[0],
431
- setError = _useState4[1];
430
+ editing = _useState4[0],
431
+ setEditing = _useState4[1];
432
432
 
433
- var _useState5 = (0, _react.useState)(true),
433
+ var _useState5 = (0, _react.useState)(false),
434
434
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
435
- hasMore = _useState6[0],
436
- setHasMore = _useState6[1];
435
+ error = _useState6[0],
436
+ setError = _useState6[1];
437
437
 
438
- var _useState7 = (0, _react.useState)(),
438
+ var _useState7 = (0, _react.useState)(true),
439
439
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
440
- lastRead = _useState8[0],
441
- setLastRead = _useState8[1];
440
+ hasMore = _useState8[0],
441
+ setHasMore = _useState8[1];
442
442
 
443
- var _useState9 = (0, _react.useState)(true),
443
+ var _useState9 = (0, _react.useState)(),
444
444
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
445
- loading = _useState10[0],
446
- setLoading = _useState10[1];
445
+ lastRead = _useState10[0],
446
+ setLastRead = _useState10[1];
447
447
 
448
- var _useState11 = (0, _react.useState)(false),
448
+ var _useState11 = (0, _react.useState)(true),
449
449
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
450
- loadingMore = _useState12[0],
451
- setLoadingMore = _useState12[1];
450
+ loading = _useState12[0],
451
+ setLoading = _useState12[1];
452
452
 
453
453
  var _useState13 = (0, _react.useState)(false),
454
454
  _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
455
- loadingMoreRecent = _useState14[0],
456
- setLoadingMoreRecent = _useState14[1];
455
+ loadingMore = _useState14[0],
456
+ setLoadingMore = _useState14[1];
457
457
 
458
- var _useState15 = (0, _react.useState)([]),
458
+ var _useState15 = (0, _react.useState)(false),
459
459
  _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
460
- messages = _useState16[0],
461
- setMessages = _useState16[1];
460
+ loadingMoreRecent = _useState16[0],
461
+ setLoadingMoreRecent = _useState16[1];
462
462
 
463
- var _useState17 = (0, _react.useState)({}),
463
+ var _useState17 = (0, _react.useState)([]),
464
464
  _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
465
- members = _useState18[0],
466
- setMembers = _useState18[1];
465
+ messages = _useState18[0],
466
+ setMessages = _useState18[1];
467
467
 
468
- var _useState19 = (0, _react.useState)(false),
468
+ var _useState19 = (0, _react.useState)({}),
469
469
  _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
470
- quotedMessage = _useState20[0],
471
- setQuotedMessage = _useState20[1];
470
+ members = _useState20[0],
471
+ setMembers = _useState20[1];
472
472
 
473
- var _useState21 = (0, _react.useState)({}),
473
+ var _useState21 = (0, _react.useState)(false),
474
474
  _useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
475
- read = _useState22[0],
476
- setRead = _useState22[1];
475
+ quotedMessage = _useState22[0],
476
+ setQuotedMessage = _useState22[1];
477
477
 
478
- var _useState23 = (0, _react.useState)(threadProps || null),
478
+ var _useState23 = (0, _react.useState)({}),
479
479
  _useState24 = (0, _slicedToArray2["default"])(_useState23, 2),
480
- thread = _useState24[0],
481
- setThread = _useState24[1];
480
+ read = _useState24[0],
481
+ setRead = _useState24[1];
482
482
 
483
- var _useState25 = (0, _react.useState)(true),
483
+ var _useState25 = (0, _react.useState)(threadProps || null),
484
484
  _useState26 = (0, _slicedToArray2["default"])(_useState25, 2),
485
- threadHasMore = _useState26[0],
486
- setThreadHasMore = _useState26[1];
485
+ thread = _useState26[0],
486
+ setThread = _useState26[1];
487
487
 
488
- var _useState27 = (0, _react.useState)(false),
488
+ var _useState27 = (0, _react.useState)(true),
489
489
  _useState28 = (0, _slicedToArray2["default"])(_useState27, 2),
490
- threadLoadingMore = _useState28[0],
491
- setThreadLoadingMore = _useState28[1];
490
+ threadHasMore = _useState28[0],
491
+ setThreadHasMore = _useState28[1];
492
492
 
493
- var _useState29 = (0, _react.useState)((threadProps == null ? void 0 : threadProps.id) && (channel == null ? void 0 : (_channel$state = channel.state) == null ? void 0 : (_channel$state$thread = _channel$state.threads) == null ? void 0 : _channel$state$thread[threadProps.id]) || []),
493
+ var _useState29 = (0, _react.useState)(false),
494
494
  _useState30 = (0, _slicedToArray2["default"])(_useState29, 2),
495
- threadMessages = _useState30[0],
496
- setThreadMessages = _useState30[1];
495
+ threadLoadingMore = _useState30[0],
496
+ setThreadLoadingMore = _useState30[1];
497
497
 
498
- var _useState31 = (0, _react.useState)({}),
498
+ var _useState31 = (0, _react.useState)((threadProps == null ? void 0 : threadProps.id) && (channel == null ? void 0 : (_channel$state = channel.state) == null ? void 0 : (_channel$state$thread = _channel$state.threads) == null ? void 0 : _channel$state$thread[threadProps.id]) || []),
499
499
  _useState32 = (0, _slicedToArray2["default"])(_useState31, 2),
500
- typing = _useState32[0],
501
- setTyping = _useState32[1];
500
+ threadMessages = _useState32[0],
501
+ setThreadMessages = _useState32[1];
502
502
 
503
- var _useState33 = (0, _react.useState)(),
503
+ var _useState33 = (0, _react.useState)({}),
504
504
  _useState34 = (0, _slicedToArray2["default"])(_useState33, 2),
505
- watcherCount = _useState34[0],
506
- setWatcherCount = _useState34[1];
505
+ typing = _useState34[0],
506
+ setTyping = _useState34[1];
507
507
 
508
- var _useState35 = (0, _react.useState)({}),
508
+ var _useState35 = (0, _react.useState)(),
509
509
  _useState36 = (0, _slicedToArray2["default"])(_useState35, 2),
510
- watchers = _useState36[0],
511
- setWatchers = _useState36[1];
510
+ watcherCount = _useState36[0],
511
+ setWatcherCount = _useState36[1];
512
+
513
+ var _useState37 = (0, _react.useState)({}),
514
+ _useState38 = (0, _slicedToArray2["default"])(_useState37, 2),
515
+ watchers = _useState38[0],
516
+ setWatchers = _useState38[1];
512
517
 
513
518
  var _useTargetedMessage = (0, _useTargetedMessage2.useTargetedMessage)(messageId),
514
519
  setTargetedMessage = _useTargetedMessage.setTargetedMessage,
@@ -574,9 +579,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
574
579
  var isModerator = (channel == null ? void 0 : channel.state.membership.role) === 'channel_moderator' || (channel == null ? void 0 : channel.state.membership.role) === 'moderator';
575
580
  var isOwner = (channel == null ? void 0 : channel.state.membership.role) === 'owner';
576
581
  var markRead = (0, _react.useRef)((0, _throttle["default"])(function () {
577
- var _channel$getConfig;
578
-
579
- if (channel != null && channel.disconnected || !(channel != null && channel.getConfig != null && (_channel$getConfig = channel.getConfig()) != null && _channel$getConfig.read_events)) {
582
+ if (!channel || channel != null && channel.disconnected || !(clientChannelConfig != null && clientChannelConfig.read_events)) {
580
583
  return;
581
584
  }
582
585
 
@@ -655,13 +658,29 @@ var ChannelWithContext = function ChannelWithContext(props) {
655
658
  };
656
659
 
657
660
  (0, _react.useEffect)(function () {
658
- client.on('connection.recovered', connectionRecoveredHandler);
659
- client.on('connection.changed', connectionChangedHandler);
660
- channel == null ? void 0 : channel.on(handleEvent);
661
+ var channelSubscriptions = [];
662
+ var clientSubscriptions = [];
663
+
664
+ var subscribe = function subscribe() {
665
+ if (!channel) return;
666
+ clientSubscriptions.push(client.on('connection.recovered', connectionRecoveredHandler));
667
+ clientSubscriptions.push(client.on('connection.changed', connectionChangedHandler));
668
+ clientSubscriptions.push(client.on('channel.deleted', function (event) {
669
+ if (event.cid === channel.cid) {
670
+ setDeleted(true);
671
+ }
672
+ }));
673
+ channelSubscriptions.push(channel.on(handleEvent));
674
+ };
675
+
676
+ subscribe();
661
677
  return function () {
662
- client.off('connection.recovered', connectionRecoveredHandler);
663
- client.off('connection.changed', connectionChangedHandler);
664
- channel == null ? void 0 : channel.off(handleEvent);
678
+ clientSubscriptions.forEach(function (s) {
679
+ return s.unsubscribe();
680
+ });
681
+ channelSubscriptions.forEach(function (s) {
682
+ return s.unsubscribe();
683
+ });
665
684
  };
666
685
  }, [channelId, connectionRecoveredHandler, handleEvent]);
667
686
 
@@ -1244,7 +1263,15 @@ var ChannelWithContext = function ChannelWithContext(props) {
1244
1263
  };
1245
1264
  }();
1246
1265
 
1247
- var clientChannelConfig = typeof (channel == null ? void 0 : channel.getConfig) === 'function' ? channel.getConfig() : undefined;
1266
+ var getChannelConfigSafely = function getChannelConfigSafely() {
1267
+ try {
1268
+ return channel == null ? void 0 : channel.getConfig();
1269
+ } catch (_) {
1270
+ return null;
1271
+ }
1272
+ };
1273
+
1274
+ var clientChannelConfig = getChannelConfigSafely();
1248
1275
  var messagesConfig = {
1249
1276
  mutesEnabled: (_ref14 = mutesEnabledProp != null ? mutesEnabledProp : clientChannelConfig == null ? void 0 : clientChannelConfig.mutes) != null ? _ref14 : true,
1250
1277
  quotedRepliesEnabled: quotedRepliesEnabledProp != null ? quotedRepliesEnabledProp : true,
@@ -1772,7 +1799,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1772
1799
  enableMessageGroupingByUser: enableMessageGroupingByUser,
1773
1800
  enforceUniqueReaction: enforceUniqueReaction,
1774
1801
  error: error,
1775
- giphyEnabled: giphyEnabled != null ? giphyEnabled : !!((_ref28 = (channel == null ? void 0 : channel.getConfig == null ? void 0 : (_channel$getConfig2 = channel.getConfig()) == null ? void 0 : _channel$getConfig2.commands) || []) != null && _ref28.some(function (command) {
1802
+ giphyEnabled: giphyEnabled != null ? giphyEnabled : !!((_ref28 = (clientChannelConfig == null ? void 0 : clientChannelConfig.commands) || []) != null && _ref28.some(function (command) {
1776
1803
  return command.name === 'giphy';
1777
1804
  })),
1778
1805
  hideDateSeparators: hideDateSeparators,
@@ -1947,6 +1974,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1947
1974
  var typingContext = (0, _useCreateTypingContext.useCreateTypingContext)({
1948
1975
  typing: typing
1949
1976
  });
1977
+ if (deleted) return null;
1950
1978
 
1951
1979
  if (!channel || error && messages.length === 0) {
1952
1980
  return _react["default"].createElement(LoadingErrorIndicator, {
@@ -1956,7 +1984,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1956
1984
  __self: _this,
1957
1985
  __source: {
1958
1986
  fileName: _jsxFileName,
1959
- lineNumber: 1784,
1987
+ lineNumber: 1812,
1960
1988
  columnNumber: 12
1961
1989
  }
1962
1990
  });
@@ -1971,7 +1999,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1971
1999
  __self: _this,
1972
2000
  __source: {
1973
2001
  fileName: _jsxFileName,
1974
- lineNumber: 1789,
2002
+ lineNumber: 1817,
1975
2003
  columnNumber: 7
1976
2004
  }
1977
2005
  }, t('Please select a channel first'));
@@ -1985,7 +2013,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1985
2013
  __self: _this,
1986
2014
  __source: {
1987
2015
  fileName: _jsxFileName,
1988
- lineNumber: 1796,
2016
+ lineNumber: 1824,
1989
2017
  columnNumber: 5
1990
2018
  }
1991
2019
  }), _react["default"].createElement(_ChannelContext.ChannelProvider, {
@@ -1993,7 +2021,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1993
2021
  __self: _this,
1994
2022
  __source: {
1995
2023
  fileName: _jsxFileName,
1996
- lineNumber: 1802,
2024
+ lineNumber: 1830,
1997
2025
  columnNumber: 7
1998
2026
  }
1999
2027
  }, _react["default"].createElement(_TypingContext.TypingProvider, {
@@ -2001,7 +2029,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2001
2029
  __self: _this,
2002
2030
  __source: {
2003
2031
  fileName: _jsxFileName,
2004
- lineNumber: 1803,
2032
+ lineNumber: 1831,
2005
2033
  columnNumber: 9
2006
2034
  }
2007
2035
  }, _react["default"].createElement(_PaginatedMessageListContext.PaginatedMessageListProvider, {
@@ -2009,7 +2037,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2009
2037
  __self: _this,
2010
2038
  __source: {
2011
2039
  fileName: _jsxFileName,
2012
- lineNumber: 1804,
2040
+ lineNumber: 1832,
2013
2041
  columnNumber: 11
2014
2042
  }
2015
2043
  }, _react["default"].createElement(_MessagesContext.MessagesProvider, {
@@ -2017,7 +2045,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2017
2045
  __self: _this,
2018
2046
  __source: {
2019
2047
  fileName: _jsxFileName,
2020
- lineNumber: 1805,
2048
+ lineNumber: 1833,
2021
2049
  columnNumber: 13
2022
2050
  }
2023
2051
  }, _react["default"].createElement(_ThreadContext.ThreadProvider, {
@@ -2025,7 +2053,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2025
2053
  __self: _this,
2026
2054
  __source: {
2027
2055
  fileName: _jsxFileName,
2028
- lineNumber: 1806,
2056
+ lineNumber: 1834,
2029
2057
  columnNumber: 15
2030
2058
  }
2031
2059
  }, _react["default"].createElement(_SuggestionsContext.SuggestionsProvider, {
@@ -2033,7 +2061,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2033
2061
  __self: _this,
2034
2062
  __source: {
2035
2063
  fileName: _jsxFileName,
2036
- lineNumber: 1807,
2064
+ lineNumber: 1835,
2037
2065
  columnNumber: 17
2038
2066
  }
2039
2067
  }, _react["default"].createElement(_MessageInputContext.MessageInputProvider, {
@@ -2041,7 +2069,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2041
2069
  __self: _this,
2042
2070
  __source: {
2043
2071
  fileName: _jsxFileName,
2044
- lineNumber: 1808,
2072
+ lineNumber: 1836,
2045
2073
  columnNumber: 19
2046
2074
  }
2047
2075
  }, _react["default"].createElement(_reactNative.View, {
@@ -2051,7 +2079,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2051
2079
  __self: _this,
2052
2080
  __source: {
2053
2081
  fileName: _jsxFileName,
2054
- lineNumber: 1809,
2082
+ lineNumber: 1837,
2055
2083
  columnNumber: 21
2056
2084
  }
2057
2085
  }, children)))))))));
@@ -2071,7 +2099,7 @@ var Channel = function Channel(props) {
2071
2099
  __self: _this,
2072
2100
  __source: {
2073
2101
  fileName: _jsxFileName,
2074
- lineNumber: 1854,
2102
+ lineNumber: 1882,
2075
2103
  columnNumber: 5
2076
2104
  }
2077
2105
  }));