From 82caac4055c4b2a38e2c680d2aa52e0b10457df1 Mon Sep 17 00:00:00 2001 From: crockalet Date: Fri, 17 Jun 2022 21:11:51 +0500 Subject: [PATCH 1/3] fix: singleSelectedMode ts response from [] -> obj --- src/index.d.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/index.d.ts b/src/index.d.ts index 92ab63a9..2021f55b 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -24,7 +24,6 @@ export type PickerErrorCode = export type Options = { isPreview?: boolean; selectedColor?: string; - selectedAssets?: Results[]; tapHereToChange?: string; cancelTitle?: string; doneTitle?: string; @@ -49,7 +48,6 @@ export type Options = { maxSelectedAssets?: number; fetchOption?: Object; fetchCollectionOption?: Object; - singleSelectedMode?: boolean; maximumMessageTitle?: string; maximumMessage?: string; messageTitleButton?: string; @@ -59,8 +57,19 @@ export type Options = { haveThumbnail?: boolean; }; +export interface SinglePickerOptions extends Options { + selectedAssets?: Results; + singleSelectedMode: true; +} + +export interface MultiPickerOptions extends Options { + selectedAssets?: Results[]; + singleSelectedMode?: false; +} + type MultipleImagePickerType = { - openPicker(options: Options): Promise; + openPicker(options: MultiPickerOptions): Promise; + openPicker(options: SinglePickerOptions): Promise; }; const { MultipleImagePicker } = NativeModules; From 78d98344aae87322aaae487339958ba590fca892 Mon Sep 17 00:00:00 2001 From: crockalet Date: Fri, 17 Jun 2022 21:42:31 +0500 Subject: [PATCH 2/3] feat: add mediatype enum --- src/index.d.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/index.d.ts b/src/index.d.ts index 2021f55b..9d74ef54 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -1,5 +1,11 @@ import { NativeModules, Image } from 'react-native'; +export enum MediaType { + VIDEO = 'video', + IMAGE = 'image', + ALL = 'all', +} + export type Results = { path: string; fileName: string; @@ -43,7 +49,7 @@ export type Options = { autoPlay?: boolean; muteAudio?: boolean; preventAutomaticLimitedAccessAlert?: boolean; // newest iOS 14 - mediaType?: string; + mediaType?: MediaType; numberOfColumn?: number; maxSelectedAssets?: number; fetchOption?: Object; From d7402aa939e88848362ab4418c0e21f9dbaca02c Mon Sep 17 00:00:00 2001 From: crockalet Date: Sun, 19 Jun 2022 00:57:18 +0500 Subject: [PATCH 3/3] separate options & results by mediatype --- src/index.d.ts | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/index.d.ts b/src/index.d.ts index 9d74ef54..a0d518bb 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -13,21 +13,30 @@ export type Results = { width: number; height: number; mime: string; - type: string; size: number; bucketId?: number; realPath?: string; parentFolderName?: string; - thumbnail?: string; creationDate?: string; }; +export interface VideoResults extends Results { + type: MediaType.VIDEO; + thumbnail?: string; +} + +export interface ImageResults extends Results { + type: MediaType.IMAGE; + thumbnail?: undefined; +} + export type PickerErrorCode = | 'PICKER_CANCELLED' | 'NO_LIBRARY_PERMISSION' | 'NO_CAMERA_PERMISSION'; -export type Options = { +export type Options = { + mediaType?: T; isPreview?: boolean; selectedColor?: string; tapHereToChange?: string; @@ -49,7 +58,6 @@ export type Options = { autoPlay?: boolean; muteAudio?: boolean; preventAutomaticLimitedAccessAlert?: boolean; // newest iOS 14 - mediaType?: MediaType; numberOfColumn?: number; maxSelectedAssets?: number; fetchOption?: Object; @@ -63,19 +71,34 @@ export type Options = { haveThumbnail?: boolean; }; -export interface SinglePickerOptions extends Options { +export interface SinglePickerOptions { selectedAssets?: Results; singleSelectedMode: true; } -export interface MultiPickerOptions extends Options { +export interface MultiPickerOptions { selectedAssets?: Results[]; singleSelectedMode?: false; } +interface MediaTypeOptions { + [MediaType.VIDEO]: { isExportThumbnail?: boolean }; + [MediaType.ALL]: MediaTypeOptions[MediaType.VIDEO]; +} + +interface MediaTypeResults { + [MediaType.IMAGE]: ImageResults; + [MediaType.VIDEO]: VideoResults; + [MediaType.ALL]: ImageResults | VideoResults; +} + type MultipleImagePickerType = { - openPicker(options: MultiPickerOptions): Promise; - openPicker(options: SinglePickerOptions): Promise; + openPicker( + options: MultiPickerOptions & MediaTypeOptions[T] & Options + ): Promise; + openPicker( + options: SinglePickerOptions & MediaTypeOptions[T] & Options + ): Promise; }; const { MultipleImagePicker } = NativeModules;