From a5b10aa85621a27332ce867db9dd36245262ceb5 Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Thu, 7 Oct 2021 10:53:19 +0700 Subject: [PATCH] :sparkles: feat: get product detail :%s --- pages/product/[slug].tsx | 57 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index a8e925df9..ee0730314 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -1,9 +1,13 @@ +import { Product } from '@framework/schema' +import commerce from '@lib/api/commerce' +import { GetStaticPathsContext, GetStaticPropsContext, InferGetStaticPropsType } from 'next' import { Layout, RecipeDetail, RecommendedRecipes, RelevantBlogPosts } from 'src/components/common' import { ProductInfoDetail, ReleventProducts, ViewedProducts } from 'src/components/modules/product-detail' import { BLOGS_DATA_TEST, INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' -export default function Slug() { +export default function Slug({ product } : InferGetStaticPropsType) { + console.log("product: ", product) return <> @@ -11,8 +15,57 @@ export default function Slug() { - + } +export async function getStaticProps({ + params, + locale, + locales, + preview, +}: GetStaticPropsContext<{ slug: string }>) { + const config = { locale, locales } + const productPromise = commerce.getProduct({ + variables: { slug: params!.slug }, + config, + preview, + }) + + console.log('slug: ', params!.slug) + + + const { product } = await productPromise + + if (!product) { + throw new Error(`Product with slug '${params!.slug}' not found`) + } + + return { + props: { + product, + }, + revalidate: 60, + } +} + + +export async function getStaticPaths({ locales }: GetStaticPathsContext) { + const { products } = await commerce.getAllProductPaths() + + return { + paths: locales + ? locales.reduce((arr, locale) => { + // Add a product path for every locale + products.forEach((product: any) => { + arr.push(`/${locale}/product${product.path}`) + }) + return arr + }, []) + : products.map((product: any) => `/product${product.path}`), + fallback: 'blocking', + } +} + + Slug.Layout = Layout