From 625bc508aac7ea315da3604802db395af88005fa Mon Sep 17 00:00:00 2001 From: Drew Haven Date: Wed, 24 Sep 2025 17:58:35 -0700 Subject: [PATCH] Cleanup --- src/components/documents/DocumentView.tsx | 1 - .../documents/treasure/TreasureToggleRow.tsx | 2 +- src/lib/fields.ts | 62 +++++++++++-------- src/lib/relationships.ts | 7 +-- .../_authenticated/campaigns.$campaignId.tsx | 4 +- .../_app/_authenticated/campaigns.index.tsx | 1 + 6 files changed, 40 insertions(+), 37 deletions(-) diff --git a/src/components/documents/DocumentView.tsx b/src/components/documents/DocumentView.tsx index 170877d..2f19aa0 100644 --- a/src/components/documents/DocumentView.tsx +++ b/src/components/documents/DocumentView.tsx @@ -1,7 +1,6 @@ import { useDocument } from "@/context/document/hooks"; import { displayName, relationshipsForDocument } from "@/lib/relationships"; import { RelationshipType, type DocumentId } from "@/lib/types"; -import { Route as CampaignRoute } from "@/routes/_app/_authenticated/campaigns.$campaignId"; import { Link } from "@tanstack/react-router"; import _ from "lodash"; import { Loader } from "../Loader"; diff --git a/src/components/documents/treasure/TreasureToggleRow.tsx b/src/components/documents/treasure/TreasureToggleRow.tsx index e9e6ef0..38c2490 100644 --- a/src/components/documents/treasure/TreasureToggleRow.tsx +++ b/src/components/documents/treasure/TreasureToggleRow.tsx @@ -70,7 +70,7 @@ export const TreasureToggleRow = ({ disabled={loading} /> diff --git a/src/lib/fields.ts b/src/lib/fields.ts index 6c91d14..eb94d05 100644 --- a/src/lib/fields.ts +++ b/src/lib/fields.ts @@ -51,46 +51,54 @@ const simpleFields = ( export function getFieldsForType( docType: D, ): DocumentField[] { + // Explicit casts are required because the getter function puts the type D in the parameters position and thus the specialized getter is not valid in the case of the more general document type. + // While the switch correctly sees that D is now "front", the _type_ could be a union and thus the getter needs to be able to accept any of them. + // I know this will only ever be called in the context of one value, but this is clearly abusing the type system. + // TODO: Fix the types switch (docType) { case "front": return simpleFields<"front">({ Name: ["name", "shortText"], Description: ["description", "longText"], Resolved: ["resolved", "toggle"], - }); + }) as unknown as DocumentField[]; case "location": - return [ - simpleField("Name", "name", "shortText"), - simpleField("Description", "description", "longText"), - ]; + return simpleFields<"location">({ + Name: ["name", "shortText"], + Description: ["description", "longText"], + }) as unknown as DocumentField[]; case "monster": - return [simpleField("Name", "name", "shortText")]; + return simpleFields<"monster">({ + Name: ["name", "shortText"], + }) as unknown as DocumentField[]; case "npc": - return [ - simpleField("Name", "name", "shortText"), - simpleField("Description", "description", "longText"), - ]; + return simpleFields<"npc">({ + Name: ["name", "shortText"], + Description: ["description", "longText"], + }) as unknown as DocumentField[]; case "scene": - return [simpleField("Text", "text", "longText")]; + return simpleFields<"scene">({ + Text: ["text", "longText"], + }) as unknown as DocumentField[]; case "secret": - return [ - simpleField("Discovered", "discovered", "toggle"), - simpleField("Text", "text", "shortText"), - ]; + return simpleFields<"secret">({ + Discovered: ["discovered", "toggle"], + Text: ["text", "shortText"], + }) as unknown as DocumentField[]; case "session": - return [ - simpleField("Name", "name", "shortText"), - simpleField("Strong Start", "strongStart", "longText"), - ]; + return simpleFields<"session">({ + Name: ["name", "shortText"], + "Strong Start": ["strongStart", "longText"], + }) as unknown as DocumentField[]; case "thread": - return [ - simpleField("Resolved", "resolved", "toggle"), - simpleField("Text", "text", "shortText"), - ]; + return simpleFields<"thread">({ + Resolved: ["resolved", "toggle"], + Text: ["text", "shortText"], + }) as unknown as DocumentField[]; case "treasure": - return [ - simpleField("Discovered", "discovered", "toggle"), - simpleField("Text", "text", "shortText"), - ]; + return simpleFields<"treasure">({ + Discovered: ["discovered", "toggle"], + Text: ["text", "shortText"], + }) as unknown as DocumentField[]; } } diff --git a/src/lib/relationships.ts b/src/lib/relationships.ts index 8fa3bc9..f864081 100644 --- a/src/lib/relationships.ts +++ b/src/lib/relationships.ts @@ -1,9 +1,4 @@ -import { - getDocumentType, - type DocumentType, - RelationshipType, - type AnyDocument, -} from "./types"; +import { getDocumentType, RelationshipType, type AnyDocument } from "./types"; export function displayName(relationshipType: RelationshipType) { return relationshipType.charAt(0).toUpperCase() + relationshipType.slice(1); diff --git a/src/routes/_app/_authenticated/campaigns.$campaignId.tsx b/src/routes/_app/_authenticated/campaigns.$campaignId.tsx index a15c16f..e730f46 100644 --- a/src/routes/_app/_authenticated/campaigns.$campaignId.tsx +++ b/src/routes/_app/_authenticated/campaigns.$campaignId.tsx @@ -5,9 +5,9 @@ import { Loader } from "@/components/Loader"; import { DocumentLoader } from "@/context/document/DocumentLoader"; import { useDocument } from "@/context/document/hooks"; import { pb } from "@/lib/pocketbase"; -import type { Campaign, DocumentId, Relationship, Session } from "@/lib/types"; +import type { Campaign, DocumentId } from "@/lib/types"; import { createFileRoute, Link } from "@tanstack/react-router"; -import { useCallback, useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { z } from "zod"; const CampaignTabs = { diff --git a/src/routes/_app/_authenticated/campaigns.index.tsx b/src/routes/_app/_authenticated/campaigns.index.tsx index b23ea31..396549d 100644 --- a/src/routes/_app/_authenticated/campaigns.index.tsx +++ b/src/routes/_app/_authenticated/campaigns.index.tsx @@ -43,6 +43,7 @@ function RouteComponent() { to="/campaigns/$campaignId" params={{ campaignId: c.id }} className="block px-4 py-2 rounded bg-slate-800 hover:bg-violet-700 text-slate-100 transition-colors" + search={{ tab: "sessions" }} > {c.name}