From bb656eb35742fbb18fe9c700a3569c4765c65a1c Mon Sep 17 00:00:00 2001
From: "Indoteknik ." <andrifebriyadiputra@gmail.com>
Date: Thu, 7 Aug 2025 15:33:20 +0700
Subject: (andri) tru

---
 src/lib/quotation/components/Quotation.jsx | 206 +++++++++++++++++------------
 1 file changed, 123 insertions(+), 83 deletions(-)

(limited to 'src/lib/quotation/components/Quotation.jsx')

diff --git a/src/lib/quotation/components/Quotation.jsx b/src/lib/quotation/components/Quotation.jsx
index 2f4d6c46..189c48ee 100644
--- a/src/lib/quotation/components/Quotation.jsx
+++ b/src/lib/quotation/components/Quotation.jsx
@@ -19,6 +19,8 @@ import Image from '@/core/components/elements/Image/Image';
 import { useQuery } from 'react-query';
 import CardProdcuctsList from '@/core/components/elements/Product/cartProductsList';
 import { Skeleton } from '@chakra-ui/react';
+import { useAddress } from '@/lib/checkout/stores/useAdress';
+import { useQuotation } from '@/lib/checkout/stores/stateQuotation';
 import {
   PickupAddress,
   SectionAddress,
@@ -31,11 +33,13 @@ import {
 import addressesApi from '@/lib/address/api/addressesApi';
 import { getItemAddress } from '@/core/utils/address';
 import ExpedisiList from '../../checkout/api/ExpedisiList';
-import axios from 'axios';
 
 const { checkoutApi } = require('@/lib/checkout/api/checkoutApi');
 const { getProductsCheckout } = require('@/lib/checkout/api/checkoutApi');
 
+import SectionExpedition from '@/lib/checkout/components/SectionExpedition';
+
+
 const Quotation = () => {
   const PPN = process.env.NEXT_PUBLIC_PPN ? parseFloat(process.env.NEXT_PUBLIC_PPN) : 0;
   const router = useRouter();
@@ -51,16 +55,16 @@ const Quotation = () => {
   const { setRefreshCart } = useProductCartContext();
   const SELF_PICKUP_ID = 32;
 
-  const [products, setProducts] = useState(null);
+  // const [products, setProducts] = useState(null);
   const [totalAmount, setTotalAmount] = useState(0);
   const [totalDiscountAmount, setTotalDiscountAmount] = useState(0);
 
   //start set up address and carrier
   const [selectedCarrierId, setselectedCarrierId] = useState(0);
-  const [listExpedisi, setExpedisi] = useState([]);
+  // const [listExpedisi, setExpedisi] = useState([]);
   const [selectedExpedisi, setSelectedExpedisi] = useState(0);
-  const [checkWeigth, setCheckWeight] = useState(false);
-  const [checkoutValidation, setCheckoutValidation] = useState(false);
+  // const [checkWeigth, setCheckWeight] = useState(false);
+  // const [checkoutValidation, setCheckoutValidation] = useState(false);
   const [loadingRajaOngkir, setLoadingRajaOngkir] = useState(false);
 
   const [listserviceExpedisi, setListServiceExpedisi] = useState([]);
@@ -69,24 +73,54 @@ const Quotation = () => {
   const [selectedCarrier, setselectedCarrier] = useState(0);
   const [totalWeight, setTotalWeight] = useState(0);
 
-  const [biayaKirim, setBiayaKirim] = useState(0);
+  // const [biayaKirim, setBiayaKirim] = useState(0);
   const [selectedExpedisiService, setselectedExpedisiService] = useState(null);
-  const [etd, setEtd] = useState(null);
+  // const [etd, setEtd] = useState(null);
   const [etdFix, setEtdFix] = useState(null);
 
   const [isApproval, setIsApproval] = useState(false);
 
   const expedisiValidation = useRef(null);
 
-  const [selectedAddress, setSelectedAddress] = useState({
-    shipping: null,
-    invoicing: null,
-  });
+  // const [selectedAddress, setSelectedAddress] = useState({
+  //   shipping: null,
+  //   invoicing: null,
+  // });
 
-  const [addresses, setAddresses] = useState(null);
+  // const [addresses, setAddresses] = useState(null);
 
   const [note_websiteText, setselectedNote_websiteText] = useState('');
 
+  const {
+    selectedAddress,
+    setSelectedAddress,
+    addresses,
+    setAddresses,
+    setAddressMaps,
+    setCoordinate,
+    setPostalCode,
+  } = useAddress();
+
+  const {
+    checkWeigth,
+    setCheckWeight,
+    hasFlashSale,
+    setHasFlashSale,
+    checkoutValidation,
+    setCheckoutValidation,
+    biayaKirim,
+    products,
+    setProducts,
+    etd,
+    unit,
+    selectedCourier,
+    selectedCourierId,
+    selectedService,
+    listExpedisi,
+    setExpedisi,
+    productSla
+  } = useQuotation();
+
   useEffect(() => {
     if (!auth) return;
 
@@ -116,62 +150,88 @@ const Quotation = () => {
       return addresses[0];
     };
 
+    let ship = matchAddress('shipping');
+
     setSelectedAddress({
       shipping: matchAddress('shipping'),
       invoicing: matchAddress('invoicing'),
     });
+    setPostalCode(ship?.zip);
+    if (ship?.addressMap) {
+      setAddressMaps(ship?.addressMap);
+      setCoordinate({
+        destination_latitude: ship?.latitude,
+        destination_longitude: ship?.longtitude,
+      });
+    }
   }, [addresses]);
 
-  const loadExpedisi = async () => {
-    let dataExpedisi = await ExpedisiList();
-    dataExpedisi = dataExpedisi.map((expedisi) => ({
-      value: expedisi.id,
-      label: expedisi.name,
-      carrierId: expedisi.deliveryCarrierId,
-    }));
-    setExpedisi(dataExpedisi);
-  };
+  useEffect(() => {
+    // voucher();
+    const loadExpedisi = async () => {
+      let dataExpedisi = await ExpedisiList();
+      dataExpedisi = dataExpedisi.map((expedisi) => ({
+        value: expedisi.id,
+        label: expedisi.name,
+        carrierId: expedisi.deliveryCarrierId,
+        logo: expedisi.image,
+      }));
+      setExpedisi(dataExpedisi);
+    };
+    
+    loadExpedisi();
 
-  const loadServiceRajaOngkir = async () => {
-    setLoadingRajaOngkir(true);
-    const body = {
-      origin: 2127,
-      destination: selectedAddress.shipping.rajaongkirCityId,
-      weight: totalWeight,
-      courier: selectedCarrier,
-      originType: 'subdistrict',
-      destinationType: 'subdistrict',
+    const handlePopState = () => {
+      router.push('/shop/cart');
     };
-    setBiayaKirim(0);
-    const dataService = await axios(
-      '/api/rajaongkir-service?body=' + JSON.stringify(body)
-    );
-    setLoadingRajaOngkir(false);
-    setListServiceExpedisi(dataService.data[0].costs);
-    if (dataService.data[0].costs[0]) {
-      setBiayaKirim(dataService.data[0].costs[0]?.cost[0].value);
-      setselectedExpedisiService(
-        dataService.data[0].costs[0]?.description +
-          '-' +
-          dataService.data[0].costs[0]?.service
-      );
-      setEtd(dataService.data[0].costs[0]?.cost[0].etd);
-      toast.success('Harap pilih tipe layanan pengiriman');
-    } else {
-      toast.error('Maaf, layanan tidak tersedia. Mohon pilih expedisi lain.');
-    }
-  };
+
+    window.onpopstate = handlePopState;
+
+    return () => {
+      window.onpopstate = null;
+    };
+  }, []);
+
+  // const loadServiceRajaOngkir = async () => {
+  //   setLoadingRajaOngkir(true);
+  //   const body = {
+  //     origin: 2127,
+  //     destination: selectedAddress.shipping.rajaongkirCityId,
+  //     weight: totalWeight,
+  //     courier: selectedCarrier,
+  //     originType: 'subdistrict',
+  //     destinationType: 'subdistrict',
+  //   };
+  //   setBiayaKirim(0);
+  //   const dataService = await axios(
+  //     '/api/rajaongkir-service?body=' + JSON.stringify(body)
+  //   );
+  //   setLoadingRajaOngkir(false);
+  //   setListServiceExpedisi(dataService.data[0].costs);
+  //   if (dataService.data[0].costs[0]) {
+  //     setBiayaKirim(dataService.data[0].costs[0]?.cost[0].value);
+  //     setselectedExpedisiService(
+  //       dataService.data[0].costs[0]?.description +
+  //         '-' +
+  //         dataService.data[0].costs[0]?.service
+  //     );
+  //     setEtd(dataService.data[0].costs[0]?.cost[0].etd);
+  //     toast.success('Harap pilih tipe layanan pengiriman');
+  //   } else {
+  //     toast.error('Maaf, layanan tidak tersedia. Mohon pilih expedisi lain.');
+  //   }
+  // };
 
   useEffect(() => {
     setCheckoutValidation(false);
 
     if (selectedCarrier != 0 && selectedCarrier != 1 && totalWeight > 0) {
-      loadServiceRajaOngkir();
+      // loadServiceRajaOngkir();
     } else {
       setListServiceExpedisi();
-      setBiayaKirim(0);
+      // setBiayaKirim(0);
       setselectedExpedisiService();
-      setEtd();
+      // setEtd();
     }
   }, [selectedCarrier, selectedAddress, totalWeight]);
 
@@ -227,7 +287,7 @@ const Quotation = () => {
         });
       }
     };
-    loadExpedisi();
+    // loadExpedisi();
     // loadProducts()
   }, []);
 
@@ -376,24 +436,11 @@ const Quotation = () => {
         <SectionValidation address={selectedAddress.invoicing} />
         {!isApproval && (
           <>
-            <SectionExpedisi
-              address={selectedAddress.shipping}
-              listExpedisi={listExpedisi}
-              setSelectedExpedisi={setSelectedExpedisi}
-              checkWeigth={checkWeigth}
-              checkoutValidation={checkoutValidation}
-              expedisiValidation={expedisiValidation}
-              loadingRajaOngkir={loadingRajaOngkir}
-            />
+            {/* <SectionExpedition products={products} /> */}
             <Divider />
           </>
         )}
 
-        <SectionListService
-          listserviceExpedisi={listserviceExpedisi}
-          setSelectedServiceType={setSelectedServiceType}
-        />
-
         <div className='p-4 flex flex-col gap-y-4'>
           {products && (
             <VariantGroupCard openOnClick={false} variants={products} />
@@ -401,7 +448,9 @@ const Quotation = () => {
         </div>
 
         <Divider />
-
+        {products && products.length > 0 && (
+          <SectionExpedition products={products} listExpedisi={listExpedisi} />
+        )}
         <div className='p-4'>
           <div className='flex justify-between items-center'>
             <div className='font-medium'>Ringkasan Penawaran</div>
@@ -522,23 +571,14 @@ const Quotation = () => {
             )}
             <Divider />
             <SectionValidation address={selectedAddress.invoicing} />
-            {!isApproval && (
-              <SectionExpedisi
-                address={selectedAddress.shipping}
-                listExpedisi={listExpedisi}
-                setSelectedExpedisi={setSelectedExpedisi}
-                checkWeigth={checkWeigth}
-                checkoutValidation={checkoutValidation}
-                expedisiValidation={expedisiValidation}
-                loadingRajaOngkir={loadingRajaOngkir}
-              />
-            )}
+            {/* {!isApproval && (
+              <SectionExpedition products={products} />
+            )} */}
 
             <Divider />
-            <SectionListService
-              listserviceExpedisi={listserviceExpedisi}
-              setSelectedServiceType={setSelectedServiceType}
-            />
+            {products && products.length > 0 && (
+              <SectionExpedition products={products} listExpedisi={listExpedisi} />
+            )}
             {/* <div className='p-4'> */}
             <div className='font-medium mb-6'>Detail Barang</div>
             <CardProdcuctsList
-- 
cgit v1.2.3

