Files
bsky-social-app/src/lib/media/picker.tsx
T
2026-02-23 20:28:03 +00:00

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,
}
}