diff options
Diffstat (limited to 'src/lib/media/picker.tsx')
-rw-r--r-- | src/lib/media/picker.tsx | 87 |
1 files changed, 14 insertions, 73 deletions
diff --git a/src/lib/media/picker.tsx b/src/lib/media/picker.tsx index 70a5d9068..af4a3e4d3 100644 --- a/src/lib/media/picker.tsx +++ b/src/lib/media/picker.tsx @@ -5,14 +5,8 @@ import { ImageOrVideo, } from 'react-native-image-crop-picker' import {RootStoreModel} from 'state/index' -import {PickerOpts, CameraOpts, CropperOpts, PickedMedia} from './types' -import { - scaleDownDimensions, - Dim, - compressIfNeeded, - moveToPremanantPath, -} from 'lib/media/manip' -export type {PickedMedia} from './types' +import {PickerOpts, CameraOpts, CropperOptions} from './types' +import {Image as RNImage} from 'react-native-image-crop-picker' /** * NOTE @@ -25,18 +19,17 @@ export type {PickedMedia} from './types' export async function openPicker( _store: RootStoreModel, - opts: PickerOpts, -): Promise<PickedMedia[]> { - const mediaType = opts.mediaType || 'photo' + opts?: PickerOpts, +): Promise<RNImage[]> { const items = await openPickerFn({ - mediaType, - multiple: opts.multiple, - maxFiles: opts.maxFiles, + mediaType: 'photo', // TODO: eventually add other media types + multiple: opts?.multiple, + maxFiles: opts?.maxFiles, forceJpg: true, // ios only compressImageQuality: 0.8, }) + const toMedia = (item: ImageOrVideo) => ({ - mediaType, path: item.path, mime: item.mime, size: item.size, @@ -52,20 +45,17 @@ export async function openPicker( export async function openCamera( _store: RootStoreModel, opts: CameraOpts, -): Promise<PickedMedia> { - const mediaType = opts.mediaType || 'photo' +): Promise<RNImage> { const item = await openCameraFn({ - mediaType, width: opts.width, height: opts.height, freeStyleCropEnabled: opts.freeStyleCropEnabled, cropperCircleOverlay: opts.cropperCircleOverlay, - cropping: true, + cropping: false, forceJpg: true, // ios only compressImageQuality: 0.8, }) return { - mediaType, path: item.path, mime: item.mime, size: item.size, @@ -76,21 +66,15 @@ export async function openCamera( export async function openCropper( _store: RootStoreModel, - opts: CropperOpts, -): Promise<PickedMedia> { - const mediaType = opts.mediaType || 'photo' + opts: CropperOptions, +): Promise<RNImage> { const item = await openCropperFn({ - path: opts.path, - mediaType: opts.mediaType || 'photo', - width: opts.width, - height: opts.height, - freeStyleCropEnabled: opts.freeStyleCropEnabled, - cropperCircleOverlay: opts.cropperCircleOverlay, + ...opts, forceJpg: true, // ios only compressImageQuality: 0.8, }) + return { - mediaType, path: item.path, mime: item.mime, size: item.size, @@ -98,46 +82,3 @@ export async function openCropper( height: item.height, } } - -export async function pickImagesFlow( - store: RootStoreModel, - maxFiles: number, - maxDim: Dim, - maxSize: number, -) { - const items = await openPicker(store, { - multiple: true, - maxFiles, - mediaType: 'photo', - }) - const result = [] - for (const image of items) { - result.push( - await cropAndCompressFlow(store, image.path, image, maxDim, maxSize), - ) - } - return result -} - -export async function cropAndCompressFlow( - store: RootStoreModel, - path: string, - imgDim: Dim, - maxDim: Dim, - maxSize: number, -) { - // choose target dimensions based on the original - // this causes the photo cropper to start with the full image "selected" - const {width, height} = scaleDownDimensions(imgDim, maxDim) - const cropperRes = await openCropper(store, { - mediaType: 'photo', - path, - freeStyleCropEnabled: true, - width, - height, - }) - - const img = await compressIfNeeded(cropperRes, maxSize) - const permanentPath = await moveToPremanantPath(img.path) - return permanentPath -} |