import 'react-image-crop/dist/ReactCrop.css' import React from 'react' import {View} from 'react-native' import {Path, Svg} from 'react-native-svg' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import ReactCrop, {PercentCrop} from 'react-image-crop' import {manipulateImage} from '#/state/gallery' import {atoms as a, useTheme} from '#/alf' import {Button, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {Text} from '#/components/Typography' import {EditImageDialogProps} from './EditImageDialog' export const EditImageDialog = (props: EditImageDialogProps) => { return ( ) } const EditImageInner = ({control, image, onChange}: EditImageDialogProps) => { const {_} = useLingui() const t = useTheme() const source = image.source const manips = image.manips const {initialCrop, initialAspect, sourceAspect} = React.useMemo(() => { const initialArea = manips?.crop const originalAspect = source.width / source.height let crop: PercentCrop | undefined let aspect = originalAspect if (initialArea) { crop = { unit: '%', x: (initialArea.originX / source.width) * 100, y: (initialArea.originY / source.height) * 100, width: (initialArea.width / source.width) * 100, height: (initialArea.height / source.height) * 100, } aspect = initialArea.aspect } return { initialCrop: crop, initialAspect: aspect, sourceAspect: originalAspect, } }, [source, manips]) const [crop, setCrop] = React.useState(initialCrop) const [aspect, setAspect] = React.useState(initialAspect) const isEmpty = !crop || (crop.width || crop.height) === 0 const isNew = initialCrop ? true : !isEmpty const onPressSubmit = React.useCallback(async () => { const result = await manipulateImage(image, { crop: !isEmpty ? { aspect: aspect, originX: (crop.x * source.width) / 100, originY: (crop.y * source.height) / 100, width: (crop.width * source.width) / 100, height: (crop.height * source.height) / 100, } : undefined, }) onChange(result) control.close() }, [crop, isEmpty, aspect, image, source, control, onChange]) const changeAspect = (next: number) => { if (next !== aspect) { setAspect(next) setCrop(undefined) } } return ( Edit image setCrop(next)} className="ReactCrop--no-animate"> changeAspect(sourceAspect)}> changeAspect(16 / 9)}> changeAspect(1 / 1)}> ) } const ToolbarButton = ({ children, label, onPress, }: { children: React.ReactElement label: string onPress?: () => void }) => { return ( ) }