@sendbird/uikit-react-native 3.4.3 → 3.5.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/README.md +0 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +2 -1
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +2 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/contexts/ReactionCtx.js +2 -0
- package/lib/commonjs/contexts/ReactionCtx.js.map +1 -1
- package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/commonjs/libs/SBUUtils.js +4 -1
- package/lib/commonjs/libs/SBUUtils.js.map +1 -1
- package/lib/commonjs/platform/createFileService.expo.js +2 -2
- package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
- package/lib/commonjs/platform/createFileService.native.js +1 -4
- package/lib/commonjs/platform/createFileService.native.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +2 -1
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js +2 -1
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/contexts/ReactionCtx.js +2 -0
- package/lib/module/contexts/ReactionCtx.js.map +1 -1
- package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/module/libs/SBUUtils.js +4 -1
- package/lib/module/libs/SBUUtils.js.map +1 -1
- package/lib/module/platform/createFileService.expo.js +2 -2
- package/lib/module/platform/createFileService.expo.js.map +1 -1
- package/lib/module/platform/createFileService.native.js +1 -4
- package/lib/module/platform/createFileService.native.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +5 -4
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +6 -6
- package/src/components/ChannelMessageList/index.tsx +5 -1
- package/src/components/GroupChannelMessageRenderer/index.tsx +2 -1
- package/src/contexts/ReactionCtx.tsx +3 -0
- package/src/contexts/SendbirdChatCtx.tsx +5 -4
- package/src/libs/SBUUtils.ts +4 -1
- package/src/platform/createFileService.expo.ts +2 -2
- package/src/platform/createFileService.native.ts +1 -9
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_uikitUtils","_SBUError","_interopRequireDefault","_nativePermissionGranted","_normalizeFile","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_MEDIA_AUDIO","READ_MEDIA_IMAGES","READ_MEDIA_VIDEO","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","_ref","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","cameraPermissions","select","ios","IOS","CAMERA","MICROPHONE","android","mediaLibraryPermissions","MEDIA_LIBRARY","PHOTO_LIBRARY","NativeFileService","constructor","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","_response$assets","hasPermission","granted","_options$onOpenFailur","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","mediaType","didCancel","errorCode","_options$onOpenFailur2","DEVICE_UNAVAILABLE","Error","errorMessage","fileSize","size","uri","assets","normalizeFile","openMediaLibrary","selectionLimit","_options$onOpenFailur3","launchImageLibrary","_options$onOpenFailur4","Promise","all","slice","map","_ref2","openDocument","pickSingle","e","isCancel","isInProgress","_options$onOpenFailur5","UNKNOWN","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","Logger","error","createRecordFilePath","customExtension","arguments","length","Date","now","recordFilePath","startsWith","_default","exports"],"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 Logger,\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).catch(() => {\n Logger.error('Failed to save file to external storage. Retry saving to downloads directory instead.');\n return fsModule.FileSystem.cpExternal(downloadedPath, file.name, 'downloads');\n });\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 createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const filename = `record-${Date.now()}.${customExtension}`;\n const path = `${fsModule.Dirs.CacheDir}/${filename}`;\n return Platform.select({\n ios: {\n uri: path,\n recordFilePath: filename,\n },\n android: {\n uri: path.startsWith('file://') ? path : 'file://' + path,\n recordFilePath: path,\n },\n default: {\n uri: path,\n recordFilePath: path,\n },\n });\n }\n }\n\n return new NativeFileService();\n};\n\nexport default createNativeFileService;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_uikitUtils","_SBUError","_interopRequireDefault","_nativePermissionGranted","_normalizeFile","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_MEDIA_AUDIO","READ_MEDIA_IMAGES","READ_MEDIA_VIDEO","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","_ref","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","cameraPermissions","select","ios","IOS","CAMERA","MICROPHONE","android","mediaLibraryPermissions","PHOTO_LIBRARY","PHOTO_LIBRARY_ADD_ONLY","NativeFileService","constructor","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","requestMediaLibraryPermission","openCamera","_response$assets","hasPermission","granted","_options$onOpenFailur","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","mediaType","didCancel","errorCode","_options$onOpenFailur2","DEVICE_UNAVAILABLE","Error","errorMessage","fileSize","size","uri","assets","normalizeFile","openMediaLibrary","selectionLimit","_options$onOpenFailur3","launchImageLibrary","_options$onOpenFailur4","Promise","all","slice","map","_ref2","openDocument","pickSingle","e","isCancel","isInProgress","_options$onOpenFailur5","UNKNOWN","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","Logger","error","createRecordFilePath","customExtension","arguments","length","Date","now","recordFilePath","startsWith","_default","exports"],"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 Logger,\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.PHOTO_LIBRARY, permissionModule.PERMISSIONS.IOS.PHOTO_LIBRARY_ADD_ONLY],\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 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).catch(() => {\n Logger.error('Failed to save file to external storage. Retry saving to downloads directory instead.');\n return fsModule.FileSystem.cpExternal(downloadedPath, file.name, 'downloads');\n });\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 createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const filename = `record-${Date.now()}.${customExtension}`;\n const path = `${fsModule.Dirs.CacheDir}/${filename}`;\n return Platform.select({\n ios: {\n uri: path,\n recordFilePath: filename,\n },\n android: {\n uri: path.startsWith('file://') ? path : 'file://' + path,\n recordFilePath: path,\n },\n default: {\n uri: path,\n recordFilePath: path,\n },\n });\n }\n }\n\n return new NativeFileService();\n};\n\nexport default createNativeFileService;\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAOA,IAAAC,WAAA,GAAAD,OAAA;AASA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,wBAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,cAAA,GAAAF,sBAAA,CAAAH,OAAA;AAAmD,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,gBAAAH,GAAA,EAAAI,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAJ,GAAA,IAAAO,MAAA,CAAAC,cAAA,CAAAR,GAAA,EAAAI,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAX,GAAA,CAAAI,GAAA,IAAAC,KAAA,WAAAL,GAAA;AAAA,SAAAM,eAAAM,GAAA,QAAAR,GAAA,GAAAS,YAAA,CAAAD,GAAA,2BAAAR,GAAA,gBAAAA,GAAA,GAAAU,MAAA,CAAAV,GAAA;AAAA,SAAAS,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AAUnD,SAASU,sCAAsCA,CAACC,gBAAoC,EAAgB;EAClG,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE,OAAO,EAAE;EAExC,IAAID,qBAAQ,CAACE,OAAO,GAAG,EAAE,EAAE;IACzB,OAAO,CACLH,gBAAgB,CAACI,WAAW,CAACC,OAAO,CAACC,gBAAgB,EACrDN,gBAAgB,CAACI,WAAW,CAACC,OAAO,CAACE,iBAAiB,EACtDP,gBAAgB,CAACI,WAAW,CAACC,OAAO,CAACG,gBAAgB,CACtD;EACH;EAEA,IAAIP,qBAAQ,CAACE,OAAO,GAAG,EAAE,EAAE;IACzB,OAAO,CAACH,gBAAgB,CAACI,WAAW,CAACC,OAAO,CAACI,qBAAqB,CAAC;EACrE;EAEA,OAAO,CACLT,gBAAgB,CAACI,WAAW,CAACC,OAAO,CAACK,sBAAsB,EAC3DV,gBAAgB,CAACI,WAAW,CAACC,OAAO,CAACI,qBAAqB,CAC3D;AACH;AAEA,MAAME,uBAAuB,GAAGC,IAAA,IAYJ;EAAA,IAZK;IAC/BC,iBAAiB;IACjBC,oBAAoB;IACpBd,gBAAgB;IAChBe,kBAAkB;IAClBC;EAOF,CAAC,GAAAJ,IAAA;EACC,MAAMK,iBAA+B,GAAGhB,qBAAQ,CAACiB,MAAM,CAAC;IACtDC,GAAG,EAAE,CAACnB,gBAAgB,CAACI,WAAW,CAACgB,GAAG,CAACC,MAAM,EAAErB,gBAAgB,CAACI,WAAW,CAACgB,GAAG,CAACE,UAAU,CAAC;IAC3FC,OAAO,EAAE,CAACvB,gBAAgB,CAACI,WAAW,CAACC,OAAO,CAACgB,MAAM,CAAC;IACtD7C,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAMgD,uBAAqC,GAAGvB,qBAAQ,CAACiB,MAAM,CAAC;IAC5DC,GAAG,EAAE,CAACnB,gBAAgB,CAACI,WAAW,CAACgB,GAAG,CAACK,aAAa,EAAEzB,gBAAgB,CAACI,WAAW,CAACgB,GAAG,CAACM,sBAAsB,CAAC;IAC9GH,OAAO,EAAExB,sCAAsC,CAACC,gBAAgB,CAAC;IACjExB,OAAO,EAAE;EACX,CAAC,CAAC;EAEF,MAAMmD,iBAAiB,CAAiC;IAAAC,YAAA;MAAAnD,eAAA,4BAwI1B,MAAOoD,OAAoB,IAAK;QAC1D,MAAMC,OAAO,GAAG7B,qBAAQ,CAACiB,MAAM,CAAC;UAAEK,OAAO,EAAEP,QAAQ,CAACe,IAAI,CAACC,QAAQ;UAAExD,OAAO,EAAEwC,QAAQ,CAACe,IAAI,CAACE;QAAY,CAAC,CAAC;QACxG,MAAMC,OAAO,GAAG;UAAEJ,OAAO;UAAEK,QAAQ,EAAEN,OAAO,CAACO;QAAS,CAAC;QACvD,MAAMC,SAAS,GACb,IAAAC,4BAAgB,EAACT,OAAO,CAACO,QAAQ,CAAC,IAClC,IAAAG,oCAAwB,EAACV,OAAO,CAACW,QAAQ,CAAC,IAC1C,IAAAF,4BAAgB,EAACT,OAAO,CAACY,OAAO,CAAC,KAChC,MAAM,IAAAC,mCAAuB,EAACb,OAAO,CAACY,OAAO,CAAC,CAAC;QAElD,IAAIJ,SAAS,EAAEH,OAAO,CAACC,QAAQ,GAAG,IAAAQ,6BAAiB,EAACT,OAAO,CAACC,QAAQ,EAAEE,SAAS,CAAC;QAEhF,OAAO;UAAEO,IAAI,EAAG,GAAEV,OAAO,CAACJ,OAAQ,IAAGI,OAAO,CAACC,QAAS,EAAC;UAAE,GAAGD;QAAQ,CAAC;MACvE,CAAC;MAAAzD,eAAA,uBAEsB,MAAOoD,OAAoB,IAAK;QACrD,MAAM;UAAEe,IAAI;UAAET;QAAS,CAAC,GAAG,MAAM,IAAI,CAACU,iBAAiB,CAAChB,OAAO,CAAC;QAChE,MAAMb,QAAQ,CAAC8B,UAAU,CAACC,KAAK,CAAClB,OAAO,CAACY,OAAO,EAAE;UAAEG;QAAK,CAAC,CAAC;QAC1D,OAAO;UACLI,cAAc,EAAEJ,IAAI;UACpBK,IAAI,EAAE;YACJC,IAAI,EAAEf,QAAQ;YACdgB,IAAI,EAAE,IAAAC,uBAAW,EAAC,IAAAd,4BAAgB,EAACM,IAAI,CAAC;UAC1C;QACF,CAAC;MACH,CAAC;IAAA;IA/JD,MAAMS,mBAAmBA,CAAA,EAAqB;MAC5C,MAAMC,MAAM,GAAG,MAAMtD,gBAAgB,CAACuD,aAAa,CAACtC,iBAAiB,CAAC;MACtE,OAAO,IAAAuC,gCAAuB,EAACF,MAAM,CAAC;IACxC;IACA,MAAMG,uBAAuBA,CAAA,EAAqB;MAChD,MAAMH,MAAM,GAAG,MAAMtD,gBAAgB,CAAC0D,eAAe,CAACzC,iBAAiB,CAAC;MACxE,OAAO,IAAAuC,gCAAuB,EAACF,MAAM,CAAC;IACxC;IACA,MAAMK,yBAAyBA,CAAA,EAAqB;MAClD,MAAML,MAAM,GAAG,MAAMtD,gBAAgB,CAACuD,aAAa,CAAC/B,uBAAuB,CAAC;MAC5E,OAAO,IAAAgC,gCAAuB,EAACF,MAAM,CAAC;IACxC;IACA,MAAMM,6BAA6BA,CAAA,EAAqB;MACtD,MAAMN,MAAM,GAAG,MAAMtD,gBAAgB,CAAC0D,eAAe,CAAClC,uBAAuB,CAAC;MAC9E,OAAO,IAAAgC,gCAAuB,EAACF,MAAM,CAAC;IACxC;IAEA,MAAMO,UAAUA,CAAChC,OAA2B,EAA+B;MAAA,IAAAiC,gBAAA;MACzE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACV,mBAAmB,EAAE;MACtD,IAAI,CAACU,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACP,uBAAuB,EAAE;QACpD,IAAI,CAACO,OAAO,EAAE;UAAA,IAAAC,qBAAA;UACZpC,OAAO,aAAPA,OAAO,wBAAAoC,qBAAA,GAAPpC,OAAO,CAAEqC,aAAa,cAAAD,qBAAA,uBAAtBA,qBAAA,CAAArE,IAAA,CAAAiC,OAAO,EAAkBsC,iBAAQ,CAACC,kBAAkB,CAAC;UACrD,OAAO,IAAI;QACb;MACF;MAEA,MAAMC,QAAQ,GAAG,MAAMxD,iBAAiB,CAACyD,YAAY,CAAC;QACpDC,iBAAiB,EAAE,YAAY;QAC/BC,UAAU,EAAE,CAAA3C,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE2C,UAAU,KAAI,MAAM;QACzCC,SAAS,EAAE,CAAC,MAAM;UAChB,QAAQ5C,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE4C,SAAS;YACxB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,KAAK;cACR,OAAO,OAAO;YAChB;cACE,OAAO,OAAO;UAAC;QAErB,CAAC;MACH,CAAC,CAAC;MACF,IAAIJ,QAAQ,CAACK,SAAS,EAAE,OAAO,IAAI;MACnC,IAAIL,QAAQ,CAACM,SAAS,KAAK,oBAAoB,EAAE;QAAA,IAAAC,sBAAA;QAC/C/C,OAAO,aAAPA,OAAO,wBAAA+C,sBAAA,GAAP/C,OAAO,CAAEqC,aAAa,cAAAU,sBAAA,uBAAtBA,sBAAA,CAAAhF,IAAA,CAAAiC,OAAO,EAAkBsC,iBAAQ,CAACU,kBAAkB,EAAE,IAAIC,KAAK,CAACT,QAAQ,CAACU,YAAY,CAAC,CAAC;QACvF,OAAO,IAAI;MACb;MAEA,MAAM;QAAE3C,QAAQ,EAAEc,IAAI;QAAE8B,QAAQ,EAAEC,IAAI;QAAE9B,IAAI;QAAE+B;MAAI,CAAC,GAAG,EAAApB,gBAAA,GAAAO,QAAQ,CAACc,MAAM,cAAArB,gBAAA,uBAAfA,gBAAA,CAAkB,CAAC,CAAC,KAAI,CAAC,CAAC;MAChF,OAAO,IAAAsB,sBAAa,EAAC;QAAEF,GAAG;QAAED,IAAI;QAAE/B,IAAI;QAAEC;MAAK,CAAC,CAAC;IACjD;IACA,MAAMkC,gBAAgBA,CAACxD,OAAiC,EAAwC;MAC9F;AACN;AACA;AACA;MACM,MAAMyD,cAAc,GAAG,CAAAzD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEyD,cAAc,KAAI,CAAC;MACnD,MAAMvB,aAAa,GAAG,MAAM,IAAI,CAACJ,yBAAyB,EAAE;MAC5D,IAAI,CAACI,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACJ,6BAA6B,EAAE;QAC1D,IAAI,CAACI,OAAO,EAAE;UAAA,IAAAuB,sBAAA;UACZ1D,OAAO,aAAPA,OAAO,wBAAA0D,sBAAA,GAAP1D,OAAO,CAAEqC,aAAa,cAAAqB,sBAAA,uBAAtBA,sBAAA,CAAA3F,IAAA,CAAAiC,OAAO,EAAkBsC,iBAAQ,CAACC,kBAAkB,CAAC;UACrD,OAAO,IAAI;QACb;MACF;MAEA,MAAMC,QAAQ,GAAG,MAAMxD,iBAAiB,CAAC2E,kBAAkB,CAAC;QAC1DjB,iBAAiB,EAAE,YAAY;QAC/Be,cAAc;QACdb,SAAS,EAAE,CAAC,MAAM;UAChB,QAAQ5C,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE4C,SAAS;YACxB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,KAAK;cACR,OAAO,OAAO;YAChB;cACE,OAAO,OAAO;UAAC;QAErB,CAAC;MACH,CAAC,CAAC;MACF,IAAIJ,QAAQ,CAACK,SAAS,EAAE,OAAO,IAAI;MACnC,IAAIL,QAAQ,CAACM,SAAS,KAAK,oBAAoB,EAAE;QAAA,IAAAc,sBAAA;QAC/C5D,OAAO,aAAPA,OAAO,wBAAA4D,sBAAA,GAAP5D,OAAO,CAAEqC,aAAa,cAAAuB,sBAAA,uBAAtBA,sBAAA,CAAA7F,IAAA,CAAAiC,OAAO,EAAkBsC,iBAAQ,CAACU,kBAAkB,EAAE,IAAIC,KAAK,CAACT,QAAQ,CAACU,YAAY,CAAC,CAAC;QACvF,OAAO,IAAI;MACb;MAEA,OAAOW,OAAO,CAACC,GAAG,CAChB,CAACtB,QAAQ,CAACc,MAAM,IAAI,EAAE,EACnBS,KAAK,CAAC,CAAC,EAAEN,cAAc,CAAC,CACxBO,GAAG,CAACC,KAAA;QAAA,IAAC;UAAE1D,QAAQ,EAAEc,IAAI;UAAE8B,QAAQ,EAAEC,IAAI;UAAE9B,IAAI;UAAE+B;QAAI,CAAC,GAAAY,KAAA;QAAA,OAAK,IAAAV,sBAAa,EAAC;UAAEF,GAAG;UAAED,IAAI;UAAE/B,IAAI;UAAEC;QAAK,CAAC,CAAC;MAAA,EAAC,CACpG;IACH;IACA,MAAM4C,YAAYA,CAAClE,OAA6B,EAA+B;MAC7E,IAAI;QACF,MAAM;UAAEqD,GAAG;UAAED,IAAI;UAAE/B,IAAI;UAAEC;QAAK,CAAC,GAAG,MAAMrC,oBAAoB,CAACkF,UAAU,EAAE;QACzE,OAAO,IAAAZ,sBAAa,EAAC;UAAEF,GAAG;UAAED,IAAI;UAAE/B,IAAI;UAAEC;QAAK,CAAC,CAAC;MACjD,CAAC,CAAC,OAAO8C,CAAC,EAAE;QACV,IAAI,CAACnF,oBAAoB,CAACoF,QAAQ,CAACD,CAAC,CAAC,IAAInF,oBAAoB,CAACqF,YAAY,CAACF,CAAC,CAAC,EAAE;UAAA,IAAAG,sBAAA;UAC7EvE,OAAO,aAAPA,OAAO,wBAAAuE,sBAAA,GAAPvE,OAAO,CAAEqC,aAAa,cAAAkC,sBAAA,uBAAtBA,sBAAA,CAAAxG,IAAA,CAAAiC,OAAO,EAAkBsC,iBAAQ,CAACkC,OAAO,EAAEJ,CAAC,CAAC;QAC/C;QACA,OAAO,IAAI;MACb;IACF;IACA,MAAMK,IAAIA,CAACzE,OAAoB,EAAmB;MAChD,MAAMkC,aAAa,GAAG,MAAM,IAAI,CAACJ,yBAAyB,EAAE;MAC5D,IAAI,CAACI,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACJ,6BAA6B,EAAE;QAC1D,IAAI,CAACI,OAAO,EAAE,MAAM,IAAIc,KAAK,CAAC,wBAAwB,CAAC;MACzD;MAEA,MAAM;QAAE9B,cAAc;QAAEC;MAAK,CAAC,GAAG,MAAM,IAAI,CAACsD,YAAY,CAAC1E,OAAO,CAAC;MAEjE,IAAI5B,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;QACzB,IAAI+C,IAAI,CAACE,IAAI,KAAK,OAAO,IAAIF,IAAI,CAACE,IAAI,KAAK,OAAO,EAAE;UAClD,MAAMqD,YAAY,GAAG;YAAE,OAAO,EAAE,OAAO;YAAE,OAAO,EAAE;UAAQ,CAAU;UACpE,MAAM/B,SAAS,GAAG+B,YAAY,CAACvD,IAAI,CAACE,IAAI,CAAC;UACzC,MAAMpC,kBAAkB,CAACuF,IAAI,CAACtD,cAAc,EAAE;YAAEG,IAAI,EAAEsB;UAAU,CAAC,CAAC;QACpE;MACF;MAEA,IAAIxE,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;QAC7B,MAAMuG,cAAc,GAAG;UAAE,MAAM,EAAE,WAAW;UAAE,OAAO,EAAE,OAAO;UAAE,OAAO,EAAE,QAAQ;UAAE,OAAO,EAAE;QAAQ,CAAU;QAC9G,MAAMC,WAAW,GAAGD,cAAc,CAACxD,IAAI,CAACE,IAAI,CAAC;QAC7C,MAAMnC,QAAQ,CAAC8B,UAAU,CAAC6D,UAAU,CAAC3D,cAAc,EAAEC,IAAI,CAACC,IAAI,EAAEwD,WAAW,CAAC,CAACE,KAAK,CAAC,MAAM;UACvFC,kBAAM,CAACC,KAAK,CAAC,uFAAuF,CAAC;UACrG,OAAO9F,QAAQ,CAAC8B,UAAU,CAAC6D,UAAU,CAAC3D,cAAc,EAAEC,IAAI,CAACC,IAAI,EAAE,WAAW,CAAC;QAC/E,CAAC,CAAC;MACJ;MAEA,OAAOF,cAAc;IACvB;IA4BA+D,oBAAoBA,CAAA,EAAmE;MAAA,IAAlEC,eAAe,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAvH,SAAA,GAAAuH,SAAA,MAAG,KAAK;MAC1C,MAAM9E,QAAQ,GAAI,UAASgF,IAAI,CAACC,GAAG,EAAG,IAAGJ,eAAgB,EAAC;MAC1D,MAAMpE,IAAI,GAAI,GAAE5B,QAAQ,CAACe,IAAI,CAACC,QAAS,IAAGG,QAAS,EAAC;MACpD,OAAOlC,qBAAQ,CAACiB,MAAM,CAAC;QACrBC,GAAG,EAAE;UACH+D,GAAG,EAAEtC,IAAI;UACTyE,cAAc,EAAElF;QAClB,CAAC;QACDZ,OAAO,EAAE;UACP2D,GAAG,EAAEtC,IAAI,CAAC0E,UAAU,CAAC,SAAS,CAAC,GAAG1E,IAAI,GAAG,SAAS,GAAGA,IAAI;UACzDyE,cAAc,EAAEzE;QAClB,CAAC;QACDpE,OAAO,EAAE;UACP0G,GAAG,EAAEtC,IAAI;UACTyE,cAAc,EAAEzE;QAClB;MACF,CAAC,CAAC;IACJ;EACF;EAEA,OAAO,IAAIjB,iBAAiB,EAAE;AAChC,CAAC;AAAC,IAAA4F,QAAA,GAEa5G,uBAAuB;AAAA6G,OAAA,CAAAhJ,OAAA,GAAA+I,QAAA"}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.
|
|
1
|
+
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.5.1';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAO;AAAC,IAAAC,QAAA,GACTD,OAAO;AAAAE,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -278,9 +278,10 @@ const useCreateMessagePressActions = _ref3 => {
|
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
}
|
|
281
|
+
const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;
|
|
281
282
|
const bottomSheetItem = {
|
|
282
283
|
sheetItems,
|
|
283
|
-
HeaderComponent: shouldRenderReaction(channel,
|
|
284
|
+
HeaderComponent: shouldRenderReaction(channel, channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions)) ? _ref5 => {
|
|
284
285
|
let {
|
|
285
286
|
onClose
|
|
286
287
|
} = _ref5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","HeaderComponent","uikitWithAppInfo","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n } else {\n SBUUtils.openURL(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(channel, sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions)\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isGroupChannel","uikit","groupChannel","replyType","configs","uikitWithAppInfo","HeaderComponent","isSuper","enableReactionsSupergroup","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n } else {\n SBUUtils.openURL(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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"}
|
|
@@ -46,7 +46,8 @@ const GroupChannelMessageRenderer = _ref => {
|
|
|
46
46
|
groupWithNext
|
|
47
47
|
} = calcMessageGrouping(Boolean(enableMessageGrouping), message, prevMessage, nextMessage);
|
|
48
48
|
const reactionChildren = useIIFE(() => {
|
|
49
|
-
|
|
49
|
+
const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;
|
|
50
|
+
if (shouldRenderReaction(channel, channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions) && message.reactions && message.reactions.length > 0) {
|
|
50
51
|
return /*#__PURE__*/React.createElement(ReactionAddons.Message, {
|
|
51
52
|
channel: channel,
|
|
52
53
|
message: message
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useContext","useEffect","useRef","Box","GroupChannelMessage","Text","TypingIndicatorBubble","useUIKitTheme","calcMessageGrouping","getMessageType","isMyMessage","isVoiceMessage","shouldRenderParentMessage","shouldRenderReaction","useIIFE","VOICE_MESSAGE_META_ARRAY_DURATION_KEY","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","TypingIndicatorType","ReactionAddons","GroupChannelMessageDateSeparator","GroupChannelMessageFocusAnimation","GroupChannelMessageOutgoingStatus","GroupChannelMessageParentMessage","GroupChannelMessageRenderer","_ref","channel","message","onPress","onLongPress","onPressParentMessage","onShowUserProfile","enableMessageGrouping","focused","prevMessage","nextMessage","playerUnsubscribes","palette","sbOptions","currentUser","mentionManager","STRINGS","mediaService","playerService","groupWithPrev","groupWithNext","Boolean","reactionChildren","uikitWithAppInfo","groupChannel","enableReactions","reactions","length","createElement","Message","resetPlayer","current","forEach","unsubscribe","reset","variant","userId","messageProps","onPressURL","url","openURL","onPressAvatar","sender","onPressMentionedUser","mentionedUser","onToggleVoiceMessage","state","setState","sendingStatus","uri","pause","play","shouldSeekToTime","duration","currentTime","seekFinished","forPlayback","addPlaybackListener","_ref2","stopped","prevState","forState","addStateListener","status","push","seek","groupedWithPrev","groupedWithNext","children","parentMessage","childMessage","strings","edited","GROUP_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","senderName","nickname","LABELS","USER_NO_NAME","sentDate","MESSAGE_BUBBLE_TIME","fileName","isFileMessage","MESSAGE_BUBBLE_FILE_TITLE","unknownTitle","MESSAGE_BUBBLE_UNKNOWN_TITLE","unknownDescription","MESSAGE_BUBBLE_UNKNOWN_DESC","userMessageProps","renderRegexTextChildren","shouldUseMentionedMessageTemplate","uikit","enableMention","mentionedMessageTemplate","regexTextPatterns","regex","templateRegex","replacer","_ref3","_message$mentionedUse","match","groups","parentProps","index","keyPrefix","user","mentionedUsers","find","it","mentionColor","onBackgroundLight01","color","_extends","key","_messageProps$onPress","call","style","fontWeight","backgroundColor","highlight","asMentionedMessageText","renderMessage","Admin","ogMetaData","enableOgtag","OpenGraphUser","User","File","ImageFile","VideoFile","fetchThumbnailFromVideoSource","getVideoThumbnail","timeMills","VoiceFile","durationMetaArrayKey","onUnmount","Unknown","messageGap","isAdminMessage","paddingHorizontal","marginBottom","GroupChannelTypingIndicatorBubble","publish","PubSub","typingUsers","TypingIndicator","shouldRenderBubble","enableTypingIndicator","typingIndicatorTypes","has","Bubble","type","marginTop","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef } from 'react';\n\nimport type { GroupChannelMessageProps, RegexTextPattern } from '@sendbird/uikit-react-native-foundation';\nimport {\n Box,\n GroupChannelMessage,\n Text,\n TypingIndicatorBubble,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdAdminMessage,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n calcMessageGrouping,\n getMessageType,\n isMyMessage,\n isVoiceMessage,\n shouldRenderParentMessage,\n shouldRenderReaction,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { VOICE_MESSAGE_META_ARRAY_DURATION_KEY } from '../../constants';\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport type { GroupChannelProps } from '../../domain/groupChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport { TypingIndicatorType } from '../../types';\nimport { ReactionAddons } from '../ReactionAddons';\nimport GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator';\nimport GroupChannelMessageFocusAnimation from './GroupChannelMessageFocusAnimation';\nimport GroupChannelMessageOutgoingStatus from './GroupChannelMessageOutgoingStatus';\nimport GroupChannelMessageParentMessage from './GroupChannelMessageParentMessage';\n\nconst GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({\n channel,\n message,\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile,\n enableMessageGrouping,\n focused,\n prevMessage,\n nextMessage,\n}) => {\n const playerUnsubscribes = useRef<(() => void)[]>([]);\n const { palette } = useUIKitTheme();\n const { sbOptions, currentUser, mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { mediaService, playerService } = usePlatformService();\n const { groupWithPrev, groupWithNext } = calcMessageGrouping(\n Boolean(enableMessageGrouping),\n message,\n prevMessage,\n nextMessage,\n );\n\n const reactionChildren = useIIFE(() => {\n if (\n shouldRenderReaction(channel, sbOptions.uikitWithAppInfo.groupChannel.channel.enableReactions) &&\n message.reactions &&\n message.reactions.length > 0\n ) {\n return <ReactionAddons.Message channel={channel} message={message} />;\n }\n return null;\n });\n\n const resetPlayer = async () => {\n playerUnsubscribes.current.forEach((unsubscribe) => {\n try {\n unsubscribe();\n } catch {}\n });\n playerUnsubscribes.current.length = 0;\n await playerService.reset();\n };\n\n const variant = isMyMessage(message, currentUser?.userId) ? 'outgoing' : 'incoming';\n\n const messageProps: Omit<GroupChannelMessageProps<SendbirdMessage>, 'message'> = {\n channel,\n variant,\n onPress,\n onLongPress,\n onPressURL: (url) => SBUUtils.openURL(url),\n onPressAvatar: () => {\n if ('sender' in message) onShowUserProfile?.(message.sender);\n },\n onPressMentionedUser: (mentionedUser) => {\n if (mentionedUser) onShowUserProfile?.(mentionedUser);\n },\n onToggleVoiceMessage: async (state, setState) => {\n if (isVoiceMessage(message) && message.sendingStatus === 'succeeded') {\n if (playerService.uri === message.url) {\n if (playerService.state === 'playing') {\n await playerService.pause();\n } else {\n await playerService.play(message.url);\n }\n } else {\n if (playerService.state !== 'idle') {\n await resetPlayer();\n }\n\n const shouldSeekToTime = state.duration > state.currentTime && state.currentTime > 0;\n let seekFinished = !shouldSeekToTime;\n\n const forPlayback = playerService.addPlaybackListener(({ stopped, currentTime, duration }) => {\n if (seekFinished) {\n setState((prevState) => ({ ...prevState, currentTime: stopped ? 0 : currentTime, duration }));\n }\n });\n const forState = playerService.addStateListener((state) => {\n switch (state) {\n case 'preparing':\n setState((prevState) => ({ ...prevState, status: 'preparing' }));\n break;\n case 'playing':\n setState((prevState) => ({ ...prevState, status: 'playing' }));\n break;\n case 'idle':\n case 'paused': {\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n case 'stopped':\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n });\n playerUnsubscribes.current.push(forPlayback, forState);\n\n await playerService.play(message.url);\n if (shouldSeekToTime) {\n await playerService.seek(state.currentTime);\n seekFinished = true;\n }\n }\n }\n },\n groupedWithPrev: groupWithPrev,\n groupedWithNext: groupWithNext,\n children: reactionChildren,\n sendingStatus: isMyMessage(message, currentUser?.userId) ? (\n <GroupChannelMessageOutgoingStatus channel={channel} message={message} />\n ) : null,\n parentMessage: shouldRenderParentMessage(message) ? (\n <GroupChannelMessageParentMessage\n channel={channel}\n message={message.parentMessage}\n variant={variant}\n childMessage={message}\n onPress={onPressParentMessage}\n />\n ) : null,\n strings: {\n edited: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,\n senderName: ('sender' in message && message.sender.nickname) || STRINGS.LABELS.USER_NO_NAME,\n sentDate: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_TIME(message),\n fileName: message.isFileMessage() ? STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '',\n unknownTitle: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message),\n unknownDescription: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message),\n },\n };\n\n const userMessageProps: {\n renderRegexTextChildren: (message: SendbirdUserMessage) => string;\n regexTextPatterns: RegexTextPattern[];\n } = {\n renderRegexTextChildren: (message) => {\n if (\n mentionManager.shouldUseMentionedMessageTemplate(message, sbOptions.uikit.groupChannel.channel.enableMention)\n ) {\n return message.mentionedMessageTemplate;\n } else {\n return message.message;\n }\n },\n regexTextPatterns: [\n {\n regex: mentionManager.templateRegex,\n replacer({ match, groups, parentProps, index, keyPrefix }) {\n const user = message.mentionedUsers?.find((it) => it.userId === groups[2]);\n if (user) {\n const mentionColor =\n !isMyMessage(message, currentUser?.userId) && user.userId === currentUser?.userId\n ? palette.onBackgroundLight01\n : parentProps?.color;\n\n return (\n <Text\n {...parentProps}\n key={`${keyPrefix}-${index}`}\n color={mentionColor}\n onPress={() => messageProps.onPressMentionedUser?.(user)}\n onLongPress={messageProps.onLongPress}\n style={[\n parentProps?.style,\n { fontWeight: '700' },\n user.userId === currentUser?.userId && { backgroundColor: palette.highlight },\n ]}\n >\n {`${mentionManager.asMentionedMessageText(user)}`}\n </Text>\n );\n }\n return match;\n },\n },\n ],\n };\n\n const renderMessage = () => {\n switch (getMessageType(message)) {\n case 'admin': {\n return <GroupChannelMessage.Admin message={message as SendbirdAdminMessage} {...messageProps} />;\n }\n case 'user':\n case 'user.opengraph': {\n if (message.ogMetaData && sbOptions.uikitWithAppInfo.groupChannel.channel.enableOgtag) {\n return (\n <GroupChannelMessage.OpenGraphUser\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n } else {\n return (\n <GroupChannelMessage.User\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n }\n }\n case 'file':\n case 'file.audio': {\n return <GroupChannelMessage.File message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.image': {\n return <GroupChannelMessage.ImageFile message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.video': {\n return (\n <GroupChannelMessage.VideoFile\n message={message as SendbirdFileMessage}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n {...messageProps}\n />\n );\n }\n case 'file.voice': {\n return (\n <GroupChannelMessage.VoiceFile\n message={message as SendbirdFileMessage}\n durationMetaArrayKey={VOICE_MESSAGE_META_ARRAY_DURATION_KEY}\n onUnmount={() => {\n if (isVoiceMessage(message) && playerService.uri === message.url) {\n resetPlayer();\n }\n }}\n {...messageProps}\n />\n );\n }\n case 'unknown':\n default: {\n return <GroupChannelMessage.Unknown message={message} {...messageProps} />;\n }\n }\n };\n\n const messageGap = useIIFE(() => {\n if (message.isAdminMessage()) {\n if (nextMessage?.isAdminMessage()) {\n return 8;\n } else {\n return 16;\n }\n } else if (nextMessage && shouldRenderParentMessage(nextMessage)) {\n return 16;\n } else if (groupWithNext) {\n return 2;\n } else {\n return 16;\n }\n });\n\n return (\n <Box paddingHorizontal={16} marginBottom={messageGap}>\n <GroupChannelMessageDateSeparator message={message} prevMessage={prevMessage} />\n <GroupChannelMessageFocusAnimation focused={focused}>{renderMessage()}</GroupChannelMessageFocusAnimation>\n </Box>\n );\n};\n\nexport const GroupChannelTypingIndicatorBubble = () => {\n const { sbOptions } = useSendbirdChat();\n const { publish } = useContext(GroupChannelContexts.PubSub);\n const { typingUsers } = useContext(GroupChannelContexts.TypingIndicator);\n\n const shouldRenderBubble = useIIFE(() => {\n if (typingUsers.length === 0) return false;\n if (!sbOptions.uikit.groupChannel.channel.enableTypingIndicator) return false;\n if (!sbOptions.uikit.groupChannel.channel.typingIndicatorTypes.has(TypingIndicatorType.Bubble)) return false;\n return true;\n });\n\n useEffect(() => {\n if (shouldRenderBubble) publish({ type: 'TYPING_BUBBLE_RENDERED' });\n }, [shouldRenderBubble]);\n\n if (!shouldRenderBubble) return null;\n return (\n <Box paddingHorizontal={16} marginTop={4} marginBottom={16}>\n <TypingIndicatorBubble typingUsers={typingUsers} />\n </Box>\n );\n};\n\nexport default React.memo(GroupChannelMessageRenderer);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useContext","useEffect","useRef","Box","GroupChannelMessage","Text","TypingIndicatorBubble","useUIKitTheme","calcMessageGrouping","getMessageType","isMyMessage","isVoiceMessage","shouldRenderParentMessage","shouldRenderReaction","useIIFE","VOICE_MESSAGE_META_ARRAY_DURATION_KEY","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","TypingIndicatorType","ReactionAddons","GroupChannelMessageDateSeparator","GroupChannelMessageFocusAnimation","GroupChannelMessageOutgoingStatus","GroupChannelMessageParentMessage","GroupChannelMessageRenderer","_ref","channel","message","onPress","onLongPress","onPressParentMessage","onShowUserProfile","enableMessageGrouping","focused","prevMessage","nextMessage","playerUnsubscribes","palette","sbOptions","currentUser","mentionManager","STRINGS","mediaService","playerService","groupWithPrev","groupWithNext","Boolean","reactionChildren","configs","uikitWithAppInfo","groupChannel","isSuper","enableReactionsSupergroup","enableReactions","reactions","length","createElement","Message","resetPlayer","current","forEach","unsubscribe","reset","variant","userId","messageProps","onPressURL","url","openURL","onPressAvatar","sender","onPressMentionedUser","mentionedUser","onToggleVoiceMessage","state","setState","sendingStatus","uri","pause","play","shouldSeekToTime","duration","currentTime","seekFinished","forPlayback","addPlaybackListener","_ref2","stopped","prevState","forState","addStateListener","status","push","seek","groupedWithPrev","groupedWithNext","children","parentMessage","childMessage","strings","edited","GROUP_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","senderName","nickname","LABELS","USER_NO_NAME","sentDate","MESSAGE_BUBBLE_TIME","fileName","isFileMessage","MESSAGE_BUBBLE_FILE_TITLE","unknownTitle","MESSAGE_BUBBLE_UNKNOWN_TITLE","unknownDescription","MESSAGE_BUBBLE_UNKNOWN_DESC","userMessageProps","renderRegexTextChildren","shouldUseMentionedMessageTemplate","uikit","enableMention","mentionedMessageTemplate","regexTextPatterns","regex","templateRegex","replacer","_ref3","_message$mentionedUse","match","groups","parentProps","index","keyPrefix","user","mentionedUsers","find","it","mentionColor","onBackgroundLight01","color","_extends","key","_messageProps$onPress","call","style","fontWeight","backgroundColor","highlight","asMentionedMessageText","renderMessage","Admin","ogMetaData","enableOgtag","OpenGraphUser","User","File","ImageFile","VideoFile","fetchThumbnailFromVideoSource","getVideoThumbnail","timeMills","VoiceFile","durationMetaArrayKey","onUnmount","Unknown","messageGap","isAdminMessage","paddingHorizontal","marginBottom","GroupChannelTypingIndicatorBubble","publish","PubSub","typingUsers","TypingIndicator","shouldRenderBubble","enableTypingIndicator","typingIndicatorTypes","has","Bubble","type","marginTop","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef } from 'react';\n\nimport type { GroupChannelMessageProps, RegexTextPattern } from '@sendbird/uikit-react-native-foundation';\nimport {\n Box,\n GroupChannelMessage,\n Text,\n TypingIndicatorBubble,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdAdminMessage,\n SendbirdFileMessage,\n SendbirdMessage,\n SendbirdUserMessage,\n calcMessageGrouping,\n getMessageType,\n isMyMessage,\n isVoiceMessage,\n shouldRenderParentMessage,\n shouldRenderReaction,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { VOICE_MESSAGE_META_ARRAY_DURATION_KEY } from '../../constants';\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport type { GroupChannelProps } from '../../domain/groupChannel/types';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport { TypingIndicatorType } from '../../types';\nimport { ReactionAddons } from '../ReactionAddons';\nimport GroupChannelMessageDateSeparator from './GroupChannelMessageDateSeparator';\nimport GroupChannelMessageFocusAnimation from './GroupChannelMessageFocusAnimation';\nimport GroupChannelMessageOutgoingStatus from './GroupChannelMessageOutgoingStatus';\nimport GroupChannelMessageParentMessage from './GroupChannelMessageParentMessage';\n\nconst GroupChannelMessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({\n channel,\n message,\n onPress,\n onLongPress,\n onPressParentMessage,\n onShowUserProfile,\n enableMessageGrouping,\n focused,\n prevMessage,\n nextMessage,\n}) => {\n const playerUnsubscribes = useRef<(() => void)[]>([]);\n const { palette } = useUIKitTheme();\n const { sbOptions, currentUser, mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { mediaService, playerService } = usePlatformService();\n const { groupWithPrev, groupWithNext } = calcMessageGrouping(\n Boolean(enableMessageGrouping),\n message,\n prevMessage,\n nextMessage,\n );\n\n const reactionChildren = useIIFE(() => {\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n if (\n shouldRenderReaction(channel, channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions) &&\n message.reactions &&\n message.reactions.length > 0\n ) {\n return <ReactionAddons.Message channel={channel} message={message} />;\n }\n return null;\n });\n\n const resetPlayer = async () => {\n playerUnsubscribes.current.forEach((unsubscribe) => {\n try {\n unsubscribe();\n } catch {}\n });\n playerUnsubscribes.current.length = 0;\n await playerService.reset();\n };\n\n const variant = isMyMessage(message, currentUser?.userId) ? 'outgoing' : 'incoming';\n\n const messageProps: Omit<GroupChannelMessageProps<SendbirdMessage>, 'message'> = {\n channel,\n variant,\n onPress,\n onLongPress,\n onPressURL: (url) => SBUUtils.openURL(url),\n onPressAvatar: () => {\n if ('sender' in message) onShowUserProfile?.(message.sender);\n },\n onPressMentionedUser: (mentionedUser) => {\n if (mentionedUser) onShowUserProfile?.(mentionedUser);\n },\n onToggleVoiceMessage: async (state, setState) => {\n if (isVoiceMessage(message) && message.sendingStatus === 'succeeded') {\n if (playerService.uri === message.url) {\n if (playerService.state === 'playing') {\n await playerService.pause();\n } else {\n await playerService.play(message.url);\n }\n } else {\n if (playerService.state !== 'idle') {\n await resetPlayer();\n }\n\n const shouldSeekToTime = state.duration > state.currentTime && state.currentTime > 0;\n let seekFinished = !shouldSeekToTime;\n\n const forPlayback = playerService.addPlaybackListener(({ stopped, currentTime, duration }) => {\n if (seekFinished) {\n setState((prevState) => ({ ...prevState, currentTime: stopped ? 0 : currentTime, duration }));\n }\n });\n const forState = playerService.addStateListener((state) => {\n switch (state) {\n case 'preparing':\n setState((prevState) => ({ ...prevState, status: 'preparing' }));\n break;\n case 'playing':\n setState((prevState) => ({ ...prevState, status: 'playing' }));\n break;\n case 'idle':\n case 'paused': {\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n case 'stopped':\n setState((prevState) => ({ ...prevState, status: 'paused' }));\n break;\n }\n });\n playerUnsubscribes.current.push(forPlayback, forState);\n\n await playerService.play(message.url);\n if (shouldSeekToTime) {\n await playerService.seek(state.currentTime);\n seekFinished = true;\n }\n }\n }\n },\n groupedWithPrev: groupWithPrev,\n groupedWithNext: groupWithNext,\n children: reactionChildren,\n sendingStatus: isMyMessage(message, currentUser?.userId) ? (\n <GroupChannelMessageOutgoingStatus channel={channel} message={message} />\n ) : null,\n parentMessage: shouldRenderParentMessage(message) ? (\n <GroupChannelMessageParentMessage\n channel={channel}\n message={message.parentMessage}\n variant={variant}\n childMessage={message}\n onPress={onPressParentMessage}\n />\n ) : null,\n strings: {\n edited: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX,\n senderName: ('sender' in message && message.sender.nickname) || STRINGS.LABELS.USER_NO_NAME,\n sentDate: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_TIME(message),\n fileName: message.isFileMessage() ? STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '',\n unknownTitle: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message),\n unknownDescription: STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message),\n },\n };\n\n const userMessageProps: {\n renderRegexTextChildren: (message: SendbirdUserMessage) => string;\n regexTextPatterns: RegexTextPattern[];\n } = {\n renderRegexTextChildren: (message) => {\n if (\n mentionManager.shouldUseMentionedMessageTemplate(message, sbOptions.uikit.groupChannel.channel.enableMention)\n ) {\n return message.mentionedMessageTemplate;\n } else {\n return message.message;\n }\n },\n regexTextPatterns: [\n {\n regex: mentionManager.templateRegex,\n replacer({ match, groups, parentProps, index, keyPrefix }) {\n const user = message.mentionedUsers?.find((it) => it.userId === groups[2]);\n if (user) {\n const mentionColor =\n !isMyMessage(message, currentUser?.userId) && user.userId === currentUser?.userId\n ? palette.onBackgroundLight01\n : parentProps?.color;\n\n return (\n <Text\n {...parentProps}\n key={`${keyPrefix}-${index}`}\n color={mentionColor}\n onPress={() => messageProps.onPressMentionedUser?.(user)}\n onLongPress={messageProps.onLongPress}\n style={[\n parentProps?.style,\n { fontWeight: '700' },\n user.userId === currentUser?.userId && { backgroundColor: palette.highlight },\n ]}\n >\n {`${mentionManager.asMentionedMessageText(user)}`}\n </Text>\n );\n }\n return match;\n },\n },\n ],\n };\n\n const renderMessage = () => {\n switch (getMessageType(message)) {\n case 'admin': {\n return <GroupChannelMessage.Admin message={message as SendbirdAdminMessage} {...messageProps} />;\n }\n case 'user':\n case 'user.opengraph': {\n if (message.ogMetaData && sbOptions.uikitWithAppInfo.groupChannel.channel.enableOgtag) {\n return (\n <GroupChannelMessage.OpenGraphUser\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n } else {\n return (\n <GroupChannelMessage.User\n message={message as SendbirdUserMessage}\n {...userMessageProps}\n {...messageProps}\n />\n );\n }\n }\n case 'file':\n case 'file.audio': {\n return <GroupChannelMessage.File message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.image': {\n return <GroupChannelMessage.ImageFile message={message as SendbirdFileMessage} {...messageProps} />;\n }\n case 'file.video': {\n return (\n <GroupChannelMessage.VideoFile\n message={message as SendbirdFileMessage}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n {...messageProps}\n />\n );\n }\n case 'file.voice': {\n return (\n <GroupChannelMessage.VoiceFile\n message={message as SendbirdFileMessage}\n durationMetaArrayKey={VOICE_MESSAGE_META_ARRAY_DURATION_KEY}\n onUnmount={() => {\n if (isVoiceMessage(message) && playerService.uri === message.url) {\n resetPlayer();\n }\n }}\n {...messageProps}\n />\n );\n }\n case 'unknown':\n default: {\n return <GroupChannelMessage.Unknown message={message} {...messageProps} />;\n }\n }\n };\n\n const messageGap = useIIFE(() => {\n if (message.isAdminMessage()) {\n if (nextMessage?.isAdminMessage()) {\n return 8;\n } else {\n return 16;\n }\n } else if (nextMessage && shouldRenderParentMessage(nextMessage)) {\n return 16;\n } else if (groupWithNext) {\n return 2;\n } else {\n return 16;\n }\n });\n\n return (\n <Box paddingHorizontal={16} marginBottom={messageGap}>\n <GroupChannelMessageDateSeparator message={message} prevMessage={prevMessage} />\n <GroupChannelMessageFocusAnimation focused={focused}>{renderMessage()}</GroupChannelMessageFocusAnimation>\n </Box>\n );\n};\n\nexport const GroupChannelTypingIndicatorBubble = () => {\n const { sbOptions } = useSendbirdChat();\n const { publish } = useContext(GroupChannelContexts.PubSub);\n const { typingUsers } = useContext(GroupChannelContexts.TypingIndicator);\n\n const shouldRenderBubble = useIIFE(() => {\n if (typingUsers.length === 0) return false;\n if (!sbOptions.uikit.groupChannel.channel.enableTypingIndicator) return false;\n if (!sbOptions.uikit.groupChannel.channel.typingIndicatorTypes.has(TypingIndicatorType.Bubble)) return false;\n return true;\n });\n\n useEffect(() => {\n if (shouldRenderBubble) publish({ type: 'TYPING_BUBBLE_RENDERED' });\n }, [shouldRenderBubble]);\n\n if (!shouldRenderBubble) return null;\n return (\n <Box paddingHorizontal={16} marginTop={4} marginBottom={16}>\n <TypingIndicatorBubble typingUsers={typingUsers} />\n </Box>\n );\n};\n\nexport default React.memo(GroupChannelMessageRenderer);\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useContext","useReducer","useRef","useState","NOOP","ReactionBottomSheets","LocalizationContext","SendbirdChatContext","UserProfileContext","ReactionContext","createContext","ReactionProvider","_ref","children","onPressUserProfile","chatCtx","localizationCtx","userProfileCtx","Error","state","setState","prev","next","reactionListVisible","setReactionListVisible","reactionUserListVisible","setReactionUserListVisible","reactionUserListFocusIndex","setReactionUserListFocusIndex","closeResolver","openReactionList","params","openReactionUserList","_ref2","channel","message","focusIndex","updateReactionFocusedItem","createOnCloseWithResolver","callback","Promise","resolve","current","reactionCtx","sheetProps","show","onDismiss","_closeResolver$curren","call","createElement","Provider","value","UserList","_extends","visible","onClose","ReactionList"],"sources":["ReactionCtx.tsx"],"sourcesContent":["import React, { useCallback, useContext, useReducer, useRef, useState } from 'react';\n\nimport type { SendbirdBaseChannel, SendbirdBaseMessage } from '@sendbird/uikit-utils';\nimport { NOOP } from '@sendbird/uikit-utils';\n\nimport { ReactionBottomSheetProps, ReactionBottomSheets } from '../components/ReactionBottomSheets';\nimport { LocalizationContext } from '../contexts/LocalizationCtx';\nimport { SendbirdChatContext } from '../contexts/SendbirdChatCtx';\nimport { UserProfileContext } from '../contexts/UserProfileCtx';\n\ntype State = {\n message?: SendbirdBaseMessage;\n channel?: SendbirdBaseChannel;\n};\nexport type ReactionContextType = {\n openReactionList(param: Required<State>): void;\n openReactionUserList(param: Required<State> & { focusIndex?: number }): void;\n updateReactionFocusedItem(param?: State): void;\n focusIndex: number;\n} & State;\n\ntype Props = React.PropsWithChildren<{\n onPressUserProfile?: ReactionBottomSheetProps['onPressUserProfile'];\n}>;\n\nexport const ReactionContext = React.createContext<ReactionContextType | null>(null);\nexport const ReactionProvider = ({ children, onPressUserProfile }: Props) => {\n const chatCtx = useContext(SendbirdChatContext);\n const localizationCtx = useContext(LocalizationContext);\n const userProfileCtx = useContext(UserProfileContext);\n if (!chatCtx) throw new Error('SendbirdChatContext is not provided');\n if (!localizationCtx) throw new Error('LocalizationContext is not provided');\n if (!userProfileCtx) throw new Error('UserProfileContext is not provided');\n\n const [state, setState] = useReducer((prev: State, next: State) => ({ ...prev, ...next }), {});\n const [reactionListVisible, setReactionListVisible] = useState(false);\n const [reactionUserListVisible, setReactionUserListVisible] = useState(false);\n const [reactionUserListFocusIndex, setReactionUserListFocusIndex] = useState(0);\n\n const closeResolver = useRef<() => void>(NOOP);\n\n const openReactionList: ReactionContextType['openReactionList'] = useCallback((params) => {\n setState(params);\n setReactionListVisible(true);\n }, []);\n\n const openReactionUserList: ReactionContextType['openReactionUserList'] = useCallback(\n ({ channel, message, focusIndex = 0 }) => {\n setState({ channel, message });\n setReactionUserListFocusIndex(focusIndex);\n setReactionUserListVisible(true);\n },\n [],\n );\n\n const updateReactionFocusedItem: ReactionContextType['updateReactionFocusedItem'] = useCallback((params) => {\n if (params) setState(params);\n else setState({});\n }, []);\n\n const createOnCloseWithResolver = (callback: () => void) => {\n return () => {\n return new Promise<void>((resolve) => {\n closeResolver.current = resolve;\n callback();\n });\n };\n };\n\n const reactionCtx = {\n ...state,\n openReactionList,\n openReactionUserList,\n updateReactionFocusedItem,\n focusIndex: reactionUserListFocusIndex,\n };\n\n const sheetProps: Omit<ReactionBottomSheetProps, 'visible' | 'onClose'> = {\n chatCtx,\n reactionCtx,\n localizationCtx,\n onPressUserProfile: onPressUserProfile ?? userProfileCtx.show,\n onDismiss: () => {\n setState({});\n closeResolver.current?.();\n },\n };\n\n return (\n <ReactionContext.Provider value={reactionCtx}>\n {children}\n <ReactionBottomSheets.UserList\n {...sheetProps}\n visible={reactionUserListVisible}\n onClose={createOnCloseWithResolver(() => setReactionUserListVisible(false))}\n />\n <ReactionBottomSheets.ReactionList\n {...sheetProps}\n visible={reactionListVisible}\n onClose={createOnCloseWithResolver(() => setReactionListVisible(false))}\n />\n </ReactionContext.Provider>\n );\n};\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,UAAU,EAAEC,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAGpF,SAASC,IAAI,QAAQ,uBAAuB;AAE5C,SAAmCC,oBAAoB,QAAQ,oCAAoC;AACnG,SAASC,mBAAmB,QAAQ,6BAA6B;AACjE,SAASC,mBAAmB,QAAQ,6BAA6B;AACjE,SAASC,kBAAkB,QAAQ,4BAA4B;AAiB/D,OAAO,MAAMC,eAAe,gBAAGX,KAAK,CAACY,aAAa,CAA6B,IAAI,CAAC;AACpF,OAAO,MAAMC,gBAAgB,GAAGC,IAAA,IAA6C;EAAA,IAA5C;IAAEC,QAAQ;IAAEC;EAA0B,CAAC,GAAAF,IAAA;EACtE,MAAMG,OAAO,GAAGf,UAAU,CAACO,mBAAmB,CAAC;EAC/C,MAAMS,eAAe,GAAGhB,UAAU,CAACM,mBAAmB,CAAC;EACvD,MAAMW,cAAc,GAAGjB,UAAU,CAACQ,kBAAkB,CAAC;EACrD,IAAI,CAACO,OAAO,EAAE,MAAM,IAAIG,KAAK,CAAC,qCAAqC,CAAC;EACpE,IAAI,CAACF,eAAe,EAAE,MAAM,IAAIE,KAAK,CAAC,qCAAqC,CAAC;EAC5E,IAAI,CAACD,cAAc,EAAE,MAAM,IAAIC,KAAK,CAAC,oCAAoC,CAAC;EAE1E,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGnB,UAAU,CAAC,CAACoB,IAAW,EAAEC,IAAW,MAAM;IAAE,GAAGD,IAAI;IAAE,GAAGC;EAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC9F,MAAM,CAACC,mBAAmB,EAAEC,sBAAsB,CAAC,GAAGrB,QAAQ,CAAC,KAAK,CAAC;EACrE,MAAM,CAACsB,uBAAuB,EAAEC,0BAA0B,CAAC,GAAGvB,QAAQ,CAAC,KAAK,CAAC;EAC7E,MAAM,CAACwB,0BAA0B,EAAEC,6BAA6B,CAAC,GAAGzB,QAAQ,CAAC,CAAC,CAAC;EAE/E,MAAM0B,aAAa,GAAG3B,MAAM,CAAaE,IAAI,CAAC;EAE9C,MAAM0B,gBAAyD,GAAG/B,WAAW,CAAEgC,MAAM,IAAK;IACxFX,QAAQ,CAACW,MAAM,CAAC;IAChBP,sBAAsB,CAAC,IAAI,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMQ,oBAAiE,GAAGjC,WAAW,CACnFkC,KAAA,IAA0C;IAAA,IAAzC;MAAEC,OAAO;MAAEC,OAAO;MAAEC,UAAU,GAAG;IAAE,CAAC,GAAAH,KAAA;
|
|
1
|
+
{"version":3,"names":["React","useCallback","useContext","useReducer","useRef","useState","NOOP","ReactionBottomSheets","LocalizationContext","SendbirdChatContext","UserProfileContext","ReactionContext","createContext","ReactionProvider","_ref","children","onPressUserProfile","chatCtx","localizationCtx","userProfileCtx","Error","state","setState","prev","next","reactionListVisible","setReactionListVisible","reactionUserListVisible","setReactionUserListVisible","reactionUserListFocusIndex","setReactionUserListFocusIndex","closeResolver","openReactionList","params","openReactionUserList","_ref2","channel","message","focusIndex","isGroupChannel","isSuper","updateReactionFocusedItem","createOnCloseWithResolver","callback","Promise","resolve","current","reactionCtx","sheetProps","show","onDismiss","_closeResolver$curren","call","createElement","Provider","value","UserList","_extends","visible","onClose","ReactionList"],"sources":["ReactionCtx.tsx"],"sourcesContent":["import React, { useCallback, useContext, useReducer, useRef, useState } from 'react';\n\nimport type { SendbirdBaseChannel, SendbirdBaseMessage } from '@sendbird/uikit-utils';\nimport { NOOP } from '@sendbird/uikit-utils';\n\nimport { ReactionBottomSheetProps, ReactionBottomSheets } from '../components/ReactionBottomSheets';\nimport { LocalizationContext } from '../contexts/LocalizationCtx';\nimport { SendbirdChatContext } from '../contexts/SendbirdChatCtx';\nimport { UserProfileContext } from '../contexts/UserProfileCtx';\n\ntype State = {\n message?: SendbirdBaseMessage;\n channel?: SendbirdBaseChannel;\n};\nexport type ReactionContextType = {\n openReactionList(param: Required<State>): void;\n openReactionUserList(param: Required<State> & { focusIndex?: number }): void;\n updateReactionFocusedItem(param?: State): void;\n focusIndex: number;\n} & State;\n\ntype Props = React.PropsWithChildren<{\n onPressUserProfile?: ReactionBottomSheetProps['onPressUserProfile'];\n}>;\n\nexport const ReactionContext = React.createContext<ReactionContextType | null>(null);\nexport const ReactionProvider = ({ children, onPressUserProfile }: Props) => {\n const chatCtx = useContext(SendbirdChatContext);\n const localizationCtx = useContext(LocalizationContext);\n const userProfileCtx = useContext(UserProfileContext);\n if (!chatCtx) throw new Error('SendbirdChatContext is not provided');\n if (!localizationCtx) throw new Error('LocalizationContext is not provided');\n if (!userProfileCtx) throw new Error('UserProfileContext is not provided');\n\n const [state, setState] = useReducer((prev: State, next: State) => ({ ...prev, ...next }), {});\n const [reactionListVisible, setReactionListVisible] = useState(false);\n const [reactionUserListVisible, setReactionUserListVisible] = useState(false);\n const [reactionUserListFocusIndex, setReactionUserListFocusIndex] = useState(0);\n\n const closeResolver = useRef<() => void>(NOOP);\n\n const openReactionList: ReactionContextType['openReactionList'] = useCallback((params) => {\n setState(params);\n setReactionListVisible(true);\n }, []);\n\n const openReactionUserList: ReactionContextType['openReactionUserList'] = useCallback(\n ({ channel, message, focusIndex = 0 }) => {\n // NOTE: We don't support reaction user list for supergroup channel\n if (channel.isGroupChannel() && channel.isSuper) return;\n\n setState({ channel, message });\n setReactionUserListFocusIndex(focusIndex);\n setReactionUserListVisible(true);\n },\n [],\n );\n\n const updateReactionFocusedItem: ReactionContextType['updateReactionFocusedItem'] = useCallback((params) => {\n if (params) setState(params);\n else setState({});\n }, []);\n\n const createOnCloseWithResolver = (callback: () => void) => {\n return () => {\n return new Promise<void>((resolve) => {\n closeResolver.current = resolve;\n callback();\n });\n };\n };\n\n const reactionCtx = {\n ...state,\n openReactionList,\n openReactionUserList,\n updateReactionFocusedItem,\n focusIndex: reactionUserListFocusIndex,\n };\n\n const sheetProps: Omit<ReactionBottomSheetProps, 'visible' | 'onClose'> = {\n chatCtx,\n reactionCtx,\n localizationCtx,\n onPressUserProfile: onPressUserProfile ?? userProfileCtx.show,\n onDismiss: () => {\n setState({});\n closeResolver.current?.();\n },\n };\n\n return (\n <ReactionContext.Provider value={reactionCtx}>\n {children}\n <ReactionBottomSheets.UserList\n {...sheetProps}\n visible={reactionUserListVisible}\n onClose={createOnCloseWithResolver(() => setReactionUserListVisible(false))}\n />\n <ReactionBottomSheets.ReactionList\n {...sheetProps}\n visible={reactionListVisible}\n onClose={createOnCloseWithResolver(() => setReactionListVisible(false))}\n />\n </ReactionContext.Provider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useState","useAppFeatures","useUIKitConfig","confirmAndMarkAsDelivered","useAppState","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","_ref","children","sdkInstance","emojiManager","mentionManager","imageCompressionConfig","voiceMessageConfig","enableAutoPushTokenRegistration","enableUseUserIdForNickname","enableImageCompression","currentUser","_setCurrentUser","forceUpdate","appFeatures","configs","configsWithAppAttr","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","params","profileUrl","profileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","status","connectionState","setForegroundState","setBackgroundState","disconnect","then","undefined","value","sdk","sbOptions","appInfo","uikit","uikitWithAppInfo","chat","autoPushTokenRegistrationEnabled","useUserIdForNicknameEnabled","imageCompressionEnabled","createElement","Provider"],"sources":["SendbirdChatCtx.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport { SBUConfig, useUIKitConfig } from '@sendbird/uikit-tools';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserUpdateParams,\n} from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useAppState, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport type ImageCompressionConfig from '../libs/ImageCompressionConfig';\nimport type MentionManager from '../libs/MentionManager';\nimport type VoiceMessageConfig from '../libs/VoiceMessageConfig';\nimport type { FileType } from '../platform/types';\n\nexport interface ChatRelatedFeaturesInUIKit {\n enableAutoPushTokenRegistration: boolean;\n enableUseUserIdForNickname: boolean;\n enableImageCompression: boolean;\n}\n\ninterface Props extends ChatRelatedFeaturesInUIKit, React.PropsWithChildren {\n sdkInstance: SendbirdChatSDK;\n\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n}\n\nexport type SendbirdChatContextType = {\n sdk: SendbirdChatSDK;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // feature related instances\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n sbOptions: {\n // UIKit options\n uikit: SBUConfig;\n uikitWithAppInfo: {\n groupChannel: {\n channel: {\n enableReactions: boolean;\n enableOgtag: boolean;\n };\n setting: {\n enableMessageSearch: boolean;\n };\n };\n openChannel: {\n channel: {\n enableOgtag: boolean;\n };\n };\n };\n\n // Chat related options in UIKit\n chat: {\n imageCompressionEnabled: boolean;\n useUserIdForNicknameEnabled: boolean;\n autoPushTokenRegistrationEnabled: boolean; // RN only\n };\n\n // Sendbird application options\n appInfo: {\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n };\n};\n\nexport const SendbirdChatContext = React.createContext<SendbirdChatContextType | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n voiceMessageConfig,\n enableAutoPushTokenRegistration,\n enableUseUserIdForNickname,\n enableImageCompression,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n const { configs, configsWithAppAttr } = useUIKitConfig();\n\n const setCurrentUser: SendbirdChatContextType['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: SendbirdChatContextType['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n const params: SendbirdUserUpdateParams = {};\n\n if (!nickname) {\n params.nickname = user.nickname;\n } else {\n params.nickname = nickname;\n }\n\n if (!profile) {\n params.profileUrl = user.profileUrl;\n } else if (typeof profile === 'string') {\n params.profileUrl = profile;\n } else if (typeof profile === 'object') {\n params.profileImage = profile;\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n user = await sdkInstance.updateCurrentUserInfo(params);\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: SendbirdChatContextType['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled) confirmAndMarkAsDelivered([channel]);\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useAppState('change', (status) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.connectionState === 'CLOSED' && sdkInstance.setForegroundState();\n else if (status === 'background') sdkInstance.connectionState === 'OPEN' && sdkInstance.setBackgroundState();\n });\n\n useEffect(() => {\n return () => {\n sdkInstance.disconnect().then(() => _setCurrentUser(undefined));\n };\n }, [sdkInstance]);\n\n const value: SendbirdChatContextType = {\n sdk: sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n voiceMessageConfig,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n // TODO: Options should be moved to the common area at the higher level to be passed to the context of each product.\n // For example, common -> chat context, common -> calls context\n sbOptions: {\n appInfo: appFeatures,\n uikit: configs,\n uikitWithAppInfo: configsWithAppAttr(sdkInstance),\n chat: {\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n useUserIdForNicknameEnabled: enableUseUserIdForNickname,\n imageCompressionEnabled: enableImageCompression,\n },\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAE/D,SAASC,cAAc,QAAQ,4BAA4B;AAC3D,SAAoBC,cAAc,QAAQ,uBAAuB;AAOjE,SAASC,yBAAyB,EAAEC,WAAW,EAAEC,cAAc,QAAQ,uBAAuB;
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useState","useAppFeatures","useUIKitConfig","confirmAndMarkAsDelivered","useAppState","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","_ref","children","sdkInstance","emojiManager","mentionManager","imageCompressionConfig","voiceMessageConfig","enableAutoPushTokenRegistration","enableUseUserIdForNickname","enableImageCompression","currentUser","_setCurrentUser","forceUpdate","appFeatures","configs","configsWithAppAttr","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","params","profileUrl","profileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","status","connectionState","setForegroundState","setBackgroundState","disconnect","then","undefined","value","sdk","sbOptions","appInfo","uikit","uikitWithAppInfo","chat","autoPushTokenRegistrationEnabled","useUserIdForNicknameEnabled","imageCompressionEnabled","createElement","Provider"],"sources":["SendbirdChatCtx.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport { SBUConfig, useUIKitConfig } from '@sendbird/uikit-tools';\nimport type {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserUpdateParams,\n} from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, useAppState, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type EmojiManager from '../libs/EmojiManager';\nimport type ImageCompressionConfig from '../libs/ImageCompressionConfig';\nimport type MentionManager from '../libs/MentionManager';\nimport type VoiceMessageConfig from '../libs/VoiceMessageConfig';\nimport type { FileType } from '../platform/types';\n\nexport interface ChatRelatedFeaturesInUIKit {\n enableAutoPushTokenRegistration: boolean;\n enableUseUserIdForNickname: boolean;\n enableImageCompression: boolean;\n}\n\ninterface Props extends ChatRelatedFeaturesInUIKit, React.PropsWithChildren {\n sdkInstance: SendbirdChatSDK;\n\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n}\n\nexport type SendbirdChatContextType = {\n sdk: SendbirdChatSDK;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // feature related instances\n emojiManager: EmojiManager;\n mentionManager: MentionManager;\n imageCompressionConfig: ImageCompressionConfig;\n voiceMessageConfig: VoiceMessageConfig;\n\n // helper functions\n updateCurrentUserInfo: (nickname?: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n sbOptions: {\n // UIKit options\n uikit: SBUConfig;\n uikitWithAppInfo: {\n groupChannel: {\n channel: {\n readonly enableReactions: boolean;\n readonly enableReactionsSupergroup: boolean;\n readonly enableOgtag: boolean;\n };\n setting: {\n readonly enableMessageSearch: boolean;\n };\n };\n openChannel: {\n channel: {\n readonly enableOgtag: boolean;\n };\n };\n };\n\n // Chat related options in UIKit\n chat: {\n imageCompressionEnabled: boolean;\n useUserIdForNicknameEnabled: boolean;\n autoPushTokenRegistrationEnabled: boolean; // RN only\n };\n\n // Sendbird application options\n appInfo: {\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n };\n};\n\nexport const SendbirdChatContext = React.createContext<SendbirdChatContextType | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n voiceMessageConfig,\n enableAutoPushTokenRegistration,\n enableUseUserIdForNickname,\n enableImageCompression,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n const { configs, configsWithAppAttr } = useUIKitConfig();\n\n const setCurrentUser: SendbirdChatContextType['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: SendbirdChatContextType['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n const params: SendbirdUserUpdateParams = {};\n\n if (!nickname) {\n params.nickname = user.nickname;\n } else {\n params.nickname = nickname;\n }\n\n if (!profile) {\n params.profileUrl = user.profileUrl;\n } else if (typeof profile === 'string') {\n params.profileUrl = profile;\n } else if (typeof profile === 'object') {\n params.profileImage = profile;\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n user = await sdkInstance.updateCurrentUserInfo(params);\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: SendbirdChatContextType['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled) confirmAndMarkAsDelivered([channel]);\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useAppState('change', (status) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.connectionState === 'CLOSED' && sdkInstance.setForegroundState();\n else if (status === 'background') sdkInstance.connectionState === 'OPEN' && sdkInstance.setBackgroundState();\n });\n\n useEffect(() => {\n return () => {\n sdkInstance.disconnect().then(() => _setCurrentUser(undefined));\n };\n }, [sdkInstance]);\n\n const value: SendbirdChatContextType = {\n sdk: sdkInstance,\n emojiManager,\n mentionManager,\n imageCompressionConfig,\n voiceMessageConfig,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n // TODO: Options should be moved to the common area at the higher level to be passed to the context of each product.\n // For example, common -> chat context, common -> calls context\n sbOptions: {\n appInfo: appFeatures,\n uikit: configs,\n uikitWithAppInfo: configsWithAppAttr(sdkInstance),\n chat: {\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n useUserIdForNicknameEnabled: enableUseUserIdForNickname,\n imageCompressionEnabled: enableImageCompression,\n },\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"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"}
|
|
@@ -8,7 +8,10 @@ export default class SBUUtils {
|
|
|
8
8
|
}
|
|
9
9
|
static async openURL(url) {
|
|
10
10
|
try {
|
|
11
|
-
|
|
11
|
+
let targetUrl = url;
|
|
12
|
+
if (!url.startsWith('http://') && !url.startsWith('https://')) {
|
|
13
|
+
targetUrl = 'https://' + url;
|
|
14
|
+
}
|
|
12
15
|
await Linking.openURL(targetUrl);
|
|
13
16
|
} catch (e) {
|
|
14
17
|
Logger.warn('Cannot open url', e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Image","Linking","Platform","Logger","SBUUtils","openSettings","catch","OS","openURL","url","targetUrl","startsWith","e","warn","getImageSize","uri","Promise","resolve","reject","getSize","width","height","error","safeRun","callback","isExpo","_g","global","window"],"sources":["SBUUtils.ts"],"sourcesContent":["import { Image, Linking, Platform } from 'react-native';\n\nimport { Logger } from '@sendbird/uikit-utils';\n\nexport default class SBUUtils {\n static openSettings() {\n Linking.openSettings().catch(() => {\n if (Platform.OS === 'ios') Linking.openURL('App-Prefs:root');\n });\n }\n\n static async openURL(url: string) {\n try {\n
|
|
1
|
+
{"version":3,"names":["Image","Linking","Platform","Logger","SBUUtils","openSettings","catch","OS","openURL","url","targetUrl","startsWith","e","warn","getImageSize","uri","Promise","resolve","reject","getSize","width","height","error","safeRun","callback","isExpo","_g","global","window"],"sources":["SBUUtils.ts"],"sourcesContent":["import { Image, Linking, Platform } from 'react-native';\n\nimport { Logger } from '@sendbird/uikit-utils';\n\nexport default class SBUUtils {\n static openSettings() {\n Linking.openSettings().catch(() => {\n if (Platform.OS === 'ios') Linking.openURL('App-Prefs:root');\n });\n }\n\n static async openURL(url: string) {\n try {\n let targetUrl = url;\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n targetUrl = 'https://' + url;\n }\n await Linking.openURL(targetUrl);\n } catch (e) {\n Logger.warn('Cannot open url', e);\n }\n }\n\n static getImageSize(uri: string): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n Image.getSize(\n uri,\n (width, height) => {\n resolve({ width, height });\n },\n (error) => {\n reject(error);\n },\n );\n });\n }\n\n static async safeRun(callback: () => Promise<void>) {\n try {\n await callback();\n } catch (e) {}\n }\n\n static isExpo() {\n const _g = global ?? window;\n return typeof _g === 'object' && 'expo' in _g;\n }\n}\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,cAAc;AAEvD,SAASC,MAAM,QAAQ,uBAAuB;AAE9C,eAAe,MAAMC,QAAQ,CAAC;EAC5B,OAAOC,YAAYA,CAAA,EAAG;IACpBJ,OAAO,CAACI,YAAY,EAAE,CAACC,KAAK,CAAC,MAAM;MACjC,IAAIJ,QAAQ,CAACK,EAAE,KAAK,KAAK,EAAEN,OAAO,CAACO,OAAO,CAAC,gBAAgB,CAAC;IAC9D,CAAC,CAAC;EACJ;EAEA,aAAaA,OAAOA,CAACC,GAAW,EAAE;IAChC,IAAI;MACF,IAAIC,SAAS,GAAGD,GAAG;MACnB,IAAI,CAACA,GAAG,CAACE,UAAU,CAAC,SAAS,CAAC,IAAI,CAACF,GAAG,CAACE,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7DD,SAAS,GAAG,UAAU,GAAGD,GAAG;MAC9B;MACA,MAAMR,OAAO,CAACO,OAAO,CAACE,SAAS,CAAC;IAClC,CAAC,CAAC,OAAOE,CAAC,EAAE;MACVT,MAAM,CAACU,IAAI,CAAC,iBAAiB,EAAED,CAAC,CAAC;IACnC;EACF;EAEA,OAAOE,YAAYA,CAACC,GAAW,EAA8C;IAC3E,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtClB,KAAK,CAACmB,OAAO,CACXJ,GAAG,EACH,CAACK,KAAK,EAAEC,MAAM,KAAK;QACjBJ,OAAO,CAAC;UAAEG,KAAK;UAAEC;QAAO,CAAC,CAAC;MAC5B,CAAC,EACAC,KAAK,IAAK;QACTJ,MAAM,CAACI,KAAK,CAAC;MACf,CAAC,CACF;IACH,CAAC,CAAC;EACJ;EAEA,aAAaC,OAAOA,CAACC,QAA6B,EAAE;IAClD,IAAI;MACF,MAAMA,QAAQ,EAAE;IAClB,CAAC,CAAC,OAAOZ,CAAC,EAAE,CAAC;EACf;EAEA,OAAOa,MAAMA,CAAA,EAAG;IACd,MAAMC,EAAE,GAAGC,MAAM,IAAIC,MAAM;IAC3B,OAAO,OAAOF,EAAE,KAAK,QAAQ,IAAI,MAAM,IAAIA,EAAE;EAC/C;AACF"}
|
|
@@ -19,11 +19,11 @@ const createExpoFileService = _ref => {
|
|
|
19
19
|
return expoPermissionGranted([res]);
|
|
20
20
|
}
|
|
21
21
|
async hasMediaLibraryPermission(type) {
|
|
22
|
-
const perms = await
|
|
22
|
+
const perms = await imagePickerModule.getMediaLibraryPermissionsAsync(type === 'write');
|
|
23
23
|
return expoPermissionGranted([perms]);
|
|
24
24
|
}
|
|
25
25
|
async requestMediaLibraryPermission(type) {
|
|
26
|
-
const perms = await
|
|
26
|
+
const perms = await imagePickerModule.requestMediaLibraryPermissionsAsync(type === 'write');
|
|
27
27
|
return expoPermissionGranted([perms]);
|
|
28
28
|
}
|
|
29
29
|
async openCamera(options) {
|