@sendbird/uikit-react-native 2.4.0 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/ChannelInput/SendInput.js +3 -3
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +19 -1
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/commonjs/platform/createFileService.expo.js +6 -14
- package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
- package/lib/commonjs/platform/createFileService.native.js +65 -37
- package/lib/commonjs/platform/createFileService.native.js.map +1 -1
- package/lib/commonjs/utils/normalizeFile.js +41 -0
- package/lib/commonjs/utils/normalizeFile.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/SendInput.js +3 -3
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/containers/SendbirdUIKitContainer.js +20 -2
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/module/platform/createFileService.expo.js +7 -15
- package/lib/module/platform/createFileService.expo.js.map +1 -1
- package/lib/module/platform/createFileService.native.js +64 -36
- package/lib/module/platform/createFileService.native.js.map +1 -1
- package/lib/module/utils/normalizeFile.js +33 -0
- package/lib/module/utils/normalizeFile.js.map +1 -0
- 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/utils/normalizeFile.d.ts +4 -0
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +5 -5
- package/src/components/ChannelInput/SendInput.tsx +3 -3
- package/src/containers/SendbirdUIKitContainer.tsx +20 -1
- package/src/platform/createFileService.expo.ts +5 -10
- package/src/platform/createFileService.native.ts +53 -28
- package/src/utils/normalizeFile.ts +32 -0
- package/src/version.ts +1 -1
- package/lib/commonjs/utils/fileTypeGuard.js +0 -26
- package/lib/commonjs/utils/fileTypeGuard.js.map +0 -1
- package/lib/module/utils/fileTypeGuard.js +0 -18
- package/lib/module/utils/fileTypeGuard.js.map +0 -1
- package/lib/typescript/src/utils/fileTypeGuard.d.ts +0 -4
- package/src/utils/fileTypeGuard.ts +0 -10
|
@@ -125,7 +125,7 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
|
|
|
125
125
|
|
|
126
126
|
if (mediaFile) {
|
|
127
127
|
// Image compression
|
|
128
|
-
if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.
|
|
128
|
+
if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.type, features.imageCompressionEnabled)) {
|
|
129
129
|
await _SBUUtils.default.safeRun(async () => {
|
|
130
130
|
const compressed = await mediaService.compressImage({
|
|
131
131
|
uri: mediaFile.uri,
|
|
@@ -170,7 +170,7 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
|
|
|
170
170
|
if (mediaFiles && mediaFiles[0]) {
|
|
171
171
|
const mediaFile = mediaFiles[0]; // Image compression
|
|
172
172
|
|
|
173
|
-
if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.
|
|
173
|
+
if ((0, _uikitUtils.isImage)(mediaFile.uri, mediaFile.type) && (0, _uikitUtils.shouldCompressImage)(mediaFile.type, features.imageCompressionEnabled)) {
|
|
174
174
|
await _SBUUtils.default.safeRun(async () => {
|
|
175
175
|
const compressed = await mediaService.compressImage({
|
|
176
176
|
uri: mediaFile.uri,
|
|
@@ -199,7 +199,7 @@ const SendInput = /*#__PURE__*/(0, _react.forwardRef)(function SendInput(_ref, r
|
|
|
199
199
|
|
|
200
200
|
if (documentFile) {
|
|
201
201
|
// Image compression
|
|
202
|
-
if ((0, _uikitUtils.isImage)(documentFile.uri, documentFile.type) && (0, _uikitUtils.shouldCompressImage)(documentFile.
|
|
202
|
+
if ((0, _uikitUtils.isImage)(documentFile.uri, documentFile.type) && (0, _uikitUtils.shouldCompressImage)(documentFile.type, features.imageCompressionEnabled)) {
|
|
203
203
|
await _SBUUtils.default.safeRun(async () => {
|
|
204
204
|
const compressed = await mediaService.compressImage({
|
|
205
205
|
uri: documentFile.uri,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SendInput","forwardRef","ref","onPressSendUserMessage","onPressSendFileMessage","onSendUserMessage","onSendFileMessage","text","onChangeText","onSelectionChange","mentionedUsers","inputDisabled","inputFrozen","inputMuted","mentionManager","imageCompressionConfig","features","useSendbirdChat","STRINGS","useLocalization","fileService","mediaService","usePlatformService","colors","useUIKitTheme","openSheet","useBottomSheet","alert","useAlert","toast","useToast","sendUserMessage","mentionType","MentionType","USERS","mentionedUserIds","map","it","user","userId","mentionedMessageTemplate","textToMentionedMessageTemplate","message","catch","onFailureToSend","type","userIds","messageTemplate","sendFileMessage","file","show","TOAST","SEND_MSG_ERROR","onPressAttachment","sheetItems","title","LABELS","CHANNEL_INPUT_ATTACHMENT_CAMERA","icon","onPress","mediaFile","openCamera","mediaType","onOpenFailure","error","code","SBUError","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","ALERT_PERMISSIONS_MESSAGE","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","ALERT_PERMISSIONS_OK","SBUUtils","openSettings","OPEN_CAMERA_ERROR","isImage","uri","shouldCompressImage","imageCompressionEnabled","safeRun","compressed","compressImage","maxWidth","width","maxHeight","height","compressionRate","size","CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY","mediaFiles","openMediaLibrary","selectionLimit","PERMISSION_DEVICE_STORAGE","OPEN_PHOTO_LIBRARY_ERROR","CHANNEL_INPUT_ATTACHMENT_FILES","documentFile","openDocument","OPEN_FILES_ERROR","getPlaceholder","CHANNEL_INPUT_PLACEHOLDER_ACTIVE","CHANNEL_INPUT_PLACEHOLDER_DISABLED","CHANNEL_INPUT_PLACEHOLDER_MUTED","styles","sendInputContainer","ui","input","default","disabled","highlight","active","iconAttach","textToMentionedComponents","Boolean","trim","iconSend","createStyleSheet","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","Platform","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport {\n NativeSyntheticEvent,\n Platform,\n TextInput as RNTextInput,\n TextInputSelectionChangeEventData,\n TouchableOpacity,\n View,\n} from 'react-native';\n\nimport { MentionType } from '@sendbird/chat/message';\nimport {\n Icon,\n TextInput,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { isImage, shouldCompressImage } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUError from '../../libs/SBUError';\nimport SBUUtils from '../../libs/SBUUtils';\nimport type { FileType } from '../../platform/types';\nimport type { MentionedUser } from '../../types';\nimport type { ChannelInputProps } from './index';\n\ninterface SendInputProps extends ChannelInputProps {\n text: string;\n onChangeText: (val: string) => void;\n onSelectionChange: (e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => void;\n mentionedUsers: MentionedUser[];\n}\n\nconst SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(\n {\n onPressSendUserMessage,\n onPressSendFileMessage,\n onSendUserMessage,\n onSendFileMessage,\n text,\n onChangeText,\n onSelectionChange,\n mentionedUsers,\n inputDisabled,\n inputFrozen,\n inputMuted,\n },\n ref,\n) {\n const { mentionManager, imageCompressionConfig, features } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { fileService, mediaService } = usePlatformService();\n const { colors } = useUIKitTheme();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const toast = useToast();\n\n const sendUserMessage = () => {\n const mentionType = MentionType.USERS;\n const mentionedUserIds = mentionedUsers.map((it) => it.user.userId);\n const mentionedMessageTemplate = mentionManager.textToMentionedMessageTemplate(text, mentionedUsers);\n\n if (onPressSendUserMessage) {\n onPressSendUserMessage({\n message: text,\n mentionType,\n mentionedUserIds,\n mentionedMessageTemplate,\n }).catch(onFailureToSend);\n } else if (onSendUserMessage) {\n onSendUserMessage(text, {\n type: mentionType,\n userIds: mentionedUserIds,\n messageTemplate: mentionedMessageTemplate,\n }).catch(onFailureToSend);\n }\n\n onChangeText('');\n };\n\n const sendFileMessage = (file: FileType) => {\n if (onPressSendFileMessage) {\n onPressSendFileMessage({ file }).catch(onFailureToSend);\n } else if (onSendFileMessage) {\n onSendFileMessage(file).catch(onFailureToSend);\n }\n };\n\n const onFailureToSend = () => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error');\n\n const onPressAttachment = () => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA,\n icon: 'camera',\n onPress: async () => {\n const mediaFile = await fileService.openCamera({\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (mediaFile) {\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.uri, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(mediaFile);\n }\n },\n },\n {\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY,\n icon: 'photo',\n onPress: async () => {\n const mediaFiles = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n\n if (mediaFiles && mediaFiles[0]) {\n const mediaFile = mediaFiles[0];\n\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.uri, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(mediaFile);\n }\n },\n },\n {\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_FILES,\n icon: 'document',\n onPress: async () => {\n const documentFile = await fileService.openDocument({\n onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (documentFile) {\n // Image compression\n if (\n isImage(documentFile.uri, documentFile.type) &&\n shouldCompressImage(documentFile.uri, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: documentFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n documentFile.uri = compressed.uri;\n documentFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(documentFile);\n }\n },\n },\n ],\n });\n };\n\n const getPlaceholder = () => {\n if (!inputDisabled) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_ACTIVE;\n if (inputFrozen) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_DISABLED;\n if (inputMuted) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_MUTED;\n\n return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_DISABLED;\n };\n\n return (\n <View style={styles.sendInputContainer}>\n <TouchableOpacity onPress={onPressAttachment} disabled={inputDisabled}>\n <Icon\n color={inputDisabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'add'}\n size={24}\n containerStyle={styles.iconAttach}\n />\n </TouchableOpacity>\n <TextInput\n ref={ref}\n multiline\n disableFullscreenUI\n onSelectionChange={onSelectionChange}\n editable={!inputDisabled}\n onChangeText={onChangeText}\n style={styles.input}\n placeholder={getPlaceholder()}\n >\n {mentionManager.textToMentionedComponents(text, mentionedUsers)}\n </TextInput>\n\n {Boolean(text.trim()) && (\n <TouchableOpacity onPress={sendUserMessage} disabled={inputDisabled}>\n <Icon\n color={\n inputDisabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight\n }\n icon={'send'}\n size={24}\n containerStyle={styles.iconSend}\n />\n </TouchableOpacity>\n )}\n </View>\n );\n});\n\nconst styles = createStyleSheet({\n sendInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 12,\n alignItems: 'center',\n flexDirection: 'row',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n iconAttach: {\n marginRight: 8,\n padding: 4,\n },\n iconSend: {\n marginLeft: 4,\n padding: 4,\n },\n});\n\nexport default SendInput;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["SendInput","forwardRef","ref","onPressSendUserMessage","onPressSendFileMessage","onSendUserMessage","onSendFileMessage","text","onChangeText","onSelectionChange","mentionedUsers","inputDisabled","inputFrozen","inputMuted","mentionManager","imageCompressionConfig","features","useSendbirdChat","STRINGS","useLocalization","fileService","mediaService","usePlatformService","colors","useUIKitTheme","openSheet","useBottomSheet","alert","useAlert","toast","useToast","sendUserMessage","mentionType","MentionType","USERS","mentionedUserIds","map","it","user","userId","mentionedMessageTemplate","textToMentionedMessageTemplate","message","catch","onFailureToSend","type","userIds","messageTemplate","sendFileMessage","file","show","TOAST","SEND_MSG_ERROR","onPressAttachment","sheetItems","title","LABELS","CHANNEL_INPUT_ATTACHMENT_CAMERA","icon","onPress","mediaFile","openCamera","mediaType","onOpenFailure","error","code","SBUError","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","ALERT_PERMISSIONS_MESSAGE","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","ALERT_PERMISSIONS_OK","SBUUtils","openSettings","OPEN_CAMERA_ERROR","isImage","uri","shouldCompressImage","imageCompressionEnabled","safeRun","compressed","compressImage","maxWidth","width","maxHeight","height","compressionRate","size","CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY","mediaFiles","openMediaLibrary","selectionLimit","PERMISSION_DEVICE_STORAGE","OPEN_PHOTO_LIBRARY_ERROR","CHANNEL_INPUT_ATTACHMENT_FILES","documentFile","openDocument","OPEN_FILES_ERROR","getPlaceholder","CHANNEL_INPUT_PLACEHOLDER_ACTIVE","CHANNEL_INPUT_PLACEHOLDER_DISABLED","CHANNEL_INPUT_PLACEHOLDER_MUTED","styles","sendInputContainer","ui","input","default","disabled","highlight","active","iconAttach","textToMentionedComponents","Boolean","trim","iconSend","createStyleSheet","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","Platform","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport {\n NativeSyntheticEvent,\n Platform,\n TextInput as RNTextInput,\n TextInputSelectionChangeEventData,\n TouchableOpacity,\n View,\n} from 'react-native';\n\nimport { MentionType } from '@sendbird/chat/message';\nimport {\n Icon,\n TextInput,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { isImage, shouldCompressImage } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUError from '../../libs/SBUError';\nimport SBUUtils from '../../libs/SBUUtils';\nimport type { FileType } from '../../platform/types';\nimport type { MentionedUser } from '../../types';\nimport type { ChannelInputProps } from './index';\n\ninterface SendInputProps extends ChannelInputProps {\n text: string;\n onChangeText: (val: string) => void;\n onSelectionChange: (e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => void;\n mentionedUsers: MentionedUser[];\n}\n\nconst SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(\n {\n onPressSendUserMessage,\n onPressSendFileMessage,\n onSendUserMessage,\n onSendFileMessage,\n text,\n onChangeText,\n onSelectionChange,\n mentionedUsers,\n inputDisabled,\n inputFrozen,\n inputMuted,\n },\n ref,\n) {\n const { mentionManager, imageCompressionConfig, features } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { fileService, mediaService } = usePlatformService();\n const { colors } = useUIKitTheme();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const toast = useToast();\n\n const sendUserMessage = () => {\n const mentionType = MentionType.USERS;\n const mentionedUserIds = mentionedUsers.map((it) => it.user.userId);\n const mentionedMessageTemplate = mentionManager.textToMentionedMessageTemplate(text, mentionedUsers);\n\n if (onPressSendUserMessage) {\n onPressSendUserMessage({\n message: text,\n mentionType,\n mentionedUserIds,\n mentionedMessageTemplate,\n }).catch(onFailureToSend);\n } else if (onSendUserMessage) {\n onSendUserMessage(text, {\n type: mentionType,\n userIds: mentionedUserIds,\n messageTemplate: mentionedMessageTemplate,\n }).catch(onFailureToSend);\n }\n\n onChangeText('');\n };\n\n const sendFileMessage = (file: FileType) => {\n if (onPressSendFileMessage) {\n onPressSendFileMessage({ file }).catch(onFailureToSend);\n } else if (onSendFileMessage) {\n onSendFileMessage(file).catch(onFailureToSend);\n }\n };\n\n const onFailureToSend = () => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error');\n\n const onPressAttachment = () => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_CAMERA,\n icon: 'camera',\n onPress: async () => {\n const mediaFile = await fileService.openCamera({\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (mediaFile) {\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.type, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(mediaFile);\n }\n },\n },\n {\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_PHOTO_LIBRARY,\n icon: 'photo',\n onPress: async () => {\n const mediaFiles = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n\n if (mediaFiles && mediaFiles[0]) {\n const mediaFile = mediaFiles[0];\n\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.type, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(mediaFile);\n }\n },\n },\n {\n title: STRINGS.LABELS.CHANNEL_INPUT_ATTACHMENT_FILES,\n icon: 'document',\n onPress: async () => {\n const documentFile = await fileService.openDocument({\n onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (documentFile) {\n // Image compression\n if (\n isImage(documentFile.uri, documentFile.type) &&\n shouldCompressImage(documentFile.type, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: documentFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n documentFile.uri = compressed.uri;\n documentFile.size = compressed.size;\n }\n });\n }\n\n sendFileMessage(documentFile);\n }\n },\n },\n ],\n });\n };\n\n const getPlaceholder = () => {\n if (!inputDisabled) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_ACTIVE;\n if (inputFrozen) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_DISABLED;\n if (inputMuted) return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_MUTED;\n\n return STRINGS.LABELS.CHANNEL_INPUT_PLACEHOLDER_DISABLED;\n };\n\n return (\n <View style={styles.sendInputContainer}>\n <TouchableOpacity onPress={onPressAttachment} disabled={inputDisabled}>\n <Icon\n color={inputDisabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'add'}\n size={24}\n containerStyle={styles.iconAttach}\n />\n </TouchableOpacity>\n <TextInput\n ref={ref}\n multiline\n disableFullscreenUI\n onSelectionChange={onSelectionChange}\n editable={!inputDisabled}\n onChangeText={onChangeText}\n style={styles.input}\n placeholder={getPlaceholder()}\n >\n {mentionManager.textToMentionedComponents(text, mentionedUsers)}\n </TextInput>\n\n {Boolean(text.trim()) && (\n <TouchableOpacity onPress={sendUserMessage} disabled={inputDisabled}>\n <Icon\n color={\n inputDisabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight\n }\n icon={'send'}\n size={24}\n containerStyle={styles.iconSend}\n />\n </TouchableOpacity>\n )}\n </View>\n );\n});\n\nconst styles = createStyleSheet({\n sendInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 12,\n alignItems: 'center',\n flexDirection: 'row',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n iconAttach: {\n marginRight: 8,\n padding: 4,\n },\n iconSend: {\n marginLeft: 4,\n padding: 4,\n },\n});\n\nexport default SendInput;\n"],"mappings":"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"}
|
|
@@ -211,9 +211,27 @@ const initializeSendbird = (appId, internalStorage, onInitialized) => {
|
|
|
211
211
|
if (NetInfo !== null && NetInfo !== void 0 && NetInfo.addEventListener) {
|
|
212
212
|
var _chatSDK$setOnlineLis, _chatSDK, _chatSDK$setOfflineLi, _chatSDK2;
|
|
213
213
|
|
|
214
|
+
try {
|
|
215
|
+
// NOTE: For removing buggy behavior of NetInfo.addEventListener
|
|
216
|
+
// When you first add an event listener, it is assumed that the initialization of the internal event detector is done simultaneously.
|
|
217
|
+
// In other words, when you call the first event listener two events are triggered immediately
|
|
218
|
+
// - the one that is called when adding the event listener
|
|
219
|
+
// - and the internal initialization event
|
|
220
|
+
NetInfo.addEventListener(_uikitUtils.NOOP)();
|
|
221
|
+
} catch {}
|
|
222
|
+
|
|
214
223
|
const listener = (callback, callbackType) => {
|
|
224
|
+
let callCount = 0;
|
|
215
225
|
const unsubscribe = NetInfo.addEventListener(state => {
|
|
216
|
-
const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable);
|
|
226
|
+
const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable); // NOTE: When NetInfo.addEventListener is called
|
|
227
|
+
// the event is immediately triggered regardless of whether the event actually occurred.
|
|
228
|
+
// This is why it filters the first event.
|
|
229
|
+
|
|
230
|
+
if (callCount === 0) {
|
|
231
|
+
callCount++;
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
217
235
|
if (online && callbackType === 'online') callback();
|
|
218
236
|
if (!online && callbackType === 'offline') callback();
|
|
219
237
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NetInfo","SBUDynamicModule","get","SendbirdUIKit","Object","freeze","VERSION","PLATFORM","Platform","OS","toLowerCase","DEFAULT","AUTO_PUSH_TOKEN_REGISTRATION","CHANNEL_LIST_TYPING_INDICATOR","CHANNEL_LIST_MESSAGE_RECEIPT_STATUS","USE_USER_ID_FOR_NICKNAME","USER_MENTION","IMAGE_COMPRESSION","SendbirdUIKitContainer","children","appId","chatOptions","platformServices","localization","styles","errorBoundary","toast","userProfile","userMention","imageCompression","defaultStringSet","stringSet","StringSetEn","isFirstMount","useIsFirstMount","unsubscribes","useRef","internalStorage","useMemo","localCacheStorage","InternalLocalCacheStorage","undefined","sdkInstance","setSdkInstance","useState","sendbird","initializeSendbird","onInitialized","current","chatSDK","emojiManager","EmojiManager","mentionManager","config","MentionConfig","mentionLimit","MENTION_LIMIT","suggestionLimit","SUGGESTION_LIMIT","debounceMills","DEBOUNCE_MILLS","delimiter","DELIMITER","trigger","TRIGGER","MentionManager","enableUserMention","imageCompressionConfig","ImageCompressionConfig","compressionRate","COMPRESSION_RATE","width","height","useLayoutEffect","forEach","u","renderChildren","disabled","enableAutoPushTokenRegistration","enableChannelListTypingIndicator","enableChannelListMessageReceiptStatus","enableUseUserIdForNickname","enableImageCompression","file","notification","clipboard","media","theme","LightUIKitTheme","HeaderComponent","Header","defaultHeaderTitleAlign","statusBarTranslucent","dismissTimeout","onCreateChannel","onBeforeCreateChannel","value","STRINGS","alert","ok","DIALOG","ALERT_DEFAULT_OK","prompt","PROMPT_DEFAULT_OK","cancel","PROMPT_DEFAULT_CANCEL","placeholder","PROMPT_DEFAULT_PLACEHOLDER","Sendbird","init","modules","GroupChannelModule","OpenChannelModule","localCacheEnabled","Boolean","useAsyncStorageStore","newInstance","addExtension","addEventListener","listener","callback","callbackType","unsubscribe","state","online","isConnected","isInternetReachable","push","setOnlineListener","onOnline","setOfflineListener","onOffline"],"sources":["SendbirdUIKitContainer.tsx"],"sourcesContent":["import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Platform } from 'react-native';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\n\nimport Sendbird from '@sendbird/chat';\nimport { GroupChannelModule } from '@sendbird/chat/groupChannel';\nimport { OpenChannelModule } from '@sendbird/chat/openChannel';\nimport type { HeaderStyleContextType, UIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n DialogProvider,\n Header,\n HeaderStyleProvider,\n LightUIKitTheme,\n ToastProvider,\n UIKitThemeProvider,\n} from '@sendbird/uikit-react-native-foundation';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdGroupChannelCreateParams,\n SendbirdMember,\n SendbirdUser,\n} from '@sendbird/uikit-utils';\nimport { useIsFirstMount } from '@sendbird/uikit-utils';\n\nimport { LocalizationContext, LocalizationProvider } from '../contexts/LocalizationCtx';\nimport { PlatformServiceProvider } from '../contexts/PlatformServiceCtx';\nimport { ReactionProvider } from '../contexts/ReactionCtx';\nimport type { UIKitFeaturesInSendbirdChatContext } from '../contexts/SendbirdChatCtx';\nimport { SendbirdChatProvider } from '../contexts/SendbirdChatCtx';\nimport { UserProfileProvider } from '../contexts/UserProfileCtx';\nimport EmojiManager from '../libs/EmojiManager';\nimport type { ImageCompressionConfigInterface } from '../libs/ImageCompressionConfig';\nimport ImageCompressionConfig from '../libs/ImageCompressionConfig';\nimport InternalLocalCacheStorage from '../libs/InternalLocalCacheStorage';\nimport MentionConfig, { MentionConfigInterface } from '../libs/MentionConfig';\nimport MentionManager from '../libs/MentionManager';\nimport StringSetEn from '../localization/StringSet.en';\nimport type { StringSet } from '../localization/StringSet.type';\nimport SBUDynamicModule from '../platform/dynamicModule';\nimport type {\n ClipboardServiceInterface,\n FileServiceInterface,\n MediaServiceInterface,\n NotificationServiceInterface,\n} from '../platform/types';\nimport type { ErrorBoundaryProps, LocalCacheStorage } from '../types';\nimport VERSION from '../version';\nimport InternalErrorBoundaryContainer from './InternalErrorBoundaryContainer';\n\nconst NetInfo = SBUDynamicModule.get('@react-native-community/netinfo', 'warn');\n\nexport const SendbirdUIKit = Object.freeze({\n VERSION,\n PLATFORM: Platform.OS.toLowerCase(),\n DEFAULT: {\n AUTO_PUSH_TOKEN_REGISTRATION: true,\n CHANNEL_LIST_TYPING_INDICATOR: false,\n CHANNEL_LIST_MESSAGE_RECEIPT_STATUS: false,\n USE_USER_ID_FOR_NICKNAME: false,\n USER_MENTION: false,\n IMAGE_COMPRESSION: true,\n },\n});\n\nexport type SendbirdUIKitContainerProps = React.PropsWithChildren<{\n appId: string;\n platformServices: {\n file: FileServiceInterface;\n notification: NotificationServiceInterface;\n clipboard: ClipboardServiceInterface;\n media: MediaServiceInterface;\n };\n chatOptions?: {\n localCacheStorage?: LocalCacheStorage;\n onInitialized?: (sdkInstance: SendbirdChatSDK) => SendbirdChatSDK;\n } & Partial<UIKitFeaturesInSendbirdChatContext>;\n localization?: {\n stringSet?: StringSet;\n };\n styles?: {\n theme?: UIKitTheme;\n statusBarTranslucent?: boolean;\n defaultHeaderTitleAlign?: 'left' | 'center';\n defaultHeaderHeight?: number;\n HeaderComponent?: HeaderStyleContextType['HeaderComponent'];\n };\n errorBoundary?: {\n disabled?: boolean;\n onError?: (props: ErrorBoundaryProps) => void;\n ErrorInfoComponent?: (props: ErrorBoundaryProps) => JSX.Element;\n };\n toast?: {\n dismissTimeout?: number;\n };\n userProfile?: {\n onCreateChannel: (channel: SendbirdGroupChannel) => void;\n onBeforeCreateChannel?: (\n channelParams: SendbirdGroupChannelCreateParams,\n users: SendbirdUser[] | SendbirdMember[],\n ) => SendbirdGroupChannelCreateParams | Promise<SendbirdGroupChannelCreateParams>;\n };\n userMention?: Pick<Partial<MentionConfigInterface>, 'mentionLimit' | 'suggestionLimit' | 'debounceMills'>;\n imageCompression?: Partial<ImageCompressionConfigInterface>;\n}>;\n\nconst SendbirdUIKitContainer = ({\n children,\n appId,\n chatOptions,\n platformServices,\n localization,\n styles,\n errorBoundary,\n toast,\n userProfile,\n userMention,\n imageCompression,\n}: SendbirdUIKitContainerProps) => {\n const defaultStringSet = localization?.stringSet ?? StringSetEn;\n\n const isFirstMount = useIsFirstMount();\n const unsubscribes = useRef<Array<() => void>>([]);\n const internalStorage = useMemo(\n () => (chatOptions?.localCacheStorage ? new InternalLocalCacheStorage(chatOptions.localCacheStorage) : undefined),\n [chatOptions?.localCacheStorage],\n );\n\n const [sdkInstance, setSdkInstance] = useState<SendbirdChatSDK>(() => {\n const sendbird = initializeSendbird(appId, internalStorage, chatOptions?.onInitialized);\n unsubscribes.current = sendbird.unsubscribes;\n return sendbird.chatSDK;\n });\n\n const emojiManager = useMemo(() => new EmojiManager(internalStorage), [internalStorage]);\n\n const mentionManager = useMemo(() => {\n const config = new MentionConfig({\n mentionLimit: userMention?.mentionLimit || MentionConfig.DEFAULT.MENTION_LIMIT,\n suggestionLimit: userMention?.suggestionLimit || MentionConfig.DEFAULT.SUGGESTION_LIMIT,\n debounceMills: userMention?.debounceMills ?? MentionConfig.DEFAULT.DEBOUNCE_MILLS,\n delimiter: MentionConfig.DEFAULT.DELIMITER,\n trigger: MentionConfig.DEFAULT.TRIGGER,\n });\n return new MentionManager(config, chatOptions?.enableUserMention ?? SendbirdUIKit.DEFAULT.USER_MENTION);\n }, [\n chatOptions?.enableUserMention,\n userMention?.mentionLimit,\n userMention?.suggestionLimit,\n userMention?.debounceMills,\n ]);\n\n const imageCompressionConfig = useMemo(() => {\n return new ImageCompressionConfig({\n compressionRate: imageCompression?.compressionRate || ImageCompressionConfig.DEFAULT.COMPRESSION_RATE,\n width: imageCompression?.width,\n height: imageCompression?.height,\n });\n }, [imageCompression?.compressionRate, imageCompression?.width, imageCompression?.height]);\n\n useLayoutEffect(() => {\n if (!isFirstMount) {\n const sendbird = initializeSendbird(appId, internalStorage, chatOptions?.onInitialized);\n setSdkInstance(sendbird.chatSDK);\n unsubscribes.current = sendbird.unsubscribes;\n }\n\n return () => {\n if (!isFirstMount) {\n unsubscribes.current.forEach((u) => {\n try {\n u();\n } catch {}\n });\n }\n };\n }, [appId, internalStorage]);\n\n const renderChildren = () => {\n if (errorBoundary?.disabled) {\n return children;\n } else {\n return <InternalErrorBoundaryContainer {...errorBoundary}>{children}</InternalErrorBoundaryContainer>;\n }\n };\n\n return (\n <SafeAreaProvider>\n <SendbirdChatProvider\n sdkInstance={sdkInstance}\n emojiManager={emojiManager}\n mentionManager={mentionManager}\n imageCompressionConfig={imageCompressionConfig}\n enableAutoPushTokenRegistration={\n chatOptions?.enableAutoPushTokenRegistration ?? SendbirdUIKit.DEFAULT.AUTO_PUSH_TOKEN_REGISTRATION\n }\n enableChannelListTypingIndicator={\n chatOptions?.enableChannelListTypingIndicator ?? SendbirdUIKit.DEFAULT.CHANNEL_LIST_TYPING_INDICATOR\n }\n enableChannelListMessageReceiptStatus={\n chatOptions?.enableChannelListMessageReceiptStatus ??\n SendbirdUIKit.DEFAULT.CHANNEL_LIST_MESSAGE_RECEIPT_STATUS\n }\n enableUseUserIdForNickname={\n chatOptions?.enableUseUserIdForNickname ?? SendbirdUIKit.DEFAULT.USE_USER_ID_FOR_NICKNAME\n }\n enableUserMention={chatOptions?.enableUserMention ?? SendbirdUIKit.DEFAULT.USER_MENTION}\n enableImageCompression={chatOptions?.enableImageCompression ?? SendbirdUIKit.DEFAULT.IMAGE_COMPRESSION}\n >\n <LocalizationProvider stringSet={defaultStringSet}>\n <PlatformServiceProvider\n fileService={platformServices.file}\n notificationService={platformServices.notification}\n clipboardService={platformServices.clipboard}\n mediaService={platformServices.media}\n >\n <UIKitThemeProvider theme={styles?.theme ?? LightUIKitTheme}>\n <HeaderStyleProvider\n HeaderComponent={styles?.HeaderComponent ?? Header}\n defaultTitleAlign={styles?.defaultHeaderTitleAlign ?? 'left'}\n statusBarTranslucent={styles?.statusBarTranslucent ?? true}\n >\n <ToastProvider dismissTimeout={toast?.dismissTimeout}>\n <UserProfileProvider\n onCreateChannel={userProfile?.onCreateChannel}\n onBeforeCreateChannel={userProfile?.onBeforeCreateChannel}\n statusBarTranslucent={styles?.statusBarTranslucent ?? true}\n >\n <ReactionProvider>\n <LocalizationContext.Consumer>\n {(value) => {\n const STRINGS = value?.STRINGS || defaultStringSet;\n return (\n <DialogProvider\n defaultLabels={{\n alert: { ok: STRINGS.DIALOG.ALERT_DEFAULT_OK },\n prompt: {\n ok: STRINGS.DIALOG.PROMPT_DEFAULT_OK,\n cancel: STRINGS.DIALOG.PROMPT_DEFAULT_CANCEL,\n placeholder: STRINGS.DIALOG.PROMPT_DEFAULT_PLACEHOLDER,\n },\n }}\n >\n {renderChildren()}\n </DialogProvider>\n );\n }}\n </LocalizationContext.Consumer>\n </ReactionProvider>\n </UserProfileProvider>\n </ToastProvider>\n </HeaderStyleProvider>\n </UIKitThemeProvider>\n </PlatformServiceProvider>\n </LocalizationProvider>\n </SendbirdChatProvider>\n </SafeAreaProvider>\n );\n};\n\nconst initializeSendbird = (\n appId: string,\n internalStorage?: InternalLocalCacheStorage,\n onInitialized?: (sdk: SendbirdChatSDK) => SendbirdChatSDK,\n) => {\n const unsubscribes: Array<() => void> = [];\n let chatSDK: SendbirdChatSDK;\n\n chatSDK = Sendbird.init({\n appId,\n modules: [new GroupChannelModule(), new OpenChannelModule()],\n localCacheEnabled: Boolean(internalStorage),\n useAsyncStorageStore: internalStorage as never,\n newInstance: true,\n });\n\n if (onInitialized) {\n chatSDK = onInitialized(chatSDK);\n }\n\n if (SendbirdUIKit.VERSION) {\n chatSDK.addExtension('sb_uikit', SendbirdUIKit.VERSION);\n }\n\n if (SendbirdUIKit.PLATFORM) {\n chatSDK.addExtension('device-os-platform', SendbirdUIKit.PLATFORM);\n }\n\n if (NetInfo?.addEventListener) {\n const listener = (callback: () => void, callbackType: 'online' | 'offline') => {\n const unsubscribe = NetInfo.addEventListener((state) => {\n const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable);\n if (online && callbackType === 'online') callback();\n if (!online && callbackType === 'offline') callback();\n });\n unsubscribes.push(unsubscribe);\n return unsubscribe;\n };\n chatSDK.setOnlineListener?.((onOnline) => listener(onOnline, 'online'));\n chatSDK.setOfflineListener?.((onOffline) => listener(onOffline, 'offline'));\n }\n return { chatSDK, unsubscribes };\n};\n\nexport default SendbirdUIKitContainer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["NetInfo","SBUDynamicModule","get","SendbirdUIKit","Object","freeze","VERSION","PLATFORM","Platform","OS","toLowerCase","DEFAULT","AUTO_PUSH_TOKEN_REGISTRATION","CHANNEL_LIST_TYPING_INDICATOR","CHANNEL_LIST_MESSAGE_RECEIPT_STATUS","USE_USER_ID_FOR_NICKNAME","USER_MENTION","IMAGE_COMPRESSION","SendbirdUIKitContainer","children","appId","chatOptions","platformServices","localization","styles","errorBoundary","toast","userProfile","userMention","imageCompression","defaultStringSet","stringSet","StringSetEn","isFirstMount","useIsFirstMount","unsubscribes","useRef","internalStorage","useMemo","localCacheStorage","InternalLocalCacheStorage","undefined","sdkInstance","setSdkInstance","useState","sendbird","initializeSendbird","onInitialized","current","chatSDK","emojiManager","EmojiManager","mentionManager","config","MentionConfig","mentionLimit","MENTION_LIMIT","suggestionLimit","SUGGESTION_LIMIT","debounceMills","DEBOUNCE_MILLS","delimiter","DELIMITER","trigger","TRIGGER","MentionManager","enableUserMention","imageCompressionConfig","ImageCompressionConfig","compressionRate","COMPRESSION_RATE","width","height","useLayoutEffect","forEach","u","renderChildren","disabled","enableAutoPushTokenRegistration","enableChannelListTypingIndicator","enableChannelListMessageReceiptStatus","enableUseUserIdForNickname","enableImageCompression","file","notification","clipboard","media","theme","LightUIKitTheme","HeaderComponent","Header","defaultHeaderTitleAlign","statusBarTranslucent","dismissTimeout","onCreateChannel","onBeforeCreateChannel","value","STRINGS","alert","ok","DIALOG","ALERT_DEFAULT_OK","prompt","PROMPT_DEFAULT_OK","cancel","PROMPT_DEFAULT_CANCEL","placeholder","PROMPT_DEFAULT_PLACEHOLDER","Sendbird","init","modules","GroupChannelModule","OpenChannelModule","localCacheEnabled","Boolean","useAsyncStorageStore","newInstance","addExtension","addEventListener","NOOP","listener","callback","callbackType","callCount","unsubscribe","state","online","isConnected","isInternetReachable","push","setOnlineListener","onOnline","setOfflineListener","onOffline"],"sources":["SendbirdUIKitContainer.tsx"],"sourcesContent":["import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Platform } from 'react-native';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\n\nimport Sendbird from '@sendbird/chat';\nimport { GroupChannelModule } from '@sendbird/chat/groupChannel';\nimport { OpenChannelModule } from '@sendbird/chat/openChannel';\nimport type { HeaderStyleContextType, UIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n DialogProvider,\n Header,\n HeaderStyleProvider,\n LightUIKitTheme,\n ToastProvider,\n UIKitThemeProvider,\n} from '@sendbird/uikit-react-native-foundation';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdGroupChannelCreateParams,\n SendbirdMember,\n SendbirdUser,\n} from '@sendbird/uikit-utils';\nimport { NOOP, useIsFirstMount } from '@sendbird/uikit-utils';\n\nimport { LocalizationContext, LocalizationProvider } from '../contexts/LocalizationCtx';\nimport { PlatformServiceProvider } from '../contexts/PlatformServiceCtx';\nimport { ReactionProvider } from '../contexts/ReactionCtx';\nimport type { UIKitFeaturesInSendbirdChatContext } from '../contexts/SendbirdChatCtx';\nimport { SendbirdChatProvider } from '../contexts/SendbirdChatCtx';\nimport { UserProfileProvider } from '../contexts/UserProfileCtx';\nimport EmojiManager from '../libs/EmojiManager';\nimport type { ImageCompressionConfigInterface } from '../libs/ImageCompressionConfig';\nimport ImageCompressionConfig from '../libs/ImageCompressionConfig';\nimport InternalLocalCacheStorage from '../libs/InternalLocalCacheStorage';\nimport MentionConfig, { MentionConfigInterface } from '../libs/MentionConfig';\nimport MentionManager from '../libs/MentionManager';\nimport StringSetEn from '../localization/StringSet.en';\nimport type { StringSet } from '../localization/StringSet.type';\nimport SBUDynamicModule from '../platform/dynamicModule';\nimport type {\n ClipboardServiceInterface,\n FileServiceInterface,\n MediaServiceInterface,\n NotificationServiceInterface,\n} from '../platform/types';\nimport type { ErrorBoundaryProps, LocalCacheStorage } from '../types';\nimport VERSION from '../version';\nimport InternalErrorBoundaryContainer from './InternalErrorBoundaryContainer';\n\nconst NetInfo = SBUDynamicModule.get('@react-native-community/netinfo', 'warn');\n\nexport const SendbirdUIKit = Object.freeze({\n VERSION,\n PLATFORM: Platform.OS.toLowerCase(),\n DEFAULT: {\n AUTO_PUSH_TOKEN_REGISTRATION: true,\n CHANNEL_LIST_TYPING_INDICATOR: false,\n CHANNEL_LIST_MESSAGE_RECEIPT_STATUS: false,\n USE_USER_ID_FOR_NICKNAME: false,\n USER_MENTION: false,\n IMAGE_COMPRESSION: true,\n },\n});\n\nexport type SendbirdUIKitContainerProps = React.PropsWithChildren<{\n appId: string;\n platformServices: {\n file: FileServiceInterface;\n notification: NotificationServiceInterface;\n clipboard: ClipboardServiceInterface;\n media: MediaServiceInterface;\n };\n chatOptions?: {\n localCacheStorage?: LocalCacheStorage;\n onInitialized?: (sdkInstance: SendbirdChatSDK) => SendbirdChatSDK;\n } & Partial<UIKitFeaturesInSendbirdChatContext>;\n localization?: {\n stringSet?: StringSet;\n };\n styles?: {\n theme?: UIKitTheme;\n statusBarTranslucent?: boolean;\n defaultHeaderTitleAlign?: 'left' | 'center';\n defaultHeaderHeight?: number;\n HeaderComponent?: HeaderStyleContextType['HeaderComponent'];\n };\n errorBoundary?: {\n disabled?: boolean;\n onError?: (props: ErrorBoundaryProps) => void;\n ErrorInfoComponent?: (props: ErrorBoundaryProps) => JSX.Element;\n };\n toast?: {\n dismissTimeout?: number;\n };\n userProfile?: {\n onCreateChannel: (channel: SendbirdGroupChannel) => void;\n onBeforeCreateChannel?: (\n channelParams: SendbirdGroupChannelCreateParams,\n users: SendbirdUser[] | SendbirdMember[],\n ) => SendbirdGroupChannelCreateParams | Promise<SendbirdGroupChannelCreateParams>;\n };\n userMention?: Pick<Partial<MentionConfigInterface>, 'mentionLimit' | 'suggestionLimit' | 'debounceMills'>;\n imageCompression?: Partial<ImageCompressionConfigInterface>;\n}>;\n\nconst SendbirdUIKitContainer = ({\n children,\n appId,\n chatOptions,\n platformServices,\n localization,\n styles,\n errorBoundary,\n toast,\n userProfile,\n userMention,\n imageCompression,\n}: SendbirdUIKitContainerProps) => {\n const defaultStringSet = localization?.stringSet ?? StringSetEn;\n\n const isFirstMount = useIsFirstMount();\n const unsubscribes = useRef<Array<() => void>>([]);\n const internalStorage = useMemo(\n () => (chatOptions?.localCacheStorage ? new InternalLocalCacheStorage(chatOptions.localCacheStorage) : undefined),\n [chatOptions?.localCacheStorage],\n );\n\n const [sdkInstance, setSdkInstance] = useState<SendbirdChatSDK>(() => {\n const sendbird = initializeSendbird(appId, internalStorage, chatOptions?.onInitialized);\n unsubscribes.current = sendbird.unsubscribes;\n return sendbird.chatSDK;\n });\n\n const emojiManager = useMemo(() => new EmojiManager(internalStorage), [internalStorage]);\n\n const mentionManager = useMemo(() => {\n const config = new MentionConfig({\n mentionLimit: userMention?.mentionLimit || MentionConfig.DEFAULT.MENTION_LIMIT,\n suggestionLimit: userMention?.suggestionLimit || MentionConfig.DEFAULT.SUGGESTION_LIMIT,\n debounceMills: userMention?.debounceMills ?? MentionConfig.DEFAULT.DEBOUNCE_MILLS,\n delimiter: MentionConfig.DEFAULT.DELIMITER,\n trigger: MentionConfig.DEFAULT.TRIGGER,\n });\n return new MentionManager(config, chatOptions?.enableUserMention ?? SendbirdUIKit.DEFAULT.USER_MENTION);\n }, [\n chatOptions?.enableUserMention,\n userMention?.mentionLimit,\n userMention?.suggestionLimit,\n userMention?.debounceMills,\n ]);\n\n const imageCompressionConfig = useMemo(() => {\n return new ImageCompressionConfig({\n compressionRate: imageCompression?.compressionRate || ImageCompressionConfig.DEFAULT.COMPRESSION_RATE,\n width: imageCompression?.width,\n height: imageCompression?.height,\n });\n }, [imageCompression?.compressionRate, imageCompression?.width, imageCompression?.height]);\n\n useLayoutEffect(() => {\n if (!isFirstMount) {\n const sendbird = initializeSendbird(appId, internalStorage, chatOptions?.onInitialized);\n setSdkInstance(sendbird.chatSDK);\n unsubscribes.current = sendbird.unsubscribes;\n }\n\n return () => {\n if (!isFirstMount) {\n unsubscribes.current.forEach((u) => {\n try {\n u();\n } catch {}\n });\n }\n };\n }, [appId, internalStorage]);\n\n const renderChildren = () => {\n if (errorBoundary?.disabled) {\n return children;\n } else {\n return <InternalErrorBoundaryContainer {...errorBoundary}>{children}</InternalErrorBoundaryContainer>;\n }\n };\n\n return (\n <SafeAreaProvider>\n <SendbirdChatProvider\n sdkInstance={sdkInstance}\n emojiManager={emojiManager}\n mentionManager={mentionManager}\n imageCompressionConfig={imageCompressionConfig}\n enableAutoPushTokenRegistration={\n chatOptions?.enableAutoPushTokenRegistration ?? SendbirdUIKit.DEFAULT.AUTO_PUSH_TOKEN_REGISTRATION\n }\n enableChannelListTypingIndicator={\n chatOptions?.enableChannelListTypingIndicator ?? SendbirdUIKit.DEFAULT.CHANNEL_LIST_TYPING_INDICATOR\n }\n enableChannelListMessageReceiptStatus={\n chatOptions?.enableChannelListMessageReceiptStatus ??\n SendbirdUIKit.DEFAULT.CHANNEL_LIST_MESSAGE_RECEIPT_STATUS\n }\n enableUseUserIdForNickname={\n chatOptions?.enableUseUserIdForNickname ?? SendbirdUIKit.DEFAULT.USE_USER_ID_FOR_NICKNAME\n }\n enableUserMention={chatOptions?.enableUserMention ?? SendbirdUIKit.DEFAULT.USER_MENTION}\n enableImageCompression={chatOptions?.enableImageCompression ?? SendbirdUIKit.DEFAULT.IMAGE_COMPRESSION}\n >\n <LocalizationProvider stringSet={defaultStringSet}>\n <PlatformServiceProvider\n fileService={platformServices.file}\n notificationService={platformServices.notification}\n clipboardService={platformServices.clipboard}\n mediaService={platformServices.media}\n >\n <UIKitThemeProvider theme={styles?.theme ?? LightUIKitTheme}>\n <HeaderStyleProvider\n HeaderComponent={styles?.HeaderComponent ?? Header}\n defaultTitleAlign={styles?.defaultHeaderTitleAlign ?? 'left'}\n statusBarTranslucent={styles?.statusBarTranslucent ?? true}\n >\n <ToastProvider dismissTimeout={toast?.dismissTimeout}>\n <UserProfileProvider\n onCreateChannel={userProfile?.onCreateChannel}\n onBeforeCreateChannel={userProfile?.onBeforeCreateChannel}\n statusBarTranslucent={styles?.statusBarTranslucent ?? true}\n >\n <ReactionProvider>\n <LocalizationContext.Consumer>\n {(value) => {\n const STRINGS = value?.STRINGS || defaultStringSet;\n return (\n <DialogProvider\n defaultLabels={{\n alert: { ok: STRINGS.DIALOG.ALERT_DEFAULT_OK },\n prompt: {\n ok: STRINGS.DIALOG.PROMPT_DEFAULT_OK,\n cancel: STRINGS.DIALOG.PROMPT_DEFAULT_CANCEL,\n placeholder: STRINGS.DIALOG.PROMPT_DEFAULT_PLACEHOLDER,\n },\n }}\n >\n {renderChildren()}\n </DialogProvider>\n );\n }}\n </LocalizationContext.Consumer>\n </ReactionProvider>\n </UserProfileProvider>\n </ToastProvider>\n </HeaderStyleProvider>\n </UIKitThemeProvider>\n </PlatformServiceProvider>\n </LocalizationProvider>\n </SendbirdChatProvider>\n </SafeAreaProvider>\n );\n};\n\nconst initializeSendbird = (\n appId: string,\n internalStorage?: InternalLocalCacheStorage,\n onInitialized?: (sdk: SendbirdChatSDK) => SendbirdChatSDK,\n) => {\n const unsubscribes: Array<() => void> = [];\n let chatSDK: SendbirdChatSDK;\n\n chatSDK = Sendbird.init({\n appId,\n modules: [new GroupChannelModule(), new OpenChannelModule()],\n localCacheEnabled: Boolean(internalStorage),\n useAsyncStorageStore: internalStorage as never,\n newInstance: true,\n });\n\n if (onInitialized) {\n chatSDK = onInitialized(chatSDK);\n }\n\n if (SendbirdUIKit.VERSION) {\n chatSDK.addExtension('sb_uikit', SendbirdUIKit.VERSION);\n }\n\n if (SendbirdUIKit.PLATFORM) {\n chatSDK.addExtension('device-os-platform', SendbirdUIKit.PLATFORM);\n }\n\n if (NetInfo?.addEventListener) {\n try {\n // NOTE: For removing buggy behavior of NetInfo.addEventListener\n // When you first add an event listener, it is assumed that the initialization of the internal event detector is done simultaneously.\n // In other words, when you call the first event listener two events are triggered immediately\n // - the one that is called when adding the event listener\n // - and the internal initialization event\n NetInfo.addEventListener(NOOP)();\n } catch {}\n\n const listener = (callback: () => void, callbackType: 'online' | 'offline') => {\n let callCount = 0;\n const unsubscribe = NetInfo.addEventListener((state) => {\n const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable);\n\n // NOTE: When NetInfo.addEventListener is called\n // the event is immediately triggered regardless of whether the event actually occurred.\n // This is why it filters the first event.\n if (callCount === 0) {\n callCount++;\n return;\n }\n\n if (online && callbackType === 'online') callback();\n if (!online && callbackType === 'offline') callback();\n });\n unsubscribes.push(unsubscribe);\n return unsubscribe;\n };\n chatSDK.setOnlineListener?.((onOnline) => listener(onOnline, 'online'));\n chatSDK.setOfflineListener?.((onOffline) => listener(onOffline, 'offline'));\n }\n return { chatSDK, unsubscribes };\n};\n\nexport default SendbirdUIKitContainer;\n"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ var _SBUError = _interopRequireDefault(require("../libs/SBUError"));
|
|
|
11
11
|
|
|
12
12
|
var _expoPermissionGranted = _interopRequireDefault(require("../utils/expoPermissionGranted"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _normalizeFile = _interopRequireDefault(require("../utils/normalizeFile"));
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
@@ -82,13 +82,9 @@ const createExpoFileService = _ref => {
|
|
|
82
82
|
const {
|
|
83
83
|
size
|
|
84
84
|
} = await fsModule.getInfoAsync(response.uri);
|
|
85
|
-
|
|
86
|
-
const type = (0, _uikitUtils.getFileType)(ext);
|
|
87
|
-
return (0, _fileTypeGuard.default)({
|
|
85
|
+
return (0, _normalizeFile.default)({
|
|
88
86
|
uri,
|
|
89
|
-
size
|
|
90
|
-
type: `${type}/${ext.slice(1)}`,
|
|
91
|
-
name: Date.now() + ext
|
|
87
|
+
size
|
|
92
88
|
});
|
|
93
89
|
}
|
|
94
90
|
|
|
@@ -130,13 +126,9 @@ const createExpoFileService = _ref => {
|
|
|
130
126
|
const {
|
|
131
127
|
size
|
|
132
128
|
} = await fsModule.getInfoAsync(uri);
|
|
133
|
-
|
|
134
|
-
const type = (0, _uikitUtils.getFileType)(ext);
|
|
135
|
-
return [(0, _fileTypeGuard.default)({
|
|
129
|
+
return [await (0, _normalizeFile.default)({
|
|
136
130
|
uri,
|
|
137
|
-
size
|
|
138
|
-
type: `${type}/${ext.slice(1)}`,
|
|
139
|
-
name: Date.now() + ext
|
|
131
|
+
size
|
|
140
132
|
})];
|
|
141
133
|
}
|
|
142
134
|
|
|
@@ -152,7 +144,7 @@ const createExpoFileService = _ref => {
|
|
|
152
144
|
size,
|
|
153
145
|
name
|
|
154
146
|
} = response;
|
|
155
|
-
return (0,
|
|
147
|
+
return (0, _normalizeFile.default)({
|
|
156
148
|
uri,
|
|
157
149
|
size,
|
|
158
150
|
name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryPermission","type","perms","getPermissionsAsync","requestMediaLibraryPermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","cancelled","uri","size","getInfoAsync","ext","getFileExtension","getFileType","fileTypeGuard","slice","name","Date","now","openMediaLibrary","launchImageLibraryAsync","openDocument","getDocumentAsync","mimeType","e","UNKNOWN","save","Error","basePath","documentDirectory","cacheDirectory","downloadPath","fileName","downloadAsync","fileUrl","fileType","match","saveToLibraryAsync"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileExtension, getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport fileTypeGuard from '../utils/fileTypeGuard';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n async hasMediaLibraryPermission(type: 'write' | 'read'): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(\n type === 'write',\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n async requestMediaLibraryPermission(type: 'write' | 'read'): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(\n type === 'write',\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (response.cancelled) return null;\n\n const { uri } = response;\n const { size } = await fsModule.getInfoAsync(response.uri);\n const ext = getFileExtension(uri);\n const type = getFileType(ext);\n\n return fileTypeGuard({ uri, size, type: `${type}/${ext.slice(1)}`, name: Date.now() + ext });\n }\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryPermission('read');\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission('read');\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchImageLibraryAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (response.cancelled) return null;\n const { uri } = response;\n\n const { size } = await fsModule.getInfoAsync(uri);\n const ext = getFileExtension(uri);\n const type = getFileType(ext);\n return [fileTypeGuard({ uri, size, type: `${type}/${ext.slice(1)}`, name: Date.now() + ext })];\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (response.type === 'cancel') return null;\n const { mimeType, uri, size, name } = response;\n return fileTypeGuard({ uri, size, name, type: mimeType });\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryPermission('write');\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission('write');\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath = fsModule.documentDirectory || fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await fsModule.downloadAsync(options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryPermission","type","perms","getPermissionsAsync","requestMediaLibraryPermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","cancelled","uri","size","getInfoAsync","normalizeFile","openMediaLibrary","launchImageLibraryAsync","openDocument","getDocumentAsync","mimeType","name","e","UNKNOWN","save","Error","basePath","documentDirectory","cacheDirectory","downloadPath","fileName","downloadAsync","fileUrl","getFileType","fileType","match","saveToLibraryAsync"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport normalizeFile from '../utils/normalizeFile';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n async hasMediaLibraryPermission(type: 'write' | 'read'): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(\n type === 'write',\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n async requestMediaLibraryPermission(type: 'write' | 'read'): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(\n type === 'write',\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (response.cancelled) return null;\n\n const { uri } = response;\n const { size } = await fsModule.getInfoAsync(response.uri);\n\n return normalizeFile({ uri, size });\n }\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryPermission('read');\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission('read');\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchImageLibraryAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (response.cancelled) return null;\n const { uri } = response;\n const { size } = await fsModule.getInfoAsync(uri);\n return [await normalizeFile({ uri, size })];\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (response.type === 'cancel') return null;\n const { mimeType, uri, size, name } = response;\n return normalizeFile({ uri, size, name, type: mimeType });\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryPermission('write');\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission('write');\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath = fsModule.documentDirectory || fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await fsModule.downloadAsync(options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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"}
|
|
@@ -11,12 +11,14 @@ var _uikitUtils = require("@sendbird/uikit-utils");
|
|
|
11
11
|
|
|
12
12
|
var _SBUError = _interopRequireDefault(require("../libs/SBUError"));
|
|
13
13
|
|
|
14
|
-
var _fileTypeGuard = _interopRequireDefault(require("../utils/fileTypeGuard"));
|
|
15
|
-
|
|
16
14
|
var _nativePermissionGranted = _interopRequireDefault(require("../utils/nativePermissionGranted"));
|
|
17
15
|
|
|
16
|
+
var _normalizeFile = _interopRequireDefault(require("../utils/normalizeFile"));
|
|
17
|
+
|
|
18
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
19
|
|
|
20
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
|
+
|
|
20
22
|
function getAndroidStoragePermissionsByAPILevel(permissionModule) {
|
|
21
23
|
if (_reactNative.Platform.OS !== 'android') return [];
|
|
22
24
|
|
|
@@ -53,6 +55,43 @@ const createNativeFileService = _ref => {
|
|
|
53
55
|
});
|
|
54
56
|
|
|
55
57
|
class NativeFileService {
|
|
58
|
+
constructor() {
|
|
59
|
+
_defineProperty(this, "buildDownloadPath", async options => {
|
|
60
|
+
const dirname = _reactNative.Platform.select({
|
|
61
|
+
android: fsModule.Dirs.CacheDir,
|
|
62
|
+
default: fsModule.Dirs.DocumentDir
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const context = {
|
|
66
|
+
dirname,
|
|
67
|
+
filename: options.fileName
|
|
68
|
+
};
|
|
69
|
+
const extension = (0, _uikitUtils.getFileExtension)(options.fileName) || (0, _uikitUtils.getFileExtensionFromMime)(options.fileType) || (0, _uikitUtils.getFileExtension)(options.fileUrl) || (await (0, _uikitUtils.getFileExtensionFromUri)(options.fileUrl));
|
|
70
|
+
if (extension) context.filename = (0, _uikitUtils.normalizeFileName)(context.filename, extension);
|
|
71
|
+
return {
|
|
72
|
+
path: `${context.dirname}/${context.filename}`,
|
|
73
|
+
...context
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
_defineProperty(this, "downloadFile", async options => {
|
|
78
|
+
const {
|
|
79
|
+
path,
|
|
80
|
+
filename
|
|
81
|
+
} = await this.buildDownloadPath(options);
|
|
82
|
+
await fsModule.FileSystem.fetch(options.fileUrl, {
|
|
83
|
+
path
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
downloadedPath: path,
|
|
87
|
+
file: {
|
|
88
|
+
name: filename,
|
|
89
|
+
type: (0, _uikitUtils.getFileType)((0, _uikitUtils.getFileExtension)(path))
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
56
95
|
async hasCameraPermission() {
|
|
57
96
|
const status = await permissionModule.checkMultiple(cameraPermissions);
|
|
58
97
|
return (0, _nativePermissionGranted.default)(status);
|
|
@@ -128,7 +167,7 @@ const createNativeFileService = _ref => {
|
|
|
128
167
|
type,
|
|
129
168
|
uri
|
|
130
169
|
} = ((_response$assets = response.assets) === null || _response$assets === void 0 ? void 0 : _response$assets[0]) ?? {};
|
|
131
|
-
return (0,
|
|
170
|
+
return (0, _normalizeFile.default)({
|
|
132
171
|
uri,
|
|
133
172
|
size,
|
|
134
173
|
name,
|
|
@@ -183,20 +222,20 @@ const createNativeFileService = _ref => {
|
|
|
183
222
|
return null;
|
|
184
223
|
}
|
|
185
224
|
|
|
186
|
-
return (response.assets || []).slice(0, selectionLimit).map(_ref2 => {
|
|
225
|
+
return Promise.all((response.assets || []).slice(0, selectionLimit).map(_ref2 => {
|
|
187
226
|
let {
|
|
188
227
|
fileName: name,
|
|
189
228
|
fileSize: size,
|
|
190
229
|
type,
|
|
191
230
|
uri
|
|
192
231
|
} = _ref2;
|
|
193
|
-
return (0,
|
|
232
|
+
return (0, _normalizeFile.default)({
|
|
194
233
|
uri,
|
|
195
234
|
size,
|
|
196
235
|
name,
|
|
197
236
|
type
|
|
198
237
|
});
|
|
199
|
-
});
|
|
238
|
+
}));
|
|
200
239
|
}
|
|
201
240
|
|
|
202
241
|
async openDocument(options) {
|
|
@@ -207,7 +246,7 @@ const createNativeFileService = _ref => {
|
|
|
207
246
|
name,
|
|
208
247
|
type
|
|
209
248
|
} = await documentPickerModule.pickSingle();
|
|
210
|
-
return (0,
|
|
249
|
+
return (0, _normalizeFile.default)({
|
|
211
250
|
uri,
|
|
212
251
|
size,
|
|
213
252
|
name,
|
|
@@ -232,47 +271,36 @@ const createNativeFileService = _ref => {
|
|
|
232
271
|
if (!granted) throw new Error('Permission not granted');
|
|
233
272
|
}
|
|
234
273
|
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
274
|
+
const {
|
|
275
|
+
downloadedPath,
|
|
276
|
+
file
|
|
277
|
+
} = await this.downloadFile(options);
|
|
278
|
+
|
|
279
|
+
if (_reactNative.Platform.OS === 'ios') {
|
|
280
|
+
if (file.type === 'image' || file.type === 'video') {
|
|
281
|
+
const mediaTypeMap = {
|
|
282
|
+
'image': 'photo',
|
|
283
|
+
'video': 'video'
|
|
284
|
+
};
|
|
285
|
+
const mediaType = mediaTypeMap[file.type];
|
|
286
|
+
await mediaLibraryModule.save(downloadedPath, {
|
|
287
|
+
type: mediaType
|
|
288
|
+
});
|
|
247
289
|
}
|
|
248
290
|
}
|
|
249
291
|
|
|
250
|
-
await fsModule.FileSystem.fetch(options.fileUrl, {
|
|
251
|
-
path: downloadPath
|
|
252
|
-
});
|
|
253
|
-
const fileType = (0, _uikitUtils.getFileType)((0, _uikitUtils.getFileExtension)(options.fileUrl));
|
|
254
|
-
|
|
255
|
-
if (_reactNative.Platform.OS === 'ios' && (fileType === 'image' || fileType === 'video')) {
|
|
256
|
-
const type = {
|
|
257
|
-
'image': 'photo',
|
|
258
|
-
'video': 'video'
|
|
259
|
-
}[fileType];
|
|
260
|
-
await mediaLibraryModule.save(downloadPath, {
|
|
261
|
-
type
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
|
|
265
292
|
if (_reactNative.Platform.OS === 'android') {
|
|
266
|
-
const
|
|
293
|
+
const externalDirMap = {
|
|
267
294
|
'file': 'downloads',
|
|
268
295
|
'audio': 'audio',
|
|
269
296
|
'image': 'images',
|
|
270
297
|
'video': 'video'
|
|
271
298
|
};
|
|
272
|
-
|
|
299
|
+
const externalDir = externalDirMap[file.type];
|
|
300
|
+
await fsModule.FileSystem.cpExternal(downloadedPath, file.name, externalDir);
|
|
273
301
|
}
|
|
274
302
|
|
|
275
|
-
return
|
|
303
|
+
return downloadedPath;
|
|
276
304
|
}
|
|
277
305
|
|
|
278
306
|
}
|