diff --git a/src/components/documents/session/SessionForm.tsx b/src/components/documents/session/SessionForm.tsx new file mode 100644 index 0000000..2b82956 --- /dev/null +++ b/src/components/documents/session/SessionForm.tsx @@ -0,0 +1,22 @@ +import { AutoSaveTextarea } from "@/components/AutoSaveTextarea"; +import type { Session } from "@/lib/types"; + +export const SessionForm = ({ + session, + onSubmit, +}: { + session: Session; + onSubmit: (data: Session["data"]) => Promise; +}) => { + return ( +
+

Strong Start

+ onSubmit({ session: { strongStart: value } })} + placeholder="Enter a strong start for this session..." + aria-label="Strong Start" + /> + + ); +}; diff --git a/src/components/documents/session/SessionRow.tsx b/src/components/documents/session/SessionRow.tsx new file mode 100644 index 0000000..ac14785 --- /dev/null +++ b/src/components/documents/session/SessionRow.tsx @@ -0,0 +1,17 @@ +import type { Session } from "@/lib/types"; +import { Link } from "@tanstack/react-router"; + +export const SessionRow = ({ session }: { session: Session }) => { + return ( +
+ + {session.created} + +
{session.data.session.strongStart}
+
+ ); +}; diff --git a/src/lib/types.ts b/src/lib/types.ts index df93362..abb1335 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -16,6 +16,9 @@ export type Document = RecordModel & { id: DocumentId; campaign: Campaign; data: {}; + // These two are not in Pocketbase's types, but they seem to always be present + created: string; + updated: string; }; export type DocumentData = { diff --git a/src/routes/_authenticated/campaigns.$campaignId.tsx b/src/routes/_authenticated/campaigns.$campaignId.tsx index 70f7700..1f39cc8 100644 --- a/src/routes/_authenticated/campaigns.$campaignId.tsx +++ b/src/routes/_authenticated/campaigns.$campaignId.tsx @@ -1,6 +1,7 @@ import { createFileRoute, Link } from "@tanstack/react-router"; import { pb } from "@/lib/pocketbase"; import type { Campaign } from "@/lib/types"; +import { SessionRow } from "@/components/documents/session/SessionRow"; export const Route = createFileRoute("/_authenticated/campaigns/$campaignId")({ loader: async ({ params }) => { @@ -31,26 +32,24 @@ function RouteComponent() { ← Back to campaigns -

{campaign.name}

+

+ {campaign.name} +

Sessions

{sessions && sessions.length > 0 ? (
    {sessions.map((s: any) => (
  • - - {s.data.session.strongStart || (No strong start)} - +
  • ))}
) : ( -
No sessions found for this campaign.
+
+ No sessions found for this campaign. +
)} {/* More campaign details can go here */} diff --git a/src/routes/_authenticated/document.$documentId.tsx b/src/routes/_authenticated/document.$documentId.tsx index e5c4f0e..0ba70a0 100644 --- a/src/routes/_authenticated/document.$documentId.tsx +++ b/src/routes/_authenticated/document.$documentId.tsx @@ -1,9 +1,9 @@ import { createFileRoute } from "@tanstack/react-router"; import { pb } from "@/lib/pocketbase"; -import { AutoSaveTextarea } from "@/components/AutoSaveTextarea"; import { useState } from "react"; -import { RelationshipType, type Secret } from "@/lib/types"; +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 }) => { @@ -14,38 +14,22 @@ export const Route = createFileRoute("/_authenticated/document/$documentId")({ }); function RouteComponent() { - const { document: session } = Route.useLoaderData(); - const doc = session as import("@/lib/types").Document; - const strongStart = (doc.data as any)?.session?.strongStart || ""; + const { document: session }: { document: Session } = Route.useLoaderData(); const [newSecret, setNewSecret] = useState(""); const [adding, setAdding] = useState(false); const [error, setError] = useState(null); - async function handleSaveStrongStart(newValue: string) { - await pb.collection("documents").update(doc.id, { - data: { - ...doc.data, - session: { - ...(doc.data as any).session, - strongStart: newValue, - }, - }, + async function handleSaveSession(data: Session["data"]) { + await pb.collection("documents").update(session.id, { + data, }); } return (
-

- Session Strong Start -

- + (
@@ -75,7 +59,7 @@ function RouteComponent() { if (checked) { await pb.collection("relationships").create({ primary: secret.id, - secondary: [doc.id], + secondary: [session.id], type: "discoveredIn", }); } @@ -104,7 +88,7 @@ function RouteComponent() { const secretDoc: Secret = await pb .collection("documents") .create({ - campaign: doc.campaign, + campaign: session.campaign, data: { secret: { text: newSecret,