From f86b2adc680a9c6fa0ac92c84bf6d14e2f866d9a Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Fri, 2 Aug 2024 14:48:51 +0700
Subject: <iman> update popup cart

---
 .../modules/product-promo/components/AddToCart.tsx | 61 ++++++++++++++++++++--
 1 file changed, 58 insertions(+), 3 deletions(-)

(limited to 'src-migrate/modules/product-promo/components/AddToCart.tsx')

diff --git a/src-migrate/modules/product-promo/components/AddToCart.tsx b/src-migrate/modules/product-promo/components/AddToCart.tsx
index 87017c14..10904f90 100644
--- a/src-migrate/modules/product-promo/components/AddToCart.tsx
+++ b/src-migrate/modules/product-promo/components/AddToCart.tsx
@@ -9,19 +9,34 @@ import { IPromotion } from '~/types/promotion'
 
 import DesktopView from '../../../../src/core/components/views/DesktopView';
 import MobileView from '../../../../src/core/components/views/MobileView';
-
+import BottomPopup from '@/core/components/elements/Popup/BottomPopup'
+import ImageNext from 'next/image';
+import Link from 'next/link'
+import LazyLoad from 'react-lazy-load'
+import ProductSimilar from '../../../../src/lib/product/components/ProductSimilar';
+import { IProductDetail } from '~/types/product';
+import { useProductCartContext } from '@/contexts/ProductCartContext'
 type Props = {
   promotion: IPromotion
+  product: IProductDetail
 }
 
 type Status = 'idle' | 'loading' | 'success'
 
-const ProductPromoAddToCart = ({ promotion }: Props) => {
+const ProductPromoAddToCart = ({product, promotion }: Props) => {
   const auth = getAuth()
   const toast = useToast()
   const router = useRouter()
 
   const [status, setStatus] = useState<Status>('idle')
+  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') {
@@ -42,7 +57,8 @@ const ProductPromoAddToCart = ({ promotion }: Props) => {
       qtyAppend: true
     })
     setStatus('idle')
-
+    setRefreshCart(true);
+    setAddCartAlert(true);
     toast({
       title: 'Tambah ke keranjang',
       description: 'Berhasil menambahkan barang ke keranjang belanja',
@@ -92,6 +108,45 @@ const ProductPromoAddToCart = ({ promotion }: Props) => {
           {status === 'success' && <span>Berhasil</span>}
           {status !== 'success' && <span>Keranjang</span>}
         </Button>
+        <BottomPopup
+          className='!container'
+          title='Berhasil Ditambahkan'
+          active={addCartAlert}
+          close={() => {
+            setAddCartAlert(false);
+          }}
+        >
+          <div className='flex mt-4'>
+            <div className='w-[10%]'>
+              <ImageNext
+                  src={product.image}
+                  alt={product.name}
+                  className='h-32 object-contain object-center w-full border border-gray_r-4'
+                  width={80}
+                  height={80}
+                />
+            </div>
+            <div className='ml-3 flex flex-1 items-center font-normal'>
+              {product.name}
+            </div>
+            <div className='ml-3 flex items-center font-normal'>
+              <Link
+                href='/shop/cart'
+                className='flex-1 py-2 text-gray_r-12 btn-yellow'
+              >
+                Lihat Keranjang
+              </Link>
+            </div>
+          </div>
+          <div className='mt-8 mb-4'>
+            <div className='text-h-sm font-semibold mb-6'>
+              Kamu Mungkin Juga Suka
+            </div>
+            <LazyLoad>
+              <ProductSimilar query={productSimilarQuery} />
+            </LazyLoad>
+          </div>
+        </BottomPopup>
       </DesktopView>
     </div>
   )
-- 
cgit v1.2.3


From 1ce47f63e967d32d8e6026c0f2e8da931d23fd4c Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Tue, 6 Aug 2024 10:21:43 +0700
Subject: <iman> update add to cart pop up

---
 .../modules/product-promo/components/AddToCart.tsx | 56 +++++++++++++++++++++-
 1 file changed, 54 insertions(+), 2 deletions(-)

(limited to 'src-migrate/modules/product-promo/components/AddToCart.tsx')

diff --git a/src-migrate/modules/product-promo/components/AddToCart.tsx b/src-migrate/modules/product-promo/components/AddToCart.tsx
index 10904f90..8567dad8 100644
--- a/src-migrate/modules/product-promo/components/AddToCart.tsx
+++ b/src-migrate/modules/product-promo/components/AddToCart.tsx
@@ -16,6 +16,9 @@ import LazyLoad from 'react-lazy-load'
 import ProductSimilar from '../../../../src/lib/product/components/ProductSimilar';
 import { IProductDetail } from '~/types/product';
 import { useProductCartContext } from '@/contexts/ProductCartContext'
+import { createSlug } from '~/libs/slug'
+import formatCurrency from '~/libs/formatCurrency'
+import { useProductDetail } from '../../product-detail/stores/useProductDetail';
 type Props = {
   promotion: IPromotion
   product: IProductDetail
@@ -24,10 +27,12 @@ type Props = {
 type Status = 'idle' | 'loading' | 'success'
 
 const ProductPromoAddToCart = ({product, promotion }: Props) => {
+  
   const auth = getAuth()
   const toast = useToast()
   const router = useRouter()
 
+  const {askAdminUrl} = useProductDetail();
   const [status, setStatus] = useState<Status>('idle')
   const { productCart, setRefreshCart, setProductCart, refreshCart, isLoading, setIsloading } =
     useProductCartContext()
@@ -126,8 +131,55 @@ const ProductPromoAddToCart = ({product, promotion }: Props) => {
                   height={80}
                 />
             </div>
-            <div className='ml-3 flex flex-1 items-center font-normal'>
-              {product.name}
+            <div className='ml-3 flex flex-1 items-start font-medium justify-center flex-col gap-y-1'>
+              {!!product.manufacture.name ? (
+                  <Link
+                  href={createSlug('/shop/brands/', product.manufacture.name, product.manufacture.id.toString())}
+                  className=' hover:underline'
+                  color={"red"}
+                  >
+                    {product.manufacture.name}
+                  </Link>
+                ) : '-'}
+              <p className='text-ellipsis overflow-hidden'>
+                {product.name}
+                </p>
+                <p>
+                  {product.code}
+                </p>
+                {!!product.lowest_price && product.lowest_price.price > 0 && (
+                    <>
+                      <div className='flex items-end gap-x-2'>
+                        {product.lowest_price.discount_percentage > 0 && (
+                          <>
+                            <div className='badge-solid-red'>
+                              {Math.floor(product.lowest_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)}
+                            </div>
+                          </>
+                        )}
+                        <div className='text-danger-500 font-semibold'>
+                          Rp {formatCurrency(product.lowest_price.price_discount || 0)}
+                        </div>
+                      </div>
+                    </>
+                  )}
+
+                  {!!product.lowest_price && product.lowest_price.price === 0 && (
+                    <span>
+                      Hubungi kami untuk dapatkan harga terbaik,{' '}
+                      <Link
+                        href={askAdminUrl}
+                        target='_blank'
+                        className='font-medium underline'
+                        color={'red'}
+                      >
+                        klik disini
+                      </Link>
+                    </span>
+                  )}
             </div>
             <div className='ml-3 flex items-center font-normal'>
               <Link
-- 
cgit v1.2.3


From 3de1a412bba31b19b8b443dd91df8aff8d6eda07 Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Thu, 8 Aug 2024 16:22:00 +0700
Subject: <iman> update link button

---
 src-migrate/modules/product-promo/components/AddToCart.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src-migrate/modules/product-promo/components/AddToCart.tsx')

diff --git a/src-migrate/modules/product-promo/components/AddToCart.tsx b/src-migrate/modules/product-promo/components/AddToCart.tsx
index 8567dad8..3d0955e3 100644
--- a/src-migrate/modules/product-promo/components/AddToCart.tsx
+++ b/src-migrate/modules/product-promo/components/AddToCart.tsx
@@ -132,7 +132,7 @@ 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 ? (
                   <Link
                   href={createSlug('/shop/brands/', product.manufacture.name, product.manufacture.id.toString())}
                   className=' hover:underline'
-- 
cgit v1.2.3


From a76376b74c02ee6875b68b6cfb59090a159df40a Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Sat, 31 Aug 2024 11:44:49 +0700
Subject: <iman> update new cart pop up

---
 src-migrate/modules/product-promo/components/AddToCart.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src-migrate/modules/product-promo/components/AddToCart.tsx')

diff --git a/src-migrate/modules/product-promo/components/AddToCart.tsx b/src-migrate/modules/product-promo/components/AddToCart.tsx
index 3d0955e3..a3938142 100644
--- a/src-migrate/modules/product-promo/components/AddToCart.tsx
+++ b/src-migrate/modules/product-promo/components/AddToCart.tsx
@@ -135,7 +135,7 @@ const ProductPromoAddToCart = ({product, promotion }: Props) => {
               {!!product?.manufacture?.name ? (
                   <Link
                   href={createSlug('/shop/brands/', product.manufacture.name, product.manufacture.id.toString())}
-                  className=' hover:underline'
+                  className=' hover:underline text-red-500'
                   color={"red"}
                   >
                     {product.manufacture.name}
-- 
cgit v1.2.3


From a2221f7b66f259cddc83ae95c159b30d7e5612ce Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Sat, 31 Aug 2024 12:28:43 +0700
Subject: <iman> update new cart pop up image

---
 .../modules/product-promo/components/AddToCart.tsx | 23 +++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

(limited to 'src-migrate/modules/product-promo/components/AddToCart.tsx')

diff --git a/src-migrate/modules/product-promo/components/AddToCart.tsx b/src-migrate/modules/product-promo/components/AddToCart.tsx
index a3938142..757253f7 100644
--- a/src-migrate/modules/product-promo/components/AddToCart.tsx
+++ b/src-migrate/modules/product-promo/components/AddToCart.tsx
@@ -34,6 +34,7 @@ const ProductPromoAddToCart = ({product, promotion }: Props) => {
 
   const {askAdminUrl} = useProductDetail();
   const [status, setStatus] = useState<Status>('idle')
+  const [idProduct, setidProduct] = useState<number>()
   const { productCart, setRefreshCart, setProductCart, refreshCart, isLoading, setIsloading } =
     useProductCartContext()
 
@@ -61,6 +62,7 @@ const ProductPromoAddToCart = ({product, promotion }: Props) => {
       source: 'add_to_cart',
       qtyAppend: true
     })
+    setidProduct(promotion?.products[0]?.product_id)
     setStatus('idle')
     setRefreshCart(true);
     setAddCartAlert(true);
@@ -123,13 +125,20 @@ const ProductPromoAddToCart = ({product, promotion }: Props) => {
         >
           <div className='flex mt-4'>
             <div className='w-[10%]'>
-              <ImageNext
-                  src={product.image}
-                  alt={product.name}
-                  className='h-32 object-contain object-center w-full border border-gray_r-4'
-                  width={80}
-                  height={80}
-                />
+            <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}`
+                }
+                alt={product.name}
+                className='h-32 object-contain object-center w-full border border-gray_r-4'
+                width={80}
+                height={80}
+              />
+
             </div>
             <div className='ml-3 flex flex-1 items-start font-medium justify-center flex-col gap-y-1'>
               {!!product?.manufacture?.name ? (
-- 
cgit v1.2.3


From 702b5d9b6e215ad812fadaff3325e1e6164d3b24 Mon Sep 17 00:00:00 2001
From: it-fixcomart <it@fixcomart.co.id>
Date: Mon, 2 Sep 2024 10:54:00 +0700
Subject: <iman> update pop up tambah keranjang

---
 .../modules/product-promo/components/AddToCart.tsx | 97 ++++++++++------------
 1 file changed, 45 insertions(+), 52 deletions(-)

(limited to 'src-migrate/modules/product-promo/components/AddToCart.tsx')

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
-- 
cgit v1.2.3

