import { useContext, useEffect, useState } from "react"; import { useDropzone } from "react-dropzone"; import { CircleAlertIcon, UploadIcon } from "lucide-react"; import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { ImageContext } from "@/context/Image"; function OpenImage({ close }: DialogProps) { const { setImage: setContextImage, setImageDimensions: setContextImageDimensions } = useContext(ImageContext); const { acceptedFiles, getRootProps, getInputProps } = useDropzone({ accept: { "image/*": [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".tiff", ".svg"], }, }); const [image, setImage] = useState(); const [imageDimensions, setImageDimensions] = useState({ width: 0, height: 0 }); const [aspectRatio, setAspectRatio] = useState(1); useEffect(() => { if (acceptedFiles[0]) { const img = new Image(); img.onload = () => { setImage(img); setImageDimensions({ width: img.width, height: img.height }); setAspectRatio(img.width / img.height); }; img.src = URL.createObjectURL(acceptedFiles[0]); } }, [acceptedFiles]); const onDimensionChange = (e: React.ChangeEvent, isWidth: boolean) => { const newDimension = Number(e.target.value); if (newDimension < 1 || newDimension > 10000) return; setImageDimensions(() => { if (isWidth) { return { width: newDimension, height: Math.round(newDimension / aspectRatio) }; } else { return { width: Math.round(newDimension / aspectRatio), height: newDimension }; } }); }; const onSubmit = () => { if (image) { setContextImage(image); setContextImageDimensions(imageDimensions); close(); } }; return ( Open Image Open your image to load as blocks into the canvas

Drag and drop your image here

{image && acceptedFiles[0] && ( <> your image

{acceptedFiles[0].name}

onDimensionChange(e, true)} />
onDimensionChange(e, false)} />
)}
{imageDimensions.height > 384 && (
The height is above 384 blocks!
)}
); } export default OpenImage;