From 9f30f252ca9fc839a36138e9cf9ae26672c7a6ce Mon Sep 17 00:00:00 2001 From: ziteh Date: Sun, 15 Sep 2024 16:39:25 +0800 Subject: [PATCH 1/6] chore: change logging level of Prisma --- app/lib/db/prisma.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/db/prisma.ts b/app/lib/db/prisma.ts index 8919c42..4396de1 100644 --- a/app/lib/db/prisma.ts +++ b/app/lib/db/prisma.ts @@ -5,7 +5,7 @@ const globalForPrisma = global as unknown as { prisma: PrismaClient }; export const prisma = globalForPrisma.prisma || new PrismaClient({ - log: ["query"], + log: ["info", "warn", "error"], // Logging level }); if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma; From 5bfee5c6a49f1a33245a317a5d365e131b4a7ba2 Mon Sep 17 00:00:00 2001 From: ziteh Date: Sun, 15 Sep 2024 17:54:49 +0800 Subject: [PATCH 2/6] feat: add tag id to explorer router --- app/components/bar/sidebar/index.tsx | 13 ++++++++----- app/components/explorer/index.tsx | 11 ++++++++--- app/explorer/[tag]/page.tsx | 5 +++++ app/explorer/page.tsx | 5 ----- 4 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 app/explorer/[tag]/page.tsx delete mode 100644 app/explorer/page.tsx diff --git a/app/components/bar/sidebar/index.tsx b/app/components/bar/sidebar/index.tsx index 27c738a..e2ba728 100644 --- a/app/components/bar/sidebar/index.tsx +++ b/app/components/bar/sidebar/index.tsx @@ -18,6 +18,7 @@ import TreeView from "./treeview"; import { TreeViewBaseItem } from "@mui/x-tree-view"; import { useTagTreeState } from "@/app/store/tagTree"; +import { useRouter } from "next/navigation"; const drawerWidth = 240; const collapsedWidth = 80; @@ -33,6 +34,7 @@ interface Props { } export default function Sidebar(props: Props) { + const router = useRouter(); const { open } = props; // const [open, setOpen] = React.useState(true); const { tagTreeItems, updateTagTree, updateSelectedTagId } = @@ -43,11 +45,12 @@ export default function Sidebar(props: Props) { }, []); const handleTagSelect = (event: React.SyntheticEvent, id: string) => { - try { - updateSelectedTagId(Number(id)); - } catch (err) { - console.error(err); - } + router.push(`/explorer/${id}`); + // try { + // updateSelectedTagId(Number(id)); + // } catch (err) { + // console.error(err); + // } }; return ( diff --git a/app/components/explorer/index.tsx b/app/components/explorer/index.tsx index af2ef3b..b34e03f 100644 --- a/app/components/explorer/index.tsx +++ b/app/components/explorer/index.tsx @@ -9,14 +9,19 @@ import Showcase from "./showcase"; const size = 250; -export default function Explorer() { - const subscribeSelected = useTagTreeState((s) => s.subscribeSelected); +interface Props { + tagId: number; +} + +export default function Explorer(props: Props) { + const { tagId } = props; + const [imagePaths, setImagePaths] = useState([]); const [open, setOpen] = useState(false); const [selectedImagePath, setSelectedImagePath] = useState(""); useEffect(() => { - subscribeSelected(onSelected); + onSelected(tagId); }, []); const handleClose = () => { diff --git a/app/explorer/[tag]/page.tsx b/app/explorer/[tag]/page.tsx new file mode 100644 index 0000000..ef8fc57 --- /dev/null +++ b/app/explorer/[tag]/page.tsx @@ -0,0 +1,5 @@ +import Explorer from "@/app/components/explorer"; + +export default function Page({ params }: { params: { tag: string } }) { + return ; +} diff --git a/app/explorer/page.tsx b/app/explorer/page.tsx deleted file mode 100644 index 91a31c9..0000000 --- a/app/explorer/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import Explorer from "@/app/components/explorer"; - -export default async function Page() { - return ; -} From aef6d5672c4d4b31d1a2eab6bf568bad358c706a Mon Sep 17 00:00:00 2001 From: ziteh Date: Sun, 15 Sep 2024 18:36:24 +0800 Subject: [PATCH 3/6] feat: add API for get tag parent list --- app/api/tags/[id]/parents/route.ts | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 app/api/tags/[id]/parents/route.ts diff --git a/app/api/tags/[id]/parents/route.ts b/app/api/tags/[id]/parents/route.ts new file mode 100644 index 0000000..182c251 --- /dev/null +++ b/app/api/tags/[id]/parents/route.ts @@ -0,0 +1,43 @@ +import { NextResponse } from "next/server"; +import { prisma } from "@/app/lib/db/prisma"; +import { StatusCodes } from "http-status-codes"; + +export async function GET( + request: Request, + { params }: { params: { id: string } } +) { + try { + let parents = await getParentTags(Number(params.id)); + parents.reverse(); + + return NextResponse.json({ + parents, + }); + } catch (error) { + return NextResponse.json( + { error: "Error fetching tag" }, + { status: StatusCodes.INTERNAL_SERVER_ERROR } + ); + } +} + +async function getParentTags(id: number, parents: string[] = []) { + const tag = await prisma.tag.findUnique({ + where: { id }, + include: { parent: true }, + }); + + if (!tag || !tag.parent) { + return parents; + } + + const parentId = tag.parent.parentId; + + const pTag = await prisma.tag.findUnique({ + where: { id: parentId }, + include: { parent: true }, + }); + + parents.push(pTag?.name as string); + return getParentTags(parentId, parents); +} From 6276b32c790ab608a7b3e6373f83b4a795fc10c3 Mon Sep 17 00:00:00 2001 From: ziteh Date: Sun, 15 Sep 2024 18:36:52 +0800 Subject: [PATCH 4/6] feat: add breadcrumbs to explorer page --- app/explorer/[tag]/page.tsx | 52 ++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/app/explorer/[tag]/page.tsx b/app/explorer/[tag]/page.tsx index ef8fc57..7d9cbbd 100644 --- a/app/explorer/[tag]/page.tsx +++ b/app/explorer/[tag]/page.tsx @@ -1,5 +1,55 @@ +"use client"; + +import { useState, useEffect } from "react"; import Explorer from "@/app/components/explorer"; +import { Breadcrumbs, Link, Typography } from "@mui/material"; +import { Tag } from "@/app/lib/db/types"; +import { getTag } from "@/app/lib/tags"; export default function Page({ params }: { params: { tag: string } }) { - return ; + const [tag, setTag] = useState(null); + const [parents, setParents] = useState([]); + + useEffect(() => { + updateTag(); + }, []); + + const updateTag = async () => { + const response = await fetch(`/api/tags/${params.tag}/parents`, { + method: "GET", + headers: { "Content-Type": "application/json" }, + }); + + if (!response.ok) { + return; + } + + const data = await response.json(); + setParents(data.parents); + + const tag = await getTag(Number(params.tag), false, false, false); + setTag(tag); + }; + + return ( +
+ + + Root + + {parents.map((p, i) => ( + + {p} + + ))} + {tag?.name} + + +
+ ); } From e7e6489ef38ae26a6e00f804847571c3c91291f2 Mon Sep 17 00:00:00 2001 From: ziteh Date: Sun, 15 Sep 2024 18:51:01 +0800 Subject: [PATCH 5/6] docs: update changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3f1267..2835a3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,11 @@ Types of changes: ## Unreleased +### Added + +- Add tag id to explorer route +- Add breadcrumbs to explorer page + ## [0.1.0-alpha.1] - 2024-09-15 First release. From 432db465b1eac72177daa9f3b62005d6c8a51d81 Mon Sep 17 00:00:00 2001 From: ziteh Date: Sun, 15 Sep 2024 19:05:13 +0800 Subject: [PATCH 6/6] chore: add GitHub Action for build with pnpm --- .github/workflows/build.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..7fa4589 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,34 @@ +name: Build + +on: + workflow_dispatch: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: 9 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install + + - name: Build + run: | + pnpm run prisma:update + pnpm run build