import { useCallback, useState } from 'react'; import { createPortal } from 'react-dom'; import Cropper, { type Area } from 'react-easy-crop'; import { getCroppedImage } from '../lib/cropImage'; interface ImageCropModalProps { src: string; fileName: string; onCancel: () => void; onConfirm: (file: File) => void; } export default function ImageCropModal({ src, fileName, onCancel, onConfirm }: ImageCropModalProps) { const [crop, setCrop] = useState({ x: 0, y: 0 }); const [zoom, setZoom] = useState(1); const [area, setArea] = useState(null); const [processing, setProcessing] = useState(false); const onCropComplete = useCallback((_: Area, pixels: Area) => setArea(pixels), []); const handleConfirm = async () => { if (!area) return; setProcessing(true); try { const file = await getCroppedImage(src, area, fileName); onConfirm(file); } finally { setProcessing(false); } }; return createPortal(
برش تصویر