51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import {type ImagePickerOptions, launchCameraAsync} from 'expo-image-picker'
|
|
import ExpoImageCropTool, {
|
|
type OpenCropperOptions,
|
|
} from '@bsky.app/expo-image-crop-tool'
|
|
import {t} from '@lingui/core/macro'
|
|
|
|
export {
|
|
openPicker,
|
|
openUnifiedPicker,
|
|
type PickerImage as RNImage,
|
|
} from './picker.shared'
|
|
|
|
export async function openCamera(customOpts: ImagePickerOptions) {
|
|
const opts: ImagePickerOptions = {
|
|
mediaTypes: 'images',
|
|
...customOpts,
|
|
}
|
|
const res = await launchCameraAsync(opts)
|
|
|
|
if (!res || !res.assets) {
|
|
throw new Error('Camera was closed before taking a photo')
|
|
}
|
|
|
|
const asset = res?.assets[0]
|
|
|
|
return {
|
|
path: asset.uri,
|
|
mime: asset.mimeType ?? 'image/jpeg',
|
|
size: asset.fileSize ?? 0,
|
|
width: asset.width,
|
|
height: asset.height,
|
|
}
|
|
}
|
|
|
|
export async function openCropper(opts: OpenCropperOptions) {
|
|
const item = await ExpoImageCropTool.openCropperAsync({
|
|
doneButtonText: t`Done`,
|
|
cancelButtonText: t`Cancel`,
|
|
...opts,
|
|
format: 'jpeg',
|
|
})
|
|
|
|
return {
|
|
path: item.path,
|
|
mime: item.mimeType,
|
|
size: item.size,
|
|
width: item.width,
|
|
height: item.height,
|
|
}
|
|
}
|