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 ( +
+ + + + + + + + + +
+ ); +}; + +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 ; }