From 50425ea134852897bf125aae0f68a1642eb3b3b8 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Wed, 3 Apr 2024 10:31:14 +0700 Subject: Add voucher shipping feature --- src/lib/checkout/components/Checkout.jsx | 224 ++++++++++++++++++++++++++----- 1 file changed, 191 insertions(+), 33 deletions(-) (limited to 'src/lib/checkout/components') diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 52edbd05..042fc258 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -43,9 +43,16 @@ const Checkout = () => { const auth = useAuth(); const [activeVoucher, SetActiveVoucher] = useState(null); - - const { data: cartCheckout } = useQuery('cartCheckout-' + activeVoucher, () => - getProductsCheckout(activeVoucher, query) + const [activeVoucherShipping, setActiveVoucherShipping] = useState(null); + + const { data: cartCheckout } = useQuery( + ['cartCheckout', activeVoucher, activeVoucherShipping], + () => + getProductsCheckout({ + source: query, + voucher: activeVoucher, + voucher_shipping: activeVoucherShipping, + }) ); const [selectedAddress, setSelectedAddress] = useState({ @@ -103,6 +110,7 @@ const Checkout = () => { const [bottomPopupTnC, SetBottomPopupTnC] = useState(null); const [itemTnC, setItemTnC] = useState(null); const [listVouchers, SetListVoucher] = useState(null); + const [listVoucherShippings, SetListVoucherShipping] = useState(null); const [discountVoucher, SetDiscountVoucher] = useState(0); const [codeVoucher, SetCodeVoucher] = useState(null); const [findCodeVoucher, SetFindVoucher] = useState(null); @@ -117,13 +125,23 @@ const Checkout = () => { const voucher = async () => { if (!listVouchers) { try { - let dataVoucher = await getVoucher(auth?.id, query); + setLoadingVoucher(true); + let dataVoucher = await getVoucher(auth?.id, { + source: query, + }); SetListVoucher(dataVoucher); + + let dataVoucherShipping = await getVoucher(auth?.id, { + source: query, + type: 'shipping', + }); + SetListVoucherShipping(dataVoucherShipping); } finally { setLoadingVoucher(false); } } }; + const VoucherCode = async (code) => { let dataVoucher = await findVoucher(code, auth.id, query); if (dataVoucher.length <= 0) { @@ -333,6 +351,7 @@ const Checkout = () => { estimated_arrival_days: splitDuration(etd), delivery_service_type: selectedExpedisiService, voucher: activeVoucher, + voucher_shipping: activeVoucherShipping, type: 'sale_order', }; @@ -419,6 +438,11 @@ const Checkout = () => { return false; }, [products]); + const voucherShippingAmt = cartCheckout?.discountVoucherShipping || 0; + const discShippingAmt = Math.min(biayaKirim, voucherShippingAmt); + + const finalShippingAmt = biayaKirim - discShippingAmt; + return ( <> { )} -
-
+
+ + {listVoucherShippings && listVoucherShippings?.length > 0 && ( +
+

Promo Gratis Ongkir

+ {listVoucherShippings?.map((item) => ( +
+
+ {item.canApply && ( + + )} + {!item.canApply && ( + + )} + +
+ {item.canApply === false && ( +
+ )} +
+ {item.name} +
+
+
+
+

{item.name}

+
+ + {item.description}{' '} + +
+
+
+ +
+
+
+
+

+ Kode Voucher :{' '} + + {item.code} + +

+

+ {activeVoucher === item.code && ( + + Voucher digunakan{' '} + + )} +

+
+
+ +
+
+ Berakhir dalam{' '} + + {item.remainingTime} + {' '} + lagi,{' '} +
+
handlingTnC(item)} + > + Baca S&K +
+
+
+
+
+
+

+
+
+
+ ))} +
+ )} + +
+ +
{!loadingVoucher && listVouchers?.length === 0 ? (
@@ -714,14 +875,7 @@ const Checkout = () => {
-

- {/* {item.canApply === false - ? 'Tambah ' + - currencyFormat(item.differenceToApply) + - ' untuk pakai promo ini' - : 'Potensi potongan sebesar ' + - currencyFormat(hitungDiscountVoucher(item.code))} */} -

+

@@ -887,14 +1041,18 @@ const Checkout = () => {
- Biaya Kirim

{etdFix}

-
-
- {currencyFormat( - Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000 - )} + Biaya Kirim

{etdFix}

+
{currencyFormat(biayaKirim)}
+ {activeVoucherShipping && voucherShippingAmt && ( +
+
Diskon Kirim
+
+ - {currencyFormat(discShippingAmt)} +
+
+ )} )} @@ -913,10 +1071,7 @@ const Checkout = () => {
Grand Total
- {currencyFormat( - cartCheckout?.grandTotal + - Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000 - )} + {currencyFormat(cartCheckout?.grandTotal + finalShippingAmt)}
)} @@ -926,7 +1081,7 @@ const Checkout = () => {
)} @@ -1209,8 +1368,7 @@ const Checkout = () => {
Grand Total
{currencyFormat( - cartCheckout?.grandTotal + - Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000 + cartCheckout?.grandTotal + finalShippingAmt )}
-- cgit v1.2.3