1
1
import type { CameraRoll } from '@react-native-camera-roll/camera-roll' ;
2
2
import { Platform } from 'react-native' ;
3
- import type * as DocumentPicker from 'react-native-document-picker' ;
4
3
import type * as FileAccess from 'react-native-file-access' ;
5
4
import type * as ImagePicker from 'react-native-image-picker' ;
6
5
import type * as Permissions from 'react-native-permissions' ;
@@ -18,6 +17,7 @@ import {
18
17
import SBUError from '../libs/SBUError' ;
19
18
import nativePermissionGranted from '../utils/nativePermissionGranted' ;
20
19
import normalizeFile from '../utils/normalizeFile' ;
20
+ import { DocumentPicker , openDocument } from './openDocument.native' ;
21
21
import type {
22
22
FilePickerResponse ,
23
23
FileServiceInterface ,
@@ -52,7 +52,7 @@ const createNativeFileService = ({
52
52
fsModule,
53
53
} : {
54
54
imagePickerModule : typeof ImagePicker ;
55
- documentPickerModule : typeof DocumentPicker ;
55
+ documentPickerModule : DocumentPicker ;
56
56
permissionModule : typeof Permissions ;
57
57
mediaLibraryModule : typeof CameraRoll ;
58
58
fsModule : typeof FileAccess ;
@@ -78,17 +78,20 @@ const createNativeFileService = ({
78
78
const status = await permissionModule . checkMultiple ( requiredPermissions ) ;
79
79
return nativePermissionGranted ( status ) ;
80
80
}
81
+
81
82
async requestCameraPermission ( ) : Promise < boolean > {
82
83
const requiredPermissionsStatus = await permissionModule . requestMultiple ( requiredPermissions ) ;
83
84
if ( ! nativePermissionGranted ( requiredPermissionsStatus ) ) return false ;
84
85
85
86
await permissionModule . requestMultiple ( optionalPermissions ) ;
86
87
return true ;
87
88
}
89
+
88
90
async hasMediaLibraryPermission ( ) : Promise < boolean > {
89
91
const status = await permissionModule . checkMultiple ( mediaLibraryPermissions ) ;
90
92
return nativePermissionGranted ( status ) ;
91
93
}
94
+
92
95
async requestMediaLibraryPermission ( ) : Promise < boolean > {
93
96
const status = await permissionModule . requestMultiple ( mediaLibraryPermissions ) ;
94
97
return nativePermissionGranted ( status ) ;
@@ -129,6 +132,7 @@ const createNativeFileService = ({
129
132
const { fileName : name , fileSize : size , type, uri } = response . assets ?. [ 0 ] ?? { } ;
130
133
return normalizeFile ( { uri, size, name, type } ) ;
131
134
}
135
+
132
136
async openMediaLibrary ( options ?: OpenMediaLibraryOptions ) : Promise < FilePickerResponse [ ] | null > {
133
137
/**
134
138
* NOTE: options.selectionLimit {@link https://github.com/react-native-image-picker/react-native-image-picker#options}
@@ -172,17 +176,11 @@ const createNativeFileService = ({
172
176
. map ( ( { fileName : name , fileSize : size , type, uri } ) => normalizeFile ( { uri, size, name, type } ) ) ,
173
177
) ;
174
178
}
179
+
175
180
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 ) ;
185
182
}
183
+
186
184
async save ( options : SaveOptions ) : Promise < string > {
187
185
const hasPermission = await this . hasMediaLibraryPermission ( ) ;
188
186
if ( ! hasPermission ) {
0 commit comments