// SecretForm.tsx // Form for adding a new secret to a session. import { useState } from "react"; import type { CampaignId, Secret } from "@/lib/types"; import { pb } from "@/lib/pocketbase"; /** * Renders a form to add a new secret. Calls onCreate with the new secret document. */ export const SecretForm = ({ campaign, onCreate, }: { campaign: CampaignId; onCreate: (secret: Secret) => Promise; }) => { const [newSecret, setNewSecret] = useState(""); const [adding, setAdding] = useState(false); const [error, setError] = useState(null); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!newSecret.trim()) return; setAdding(true); setError(null); try { const secretDoc: Secret = await pb.collection("documents").create({ campaign, data: { secret: { text: newSecret, discovered: false, }, }, }); setNewSecret(""); await onCreate(secretDoc); } catch (e: any) { setError(e?.message || "Failed to add secret."); } finally { setAdding(false); } } return (
setNewSecret(e.target.value)} disabled={adding} aria-label="Add new secret" /> {error &&
{error}
}
); };