"use client"; import { useState, useTransition } from "react"; import Link from "next/link"; import { FolderHeart, X, Plus } from "lucide-react"; import { addImageToCollection, removeImageFromCollection, createCollection } from "@/app/actions/collections"; interface PickedCollection { id: number; name: string; slug?: string } export function CollectionPicker({ imageId, current, available, }: { imageId: number; current: PickedCollection[]; available: PickedCollection[]; }) { const [picked, setPicked] = useState(current); const [open, setOpen] = useState(false); const [draft, setDraft] = useState(""); const [pool, setPool] = useState(available); const [, start] = useTransition(); const add = (c: PickedCollection) => { if (picked.some(p => p.id === c.id)) return; setPicked((cur) => [...cur, c]); start(async () => { await addImageToCollection(c.id, imageId); }); }; const remove = (id: number) => { setPicked((cur) => cur.filter(c => c.id !== id)); start(async () => { await removeImageFromCollection(id, imageId); }); }; const createNew = async (e: React.FormEvent) => { e.preventDefault(); const name = draft.trim(); if (!name) return; setDraft(""); start(async () => { const created = await createCollection(name); if (created) { setPool((cur) => [...cur, { id: created.id, name, slug: created.slug }]); setPicked((cur) => [...cur, { id: created.id, name, slug: created.slug }]); await addImageToCollection(created.id, imageId); } }); }; const remaining = pool.filter(p => !picked.some(pp => pp.id === p.id)); return (