@sendbird/uikit-react-native 3.9.6 → 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/ChannelInput/index.js +13 -2
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +57 -9
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.js +53 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.js.map +1 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +5 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/UnreadMessagesFloating.js +77 -0
- package/lib/commonjs/components/UnreadMessagesFloating.js.map +1 -0
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +156 -7
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +57 -3
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/localization/StringSet.type.js.map +1 -1
- package/lib/commonjs/localization/createBaseStringSet.js +16 -2
- package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js +13 -2
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +57 -9
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.js +46 -0
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.js.map +1 -0
- package/lib/module/components/GroupChannelMessageRenderer/index.js +5 -0
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/UnreadMessagesFloating.js +70 -0
- package/lib/module/components/UnreadMessagesFloating.js.map +1 -0
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +158 -9
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +59 -5
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/localization/StringSet.type.js.map +1 -1
- package/lib/module/localization/createBaseStringSet.js +16 -2
- package/lib/module/localization/createBaseStringSet.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +8 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.d.ts +6 -0
- package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +1 -0
- package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +1 -0
- package/lib/typescript/src/components/UnreadMessagesFloating.d.ts +8 -0
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +6 -1
- package/lib/typescript/src/domain/groupChannel/types.d.ts +13 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
- package/lib/typescript/src/hooks/useChannelInputItems.d.ts +1 -1
- package/lib/typescript/src/localization/StringSet.type.d.ts +3 -0
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +8 -7
- package/src/components/ChannelInput/index.tsx +17 -6
- package/src/components/ChannelMessageList/index.tsx +71 -5
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageNewLine.tsx +45 -0
- package/src/components/GroupChannelMessageRenderer/index.tsx +5 -0
- package/src/components/UnreadMessagesFloating.tsx +60 -0
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +204 -5
- package/src/domain/groupChannel/types.ts +15 -0
- package/src/fragments/createGroupChannelFragment.tsx +67 -4
- package/src/localization/StringSet.type.ts +3 -0
- package/src/localization/createBaseStringSet.ts +16 -4
- package/src/version.ts +1 -1
|
@@ -24,8 +24,10 @@ const AUTO_FOCUS = _reactNative.Platform.select({
|
|
|
24
24
|
android: true,
|
|
25
25
|
default: false
|
|
26
26
|
});
|
|
27
|
+
const isAndroidApi35 = _reactNative.Platform.OS === 'android' && _reactNative.Platform.Version >= 35;
|
|
27
28
|
const KEYBOARD_AVOID_VIEW_BEHAVIOR = _reactNative.Platform.select({
|
|
28
29
|
ios: 'padding',
|
|
30
|
+
android: isAndroidApi35 ? 'padding' : undefined,
|
|
29
31
|
default: undefined
|
|
30
32
|
});
|
|
31
33
|
|
|
@@ -45,6 +47,15 @@ const ChannelInput = props => {
|
|
|
45
47
|
setMessageToEdit
|
|
46
48
|
} = props;
|
|
47
49
|
const safeArea = (0, _uikitUtils.useSafeAreaPadding)(['top', 'left', 'right', 'bottom']);
|
|
50
|
+
|
|
51
|
+
// Android API 35+ keyboard avoidance handling
|
|
52
|
+
/**
|
|
53
|
+
* Android API 35+ introduced edge-to-edge layouts, which changed how keyboard avoidance should be handled.
|
|
54
|
+
* For API 35+, the system manages insets automatically, so we use the provided keyboardAvoidOffset directly.
|
|
55
|
+
* For older Android versions, we manually subtract the safe area bottom padding to avoid overlapping with system UI.
|
|
56
|
+
* See: https://developer.android.com/develop/ui/views/layout/edge-to-edge
|
|
57
|
+
*/
|
|
58
|
+
const keyboardVerticalOffset = isAndroidApi35 ? keyboardAvoidOffset : -safeArea.paddingBottom + keyboardAvoidOffset;
|
|
48
59
|
const {
|
|
49
60
|
colors,
|
|
50
61
|
typography
|
|
@@ -100,7 +111,7 @@ const ChannelInput = props => {
|
|
|
100
111
|
});
|
|
101
112
|
}
|
|
102
113
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.KeyboardAvoidingView, {
|
|
103
|
-
keyboardVerticalOffset:
|
|
114
|
+
keyboardVerticalOffset: keyboardVerticalOffset,
|
|
104
115
|
behavior: KEYBOARD_AVOID_VIEW_BEHAVIOR
|
|
105
116
|
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
106
117
|
style: {
|
|
@@ -133,7 +144,7 @@ const ChannelInput = props => {
|
|
|
133
144
|
messageToEdit: messageToEdit,
|
|
134
145
|
setMessageToEdit: setMessageToEdit,
|
|
135
146
|
style: textInputStyle
|
|
136
|
-
}))), /*#__PURE__*/_react.default.createElement(SafeAreaBottom, {
|
|
147
|
+
}))), !isAndroidApi35 && /*#__PURE__*/_react.default.createElement(SafeAreaBottom, {
|
|
137
148
|
height: safeArea.paddingBottom
|
|
138
149
|
}))), mentionAvailable && props.SuggestedMentionList && /*#__PURE__*/_react.default.createElement(props.SuggestedMentionList, {
|
|
139
150
|
text: text,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_useMentionTextInput","_interopRequireDefault","_AttachmentsButton","_EditInput","_MessageToReplyPreview","_SendInput","_VoiceMessageInput","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","AUTO_FOCUS","Platform","select","ios","android","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","safeArea","useSafeAreaPadding","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","paddingBottom","Fragment","KeyboardAvoidingView","keyboardVerticalOffset","behavior","View","paddingStart","paddingEnd","backgroundColor","background","onLayout","nativeEvent","layout","inputContainer","key","ref","VoiceMessageInput","AttachmentsButton","MessageToReplyPreview","autoFocus","SuggestedMentionList","topInset","paddingTop","bottomInset","useEffect","triggerTyping","action","endTyping","startTyping","catch","error","Logger","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","createStyleSheet","justifyContent","width","flex","marginEnd","borderRadius","minHeight","maxHeight","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\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 useSafeAreaPadding,\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 * Whether to show user id information on each item.\n * */\n showUserId?: boolean;\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.\n// const GET_INPUT_KEY = (shouldReset: boolean) => {\n// return Platform.OS === 'ios' && shouldReset ? 'uikit-input-clear' : 'uikit-input';\n// };\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);\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 = 'input'; //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={safeArea.paddingBottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-safeArea.paddingBottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View\n style={{\n paddingStart: safeArea.paddingStart,\n paddingEnd: safeArea.paddingEnd,\n backgroundColor: colors.background,\n }}\n >\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={safeArea.paddingBottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={safeArea.paddingTop}\n bottomInset={safeArea.paddingBottom}\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 marginEnd: 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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_useMentionTextInput","_interopRequireDefault","_AttachmentsButton","_EditInput","_MessageToReplyPreview","_SendInput","_VoiceMessageInput","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","AUTO_FOCUS","Platform","select","ios","android","isAndroidApi35","OS","Version","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","safeArea","useSafeAreaPadding","keyboardVerticalOffset","paddingBottom","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","behavior","View","paddingStart","paddingEnd","backgroundColor","background","onLayout","nativeEvent","layout","inputContainer","key","ref","VoiceMessageInput","AttachmentsButton","MessageToReplyPreview","autoFocus","SuggestedMentionList","topInset","paddingTop","bottomInset","useEffect","triggerTyping","action","endTyping","startTyping","catch","error","Logger","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","createStyleSheet","justifyContent","width","flex","marginEnd","borderRadius","minHeight","maxHeight","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\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 useSafeAreaPadding,\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 * Whether to show user id information on each item.\n * */\n showUserId?: boolean;\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 isAndroidApi35 = Platform.OS === 'android' && Platform.Version >= 35;\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({\n ios: 'padding' as const,\n android: isAndroidApi35 ? ('padding' as const) : undefined,\n default: undefined,\n});\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.\n// const GET_INPUT_KEY = (shouldReset: boolean) => {\n// return Platform.OS === 'ios' && shouldReset ? 'uikit-input-clear' : 'uikit-input';\n// };\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const safeArea = useSafeAreaPadding(['top', 'left', 'right', 'bottom']);\n\n // Android API 35+ keyboard avoidance handling\n /**\n * Android API 35+ introduced edge-to-edge layouts, which changed how keyboard avoidance should be handled.\n * For API 35+, the system manages insets automatically, so we use the provided keyboardAvoidOffset directly.\n * For older Android versions, we manually subtract the safe area bottom padding to avoid overlapping with system UI.\n * See: https://developer.android.com/develop/ui/views/layout/edge-to-edge\n */\n const keyboardVerticalOffset = isAndroidApi35 ? keyboardAvoidOffset : -safeArea.paddingBottom + keyboardAvoidOffset;\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 = 'input'; //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={safeArea.paddingBottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView keyboardVerticalOffset={keyboardVerticalOffset} behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}>\n <View\n style={{\n paddingStart: safeArea.paddingStart,\n paddingEnd: safeArea.paddingEnd,\n backgroundColor: colors.background,\n }}\n >\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 {!isAndroidApi35 && <SafeAreaBottom height={safeArea.paddingBottom} />}\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={safeArea.paddingTop}\n bottomInset={safeArea.paddingBottom}\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 marginEnd: 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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","ignoreList":[]}
|
|
@@ -25,12 +25,15 @@ const ChannelMessageList = ({
|
|
|
25
25
|
onResendFailedMessage,
|
|
26
26
|
onPressMediaMessage,
|
|
27
27
|
onPressParentMessage,
|
|
28
|
+
onPressMarkAsUnreadMessage,
|
|
28
29
|
currentUserId,
|
|
30
|
+
renderUnreadMessagesFloating,
|
|
29
31
|
renderNewMessagesButton,
|
|
30
32
|
renderScrollToBottomButton,
|
|
31
33
|
renderMessage,
|
|
32
34
|
messages,
|
|
33
35
|
newMessages,
|
|
36
|
+
unreadFirstMessage,
|
|
34
37
|
enableMessageGrouping,
|
|
35
38
|
onScrolledAwayFromBottom,
|
|
36
39
|
scrolledAwayFromBottom,
|
|
@@ -38,8 +41,10 @@ const ChannelMessageList = ({
|
|
|
38
41
|
onTopReached,
|
|
39
42
|
flatListComponent,
|
|
40
43
|
flatListProps,
|
|
44
|
+
onViewableItemsChanged,
|
|
41
45
|
onPressNewMessagesButton,
|
|
42
|
-
onPressScrollToBottomButton
|
|
46
|
+
onPressScrollToBottomButton,
|
|
47
|
+
unreadMessagesFloatingProps
|
|
43
48
|
}, ref) => {
|
|
44
49
|
const {
|
|
45
50
|
STRINGS
|
|
@@ -59,7 +64,8 @@ const ChannelMessageList = ({
|
|
|
59
64
|
onReplyInThreadMessage,
|
|
60
65
|
onDeleteMessage,
|
|
61
66
|
onResendFailedMessage,
|
|
62
|
-
onPressMediaMessage
|
|
67
|
+
onPressMediaMessage,
|
|
68
|
+
onPressMarkAsUnreadMessage
|
|
63
69
|
});
|
|
64
70
|
const renderItem = (0, _uikitUtils.useFreshCallback)(({
|
|
65
71
|
item,
|
|
@@ -76,6 +82,7 @@ const ChannelMessageList = ({
|
|
|
76
82
|
message: item,
|
|
77
83
|
prevMessage: messages[index + 1],
|
|
78
84
|
nextMessage: messages[index - 1],
|
|
85
|
+
isFirstUnreadMessage: (unreadFirstMessage === null || unreadFirstMessage === void 0 ? void 0 : unreadFirstMessage.messageId) === item.messageId,
|
|
79
86
|
onPress,
|
|
80
87
|
onLongPress,
|
|
81
88
|
onPressParentMessage,
|
|
@@ -97,9 +104,16 @@ const ChannelMessageList = ({
|
|
|
97
104
|
}, channel.isFrozen && /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.ChannelFrozenBanner, {
|
|
98
105
|
style: styles.frozenBanner,
|
|
99
106
|
text: STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN
|
|
100
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
107
|
+
}), renderUnreadMessagesFloating && /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
108
|
+
style: [channel.isFrozen ? styles.unreadMsgFloatingWhenFrozen : styles.unreadMsgFloating, safeAreaLayout]
|
|
109
|
+
}, renderUnreadMessagesFloating({
|
|
110
|
+
visible: (unreadMessagesFloatingProps === null || unreadMessagesFloatingProps === void 0 ? void 0 : unreadMessagesFloatingProps.visible) ?? false,
|
|
111
|
+
onPressClose: () => unreadMessagesFloatingProps === null || unreadMessagesFloatingProps === void 0 ? void 0 : unreadMessagesFloatingProps.onPressClose(),
|
|
112
|
+
unreadMessageCount: (unreadMessagesFloatingProps === null || unreadMessagesFloatingProps === void 0 ? void 0 : unreadMessagesFloatingProps.unreadMessageCount) ?? 0
|
|
113
|
+
})), /*#__PURE__*/_react.default.createElement(_ChatFlatList.default, _extends({
|
|
101
114
|
flatListComponent: flatListComponent
|
|
102
115
|
}, flatListProps, {
|
|
116
|
+
onViewableItemsChanged: onViewableItemsChanged,
|
|
103
117
|
onTopReached: onTopReached,
|
|
104
118
|
onBottomReached: onBottomReached,
|
|
105
119
|
onScrolledAwayFromBottom: onScrolledAwayFromBottom,
|
|
@@ -131,7 +145,8 @@ const useCreateMessagePressActions = ({
|
|
|
131
145
|
onReplyMessage,
|
|
132
146
|
onReplyInThreadMessage,
|
|
133
147
|
onDeleteMessage,
|
|
134
|
-
onPressMediaMessage
|
|
148
|
+
onPressMediaMessage,
|
|
149
|
+
onPressMarkAsUnreadMessage
|
|
135
150
|
}) => {
|
|
136
151
|
const handlers = (0, _useContext.useSBUHandlers)();
|
|
137
152
|
const {
|
|
@@ -199,6 +214,9 @@ const useCreateMessagePressActions = ({
|
|
|
199
214
|
}
|
|
200
215
|
}
|
|
201
216
|
};
|
|
217
|
+
const onMarkAsUnread = message => {
|
|
218
|
+
onPressMarkAsUnreadMessage === null || onPressMarkAsUnreadMessage === void 0 || onPressMarkAsUnreadMessage(message);
|
|
219
|
+
};
|
|
202
220
|
const openSheetForFailedMessage = message => {
|
|
203
221
|
openSheet({
|
|
204
222
|
sheetItems: [{
|
|
@@ -236,6 +254,11 @@ const useCreateMessagePressActions = ({
|
|
|
236
254
|
title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,
|
|
237
255
|
onPress: () => onCopyText(message)
|
|
238
256
|
}),
|
|
257
|
+
markAsUnread: message => ({
|
|
258
|
+
icon: 'mark-as-unread',
|
|
259
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_MARK_AS_UNREAD,
|
|
260
|
+
onPress: () => onMarkAsUnread(message)
|
|
261
|
+
}),
|
|
239
262
|
edit: message => ({
|
|
240
263
|
icon: 'edit',
|
|
241
264
|
title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,
|
|
@@ -268,9 +291,17 @@ const useCreateMessagePressActions = ({
|
|
|
268
291
|
if (message.isUserMessage()) {
|
|
269
292
|
sheetItems.push(menu.copy(message));
|
|
270
293
|
if (!channel.isEphemeral) {
|
|
271
|
-
if (
|
|
272
|
-
|
|
273
|
-
|
|
294
|
+
if (message.sendingStatus === 'succeeded') {
|
|
295
|
+
const isMyMsg = (0, _uikitUtils.isMyMessage)(message, currentUserId);
|
|
296
|
+
if (isMyMsg) {
|
|
297
|
+
sheetItems.push(menu.edit(message));
|
|
298
|
+
}
|
|
299
|
+
if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {
|
|
300
|
+
sheetItems.push(menu.markAsUnread(message));
|
|
301
|
+
}
|
|
302
|
+
if (isMyMsg) {
|
|
303
|
+
sheetItems.push(menu.delete(message));
|
|
304
|
+
}
|
|
274
305
|
}
|
|
275
306
|
if (channel.isGroupChannel()) {
|
|
276
307
|
if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {
|
|
@@ -286,8 +317,13 @@ const useCreateMessagePressActions = ({
|
|
|
286
317
|
sheetItems.push(menu.download(message));
|
|
287
318
|
}
|
|
288
319
|
if (!channel.isEphemeral) {
|
|
289
|
-
if (
|
|
290
|
-
|
|
320
|
+
if (message.sendingStatus === 'succeeded') {
|
|
321
|
+
if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {
|
|
322
|
+
sheetItems.push(menu.markAsUnread(message));
|
|
323
|
+
}
|
|
324
|
+
if ((0, _uikitUtils.isMyMessage)(message, currentUserId)) {
|
|
325
|
+
sheetItems.push(menu.delete(message));
|
|
326
|
+
}
|
|
291
327
|
}
|
|
292
328
|
if (channel.isGroupChannel()) {
|
|
293
329
|
if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {
|
|
@@ -356,6 +392,18 @@ const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
|
|
|
356
392
|
frozenListPadding: {
|
|
357
393
|
paddingBottom: 32
|
|
358
394
|
},
|
|
395
|
+
unreadMsgFloating: {
|
|
396
|
+
position: 'absolute',
|
|
397
|
+
zIndex: 999,
|
|
398
|
+
top: 12,
|
|
399
|
+
alignSelf: 'center'
|
|
400
|
+
},
|
|
401
|
+
unreadMsgFloatingWhenFrozen: {
|
|
402
|
+
position: 'absolute',
|
|
403
|
+
zIndex: 999,
|
|
404
|
+
top: 40,
|
|
405
|
+
alignSelf: 'center'
|
|
406
|
+
},
|
|
359
407
|
newMsgButton: {
|
|
360
408
|
position: 'absolute',
|
|
361
409
|
zIndex: 999,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_SBUUtils","_ChatFlatList","_ReactionAddons","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListComponent","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","ref","STRINGS","useLocalization","colors","useUIKitTheme","show","useUserProfile","safeAreaLayout","useSafeAreaPadding","createMessagePressActions","useCreateMessagePressActions","renderItem","useFreshCallback","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","View","style","flex","backgroundColor","background","isFrozen","ChannelFrozenBanner","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","data","keyExtractor","messageKeyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","scrollButton","handlers","useSBUHandlers","toast","useToast","openSheet","useBottomSheet","alert","useAlert","clipboardService","fileService","usePlatformService","sbOptions","useSendbirdChat","onResendFailure","error","TOAST","RESEND_MSG_ERROR","Logger","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","toMegabyte","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","getFileType","getFileExtension","includes","_handlers$onOpenFileU","getAvailableUriFromFileMessage","onOpenFileURL","openFile","SBUUtils","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","isMyMessage","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","isVoiceMessage","configs","uikitWithAppInfo","HeaderComponent","shouldRenderReaction","isSuper","enableReactionsSupergroup","enableReactions","onClose","ReactionAddons","BottomSheet","createStyleSheet","position","zIndex","top","start","end","paddingBottom","bottom","alignSelf","_default","exports","React","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListComponent,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n flatListComponent={flatListComponent}\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_uikitReactNativeFoundation","_uikitUtils","_useContext","_SBUUtils","_ChatFlatList","_ReactionAddons","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","onPressMarkAsUnreadMessage","currentUserId","renderUnreadMessagesFloating","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","unreadFirstMessage","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListComponent","flatListProps","onViewableItemsChanged","onPressNewMessagesButton","onPressScrollToBottomButton","unreadMessagesFloatingProps","ref","STRINGS","useLocalization","colors","useUIKitTheme","show","useUserProfile","safeAreaLayout","useSafeAreaPadding","createMessagePressActions","useCreateMessagePressActions","renderItem","useFreshCallback","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","isFirstUnreadMessage","messageId","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","View","style","flex","backgroundColor","background","isFrozen","ChannelFrozenBanner","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","unreadMsgFloatingWhenFrozen","unreadMsgFloating","visible","onPressClose","unreadMessageCount","data","keyExtractor","messageKeyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","scrollButton","handlers","useSBUHandlers","toast","useToast","openSheet","useBottomSheet","alert","useAlert","clipboardService","fileService","usePlatformService","sbOptions","useSendbirdChat","onResendFailure","error","TOAST","RESEND_MSG_ERROR","Logger","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","toMegabyte","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","getFileType","getFileExtension","includes","_handlers$onOpenFileU","getAvailableUriFromFileMessage","onOpenFileURL","openFile","SBUUtils","openURL","onMarkAsUnread","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","menu","copy","icon","CHANNEL_MESSAGE_COPY","markAsUnread","CHANNEL_MESSAGE_MARK_AS_UNREAD","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isMyMsg","isMyMessage","isGroupChannel","uikit","groupChannel","enableMarkAsUnread","replyType","isVoiceMessage","configs","uikitWithAppInfo","HeaderComponent","shouldRenderReaction","isSuper","enableReactionsSupergroup","enableReactions","onClose","ReactionAddons","BottomSheet","createStyleSheet","position","zIndex","top","start","end","paddingBottom","alignSelf","bottom","_default","exports","React","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\nimport { UnreadMessagesFloatingProps } from '../UnreadMessagesFloating';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n unreadFirstMessage?: SendbirdMessage;\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n onPressMarkAsUnreadMessage?: (message: HandleableMessage) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n isFirstUnreadMessage?: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n renderUnreadMessagesFloating?: null | ((props: UnreadMessagesFloatingProps) => React.ReactElement | null);\n unreadMessagesFloatingProps?: UnreadMessagesFloatingProps;\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n onViewableItemsChanged?: FlatListProps<SendbirdMessage>['onViewableItemsChanged'];\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n onPressMarkAsUnreadMessage,\n currentUserId,\n renderUnreadMessagesFloating,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n unreadFirstMessage,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListComponent,\n flatListProps,\n onViewableItemsChanged,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n unreadMessagesFloatingProps,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressMarkAsUnreadMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n isFirstUnreadMessage: unreadFirstMessage?.messageId === item.messageId,\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n {renderUnreadMessagesFloating && (\n <View\n style={[channel.isFrozen ? styles.unreadMsgFloatingWhenFrozen : styles.unreadMsgFloating, safeAreaLayout]}\n >\n {renderUnreadMessagesFloating({\n visible: unreadMessagesFloatingProps?.visible ?? false,\n onPressClose: () => unreadMessagesFloatingProps?.onPressClose(),\n unreadMessageCount: unreadMessagesFloatingProps?.unreadMessageCount ?? 0,\n })}\n </View>\n )}\n <ChatFlatList\n flatListComponent={flatListComponent}\n {...flatListProps}\n onViewableItemsChanged={onViewableItemsChanged}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n onPressMarkAsUnreadMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n | 'onPressMarkAsUnreadMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const onMarkAsUnread = (message: HandleableMessage) => {\n onPressMarkAsUnreadMessage?.(message);\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n markAsUnread: (message: HandleableMessage) => ({\n icon: 'mark-as-unread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_MARK_AS_UNREAD,\n onPress: () => onMarkAsUnread(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (message.sendingStatus === 'succeeded') {\n const isMyMsg = isMyMessage(message, currentUserId);\n if (isMyMsg) {\n sheetItems.push(menu.edit(message));\n }\n\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n sheetItems.push(menu.markAsUnread(message));\n }\n\n if (isMyMsg) {\n sheetItems.push(menu.delete(message));\n }\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (message.sendingStatus === 'succeeded') {\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n sheetItems.push(menu.markAsUnread(message));\n }\n\n if (isMyMessage(message, currentUserId)) {\n sheetItems.push(menu.delete(message));\n }\n }\n\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n unreadMsgFloating: {\n position: 'absolute',\n zIndex: 999,\n top: 12,\n alignSelf: 'center',\n },\n unreadMsgFloatingWhenFrozen: {\n position: 'absolute',\n zIndex: 999,\n top: 40,\n alignSelf: 'center',\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
|
|
10
|
+
var _useContext = require("../../hooks/useContext");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
const GroupChannelMessageNewLine = ({
|
|
13
|
+
shouldRenderNewLine
|
|
14
|
+
}) => {
|
|
15
|
+
if (!shouldRenderNewLine) return null;
|
|
16
|
+
const {
|
|
17
|
+
STRINGS
|
|
18
|
+
} = (0, _useContext.useLocalization)();
|
|
19
|
+
const {
|
|
20
|
+
colors
|
|
21
|
+
} = (0, _uikitReactNativeFoundation.useUIKitTheme)();
|
|
22
|
+
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
23
|
+
style: styles.container
|
|
24
|
+
}, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Box, {
|
|
25
|
+
backgroundColor: colors.primary,
|
|
26
|
+
style: styles.line
|
|
27
|
+
}), /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, {
|
|
28
|
+
caption3: true,
|
|
29
|
+
numberOfLines: 1,
|
|
30
|
+
color: colors.primary,
|
|
31
|
+
style: styles.label
|
|
32
|
+
}, STRINGS.GROUP_CHANNEL.LIST_NEW_LINE), /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Box, {
|
|
33
|
+
backgroundColor: colors.primary,
|
|
34
|
+
style: styles.line
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
37
|
+
const styles = _reactNative.StyleSheet.create({
|
|
38
|
+
container: {
|
|
39
|
+
width: '100%',
|
|
40
|
+
flexDirection: 'row',
|
|
41
|
+
alignItems: 'center',
|
|
42
|
+
marginBottom: 16
|
|
43
|
+
},
|
|
44
|
+
line: {
|
|
45
|
+
flex: 1,
|
|
46
|
+
height: 1
|
|
47
|
+
},
|
|
48
|
+
label: {
|
|
49
|
+
marginHorizontal: 4
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
var _default = exports.default = /*#__PURE__*/_react.default.memo(GroupChannelMessageNewLine);
|
|
53
|
+
//# sourceMappingURL=GroupChannelMessageNewLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_uikitReactNativeFoundation","_useContext","e","__esModule","default","GroupChannelMessageNewLine","shouldRenderNewLine","STRINGS","useLocalization","colors","useUIKitTheme","createElement","View","style","styles","container","Box","backgroundColor","primary","line","Text","caption3","numberOfLines","color","label","GROUP_CHANNEL","LIST_NEW_LINE","StyleSheet","create","width","flexDirection","alignItems","marginBottom","flex","height","marginHorizontal","_default","exports","React","memo"],"sources":["GroupChannelMessageNewLine.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport { Box, Text, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\n\nimport { useLocalization } from '../../hooks/useContext';\n\ntype Props = {\n shouldRenderNewLine?: boolean;\n};\n\nconst GroupChannelMessageNewLine = ({ shouldRenderNewLine }: Props) => {\n if (!shouldRenderNewLine) return null;\n\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n\n return (\n <View style={styles.container}>\n <Box backgroundColor={colors.primary} style={styles.line} />\n <Text caption3 numberOfLines={1} color={colors.primary} style={styles.label}>\n {STRINGS.GROUP_CHANNEL.LIST_NEW_LINE}\n </Text>\n <Box backgroundColor={colors.primary} style={styles.line} />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n flexDirection: 'row',\n alignItems: 'center',\n marginBottom: 16,\n },\n line: {\n flex: 1,\n height: 1,\n },\n label: {\n marginHorizontal: 4,\n },\n});\n\nexport default React.memo(GroupChannelMessageNewLine);\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,2BAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AAAyD,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAMzD,MAAMG,0BAA0B,GAAGA,CAAC;EAAEC;AAA2B,CAAC,KAAK;EACrE,IAAI,CAACA,mBAAmB,EAAE,OAAO,IAAI;EAErC,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAAC,2BAAe,EAAC,CAAC;EACrC,MAAM;IAAEC;EAAO,CAAC,GAAG,IAAAC,yCAAa,EAAC,CAAC;EAElC,oBACEd,MAAA,CAAAQ,OAAA,CAAAO,aAAA,CAACZ,YAAA,CAAAa,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC5BnB,MAAA,CAAAQ,OAAA,CAAAO,aAAA,CAACX,2BAAA,CAAAgB,GAAG;IAACC,eAAe,EAAER,MAAM,CAACS,OAAQ;IAACL,KAAK,EAAEC,MAAM,CAACK;EAAK,CAAE,CAAC,eAC5DvB,MAAA,CAAAQ,OAAA,CAAAO,aAAA,CAACX,2BAAA,CAAAoB,IAAI;IAACC,QAAQ;IAACC,aAAa,EAAE,CAAE;IAACC,KAAK,EAAEd,MAAM,CAACS,OAAQ;IAACL,KAAK,EAAEC,MAAM,CAACU;EAAM,GACzEjB,OAAO,CAACkB,aAAa,CAACC,aACnB,CAAC,eACP9B,MAAA,CAAAQ,OAAA,CAAAO,aAAA,CAACX,2BAAA,CAAAgB,GAAG;IAACC,eAAe,EAAER,MAAM,CAACS,OAAQ;IAACL,KAAK,EAAEC,MAAM,CAACK;EAAK,CAAE,CACvD,CAAC;AAEX,CAAC;AAED,MAAML,MAAM,GAAGa,uBAAU,CAACC,MAAM,CAAC;EAC/Bb,SAAS,EAAE;IACTc,KAAK,EAAE,MAAM;IACbC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,YAAY,EAAE;EAChB,CAAC;EACDb,IAAI,EAAE;IACJc,IAAI,EAAE,CAAC;IACPC,MAAM,EAAE;EACV,CAAC;EACDV,KAAK,EAAE;IACLW,gBAAgB,EAAE;EACpB;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAjC,OAAA,gBAEYkC,cAAK,CAACC,IAAI,CAAClC,0BAA0B,CAAC","ignoreList":[]}
|
|
@@ -14,6 +14,7 @@ var _types = require("../../types");
|
|
|
14
14
|
var _ReactionAddons = require("../ReactionAddons");
|
|
15
15
|
var _GroupChannelMessageDateSeparator = _interopRequireDefault(require("./GroupChannelMessageDateSeparator"));
|
|
16
16
|
var _GroupChannelMessageFocusAnimation = _interopRequireDefault(require("./GroupChannelMessageFocusAnimation"));
|
|
17
|
+
var _GroupChannelMessageNewLine = _interopRequireDefault(require("./GroupChannelMessageNewLine"));
|
|
17
18
|
var _GroupChannelMessageOutgoingStatus = _interopRequireDefault(require("./GroupChannelMessageOutgoingStatus"));
|
|
18
19
|
var _GroupChannelMessageParentMessage = _interopRequireDefault(require("./GroupChannelMessageParentMessage"));
|
|
19
20
|
var _GroupChannelMessageReplyInfo = _interopRequireDefault(require("./GroupChannelMessageReplyInfo"));
|
|
@@ -33,6 +34,7 @@ const GroupChannelMessageRenderer = ({
|
|
|
33
34
|
focused,
|
|
34
35
|
prevMessage,
|
|
35
36
|
nextMessage,
|
|
37
|
+
isFirstUnreadMessage,
|
|
36
38
|
hideParentMessage
|
|
37
39
|
}) => {
|
|
38
40
|
const handlers = (0, _useContext.useSBUHandlers)();
|
|
@@ -314,12 +316,15 @@ const GroupChannelMessageRenderer = ({
|
|
|
314
316
|
return 16;
|
|
315
317
|
}
|
|
316
318
|
});
|
|
319
|
+
const shouldRenderNewLine = sbOptions.uikit.groupChannel.channel.enableMarkAsUnread && isFirstUnreadMessage;
|
|
317
320
|
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Box, {
|
|
318
321
|
paddingHorizontal: 16,
|
|
319
322
|
marginBottom: messageGap
|
|
320
323
|
}, /*#__PURE__*/_react.default.createElement(_GroupChannelMessageDateSeparator.default, {
|
|
321
324
|
message: message,
|
|
322
325
|
prevMessage: prevMessage
|
|
326
|
+
}), /*#__PURE__*/_react.default.createElement(_GroupChannelMessageNewLine.default, {
|
|
327
|
+
shouldRenderNewLine: shouldRenderNewLine
|
|
323
328
|
}), /*#__PURE__*/_react.default.createElement(_GroupChannelMessageFocusAnimation.default, {
|
|
324
329
|
focused: focused
|
|
325
330
|
}, renderMessage()));
|