summaryrefslogtreecommitdiff
path: root/src-migrate/modules
diff options
context:
space:
mode:
authorit-fixcomart <it@fixcomart.co.id>2024-09-02 10:54:00 +0700
committerit-fixcomart <it@fixcomart.co.id>2024-09-02 10:54:00 +0700
commit702b5d9b6e215ad812fadaff3325e1e6164d3b24 (patch)
treedfcd471df00e29ac06a839998c50df1c221fb052 /src-migrate/modules
parenta2221f7b66f259cddc83ae95c159b30d7e5612ce (diff)
<iman> update pop up tambah keranjang
Diffstat (limited to 'src-migrate/modules')
-rw-r--r--src-migrate/modules/cart/stores/useCartStore.ts2
-rw-r--r--src-migrate/modules/product-promo/components/AddToCart.tsx97
-rw-r--r--src-migrate/modules/product-promo/components/Card.tsx4
3 files changed, 48 insertions, 55 deletions
diff --git a/src-migrate/modules/cart/stores/useCartStore.ts b/src-migrate/modules/cart/stores/useCartStore.ts
index aad39a30..c2ebf50f 100644
--- a/src-migrate/modules/cart/stores/useCartStore.ts
+++ b/src-migrate/modules/cart/stores/useCartStore.ts
@@ -54,7 +54,7 @@ export const useCartStore = create<State & Action>((set, get) => ({
const computeSummary = (cart: CartProps) => {
let subtotal = 0;
let discount = 0;
- for (const item of cart.products) {
+ for (const item of cart?.products) {
if (!item.selected) continue;
let price = 0;
diff --git a/src-migrate/modules/product-promo/components/AddToCart.tsx b/src-migrate/modules/product-promo/components/AddToCart.tsx
index 757253f7..7b3863f9 100644
--- a/src-migrate/modules/product-promo/components/AddToCart.tsx
+++ b/src-migrate/modules/product-promo/components/AddToCart.tsx
@@ -5,7 +5,7 @@ import { useEffect, useState } from 'react'
import { getAuth } from '~/libs/auth'
import { upsertUserCart } from '~/services/cart'
-import { IPromotion } from '~/types/promotion'
+import { IPromotion, IProductVariantPromo } from '~/types/promotion'
import DesktopView from '../../../../src/core/components/views/DesktopView';
import MobileView from '../../../../src/core/components/views/MobileView';
@@ -22,59 +22,54 @@ import { useProductDetail } from '../../product-detail/stores/useProductDetail';
type Props = {
promotion: IPromotion
product: IProductDetail
+ variant: IProductVariantPromo,
}
type Status = 'idle' | 'loading' | 'success'
-const ProductPromoAddToCart = ({product, promotion }: Props) => {
-
+const ProductPromoAddToCart = ({product, promotion, variant }: Props) => {
const auth = getAuth()
const toast = useToast()
const router = useRouter()
-
const {askAdminUrl} = useProductDetail();
const [status, setStatus] = useState<Status>('idle')
- const [idProduct, setidProduct] = useState<number>()
const { productCart, setRefreshCart, setProductCart, refreshCart, isLoading, setIsloading } =
useProductCartContext()
-
const productSimilarQuery = [
promotion?.name,
`fq=-product_id_i:${promotion.products[0].product_id}`,
].join('&');
const [addCartAlert, setAddCartAlert] = useState(false);
-
+
const handleButton = async () => {
if (typeof auth !== 'object') {
- const currentUrl = encodeURIComponent(router.asPath)
- router.push(`/login?next=${currentUrl}`)
- return
- }
- if (status === 'success') return
-
- setStatus('loading')
- await upsertUserCart({
- userId: auth.id,
- type: 'promotion',
- id: promotion.id,
- qty: 1,
- selected: true,
- source: 'add_to_cart',
- qtyAppend: true
- })
- setidProduct(promotion?.products[0]?.product_id)
- setStatus('idle')
- setRefreshCart(true);
- setAddCartAlert(true);
- toast({
- title: 'Tambah ke keranjang',
- description: 'Berhasil menambahkan barang ke keranjang belanja',
- status: 'success',
- duration: 3000,
- isClosable: true,
- position: 'top',
- })
+ const currentUrl = encodeURIComponent(router.asPath)
+ router.push(`/login?next=${currentUrl}`)
+ return
}
+ if (status === 'success') return
+ setStatus('loading')
+ await upsertUserCart({
+ userId: auth.id,
+ type: 'promotion',
+ id: promotion.id,
+ qty: 1,
+ selected: true,
+ source: 'add_to_cart',
+ qtyAppend: true
+ })
+ setStatus('idle')
+ setRefreshCart(true);
+ setAddCartAlert(true);
+ toast({
+ title: 'Tambah ke keranjang',
+ description: 'Berhasil menambahkan barang ke keranjang belanja',
+ status: 'success',
+ duration: 3000,
+ isClosable: true,
+ position: 'top',
+ })
+}
useEffect(() => {
if (status === 'success') setTimeout(() => { setStatus('idle') }, 3000)
@@ -128,12 +123,10 @@ const ProductPromoAddToCart = ({product, promotion }: Props) => {
<ImageNext
src={
product?.image
- ? product.image
- : idProduct
- ? `https://erp.indoteknik.com/api/image/product.product/image_256/${idProduct}`
- : `https://erp.indoteknik.com/api/image/product.template/image_256/${idProduct}`
+ ? product?.image
+ : variant?.image || ''
}
- alt={product.name}
+ alt={product?.name ? product?.name : variant?.display_name || ''}
className='h-32 object-contain object-center w-full border border-gray_r-4'
width={80}
height={80}
@@ -141,42 +134,42 @@ const ProductPromoAddToCart = ({product, promotion }: Props) => {
</div>
<div className='ml-3 flex flex-1 items-start font-medium justify-center flex-col gap-y-1'>
- {!!product?.manufacture?.name ? (
+ {!!product?.manufacture?.name || variant?.manufacture && (
<Link
- href={createSlug('/shop/brands/', product.manufacture.name, product.manufacture.id.toString())}
+ href={createSlug('/shop/brands/', product?.manufacture?.name? product?.manufacture?.name : variant?.manufacture?.manufacture_name, product?.manufacture?.id? product?.manufacture?.id.toString() : variant?.manufacture?.manufacture_id.toString())}
className=' hover:underline text-red-500'
color={"red"}
>
- {product.manufacture.name}
+ {product?.manufacture?.name ? product?.manufacture?.name : variant?.manufacture?.manufacture_name}
</Link>
- ) : '-'}
+ )}
<p className='text-ellipsis overflow-hidden'>
- {product.name}
+ {product?.name ? product?.name : variant?.name}
</p>
<p>
- {product.code}
+ {product?.code}
</p>
- {!!product.lowest_price && product.lowest_price.price > 0 && (
+ {(!!product?.lowest_price && product?.lowest_price?.price > 0) || variant?.price?.price > 0 && (
<>
<div className='flex items-end gap-x-2'>
- {product.lowest_price.discount_percentage > 0 && (
+ {(product?.lowest_price?.discount_percentage > 0) || variant?.price?.discount_percentage > 0 && (
<>
<div className='badge-solid-red'>
- {Math.floor(product.lowest_price.discount_percentage)}%
+ {Math.floor(product?.lowest_price?.discount_percentage ? product?.lowest_price?.discount_percentage : variant?.price?.discount_percentage)}%
</div>
<div className='text-gray_r-11 line-through text-[11px] sm:text-caption-2'>
- Rp {formatCurrency(product.lowest_price.price || 0)}
+ Rp {formatCurrency(product?.lowest_price?.price ? product?.lowest_price?.price || 0 : variant?.price?.price || 0)}
</div>
</>
)}
<div className='text-danger-500 font-semibold'>
- Rp {formatCurrency(product.lowest_price.price_discount || 0)}
+ Rp {formatCurrency(product?.lowest_price?.price_discount? product?.lowest_price?.price_discount || 0 : variant?.price?.price_discount)}
</div>
</div>
</>
)}
- {!!product.lowest_price && product.lowest_price.price === 0 && (
+ {(!!product?.lowest_price && product?.lowest_price?.price === 0) || variant?.price?.price === 0 && (
<span>
Hubungi kami untuk dapatkan harga terbaik,{' '}
<Link
diff --git a/src-migrate/modules/product-promo/components/Card.tsx b/src-migrate/modules/product-promo/components/Card.tsx
index 5c323276..b8abe5ec 100644
--- a/src-migrate/modules/product-promo/components/Card.tsx
+++ b/src-migrate/modules/product-promo/components/Card.tsx
@@ -132,7 +132,7 @@ const ProductPromoCard = ({product, promotion}: Props) => {
</div>
<div>
- <ProductPromoAddToCart product={product} promotion={promotion} />
+ <ProductPromoAddToCart product={product} promotion={promotion} variant={products[0]} />
</div>
</div>
@@ -189,7 +189,7 @@ const ProductPromoCard = ({product, promotion}: Props) => {
</div>
</div>
<div>
- <ProductPromoAddToCart product={product} promotion={promotion} />
+ <ProductPromoAddToCart product={product} promotion={promotion} variant={products[0]}/>
</div>
</div>