"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { Plus } from "lucide-react"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Label } from "@/components/ui/label"; type Visibility = "private" | "unlisted" | "public" | "followers"; export function NewCollectionButton() { const t = useTranslations("collections"); const tSocial = useTranslations("social"); const tCommon = useTranslations("common"); const tRecipe = useTranslations("recipe"); const router = useRouter(); const [open, setOpen] = useState(false); const [name, setName] = useState(""); const [description, setDescription] = useState(""); const [visibility, setVisibility] = useState("private"); const [saving, setSaving] = useState(false); async function create() { if (!name.trim()) return; setSaving(true); try { const res = await fetch("/api/v1/collections", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: name.trim(), description: description.trim() || undefined, visibility }), }); if (!res.ok) { toast.error(t("createFailed")); return; } const { id } = await res.json() as { id: string }; toast.success(tSocial("collectionCreated")); setOpen(false); setName(""); setDescription(""); setVisibility("private"); router.push(`/collections/${id}`); router.refresh(); } finally { setSaving(false); } } return ( <> {t("newTitle")}
setName(e.target.value)} placeholder={t("namePlaceholder")} />