diff options
Diffstat (limited to 'src/lib/quotation/components/Quotation.jsx')
| -rw-r--r-- | src/lib/quotation/components/Quotation.jsx | 206 |
1 files changed, 123 insertions, 83 deletions
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 |
