11import type { CameraRoll } from '@react-native-camera-roll/camera-roll' ;
22import { Platform } from 'react-native' ;
3- import type * as DocumentPicker from 'react-native-document-picker' ;
43import type * as FileAccess from 'react-native-file-access' ;
54import type * as ImagePicker from 'react-native-image-picker' ;
65import type * as Permissions from 'react-native-permissions' ;
@@ -18,6 +17,7 @@ import {
1817import SBUError from '../libs/SBUError' ;
1918import nativePermissionGranted from '../utils/nativePermissionGranted' ;
2019import normalizeFile from '../utils/normalizeFile' ;
20+ import { DocumentPicker , openDocument } from './openDocument.native' ;
2121import type {
2222 FilePickerResponse ,
2323 FileServiceInterface ,
@@ -52,7 +52,7 @@ const createNativeFileService = ({
5252 fsModule,
5353} : {
5454 imagePickerModule : typeof ImagePicker ;
55- documentPickerModule : typeof DocumentPicker ;
55+ documentPickerModule : DocumentPicker ;
5656 permissionModule : typeof Permissions ;
5757 mediaLibraryModule : typeof CameraRoll ;
5858 fsModule : typeof FileAccess ;
@@ -78,17 +78,20 @@ const createNativeFileService = ({
7878 const status = await permissionModule . checkMultiple ( requiredPermissions ) ;
7979 return nativePermissionGranted ( status ) ;
8080 }
81+
8182 async requestCameraPermission ( ) : Promise < boolean > {
8283 const requiredPermissionsStatus = await permissionModule . requestMultiple ( requiredPermissions ) ;
8384 if ( ! nativePermissionGranted ( requiredPermissionsStatus ) ) return false ;
8485
8586 await permissionModule . requestMultiple ( optionalPermissions ) ;
8687 return true ;
8788 }
89+
8890 async hasMediaLibraryPermission ( ) : Promise < boolean > {
8991 const status = await permissionModule . checkMultiple ( mediaLibraryPermissions ) ;
9092 return nativePermissionGranted ( status ) ;
9193 }
94+
9295 async requestMediaLibraryPermission ( ) : Promise < boolean > {
9396 const status = await permissionModule . requestMultiple ( mediaLibraryPermissions ) ;
9497 return nativePermissionGranted ( status ) ;
@@ -129,6 +132,7 @@ const createNativeFileService = ({
129132 const { fileName : name , fileSize : size , type, uri } = response . assets ?. [ 0 ] ?? { } ;
130133 return normalizeFile ( { uri, size, name, type } ) ;
131134 }
135+
132136 async openMediaLibrary ( options ?: OpenMediaLibraryOptions ) : Promise < FilePickerResponse [ ] | null > {
133137 /**
134138 * NOTE: options.selectionLimit {@link https://github.com/react-native-image-picker/react-native-image-picker#options}
@@ -172,17 +176,11 @@ const createNativeFileService = ({
172176 . map ( ( { fileName : name , fileSize : size , type, uri } ) => normalizeFile ( { uri, size, name, type } ) ) ,
173177 ) ;
174178 }
179+
175180 async openDocument ( options ?: OpenDocumentOptions ) : Promise < FilePickerResponse > {
176- try {
177- const { uri, size, name, type } = await documentPickerModule . pickSingle ( ) ;
178- return normalizeFile ( { uri, size, name, type } ) ;
179- } catch ( e ) {
180- if ( ! documentPickerModule . isCancel ( e ) && documentPickerModule . isInProgress ( e ) ) {
181- options ?. onOpenFailure ?.( SBUError . UNKNOWN , e ) ;
182- }
183- return null ;
184- }
181+ return await openDocument ( documentPickerModule , options ) ;
185182 }
183+
186184 async save ( options : SaveOptions ) : Promise < string > {
187185 const hasPermission = await this . hasMediaLibraryPermission ( ) ;
188186 if ( ! hasPermission ) {
0 commit comments