summaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
authortrisusilo <tri.susilo@altama.co.id>2023-10-18 09:21:18 +0000
committertrisusilo <tri.susilo@altama.co.id>2023-10-18 09:21:18 +0000
commit0a88ef1da1c04f4d40c0133edb7d27701c7a9746 (patch)
treeae3768ba44054d51b1abcc0dcc90d18d4895e412 /src/pages
parentb4b17e22832a4665042a45030b77c3744fe61534 (diff)
parent2a84fb3ce03cfa46cb3c7664e988957e1bd2731b (diff)
Merged in CR/UI (pull request #104)
CR/UI
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/api/shop/search.js19
-rw-r--r--src/pages/shop/brands/[slug].jsx3
-rw-r--r--src/pages/shop/cart.jsx15
-rw-r--r--src/pages/shop/category/[slug].jsx10
-rw-r--r--src/pages/shop/product/[slug].jsx33
-rw-r--r--src/pages/shop/search.jsx20
6 files changed, 85 insertions, 15 deletions
diff --git a/src/pages/api/shop/search.js b/src/pages/api/shop/search.js
index b5161365..b4d67c5d 100644
--- a/src/pages/api/shop/search.js
+++ b/src/pages/api/shop/search.js
@@ -13,19 +13,20 @@ export default async function handler(req, res) {
orderBy = '',
operation = 'AND',
fq = '',
- limit = 30
+ limit = 30,
+ stock = ''
} = req.query
let paramOrderBy = ''
switch (orderBy) {
case 'price-asc':
- paramOrderBy += 'price_discount_f ASC'
+ paramOrderBy += 'price_tier1_v2_f ASC'
break
case 'price-desc':
- paramOrderBy += 'price_discount_f DESC'
+ paramOrderBy += 'price_tier1_v2_f DESC'
break
case 'popular':
- paramOrderBy += 'search_rank_i DESC'
+ paramOrderBy += 'product_rating_f DESC, search_rank_i DESC,'
break
case 'popular-weekly':
paramOrderBy += 'search_rank_weekly_i DESC'
@@ -33,6 +34,9 @@ export default async function handler(req, res) {
case 'stock':
paramOrderBy += 'stock_total_f DESC'
break
+ case 'flashsale-price-asc':
+ paramOrderBy += 'flashsale_price_f ASC'
+ break
default:
paramOrderBy += 'product_rating_f DESC, price_discount_f DESC'
break
@@ -40,7 +44,7 @@ export default async function handler(req, res) {
let offset = (page - 1) * limit
let parameter = [
- 'facet.field=manufacture_name',
+ 'facet.field=manufacture_name_s',
'facet.field=category_name',
'facet=true',
'indent=true',
@@ -48,7 +52,7 @@ export default async function handler(req, res) {
`q.op=${operation}`,
`q=${escapeSolrQuery(q)}`,
'qf=name_s',
- `start=${offset}`,
+ `start=${parseInt(offset)}`,
`rows=${limit}`,
`sort=${paramOrderBy}`,
`fq=-publish_b:false`
@@ -62,8 +66,9 @@ export default async function handler(req, res) {
)
}
- if (brand) parameter.push(`fq=manufacture_name:${brand}`)
+ if (brand) parameter.push(`fq=manufacture_name:${brand.replace(/,/g, ' OR ')}`)
if (category) parameter.push(`fq=category_name:${category}`)
+ if (stock) parameter.push(`fq=stock_total_f:{1 TO *}`)
// Single fq in url params
if (typeof fq === 'string') parameter.push(`fq=${fq}`)
diff --git a/src/pages/shop/brands/[slug].jsx b/src/pages/shop/brands/[slug].jsx
index 88f19bc0..d75475b7 100644
--- a/src/pages/shop/brands/[slug].jsx
+++ b/src/pages/shop/brands/[slug].jsx
@@ -3,6 +3,7 @@ import { getIdFromSlug, getNameFromSlug } from '@/core/utils/slug'
import { useRouter } from 'next/router'
import _ from 'lodash'
import Seo from '@/core/components/Seo'
+import Breadcrumb from '@/lib/brand/components/Breadcrumb'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const ProductSearch = dynamic(() => import('@/lib/product/components/ProductSearch'))
@@ -26,6 +27,8 @@ export default function BrandDetail() {
]}
/>
+ <Breadcrumb brandName={brandName} />
+
<Brand id={getIdFromSlug(slug)} />
{!_.isEmpty(router.query) && (
<ProductSearch
diff --git a/src/pages/shop/cart.jsx b/src/pages/shop/cart.jsx
index a7f2037b..2da58c96 100644
--- a/src/pages/shop/cart.jsx
+++ b/src/pages/shop/cart.jsx
@@ -3,7 +3,9 @@ import BasicLayout from '@/core/components/layouts/BasicLayout'
import DesktopView from '@/core/components/views/DesktopView'
import MobileView from '@/core/components/views/MobileView'
import IsAuth from '@/lib/auth/components/IsAuth'
+import { Breadcrumb, BreadcrumbItem, BreadcrumbLink } from '@chakra-ui/react'
import dynamic from 'next/dynamic'
+import Link from 'next/link'
const AppLayout = dynamic(() => import('@/core/components/layouts/AppLayout'))
const CartComponent = dynamic(() => import('@/lib/cart/components/Cart'))
@@ -22,6 +24,19 @@ export default function Cart() {
<DesktopView>
<BasicLayout>
+ <div className='container mx-auto py-4 md:py-6 pb-0'>
+ <Breadcrumb>
+ <BreadcrumbItem>
+ <BreadcrumbLink as={Link} href='/' className='!text-danger-500 whitespace-nowrap'>
+ Home
+ </BreadcrumbLink>
+ </BreadcrumbItem>
+
+ <BreadcrumbItem isCurrentPage>
+ <BreadcrumbLink className='whitespace-nowrap'>Keranjang</BreadcrumbLink>
+ </BreadcrumbItem>
+ </Breadcrumb>
+ </div>
<CartComponent />
</BasicLayout>
</DesktopView>
diff --git a/src/pages/shop/category/[slug].jsx b/src/pages/shop/category/[slug].jsx
index dbc17c06..6d3985a8 100644
--- a/src/pages/shop/category/[slug].jsx
+++ b/src/pages/shop/category/[slug].jsx
@@ -3,6 +3,7 @@ import { getIdFromSlug, getNameFromSlug } from '@/core/utils/slug'
import { useRouter } from 'next/router'
import _ from 'lodash'
import Seo from '@/core/components/Seo'
+import Breadcrumb from '@/lib/category/components/Breadcrumb'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const ProductSearch = dynamic(() => import('@/lib/product/components/ProductSearch'))
@@ -13,9 +14,14 @@ export default function CategoryDetail() {
const categoryName = getNameFromSlug(slug)
const categoryId = getIdFromSlug(slug)
+ const q = router?.query.q || null
const query = {
- fq: `manufacture_id_i:${categoryId}`
+ fq: `category_id_i:${categoryId}`
}
+ if (q) {
+ query.q = q
+ }
+
return (
<BasicLayout>
<Seo
@@ -29,6 +35,8 @@ export default function CategoryDetail() {
]}
/>
+ <Breadcrumb categoryId={categoryId} />
+
{!_.isEmpty(router.query) && (
<ProductSearch query={query} prefixUrl={`/shop/category/${slug}`} />
)}
diff --git a/src/pages/shop/product/[slug].jsx b/src/pages/shop/product/[slug].jsx
index 63fb2e7e..d8366d3c 100644
--- a/src/pages/shop/product/[slug].jsx
+++ b/src/pages/shop/product/[slug].jsx
@@ -9,6 +9,7 @@ import cookie from 'cookie'
import axios from 'axios'
import { useProductContext } from '@/contexts/ProductContext'
import { useEffect } from 'react'
+import { updateItemCart } from '@/core/utils/cart'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const Product = dynamic(() => import('@/lib/product/components/Product/Product'))
@@ -22,19 +23,16 @@ export async function getServerSideProps(context) {
const authToken = auth?.token || ''
let response = await axios(
- `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/product-detail?id=` + getIdFromSlug(slug) +'&auth=' + tier
+ `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/product-detail?id=` +
+ getIdFromSlug(slug) +
+ '&auth=' +
+ tier
)
let product = response.data
// let productSolr = await productApi({ id: getIdFromSlug(slug), headers: { Token: authToken } })
// let productSolr = null
if (product?.length == 1) {
product = product[0]
- const regexHtmlTags = /(<([^>]+)>)/gi
- const regexHtmlTagsExceptP = /<\/?(?!p\b)[^>]*>/g
- product.description = product.description
- .replace(regexHtmlTagsExceptP, ' ')
- .replace(regexHtmlTags, ' ')
- .trim()
} else {
product = null
}
@@ -54,6 +52,27 @@ export default function ProductDetail({ product }) {
}
}, [product, setProduct])
+ useEffect(() => {
+ const { action, variantId, qty } = router.query
+ const addToCart = async () => {
+ const data = {
+ productId: variantId,
+ quantity: qty,
+ selected: true,
+ programLineId: null,
+ source: action
+ }
+ console.log('data dr test', data)
+ await updateItemCart(data)
+ const redirectURL = action === 'buy' ? '/shop/checkout?source=buy' : '/shop/cart'
+ router.push(redirectURL)
+ }
+
+ if (action && variantId && qty) {
+ addToCart()
+ }
+ }, [router])
+
if (!product) return <PageNotFound />
return (
diff --git a/src/pages/shop/search.jsx b/src/pages/shop/search.jsx
index 907465b7..db3b449a 100644
--- a/src/pages/shop/search.jsx
+++ b/src/pages/shop/search.jsx
@@ -2,6 +2,8 @@ import dynamic from 'next/dynamic'
import { useRouter } from 'next/router'
import _ from 'lodash-contrib'
import Seo from '@/core/components/Seo'
+import { Breadcrumb, BreadcrumbItem, BreadcrumbLink } from '@chakra-ui/react'
+import Link from 'next/link'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const ProductSearch = dynamic(() => import('@/lib/product/components/ProductSearch'))
@@ -13,6 +15,24 @@ export default function Search() {
<BasicLayout>
<Seo title={`Cari produk ${router.query.q || ''} di Indoteknik.com`} />
+ <div className='container mx-auto py-4 md:py-6'>
+ {router.query?.q && (
+ <Breadcrumb>
+ <BreadcrumbItem>
+ <BreadcrumbLink as={Link} href='/' className='!text-danger-500 whitespace-nowrap'>
+ Home
+ </BreadcrumbLink>
+ </BreadcrumbItem>
+
+ <BreadcrumbItem isCurrentPage>
+ <BreadcrumbLink className='whitespace-nowrap'>
+ Cari: {router.query.q || ''}
+ </BreadcrumbLink>
+ </BreadcrumbItem>
+ </Breadcrumb>
+ )}
+ </div>
+
{!_.isEmpty(router.query) && <ProductSearch query={router.query} prefixUrl='/shop/search' />}
</BasicLayout>
)