import { createFileRoute } from "@tanstack/react-router"; import { pb } from "@/lib/pocketbase"; import { useState } from "react"; import { RelationshipType, type Secret, type Session } from "@/lib/types"; import { RelationshipList } from "@/components/RelationshipList"; import { SessionForm } from "@/components/documents/session/SessionForm"; export const Route = createFileRoute("/_authenticated/document/$documentId")({ loader: async ({ params }) => { const doc = await pb.collection("documents").getOne(params.documentId); return { document: doc }; }, component: RouteComponent, }); function RouteComponent() { const { document: session }: { document: Session } = Route.useLoaderData(); const [newSecret, setNewSecret] = useState(""); const [adding, setAdding] = useState(false); const [error, setError] = useState(null); async function handleSaveSession(data: Session["data"]) { await pb.collection("documents").update(session.id, { data, }); } return (
(
{ const checked = e.target.checked; await pb.collection("documents").update(secret.id, { data: { ...secret.data, secret: { ...(secret.data as any).secret, discovered: checked, }, }, }); // Remove any existing discoveredIn relationship const rels = await pb .collection("relationships") .getList(1, 1, { filter: `primary = "${secret.id}" && type = "discoveredIn"`, }); if (rels.items.length > 0) { await pb.collection("relationships").delete(rels.items[0].id); } if (checked) { await pb.collection("relationships").create({ primary: secret.id, secondary: [session.id], type: "discoveredIn", }); } }} className="accent-emerald-500 w-5 h-5" aria-label="Discovered" /> {(secret.data as any)?.secret?.text || ( (No secret text) )}
)} newItemForm={(onCreate) => (
{ e.preventDefault(); if (!newSecret.trim()) return; setAdding(true); setError(null); try { console.debug("Creating new secret"); // Create the secret document const secretDoc: Secret = await pb .collection("documents") .create({ campaign: session.campaign, data: { secret: { text: newSecret, discovered: false, }, }, }); setNewSecret(""); await onCreate(secretDoc); } catch (e: any) { setError(e?.message || "Failed to add secret."); } finally { setAdding(false); } }} > setNewSecret(e.target.value)} disabled={adding} /> {error &&
{error}
}
)} />
); }