import { Download, Loader2 } from "lucide-react"; import { useState } from "react"; import { formatHeaders } from "@/lib/api"; import { useFileStore } from "@/stores/file-store"; export function SplitSettings() { const { files, processing, error, setProcessing, setError } = useFileStore(); const [columns, setColumns] = useState(2); const [rows, setRows] = useState(2); const [downloadReady, setDownloadReady] = useState(false); const handleProcess = async () => { if (files.length === 0) return; setProcessing(true); setError(null); setDownloadReady(false); try { const formData = new FormData(); formData.append("file", files[0]); formData.append("settings", JSON.stringify({ columns, rows })); const res = await fetch("/api/v1/tools/split", { method: "POST", headers: formatHeaders(), body: formData, }); if (!res.ok) { const text = await res.text(); throw new Error(text || `Failed: ${res.status}`); } // Download the ZIP const blob = await res.blob(); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `split-${columns}x${rows}.zip`; a.click(); URL.revokeObjectURL(url); setDownloadReady(true); } catch (err) { setError(err instanceof Error ? err.message : "Split failed"); } finally { setProcessing(false); } }; const hasFile = files.length > 0; const presets = [ { label: "2x2", c: 2, r: 2 }, { label: "3x3", c: 3, r: 3 }, { label: "1x3", c: 1, r: 3 }, { label: "3x1", c: 3, r: 1 }, { label: "4x4", c: 4, r: 4 }, ]; return (
Grid Presets
Will produce {columns * rows} parts
{error &&{error}
} {downloadReady && (