diff --git a/src/components/EditToggle.tsx b/src/components/EditToggle.tsx
new file mode 100644
index 0000000..801c812
--- /dev/null
+++ b/src/components/EditToggle.tsx
@@ -0,0 +1,35 @@
+import * as Icons from "./Icons";
+import { useState, Children } from "react";
+
+export function EditToggle({ children }: React.PropsWithChildren) {
+ const [isEditing, setIsEditing] = useState(false);
+ const editChildren = (
+ Children.toArray(children) as React.ReactElement[]
+ ).filter((c) => c.type === Editing);
+ const nonEditChildren = (
+ Children.toArray(children) as React.ReactElement[]
+ ).filter((c) => c.type !== Editing);
+
+ return (
+
+
+
+
+ {isEditing ? editChildren : nonEditChildren}
+
+ );
+}
+
+export const Editing = ({ children }: React.PropsWithChildren) => (
+ <>{children}>
+);
+export const NotEditing = ({ children }: React.PropsWithChildren) => (
+ <>{children}>
+);
diff --git a/src/components/documents/BasicPreview.tsx b/src/components/documents/BasicPreview.tsx
new file mode 100644
index 0000000..0aba8d0
--- /dev/null
+++ b/src/components/documents/BasicPreview.tsx
@@ -0,0 +1,15 @@
+import { FormattedText } from "../FormattedText";
+
+export type Props = {
+ title?: string;
+ description?: string;
+};
+
+export const BasicPreview = ({ title, description }: Props) => {
+ return (
+
+ {title &&
{title}
}
+ {description && {description}}
+
+ );
+};
diff --git a/src/components/documents/DocumentPreview.tsx b/src/components/documents/DocumentPreview.tsx
new file mode 100644
index 0000000..d5ff5ee
--- /dev/null
+++ b/src/components/documents/DocumentPreview.tsx
@@ -0,0 +1,68 @@
+// Shows a preview of a document with it's relationships.
+import { makeDocumentPath } from "@/lib/documentPath";
+import { relationshipsForDocument } from "@/lib/relationships";
+import { type AnyDocument } from "@/lib/types";
+import { Link } from "@tanstack/react-router";
+import { Editing, EditToggle, NotEditing } from "../EditToggle";
+import { BasicPreview } from "./BasicPreview";
+import { DocumentEditForm } from "./DocumentEditForm";
+
+export const DocumentPreview = ({ doc }: { doc: AnyDocument }) => {
+ const relationships = relationshipsForDocument(doc);
+ return (
+
+
+
+
+
+
+
+
+
+
+ {relationships.map((relType) => (
+ -
+ {relType}
+
+ ))}
+
+
+ );
+};
+
+const ShowDocument = ({ doc }: { doc: AnyDocument }) => {
+ switch (doc.type) {
+ case "location":
+ return (
+
+ );
+
+ case "monster":
+ return ;
+
+ case "npc":
+ return (
+
+ );
+
+ case "session":
+ return (
+
+ );
+
+ case "secret":
+ return ;
+
+ case "scene":
+ return ;
+
+ case "treasure":
+ return ;
+ }
+};
diff --git a/src/components/documents/DocumentView.tsx b/src/components/documents/DocumentView.tsx
index cca1ef4..8bd74e2 100644
--- a/src/components/documents/DocumentView.tsx
+++ b/src/components/documents/DocumentView.tsx
@@ -9,6 +9,7 @@ import { DocumentTitle } from "./DocumentTitle";
import { Tab, TabbedLayout } from "../layout/TabbedLayout";
import { DocumentEditForm } from "./DocumentEditForm";
import { RelatedDocumentList } from "./RelatedDocumentList";
+import { DocumentPreview } from "./DocumentPreview";
export function DocumentView({
documentId,
@@ -59,6 +60,7 @@ export function DocumentView({
tabs={[
(
;
+ return ;
}
diff --git a/src/components/documents/session/SessionRow.tsx b/src/components/documents/session/SessionRow.tsx
index 011591d..7b1534f 100644
--- a/src/components/documents/session/SessionRow.tsx
+++ b/src/components/documents/session/SessionRow.tsx
@@ -6,8 +6,9 @@ export const SessionRow = ({ session }: { session: Session }) => {
return (
diff --git a/src/components/layout/TabbedLayout.tsx b/src/components/layout/TabbedLayout.tsx
index 48fd89d..ea0a1fb 100644
--- a/src/components/layout/TabbedLayout.tsx
+++ b/src/components/layout/TabbedLayout.tsx
@@ -38,8 +38,8 @@ export function TabbedLayout({
export type TabProps = {
label: string;
to: string;
- params: Record;
- search: Record;
+ params?: Record;
+ search?: Record;
active?: boolean;
};
diff --git a/src/context/document/DocumentContext.tsx b/src/context/document/DocumentContext.tsx
index 8d459a8..5cc94bc 100644
--- a/src/context/document/DocumentContext.tsx
+++ b/src/context/document/DocumentContext.tsx
@@ -19,8 +19,6 @@ export const DocumentContext = createContext(
export function DocumentProvider({ children }: { children: ReactNode }) {
const [state, dispatch] = useReducer(reducer, initialState());
- console.log("State: ", state);
-
return (
;
+ return (
+
+
+
+ );
}
const doc = docResult.value.doc;
- // TODO: Document preview
- return ;
+ return ;
}