summaryrefslogtreecommitdiff
path: root/src/pages/shop
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-04-18 17:05:25 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-04-18 17:05:25 +0700
commit42fed2490fe537b46a717eafaf1b1e4a5e0a08c8 (patch)
treef586d4b09632b6fb50d1e3c038d8f36acb668600 /src/pages/shop
parent5ec1ebdc1b5a44a9bb615eba08faf60113c0697f (diff)
price tier
Diffstat (limited to 'src/pages/shop')
-rw-r--r--src/pages/shop/product/[slug].jsx53
1 files changed, 33 insertions, 20 deletions
diff --git a/src/pages/shop/product/[slug].jsx b/src/pages/shop/product/[slug].jsx
index 84b848f0..230d1f87 100644
--- a/src/pages/shop/product/[slug].jsx
+++ b/src/pages/shop/product/[slug].jsx
@@ -1,48 +1,61 @@
import Seo from '@/core/components/Seo'
+import LogoSpinner from '@/core/components/elements/Spinner/LogoSpinner'
import { getIdFromSlug } from '@/core/utils/slug'
import productApi from '@/lib/product/api/productApi'
import dynamic from 'next/dynamic'
import { useRouter } from 'next/router'
+import { useEffect, useState } from 'react'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const Product = dynamic(() => import('@/lib/product/components/Product/Product'))
-export async function getServerSideProps(context) {
- const { slug } = context.query
- let product = await productApi({ id: getIdFromSlug(slug) })
- if (product?.length == 1) {
- product = product[0]
- const regexHtmlTags = /(<([^>]+)>)/gi
- const regexHtmlTagsExceptP = /<\/?(?!p\b)[^>]*>/g
- if (product.description.replace(regexHtmlTags, ' ').trim() == '') {
- product.description = ''
+export default function ProductDetail() {
+ const router = useRouter()
+ const [product, setProduct] = useState(null)
+
+ useEffect(() => {
+ const { slug } = router.query
+
+ const loadProduct = async () => {
+ let product = await productApi({ id: getIdFromSlug(slug) })
+ if (product?.length == 1) {
+ product = product[0]
+ const regexHtmlTags = /(<([^>]+)>)/gi
+ const regexHtmlTagsExceptP = /<\/?(?!p\b)[^>]*>/g
+ if (product.description.replace(regexHtmlTags, ' ').trim() == '') {
+ product.description = ''
+ }
+ product.description = product.description.replace(regexHtmlTagsExceptP, ' ')
+ product.description = product.description.trim()
+ }
+ setProduct(product)
}
- product.description = product.description.replace(regexHtmlTagsExceptP, ' ')
- product.description = product.description.trim()
- }
- return { props: { product } }
-}
+ if (slug) loadProduct()
+ }, [router])
-export default function ProductDetail({ product }) {
- const router = useRouter()
return (
<BasicLayout>
<Seo
- title={product?.name + ' - Indoteknik.com' || ''}
+ title={product?.name || '' + ' - Indoteknik.com' || ''}
description='Temukan pilihan produk B2B Industri &amp; Alat Teknik untuk Perusahaan, UMKM &amp; Pemerintah dengan lengkap, mudah dan transparan.'
openGraph={{
url: process.env.NEXT_PUBLIC_SELF_HOST + router.asPath,
- image: product.image,
+ image: product?.image,
type: 'product'
}}
additionalMetaTags={[
{
name: 'keywords',
- content: `${product.name}, Harga ${product.name}, Beli ${product.name}, Spesifikasi ${product.name}`
+ content: `${product?.name}, Harga ${product?.name}, Beli ${product?.name}, Spesifikasi ${product?.name}`
}
]}
/>
- <Product product={product} />
+ {!product && (
+ <div className="container mx-auto flex justify-center pt-10">
+ <LogoSpinner width={36} height={36} />
+ </div>
+ )}
+ {product && <Product product={product} />}
</BasicLayout>
)
}