@sendbird/uikit-react-native 3.7.2 → 3.7.4
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/SendInput.js +2 -1
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js +33 -23
- package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/index.js +11 -5
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +6 -1
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/ChannelThreadMessageList/index.js +6 -1
- package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js +2 -2
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.js +2 -2
- package/lib/commonjs/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.js.map +1 -1
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js +7 -3
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js +7 -3
- package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
- package/lib/commonjs/components/ThreadParentMessageRenderer/index.js +1 -1
- package/lib/commonjs/components/ThreadParentMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +0 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/commonjs/contexts/PlatformServiceCtx.js +2 -1
- package/lib/commonjs/contexts/PlatformServiceCtx.js.map +1 -1
- package/lib/commonjs/contexts/SBUHandlersCtx.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +8 -4
- package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +8 -3
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +3 -2
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelThreadFragment.js +3 -2
- package/lib/commonjs/fragments/createGroupChannelThreadFragment.js.map +1 -1
- package/lib/commonjs/hooks/useConnection.js +2 -2
- package/lib/commonjs/hooks/useConnection.js.map +1 -1
- package/lib/commonjs/hooks/usePushTokenRegistration.js +28 -7
- package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/commonjs/localization/StringSet.en.js +2 -3
- package/lib/commonjs/localization/StringSet.en.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.expo.js +8 -2
- package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.native.js +9 -3
- package/lib/commonjs/platform/createPlayerService.native.js.map +1 -1
- package/lib/commonjs/platform/createRecorderService.native.js +8 -2
- package/lib/commonjs/platform/createRecorderService.native.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/SendInput.js +2 -1
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/components/ChannelInput/VoiceMessageInput.js +34 -24
- package/lib/module/components/ChannelInput/VoiceMessageInput.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js +12 -6
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +6 -1
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/ChannelThreadMessageList/index.js +6 -1
- package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.js +1 -1
- package/lib/module/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.js.map +1 -1
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js +8 -4
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js +7 -3
- package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
- package/lib/module/components/ThreadParentMessageRenderer/index.js +1 -1
- package/lib/module/components/ThreadParentMessageRenderer/index.js.map +1 -1
- package/lib/module/containers/SendbirdUIKitContainer.js +0 -1
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/module/contexts/PlatformServiceCtx.js +2 -1
- package/lib/module/contexts/PlatformServiceCtx.js.map +1 -1
- package/lib/module/contexts/SBUHandlersCtx.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +8 -4
- package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +8 -3
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +3 -2
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelThreadFragment.js +3 -2
- package/lib/module/fragments/createGroupChannelThreadFragment.js.map +1 -1
- package/lib/module/hooks/useConnection.js +2 -2
- package/lib/module/hooks/useConnection.js.map +1 -1
- package/lib/module/hooks/usePushTokenRegistration.js +28 -7
- package/lib/module/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/module/localization/StringSet.en.js +2 -2
- package/lib/module/localization/StringSet.en.js.map +1 -1
- package/lib/module/platform/createPlayerService.expo.js +9 -3
- package/lib/module/platform/createPlayerService.expo.js.map +1 -1
- package/lib/module/platform/createPlayerService.native.js +10 -4
- package/lib/module/platform/createPlayerService.native.js.map +1 -1
- package/lib/module/platform/createRecorderService.native.js +9 -3
- package/lib/module/platform/createRecorderService.native.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/contexts/SBUHandlersCtx.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadInput.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelInput.d.ts +1 -1
- package/lib/typescript/src/domain/openChannel/component/OpenChannelMessageList.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +6 -6
- package/src/components/ChannelInput/SendInput.tsx +2 -1
- package/src/components/ChannelInput/VoiceMessageInput.tsx +40 -24
- package/src/components/ChannelInput/index.tsx +16 -6
- package/src/components/ChannelMessageList/index.tsx +5 -1
- package/src/components/ChannelThreadMessageList/index.tsx +5 -1
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.tsx +1 -1
- package/src/components/GroupChannelMessageRenderer/index.tsx +1 -1
- package/src/components/OpenChannelMessageRenderer/OpenChannelMessageDateSeparator.tsx +1 -1
- package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +10 -5
- package/src/components/ReactionBottomSheets/ReactionListBottomSheet.tsx +7 -4
- package/src/components/ThreadParentMessageRenderer/index.tsx +1 -1
- package/src/containers/SendbirdUIKitContainer.tsx +0 -1
- package/src/contexts/PlatformServiceCtx.tsx +2 -1
- package/src/contexts/SBUHandlersCtx.tsx +1 -1
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +2 -2
- package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +8 -4
- package/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx +1 -1
- package/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.tsx +7 -3
- package/src/fragments/createGroupChannelFragment.tsx +3 -2
- package/src/fragments/createGroupChannelThreadFragment.tsx +3 -2
- package/src/hooks/useConnection.ts +8 -2
- package/src/hooks/usePushTokenRegistration.ts +28 -7
- package/src/localization/StringSet.en.ts +2 -2
- package/src/platform/createPlayerService.expo.tsx +9 -3
- package/src/platform/createPlayerService.native.tsx +10 -4
- package/src/platform/createRecorderService.native.tsx +9 -3
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useRef","Animated","Box","Icon","PressBox","ProgressBar","Text","createStyleSheet","useUIKitTheme","conditionChaining","millsToMMSS","useLocalization","useVoiceMessageInput","VoiceMessageInput","_ref","onClose","onSend","STRINGS","colors","actions","state","file","duration","uiColors","ui","voiceMessageInput","default","status","onPressCancel","cancel","onPressSend","send","onPressVoiceMessageAction","startRecording","lessThanMinimumDuration","stopRecording","playPlayer","pausePlayer","renderActionIcon","createElement","icon","size","color","recording","actionIcon","isRecorderState","recordingTime","currentTime","minDuration","remainingTime","playingTime","backgroundColor","background","paddingVertical","paddingHorizontal","style","styles","container","progressBar","current","total","maxDuration","trackColor","progressTrack","overlay","flex","flexDirection","alignItems","justifyContent","paddingRight","RecordingLight","visible","caption1","lineHeight","undefined","marginLeft","textTime","height","CancelButton","label","LABELS","VOICE_MESSAGE_INPUT_CANCEL","onPress","SendButton","disabled","position","activeOpacity","width","borderRadius","actionIconBackground","props","value","Value","animation","loop","sequence","timing","toValue","useNativeDriver","start","reset","View","opacity","active","button","textCancel","numberOfLines","sendIconBackground","padding","sendIcon","borderTopLeftRadius","borderTopRightRadius","marginBottom"],"sources":["VoiceMessageInput.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Animated } from 'react-native';\n\nimport {\n Box,\n Icon,\n PressBox,\n ProgressBar,\n Text,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining, millsToMMSS } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\nimport useVoiceMessageInput from '../../hooks/useVoiceMessageInput';\nimport type { FileType } from '../../platform/types';\n\nexport type VoiceMessageInputProps = {\n onClose: () => Promise<void>;\n onSend: (params: { file: FileType; duration: number }) => void;\n};\n\nconst VoiceMessageInput = ({ onClose, onSend }: VoiceMessageInputProps) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { actions, state } = useVoiceMessageInput({\n onSend: (file, duration) => onSend({ file, duration }),\n onClose,\n });\n\n const uiColors = colors.ui.voiceMessageInput.default[state.status !== 'idle' ? 'active' : 'inactive'];\n\n const onPressCancel = async () => {\n actions.cancel();\n onClose();\n };\n\n const onPressSend = async () => {\n actions.send();\n onClose();\n };\n\n const onPressVoiceMessageAction = () => {\n switch (state.status) {\n case 'idle':\n actions.startRecording();\n break;\n case 'recording':\n if (lessThanMinimumDuration) {\n actions.cancel();\n } else {\n actions.stopRecording();\n }\n break;\n case 'recording_completed':\n case 'playing_paused':\n actions.playPlayer();\n break;\n case 'playing':\n actions.pausePlayer();\n break;\n }\n };\n const renderActionIcon = () => {\n switch (state.status) {\n case 'idle':\n return <Icon icon={'recording'} size={20} color={uiColors.recording} />;\n case 'recording':\n return <Icon icon={'stop'} size={20} color={uiColors.actionIcon} />;\n case 'recording_completed':\n case 'playing_paused':\n return <Icon icon={'play'} size={20} color={uiColors.actionIcon} />;\n case 'playing':\n return <Icon icon={'pause'} size={20} color={uiColors.actionIcon} />;\n }\n };\n\n const isRecorderState = state.status === 'recording' || state.status === 'recording_completed';\n const lessThanMinimumDuration = state.recordingTime.currentTime < state.recordingTime.minDuration;\n const remainingTime = state.playingTime.duration - state.playingTime.currentTime;\n\n return (\n <Box backgroundColor={uiColors.background} paddingVertical={24} paddingHorizontal={16} style={styles.container}>\n {/** Progress bar **/}\n <ProgressBar\n style={styles.progressBar}\n current={conditionChaining(\n [state.status === 'recording', state.status === 'recording_completed'],\n [state.recordingTime.currentTime, 0, state.playingTime.currentTime],\n )}\n total={(isRecorderState ? state.recordingTime.maxDuration : state.playingTime.duration) || 1}\n trackColor={uiColors.progressTrack}\n overlay={\n <Box flex={1} flexDirection={'row'} alignItems={'center'} justifyContent={'flex-end'} paddingRight={16}>\n <RecordingLight visible={state.status === 'recording'} />\n <Text caption1 style={{ lineHeight: undefined, marginLeft: 6 }} color={uiColors.textTime}>\n {millsToMMSS(isRecorderState ? state.recordingTime.currentTime : remainingTime)}\n </Text>\n </Box>\n }\n />\n\n <Box height={34} alignItems={'center'} justifyContent={'center'}>\n {/** Cancel / Send **/}\n <Box flexDirection={'row'}>\n <CancelButton label={STRINGS.LABELS.VOICE_MESSAGE_INPUT_CANCEL} onPress={onPressCancel} />\n <Box flex={1} />\n <SendButton disabled={state.status === 'idle' || lessThanMinimumDuration} onPress={onPressSend} />\n </Box>\n\n {/** Record / Stop / Play / Pause **/}\n <Box style={{ position: 'absolute' }} alignItems={'center'} justifyContent={'center'}>\n <PressBox activeOpacity={0.5} onPress={onPressVoiceMessageAction}>\n <Box\n width={34}\n height={34}\n borderRadius={17}\n alignItems={'center'}\n justifyContent={'center'}\n backgroundColor={uiColors.actionIconBackground}\n >\n {renderActionIcon()}\n </Box>\n </PressBox>\n </Box>\n </Box>\n </Box>\n );\n};\n\nconst RecordingLight = (props: { visible: boolean }) => {\n const { colors } = useUIKitTheme();\n\n const value = useRef(new Animated.Value(0)).current;\n const animation = useRef(\n Animated.loop(\n Animated.sequence([\n Animated.timing(value, { toValue: 1, duration: 500, useNativeDriver: true }),\n Animated.timing(value, { toValue: 0, duration: 500, useNativeDriver: true }),\n ]),\n ),\n ).current;\n\n useEffect(() => {\n if (props.visible) animation.start();\n return () => {\n animation.reset();\n };\n }, [props.visible]);\n\n if (!props.visible) return null;\n return (\n <Animated.View\n style={{\n width: 12,\n height: 12,\n borderRadius: 6,\n opacity: value,\n backgroundColor: colors.ui.voiceMessageInput.default.active.recording,\n }}\n />\n );\n};\n\nconst CancelButton = (props: { onPress: () => void; label: string }) => {\n const { colors } = useUIKitTheme();\n\n return (\n <PressBox activeOpacity={0.8} onPress={props.onPress}>\n <Box paddingHorizontal={12} height={'100%'} alignItems={'center'} justifyContent={'center'}>\n <Text button color={colors.ui.voiceMessageInput.default.active.textCancel} numberOfLines={1}>\n {props.label}\n </Text>\n </Box>\n </PressBox>\n );\n};\n\nconst SendButton = (props: { onPress: () => void; disabled: boolean }) => {\n const { colors } = useUIKitTheme();\n\n const uiColors = colors.ui.voiceMessageInput.default[props.disabled ? 'inactive' : 'active'];\n\n return (\n <PressBox disabled={props.disabled} activeOpacity={0.8} onPress={props.onPress}>\n <Box backgroundColor={uiColors.sendIconBackground} padding={7} borderRadius={40}>\n <Icon icon={'send'} size={20} color={uiColors.sendIcon} />\n </Box>\n </PressBox>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n },\n progressBar: {\n height: 36,\n marginBottom: 16,\n borderRadius: 18,\n },\n});\n\nexport default VoiceMessageInput;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","Animated","Box","Icon","PressBox","ProgressBar","Text","createStyleSheet","useUIKitTheme","Logger","conditionChaining","millsToMMSS","useLocalization","useVoiceMessageInput","VoiceMessageInput","_ref","onClose","onSend","STRINGS","colors","actions","state","file","duration","uiColors","ui","voiceMessageInput","default","status","onPressCancel","cancel","catch","error","warn","finally","onPressSend","send","onPressVoiceMessageAction","startRecording","lessThanMinimumDuration","stopRecording","playPlayer","pausePlayer","renderActionIcon","createElement","icon","size","color","recording","actionIcon","isRecorderState","recordingTime","currentTime","minDuration","remainingTime","playingTime","backgroundColor","background","paddingVertical","paddingHorizontal","style","styles","container","progressBar","current","total","maxDuration","trackColor","progressTrack","overlay","flex","flexDirection","alignItems","justifyContent","paddingRight","RecordingLight","visible","caption1","lineHeight","undefined","marginLeft","textTime","height","CancelButton","label","LABELS","VOICE_MESSAGE_INPUT_CANCEL","onPress","SendButton","disabled","position","activeOpacity","width","borderRadius","actionIconBackground","props","value","Value","animation","loop","sequence","timing","toValue","useNativeDriver","start","reset","View","opacity","active","button","textCancel","numberOfLines","sendIconBackground","padding","sendIcon","borderTopLeftRadius","borderTopRightRadius","marginBottom"],"sources":["VoiceMessageInput.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Animated } from 'react-native';\n\nimport {\n Box,\n Icon,\n PressBox,\n ProgressBar,\n Text,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { Logger, conditionChaining, millsToMMSS } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\nimport useVoiceMessageInput from '../../hooks/useVoiceMessageInput';\nimport type { FileType } from '../../platform/types';\n\nexport type VoiceMessageInputProps = {\n onClose: () => Promise<void>;\n onSend: (params: { file: FileType; duration: number }) => void;\n};\n\nconst VoiceMessageInput = ({ onClose, onSend }: VoiceMessageInputProps) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { actions, state } = useVoiceMessageInput({\n onSend: (file, duration) => onSend({ file, duration }),\n onClose,\n });\n\n const uiColors = colors.ui.voiceMessageInput.default[state.status !== 'idle' ? 'active' : 'inactive'];\n\n const onPressCancel = async () => {\n await actions\n .cancel()\n .catch((error) => {\n Logger.warn('Failed to cancel voice message input', error);\n })\n .finally(() => {\n onClose();\n });\n };\n\n const onPressSend = async () => {\n await actions\n .send()\n .catch((error) => {\n Logger.warn('Failed to send voice message', error);\n })\n .finally(() => {\n onClose();\n });\n };\n\n const onPressVoiceMessageAction = async () => {\n try {\n switch (state.status) {\n case 'idle':\n await actions.startRecording();\n break;\n case 'recording':\n if (lessThanMinimumDuration) {\n await actions.cancel();\n } else {\n await actions.stopRecording();\n }\n break;\n case 'recording_completed':\n case 'playing_paused':\n await actions.playPlayer();\n break;\n case 'playing':\n await actions.pausePlayer();\n break;\n }\n } catch (error) {\n Logger.warn('Failed to run voice message action.', state);\n }\n };\n const renderActionIcon = () => {\n switch (state.status) {\n case 'idle':\n return <Icon icon={'recording'} size={20} color={uiColors.recording} />;\n case 'recording':\n return <Icon icon={'stop'} size={20} color={uiColors.actionIcon} />;\n case 'recording_completed':\n case 'playing_paused':\n return <Icon icon={'play'} size={20} color={uiColors.actionIcon} />;\n case 'playing':\n return <Icon icon={'pause'} size={20} color={uiColors.actionIcon} />;\n }\n };\n\n const isRecorderState = state.status === 'recording' || state.status === 'recording_completed';\n const lessThanMinimumDuration = state.recordingTime.currentTime < state.recordingTime.minDuration;\n const remainingTime = state.playingTime.duration - state.playingTime.currentTime;\n\n return (\n <Box backgroundColor={uiColors.background} paddingVertical={24} paddingHorizontal={16} style={styles.container}>\n {/** Progress bar **/}\n <ProgressBar\n style={styles.progressBar}\n current={conditionChaining(\n [state.status === 'recording', state.status === 'recording_completed'],\n [state.recordingTime.currentTime, 0, state.playingTime.currentTime],\n )}\n total={(isRecorderState ? state.recordingTime.maxDuration : state.playingTime.duration) || 1}\n trackColor={uiColors.progressTrack}\n overlay={\n <Box flex={1} flexDirection={'row'} alignItems={'center'} justifyContent={'flex-end'} paddingRight={16}>\n <RecordingLight visible={state.status === 'recording'} />\n <Text caption1 style={{ lineHeight: undefined, marginLeft: 6 }} color={uiColors.textTime}>\n {millsToMMSS(isRecorderState ? state.recordingTime.currentTime : remainingTime)}\n </Text>\n </Box>\n }\n />\n\n <Box height={34} alignItems={'center'} justifyContent={'center'}>\n {/** Cancel / Send **/}\n <Box flexDirection={'row'}>\n <CancelButton label={STRINGS.LABELS.VOICE_MESSAGE_INPUT_CANCEL} onPress={onPressCancel} />\n <Box flex={1} />\n <SendButton disabled={state.status === 'idle' || lessThanMinimumDuration} onPress={onPressSend} />\n </Box>\n\n {/** Record / Stop / Play / Pause **/}\n <Box style={{ position: 'absolute' }} alignItems={'center'} justifyContent={'center'}>\n <PressBox activeOpacity={0.5} onPress={onPressVoiceMessageAction}>\n <Box\n width={34}\n height={34}\n borderRadius={17}\n alignItems={'center'}\n justifyContent={'center'}\n backgroundColor={uiColors.actionIconBackground}\n >\n {renderActionIcon()}\n </Box>\n </PressBox>\n </Box>\n </Box>\n </Box>\n );\n};\n\nconst RecordingLight = (props: { visible: boolean }) => {\n const { colors } = useUIKitTheme();\n\n const value = useRef(new Animated.Value(0)).current;\n const animation = useRef(\n Animated.loop(\n Animated.sequence([\n Animated.timing(value, { toValue: 1, duration: 500, useNativeDriver: true }),\n Animated.timing(value, { toValue: 0, duration: 500, useNativeDriver: true }),\n ]),\n ),\n ).current;\n\n useEffect(() => {\n if (props.visible) animation.start();\n return () => {\n animation.reset();\n };\n }, [props.visible]);\n\n if (!props.visible) return null;\n return (\n <Animated.View\n style={{\n width: 12,\n height: 12,\n borderRadius: 6,\n opacity: value,\n backgroundColor: colors.ui.voiceMessageInput.default.active.recording,\n }}\n />\n );\n};\n\nconst CancelButton = (props: { onPress: () => void; label: string }) => {\n const { colors } = useUIKitTheme();\n\n return (\n <PressBox activeOpacity={0.8} onPress={props.onPress}>\n <Box paddingHorizontal={12} height={'100%'} alignItems={'center'} justifyContent={'center'}>\n <Text button color={colors.ui.voiceMessageInput.default.active.textCancel} numberOfLines={1}>\n {props.label}\n </Text>\n </Box>\n </PressBox>\n );\n};\n\nconst SendButton = (props: { onPress: () => void; disabled: boolean }) => {\n const { colors } = useUIKitTheme();\n\n const uiColors = colors.ui.voiceMessageInput.default[props.disabled ? 'inactive' : 'active'];\n\n return (\n <PressBox disabled={props.disabled} activeOpacity={0.8} onPress={props.onPress}>\n <Box backgroundColor={uiColors.sendIconBackground} padding={7} borderRadius={40}>\n <Icon icon={'send'} size={20} color={uiColors.sendIcon} />\n </Box>\n </PressBox>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n },\n progressBar: {\n height: 36,\n marginBottom: 16,\n borderRadius: 18,\n },\n});\n\nexport default VoiceMessageInput;\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import React, { useEffect, useMemo, useState } from 'react';
|
|
|
3
3
|
import { KeyboardAvoidingView, Platform, StyleSheet, View } from 'react-native';
|
|
4
4
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
5
5
|
import { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
|
-
import { replace, useIIFE } from '@sendbird/uikit-utils';
|
|
6
|
+
import { Logger, replace, useIIFE } from '@sendbird/uikit-utils';
|
|
7
7
|
import { useSendbirdChat } from '../../hooks/useContext';
|
|
8
8
|
import useMentionTextInput from '../../hooks/useMentionTextInput';
|
|
9
9
|
import AttachmentsButton from './AttachmentsButton';
|
|
@@ -140,11 +140,17 @@ const ChannelInput = props => {
|
|
|
140
140
|
}));
|
|
141
141
|
};
|
|
142
142
|
const useTypingTrigger = (text, channel) => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (
|
|
146
|
-
|
|
147
|
-
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
function triggerTyping() {
|
|
145
|
+
if (channel.isGroupChannel()) {
|
|
146
|
+
const action = text.length === 0 ? channel.endTyping : channel.startTyping;
|
|
147
|
+
action().catch(error => {
|
|
148
|
+
Logger.debug('ChannelInput: Failed to trigger typing', error);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
triggerTyping();
|
|
153
|
+
}, channel.isGroupChannel() ? [text] : []);
|
|
148
154
|
};
|
|
149
155
|
const useTextClearOnDisabled = (setText, chatDisabled) => {
|
|
150
156
|
useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useMemo","useState","KeyboardAvoidingView","Platform","StyleSheet","View","useSafeAreaInsets","createStyleSheet","useUIKitTheme","replace","useIIFE","useSendbirdChat","useMentionTextInput","AttachmentsButton","EditInput","MessageToReplyPreview","SendInput","VoiceMessageInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","colors","typography","sbOptions","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","length","inputHeight","setInputHeight","styles","inputDefault","height","fontStyle","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","shouldRenderInput","createElement","SafeAreaBottom","Fragment","keyboardVerticalOffset","behavior","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","bottomInset","endTyping","startTyping","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","_ref","justifyContent","width","flex","marginRight","borderRadius","paddingTop","paddingBottom","minHeight","maxHeight","memo"],"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 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 if (channel.isGroupChannel()) {\n useEffect(() => {\n if (text.length === 0) channel.endTyping();\n else channel.startTyping();\n }, [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","useEffect","useMemo","useState","KeyboardAvoidingView","Platform","StyleSheet","View","useSafeAreaInsets","createStyleSheet","useUIKitTheme","Logger","replace","useIIFE","useSendbirdChat","useMentionTextInput","AttachmentsButton","EditInput","MessageToReplyPreview","SendInput","VoiceMessageInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","colors","typography","sbOptions","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","length","inputHeight","setInputHeight","styles","inputDefault","height","fontStyle","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","shouldRenderInput","createElement","SafeAreaBottom","Fragment","keyboardVerticalOffset","behavior","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","bottomInset","triggerTyping","action","endTyping","startTyping","catch","error","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","_ref","justifyContent","width","flex","marginRight","borderRadius","paddingTop","paddingBottom","minHeight","maxHeight","memo"],"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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"}
|
|
@@ -5,6 +5,7 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
|
5
5
|
import { ChannelFrozenBanner, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
6
|
import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, isVoiceMessage, messageKeyExtractor, shouldRenderReaction, toMegabyte, useFreshCallback } from '@sendbird/uikit-utils';
|
|
7
7
|
import { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
|
|
8
|
+
import SBUUtils from '../../libs/SBUUtils';
|
|
8
9
|
import ChatFlatList from '../ChatFlatList';
|
|
9
10
|
import { ReactionAddons } from '../ReactionAddons';
|
|
10
11
|
const ChannelMessageList = (_ref, ref) => {
|
|
@@ -190,9 +191,13 @@ const useCreateMessagePressActions = _ref3 => {
|
|
|
190
191
|
if (message.isFileMessage()) {
|
|
191
192
|
const fileType = getFileType(message.type || getFileExtension(message.name));
|
|
192
193
|
if (['image', 'video', 'audio'].includes(fileType)) {
|
|
194
|
+
var _handlers$onOpenFileU;
|
|
193
195
|
onPressMediaMessage === null || onPressMediaMessage === void 0 ? void 0 : onPressMediaMessage(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
|
|
196
|
+
(_handlers$onOpenFileU = handlers.onOpenFileURL) === null || _handlers$onOpenFileU === void 0 ? void 0 : _handlers$onOpenFileU.call(handlers, message.url);
|
|
197
|
+
} else {
|
|
198
|
+
const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;
|
|
199
|
+
openFile(message.url);
|
|
194
200
|
}
|
|
195
|
-
handlers.onOpenFileURL(message.url);
|
|
196
201
|
}
|
|
197
202
|
};
|
|
198
203
|
const openSheetForFailedMessage = message => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","onOpenFileURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","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","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","configs","uikitWithAppInfo","HeaderComponent","isSuper","enableReactionsSupergroup","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\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} 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 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 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 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 { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\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 {...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 }\n handlers.onOpenFileURL(message.url);\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 left: 8,\n right: 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 right: 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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"}
|
|
1
|
+
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","_handlers$onOpenFileU","onOpenFileURL","call","openFile","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","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","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","configs","uikitWithAppInfo","HeaderComponent","isSuper","enableReactionsSupergroup","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\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} 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 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 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 { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\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 {...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 left: 8,\n right: 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 right: 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":";AAAA,OAAOA,KAAK,MAAe,OAAO;AAClC,SAAkDC,IAAI,QAAQ,cAAc;AAC5E,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,SAEEC,mBAAmB,EACnBC,gBAAgB,EAChBC,QAAQ,EACRC,cAAc,EACdC,QAAQ,EACRC,aAAa,QACR,yCAAyC;AAChD,SACEC,MAAM,EAMNC,8BAA8B,EAC9BC,gBAAgB,EAChBC,WAAW,EACXC,WAAW,EACXC,cAAc,EACdC,mBAAmB,EACnBC,oBAAoB,EACpBC,UAAU,EACVC,gBAAgB,QACX,uBAAuB;AAG9B,SACEC,eAAe,EACfC,kBAAkB,EAClBC,cAAc,EACdC,eAAe,EACfC,cAAc,QACT,wBAAwB;AAC/B,OAAOC,QAAQ,MAAM,qBAAqB;AAC1C,OAAOC,YAAY,MAAM,iBAAiB;AAC1C,SAASC,cAAc,QAAQ,mBAAmB;AAwDlD,MAAMC,kBAAkB,GAAGA,CAAAC,IAAA,EA2BzBC,GAAkD,KAC/C;EAAA,IA3BH;IACEC,UAAU;IACVC,OAAO;IACPC,OAAO;IACPC,aAAa;IACbC,cAAc;IACdC,sBAAsB;IACtBC,eAAe;IACfC,qBAAqB;IACrBC,mBAAmB;IACnBC,oBAAoB;IACpBC,aAAa;IACbC,uBAAuB;IACvBC,0BAA0B;IAC1BC,aAAa;IACbC,QAAQ;IACRC,WAAW;IACXC,qBAAqB;IACrBC,wBAAwB;IACxBC,sBAAsB;IACtBC,eAAe;IACfC,YAAY;IACZC,aAAa;IACbC,wBAAwB;IACxBC;EAC0B,CAAC,GAAAzB,IAAA;EAG7B,MAAM;IAAE0B;EAAQ,CAAC,GAAGnC,eAAe,EAAE;EACrC,MAAM;IAAEoC;EAAO,CAAC,GAAG/C,aAAa,EAAE;EAClC,MAAM;IAAEgD;EAAK,CAAC,GAAGjC,cAAc,EAAE;EACjC,MAAM;IAAEkC,IAAI;IAAEC;EAAM,CAAC,GAAGxD,iBAAiB,EAAE;EAC3C,MAAMyD,yBAAyB,GAAGC,4BAA4B,CAAC;IAC7D5B,OAAO;IACPQ,aAAa;IACbP,aAAa;IACbC,cAAc;IACdC,sBAAsB;IACtBC,eAAe;IACfC,qBAAqB;IACrBC;EACF,CAAC,CAAC;EAEF,MAAMuB,cAAc,GAAG;IAAEC,WAAW,EAAEL,IAAI;IAAEM,YAAY,EAAEL;EAAM,CAAC;EAEjE,MAAMM,UAA2C,GAAG9C,gBAAgB,CAAC+C,KAAA,IAAqB;IAAA,IAApB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,KAAA;IACnF,MAAM;MAAEG,OAAO;MAAEC,WAAW;MAAEC;IAAgB,CAAC,GAAGX,yBAAyB,CAAC;MAAEY,OAAO,EAAEL;IAAK,CAAC,CAAC;IAC9F,OAAOvB,aAAa,CAAC;MACnB4B,OAAO,EAAEL,IAAI;MACbM,WAAW,EAAE5B,QAAQ,CAACuB,KAAK,GAAG,CAAC,CAAC;MAChCM,WAAW,EAAE7B,QAAQ,CAACuB,KAAK,GAAG,CAAC,CAAC;MAChCC,OAAO;MACPC,WAAW;MACX9B,oBAAoB;MACpBJ,sBAAsB;MACtBuC,iBAAiB,EAAElB,IAAI;MACvBV,qBAAqB;MACrBd,OAAO;MACPQ,aAAa;MACbmC,OAAO,EAAE,CAAC,CAAA7C,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE8C,aAAa,KAAI,CAAC,CAAC,MAAMV,IAAI,CAACW,SAAS;MAC7DP,eAAe;MACfQ,WAAW,EAAEX,KAAK,KAAK;IACzB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,oBACEnE,KAAA,CAAA+E,aAAA,CAAC9E,IAAI;IAAC+E,KAAK,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,eAAe,EAAE3B,MAAM,CAAC4B;IAAW,CAAC,EAAEtB,cAAc;EAAE,GAC5E7B,OAAO,CAACoD,QAAQ,iBACfpF,KAAA,CAAA+E,aAAA,CAAC5E,mBAAmB;IAAC6E,KAAK,EAAEK,MAAM,CAACC,YAAa;IAACC,IAAI,EAAEjC,OAAO,CAACkC,MAAM,CAACC;EAA4B,EACnG,eACDzF,KAAA,CAAA+E,aAAA,CAACtD,YAAY,EAAAiE,QAAA,KACPvC,aAAa;IACjBD,YAAY,EAAEA,YAAa;IAC3BD,eAAe,EAAEA,eAAgB;IACjCF,wBAAwB,EAAEA,wBAAyB;IACnDlB,GAAG,EAAEA,GAAI;IACT8D,IAAI,EAAE/C,QAAS;IACfoB,UAAU,EAAEA,UAAW;IACvB4B,YAAY,EAAE7E,mBAAoB;IAClC8E,qBAAqB,EAAE;IACrB;IACA7D,OAAO,CAACoD,QAAQ,IAAIC,MAAM,CAACS,iBAAiB,EAC5C3C,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE0C,qBAAqB;EACpC,GACF,EACDpD,uBAAuB,iBACtBzC,KAAA,CAAA+E,aAAA,CAAC9E,IAAI;IAAC+E,KAAK,EAAE,CAACK,MAAM,CAACU,YAAY,EAAElC,cAAc;EAAE,GAChDpB,uBAAuB,CAAC;IACvBuD,OAAO,EAAEnD,WAAW,CAACoD,MAAM,GAAG,CAAC,KAAKlE,OAAO,EAAE,IAAIiB,sBAAsB,CAAC;IACxEoB,OAAO,EAAEA,CAAA,KAAMhB,wBAAwB,EAAE;IACzCP;EACF,CAAC,CAAC,CAEL,EACAH,0BAA0B,iBACzB1C,KAAA,CAAA+E,aAAA,CAAC9E,IAAI;IAAC+E,KAAK,EAAE,CAACK,MAAM,CAACa,YAAY,EAAErC,cAAc;EAAE,GAChDnB,0BAA0B,CAAC;IAC1BsD,OAAO,EAAEjE,OAAO,EAAE,IAAIiB,sBAAsB;IAC5CoB,OAAO,EAAEA,CAAA,KAAMf,2BAA2B;EAC5C,CAAC,CAAC,CAEL,CACI;AAEX,CAAC;AAED,MAAMO,4BAA4B,GAAGuC,KAAA,IAmBJ;EAAA,IAnB2D;IAC1FnE,OAAO;IACPQ,aAAa;IACbH,qBAAqB;IACrBJ,aAAa;IACbC,cAAc;IACdC,sBAAsB;IACtBC,eAAe;IACfE;EAWF,CAAC,GAAA6D,KAAA;EACC,MAAMC,QAAQ,GAAG/E,cAAc,EAAE;EACjC,MAAM;IAAEkC;EAAO,CAAC,GAAG/C,aAAa,EAAE;EAClC,MAAM;IAAE8C;EAAQ,CAAC,GAAGnC,eAAe,EAAE;EACrC,MAAMkF,KAAK,GAAG9F,QAAQ,EAAE;EACxB,MAAM;IAAE+F;EAAU,CAAC,GAAGhG,cAAc,EAAE;EACtC,MAAM;IAAEiG;EAAM,CAAC,GAAGlG,QAAQ,EAAE;EAC5B,MAAM;IAAEmG,gBAAgB;IAAEC;EAAY,CAAC,GAAGrF,kBAAkB,EAAE;EAC9D,MAAM;IAAEsF;EAAU,CAAC,GAAGpF,eAAe,EAAE;EAEvC,MAAMqF,eAAe,GAAIC,KAAY,IAAK;IACxCP,KAAK,CAAC7C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACC,gBAAgB,EAAE,OAAO,CAAC;IACnDrG,MAAM,CAACmG,KAAK,CAACtD,OAAO,CAACuD,KAAK,CAACC,gBAAgB,EAAEF,KAAK,CAAC;EACrD,CAAC;EAED,MAAMG,eAAe,GAAIH,KAAY,IAAK;IACxCP,KAAK,CAAC7C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACG,gBAAgB,EAAE,OAAO,CAAC;IACnDvG,MAAM,CAACmG,KAAK,CAACtD,OAAO,CAACuD,KAAK,CAACG,gBAAgB,EAAEJ,KAAK,CAAC;EACrD,CAAC;EAED,MAAMK,UAAU,GAAI1C,OAA0B,IAAK;IACjD,IAAIA,OAAO,CAAC2C,aAAa,EAAE,EAAE;MAC3BV,gBAAgB,CAACW,SAAS,CAAC5C,OAAO,CAACA,OAAO,IAAI,EAAE,CAAC;MACjD8B,KAAK,CAAC7C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACO,OAAO,EAAE,SAAS,CAAC;IAC9C;EACF,CAAC;EAED,MAAMC,cAAc,GAAI9C,OAA0B,IAAK;IACrD,IAAIA,OAAO,CAAC+C,aAAa,EAAE,EAAE;MAC3B,IAAIrG,UAAU,CAACsD,OAAO,CAACgD,IAAI,CAAC,GAAG,CAAC,EAAE;QAChClB,KAAK,CAAC7C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACW,cAAc,EAAE,SAAS,CAAC;MACrD;MAEAf,WAAW,CACRgB,IAAI,CAAC;QAAEC,OAAO,EAAEnD,OAAO,CAACoD,GAAG;QAAEC,QAAQ,EAAErD,OAAO,CAACsD,IAAI;QAAEC,QAAQ,EAAEvD,OAAO,CAACwD;MAAK,CAAC,CAAC,CAC9EC,IAAI,CAAEC,QAAQ,IAAK;QAClB5B,KAAK,CAAC7C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACqB,WAAW,EAAE,SAAS,CAAC;QAChDzH,MAAM,CAAC0H,GAAG,CAAC,eAAe,EAAEF,QAAQ,CAAC;MACvC,CAAC,CAAC,CACDG,KAAK,CAAEC,GAAG,IAAK;QACdhC,KAAK,CAAC7C,IAAI,CAACF,OAAO,CAACuD,KAAK,CAACyB,cAAc,EAAE,OAAO,CAAC;QACjD7H,MAAM,CAAC0H,GAAG,CAAC,mBAAmB,EAAEE,GAAG,CAAC;MACtC,CAAC,CAAC;IACN;EACF,CAAC;EAED,MAAME,UAAU,GAAIhE,OAA0B,IAAK;IACjD,IAAIA,OAAO,CAAC+C,aAAa,EAAE,EAAE;MAC3B,MAAMQ,QAAQ,GAAGlH,WAAW,CAAC2D,OAAO,CAACwD,IAAI,IAAIpH,gBAAgB,CAAC4D,OAAO,CAACsD,IAAI,CAAC,CAAC;MAC5E,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAACW,QAAQ,CAACV,QAAQ,CAAC,EAAE;QAAA,IAAAW,qBAAA;QAClDnG,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAGiC,OAAO,EAAE,MAAMnC,eAAe,CAACmC,OAAO,CAAC,EAAE7D,8BAA8B,CAAC6D,OAAO,CAAC,CAAC;QACvG,CAAAkE,qBAAA,GAAArC,QAAQ,CAACsC,aAAa,cAAAD,qBAAA,uBAAtBA,qBAAA,CAAAE,IAAA,CAAAvC,QAAQ,EAAiB7B,OAAO,CAACoD,GAAG,CAAC;MACvC,CAAC,MAAM;QACL,MAAMiB,QAAQ,GAAGxC,QAAQ,CAACsC,aAAa,IAAIlH,QAAQ,CAACqH,OAAO;QAC3DD,QAAQ,CAACrE,OAAO,CAACoD,GAAG,CAAC;MACvB;IACF;EACF,CAAC;EAED,MAAMmB,yBAAyB,GAAIvE,OAA0B,IAAK;IAChE+B,SAAS,CAAC;MACRyC,UAAU,EAAE,CACV;QACEC,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAACyD,4BAA4B;QAClD7E,OAAO,EAAEA,CAAA,KAAM/B,qBAAqB,CAACkC,OAAO,CAAC,CAAC6D,KAAK,CAACzB,eAAe;MACrE,CAAC,EACD;QACEqC,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAAC0D,6BAA6B;QACnDC,UAAU,EAAE5F,MAAM,CAAC6F,EAAE,CAACC,MAAM,CAACC,OAAO,CAACC,IAAI,CAACC,WAAW;QACrDpF,OAAO,EAAEA,CAAA,KAAMqF,qBAAqB,CAAClF,OAAO;MAC9C,CAAC;IAEL,CAAC,CAAC;EACJ,CAAC;EAED,MAAMkF,qBAAqB,GAAIlF,OAA0B,IAAK;IAC5DgC,KAAK,CAAC;MACJyC,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAACkE,oCAAoC;MAC1DC,OAAO,EAAE,CACP;QAAEpE,IAAI,EAAEjC,OAAO,CAACkC,MAAM,CAACoE;MAAsC,CAAC,EAC9D;QACErE,IAAI,EAAEjC,OAAO,CAACkC,MAAM,CAACqE,iCAAiC;QACtD7E,KAAK,EAAE,aAAa;QACpBZ,OAAO,EAAEA,CAAA,KAAM;UACbhC,eAAe,CAACmC,OAAO,CAAC,CAAC6D,KAAK,CAACrB,eAAe,CAAC;QACjD;MACF,CAAC;IAEL,CAAC,CAAC;EACJ,CAAC;EAED,OAAO+C,KAAA,IAAiB;IAAA,IAAhB;MAAEvF;IAAQ,CAAC,GAAAuF,KAAA;IACjB,IAAI,CAACvF,OAAO,CAAC2C,aAAa,EAAE,IAAI,CAAC3C,OAAO,CAAC+C,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IAEnE,MAAMyB,UAAyC,GAAG,EAAE;IACpD,MAAMgB,IAAI,GAAG;MACXC,IAAI,EAAGzF,OAA0B,KAAM;QACrC0F,IAAI,EAAE,MAAe;QACrBjB,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAAC0E,oBAAoB;QAC1C9F,OAAO,EAAEA,CAAA,KAAM6C,UAAU,CAAC1C,OAAO;MACnC,CAAC,CAAC;MACF4F,IAAI,EAAG5F,OAA0B,KAAM;QACrC0F,IAAI,EAAE,MAAe;QACrBjB,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAAC4E,oBAAoB;QAC1ChG,OAAO,EAAEA,CAAA,KAAMnC,aAAa,CAACsC,OAAO;MACtC,CAAC,CAAC;MACF8F,MAAM,EAAG9F,OAA0B,KAAM;QACvC+F,QAAQ,EAAE/F,OAAO,CAACgG,UAAU,GAAGhG,OAAO,CAACgG,UAAU,CAACC,UAAU,GAAG,CAAC,GAAGC,SAAS;QAC5ER,IAAI,EAAE,QAAiB;QACvBjB,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAACkF,sBAAsB;QAC5CtG,OAAO,EAAEA,CAAA,KAAMqF,qBAAqB,CAAClF,OAAO;MAC9C,CAAC,CAAC;MACFoG,KAAK,EAAGpG,OAA0B,KAAM;QACtC+F,QAAQ,EAAEM,OAAO,CAACrG,OAAO,CAACsG,eAAe,CAAC;QAC1CZ,IAAI,EAAE,OAAgB;QACtBjB,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAACsF,qBAAqB;QAC3C1G,OAAO,EAAEA,CAAA,KAAMlC,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGqC,OAAO;MACzC,CAAC,CAAC;MACFwG,aAAa,EAAGxG,OAA0B,KAAM;QAC9C+F,QAAQ,EAAEM,OAAO,CAACrG,OAAO,CAACsG,eAAe,CAAC;QAC1CZ,IAAI,EAAE,QAAiB;QACvBjB,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAACwF,sBAAsB;QAC5C5G,OAAO,EAAEA,CAAA,KAAMjC,sBAAsB,aAAtBA,sBAAsB,uBAAtBA,sBAAsB,CAAGoC,OAAO;MACjD,CAAC,CAAC;MACF0G,QAAQ,EAAG1G,OAA0B,KAAM;QACzC0F,IAAI,EAAE,UAAmB;QACzBjB,KAAK,EAAE1F,OAAO,CAACkC,MAAM,CAAC0F,oBAAoB;QAC1C9G,OAAO,EAAEA,CAAA,KAAMiD,cAAc,CAAC9C,OAAO;MACvC,CAAC;IACH,CAAC;IAED,IAAIA,OAAO,CAAC2C,aAAa,EAAE,EAAE;MAC3B6B,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACC,IAAI,CAACzF,OAAO,CAAC,CAAC;MACnC,IAAI,CAACvC,OAAO,CAACoJ,WAAW,EAAE;QACxB,IAAIvK,WAAW,CAAC0D,OAAO,EAAE/B,aAAa,CAAC,IAAI+B,OAAO,CAAC8G,aAAa,KAAK,WAAW,EAAE;UAChFtC,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACI,IAAI,CAAC5F,OAAO,CAAC,CAAC;UACnCwE,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACM,MAAM,CAAC9F,OAAO,CAAC,CAAC;QACvC;QACA,IAAIvC,OAAO,CAACsJ,cAAc,EAAE,EAAE;UAC5B,IAAI5E,SAAS,CAAC6E,KAAK,CAACC,YAAY,CAACxJ,OAAO,CAACyJ,SAAS,KAAK,QAAQ,IAAItJ,sBAAsB,KAAKsI,SAAS,EAAE;YACvG1B,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACgB,aAAa,CAACxG,OAAO,CAAC,CAAC;UAC9C,CAAC,MAAM,IAAImC,SAAS,CAAC6E,KAAK,CAACC,YAAY,CAACxJ,OAAO,CAACyJ,SAAS,KAAK,aAAa,EAAE;YAC3E1C,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACY,KAAK,CAACpG,OAAO,CAAC,CAAC;UACtC;QACF;MACF;IACF;IAEA,IAAIA,OAAO,CAAC+C,aAAa,EAAE,EAAE;MAC3B,IAAI,CAACxG,cAAc,CAACyD,OAAO,CAAC,EAAE;QAC5BwE,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACkB,QAAQ,CAAC1G,OAAO,CAAC,CAAC;MACzC;MACA,IAAI,CAACvC,OAAO,CAACoJ,WAAW,EAAE;QACxB,IAAIvK,WAAW,CAAC0D,OAAO,EAAE/B,aAAa,CAAC,IAAI+B,OAAO,CAAC8G,aAAa,KAAK,WAAW,EAAE;UAChFtC,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACM,MAAM,CAAC9F,OAAO,CAAC,CAAC;QACvC;QACA,IAAIvC,OAAO,CAACsJ,cAAc,EAAE,EAAE;UAC5B,IAAI5E,SAAS,CAAC6E,KAAK,CAACC,YAAY,CAACxJ,OAAO,CAACyJ,SAAS,KAAK,QAAQ,IAAItJ,sBAAsB,KAAKsI,SAAS,EAAE;YACvG1B,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACgB,aAAa,CAACxG,OAAO,CAAC,CAAC;UAC9C,CAAC,MAAM,IAAImC,SAAS,CAAC6E,KAAK,CAACC,YAAY,CAACxJ,OAAO,CAACyJ,SAAS,KAAK,aAAa,EAAE;YAC3E1C,UAAU,CAACoC,IAAI,CAACpB,IAAI,CAACY,KAAK,CAACpG,OAAO,CAAC,CAAC;UACtC;QACF;MACF;IACF;IAEA,MAAMmH,OAAO,GAAGhF,SAAS,CAACiF,gBAAgB,CAACH,YAAY,CAACxJ,OAAO;IAC/D,MAAMsC,eAAgC,GAAG;MACvCyE,UAAU;MACV6C,eAAe,EAAE5K,oBAAoB,CACnCgB,OAAO,EACPA,OAAO,CAACsJ,cAAc,EAAE,KAAKtJ,OAAO,CAAC6J,OAAO,GAAGH,OAAO,CAACI,yBAAyB,GAAGJ,OAAO,CAACK,eAAe,CAAC,CAC5G,GACGC,KAAA;QAAA,IAAC;UAAEC;QAAQ,CAAC,GAAAD,KAAA;QAAA,oBAAKhM,KAAA,CAAA+E,aAAA,CAACrD,cAAc,CAACwK,WAAW;UAAC3H,OAAO,EAAEA,OAAQ;UAACvC,OAAO,EAAEA,OAAQ;UAACiK,OAAO,EAAEA;QAAQ,EAAG;MAAA,IACrGxB;IACN,CAAC;IAED,QAAQ,IAAI;MACV,KAAKlG,OAAO,CAAC8G,aAAa,KAAK,SAAS;QAAE;UACxC,OAAO;YACLjH,OAAO,EAAEqG,SAAS;YAClBpG,WAAW,EAAEoG,SAAS;YACtBnG,eAAe,EAAEmG;UACnB,CAAC;QACH;MAEA,KAAKlG,OAAO,CAAC8G,aAAa,KAAK,QAAQ;QAAE;UACvC,OAAO;YACLjH,OAAO,EAAEA,CAAA,KAAM/B,qBAAqB,CAACkC,OAAO,CAAC,CAAC6D,KAAK,CAACzB,eAAe,CAAC;YACpEtC,WAAW,EAAEA,CAAA,KAAMyE,yBAAyB,CAACvE,OAAO,CAAC;YACrDD;UACF,CAAC;QACH;MAEA,KAAKC,OAAO,CAAC+C,aAAa,EAAE;QAAE;UAC5B,OAAO;YACLlD,OAAO,EAAEA,CAAA,KAAMmE,UAAU,CAAChE,OAAO,CAAC;YAClCF,WAAW,EAAEA,CAAA,KAAMiC,SAAS,CAAChC,eAAe,CAAC;YAC7CA;UACF,CAAC;QACH;MAEA;QAAS;UACP,OAAO;YACLF,OAAO,EAAEqG,SAAS;YAClBpG,WAAW,EAAEA,CAAA,KAAMiC,SAAS,CAAChC,eAAe,CAAC;YAC7CA;UACF,CAAC;QACH;IAAC;EAEL,CAAC;AACH,CAAC;AAED,MAAMe,MAAM,GAAGjF,gBAAgB,CAAC;EAC9BkF,YAAY,EAAE;IACZ6G,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXC,GAAG,EAAE,CAAC;IACN5I,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT,CAAC;EACDoC,iBAAiB,EAAE;IACjBwG,aAAa,EAAE;EACjB,CAAC;EACDvG,YAAY,EAAE;IACZoG,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXG,MAAM,EAAE,EAAE;IACVC,SAAS,EAAE;EACb,CAAC;EACDtG,YAAY,EAAE;IACZiG,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,GAAG;IACXG,MAAM,EAAE,EAAE;IACV7I,KAAK,EAAE;EACT;AACF,CAAC,CAAC;;AAEF;AACA,4BAAe1D,KAAK,CAACyM,UAAU,CAAC9K,kBAAkB,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
|
5
5
|
import { ChannelFrozenBanner, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
6
|
import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, isVoiceMessage, messageKeyExtractor, shouldRenderReaction, toMegabyte, useFreshCallback } from '@sendbird/uikit-utils';
|
|
7
7
|
import { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
|
|
8
|
+
import SBUUtils from '../../libs/SBUUtils';
|
|
8
9
|
import { ReactionAddons } from '../ReactionAddons';
|
|
9
10
|
import ThreadChatFlatList from '../ThreadChatFlatList';
|
|
10
11
|
const ChannelThreadMessageList = (_ref, ref) => {
|
|
@@ -181,9 +182,13 @@ const useCreateMessagePressActions = _ref3 => {
|
|
|
181
182
|
if (message.isFileMessage()) {
|
|
182
183
|
const fileType = getFileType(message.type || getFileExtension(message.name));
|
|
183
184
|
if (['image', 'video', 'audio'].includes(fileType)) {
|
|
185
|
+
var _handlers$onOpenFileU;
|
|
184
186
|
onPressMediaMessage === null || onPressMediaMessage === void 0 ? void 0 : onPressMediaMessage(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
|
|
187
|
+
(_handlers$onOpenFileU = handlers.onOpenFileURL) === null || _handlers$onOpenFileU === void 0 ? void 0 : _handlers$onOpenFileU.call(handlers, message.url);
|
|
188
|
+
} else {
|
|
189
|
+
const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;
|
|
190
|
+
openFile(message.url);
|
|
185
191
|
}
|
|
186
|
-
handlers.onOpenFileURL(message.url);
|
|
187
192
|
}
|
|
188
193
|
};
|
|
189
194
|
const openSheetForFailedMessage = message => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","ReactionAddons","ThreadChatFlatList","ChannelThreadMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","onOpenFileURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","configs","uikitWithAppInfo","groupChannel","HeaderComponent","isGroupChannel","isSuper","enableReactionsSupergroup","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\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} 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 { ReactionAddons } from '../ReactionAddons';\nimport ThreadChatFlatList from '../ThreadChatFlatList';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelThreadMessageListProps<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 onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<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 onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelThreadMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelThreadMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: 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 flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelThreadMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelThreadMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\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 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 <ThreadChatFlatList\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 onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelThreadMessageListProps<T>,\n 'channel' | 'currentUserId' | 'onEditMessage' | 'onDeleteMessage' | 'onResendFailedMessage' | '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 }\n handlers.onOpenFileURL(message.url);\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 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 }\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 }\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 left: 8,\n right: 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 right: 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(ChannelThreadMessageList) as typeof ChannelThreadMessageList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","SBUUtils","ReactionAddons","ThreadChatFlatList","ChannelThreadMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","_handlers$onOpenFileU","onOpenFileURL","call","openFile","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","configs","uikitWithAppInfo","groupChannel","HeaderComponent","isGroupChannel","isSuper","enableReactionsSupergroup","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\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} 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 { ReactionAddons } from '../ReactionAddons';\nimport ThreadChatFlatList from '../ThreadChatFlatList';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelThreadMessageListProps<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 onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<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 onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelThreadMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelThreadMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: 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 flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelThreadMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelThreadMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\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 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 <ThreadChatFlatList\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 onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelThreadMessageListProps<T>,\n 'channel' | 'currentUserId' | 'onEditMessage' | 'onDeleteMessage' | 'onResendFailedMessage' | '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 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 }\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 }\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 left: 8,\n right: 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 right: 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(ChannelThreadMessageList) as typeof ChannelThreadMessageList;\n"],"mappings":"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"}
|
package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageDateSeparator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isSameDay","React","View","Text","createStyleSheet","useUIKitTheme","useLocalization","GroupChannelMessageDateSeparator","_ref","message","prevMessage","STRINGS","colors","sameDay","createdAt","createElement","style","styles","container","view","backgroundColor","ui","dateSeparator","default","none","background","caption1","color","text","GROUP_CHANNEL","LIST_DATE_SEPARATOR","Date","alignItems","marginVertical","borderRadius","paddingVertical","paddingHorizontal"],"sources":["GroupChannelMessageDateSeparator.tsx"],"sourcesContent":["import isSameDay from 'date-fns
|
|
1
|
+
{"version":3,"names":["isSameDay","React","View","Text","createStyleSheet","useUIKitTheme","useLocalization","GroupChannelMessageDateSeparator","_ref","message","prevMessage","STRINGS","colors","sameDay","createdAt","createElement","style","styles","container","view","backgroundColor","ui","dateSeparator","default","none","background","caption1","color","text","GROUP_CHANNEL","LIST_DATE_SEPARATOR","Date","alignItems","marginVertical","borderRadius","paddingVertical","paddingHorizontal"],"sources":["GroupChannelMessageDateSeparator.tsx"],"sourcesContent":["import { isSameDay } from 'date-fns';\nimport React from 'react';\nimport { View } from 'react-native';\n\nimport { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\n\nconst GroupChannelMessageDateSeparator = ({\n message,\n prevMessage,\n}: {\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n}) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n\n const sameDay = isSameDay(message.createdAt, prevMessage?.createdAt ?? 0);\n if (sameDay) return null;\n\n return (\n <View style={styles.container}>\n <View style={[styles.view, { backgroundColor: colors.ui.dateSeparator.default.none.background }]}>\n <Text caption1 color={colors.ui.dateSeparator.default.none.text}>\n {STRINGS.GROUP_CHANNEL.LIST_DATE_SEPARATOR(new Date(message.createdAt))}\n </Text>\n </View>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n alignItems: 'center',\n marginVertical: 16,\n },\n view: {\n borderRadius: 10,\n paddingVertical: 4,\n paddingHorizontal: 10,\n },\n});\n\nexport default GroupChannelMessageDateSeparator;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,UAAU;AACpC,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AAEnC,SAASC,IAAI,EAAEC,gBAAgB,EAAEC,aAAa,QAAQ,yCAAyC;AAG/F,SAASC,eAAe,QAAQ,wBAAwB;AAExD,MAAMC,gCAAgC,GAAGC,IAAA,IAMnC;EAAA,IANoC;IACxCC,OAAO;IACPC;EAIF,CAAC,GAAAF,IAAA;EACC,MAAM;IAAEG;EAAQ,CAAC,GAAGL,eAAe,EAAE;EACrC,MAAM;IAAEM;EAAO,CAAC,GAAGP,aAAa,EAAE;EAElC,MAAMQ,OAAO,GAAGb,SAAS,CAACS,OAAO,CAACK,SAAS,EAAE,CAAAJ,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEI,SAAS,KAAI,CAAC,CAAC;EACzE,IAAID,OAAO,EAAE,OAAO,IAAI;EAExB,oBACEZ,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACc,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC5BjB,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACc,KAAK,EAAE,CAACC,MAAM,CAACE,IAAI,EAAE;MAAEC,eAAe,EAAER,MAAM,CAACS,EAAE,CAACC,aAAa,CAACC,OAAO,CAACC,IAAI,CAACC;IAAW,CAAC;EAAE,gBAC/FxB,KAAA,CAAAc,aAAA,CAACZ,IAAI;IAACuB,QAAQ;IAACC,KAAK,EAAEf,MAAM,CAACS,EAAE,CAACC,aAAa,CAACC,OAAO,CAACC,IAAI,CAACI;EAAK,GAC7DjB,OAAO,CAACkB,aAAa,CAACC,mBAAmB,CAAC,IAAIC,IAAI,CAACtB,OAAO,CAACK,SAAS,CAAC,CAAC,CAClE,CACF,CACF;AAEX,CAAC;AAED,MAAMG,MAAM,GAAGb,gBAAgB,CAAC;EAC9Bc,SAAS,EAAE;IACTc,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDd,IAAI,EAAE;IACJe,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE;EACrB;AACF,CAAC,CAAC;AAEF,eAAe7B,gCAAgC"}
|
|
@@ -278,7 +278,7 @@ const GroupChannelMessageRenderer = _ref => {
|
|
|
278
278
|
onUnsubscribeStatus: voiceMessageStatusManager.unsubscribe,
|
|
279
279
|
onUnmount: () => {
|
|
280
280
|
if (isVoiceMessage(message) && playerService.uri === message.url) {
|
|
281
|
-
resetPlayer();
|
|
281
|
+
resetPlayer().catch(_ => {});
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
}, messageProps));
|