Skip to content

Commit 364f805

Browse files
committed
feat: update expo-document-picker and support backward compatibility
1 parent 1a49294 commit 364f805

File tree

4 files changed

+63
-36
lines changed

4 files changed

+63
-36
lines changed

packages/uikit-react-native/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
"date-fns": "^2.28.0",
7878
"expo-av": "^13.2.1",
7979
"expo-clipboard": "^4.1.2",
80-
"expo-document-picker": "^11.2.2",
80+
"expo-document-picker": "^11.5.3",
8181
"expo-file-system": "^15.2.2",
8282
"expo-image-manipulator": "^11.1.1",
8383
"expo-image-picker": "^14.1.1",

packages/uikit-react-native/src/platform/createFileService.expo.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import SBUError from '../libs/SBUError';
99
import expoBackwardUtils from '../utils/expoBackwardUtils';
1010
import type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';
1111
import expoPermissionGranted from '../utils/expoPermissionGranted';
12-
import normalizeFile from '../utils/normalizeFile';
1312
import type {
1413
FilePickerResponse,
1514
FileServiceInterface,
@@ -77,10 +76,10 @@ const createExpoFileService = ({
7776
})(),
7877
});
7978

80-
if (expoBackwardUtils.toCanceled(response)) return null;
79+
if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;
8180

82-
const filePickerRes = await expoBackwardUtils.toFilePickerResponses(response, fsModule);
83-
return filePickerRes[0];
81+
const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);
82+
return file;
8483
}
8584
async openMediaLibrary(options: OpenMediaLibraryOptions) {
8685
const hasPermission = await this.hasMediaLibraryPermission('read');
@@ -108,16 +107,17 @@ const createExpoFileService = ({
108107
}
109108
})(),
110109
});
111-
if (expoBackwardUtils.toCanceled(response)) return null;
112-
return expoBackwardUtils.toFilePickerResponses(response, fsModule);
110+
if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;
111+
return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);
113112
}
114113

115114
async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {
116115
try {
117116
const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });
118-
if (response.type === 'cancel') return null;
119-
const { mimeType, uri, size, name } = response;
120-
return normalizeFile({ uri, size, name, type: mimeType });
117+
if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;
118+
119+
const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);
120+
return file;
121121
} catch (e) {
122122
options?.onOpenFailure?.(SBUError.UNKNOWN, e);
123123
return null;
Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,59 @@
1+
import type * as ExpoDocumentPicker from 'expo-document-picker';
12
import type * as ExpoFs from 'expo-file-system';
23
import type * as ExpoImagePicker from 'expo-image-picker';
34

45
import type { FilePickerResponse } from '../platform/types';
56
import normalizeFile from './normalizeFile';
67

78
const expoBackwardUtils = {
8-
toCanceled(result: ExpoImagePicker.ImagePickerResult) {
9-
// @ts-expect-error backward compatibility
10-
return result.canceled ?? result.cancelled;
9+
imagePicker: {
10+
isCanceled(result: ExpoImagePicker.ImagePickerResult) {
11+
// @ts-expect-error backward compatibility
12+
return result.canceled ?? result.cancelled;
13+
},
14+
async toFilePickerResponses(
15+
result: ExpoImagePicker.ImagePickerResult,
16+
fsModule: typeof ExpoFs,
17+
): Promise<FilePickerResponse[]> {
18+
if (result.assets) {
19+
const assets = result.assets || [];
20+
const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>
21+
normalizeFile({ uri, size, name, type }),
22+
);
23+
24+
return Promise.all(promises);
25+
} else if ('uri' in result && typeof result.uri === 'string') {
26+
const fileInfo = await fsModule.getInfoAsync(result.uri);
27+
const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });
28+
return [response];
29+
} else {
30+
return [];
31+
}
32+
},
33+
},
34+
documentPicker: {
35+
isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {
36+
// @ts-expect-error backward compatibility
37+
return result.canceled ?? result.type === 'cancel';
38+
},
39+
async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {
40+
if (result.assets) {
41+
const assets = result.assets || [];
42+
const promises = assets.map(({ name, size, mimeType, uri }) =>
43+
normalizeFile({ uri, size, name, type: mimeType }),
44+
);
45+
46+
return Promise.all(promises);
47+
} else if ('uri' in result && typeof result.uri === 'string') {
48+
// @ts-expect-error backward compatibility
49+
const { mimeType, uri, size, name } = result;
50+
const response = await normalizeFile({ uri, size, name, type: mimeType });
51+
52+
return [response];
53+
} else {
54+
return [];
55+
}
56+
},
1157
},
1258
toFileSize(info: ExpoFs.FileInfo) {
1359
if ('size' in info) {
@@ -16,25 +62,6 @@ const expoBackwardUtils = {
1662
return 0;
1763
}
1864
},
19-
async toFilePickerResponses(
20-
result: ExpoImagePicker.ImagePickerResult,
21-
fsModule: typeof ExpoFs,
22-
): Promise<FilePickerResponse[]> {
23-
if (result.assets) {
24-
const assets = result.assets || [];
25-
const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>
26-
normalizeFile({ uri, size, name, type }),
27-
);
28-
29-
return Promise.all(promises);
30-
} else if ('uri' in result && typeof result.uri === 'string') {
31-
const fileInfo = await fsModule.getInfoAsync(result.uri);
32-
const response = await normalizeFile({ uri: result.uri, size: this.toFileSize(fileInfo) });
33-
return [response];
34-
} else {
35-
return [];
36-
}
37-
},
3865
};
3966

4067
export default expoBackwardUtils;

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7438,10 +7438,10 @@ expo-constants@~14.2.0:
74387438
"@expo/config" "~8.0.0"
74397439
uuid "^3.3.2"
74407440

7441-
expo-document-picker@^11.2.2:
7442-
version "11.2.2"
7443-
resolved "https://registry.yarnpkg.com/expo-document-picker/-/expo-document-picker-11.2.2.tgz#707ff994a1c0b38505e12b2c9fe6b67715e6f41c"
7444-
integrity sha512-EeonRKxkK9E20LEAh93IvlwFjNkUCJKnhBEama9PmIDYWW7RyANZ8eP9C2PupThTDbivzRDNp7Ec7dIeyDAWjw==
7441+
expo-document-picker@^11.5.3:
7442+
version "11.5.3"
7443+
resolved "https://registry.yarnpkg.com/expo-document-picker/-/expo-document-picker-11.5.3.tgz#90f23412332ea6ec7ee42fcaaff7ede175114b8e"
7444+
integrity sha512-nneIdDIKGtU6DQfcF5YJPQdIF2CYug5LapOkktE/0Lc7nXs1O+ejQ8zHLzgbdm2VFymL8d6I6x86sNt8VheBXw==
74457445

74467446
expo-file-system@^15.2.2:
74477447
version "15.2.2"

0 commit comments

Comments
 (0)