Skip to content

Commit d7402aa

Browse files
committed
separate options & results by mediatype
1 parent 78d9834 commit d7402aa

File tree

1 file changed

+31
-8
lines changed

1 file changed

+31
-8
lines changed

src/index.d.ts

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,30 @@ export type Results = {
1313
width: number;
1414
height: number;
1515
mime: string;
16-
type: string;
1716
size: number;
1817
bucketId?: number;
1918
realPath?: string;
2019
parentFolderName?: string;
21-
thumbnail?: string;
2220
creationDate?: string;
2321
};
2422

23+
export interface VideoResults extends Results {
24+
type: MediaType.VIDEO;
25+
thumbnail?: string;
26+
}
27+
28+
export interface ImageResults extends Results {
29+
type: MediaType.IMAGE;
30+
thumbnail?: undefined;
31+
}
32+
2533
export type PickerErrorCode =
2634
| 'PICKER_CANCELLED'
2735
| 'NO_LIBRARY_PERMISSION'
2836
| 'NO_CAMERA_PERMISSION';
2937

30-
export type Options = {
38+
export type Options<T extends MediaType = MediaType.ALL> = {
39+
mediaType?: T;
3140
isPreview?: boolean;
3241
selectedColor?: string;
3342
tapHereToChange?: string;
@@ -49,7 +58,6 @@ export type Options = {
4958
autoPlay?: boolean;
5059
muteAudio?: boolean;
5160
preventAutomaticLimitedAccessAlert?: boolean; // newest iOS 14
52-
mediaType?: MediaType;
5361
numberOfColumn?: number;
5462
maxSelectedAssets?: number;
5563
fetchOption?: Object;
@@ -63,19 +71,34 @@ export type Options = {
6371
haveThumbnail?: boolean;
6472
};
6573

66-
export interface SinglePickerOptions extends Options {
74+
export interface SinglePickerOptions {
6775
selectedAssets?: Results;
6876
singleSelectedMode: true;
6977
}
7078

71-
export interface MultiPickerOptions extends Options {
79+
export interface MultiPickerOptions {
7280
selectedAssets?: Results[];
7381
singleSelectedMode?: false;
7482
}
7583

84+
interface MediaTypeOptions {
85+
[MediaType.VIDEO]: { isExportThumbnail?: boolean };
86+
[MediaType.ALL]: MediaTypeOptions[MediaType.VIDEO];
87+
}
88+
89+
interface MediaTypeResults {
90+
[MediaType.IMAGE]: ImageResults;
91+
[MediaType.VIDEO]: VideoResults;
92+
[MediaType.ALL]: ImageResults | VideoResults;
93+
}
94+
7695
type MultipleImagePickerType = {
77-
openPicker(options: MultiPickerOptions): Promise<Results[]>;
78-
openPicker(options: SinglePickerOptions): Promise<Results>;
96+
openPicker<T extends MediaType = MediaType.ALL>(
97+
options: MultiPickerOptions & MediaTypeOptions[T] & Options<T>
98+
): Promise<MediaTypeResults[T][]>;
99+
openPicker<T extends MediaType = MediaType.ALL>(
100+
options: SinglePickerOptions & MediaTypeOptions[T] & Options<T>
101+
): Promise<MediaTypeResults[T]>;
79102
};
80103

81104
const { MultipleImagePicker } = NativeModules;

0 commit comments

Comments
 (0)