@sendbird/uikit-react-native 3.7.4 → 3.7.5

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 (64) hide show
  1. package/README.md +5 -4
  2. package/lib/commonjs/components/ChannelInput/index.js +1 -1
  3. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  4. package/lib/commonjs/components/FileViewer/FileViewerContent.js +1 -1
  5. package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -1
  6. package/lib/commonjs/components/FileViewer/FileViewerFooter.js +1 -0
  7. package/lib/commonjs/components/FileViewer/FileViewerFooter.js.map +1 -1
  8. package/lib/commonjs/components/FileViewer/FileViewerHeader.js +1 -0
  9. package/lib/commonjs/components/FileViewer/FileViewerHeader.js.map +1 -1
  10. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js +3 -1
  11. package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  12. package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js +3 -1
  13. package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
  14. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +15 -1
  15. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  16. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +15 -1
  17. package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
  18. package/lib/commonjs/hooks/usePushTokenRegistration.js +2 -2
  19. package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -1
  20. package/lib/commonjs/platform/createFileService.native.js +2 -2
  21. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  22. package/lib/commonjs/platform/createPlayerService.native.js +3 -4
  23. package/lib/commonjs/platform/createPlayerService.native.js.map +1 -1
  24. package/lib/commonjs/version.js +1 -1
  25. package/lib/commonjs/version.js.map +1 -1
  26. package/lib/module/components/ChannelInput/index.js +1 -1
  27. package/lib/module/components/ChannelInput/index.js.map +1 -1
  28. package/lib/module/components/FileViewer/FileViewerContent.js +1 -1
  29. package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -1
  30. package/lib/module/components/FileViewer/FileViewerFooter.js +1 -0
  31. package/lib/module/components/FileViewer/FileViewerFooter.js.map +1 -1
  32. package/lib/module/components/FileViewer/FileViewerHeader.js +1 -0
  33. package/lib/module/components/FileViewer/FileViewerHeader.js.map +1 -1
  34. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js +3 -1
  35. package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
  36. package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js +3 -1
  37. package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
  38. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +15 -1
  39. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  40. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +15 -1
  41. package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
  42. package/lib/module/hooks/usePushTokenRegistration.js +2 -2
  43. package/lib/module/hooks/usePushTokenRegistration.js.map +1 -1
  44. package/lib/module/platform/createFileService.native.js +2 -2
  45. package/lib/module/platform/createFileService.native.js.map +1 -1
  46. package/lib/module/platform/createPlayerService.native.js +3 -4
  47. package/lib/module/platform/createPlayerService.native.js.map +1 -1
  48. package/lib/module/version.js +1 -1
  49. package/lib/module/version.js.map +1 -1
  50. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  51. package/lib/typescript/src/version.d.ts +1 -1
  52. package/package.json +6 -6
  53. package/src/components/ChannelInput/index.tsx +1 -1
  54. package/src/components/FileViewer/FileViewerContent.tsx +1 -1
  55. package/src/components/FileViewer/FileViewerFooter.tsx +1 -0
  56. package/src/components/FileViewer/FileViewerHeader.tsx +1 -0
  57. package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +4 -1
  58. package/src/components/ReactionBottomSheets/ReactionListBottomSheet.tsx +5 -1
  59. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +17 -1
  60. package/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx +16 -1
  61. package/src/hooks/usePushTokenRegistration.ts +2 -2
  62. package/src/platform/createFileService.native.ts +2 -6
  63. package/src/platform/createPlayerService.native.tsx +5 -4
  64. package/src/version.ts +1 -1
package/README.md CHANGED
@@ -76,14 +76,15 @@ Add the following permissions to your `android/app/src/main/AndroidManifest.xml`
76
76
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
77
77
  package="com.your.app">
78
78
 
79
- <uses-permission android:name="android.permission.CAMERA" />
79
+ <!-- Permissions for voice message -->
80
80
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
81
+
82
+ <!-- Permissions for image attachments -->
81
83
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
82
84
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
85
+
86
+ <!-- Permissions for notifications (Android 13) -->
83
87
  <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
84
- <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
85
- <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
86
- <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
87
88
 
88
89
  </manifest>
89
90
  ```
@@ -152,7 +152,7 @@ const useTypingTrigger = (text, channel) => {
152
152
  (0, _react.useEffect)(() => {
153
153
  function triggerTyping() {
154
154
  if (channel.isGroupChannel()) {
155
- const action = text.length === 0 ? channel.endTyping : channel.startTyping;
155
+ const action = () => text.length === 0 ? channel.endTyping() : channel.startTyping();
156
156
  action().catch(error => {
157
157
  _uikitUtils.Logger.debug('ChannelInput: Failed to trigger typing', error);
158
158
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","_useContext","_useMentionTextInput","_interopRequireDefault","_AttachmentsButton","_EditInput","_MessageToReplyPreview","_SendInput","_VoiceMessageInput","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","AUTO_FOCUS","Platform","select","ios","android","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","useSafeAreaInsets","colors","typography","useUIKitTheme","sbOptions","mentionManager","useSendbirdChat","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","useMentionTextInput","inputMode","useIIFE","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","inputHeight","setInputHeight","useState","styles","inputDefault","height","fontStyle","useMemo","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","StyleSheet","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","replace","shouldRenderInput","createElement","SafeAreaBottom","Fragment","KeyboardAvoidingView","keyboardVerticalOffset","behavior","View","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","ref","VoiceMessageInput","AttachmentsButton","MessageToReplyPreview","autoFocus","SuggestedMentionList","topInset","bottomInset","useEffect","triggerTyping","action","endTyping","startTyping","catch","error","Logger","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","_ref","createStyleSheet","justifyContent","width","flex","marginRight","borderRadius","paddingTop","paddingBottom","minHeight","maxHeight","_default","React","memo","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = text.length === 0 ? channel.endTyping : channel.startTyping;\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginRight: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","_useContext","_useMentionTextInput","_interopRequireDefault","_AttachmentsButton","_EditInput","_MessageToReplyPreview","_SendInput","_VoiceMessageInput","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","AUTO_FOCUS","Platform","select","ios","android","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","useSafeAreaInsets","colors","typography","useUIKitTheme","sbOptions","mentionManager","useSendbirdChat","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","useMentionTextInput","inputMode","useIIFE","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","inputHeight","setInputHeight","useState","styles","inputDefault","height","fontStyle","useMemo","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","StyleSheet","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","replace","shouldRenderInput","createElement","SafeAreaBottom","Fragment","KeyboardAvoidingView","keyboardVerticalOffset","behavior","View","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","ref","VoiceMessageInput","AttachmentsButton","MessageToReplyPreview","autoFocus","SuggestedMentionList","topInset","bottomInset","useEffect","triggerTyping","action","endTyping","startTyping","catch","error","Logger","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","_ref","createStyleSheet","justifyContent","width","flex","marginRight","borderRadius","paddingTop","paddingBottom","minHeight","maxHeight","_default","React","memo","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = () => (text.length === 0 ? channel.endTyping() : channel.startTyping());\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginRight: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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"}
@@ -129,7 +129,7 @@ const ZoomableImageView = _ref2 => {
129
129
  };
130
130
  const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
131
131
  container: {
132
- zIndex: -1,
132
+ zIndex: 0,
133
133
  flex: 1,
134
134
  alignItems: 'center',
135
135
  justifyContent: 'center'
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeZoomableView","require","_react","_interopRequireWildcard","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_SBUUtils","_interopRequireDefault","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","FileViewerContent","_ref","type","src","topInset","bottomInset","maxZoom","minZoom","onPress","loading","setLoading","useState","defaultHeight","useHeaderStyle","mediaService","usePlatformService","palette","useUIKitTheme","uri","onLoadEnd","mediaViewer","useIIFE","createElement","ZoomableImageView","style","StyleSheet","absoluteFill","resizeMode","zoomProps","onTouchEnd","VideoComponent","top","bottom","onLoad","Box","styles","container","LoadingSpinner","position","size","color","primary300","_ref2","props","width","height","useWindowDimensions","imageSize","useRef","contentSizeProps","setContentSizeProps","contentWidth","contentHeight","useLayoutEffect","SBUUtils","safeRun","image","current","getImageSize","viewRatio","imageRatio","fitDirection","ratio","actualSize","ReactNativeZoomableView","visualTouchFeedbackEnabled","initialZoom","Image","createStyleSheet","zIndex","flex","alignItems","justifyContent","_default","exports"],"sources":["FileViewerContent.tsx"],"sourcesContent":["import { ReactNativeZoomableView, ReactNativeZoomableViewProps } from '@openspacelabs/react-native-zoomable-view';\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport { ImageProps, ImageStyle, ImageURISource, StyleProp, StyleSheet, useWindowDimensions } from 'react-native';\n\nimport {\n Box,\n Image,\n LoadingSpinner,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { FileType, useIIFE } from '@sendbird/uikit-utils';\n\nimport { usePlatformService } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\n\ntype Props = {\n type: FileType;\n src: string;\n topInset?: number;\n bottomInset?: number;\n maxZoom?: number;\n minZoom?: number;\n onPress?: () => void;\n};\nconst FileViewerContent = ({ type, src, topInset = 0, bottomInset = 0, maxZoom = 4, minZoom = 1, onPress }: Props) => {\n const [loading, setLoading] = useState(true);\n\n const { defaultHeight } = useHeaderStyle();\n const { mediaService } = usePlatformService();\n const { palette } = useUIKitTheme();\n\n const source = { uri: src };\n const onLoadEnd = () => setLoading(false);\n const mediaViewer = useIIFE(() => {\n switch (type) {\n case 'image': {\n return (\n <ZoomableImageView\n source={source}\n style={StyleSheet.absoluteFill}\n resizeMode={'contain'}\n onLoadEnd={onLoadEnd}\n zoomProps={{\n minZoom,\n maxZoom,\n onTouchEnd: onPress,\n }}\n />\n );\n }\n\n case 'video':\n case 'audio': {\n return (\n <mediaService.VideoComponent\n source={source}\n style={[StyleSheet.absoluteFill, { top: topInset, bottom: defaultHeight + bottomInset }]}\n resizeMode={'contain'}\n onLoad={onLoadEnd}\n />\n );\n }\n\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box style={styles.container}>\n {mediaViewer}\n {loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}\n </Box>\n );\n};\n\nconst ZoomableImageView = ({\n zoomProps,\n ...props\n}: {\n source: ImageURISource;\n style: StyleProp<ImageStyle>;\n resizeMode: ImageProps['resizeMode'];\n onLoadEnd: () => void;\n zoomProps?: ReactNativeZoomableViewProps;\n}) => {\n const { width, height } = useWindowDimensions();\n\n const imageSize = useRef<{ width: number; height: number }>();\n const [contentSizeProps, setContentSizeProps] = useState<ReactNativeZoomableViewProps>({\n contentWidth: width,\n contentHeight: height,\n });\n\n useLayoutEffect(() => {\n SBUUtils.safeRun(async () => {\n if (props.source.uri) {\n const image = imageSize.current ?? (await SBUUtils.getImageSize(props.source.uri));\n imageSize.current = image;\n\n const viewRatio = width / height;\n const imageRatio = image.width / image.height;\n\n const fitDirection = viewRatio > imageRatio ? 'height' : 'width';\n const ratio = fitDirection === 'height' ? height / image.height : width / image.width;\n const actualSize = { width: image.width * ratio, height: image.height * ratio };\n\n setContentSizeProps({\n contentWidth: actualSize.width,\n contentHeight: actualSize.height,\n });\n }\n });\n }, [props.source.uri, width, height]);\n\n return (\n <ReactNativeZoomableView\n visualTouchFeedbackEnabled={false}\n style={{ width, height }}\n initialZoom={1}\n {...contentSizeProps}\n {...zoomProps}\n >\n <Image {...props} />\n </ReactNativeZoomableView>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex: -1,\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default FileViewerContent;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNativeZoomableView","require","_react","_interopRequireWildcard","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_SBUUtils","_interopRequireDefault","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","FileViewerContent","_ref","type","src","topInset","bottomInset","maxZoom","minZoom","onPress","loading","setLoading","useState","defaultHeight","useHeaderStyle","mediaService","usePlatformService","palette","useUIKitTheme","uri","onLoadEnd","mediaViewer","useIIFE","createElement","ZoomableImageView","style","StyleSheet","absoluteFill","resizeMode","zoomProps","onTouchEnd","VideoComponent","top","bottom","onLoad","Box","styles","container","LoadingSpinner","position","size","color","primary300","_ref2","props","width","height","useWindowDimensions","imageSize","useRef","contentSizeProps","setContentSizeProps","contentWidth","contentHeight","useLayoutEffect","SBUUtils","safeRun","image","current","getImageSize","viewRatio","imageRatio","fitDirection","ratio","actualSize","ReactNativeZoomableView","visualTouchFeedbackEnabled","initialZoom","Image","createStyleSheet","zIndex","flex","alignItems","justifyContent","_default","exports"],"sources":["FileViewerContent.tsx"],"sourcesContent":["import { ReactNativeZoomableView, ReactNativeZoomableViewProps } from '@openspacelabs/react-native-zoomable-view';\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport { ImageProps, ImageStyle, ImageURISource, StyleProp, StyleSheet, useWindowDimensions } from 'react-native';\n\nimport {\n Box,\n Image,\n LoadingSpinner,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { FileType, useIIFE } from '@sendbird/uikit-utils';\n\nimport { usePlatformService } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\n\ntype Props = {\n type: FileType;\n src: string;\n topInset?: number;\n bottomInset?: number;\n maxZoom?: number;\n minZoom?: number;\n onPress?: () => void;\n};\nconst FileViewerContent = ({ type, src, topInset = 0, bottomInset = 0, maxZoom = 4, minZoom = 1, onPress }: Props) => {\n const [loading, setLoading] = useState(true);\n\n const { defaultHeight } = useHeaderStyle();\n const { mediaService } = usePlatformService();\n const { palette } = useUIKitTheme();\n\n const source = { uri: src };\n const onLoadEnd = () => setLoading(false);\n const mediaViewer = useIIFE(() => {\n switch (type) {\n case 'image': {\n return (\n <ZoomableImageView\n source={source}\n style={StyleSheet.absoluteFill}\n resizeMode={'contain'}\n onLoadEnd={onLoadEnd}\n zoomProps={{\n minZoom,\n maxZoom,\n onTouchEnd: onPress,\n }}\n />\n );\n }\n\n case 'video':\n case 'audio': {\n return (\n <mediaService.VideoComponent\n source={source}\n style={[StyleSheet.absoluteFill, { top: topInset, bottom: defaultHeight + bottomInset }]}\n resizeMode={'contain'}\n onLoad={onLoadEnd}\n />\n );\n }\n\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box style={styles.container}>\n {mediaViewer}\n {loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}\n </Box>\n );\n};\n\nconst ZoomableImageView = ({\n zoomProps,\n ...props\n}: {\n source: ImageURISource;\n style: StyleProp<ImageStyle>;\n resizeMode: ImageProps['resizeMode'];\n onLoadEnd: () => void;\n zoomProps?: ReactNativeZoomableViewProps;\n}) => {\n const { width, height } = useWindowDimensions();\n\n const imageSize = useRef<{ width: number; height: number }>();\n const [contentSizeProps, setContentSizeProps] = useState<ReactNativeZoomableViewProps>({\n contentWidth: width,\n contentHeight: height,\n });\n\n useLayoutEffect(() => {\n SBUUtils.safeRun(async () => {\n if (props.source.uri) {\n const image = imageSize.current ?? (await SBUUtils.getImageSize(props.source.uri));\n imageSize.current = image;\n\n const viewRatio = width / height;\n const imageRatio = image.width / image.height;\n\n const fitDirection = viewRatio > imageRatio ? 'height' : 'width';\n const ratio = fitDirection === 'height' ? height / image.height : width / image.width;\n const actualSize = { width: image.width * ratio, height: image.height * ratio };\n\n setContentSizeProps({\n contentWidth: actualSize.width,\n contentHeight: actualSize.height,\n });\n }\n });\n }, [props.source.uri, width, height]);\n\n return (\n <ReactNativeZoomableView\n visualTouchFeedbackEnabled={false}\n style={{ width, height }}\n initialZoom={1}\n {...contentSizeProps}\n {...zoomProps}\n >\n <Image {...props} />\n </ReactNativeZoomableView>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex: 0,\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default FileViewerContent;\n"],"mappings":"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"}
@@ -56,6 +56,7 @@ const FileViewerFooter = _ref => {
56
56
  };
57
57
  const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
58
58
  container: {
59
+ zIndex: 1,
59
60
  position: 'absolute',
60
61
  left: 0,
61
62
  right: 0,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","obj","__esModule","default","FileViewerFooter","_ref","bottomInset","deleteShown","onPressDelete","onPressDownload","palette","useUIKitTheme","defaultHeight","useHeaderStyle","left","right","useSafeAreaInsets","createElement","Box","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingBottom","height","backgroundColor","overlay01","PressBox","activeOpacity","onPress","buttonContainer","Icon","icon","size","color","onBackgroundDark01","titleContainer","disabled","createStyleSheet","position","bottom","flexDirection","alignItems","justifyContent","width","flex","_default","exports"],"sources":["FileViewerFooter.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\n\ntype Props = {\n bottomInset: number;\n deleteShown: boolean;\n onPressDelete: () => void;\n onPressDownload: () => void;\n};\n\nconst FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingBottom: bottomInset,\n height: defaultHeight + bottomInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onPressDownload} style={styles.buttonContainer}>\n <Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer} />\n <PressBox activeOpacity={0.75} onPress={onPressDelete} style={styles.buttonContainer} disabled={!deleteShown}>\n {deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}\n </PressBox>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default FileViewerFooter;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","obj","__esModule","default","FileViewerFooter","_ref","bottomInset","deleteShown","onPressDelete","onPressDownload","palette","useUIKitTheme","defaultHeight","useHeaderStyle","left","right","useSafeAreaInsets","createElement","Box","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingBottom","height","backgroundColor","overlay01","PressBox","activeOpacity","onPress","buttonContainer","Icon","icon","size","color","onBackgroundDark01","titleContainer","disabled","createStyleSheet","zIndex","position","bottom","flexDirection","alignItems","justifyContent","width","flex","_default","exports"],"sources":["FileViewerFooter.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\n\ntype Props = {\n bottomInset: number;\n deleteShown: boolean;\n onPressDelete: () => void;\n onPressDownload: () => void;\n};\n\nconst FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingBottom: bottomInset,\n height: defaultHeight + bottomInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onPressDownload} style={styles.buttonContainer}>\n <Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer} />\n <PressBox activeOpacity={0.75} onPress={onPressDelete} style={styles.buttonContainer} disabled={!deleteShown}>\n {deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}\n </PressBox>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex: 1,\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default FileViewerFooter;\n"],"mappings":"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"}
@@ -64,6 +64,7 @@ const FileViewerHeader = _ref => {
64
64
  };
65
65
  const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
66
66
  container: {
67
+ zIndex: 1,
67
68
  top: 0,
68
69
  left: 0,
69
70
  right: 0,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","obj","__esModule","default","FileViewerHeader","_ref","headerShown","topInset","onClose","subtitle","title","palette","useUIKitTheme","defaultHeight","useHeaderStyle","left","right","useSafeAreaInsets","createElement","Box","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingTop","height","backgroundColor","overlay01","PressBox","activeOpacity","onPress","buttonContainer","Icon","icon","size","color","onBackgroundDark01","titleContainer","Text","h2","numberOfLines","truncate","mode","maxLen","caption2","createStyleSheet","top","position","flexDirection","alignItems","justifyContent","width","flex","marginBottom","_default","exports"],"sources":["FileViewerHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n Text,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { truncate } from '@sendbird/uikit-utils';\n\ntype Props = {\n headerShown?: boolean;\n topInset: number;\n onClose: () => void;\n title: string;\n subtitle: string;\n};\n\nconst FileViewerHeader = ({ headerShown = true, topInset, onClose, subtitle, title }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n if (!headerShown) return null;\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingTop: topInset,\n height: defaultHeight + topInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onClose} style={styles.buttonContainer}>\n <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer}>\n <Text h2 color={palette.onBackgroundDark01} style={styles.title} numberOfLines={1}>\n {truncate(title, { mode: 'mid', maxLen: 18 })}\n </Text>\n <Text caption2 color={palette.onBackgroundDark01} numberOfLines={1}>\n {subtitle}\n </Text>\n </Box>\n <Box style={styles.buttonContainer} />\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n top: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n title: {\n marginBottom: 2,\n },\n});\n\nexport default FileViewerHeader;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","obj","__esModule","default","FileViewerHeader","_ref","headerShown","topInset","onClose","subtitle","title","palette","useUIKitTheme","defaultHeight","useHeaderStyle","left","right","useSafeAreaInsets","createElement","Box","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingTop","height","backgroundColor","overlay01","PressBox","activeOpacity","onPress","buttonContainer","Icon","icon","size","color","onBackgroundDark01","titleContainer","Text","h2","numberOfLines","truncate","mode","maxLen","caption2","createStyleSheet","zIndex","top","position","flexDirection","alignItems","justifyContent","width","flex","marginBottom","_default","exports"],"sources":["FileViewerHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n Text,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { truncate } from '@sendbird/uikit-utils';\n\ntype Props = {\n headerShown?: boolean;\n topInset: number;\n onClose: () => void;\n title: string;\n subtitle: string;\n};\n\nconst FileViewerHeader = ({ headerShown = true, topInset, onClose, subtitle, title }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n if (!headerShown) return null;\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingTop: topInset,\n height: defaultHeight + topInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onClose} style={styles.buttonContainer}>\n <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer}>\n <Text h2 color={palette.onBackgroundDark01} style={styles.title} numberOfLines={1}>\n {truncate(title, { mode: 'mid', maxLen: 18 })}\n </Text>\n <Text caption2 color={palette.onBackgroundDark01} numberOfLines={1}>\n {subtitle}\n </Text>\n </Box>\n <Box style={styles.buttonContainer} />\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex: 1,\n top: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n title: {\n marginBottom: 2,\n },\n});\n\nexport default FileViewerHeader;\n"],"mappings":"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"}
@@ -68,7 +68,9 @@ const BottomSheetReactionAddon = _ref => {
68
68
  const currentUserIdx = reactionUserIds.indexOf((currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) ?? _constants.UNKNOWN_USER_ID);
69
69
  const reacted = currentUserIdx > -1;
70
70
  const onPress = async () => {
71
- const action = reacted ? channel.deleteReaction : channel.addReaction;
71
+ const action = (message, key) => {
72
+ return reacted ? channel.deleteReaction(message, key) : channel.addReaction(message, key);
73
+ };
72
74
  await action(message, key).catch(error => {
73
75
  _uikitUtils.Logger.warn('Failed to reaction', error);
74
76
  }).finally(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeSafeAreaContext","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_constants","_useContext","obj","__esModule","default","BottomSheetReactionAddon","_ref","onClose","message","channel","emojiManager","currentUser","sdk","useSendbirdChat","updateReactionFocusedItem","openReactionList","useReaction","colors","useUIKitTheme","handlerId","useUniqHandlerId","left","right","useSafeAreaInsets","useChannelHandler","onReactionUpdated","eventChannel","event","url","messageId","msg","getMessage","includeReactions","channelUrl","channelType","emojiAll","allEmoji","slice","color","ui","reaction","createElement","View","style","styles","container","marginRight","marginLeft","map","_ref2","_message$reactions","_message$reactions$fi","key","reactionUserIds","reactions","find","it","userIds","currentUserIdx","indexOf","userId","UNKNOWN_USER_ID","reacted","onPress","action","deleteReaction","addReaction","catch","error","Logger","warn","finally","Pressable","_ref3","pressed","button","backgroundColor","selected","background","enabled","Image","source","uri","emoji","_ref4","Icon","icon","onBackground03","createStyleSheet","paddingTop","paddingBottom","paddingHorizontal","flexDirection","justifyContent","width","height","padding","borderRadius","_default","exports"],"sources":["BottomSheetReactionAddon.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { BaseMessage } from '@sendbird/chat/message';\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { Logger, SendbirdBaseChannel, SendbirdBaseMessage, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { UNKNOWN_USER_ID } from '../../constants';\nimport { useReaction, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n onClose: () => Promise<void>;\n channel: SendbirdBaseChannel;\n message: SendbirdBaseMessage;\n};\nconst BottomSheetReactionAddon = ({ onClose, message, channel }: Props) => {\n const { emojiManager, currentUser, sdk } = useSendbirdChat();\n const { updateReactionFocusedItem, openReactionList } = useReaction();\n const { colors } = useUIKitTheme();\n const handlerId = useUniqHandlerId('BottomSheetReactionAddon');\n const { left, right } = useSafeAreaInsets();\n\n useChannelHandler(sdk, handlerId, {\n async onReactionUpdated(eventChannel, event) {\n if (channel?.url === eventChannel.url && event.messageId === message?.messageId) {\n const msg = (await sdk.message.getMessage({\n includeReactions: true,\n messageId: message.messageId,\n channelUrl: message.channelUrl,\n channelType: message.channelType,\n })) as null | BaseMessage;\n if (msg) updateReactionFocusedItem({ message: msg });\n }\n },\n });\n\n const emojiAll = emojiManager.allEmoji.slice(0, 5);\n const color = colors.ui.reaction.default;\n\n return (\n <View style={[styles.container, { marginRight: right, marginLeft: left }]}>\n {emojiAll.map(({ key, url }) => {\n const reactionUserIds = message?.reactions?.find((it) => it.key === key)?.userIds ?? [];\n const currentUserIdx = reactionUserIds.indexOf(currentUser?.userId ?? UNKNOWN_USER_ID);\n const reacted = currentUserIdx > -1;\n\n const onPress = async () => {\n const action = reacted ? channel.deleteReaction : channel.addReaction;\n await action(message, key)\n .catch((error) => {\n Logger.warn('Failed to reaction', error);\n })\n .finally(() => {\n onClose();\n });\n };\n\n return (\n <Pressable\n key={key}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: reacted || pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Image source={{ uri: url }} style={styles.emoji} />\n </Pressable>\n );\n })}\n\n <Pressable\n onPress={async () => {\n await onClose();\n openReactionList({ channel, message });\n }}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Icon icon={'emoji-more'} style={styles.emoji} color={colors.onBackground03} />\n </Pressable>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n paddingTop: 12,\n paddingBottom: 16,\n paddingHorizontal: 18,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n button: {\n width: 44,\n height: 44,\n padding: 4,\n borderRadius: 8,\n },\n emoji: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default BottomSheetReactionAddon;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeSafeAreaContext","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_constants","_useContext","obj","__esModule","default","BottomSheetReactionAddon","_ref","onClose","message","channel","emojiManager","currentUser","sdk","useSendbirdChat","updateReactionFocusedItem","openReactionList","useReaction","colors","useUIKitTheme","handlerId","useUniqHandlerId","left","right","useSafeAreaInsets","useChannelHandler","onReactionUpdated","eventChannel","event","url","messageId","msg","getMessage","includeReactions","channelUrl","channelType","emojiAll","allEmoji","slice","color","ui","reaction","createElement","View","style","styles","container","marginRight","marginLeft","map","_ref2","_message$reactions","_message$reactions$fi","key","reactionUserIds","reactions","find","it","userIds","currentUserIdx","indexOf","userId","UNKNOWN_USER_ID","reacted","onPress","action","deleteReaction","addReaction","catch","error","Logger","warn","finally","Pressable","_ref3","pressed","button","backgroundColor","selected","background","enabled","Image","source","uri","emoji","_ref4","Icon","icon","onBackground03","createStyleSheet","paddingTop","paddingBottom","paddingHorizontal","flexDirection","justifyContent","width","height","padding","borderRadius","_default","exports"],"sources":["BottomSheetReactionAddon.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { BaseMessage } from '@sendbird/chat/message';\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { Logger, SendbirdBaseChannel, SendbirdBaseMessage, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { UNKNOWN_USER_ID } from '../../constants';\nimport { useReaction, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n onClose: () => Promise<void>;\n channel: SendbirdBaseChannel;\n message: SendbirdBaseMessage;\n};\nconst BottomSheetReactionAddon = ({ onClose, message, channel }: Props) => {\n const { emojiManager, currentUser, sdk } = useSendbirdChat();\n const { updateReactionFocusedItem, openReactionList } = useReaction();\n const { colors } = useUIKitTheme();\n const handlerId = useUniqHandlerId('BottomSheetReactionAddon');\n const { left, right } = useSafeAreaInsets();\n\n useChannelHandler(sdk, handlerId, {\n async onReactionUpdated(eventChannel, event) {\n if (channel?.url === eventChannel.url && event.messageId === message?.messageId) {\n const msg = (await sdk.message.getMessage({\n includeReactions: true,\n messageId: message.messageId,\n channelUrl: message.channelUrl,\n channelType: message.channelType,\n })) as null | BaseMessage;\n if (msg) updateReactionFocusedItem({ message: msg });\n }\n },\n });\n\n const emojiAll = emojiManager.allEmoji.slice(0, 5);\n const color = colors.ui.reaction.default;\n\n return (\n <View style={[styles.container, { marginRight: right, marginLeft: left }]}>\n {emojiAll.map(({ key, url }) => {\n const reactionUserIds = message?.reactions?.find((it) => it.key === key)?.userIds ?? [];\n const currentUserIdx = reactionUserIds.indexOf(currentUser?.userId ?? UNKNOWN_USER_ID);\n const reacted = currentUserIdx > -1;\n\n const onPress = async () => {\n const action = (message: BaseMessage, key: string) => {\n return reacted ? channel.deleteReaction(message, key) : channel.addReaction(message, key);\n };\n\n await action(message, key)\n .catch((error) => {\n Logger.warn('Failed to reaction', error);\n })\n .finally(() => {\n onClose();\n });\n };\n\n return (\n <Pressable\n key={key}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: reacted || pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Image source={{ uri: url }} style={styles.emoji} />\n </Pressable>\n );\n })}\n\n <Pressable\n onPress={async () => {\n await onClose();\n openReactionList({ channel, message });\n }}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Icon icon={'emoji-more'} style={styles.emoji} color={colors.onBackground03} />\n </Pressable>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n paddingTop: 12,\n paddingBottom: 16,\n paddingHorizontal: 18,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n button: {\n width: 44,\n height: 44,\n padding: 4,\n borderRadius: 8,\n },\n emoji: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default BottomSheetReactionAddon;\n"],"mappings":"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"}
@@ -81,7 +81,9 @@ const ReactionListBottomSheet = _ref => {
81
81
  key: key,
82
82
  onPress: async () => {
83
83
  if (message && channel) {
84
- const action = reacted ? channel.deleteReaction : channel.addReaction;
84
+ const action = (message, key) => {
85
+ return reacted ? channel.deleteReaction(message, key) : channel.addReaction(message, key);
86
+ };
85
87
  action(message, key).catch(error => {
86
88
  _uikitUtils.Logger.warn('Failed to reaction', error);
87
89
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","_constants","obj","__esModule","default","NUM_COLUMN","ReactionListBottomSheet","_ref","visible","onClose","onDismiss","reactionCtx","chatCtx","width","useWindowDimensions","bottom","left","right","useSafeAreaInsets","colors","useUIKitTheme","currentUser","emojiManager","channel","message","color","ui","reaction","createElement","Modal","type","Boolean","backgroundStyle","styles","modal","View","style","container","paddingBottom","backgroundColor","dialog","none","background","paddingLeft","paddingHorizontal","paddingRight","FlatList","data","allEmoji","numColumns","keyExtractor","item","key","contentContainerStyle","flatlist","ItemSeparatorComponent","height","renderItem","_ref2","_message$reactions","_message$reactions$fi","url","reactedUserIds","reactions","find","it","userIds","idx","indexOf","userId","UNKNOWN_USER_ID","reacted","emojiItem","Pressable","onPress","action","deleteReaction","addReaction","catch","error","Logger","warn","_ref3","pressed","button","selected","enabled","Image","source","uri","emoji","createStyleSheet","overflow","borderTopLeftRadius","borderTopRightRadius","paddingTop","flexDirection","alignItems","justifyContent","padding","borderRadius","_default","exports"],"sources":["ReactionListBottomSheet.tsx"],"sourcesContent":["import React from 'react';\nimport { FlatList, Pressable, View, useWindowDimensions } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { Image, Modal, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { Logger } from '@sendbird/uikit-utils';\n\nimport { UNKNOWN_USER_ID } from '../../constants';\nimport type { ReactionBottomSheetProps } from './index';\n\nconst NUM_COLUMN = 6;\nconst ReactionListBottomSheet = ({ visible, onClose, onDismiss, reactionCtx, chatCtx }: ReactionBottomSheetProps) => {\n const { width } = useWindowDimensions();\n const { bottom, left, right } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n\n const { currentUser, emojiManager } = chatCtx;\n const { channel, message } = reactionCtx;\n const color = colors.ui.reaction.default;\n\n return (\n <Modal\n type={'slide'}\n visible={Boolean(visible && channel && message)}\n onClose={onClose}\n onDismiss={onDismiss}\n backgroundStyle={styles.modal}\n >\n <View\n style={[\n styles.container,\n {\n width,\n paddingBottom: bottom,\n backgroundColor: colors.ui.dialog.default.none.background,\n paddingLeft: left + styles.container.paddingHorizontal,\n paddingRight: right + styles.container.paddingHorizontal,\n },\n ]}\n >\n <FlatList\n data={emojiManager.allEmoji}\n numColumns={NUM_COLUMN}\n keyExtractor={(item) => item.key}\n contentContainerStyle={styles.flatlist}\n ItemSeparatorComponent={() => <View style={{ height: 16 }} />}\n renderItem={({ item: { key, url } }) => {\n const reactedUserIds = message?.reactions?.find((it) => it.key === key)?.userIds ?? [];\n\n const idx = reactedUserIds.indexOf(currentUser?.userId ?? UNKNOWN_USER_ID);\n const reacted = idx > -1;\n\n return (\n <View style={styles.emojiItem}>\n <Pressable\n key={key}\n onPress={async () => {\n if (message && channel) {\n const action = reacted ? channel.deleteReaction : channel.addReaction;\n action(message, key).catch((error) => {\n Logger.warn('Failed to reaction', error);\n });\n }\n await onClose();\n }}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: reacted || pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Image source={{ uri: url }} style={styles.emoji} />\n </Pressable>\n </View>\n );\n }}\n />\n </View>\n </Modal>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n overflow: 'hidden',\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n paddingTop: 16,\n paddingHorizontal: 18,\n flexDirection: 'row',\n },\n modal: {\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n flatlist: {\n width: '100%',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n emojiItem: {\n width: `${100 / NUM_COLUMN}%`,\n alignItems: 'center',\n },\n button: {\n width: 44,\n height: 44,\n padding: 4,\n borderRadius: 8,\n },\n emoji: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default ReactionListBottomSheet;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","_constants","obj","__esModule","default","NUM_COLUMN","ReactionListBottomSheet","_ref","visible","onClose","onDismiss","reactionCtx","chatCtx","width","useWindowDimensions","bottom","left","right","useSafeAreaInsets","colors","useUIKitTheme","currentUser","emojiManager","channel","message","color","ui","reaction","createElement","Modal","type","Boolean","backgroundStyle","styles","modal","View","style","container","paddingBottom","backgroundColor","dialog","none","background","paddingLeft","paddingHorizontal","paddingRight","FlatList","data","allEmoji","numColumns","keyExtractor","item","key","contentContainerStyle","flatlist","ItemSeparatorComponent","height","renderItem","_ref2","_message$reactions","_message$reactions$fi","url","reactedUserIds","reactions","find","it","userIds","idx","indexOf","userId","UNKNOWN_USER_ID","reacted","emojiItem","Pressable","onPress","action","deleteReaction","addReaction","catch","error","Logger","warn","_ref3","pressed","button","selected","enabled","Image","source","uri","emoji","createStyleSheet","overflow","borderTopLeftRadius","borderTopRightRadius","paddingTop","flexDirection","alignItems","justifyContent","padding","borderRadius","_default","exports"],"sources":["ReactionListBottomSheet.tsx"],"sourcesContent":["import React from 'react';\nimport { FlatList, Pressable, View, useWindowDimensions } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { BaseMessage } from '@sendbird/chat/message';\nimport { Image, Modal, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { Logger } from '@sendbird/uikit-utils';\n\nimport { UNKNOWN_USER_ID } from '../../constants';\nimport type { ReactionBottomSheetProps } from './index';\n\nconst NUM_COLUMN = 6;\nconst ReactionListBottomSheet = ({ visible, onClose, onDismiss, reactionCtx, chatCtx }: ReactionBottomSheetProps) => {\n const { width } = useWindowDimensions();\n const { bottom, left, right } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n\n const { currentUser, emojiManager } = chatCtx;\n const { channel, message } = reactionCtx;\n const color = colors.ui.reaction.default;\n\n return (\n <Modal\n type={'slide'}\n visible={Boolean(visible && channel && message)}\n onClose={onClose}\n onDismiss={onDismiss}\n backgroundStyle={styles.modal}\n >\n <View\n style={[\n styles.container,\n {\n width,\n paddingBottom: bottom,\n backgroundColor: colors.ui.dialog.default.none.background,\n paddingLeft: left + styles.container.paddingHorizontal,\n paddingRight: right + styles.container.paddingHorizontal,\n },\n ]}\n >\n <FlatList\n data={emojiManager.allEmoji}\n numColumns={NUM_COLUMN}\n keyExtractor={(item) => item.key}\n contentContainerStyle={styles.flatlist}\n ItemSeparatorComponent={() => <View style={{ height: 16 }} />}\n renderItem={({ item: { key, url } }) => {\n const reactedUserIds = message?.reactions?.find((it) => it.key === key)?.userIds ?? [];\n\n const idx = reactedUserIds.indexOf(currentUser?.userId ?? UNKNOWN_USER_ID);\n const reacted = idx > -1;\n\n return (\n <View style={styles.emojiItem}>\n <Pressable\n key={key}\n onPress={async () => {\n if (message && channel) {\n const action = (message: BaseMessage, key: string) => {\n return reacted ? channel.deleteReaction(message, key) : channel.addReaction(message, key);\n };\n\n action(message, key).catch((error) => {\n Logger.warn('Failed to reaction', error);\n });\n }\n await onClose();\n }}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: reacted || pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Image source={{ uri: url }} style={styles.emoji} />\n </Pressable>\n </View>\n );\n }}\n />\n </View>\n </Modal>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n overflow: 'hidden',\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n paddingTop: 16,\n paddingHorizontal: 18,\n flexDirection: 'row',\n },\n modal: {\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n flatlist: {\n width: '100%',\n flexDirection: 'column',\n justifyContent: 'space-between',\n },\n emojiItem: {\n width: `${100 / NUM_COLUMN}%`,\n alignItems: 'center',\n },\n button: {\n width: 44,\n height: 44,\n padding: 4,\n borderRadius: 8,\n },\n emoji: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default ReactionListBottomSheet;\n"],"mappings":"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"}
@@ -102,7 +102,8 @@ const GroupChannelMessageList = props => {
102
102
  (0, _react.useEffect)(() => {
103
103
  return subscribe(_ref => {
104
104
  let {
105
- type
105
+ type,
106
+ data
106
107
  } = _ref;
107
108
  switch (type) {
108
109
  case 'TYPING_BUBBLE_RENDERED':
@@ -113,6 +114,19 @@ const GroupChannelMessageList = props => {
113
114
  }
114
115
  break;
115
116
  }
117
+ case 'MESSAGES_UPDATED':
118
+ {
119
+ const lastMessage = props.channel.lastMessage;
120
+ const [updatedMessage] = data.messages;
121
+ const lastMessageUpdated = updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;
122
+ const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;
123
+ if (isMaybeStreaming) {
124
+ scrollToBottom(false);
125
+ } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {
126
+ scrollToBottom(true);
127
+ }
128
+ break;
129
+ }
116
130
  case 'MESSAGE_SENT_SUCCESS':
117
131
  case 'MESSAGE_SENT_PENDING':
118
132
  {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_ChannelMessageList","_interopRequireDefault","_constants","_useContext","_moduleContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","GroupChannelMessageList","props","toast","useToast","STRINGS","useLocalization","sdk","sbOptions","groupChannelFragmentOptions","useSendbirdChat","setMessageToEdit","setMessageToReply","useContext","GroupChannelContexts","Fragment","subscribe","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","onPressReplyMessageInThread","MessageList","id","useUniqHandlerId","isFirstMount","useIsFirstMount","scrollToMessageWithCreatedAt","useFreshCallback","createdAt","focusAnimated","timeout","foundMessageIndex","messages","findIndex","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","MESSAGE_FOCUS_ANIMATION_DELAY","index","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","catch","_","scrollToBottom","undefined","hasNext","onScrolledAwayFromBottom","onResetMessageList","useChannelHandler","onReactionUpdated","event","isDifferentChannel","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","useEffect","_ref","type","pubsub","payload","data","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","searchItem","onPressParentMessage","parentMessage","childMessage","uikit","groupChannel","replyType","threadReplySelectType","show","TOAST","FIND_PARENT_MSG_ERROR","canScrollToParent","createElement","ref","onReplyMessage","onReplyInThreadMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","_default","React","memo","exports"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdMessage, SendbirdSendableMessage, useIsFirstMount } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { GroupChannelFragmentOptionsPubSubContextPayload } from '../../../contexts/SendbirdChatCtx';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const toast = useToast();\n const { STRINGS } = useLocalization();\n const { sdk, sbOptions, groupChannelFragmentOptions } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const { subscribe } = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex, onPressReplyMessageInThread } = useContext(\n GroupChannelContexts.MessageList,\n );\n\n const id = useUniqHandlerId('GroupChannelMessageList');\n const isFirstMount = useIsFirstMount();\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): boolean => {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === createdAt);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) {\n props.onUpdateSearchItem({ startingPoint: createdAt });\n }\n props.onResetMessageListWithStartingPoint(createdAt).catch((_) => {});\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n props.onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n return groupChannelFragmentOptions.pubsub.subscribe((payload: GroupChannelFragmentOptionsPubSubContextPayload) => {\n switch (payload.type) {\n case 'OVERRIDE_SEARCH_ITEM_STARTING_POINT': {\n scrollToMessageWithCreatedAt(payload.data.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n break;\n }\n }\n });\n }, []);\n\n useEffect(() => {\n // Only trigger once when message list mount with initial props.searchItem\n // - Search screen + searchItem > mount message list\n // - Reset message list + searchItem > re-mount message list\n if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback(\n (parentMessage: SendbirdMessage, childMessage: SendbirdSendableMessage) => {\n if (\n onPressReplyMessageInThread &&\n sbOptions.uikit.groupChannel.channel.replyType === 'thread' &&\n sbOptions.uikit.groupChannel.channel.threadReplySelectType === 'thread'\n ) {\n if (parentMessage.createdAt >= props.channel.messageOffsetTimestamp) {\n onPressReplyMessageInThread(parentMessage as SendbirdSendableMessage, childMessage.createdAt);\n } else {\n toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n } else {\n const canScrollToParent = scrollToMessageWithCreatedAt(parentMessage.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n },\n );\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onReplyMessage={setMessageToReply}\n onReplyInThreadMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_ChannelMessageList","_interopRequireDefault","_constants","_useContext","_moduleContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","GroupChannelMessageList","props","toast","useToast","STRINGS","useLocalization","sdk","sbOptions","groupChannelFragmentOptions","useSendbirdChat","setMessageToEdit","setMessageToReply","useContext","GroupChannelContexts","Fragment","subscribe","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","onPressReplyMessageInThread","MessageList","id","useUniqHandlerId","isFirstMount","useIsFirstMount","scrollToMessageWithCreatedAt","useFreshCallback","createdAt","focusAnimated","timeout","foundMessageIndex","messages","findIndex","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","MESSAGE_FOCUS_ANIMATION_DELAY","index","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","catch","_","scrollToBottom","undefined","hasNext","onScrolledAwayFromBottom","onResetMessageList","useChannelHandler","onReactionUpdated","event","isDifferentChannel","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","useEffect","_ref","type","data","lastMessage","updatedMessage","lastMessageUpdated","isMaybeStreaming","hasAiBot","pubsub","payload","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","searchItem","onPressParentMessage","parentMessage","childMessage","uikit","groupChannel","replyType","threadReplySelectType","show","TOAST","FIND_PARENT_MSG_ERROR","canScrollToParent","createElement","ref","onReplyMessage","onReplyInThreadMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","_default","React","memo","exports"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdMessage, SendbirdSendableMessage, useIsFirstMount } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { GroupChannelFragmentOptionsPubSubContextPayload } from '../../../contexts/SendbirdChatCtx';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const toast = useToast();\n const { STRINGS } = useLocalization();\n const { sdk, sbOptions, groupChannelFragmentOptions } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const { subscribe } = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex, onPressReplyMessageInThread } = useContext(\n GroupChannelContexts.MessageList,\n );\n\n const id = useUniqHandlerId('GroupChannelMessageList');\n const isFirstMount = useIsFirstMount();\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): boolean => {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === createdAt);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) {\n props.onUpdateSearchItem({ startingPoint: createdAt });\n }\n props.onResetMessageListWithStartingPoint(createdAt).catch((_) => {});\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n props.onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type, data }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGES_UPDATED': {\n const lastMessage = props.channel.lastMessage;\n const [updatedMessage] = data.messages;\n\n const lastMessageUpdated =\n updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;\n\n const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;\n\n if (isMaybeStreaming) {\n scrollToBottom(false);\n } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n return groupChannelFragmentOptions.pubsub.subscribe((payload: GroupChannelFragmentOptionsPubSubContextPayload) => {\n switch (payload.type) {\n case 'OVERRIDE_SEARCH_ITEM_STARTING_POINT': {\n scrollToMessageWithCreatedAt(payload.data.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n break;\n }\n }\n });\n }, []);\n\n useEffect(() => {\n // Only trigger once when message list mount with initial props.searchItem\n // - Search screen + searchItem > mount message list\n // - Reset message list + searchItem > re-mount message list\n if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback(\n (parentMessage: SendbirdMessage, childMessage: SendbirdSendableMessage) => {\n if (\n onPressReplyMessageInThread &&\n sbOptions.uikit.groupChannel.channel.replyType === 'thread' &&\n sbOptions.uikit.groupChannel.channel.threadReplySelectType === 'thread'\n ) {\n if (parentMessage.createdAt >= props.channel.messageOffsetTimestamp) {\n onPressReplyMessageInThread(parentMessage as SendbirdSendableMessage, childMessage.createdAt);\n } else {\n toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n } else {\n const canScrollToParent = scrollToMessageWithCreatedAt(parentMessage.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n },\n );\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onReplyMessage={setMessageToReply}\n onReplyInThreadMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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"}
@@ -91,7 +91,8 @@ const GroupChannelThreadMessageList = props => {
91
91
  (0, _react.useEffect)(() => {
92
92
  return subscribe(_ref => {
93
93
  let {
94
- type
94
+ type,
95
+ data
95
96
  } = _ref;
96
97
  switch (type) {
97
98
  case 'TYPING_BUBBLE_RENDERED':
@@ -102,6 +103,19 @@ const GroupChannelThreadMessageList = props => {
102
103
  }
103
104
  break;
104
105
  }
106
+ case 'MESSAGES_UPDATED':
107
+ {
108
+ const lastMessage = props.channel.lastMessage;
109
+ const [updatedMessage] = data.messages;
110
+ const lastMessageUpdated = updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;
111
+ const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;
112
+ if (isMaybeStreaming) {
113
+ scrollToBottom(false);
114
+ } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {
115
+ scrollToBottom(true);
116
+ }
117
+ break;
118
+ }
105
119
  case 'MESSAGE_SENT_SUCCESS':
106
120
  case 'MESSAGE_SENT_PENDING':
107
121
  {