@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_MEDIA_AUDIO","READ_MEDIA_IMAGES","READ_MEDIA_VIDEO","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","cameraPermissions","select","ios","IOS","CAMERA","MICROPHONE","android","default","mediaLibraryPermissions","MEDIA_LIBRARY","PHOTO_LIBRARY","NativeFileService","hasCameraPermission","status","checkMultiple","nativePermissionGranted","requestCameraPermission","requestMultiple","hasMediaLibraryPermission","__DEV__","requestMediaLibraryPermission","openCamera","options","hasPermission","granted","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","mediaType","didCancel","errorCode","DEVICE_UNAVAILABLE","Error","errorMessage","fileName","name","fileSize","size","type","uri","assets","fileTypeGuard","openMediaLibrary","selectionLimit","launchImageLibrary","slice","map","openDocument","pickSingle","e","isCancel","isInProgress","UNKNOWN","save","basePath","Dirs","CacheDir","DocumentDir","downloadPath","getFileExtension","extensionFromUrl","fileUrl","getFileType","match","FileSystem","fetch","path","fileType","dirType","cpExternal","normalizeFileName"],"sources":["createFileService.native.ts"],"sourcesContent":["import type { CameraRoll } from '@react-native-camera-roll/camera-roll';\nimport { Platform } from 'react-native';\nimport type * as DocumentPicker from 'react-native-document-picker';\nimport type * as FileAccess from 'react-native-file-access';\nimport type * as ImagePicker from 'react-native-image-picker';\nimport type * as Permissions from 'react-native-permissions';\nimport type { Permission } from 'react-native-permissions';\n\nimport { getFileExtension, getFileType, normalizeFileName } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport fileTypeGuard from '../utils/fileTypeGuard';\nimport nativePermissionGranted from '../utils/nativePermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nfunction getAndroidStoragePermissionsByAPILevel(permissionModule: typeof Permissions): Permission[] {\n if (Platform.OS !== 'android') return [];\n\n if (Platform.Version > 32) {\n return [\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_AUDIO,\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_IMAGES,\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_VIDEO,\n ];\n }\n\n if (Platform.Version > 28) {\n return [permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE];\n }\n\n return [\n permissionModule.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE,\n permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE,\n ];\n}\n\nconst createNativeFileService = ({\n imagePickerModule,\n documentPickerModule,\n permissionModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ImagePicker;\n documentPickerModule: typeof DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const cameraPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA, permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\n default: [],\n });\n const mediaLibraryPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.MEDIA_LIBRARY, permissionModule.PERMISSIONS.IOS.PHOTO_LIBRARY],\n android: getAndroidStoragePermissionsByAPILevel(permissionModule),\n default: [],\n });\n\n class NativeFileService implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async requestCameraPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n if (\n __DEV__ &&\n Platform.OS === 'ios' &&\n status['ios.permission.MEDIA_LIBRARY'] === 'unavailable' &&\n status['ios.permission.PHOTO_LIBRARY'] === 'granted'\n ) {\n return true;\n }\n return nativePermissionGranted(status);\n }\n async requestMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\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.launchCamera({\n presentationStyle: 'fullScreen',\n cameraType: options?.cameraType ?? 'back',\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n const { fileName: name, fileSize: size, type, uri } = response.assets?.[0] ?? {};\n return fileTypeGuard({ uri, size, name, type });\n }\n async openMediaLibrary(options?: OpenMediaLibraryOptions): Promise<FilePickerResponse[] | null> {\n /**\n * NOTE: options.selectionLimit {@link https://github.com/react-native-image-picker/react-native-image-picker#options}\n * We do not support 0 (any number of files)\n **/\n const selectionLimit = options?.selectionLimit || 1;\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchImageLibrary({\n presentationStyle: 'fullScreen',\n selectionLimit,\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n return (response.assets || [])\n .slice(0, selectionLimit)\n .map(({ fileName: name, fileSize: size, type, uri }) => fileTypeGuard({ uri, size, name, type }));\n }\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const { uri, size, name, type } = await documentPickerModule.pickSingle();\n return fileTypeGuard({ uri, size, name, type });\n } catch (e) {\n if (!documentPickerModule.isCancel(e) && documentPickerModule.isInProgress(e)) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n }\n return null;\n }\n }\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath = Platform.select({ android: fsModule.Dirs.CacheDir, default: fsModule.Dirs.DocumentDir });\n let downloadPath = `${basePath}/${options.fileName}`;\n if (!getFileExtension(options.fileName)) {\n const extensionFromUrl = getFileExtension(options.fileUrl);\n if (getFileType(extensionFromUrl).match(/image|video/)) {\n downloadPath += extensionFromUrl;\n }\n }\n\n await fsModule.FileSystem.fetch(options.fileUrl, { path: downloadPath });\n const fileType = getFileType(getFileExtension(options.fileUrl));\n\n if (Platform.OS === 'ios' && (fileType === 'image' || fileType === 'video')) {\n const type = ({ 'image': 'photo', 'video': 'video' } as const)[fileType];\n await mediaLibraryModule.save(downloadPath, { type });\n }\n\n if (Platform.OS === 'android') {\n const dirType = { 'file': 'downloads', 'audio': 'audio', 'image': 'images', 'video': 'video' } as const;\n await fsModule.FileSystem.cpExternal(\n downloadPath,\n normalizeFileName(options.fileName, getFileExtension(options.fileUrl)),\n dirType[fileType],\n );\n }\n return downloadPath;\n }\n }\n\n return new NativeFileService();\n};\n\nexport default createNativeFileService;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_MEDIA_AUDIO","READ_MEDIA_IMAGES","READ_MEDIA_VIDEO","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","cameraPermissions","select","ios","IOS","CAMERA","MICROPHONE","android","default","mediaLibraryPermissions","MEDIA_LIBRARY","PHOTO_LIBRARY","NativeFileService","options","dirname","Dirs","CacheDir","DocumentDir","context","filename","fileName","extension","getFileExtension","getFileExtensionFromMime","fileType","fileUrl","getFileExtensionFromUri","normalizeFileName","path","buildDownloadPath","FileSystem","fetch","downloadedPath","file","name","type","getFileType","hasCameraPermission","status","checkMultiple","nativePermissionGranted","requestCameraPermission","requestMultiple","hasMediaLibraryPermission","__DEV__","requestMediaLibraryPermission","openCamera","hasPermission","granted","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","mediaType","didCancel","errorCode","DEVICE_UNAVAILABLE","Error","errorMessage","fileSize","size","uri","assets","normalizeFile","openMediaLibrary","selectionLimit","launchImageLibrary","Promise","all","slice","map","openDocument","pickSingle","e","isCancel","isInProgress","UNKNOWN","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal"],"sources":["createFileService.native.ts"],"sourcesContent":["import type { CameraRoll } from '@react-native-camera-roll/camera-roll';\nimport { Platform } from 'react-native';\nimport type * as DocumentPicker from 'react-native-document-picker';\nimport type * as FileAccess from 'react-native-file-access';\nimport type * as ImagePicker from 'react-native-image-picker';\nimport type * as Permissions from 'react-native-permissions';\nimport type { Permission } from 'react-native-permissions';\n\nimport {\n getFileExtension,\n getFileExtensionFromMime,\n getFileExtensionFromUri,\n getFileType,\n normalizeFileName,\n} from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport nativePermissionGranted from '../utils/nativePermissionGranted';\nimport normalizeFile from '../utils/normalizeFile';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nfunction getAndroidStoragePermissionsByAPILevel(permissionModule: typeof Permissions): Permission[] {\n if (Platform.OS !== 'android') return [];\n\n if (Platform.Version > 32) {\n return [\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_AUDIO,\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_IMAGES,\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_VIDEO,\n ];\n }\n\n if (Platform.Version > 28) {\n return [permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE];\n }\n\n return [\n permissionModule.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE,\n permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE,\n ];\n}\n\nconst createNativeFileService = ({\n imagePickerModule,\n documentPickerModule,\n permissionModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ImagePicker;\n documentPickerModule: typeof DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const cameraPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA, permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\n default: [],\n });\n const mediaLibraryPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.MEDIA_LIBRARY, permissionModule.PERMISSIONS.IOS.PHOTO_LIBRARY],\n android: getAndroidStoragePermissionsByAPILevel(permissionModule),\n default: [],\n });\n\n class NativeFileService implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async requestCameraPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n if (\n __DEV__ &&\n Platform.OS === 'ios' &&\n status['ios.permission.MEDIA_LIBRARY'] === 'unavailable' &&\n status['ios.permission.PHOTO_LIBRARY'] === 'granted'\n ) {\n return true;\n }\n return nativePermissionGranted(status);\n }\n async requestMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\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.launchCamera({\n presentationStyle: 'fullScreen',\n cameraType: options?.cameraType ?? 'back',\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n const { fileName: name, fileSize: size, type, uri } = response.assets?.[0] ?? {};\n return normalizeFile({ uri, size, name, type });\n }\n async openMediaLibrary(options?: OpenMediaLibraryOptions): Promise<FilePickerResponse[] | null> {\n /**\n * NOTE: options.selectionLimit {@link https://github.com/react-native-image-picker/react-native-image-picker#options}\n * We do not support 0 (any number of files)\n **/\n const selectionLimit = options?.selectionLimit || 1;\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchImageLibrary({\n presentationStyle: 'fullScreen',\n selectionLimit,\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n return Promise.all(\n (response.assets || [])\n .slice(0, selectionLimit)\n .map(({ fileName: name, fileSize: size, type, uri }) => normalizeFile({ uri, size, name, type })),\n );\n }\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const { uri, size, name, type } = await documentPickerModule.pickSingle();\n return normalizeFile({ uri, size, name, type });\n } catch (e) {\n if (!documentPickerModule.isCancel(e) && documentPickerModule.isInProgress(e)) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n }\n return null;\n }\n }\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const { downloadedPath, file } = await this.downloadFile(options);\n\n if (Platform.OS === 'ios') {\n if (file.type === 'image' || file.type === 'video') {\n const mediaTypeMap = { 'image': 'photo', 'video': 'video' } as const;\n const mediaType = mediaTypeMap[file.type];\n await mediaLibraryModule.save(downloadedPath, { type: mediaType });\n }\n }\n\n if (Platform.OS === 'android') {\n const externalDirMap = { 'file': 'downloads', 'audio': 'audio', 'image': 'images', 'video': 'video' } as const;\n const externalDir = externalDirMap[file.type];\n await fsModule.FileSystem.cpExternal(downloadedPath, file.name, externalDir);\n }\n\n return downloadedPath;\n }\n\n private buildDownloadPath = async (options: SaveOptions) => {\n const dirname = Platform.select({ android: fsModule.Dirs.CacheDir, default: fsModule.Dirs.DocumentDir });\n const context = { dirname, filename: options.fileName };\n const extension =\n getFileExtension(options.fileName) ||\n getFileExtensionFromMime(options.fileType) ||\n getFileExtension(options.fileUrl) ||\n (await getFileExtensionFromUri(options.fileUrl));\n\n if (extension) context.filename = normalizeFileName(context.filename, extension);\n\n return { path: `${context.dirname}/${context.filename}`, ...context };\n };\n\n private downloadFile = async (options: SaveOptions) => {\n const { path, filename } = await this.buildDownloadPath(options);\n await fsModule.FileSystem.fetch(options.fileUrl, { path });\n return {\n downloadedPath: path,\n file: {\n name: filename,\n type: getFileType(getFileExtension(path)),\n } as const,\n };\n };\n }\n\n return new NativeFileService();\n};\n\nexport default createNativeFileService;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
9
|
+
|
|
10
|
+
const normalizeFile = async _ref => {
|
|
11
|
+
let {
|
|
12
|
+
uri,
|
|
13
|
+
size,
|
|
14
|
+
name,
|
|
15
|
+
type
|
|
16
|
+
} = _ref;
|
|
17
|
+
// URI is required property
|
|
18
|
+
if (!uri) return null;
|
|
19
|
+
let filename = name || String(Date.now());
|
|
20
|
+
let filetype = type || '';
|
|
21
|
+
const extension = (0, _uikitUtils.getFileExtension)(filename) || (0, _uikitUtils.getFileExtensionFromMime)(filetype) || (await (0, _uikitUtils.getFileExtensionFromUri)(uri));
|
|
22
|
+
|
|
23
|
+
if (extension) {
|
|
24
|
+
filename = (0, _uikitUtils.normalizeFileName)(filename, extension);
|
|
25
|
+
|
|
26
|
+
if (!filetype) {
|
|
27
|
+
filetype = (0, _uikitUtils.getMimeFromFileExtension)(extension);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
uri,
|
|
33
|
+
name: filename,
|
|
34
|
+
type: filetype,
|
|
35
|
+
size: size ?? 0
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var _default = normalizeFile;
|
|
40
|
+
exports.default = _default;
|
|
41
|
+
//# sourceMappingURL=normalizeFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["normalizeFile","uri","size","name","type","filename","String","Date","now","filetype","extension","getFileExtension","getFileExtensionFromMime","getFileExtensionFromUri","normalizeFileName","getMimeFromFileExtension"],"sources":["normalizeFile.ts"],"sourcesContent":["import type { PartialNullable } from '@sendbird/uikit-utils';\nimport {\n getFileExtension,\n getFileExtensionFromMime,\n getFileExtensionFromUri,\n getMimeFromFileExtension,\n normalizeFileName,\n} from '@sendbird/uikit-utils';\n\nimport type { FilePickerResponse, FileType } from '../platform/types';\n\nconst normalizeFile = async ({ uri, size, name, type }: PartialNullable<FileType>): Promise<FilePickerResponse> => {\n // URI is required property\n if (!uri) return null;\n\n let filename = name || String(Date.now());\n let filetype = type || '';\n\n const extension =\n getFileExtension(filename) || getFileExtensionFromMime(filetype) || (await getFileExtensionFromUri(uri));\n\n if (extension) {\n filename = normalizeFileName(filename, extension);\n if (!filetype) {\n filetype = getMimeFromFileExtension(extension);\n }\n }\n\n return { uri, name: filename, type: filetype, size: size ?? 0 };\n};\n\nexport default normalizeFile;\n"],"mappings":";;;;;;;AACA;;AAUA,MAAMA,aAAa,GAAG,cAA6F;EAAA,IAAtF;IAAEC,GAAF;IAAOC,IAAP;IAAaC,IAAb;IAAmBC;EAAnB,CAAsF;EACjH;EACA,IAAI,CAACH,GAAL,EAAU,OAAO,IAAP;EAEV,IAAII,QAAQ,GAAGF,IAAI,IAAIG,MAAM,CAACC,IAAI,CAACC,GAAL,EAAD,CAA7B;EACA,IAAIC,QAAQ,GAAGL,IAAI,IAAI,EAAvB;EAEA,MAAMM,SAAS,GACb,IAAAC,4BAAA,EAAiBN,QAAjB,KAA8B,IAAAO,oCAAA,EAAyBH,QAAzB,CAA9B,KAAqE,MAAM,IAAAI,mCAAA,EAAwBZ,GAAxB,CAA3E,CADF;;EAGA,IAAIS,SAAJ,EAAe;IACbL,QAAQ,GAAG,IAAAS,6BAAA,EAAkBT,QAAlB,EAA4BK,SAA5B,CAAX;;IACA,IAAI,CAACD,QAAL,EAAe;MACbA,QAAQ,GAAG,IAAAM,oCAAA,EAAyBL,SAAzB,CAAX;IACD;EACF;;EAED,OAAO;IAAET,GAAF;IAAOE,IAAI,EAAEE,QAAb;IAAuBD,IAAI,EAAEK,QAA7B;IAAuCP,IAAI,EAAEA,IAAI,IAAI;EAArD,CAAP;AACD,CAlBD;;eAoBeF,a"}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '2.4.
|
|
1
|
+
{"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '2.4.1';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAhB;eACeA,O"}
|
|
@@ -104,7 +104,7 @@ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
|
|
|
104
104
|
|
|
105
105
|
if (mediaFile) {
|
|
106
106
|
// Image compression
|
|
107
|
-
if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.
|
|
107
|
+
if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.type, features.imageCompressionEnabled)) {
|
|
108
108
|
await SBUUtils.safeRun(async () => {
|
|
109
109
|
const compressed = await mediaService.compressImage({
|
|
110
110
|
uri: mediaFile.uri,
|
|
@@ -149,7 +149,7 @@ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
|
|
|
149
149
|
if (mediaFiles && mediaFiles[0]) {
|
|
150
150
|
const mediaFile = mediaFiles[0]; // Image compression
|
|
151
151
|
|
|
152
|
-
if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.
|
|
152
|
+
if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.type, features.imageCompressionEnabled)) {
|
|
153
153
|
await SBUUtils.safeRun(async () => {
|
|
154
154
|
const compressed = await mediaService.compressImage({
|
|
155
155
|
uri: mediaFile.uri,
|
|
@@ -178,7 +178,7 @@ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
|
|
|
178
178
|
|
|
179
179
|
if (documentFile) {
|
|
180
180
|
// Image compression
|
|
181
|
-
if (isImage(documentFile.uri, documentFile.type) && shouldCompressImage(documentFile.
|
|
181
|
+
if (isImage(documentFile.uri, documentFile.type) && shouldCompressImage(documentFile.type, features.imageCompressionEnabled)) {
|
|
182
182
|
await SBUUtils.safeRun(async () => {
|
|
183
183
|
const compressed = await mediaService.compressImage({
|
|
184
184
|
uri: documentFile.uri,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","Platform","TouchableOpacity","View","MentionType","Icon","TextInput","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","isImage","shouldCompressImage","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","SendInput","ref","onPressSendUserMessage","onPressSendFileMessage","onSendUserMessage","onSendFileMessage","text","onChangeText","onSelectionChange","mentionedUsers","inputDisabled","inputFrozen","inputMuted","mentionManager","imageCompressionConfig","features","STRINGS","fileService","mediaService","colors","openSheet","alert","toast","sendUserMessage","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","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","ALERT_PERMISSIONS_MESSAGE","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","ALERT_PERMISSIONS_OK","openSettings","OPEN_CAMERA_ERROR","uri","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","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","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":["React","forwardRef","Platform","TouchableOpacity","View","MentionType","Icon","TextInput","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","isImage","shouldCompressImage","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","SendInput","ref","onPressSendUserMessage","onPressSendFileMessage","onSendUserMessage","onSendFileMessage","text","onChangeText","onSelectionChange","mentionedUsers","inputDisabled","inputFrozen","inputMuted","mentionManager","imageCompressionConfig","features","STRINGS","fileService","mediaService","colors","openSheet","alert","toast","sendUserMessage","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","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","ALERT_PERMISSIONS_MESSAGE","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","ALERT_PERMISSIONS_OK","openSettings","OPEN_CAMERA_ERROR","uri","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","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","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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"}
|
|
@@ -5,7 +5,7 @@ import Sendbird from '@sendbird/chat';
|
|
|
5
5
|
import { GroupChannelModule } from '@sendbird/chat/groupChannel';
|
|
6
6
|
import { OpenChannelModule } from '@sendbird/chat/openChannel';
|
|
7
7
|
import { DialogProvider, Header, HeaderStyleProvider, LightUIKitTheme, ToastProvider, UIKitThemeProvider } from '@sendbird/uikit-react-native-foundation';
|
|
8
|
-
import { useIsFirstMount } from '@sendbird/uikit-utils';
|
|
8
|
+
import { NOOP, useIsFirstMount } from '@sendbird/uikit-utils';
|
|
9
9
|
import { LocalizationContext, LocalizationProvider } from '../contexts/LocalizationCtx';
|
|
10
10
|
import { PlatformServiceProvider } from '../contexts/PlatformServiceCtx';
|
|
11
11
|
import { ReactionProvider } from '../contexts/ReactionCtx';
|
|
@@ -174,9 +174,27 @@ const initializeSendbird = (appId, internalStorage, onInitialized) => {
|
|
|
174
174
|
if (NetInfo !== null && NetInfo !== void 0 && NetInfo.addEventListener) {
|
|
175
175
|
var _chatSDK$setOnlineLis, _chatSDK, _chatSDK$setOfflineLi, _chatSDK2;
|
|
176
176
|
|
|
177
|
+
try {
|
|
178
|
+
// NOTE: For removing buggy behavior of NetInfo.addEventListener
|
|
179
|
+
// When you first add an event listener, it is assumed that the initialization of the internal event detector is done simultaneously.
|
|
180
|
+
// In other words, when you call the first event listener two events are triggered immediately
|
|
181
|
+
// - the one that is called when adding the event listener
|
|
182
|
+
// - and the internal initialization event
|
|
183
|
+
NetInfo.addEventListener(NOOP)();
|
|
184
|
+
} catch {}
|
|
185
|
+
|
|
177
186
|
const listener = (callback, callbackType) => {
|
|
187
|
+
let callCount = 0;
|
|
178
188
|
const unsubscribe = NetInfo.addEventListener(state => {
|
|
179
|
-
const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable);
|
|
189
|
+
const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable); // NOTE: When NetInfo.addEventListener is called
|
|
190
|
+
// the event is immediately triggered regardless of whether the event actually occurred.
|
|
191
|
+
// This is why it filters the first event.
|
|
192
|
+
|
|
193
|
+
if (callCount === 0) {
|
|
194
|
+
callCount++;
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
180
198
|
if (online && callbackType === 'online') callback();
|
|
181
199
|
if (!online && callbackType === 'offline') callback();
|
|
182
200
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useLayoutEffect","useMemo","useRef","useState","Platform","SafeAreaProvider","Sendbird","GroupChannelModule","OpenChannelModule","DialogProvider","Header","HeaderStyleProvider","LightUIKitTheme","ToastProvider","UIKitThemeProvider","useIsFirstMount","LocalizationContext","LocalizationProvider","PlatformServiceProvider","ReactionProvider","SendbirdChatProvider","UserProfileProvider","EmojiManager","ImageCompressionConfig","InternalLocalCacheStorage","MentionConfig","MentionManager","StringSetEn","SBUDynamicModule","VERSION","InternalErrorBoundaryContainer","NetInfo","get","SendbirdUIKit","Object","freeze","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","isFirstMount","unsubscribes","internalStorage","localCacheStorage","undefined","sdkInstance","setSdkInstance","sendbird","initializeSendbird","onInitialized","current","chatSDK","emojiManager","mentionManager","config","mentionLimit","MENTION_LIMIT","suggestionLimit","SUGGESTION_LIMIT","debounceMills","DEBOUNCE_MILLS","delimiter","DELIMITER","trigger","TRIGGER","enableUserMention","imageCompressionConfig","compressionRate","COMPRESSION_RATE","width","height","forEach","u","renderChildren","disabled","enableAutoPushTokenRegistration","enableChannelListTypingIndicator","enableChannelListMessageReceiptStatus","enableUseUserIdForNickname","enableImageCompression","file","notification","clipboard","media","theme","HeaderComponent","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","init","modules","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":["React","useLayoutEffect","useMemo","useRef","useState","Platform","SafeAreaProvider","Sendbird","GroupChannelModule","OpenChannelModule","DialogProvider","Header","HeaderStyleProvider","LightUIKitTheme","ToastProvider","UIKitThemeProvider","NOOP","useIsFirstMount","LocalizationContext","LocalizationProvider","PlatformServiceProvider","ReactionProvider","SendbirdChatProvider","UserProfileProvider","EmojiManager","ImageCompressionConfig","InternalLocalCacheStorage","MentionConfig","MentionManager","StringSetEn","SBUDynamicModule","VERSION","InternalErrorBoundaryContainer","NetInfo","get","SendbirdUIKit","Object","freeze","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","isFirstMount","unsubscribes","internalStorage","localCacheStorage","undefined","sdkInstance","setSdkInstance","sendbird","initializeSendbird","onInitialized","current","chatSDK","emojiManager","mentionManager","config","mentionLimit","MENTION_LIMIT","suggestionLimit","SUGGESTION_LIMIT","debounceMills","DEBOUNCE_MILLS","delimiter","DELIMITER","trigger","TRIGGER","enableUserMention","imageCompressionConfig","compressionRate","COMPRESSION_RATE","width","height","forEach","u","renderChildren","disabled","enableAutoPushTokenRegistration","enableChannelListTypingIndicator","enableChannelListMessageReceiptStatus","enableUseUserIdForNickname","enableImageCompression","file","notification","clipboard","media","theme","HeaderComponent","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","init","modules","localCacheEnabled","Boolean","useAsyncStorageStore","newInstance","addExtension","addEventListener","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":"AAAA,OAAOA,KAAP,IAAgBC,eAAhB,EAAiCC,OAAjC,EAA0CC,MAA1C,EAAkDC,QAAlD,QAAkE,OAAlE;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,SAASC,gBAAT,QAAiC,gCAAjC;AAEA,OAAOC,QAAP,MAAqB,gBAArB;AACA,SAASC,kBAAT,QAAmC,6BAAnC;AACA,SAASC,iBAAT,QAAkC,4BAAlC;AAEA,SACEC,cADF,EAEEC,MAFF,EAGEC,mBAHF,EAIEC,eAJF,EAKEC,aALF,EAMEC,kBANF,QAOO,yCAPP;AAeA,SAASC,IAAT,EAAeC,eAAf,QAAsC,uBAAtC;AAEA,SAASC,mBAAT,EAA8BC,oBAA9B,QAA0D,6BAA1D;AACA,SAASC,uBAAT,QAAwC,gCAAxC;AACA,SAASC,gBAAT,QAAiC,yBAAjC;AAEA,SAASC,oBAAT,QAAqC,6BAArC;AACA,SAASC,mBAAT,QAAoC,4BAApC;AACA,OAAOC,YAAP,MAAyB,sBAAzB;AAEA,OAAOC,sBAAP,MAAmC,gCAAnC;AACA,OAAOC,yBAAP,MAAsC,mCAAtC;AACA,OAAOC,aAAP,MAAsD,uBAAtD;AACA,OAAOC,cAAP,MAA2B,wBAA3B;AACA,OAAOC,WAAP,MAAwB,8BAAxB;AAEA,OAAOC,gBAAP,MAA6B,2BAA7B;AAQA,OAAOC,OAAP,MAAoB,YAApB;AACA,OAAOC,8BAAP,MAA2C,kCAA3C;AAEA,MAAMC,OAAO,GAAGH,gBAAgB,CAACI,GAAjB,CAAqB,iCAArB,EAAwD,MAAxD,CAAhB;AAEA,OAAO,MAAMC,aAAa,GAAGC,MAAM,CAACC,MAAP,CAAc;EACzCN,OADyC;EAEzCO,QAAQ,EAAEjC,QAAQ,CAACkC,EAAT,CAAYC,WAAZ,EAF+B;EAGzCC,OAAO,EAAE;IACPC,4BAA4B,EAAE,IADvB;IAEPC,6BAA6B,EAAE,KAFxB;IAGPC,mCAAmC,EAAE,KAH9B;IAIPC,wBAAwB,EAAE,KAJnB;IAKPC,YAAY,EAAE,KALP;IAMPC,iBAAiB,EAAE;EANZ;AAHgC,CAAd,CAAtB;;AAsDP,MAAMC,sBAAsB,GAAG,QAYI;EAAA,IAZH;IAC9BC,QAD8B;IAE9BC,KAF8B;IAG9BC,WAH8B;IAI9BC,gBAJ8B;IAK9BC,YAL8B;IAM9BC,MAN8B;IAO9BC,aAP8B;IAQ9BC,KAR8B;IAS9BC,WAT8B;IAU9BC,WAV8B;IAW9BC;EAX8B,CAYG;EACjC,MAAMC,gBAAgB,GAAG,CAAAP,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEQ,SAAd,KAA2BhC,WAApD;EAEA,MAAMiC,YAAY,GAAG7C,eAAe,EAApC;EACA,MAAM8C,YAAY,GAAG5D,MAAM,CAAoB,EAApB,CAA3B;EACA,MAAM6D,eAAe,GAAG9D,OAAO,CAC7B,MAAOiD,WAAW,SAAX,IAAAA,WAAW,WAAX,IAAAA,WAAW,CAAEc,iBAAb,GAAiC,IAAIvC,yBAAJ,CAA8ByB,WAAW,CAACc,iBAA1C,CAAjC,GAAgGC,SAD1E,EAE7B,CAACf,WAAD,aAACA,WAAD,uBAACA,WAAW,CAAEc,iBAAd,CAF6B,CAA/B;EAKA,MAAM,CAACE,WAAD,EAAcC,cAAd,IAAgChE,QAAQ,CAAkB,MAAM;IACpE,MAAMiE,QAAQ,GAAGC,kBAAkB,CAACpB,KAAD,EAAQc,eAAR,EAAyBb,WAAzB,aAAyBA,WAAzB,uBAAyBA,WAAW,CAAEoB,aAAtC,CAAnC;IACAR,YAAY,CAACS,OAAb,GAAuBH,QAAQ,CAACN,YAAhC;IACA,OAAOM,QAAQ,CAACI,OAAhB;EACD,CAJ6C,CAA9C;EAMA,MAAMC,YAAY,GAAGxE,OAAO,CAAC,MAAM,IAAIsB,YAAJ,CAAiBwC,eAAjB,CAAP,EAA0C,CAACA,eAAD,CAA1C,CAA5B;EAEA,MAAMW,cAAc,GAAGzE,OAAO,CAAC,MAAM;IACnC,MAAM0E,MAAM,GAAG,IAAIjD,aAAJ,CAAkB;MAC/BkD,YAAY,EAAE,CAAAnB,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEmB,YAAb,KAA6BlD,aAAa,CAACc,OAAd,CAAsBqC,aADlC;MAE/BC,eAAe,EAAE,CAAArB,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEqB,eAAb,KAAgCpD,aAAa,CAACc,OAAd,CAAsBuC,gBAFxC;MAG/BC,aAAa,EAAE,CAAAvB,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEuB,aAAb,KAA8BtD,aAAa,CAACc,OAAd,CAAsByC,cAHpC;MAI/BC,SAAS,EAAExD,aAAa,CAACc,OAAd,CAAsB2C,SAJF;MAK/BC,OAAO,EAAE1D,aAAa,CAACc,OAAd,CAAsB6C;IALA,CAAlB,CAAf;IAOA,OAAO,IAAI1D,cAAJ,CAAmBgD,MAAnB,EAA2B,CAAAzB,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEoC,iBAAb,KAAkCpD,aAAa,CAACM,OAAd,CAAsBK,YAAnF,CAAP;EACD,CAT6B,EAS3B,CACDK,WADC,aACDA,WADC,uBACDA,WAAW,CAAEoC,iBADZ,EAED7B,WAFC,aAEDA,WAFC,uBAEDA,WAAW,CAAEmB,YAFZ,EAGDnB,WAHC,aAGDA,WAHC,uBAGDA,WAAW,CAAEqB,eAHZ,EAIDrB,WAJC,aAIDA,WAJC,uBAIDA,WAAW,CAAEuB,aAJZ,CAT2B,CAA9B;EAgBA,MAAMO,sBAAsB,GAAGtF,OAAO,CAAC,MAAM;IAC3C,OAAO,IAAIuB,sBAAJ,CAA2B;MAChCgE,eAAe,EAAE,CAAA9B,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,CAAE8B,eAAlB,KAAqChE,sBAAsB,CAACgB,OAAvB,CAA+BiD,gBADrD;MAEhCC,KAAK,EAAEhC,gBAAF,aAAEA,gBAAF,uBAAEA,gBAAgB,CAAEgC,KAFO;MAGhCC,MAAM,EAAEjC,gBAAF,aAAEA,gBAAF,uBAAEA,gBAAgB,CAAEiC;IAHM,CAA3B,CAAP;EAKD,CANqC,EAMnC,CAACjC,gBAAD,aAACA,gBAAD,uBAACA,gBAAgB,CAAE8B,eAAnB,EAAoC9B,gBAApC,aAAoCA,gBAApC,uBAAoCA,gBAAgB,CAAEgC,KAAtD,EAA6DhC,gBAA7D,aAA6DA,gBAA7D,uBAA6DA,gBAAgB,CAAEiC,MAA/E,CANmC,CAAtC;EAQA3F,eAAe,CAAC,MAAM;IACpB,IAAI,CAAC6D,YAAL,EAAmB;MACjB,MAAMO,QAAQ,GAAGC,kBAAkB,CAACpB,KAAD,EAAQc,eAAR,EAAyBb,WAAzB,aAAyBA,WAAzB,uBAAyBA,WAAW,CAAEoB,aAAtC,CAAnC;MACAH,cAAc,CAACC,QAAQ,CAACI,OAAV,CAAd;MACAV,YAAY,CAACS,OAAb,GAAuBH,QAAQ,CAACN,YAAhC;IACD;;IAED,OAAO,MAAM;MACX,IAAI,CAACD,YAAL,EAAmB;QACjBC,YAAY,CAACS,OAAb,CAAqBqB,OAArB,CAA8BC,CAAD,IAAO;UAClC,IAAI;YACFA,CAAC;UACF,CAFD,CAEE,MAAM,CAAE;QACX,CAJD;MAKD;IACF,CARD;EASD,CAhBc,EAgBZ,CAAC5C,KAAD,EAAQc,eAAR,CAhBY,CAAf;;EAkBA,MAAM+B,cAAc,GAAG,MAAM;IAC3B,IAAIxC,aAAJ,aAAIA,aAAJ,eAAIA,aAAa,CAAEyC,QAAnB,EAA6B;MAC3B,OAAO/C,QAAP;IACD,CAFD,MAEO;MACL,oBAAO,oBAAC,8BAAD,EAAoCM,aAApC,EAAoDN,QAApD,CAAP;IACD;EACF,CAND;;EAQA,oBACE,oBAAC,gBAAD,qBACE,oBAAC,oBAAD;IACE,WAAW,EAAEkB,WADf;IAEE,YAAY,EAAEO,YAFhB;IAGE,cAAc,EAAEC,cAHlB;IAIE,sBAAsB,EAAEa,sBAJ1B;IAKE,+BAA+B,EAC7B,CAAArC,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAE8C,+BAAb,KAAgD9D,aAAa,CAACM,OAAd,CAAsBC,4BAN1E;IAQE,gCAAgC,EAC9B,CAAAS,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAE+C,gCAAb,KAAiD/D,aAAa,CAACM,OAAd,CAAsBE,6BAT3E;IAWE,qCAAqC,EACnC,CAAAQ,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEgD,qCAAb,KACAhE,aAAa,CAACM,OAAd,CAAsBG,mCAb1B;IAeE,0BAA0B,EACxB,CAAAO,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEiD,0BAAb,KAA2CjE,aAAa,CAACM,OAAd,CAAsBI,wBAhBrE;IAkBE,iBAAiB,EAAE,CAAAM,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEoC,iBAAb,KAAkCpD,aAAa,CAACM,OAAd,CAAsBK,YAlB7E;IAmBE,sBAAsB,EAAE,CAAAK,WAAW,SAAX,IAAAA,WAAW,WAAX,YAAAA,WAAW,CAAEkD,sBAAb,KAAuClE,aAAa,CAACM,OAAd,CAAsBM;EAnBvF,gBAqBE,oBAAC,oBAAD;IAAsB,SAAS,EAAEa;EAAjC,gBACE,oBAAC,uBAAD;IACE,WAAW,EAAER,gBAAgB,CAACkD,IADhC;IAEE,mBAAmB,EAAElD,gBAAgB,CAACmD,YAFxC;IAGE,gBAAgB,EAAEnD,gBAAgB,CAACoD,SAHrC;IAIE,YAAY,EAAEpD,gBAAgB,CAACqD;EAJjC,gBAME,oBAAC,kBAAD;IAAoB,KAAK,EAAE,CAAAnD,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEoD,KAAR,KAAiB7F;EAA5C,gBACE,oBAAC,mBAAD;IACE,eAAe,EAAE,CAAAyC,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEqD,eAAR,KAA2BhG,MAD9C;IAEE,iBAAiB,EAAE,CAAA2C,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEsD,uBAAR,KAAmC,MAFxD;IAGE,oBAAoB,EAAE,CAAAtD,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEuD,oBAAR,KAAgC;EAHxD,gBAKE,oBAAC,aAAD;IAAe,cAAc,EAAErD,KAAF,aAAEA,KAAF,uBAAEA,KAAK,CAAEsD;EAAtC,gBACE,oBAAC,mBAAD;IACE,eAAe,EAAErD,WAAF,aAAEA,WAAF,uBAAEA,WAAW,CAAEsD,eADhC;IAEE,qBAAqB,EAAEtD,WAAF,aAAEA,WAAF,uBAAEA,WAAW,CAAEuD,qBAFtC;IAGE,oBAAoB,EAAE,CAAA1D,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEuD,oBAAR,KAAgC;EAHxD,gBAKE,oBAAC,gBAAD,qBACE,oBAAC,mBAAD,CAAqB,QAArB,QACII,KAAD,IAAW;IACV,MAAMC,OAAO,GAAG,CAAAD,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEC,OAAP,KAAkBtD,gBAAlC;IACA,oBACE,oBAAC,cAAD;MACE,aAAa,EAAE;QACbuD,KAAK,EAAE;UAAEC,EAAE,EAAEF,OAAO,CAACG,MAAR,CAAeC;QAArB,CADM;QAEbC,MAAM,EAAE;UACNH,EAAE,EAAEF,OAAO,CAACG,MAAR,CAAeG,iBADb;UAENC,MAAM,EAAEP,OAAO,CAACG,MAAR,CAAeK,qBAFjB;UAGNC,WAAW,EAAET,OAAO,CAACG,MAAR,CAAeO;QAHtB;MAFK;IADjB,GAUG7B,cAAc,EAVjB,CADF;EAcD,CAjBH,CADF,CALF,CADF,CALF,CADF,CANF,CADF,CArBF,CADF,CADF;AAwED,CAxJD;;AA0JA,MAAMzB,kBAAkB,GAAG,CACzBpB,KADyB,EAEzBc,eAFyB,EAGzBO,aAHyB,KAItB;EACH,MAAMR,YAA+B,GAAG,EAAxC;EACA,IAAIU,OAAJ;EAEAA,OAAO,GAAGlE,QAAQ,CAACsH,IAAT,CAAc;IACtB3E,KADsB;IAEtB4E,OAAO,EAAE,CAAC,IAAItH,kBAAJ,EAAD,EAA2B,IAAIC,iBAAJ,EAA3B,CAFa;IAGtBsH,iBAAiB,EAAEC,OAAO,CAAChE,eAAD,CAHJ;IAItBiE,oBAAoB,EAAEjE,eAJA;IAKtBkE,WAAW,EAAE;EALS,CAAd,CAAV;;EAQA,IAAI3D,aAAJ,EAAmB;IACjBE,OAAO,GAAGF,aAAa,CAACE,OAAD,CAAvB;EACD;;EAED,IAAItC,aAAa,CAACJ,OAAlB,EAA2B;IACzB0C,OAAO,CAAC0D,YAAR,CAAqB,UAArB,EAAiChG,aAAa,CAACJ,OAA/C;EACD;;EAED,IAAII,aAAa,CAACG,QAAlB,EAA4B;IAC1BmC,OAAO,CAAC0D,YAAR,CAAqB,oBAArB,EAA2ChG,aAAa,CAACG,QAAzD;EACD;;EAED,IAAIL,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEmG,gBAAb,EAA+B;IAAA;;IAC7B,IAAI;MACF;MACA;MACA;MACA;MACA;MACAnG,OAAO,CAACmG,gBAAR,CAAyBpH,IAAzB;IACD,CAPD,CAOE,MAAM,CAAE;;IAEV,MAAMqH,QAAQ,GAAG,CAACC,QAAD,EAAuBC,YAAvB,KAA8D;MAC7E,IAAIC,SAAS,GAAG,CAAhB;MACA,MAAMC,WAAW,GAAGxG,OAAO,CAACmG,gBAAR,CAA0BM,KAAD,IAAW;QACtD,MAAMC,MAAM,GAAGX,OAAO,CAACU,KAAK,CAACE,WAAP,CAAP,IAA8BZ,OAAO,CAACU,KAAK,CAACG,mBAAP,CAApD,CADsD,CAGtD;QACA;QACA;;QACA,IAAIL,SAAS,KAAK,CAAlB,EAAqB;UACnBA,SAAS;UACT;QACD;;QAED,IAAIG,MAAM,IAAIJ,YAAY,KAAK,QAA/B,EAAyCD,QAAQ;QACjD,IAAI,CAACK,MAAD,IAAWJ,YAAY,KAAK,SAAhC,EAA2CD,QAAQ;MACpD,CAbmB,CAApB;MAcAvE,YAAY,CAAC+E,IAAb,CAAkBL,WAAlB;MACA,OAAOA,WAAP;IACD,CAlBD;;IAmBA,qCAAAhE,OAAO,EAACsE,iBAAR,+FAA6BC,QAAD,IAAcX,QAAQ,CAACW,QAAD,EAAW,QAAX,CAAlD;IACA,sCAAAvE,OAAO,EAACwE,kBAAR,gGAA8BC,SAAD,IAAeb,QAAQ,CAACa,SAAD,EAAY,SAAZ,CAApD;EACD;;EACD,OAAO;IAAEzE,OAAF;IAAWV;EAAX,CAAP;AACD,CA7DD;;AA+DA,eAAef,sBAAf"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getFileType } from '@sendbird/uikit-utils';
|
|
2
2
|
import SBUError from '../libs/SBUError';
|
|
3
3
|
import expoPermissionGranted from '../utils/expoPermissionGranted';
|
|
4
|
-
import
|
|
4
|
+
import normalizeFile from '../utils/normalizeFile';
|
|
5
5
|
|
|
6
6
|
const createExpoFileService = _ref => {
|
|
7
7
|
let {
|
|
@@ -70,13 +70,9 @@ const createExpoFileService = _ref => {
|
|
|
70
70
|
const {
|
|
71
71
|
size
|
|
72
72
|
} = await fsModule.getInfoAsync(response.uri);
|
|
73
|
-
|
|
74
|
-
const type = getFileType(ext);
|
|
75
|
-
return fileTypeGuard({
|
|
73
|
+
return normalizeFile({
|
|
76
74
|
uri,
|
|
77
|
-
size
|
|
78
|
-
type: `${type}/${ext.slice(1)}`,
|
|
79
|
-
name: Date.now() + ext
|
|
75
|
+
size
|
|
80
76
|
});
|
|
81
77
|
}
|
|
82
78
|
|
|
@@ -118,13 +114,9 @@ const createExpoFileService = _ref => {
|
|
|
118
114
|
const {
|
|
119
115
|
size
|
|
120
116
|
} = await fsModule.getInfoAsync(uri);
|
|
121
|
-
|
|
122
|
-
const type = getFileType(ext);
|
|
123
|
-
return [fileTypeGuard({
|
|
117
|
+
return [await normalizeFile({
|
|
124
118
|
uri,
|
|
125
|
-
size
|
|
126
|
-
type: `${type}/${ext.slice(1)}`,
|
|
127
|
-
name: Date.now() + ext
|
|
119
|
+
size
|
|
128
120
|
})];
|
|
129
121
|
}
|
|
130
122
|
|
|
@@ -140,7 +132,7 @@ const createExpoFileService = _ref => {
|
|
|
140
132
|
size,
|
|
141
133
|
name
|
|
142
134
|
} = response;
|
|
143
|
-
return
|
|
135
|
+
return normalizeFile({
|
|
144
136
|
uri,
|
|
145
137
|
size,
|
|
146
138
|
name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getFileExtension","getFileType","SBUError","expoPermissionGranted","fileTypeGuard","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryPermission","type","perms","getPermissionsAsync","requestMediaLibraryPermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","onOpenFailure","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","cancelled","uri","size","getInfoAsync","ext","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":["getFileType","SBUError","expoPermissionGranted","normalizeFile","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryPermission","type","perms","getPermissionsAsync","requestMediaLibraryPermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","onOpenFailure","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","cancelled","uri","size","getInfoAsync","openMediaLibrary","launchImageLibraryAsync","openDocument","getDocumentAsync","mimeType","name","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 { 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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"}
|