diff --git a/src/app/workspace/page.tsx b/src/app/workspace/page.tsx index e030b92..5e945c9 100644 --- a/src/app/workspace/page.tsx +++ b/src/app/workspace/page.tsx @@ -2,55 +2,25 @@ import Router from "@/components/Router"; import AppSidebar, { SidebarTrigger } from "@/components/sidebar/AppSidebar"; -import TaskView from "@/components/view/TaskView"; import useWorkspace from "@/hooks/workspace"; -import { Task } from "@/lib/types"; import { ChevronRight } from "lucide-react"; -import { useEffect, useState } from "react"; - -const id = (prefix = "t") => - `${prefix}_${Math.random().toString(36).slice(2, 9)}`; export default function Workspace() { - const [route, setRoute] = useState(""); const workspace = useWorkspace(); - const createTask = (status: string) => { - const task: Task = { - id: id(), - title: "New task", - status: status, - }; - workspace.entities[workspace.route].setTasks((c: Task[]) => [...c, task]); - }; - return ( - - {(route) => ( - <> - -
-
- {workspace.name} - - {workspace.entities[workspace.route].name} -
-
-
- - - )} -
+ +
+
+ {workspace.name} + + {workspace.entities[workspace.route].name} +
+
+
+ +
); } diff --git a/src/components/Router.tsx b/src/components/Router.tsx index 0d059c7..18bebf5 100644 --- a/src/components/Router.tsx +++ b/src/components/Router.tsx @@ -1,16 +1,38 @@ "use client"; -import { SetState } from "@/lib/types"; -import React, { useState } from "react"; +import { Workspace } from "@/hooks/workspace"; +import { Task } from "@/lib/types"; +import TaskView from "./view/TaskView"; -export default function Router({ - children, - route, - setRoute, -}: { - children: (route: string) => React.JSX.Element; - route: string; - setRoute: SetState; -}) { - return children(route); +const id = (prefix = "t") => + `${prefix}_${Math.random().toString(36).slice(2, 9)}`; + +export default function Router({ workspace }: { workspace: Workspace }) { + const entity = workspace.entities[workspace.route]; + switch (entity.kind) { + case "todo": + const createTask = (status: string) => { + const task: Task = { + id: id(), + title: "New task", + status: status, + }; + entity.setTasks((c: Task[]) => [...c, task]); + }; + + return ( + + ); + case "doc": + return entity.doc; + } } diff --git a/src/hooks/workspace.ts b/src/hooks/workspace.ts index 65e9084..9918ce9 100644 --- a/src/hooks/workspace.ts +++ b/src/hooks/workspace.ts @@ -2,12 +2,19 @@ import { SidebarEntity } from "@/components/sidebar/Entity"; import { SetState, Task } from "@/lib/types"; import { useEffect, useState } from "react"; -export type Entity = { - name: string; - kind: "todo"; - setTasks: SetState; - tasks: Task[]; -}; +export type Entity = + | { + name: string; + kind: "todo"; + tasks: Task[]; + setTasks: SetState; + } + | { + name: string; + kind: "doc"; + doc: string; + setDoc: SetState; + }; export interface Workspace { name: string; @@ -18,13 +25,10 @@ export interface Workspace { setRoute: SetState; } -function useTasks() { - return useState([]); -} - export default function useWorkspace(): Workspace { const [route, setRoute] = useState("alpha_tasks"); - const [tasks, setTasks] = useTasks(); + const [tasks, setTasks] = useState([]); + const [doc, setDoc] = useState("# Hello World!"); useEffect(() => { setTasks([ @@ -55,17 +59,30 @@ export default function useWorkspace(): Workspace { tasks, setTasks, }, + + alpha_doc: { + name: "Alpha docs", + kind: "doc", + doc, + setDoc, + }, + beta_doc: { + name: "Beta docs", + kind: "doc", + doc, + setDoc, + }, }, entityLayout: [ { kind: "group", name: "Project alpha", - children: [{ id: "alpha_tasks" }], + children: [{ id: "alpha_tasks" }, { id: "alpha_doc" }], }, { kind: "group", name: "Project beta", - children: [{ id: "beta_tasks" }], + children: [{ id: "beta_tasks" }, { id: "alpha_doc" }], }, ],