import { useCallback } from "react"; import { createFileRoute, Link } from "@tanstack/react-router"; import { pb } from "@/lib/pocketbase"; import { SessionRow } from "@/components/documents/session/SessionRow"; import { Button } from "@headlessui/react"; import { useQueryClient, useSuspenseQuery } from "@tanstack/react-query"; import { Loader } from "@/components/Loader"; import type { Relationship } from "@/lib/types"; export const Route = createFileRoute( "/_app/_authenticated/campaigns/$campaignId", )({ component: RouteComponent, pendingComponent: Loader, }); function RouteComponent() { const queryClient = useQueryClient(); const params = Route.useParams(); const { data: { campaign, sessions }, } = useSuspenseQuery({ queryKey: ["campaign"], queryFn: async () => { const campaign = await pb .collection("campaigns") .getOne(params.campaignId); // Fetch all documents for this campaign const sessions = await pb.collection("documents").getFullList({ filter: `campaign = "${params.campaignId}" && type = 'session'`, sort: "-created", }); return { campaign, sessions, }; }, }); const createNewSession = useCallback(async () => { // Check for a previous session const prevSession = await pb .collection("documents") .getFirstListItem(`campaign = "${campaign.id}" && type = 'session'`, { sort: "-created", }); console.log("Previous session: ", { id: prevSession.id, created: prevSession.created, }); const newSession = await pb.collection("documents").create({ campaign: campaign.id, type: "session", data: { strongStart: "", }, }); // If any relations, then copy things over if (prevSession) { const prevRelations = await pb .collection("relationships") .getFullList({ filter: `primary = "${prevSession.id}"`, }); console.log(`Found ${prevRelations.length} previous relations`); for (const relation of prevRelations) { console.log( `Adding ${relation.secondary.length} items to ${relation.type}`, ); await pb.collection("relationships").create({ primary: newSession.id, type: relation.type, secondary: relation.secondary, }); } } queryClient.invalidateQueries({ queryKey: ["campaign"] }); }, [campaign]); return (
← Back to campaigns

{campaign.name}

Sessions

{sessions && sessions.length > 0 ? (
    {sessions.map((s: any) => (
  • ))}
) : (
No sessions found for this campaign.
)}
); }