'use client'; import { useState, useCallback } from 'react'; import Cropper from 'react-easy-crop'; import { X, Check, Loader2 } from 'lucide-react'; import getCroppedImg from '@/lib/imageUtils'; interface ImageCropperProps { image: string; aspect: number; onCrop: (croppedBlob: Blob) => void; onCancel: () => void; } export default function ImageCropper({ image, aspect, onCrop, onCancel }: ImageCropperProps) { const [crop, setCrop] = useState({ x: 0, y: 0 }); const [zoom, setZoom] = useState(1); const [croppedAreaPixels, setCroppedAreaPixels] = useState(null); const [loading, setLoading] = useState(false); // Define onCropComplete as a useCallback to avoid re-renders const onCropComplete = useCallback((croppedArea: any, croppedAreaPixels: any) => { setCroppedAreaPixels(croppedAreaPixels); }, []); const handleSave = async () => { if (!croppedAreaPixels) return; setLoading(true); try { const croppedImage = await getCroppedImg(image, croppedAreaPixels); onCrop(croppedImage); } catch (e) { console.error(e); } finally { setLoading(false); } }; return (