@sendbird/uikit-react-native 3.12.0 → 3.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/ChannelMessageList/index.js +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/ChannelThreadMessageList/index.js +1 -1
- package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerContent.js +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelMembersFragment.js +1 -1
- package/lib/commonjs/fragments/createGroupChannelMembersFragment.js.map +1 -1
- package/lib/commonjs/fragments/createOpenChannelParticipantsFragment.js +1 -1
- package/lib/commonjs/fragments/createOpenChannelParticipantsFragment.js.map +1 -1
- package/lib/commonjs/hooks/useMentionTextInput.js +1 -1
- package/lib/commonjs/hooks/useMentionTextInput.js.map +1 -1
- package/lib/commonjs/hooks/usePushTokenRegistration.js +1 -1
- package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/commonjs/hooks/useVoiceMessageInput.js +1 -1
- package/lib/commonjs/hooks/useVoiceMessageInput.js.map +1 -1
- package/lib/commonjs/platform/createFileService.expo.js +4 -0
- package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
- package/lib/commonjs/platform/createFileService.native.js +2 -0
- package/lib/commonjs/platform/createFileService.native.js.map +1 -1
- package/lib/commonjs/utils/expoBackwardUtils.js +2 -2
- package/lib/commonjs/utils/expoBackwardUtils.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 +1 -1
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/ChannelThreadMessageList/index.js +1 -1
- package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -1
- package/lib/module/components/FileViewer/FileViewerContent.js +1 -1
- package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +1 -1
- package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/fragments/createGroupChannelMembersFragment.js +1 -1
- package/lib/module/fragments/createGroupChannelMembersFragment.js.map +1 -1
- package/lib/module/fragments/createOpenChannelParticipantsFragment.js +1 -1
- package/lib/module/fragments/createOpenChannelParticipantsFragment.js.map +1 -1
- package/lib/module/hooks/useMentionTextInput.js +1 -1
- package/lib/module/hooks/useMentionTextInput.js.map +1 -1
- package/lib/module/hooks/usePushTokenRegistration.js +1 -1
- package/lib/module/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/module/hooks/useVoiceMessageInput.js +1 -1
- package/lib/module/hooks/useVoiceMessageInput.js.map +1 -1
- package/lib/module/platform/createFileService.expo.js +4 -0
- package/lib/module/platform/createFileService.expo.js.map +1 -1
- package/lib/module/platform/createFileService.native.js +2 -0
- package/lib/module/platform/createFileService.native.js.map +1 -1
- package/lib/module/utils/expoBackwardUtils.js +2 -2
- package/lib/module/utils/expoBackwardUtils.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +1 -2
- package/lib/typescript/src/components/ChannelThreadMessageList/index.d.ts +1 -2
- package/lib/typescript/src/containers/InternalErrorBoundaryContainer.d.ts +1 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/hooks/useMentionTextInput.d.ts +1 -1
- package/lib/typescript/src/libs/MentionManager.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +5 -5
- package/src/components/ChannelMessageList/index.tsx +4 -2
- package/src/components/ChannelThreadMessageList/index.tsx +4 -2
- package/src/components/FileViewer/FileViewerContent.tsx +1 -1
- package/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.tsx +1 -1
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +2 -2
- package/src/fragments/createGroupChannelMembersFragment.tsx +1 -1
- package/src/fragments/createOpenChannelParticipantsFragment.tsx +1 -1
- package/src/hooks/useMentionTextInput.ts +1 -1
- package/src/hooks/usePushTokenRegistration.ts +1 -1
- package/src/hooks/useVoiceMessageInput.ts +1 -1
- package/src/platform/createFileService.expo.ts +4 -0
- package/src/platform/createFileService.native.ts +2 -0
- package/src/utils/expoBackwardUtils.ts +2 -2
- package/src/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uikitUtils","require","_SBUError","_interopRequireDefault","_expoBackwardUtils","_expoPermissionGranted","e","__esModule","default","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","expoBackwardUtils","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","fileSystem","getDocumentDirectory","getCacheDirectory","downloadPath","fileName","downloadFile","fileUrl","getFileType","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath","_default","exports"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath =\n expoBackwardUtils.fileSystem.getDocumentDirectory(fsModule) ||\n expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await expoBackwardUtils.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":";;;;;;AAKA,IAAAA,WAAA,GAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAD,sBAAA,CAAAF,OAAA;AAEA,IAAAI,sBAAA,GAAAF,sBAAA,CAAAF,OAAA;AAAmE,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAUnE,MAAMG,qBAAqB,GAAGA,CAAC;EAC7BC,iBAAiB;EACjBC,oBAAoB;EACpBC,kBAAkB;EAClBC;AAMF,CAAC,KAA2B;EAC1B,MAAMC,wBAAwB,CAAiC;IAC7D,MAAMC,mBAAmBA,CAAA,EAAqB;MAC5C,MAAMC,GAAG,GAAI,MAAMN,iBAAiB,CAACO,yBAAyB,CAAC,CAA4B;MAC3F,OAAO,IAAAC,8BAAqB,EAAC,CAACF,GAAG,CAAC,CAAC;IACrC;IAEA,MAAMG,uBAAuBA,CAAA,EAAqB;MAChD,MAAMH,GAAG,GAAI,MAAMN,iBAAiB,CAACU,6BAA6B,CAAC,CAA4B;MAC/F,OAAO,IAAAF,8BAAqB,EAAC,CAACF,GAAG,CAAC,CAAC;IACrC;IAEA,MAAMK,6BAA6BA,CAAA,EAAqB;MACtD,MAAMC,KAAK,GAAI,MAAMZ,iBAAiB,CAACa,+BAA+B,CACpE,KACF,CAAwC;MACxC,OAAO,IAAAL,8BAAqB,EAAC,CAACI,KAAK,CAAC,CAAC;IACvC;IAEA,MAAME,iCAAiCA,CAAA,EAAqB;MAC1D,MAAMF,KAAK,GAAI,MAAMZ,iBAAiB,CAACe,mCAAmC,CACxE,KACF,CAAwC;MACxC,OAAO,IAAAP,8BAAqB,EAAC,CAACI,KAAK,CAAC,CAAC;IACvC;IAEA,MAAMI,8BAA8BA,CAAA,EAAqB;MACvD,MAAMJ,KAAK,GAAI,MAAMV,kBAAkB,CAACe,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAwC;MAC5G,OAAO,IAAAT,8BAAqB,EAAC,CAACI,KAAK,CAAC,CAAC;IACvC;IAEA,MAAMM,kCAAkCA,CAAA,EAAqB;MAC3D,MAAMN,KAAK,GAAI,MAAMV,kBAAkB,CAACiB,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAwC;MAChH,OAAO,IAAAX,8BAAqB,EAAC,CAACI,KAAK,CAAC,CAAC;IACvC;IAEA,MAAMQ,UAAUA,CAACC,OAA2B,EAA+B;MACzE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACjB,mBAAmB,CAAC,CAAC;MACtD,IAAI,CAACiB,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACd,uBAAuB,CAAC,CAAC;QACpD,IAAI,CAACc,OAAO,EAAE;UAAA,IAAAC,qBAAA;UACZH,OAAO,aAAPA,OAAO,gBAAAG,qBAAA,GAAPH,OAAO,CAAEI,aAAa,cAAAD,qBAAA,eAAtBA,qBAAA,CAAAE,IAAA,CAAAL,OAAO,EAAkBM,iBAAQ,CAACC,kBAAkB,CAAC;UACrD,OAAO,IAAI;QACb;MACF;MAEA,MAAMC,QAAQ,GAAG,MAAM7B,iBAAiB,CAAC8B,iBAAiB,CAAC;QACzDC,UAAU,EAAE,CAAC,MAAM;UACjB,QAAQV,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEW,SAAS;YACxB,KAAK,OAAO;cACV,OAAOhC,iBAAiB,CAACiC,gBAAgB,CAACC,MAAM;YAClD,KAAK,OAAO;cACV,OAAOlC,iBAAiB,CAACiC,gBAAgB,CAACE,MAAM;YAClD,KAAK,KAAK;cACR,OAAOnC,iBAAiB,CAACiC,gBAAgB,CAACG,GAAG;YAC/C;cACE,OAAOpC,iBAAiB,CAACiC,gBAAgB,CAACC,MAAM;UACpD;QACF,CAAC,EAAE;MACL,CAAC,CAAC;MAEF,IAAIG,0BAAiB,CAACC,WAAW,CAACC,UAAU,CAACV,QAAQ,CAAC,EAAE,OAAO,IAAI;MAEnE,MAAM,CAACW,IAAI,CAAC,GAAG,MAAMH,0BAAiB,CAACC,WAAW,CAACG,qBAAqB,CAACZ,QAAQ,EAAE1B,QAAQ,CAAC;MAC5F,OAAOqC,IAAI;IACb;IAEA,MAAME,gBAAgBA,CAACrB,OAAgC,EAAE;MACvD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACX,6BAA6B,CAAC,CAAC;MAChE,IAAI,CAACW,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACT,iCAAiC,CAAC,CAAC;QAC9D,IAAI,CAACS,OAAO,EAAE;UAAA,IAAAoB,sBAAA;UACZtB,OAAO,aAAPA,OAAO,gBAAAsB,sBAAA,GAAPtB,OAAO,CAAEI,aAAa,cAAAkB,sBAAA,eAAtBA,sBAAA,CAAAjB,IAAA,CAAAL,OAAO,EAAkBM,iBAAQ,CAACC,kBAAkB,CAAC;UACrD,OAAO,IAAI;QACb;MACF;MAEA,MAAMgB,cAAc,GAAG,CAAAvB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEuB,cAAc,KAAI,CAAC;MACnD,MAAMf,QAAQ,GAAG,MAAM7B,iBAAiB,CAAC6C,uBAAuB,CAAC;QAC/DD,cAAc;QACdb,UAAU,EAAE,CAAC,MAAM;UACjB,QAAQV,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEW,SAAS;YACxB,KAAK,OAAO;cACV,OAAOhC,iBAAiB,CAACiC,gBAAgB,CAACC,MAAM;YAClD,KAAK,OAAO;cACV,OAAOlC,iBAAiB,CAACiC,gBAAgB,CAACE,MAAM;YAClD,KAAK,KAAK;cACR,OAAOnC,iBAAiB,CAACiC,gBAAgB,CAACG,GAAG;YAC/C;cACE,OAAOpC,iBAAiB,CAACiC,gBAAgB,CAACC,MAAM;UACpD;QACF,CAAC,EAAE;MACL,CAAC,CAAC;MACF,IAAIG,0BAAiB,CAACC,WAAW,CAACC,UAAU,CAACV,QAAQ,CAAC,EAAE,OAAO,IAAI;MACnE,OAAOQ,0BAAiB,CAACC,WAAW,CAACG,qBAAqB,CAACZ,QAAQ,EAAE1B,QAAQ,CAAC;IAChF;IAEA,MAAM2C,YAAYA,CAACzB,OAA6B,EAA+B;MAC7E,IAAI;QACF,MAAMQ,QAAQ,GAAG,MAAM5B,oBAAoB,CAAC8C,gBAAgB,CAAC;UAAEC,IAAI,EAAE;QAAM,CAAC,CAAC;QAC7E,IAAIX,0BAAiB,CAACY,cAAc,CAACV,UAAU,CAACV,QAAQ,CAAC,EAAE,OAAO,IAAI;QAEtE,MAAM,CAACW,IAAI,CAAC,GAAG,MAAMH,0BAAiB,CAACY,cAAc,CAACR,qBAAqB,CAACZ,QAAQ,CAAC;QACrF,OAAOW,IAAI;MACb,CAAC,CAAC,OAAO5C,CAAC,EAAE;QAAA,IAAAsD,sBAAA;QACV7B,OAAO,aAAPA,OAAO,gBAAA6B,sBAAA,GAAP7B,OAAO,CAAEI,aAAa,cAAAyB,sBAAA,eAAtBA,sBAAA,CAAAxB,IAAA,CAAAL,OAAO,EAAkBM,iBAAQ,CAACwB,OAAO,EAAEvD,CAAC,CAAC;QAC7C,OAAO,IAAI;MACb;IACF;IAEA,MAAMwD,IAAIA,CAAC/B,OAAoB,EAAmB;MAChD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACN,8BAA8B,CAAC,CAAC;MACjE,IAAI,CAACM,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACL,kCAAkC,CAAC,CAAC;QAC/D,IAAI,CAACK,OAAO,EAAE,MAAM,IAAI8B,KAAK,CAAC,wBAAwB,CAAC;MACzD;MAEA,MAAMC,QAAQ,GACZjB,0BAAiB,CAACkB,UAAU,CAACC,oBAAoB,CAACrD,QAAQ,CAAC,IAC3DkC,0BAAiB,CAACkB,UAAU,CAACE,iBAAiB,CAACtD,QAAQ,CAAC;MAC1D,IAAI,CAACmD,QAAQ,EAAE,MAAM,IAAID,KAAK,CAAC,4BAA4B,CAAC;MAE5D,MAAMK,YAAY,GAAG,GAAGJ,QAAQ,IAAIjC,OAAO,CAACsC,QAAQ,EAAE;MAEtD,MAAM9B,QAAQ,GAAG,MAAMQ,0BAAiB,CAACkB,UAAU,CAACK,YAAY,CAACzD,QAAQ,EAAEkB,OAAO,CAACwC,OAAO,EAAEH,YAAY,CAAC;MACzG,IAAI,IAAAI,uBAAW,EAACzC,OAAO,CAAC0C,QAAQ,IAAI,EAAE,CAAC,CAACC,KAAK,CAAC,aAAa,CAAC,EAAE;QAC5D,MAAM9D,kBAAkB,CAAC+D,kBAAkB,CAACpC,QAAQ,CAACqC,GAAG,CAAC;MAC3D;MACA,OAAOrC,QAAQ,CAACqC,GAAG;IACrB;IAEAC,oBAAoBA,CAACC,eAAe,GAAG,KAAK,EAA2C;MACrF,MAAMd,QAAQ,GAAGjB,0BAAiB,CAACkB,UAAU,CAACE,iBAAiB,CAACtD,QAAQ,CAAC;MACzE,IAAI,CAACmD,QAAQ,EAAE,MAAM,IAAID,KAAK,CAAC,4BAA4B,CAAC;MAE5D,MAAMgB,QAAQ,GAAG,UAAUC,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIH,eAAe,EAAE;MAC1D,OAAO;QACLF,GAAG,EAAE,GAAGZ,QAAQ,IAAIe,QAAQ,EAAE;QAC9BG,cAAc,EAAE,GAAGlB,QAAQ,IAAIe,QAAQ;MACzC,CAAC;IACH;EACF;EAEA,OAAO,IAAIjE,wBAAwB,CAAC,CAAC;AACvC,CAAC;AAAC,IAAAqE,QAAA,GAAAC,OAAA,CAAA5E,OAAA,GAEaC,qBAAqB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uikitUtils","require","_SBUError","_interopRequireDefault","_expoBackwardUtils","_expoPermissionGranted","e","__esModule","default","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","_imagePickerModule$UI","preferredAssetRepresentationMode","UIImagePickerPreferredAssetRepresentationMode","Compatible","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","expoBackwardUtils","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","fileSystem","getDocumentDirectory","getCacheDirectory","downloadPath","fileName","downloadFile","fileUrl","getFileType","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath","_default","exports"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n const preferredAssetRepresentationMode = imagePickerModule.UIImagePickerPreferredAssetRepresentationMode?.Compatible;\n\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n preferredAssetRepresentationMode,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n preferredAssetRepresentationMode,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath =\n expoBackwardUtils.fileSystem.getDocumentDirectory(fsModule) ||\n expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await expoBackwardUtils.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -113,6 +113,7 @@ const createNativeFileService = ({
|
|
|
113
113
|
const response = await imagePickerModule.launchCamera({
|
|
114
114
|
presentationStyle: 'fullScreen',
|
|
115
115
|
cameraType: (options === null || options === void 0 ? void 0 : options.cameraType) ?? 'back',
|
|
116
|
+
assetRepresentationMode: 'compatible',
|
|
116
117
|
mediaType: (() => {
|
|
117
118
|
switch (options === null || options === void 0 ? void 0 : options.mediaType) {
|
|
118
119
|
case 'photo':
|
|
@@ -163,6 +164,7 @@ const createNativeFileService = ({
|
|
|
163
164
|
const response = await imagePickerModule.launchImageLibrary({
|
|
164
165
|
presentationStyle: 'fullScreen',
|
|
165
166
|
selectionLimit,
|
|
167
|
+
assetRepresentationMode: 'compatible',
|
|
166
168
|
mediaType: (() => {
|
|
167
169
|
switch (options === null || options === void 0 ? void 0 : options.mediaType) {
|
|
168
170
|
case 'photo':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_uikitUtils","_SBUError","_interopRequireDefault","_nativePermissionGranted","_normalizeFile","_openDocument","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","requiredPermissions","select","ios","IOS","CAMERA","android","optionalPermissions","MICROPHONE","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","requiredPermissionsStatus","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","openDocument","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","Logger","error","createRecordFilePath","customExtension","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 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 { DocumentPicker, openDocument } from './openDocument.native';\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 }\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: DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const requiredPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\n default: [],\n });\n const optionalPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [],\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(requiredPermissions);\n return nativePermissionGranted(status);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const requiredPermissionsStatus = await permissionModule.requestMultiple(requiredPermissions);\n if (!nativePermissionGranted(requiredPermissionsStatus)) return false;\n\n await permissionModule.requestMultiple(optionalPermissions);\n return true;\n }\n\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\n }\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\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\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n return await openDocument(documentPickerModule, options);\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: path,\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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_uikitUtils","_SBUError","_interopRequireDefault","_nativePermissionGranted","_normalizeFile","_openDocument","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","requiredPermissions","select","ios","IOS","CAMERA","android","optionalPermissions","MICROPHONE","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","requiredPermissionsStatus","requestMultiple","hasMediaLibraryPermission","requestMediaLibraryPermission","openCamera","_response$assets","hasPermission","granted","_options$onOpenFailur","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","assetRepresentationMode","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","openDocument","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","Logger","error","createRecordFilePath","customExtension","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 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 { DocumentPicker, openDocument } from './openDocument.native';\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 }\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: DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const requiredPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\n default: [],\n });\n const optionalPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [],\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(requiredPermissions);\n return nativePermissionGranted(status);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const requiredPermissionsStatus = await permissionModule.requestMultiple(requiredPermissions);\n if (!nativePermissionGranted(requiredPermissionsStatus)) return false;\n\n await permissionModule.requestMultiple(optionalPermissions);\n return true;\n }\n\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\n }\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 assetRepresentationMode: 'compatible',\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\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 assetRepresentationMode: 'compatible',\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\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n return await openDocument(documentPickerModule, options);\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: path,\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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","ignoreList":[]}
|
|
@@ -24,13 +24,13 @@ const expoBackwardUtils = {
|
|
|
24
24
|
const promises = assets.map(({
|
|
25
25
|
fileName: name,
|
|
26
26
|
fileSize: size,
|
|
27
|
-
|
|
27
|
+
mimeType,
|
|
28
28
|
uri
|
|
29
29
|
}) => (0, _normalizeFile.default)({
|
|
30
30
|
uri,
|
|
31
31
|
size,
|
|
32
32
|
name,
|
|
33
|
-
type
|
|
33
|
+
type: mimeType
|
|
34
34
|
}));
|
|
35
35
|
return Promise.all(promises);
|
|
36
36
|
} else if ('uri' in result && typeof result.uri === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_normalizeFile","_interopRequireDefault","require","e","__esModule","default","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","type","uri","normalizeFile","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","mimeType","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info","undefined","fileSystem","isLegacyModule","getFileInfo","file","File","getDocumentDirectory","documentDirectory","_fsModule$Paths","Paths","document","getCacheDirectory","cacheDirectory","_fsModule$Paths2","cache","downloadFile","url","localUri","downloadAsync","destination","downloadFileAsync","_default","exports"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\n// Legacy expo-file-system API types (before SDK 54)\ninterface ExpoFileSystemLegacy {\n documentDirectory: string | null;\n cacheDirectory: string | null;\n getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;\n downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{ uri: string }>;\n}\n\n// New expo-file-system API types (SDK 54+)\ninterface ExpoDirectory {\n uri: string;\n}\n\ninterface ExpoFileSystemNew {\n File: {\n new (...uris: (string | unknown)[]): {\n info(options?: unknown): ExpoFs.FileInfo;\n };\n downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{ uri: string }>;\n };\n Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;\n Paths: {\n document: ExpoDirectory;\n cache: ExpoDirectory;\n };\n}\n\n// Union type for both legacy and new expo-file-system\ntype ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>\n normalizeFile({ uri, size, name, type }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info && info.size !== undefined) {\n return info.size;\n } else {\n return 0;\n }\n },\n fileSystem: {\n isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy {\n try {\n return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;\n } catch {\n return false;\n }\n },\n async getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.getInfoAsync(uri);\n } else {\n const file = new fsModule.File(uri);\n return file.info();\n }\n },\n getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.documentDirectory || null;\n } else {\n return fsModule.Paths?.document?.uri || null;\n }\n },\n getCacheDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.cacheDirectory || null;\n } else {\n return fsModule.Paths?.cache?.uri || null;\n }\n },\n async downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{ uri: string }> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.downloadAsync(url, localUri);\n } else {\n const destination = new fsModule.File(localUri);\n const result = await fsModule.File.downloadFileAsync(url, destination as never);\n return { uri: result.uri };\n }\n },\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_normalizeFile","_interopRequireDefault","require","e","__esModule","default","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","mimeType","uri","normalizeFile","type","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info","undefined","fileSystem","isLegacyModule","getFileInfo","file","File","getDocumentDirectory","documentDirectory","_fsModule$Paths","Paths","document","getCacheDirectory","cacheDirectory","_fsModule$Paths2","cache","downloadFile","url","localUri","downloadAsync","destination","downloadFileAsync","_default","exports"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\n// Legacy expo-file-system API types (before SDK 54)\ninterface ExpoFileSystemLegacy {\n documentDirectory: string | null;\n cacheDirectory: string | null;\n getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;\n downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{ uri: string }>;\n}\n\n// New expo-file-system API types (SDK 54+)\ninterface ExpoDirectory {\n uri: string;\n}\n\ninterface ExpoFileSystemNew {\n File: {\n new (...uris: (string | unknown)[]): {\n info(options?: unknown): ExpoFs.FileInfo;\n };\n downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{ uri: string }>;\n };\n Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;\n Paths: {\n document: ExpoDirectory;\n cache: ExpoDirectory;\n };\n}\n\n// Union type for both legacy and new expo-file-system\ntype ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info && info.size !== undefined) {\n return info.size;\n } else {\n return 0;\n }\n },\n fileSystem: {\n isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy {\n try {\n return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;\n } catch {\n return false;\n }\n },\n async getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.getInfoAsync(uri);\n } else {\n const file = new fsModule.File(uri);\n return file.info();\n }\n },\n getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.documentDirectory || null;\n } else {\n return fsModule.Paths?.document?.uri || null;\n }\n },\n getCacheDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.cacheDirectory || null;\n } else {\n return fsModule.Paths?.cache?.uri || null;\n }\n },\n async downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{ uri: string }> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.downloadAsync(url, localUri);\n } else {\n const destination = new fsModule.File(localUri);\n const result = await fsModule.File.downloadFileAsync(url, destination as never);\n return { uri: result.uri };\n }\n },\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.12.
|
|
1
|
+
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.12.2';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,QAAQ;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACVH,OAAO","ignoreList":[]}
|
|
@@ -411,6 +411,6 @@ const styles = createStyleSheet({
|
|
|
411
411
|
}
|
|
412
412
|
});
|
|
413
413
|
|
|
414
|
-
// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it
|
|
414
|
+
// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it properly for React 19 compatibility
|
|
415
415
|
export default /*#__PURE__*/React.forwardRef(ChannelMessageList);
|
|
416
416
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useSafeAreaPadding","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","onPressMarkAsUnreadMessage","currentUserId","renderUnreadMessagesFloating","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","unreadFirstMessage","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListComponent","flatListProps","onViewableItemsChanged","onPressNewMessagesButton","onPressScrollToBottomButton","unreadMessagesFloatingProps","ref","STRINGS","colors","show","safeAreaLayout","createMessagePressActions","useCreateMessagePressActions","renderItem","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","isFirstUnreadMessage","messageId","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","unreadMsgFloatingWhenFrozen","unreadMsgFloating","visible","onPressClose","unreadMessageCount","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","length","scrollButton","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","_handlers$onOpenFileU","onOpenFileURL","call","openFile","openURL","onMarkAsUnread","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","menu","copy","icon","CHANNEL_MESSAGE_COPY","markAsUnread","CHANNEL_MESSAGE_MARK_AS_UNREAD","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isMyMsg","isGroupChannel","uikit","groupChannel","enableMarkAsUnread","replyType","configs","uikitWithAppInfo","HeaderComponent","isSuper","enableReactionsSupergroup","enableReactions","onClose","BottomSheet","position","zIndex","top","start","end","paddingBottom","alignSelf","bottom","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\nimport { UnreadMessagesFloatingProps } from '../UnreadMessagesFloating';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n unreadFirstMessage?: SendbirdMessage;\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n onPressMarkAsUnreadMessage?: (message: HandleableMessage) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n isFirstUnreadMessage?: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n renderUnreadMessagesFloating?: null | ((props: UnreadMessagesFloatingProps) => React.ReactElement | null);\n unreadMessagesFloatingProps?: UnreadMessagesFloatingProps;\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n onViewableItemsChanged?: FlatListProps<SendbirdMessage>['onViewableItemsChanged'];\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n onPressMarkAsUnreadMessage,\n currentUserId,\n renderUnreadMessagesFloating,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n unreadFirstMessage,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListComponent,\n flatListProps,\n onViewableItemsChanged,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n unreadMessagesFloatingProps,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressMarkAsUnreadMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n isFirstUnreadMessage: unreadFirstMessage?.messageId === item.messageId,\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n {renderUnreadMessagesFloating && (\n <View\n style={[channel.isFrozen ? styles.unreadMsgFloatingWhenFrozen : styles.unreadMsgFloating, safeAreaLayout]}\n >\n {renderUnreadMessagesFloating({\n visible: unreadMessagesFloatingProps?.visible ?? false,\n onPressClose: () => unreadMessagesFloatingProps?.onPressClose(),\n unreadMessageCount: unreadMessagesFloatingProps?.unreadMessageCount ?? 0,\n })}\n </View>\n )}\n <ChatFlatList\n flatListComponent={flatListComponent}\n {...flatListProps}\n onViewableItemsChanged={onViewableItemsChanged}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n onPressMarkAsUnreadMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n | 'onPressMarkAsUnreadMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const onMarkAsUnread = (message: HandleableMessage) => {\n onPressMarkAsUnreadMessage?.(message);\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n markAsUnread: (message: HandleableMessage) => ({\n icon: 'mark-as-unread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_MARK_AS_UNREAD,\n onPress: () => onMarkAsUnread(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (message.sendingStatus === 'succeeded') {\n const isMyMsg = isMyMessage(message, currentUserId);\n if (isMyMsg) {\n sheetItems.push(menu.edit(message));\n }\n\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n sheetItems.push(menu.markAsUnread(message));\n }\n\n if (isMyMsg) {\n sheetItems.push(menu.delete(message));\n }\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (message.sendingStatus === 'succeeded') {\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n sheetItems.push(menu.markAsUnread(message));\n }\n\n if (isMyMessage(message, currentUserId)) {\n sheetItems.push(menu.delete(message));\n }\n }\n\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n unreadMsgFloating: {\n position: 'absolute',\n zIndex: 999,\n top: 12,\n alignSelf: 'center',\n },\n unreadMsgFloatingWhenFrozen: {\n position: 'absolute',\n zIndex: 999,\n top: 40,\n alignSelf: 'center',\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelMessageList) as typeof ChannelMessageList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","View","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useSafeAreaPadding","useLocalization","usePlatformService","useSBUHandlers","useSendbirdChat","useUserProfile","SBUUtils","ChatFlatList","ReactionAddons","ChannelMessageList","searchItem","hasNext","channel","onEditMessage","onReplyMessage","onReplyInThreadMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","onPressParentMessage","onPressMarkAsUnreadMessage","currentUserId","renderUnreadMessagesFloating","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","unreadFirstMessage","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListComponent","flatListProps","onViewableItemsChanged","onPressNewMessagesButton","onPressScrollToBottomButton","unreadMessagesFloatingProps","ref","STRINGS","colors","show","safeAreaLayout","createMessagePressActions","useCreateMessagePressActions","renderItem","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","isFirstUnreadMessage","messageId","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","unreadMsgFloatingWhenFrozen","unreadMsgFloating","visible","onPressClose","unreadMessageCount","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","length","scrollButton","handlers","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","_handlers$onOpenFileU","onOpenFileURL","call","openFile","openURL","onMarkAsUnread","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","menu","copy","icon","CHANNEL_MESSAGE_COPY","markAsUnread","CHANNEL_MESSAGE_MARK_AS_UNREAD","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","reply","Boolean","parentMessageId","CHANNEL_MESSAGE_REPLY","replyInThread","CHANNEL_MESSAGE_THREAD","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","isMyMsg","isGroupChannel","uikit","groupChannel","enableMarkAsUnread","replyType","configs","uikitWithAppInfo","HeaderComponent","isSuper","enableReactionsSupergroup","enableReactions","onClose","BottomSheet","position","zIndex","top","start","end","paddingBottom","alignSelf","bottom","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n useSafeAreaPadding,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport {\n useLocalization,\n usePlatformService,\n useSBUHandlers,\n useSendbirdChat,\n useUserProfile,\n} from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport ChatFlatList from '../ChatFlatList';\nimport { ReactionAddons } from '../ReactionAddons';\nimport { UnreadMessagesFloatingProps } from '../UnreadMessagesFloating';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n unreadFirstMessage?: SendbirdMessage;\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onReplyMessage?: (message: HandleableMessage) => void; // only available on group channel\n onReplyInThreadMessage?: (message: HandleableMessage) => void; // only available on group channel\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressParentMessage?: (parentMessage: SendbirdMessage, childMessage: HandleableMessage) => void;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n onPressMarkAsUnreadMessage?: (message: HandleableMessage) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onPressParentMessage?: ChannelMessageListProps<T>['onPressParentMessage'];\n onReplyInThreadMessage?: ChannelMessageListProps<T>['onReplyInThreadMessage'];\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n isFirstUnreadMessage?: boolean;\n hideParentMessage?: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n renderUnreadMessagesFloating?: null | ((props: UnreadMessagesFloatingProps) => React.ReactElement | null);\n unreadMessagesFloatingProps?: UnreadMessagesFloatingProps;\n flatListComponent?: React.ComponentType<FlatListProps<SendbirdMessage>>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n onViewableItemsChanged?: FlatListProps<SendbirdMessage>['onViewableItemsChanged'];\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressParentMessage,\n onPressMarkAsUnreadMessage,\n currentUserId,\n renderUnreadMessagesFloating,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n unreadFirstMessage,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListComponent,\n flatListProps,\n onViewableItemsChanged,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n unreadMessagesFloatingProps,\n }: ChannelMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const safeAreaLayout = useSafeAreaPadding(['left', 'right']);\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n onPressMarkAsUnreadMessage,\n });\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n isFirstUnreadMessage: unreadFirstMessage?.messageId === item.messageId,\n onPress,\n onLongPress,\n onPressParentMessage,\n onReplyInThreadMessage,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n {renderUnreadMessagesFloating && (\n <View\n style={[channel.isFrozen ? styles.unreadMsgFloatingWhenFrozen : styles.unreadMsgFloating, safeAreaLayout]}\n >\n {renderUnreadMessagesFloating({\n visible: unreadMessagesFloatingProps?.visible ?? false,\n onPressClose: () => unreadMessagesFloatingProps?.onPressClose(),\n unreadMessageCount: unreadMessagesFloatingProps?.unreadMessageCount ?? 0,\n })}\n </View>\n )}\n <ChatFlatList\n flatListComponent={flatListComponent}\n {...flatListProps}\n onViewableItemsChanged={onViewableItemsChanged}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onReplyMessage,\n onReplyInThreadMessage,\n onDeleteMessage,\n onPressMediaMessage,\n onPressMarkAsUnreadMessage,\n}: Pick<\n ChannelMessageListProps<T>,\n | 'channel'\n | 'currentUserId'\n | 'onEditMessage'\n | 'onReplyMessage'\n | 'onReplyInThreadMessage'\n | 'onDeleteMessage'\n | 'onResendFailedMessage'\n | 'onPressMediaMessage'\n | 'onPressMarkAsUnreadMessage'\n>): CreateMessagePressActions => {\n const handlers = useSBUHandlers();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n handlers.onOpenFileURL?.(message.url);\n } else {\n const openFile = handlers.onOpenFileURL ?? SBUUtils.openURL;\n openFile(message.url);\n }\n }\n };\n\n const onMarkAsUnread = (message: HandleableMessage) => {\n onPressMarkAsUnreadMessage?.(message);\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n markAsUnread: (message: HandleableMessage) => ({\n icon: 'mark-as-unread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_MARK_AS_UNREAD,\n onPress: () => onMarkAsUnread(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n reply: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'reply' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_REPLY,\n onPress: () => onReplyMessage?.(message),\n }),\n replyInThread: (message: HandleableMessage) => ({\n disabled: Boolean(message.parentMessageId),\n icon: 'thread' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_THREAD,\n onPress: () => onReplyInThreadMessage?.(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (message.sendingStatus === 'succeeded') {\n const isMyMsg = isMyMessage(message, currentUserId);\n if (isMyMsg) {\n sheetItems.push(menu.edit(message));\n }\n\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n sheetItems.push(menu.markAsUnread(message));\n }\n\n if (isMyMsg) {\n sheetItems.push(menu.delete(message));\n }\n }\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (message.sendingStatus === 'succeeded') {\n if (channel.isGroupChannel() && sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n sheetItems.push(menu.markAsUnread(message));\n }\n\n if (isMyMessage(message, currentUserId)) {\n sheetItems.push(menu.delete(message));\n }\n }\n\n if (channel.isGroupChannel()) {\n if (sbOptions.uikit.groupChannel.channel.replyType === 'thread' && onReplyInThreadMessage !== undefined) {\n sheetItems.push(menu.replyInThread(message));\n } else if (sbOptions.uikit.groupChannel.channel.replyType === 'quote_reply') {\n sheetItems.push(menu.reply(message));\n }\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n start: 8,\n end: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n unreadMsgFloating: {\n position: 'absolute',\n zIndex: 999,\n top: 12,\n alignSelf: 'center',\n },\n unreadMsgFloatingWhenFrozen: {\n position: 'absolute',\n zIndex: 999,\n top: 40,\n alignSelf: 'center',\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n end: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it properly for React 19 compatibility\nexport default React.forwardRef(ChannelMessageList) as <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n props: ChannelMessageListProps<T>,\n) => React.ReactElement | null;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -325,6 +325,6 @@ const styles = createStyleSheet({
|
|
|
325
325
|
}
|
|
326
326
|
});
|
|
327
327
|
|
|
328
|
-
// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it
|
|
328
|
+
// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it properly for React 19 compatibility
|
|
329
329
|
export default /*#__PURE__*/React.forwardRef(ChannelThreadMessageList);
|
|
330
330
|
//# sourceMappingURL=index.js.map
|