"use client"; import { useRef, useState } from "react"; import { useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { useToast } from "@/hooks/use-toast"; import { Upload, FileUp } from "lucide-react"; import { parseHomeBoxCsv, type HomeBoxItem } from "@/lib/inventory/homebox-import"; export function ImportButton() { const [open, setOpen] = useState(false); const [csv, setCsv] = useState(""); const [rows, setRows] = useState(null); const [skip, setSkip] = useState>(new Set()); const [busy, setBusy] = useState(false); const inputRef = useRef(null); const router = useRouter(); const { toast } = useToast(); function preview(text: string) { setCsv(text); try { const parsed = parseHomeBoxCsv(text); setRows(parsed); setSkip(new Set()); if (parsed.length === 0) toast({ title: "Nothing found", description: "No items parsed from that CSV.", variant: "destructive" }); } catch { toast({ title: "Parse error", description: "Couldn't read that CSV.", variant: "destructive" }); } } function toggle(name: string) { setSkip((prev) => { const next = new Set(prev); next.has(name) ? next.delete(name) : next.add(name); return next; }); } async function doImport() { if (!rows) return; const include = rows.filter((r) => !skip.has(r.name)); if (include.length === 0) { toast({ title: "Nothing selected" }); return; } setBusy(true); const res = await fetch("/api/v1/items/import", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ csv, skip: Array.from(skip) }), }); setBusy(false); if (!res.ok) { const err = await res.json().catch(() => ({})); toast({ title: "Import failed", description: err.error ?? "Try again.", variant: "destructive" }); return; } const s = await res.json(); toast({ title: "Imported!", description: `${s.created} items, ${s.locationsCreated} locations, ${s.labelsCreated} labels.` }); setOpen(false); setCsv(""); setRows(null); setSkip(new Set()); router.refresh(); } const includeCount = rows ? rows.length - skip.size : 0; return ( <> { setOpen(v); if (!v) { setRows(null); setCsv(""); } }}> Import from HomeBox CSV {!rows ? (

Paste a HomeBox CSV export, or choose a file. You'll review every item before importing.