From 0b80852c9fc1b15dd2b74f5611263816a5bc2c60 Mon Sep 17 00:00:00 2001 From: Dwiky Rizky Ananditya Date: Wed, 3 Apr 2024 16:54:19 +0700 Subject: [PATCH] feat: detail product --- src/routeTree.gen.ts | 12 ++++ .../_admin/dashboard/product.$productId.tsx | 55 +++++++++++++++++++ src/routes/_admin/dashboard/products.tsx | 11 +++- 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/routes/_admin/dashboard/product.$productId.tsx diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index fc52fa5..3003c3d 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -28,6 +28,7 @@ import { Route as AuthenticatedProductProductIdImport } from './routes/_authenti import { Route as AuthenticatedCategoryCategoryNameImport } from './routes/_authenticated/category.$categoryName' import { Route as AdminDashboardUploadImport } from './routes/_admin/dashboard/upload' import { Route as AdminDashboardProductsImport } from './routes/_admin/dashboard/products' +import { Route as AdminDashboardProductProductIdImport } from './routes/_admin/dashboard/product.$productId' // Create/Update Routes @@ -119,6 +120,12 @@ const AdminDashboardProductsRoute = AdminDashboardProductsImport.update({ getParentRoute: () => AdminRoute, } as any) +const AdminDashboardProductProductIdRoute = + AdminDashboardProductProductIdImport.update({ + path: '/dashboard/product/$productId', + getParentRoute: () => AdminRoute, + } as any) + // Populate the FileRoutesByPath interface declare module '@tanstack/react-router' { @@ -191,6 +198,10 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AdminDashboardIndexImport parentRoute: typeof AdminImport } + '/_admin/dashboard/product/$productId': { + preLoaderRoute: typeof AdminDashboardProductProductIdImport + parentRoute: typeof AdminImport + } } } @@ -201,6 +212,7 @@ export const routeTree = rootRoute.addChildren([ AdminDashboardProductsRoute, AdminDashboardUploadRoute, AdminDashboardIndexRoute, + AdminDashboardProductProductIdRoute, ]), AuthRoute.addChildren([AuthLoginRoute, AuthRegisterRoute]), AuthenticatedRoute.addChildren([ diff --git a/src/routes/_admin/dashboard/product.$productId.tsx b/src/routes/_admin/dashboard/product.$productId.tsx new file mode 100644 index 0000000..40b9593 --- /dev/null +++ b/src/routes/_admin/dashboard/product.$productId.tsx @@ -0,0 +1,55 @@ +import { createFileRoute } from "@tanstack/react-router"; +import axios from "axios"; +import { config } from "@/lib/config.ts"; +import { useQuery } from "@tanstack/react-query"; +import Loading from "@/components/loading.tsx"; + +export const Route = createFileRoute("/_admin/dashboard/product/$productId")({ + component: ProductDetails, +}); + +async function getProductDetails(id: string, session: string) { + const { data } = await axios.get( + `${config.SERVER_API_URL}/v1/product/get/${id}`, + { + headers: { + Authorization: `Bearer ${session}`, + }, + }, + ); + return data; +} + +function ProductDetails() { + const { productId } = Route.useParams(); + const { session } = Route.useRouteContext(); + + const { data, isLoading } = useQuery({ + queryKey: ["product", productId], + queryFn: () => getProductDetails(productId, session), + }); + + if (isLoading) return ; + + console.log(data); + + return ( +
+
+

{data.name}

+

{data.description}

+
+

Price: ${data.price}

+

Stock: {data.stock}

+
+
+ {data.name} +
+
+
+ ); +} diff --git a/src/routes/_admin/dashboard/products.tsx b/src/routes/_admin/dashboard/products.tsx index 8ee9452..2e62aef 100644 --- a/src/routes/_admin/dashboard/products.tsx +++ b/src/routes/_admin/dashboard/products.tsx @@ -67,7 +67,16 @@ function DashboardProduct() { - + ))}