diff --git a/src/app/cv/_components/CvCategory.tsx b/src/app/cv/_components/CvCategory.tsx index e50c8f4..3c511ce 100644 --- a/src/app/cv/_components/CvCategory.tsx +++ b/src/app/cv/_components/CvCategory.tsx @@ -1,6 +1,6 @@ 'use client' import { trpc } from "~/app/_trpc/Client" -import CvEntry, { type CvEntryProps } from "./CvEntry" +import CvEntry from "./CvEntry" import type { servTrpc } from "~/app/_trpc/ServerClient" import type { inferProcedureOutput } from "@trpc/server" import type { RouterOutputs } from "~/server/routers/_app" @@ -9,13 +9,13 @@ import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card" type CvCategoryProps = { initialData: RouterOutputs['cv']['category']['get'], layout: "row"|"col", - children?: React.ReactElement + children?: React.ReactElement> } export default function CvCategory(props:CvCategoryProps) { const query = trpc.cv.category.get.useQuery({id: props.initialData? props.initialData.id : ""}); if (query.data !== undefined) { return ( - + {query.data?.name} diff --git a/src/app/cv/page.tsx b/src/app/cv/page.tsx index 58f56aa..f8c21e4 100644 --- a/src/app/cv/page.tsx +++ b/src/app/cv/page.tsx @@ -2,15 +2,25 @@ import { useGSAP } from "@gsap/react"; import { useGsapContext } from "../_providers/GsapProvicer"; import { trpc } from "../_trpc/Client"; -import { useRef } from "react"; +import { useEffect, useRef, useState } from "react"; import { SidebarContent, SidebarProvider, Sidebar } from "~/components/ui/sidebar"; import SidebarTriggerDisappearsOnMobile from "./_components/SidebarTriggerDisappearsOnMobile"; import CvCategory from "./_components/CvCategory"; +import type { CategoryRouterOutputs } from "~/server/routers/cv/category"; export default function CvPage() { - //TODO fix display when one column is empty - // useState to store filtered categories - // should make this easier + const [sidebarCategories,setSidebarCategories] = useState([]); + const [headerCategories,setHeaderCategories] = useState([]); + const [col1Categories,setCol1Categories] = useState([]); + const [col2Categories,setCol2Categories] = useState([]); const categories = trpc.cv.category.list.useQuery(); + useEffect(() => { + if (categories.data !== undefined) { + setSidebarCategories(categories.data.filter((cat) => cat.layoutPosition == "sidebar")) + setHeaderCategories(categories.data.filter((cat) => cat.layoutPosition == "header")) + setCol1Categories(categories.data.filter((cat) => cat.layoutPosition == "col1")) + setCol2Categories(categories.data.filter((cat) => cat.layoutPosition == "col2")) + } + },[categories.data]) const gsap = useGsapContext() const container = useRef(null) enum Direction { @@ -43,7 +53,7 @@ export default function CvPage() { dir = dir + 1 } }) - }, { scope: container, dependencies: [categories.isFetched], revertOnUpdate: true }) + }, { scope: container, dependencies: [col1Categories,col2Categories,headerCategories,sidebarCategories], revertOnUpdate: true }) if (categories.data !== undefined) { return ( <> @@ -53,7 +63,7 @@ export default function CvPage() { - {categories.data.filter((cat) => cat.layoutPosition == 'sidebar').map((cat) => { + {sidebarCategories.map((cat) => { return ( ) @@ -66,23 +76,26 @@ export default function CvPage() {
-
- {categories.data.filter((cat) => cat.layoutPosition == 'col1').map((cat) => { - return ( - - ) - })} -
- {categories.data.filter((cat) => cat.layoutPosition == 'col2').length > 0 ? -
- {categories.data.filter((cat) => cat.layoutPosition == 'col2').map((cat) => { + {col1Categories.length > 0 ? +
0 ? "md:w-1/2" : ""} h-full gap-[1rem]`}> + {col1Categories.map((cat) => { + return ( + + ) + })} +
: + <> + } + {col2Categories.length > 0 ? +
0 ? "md:w-1/2" : ""} h-full gap-[1rem]`}> + {col2Categories.map((cat) => { return ( )