diff options
| author | it-fixcomart <it@fixcomart.co.id> | 2024-09-02 10:54:00 +0700 |
|---|---|---|
| committer | it-fixcomart <it@fixcomart.co.id> | 2024-09-02 10:54:00 +0700 |
| commit | 702b5d9b6e215ad812fadaff3325e1e6164d3b24 (patch) | |
| tree | dfcd471df00e29ac06a839998c50df1c221fb052 | |
| parent | a2221f7b66f259cddc83ae95c159b30d7e5612ce (diff) | |
<iman> update pop up tambah keranjang
| -rw-r--r-- | src-migrate/modules/cart/stores/useCartStore.ts | 2 | ||||
| -rw-r--r-- | src-migrate/modules/product-promo/components/AddToCart.tsx | 97 | ||||
| -rw-r--r-- | src-migrate/modules/product-promo/components/Card.tsx | 4 | ||||
| -rw-r--r-- | src-migrate/pages/api/product-variant/[id].tsx | 1 | ||||
| -rw-r--r-- | src-migrate/types/promotion.ts | 4 | ||||
| -rw-r--r-- | src/lib/cart/components/Cartheader.jsx | 2 |
6 files changed, 54 insertions, 56 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> diff --git a/src-migrate/pages/api/product-variant/[id].tsx b/src-migrate/pages/api/product-variant/[id].tsx index 955fde6a..2c46ac89 100644 --- a/src-migrate/pages/api/product-variant/[id].tsx +++ b/src-migrate/pages/api/product-variant/[id].tsx @@ -38,6 +38,7 @@ const map = async (variant: any, price_tier: string) => { data.name = variant.name_s data.default_code = variant.default_code_s data.price = { discount_percentage: 0, price, price_discount: price } + data.manufacture = {manufacture_name: variant.manufacture_name_s, manufacture_id:variant.manufacture_id_i} return data } diff --git a/src-migrate/types/promotion.ts b/src-migrate/types/promotion.ts index 217bba33..dce442ad 100644 --- a/src-migrate/types/promotion.ts +++ b/src-migrate/types/promotion.ts @@ -37,6 +37,10 @@ export interface IProductVariantPromo { price_discount: number; }; qty: number; + manufacture: { + manufacture_name: string; + manufacture_id:number; + } } export type CategoryPromo = 'bundling' | 'discount_loading' | 'merchandise'; diff --git a/src/lib/cart/components/Cartheader.jsx b/src/lib/cart/components/Cartheader.jsx index 6967d180..ddb77c1f 100644 --- a/src/lib/cart/components/Cartheader.jsx +++ b/src/lib/cart/components/Cartheader.jsx @@ -48,7 +48,7 @@ const Cardheader = (cartCount) => { setIsloading(true) let cart = await getCartApi() setProductCart(cart) - setCountCart(cart.productTotal) + setCountCart(cart?.productTotal) setIsloading(false) }, [setProductCart, setIsloading]) |
