From e12765964e2e9c834205634533cb9fb3300fbb4c Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Mon, 29 May 2023 14:41:38 +0700 Subject: Add gtag event conversion on checkout --- src/lib/checkout/components/Checkout.jsx | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'src/lib') diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 088b641b..525a641b 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -233,12 +233,26 @@ const Checkout = () => { return } - for (const product of products) deleteItemCart({ productId: product.id }) - const payment = await axios.post( - `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/midtrans-payment?transactionId=${isCheckouted.id}` - ) - setIsLoading(false) - window.location.href = payment.data.redirectUrl + const midtrans = async () => { + for (const product of products) deleteItemCart({ productId: product.id }) + const payment = await axios.post( + `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/midtrans-payment?transactionId=${isCheckouted.id}` + ) + setIsLoading(false) + window.location.href = payment.data.redirectUrl + } + + gtag('event', 'conversion', { + send_to: 'AW-954540379/nDymCL3BhaQYENvClMcD', + value: + totalAmount - + totalDiscountAmount + + taxTotal + + Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000, + currency: 'IDR', + transaction_id: isCheckouted.id, + event_callback: midtrans + }) } const taxTotal = (totalAmount - totalDiscountAmount) * 0.11 -- cgit v1.2.3 From 0ee7434188364dc230bbd034dc165a0f4850e3db Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Sat, 3 Jun 2023 11:16:32 +0700 Subject: Add gtag event on product detail --- src/lib/product/components/Product/Product.jsx | 6 ++++++ src/lib/product/components/Product/ProductDesktop.jsx | 14 ++++++++------ src/lib/product/components/Product/ProductMobile.jsx | 2 ++ 3 files changed, 16 insertions(+), 6 deletions(-) (limited to 'src/lib') diff --git a/src/lib/product/components/Product/Product.jsx b/src/lib/product/components/Product/Product.jsx index 9521cbe4..351c07c1 100644 --- a/src/lib/product/components/Product/Product.jsx +++ b/src/lib/product/components/Product/Product.jsx @@ -5,6 +5,8 @@ import ProductDesktop from './ProductDesktop' import useAuth from '@/core/hooks/useAuth' import ProductMobile from './ProductMobile' import { useRouter } from 'next/router' +import { useEffect } from 'react' +import { gtagViewItem } from '@/core/utils/googleTag' const Product = ({ product }) => { const auth = useAuth() @@ -26,6 +28,10 @@ const Product = ({ product }) => { wishlist.refetch() } + useEffect(() => { + gtagViewItem(product.variants) + }, [product]) + return ( <> diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 75b37b9d..4a584761 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -14,6 +14,7 @@ import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import ProductCard from '../ProductCard' import productSimilarApi from '../../api/productSimilarApi' import whatsappUrl from '@/core/utils/whatsappUrl' +import { gtagAddToCart } from '@/core/utils/googleTag' const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const router = useRouter() @@ -52,11 +53,12 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { return isValid } - const handleAddToCart = (variantId) => { - const quantity = variantQuantityRefs.current[variantId].value + const handleAddToCart = (variant) => { + const quantity = variantQuantityRefs.current[variant.id].value if (!validQuantity(quantity)) return + gtagAddToCart(variant, quantity) updateItemCart({ - productId: variantId, + productId: variant.id, quantity, selected: true }) @@ -247,14 +249,14 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { /> diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 525a641b..07d9acb6 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -22,8 +22,8 @@ import DesktopView from '@/core/components/views/DesktopView' import ExpedisiList from '../api/ExpedisiList' import whatsappUrl from '@/core/utils/whatsappUrl' import { createSlug } from '@/core/utils/slug' -import { Button, Modal } from 'flowbite-react' import BottomPopup from '@/core/components/elements/Popup/BottomPopup' +import { gtagPurchase } from '@/core/utils/googleTag' const SELF_PICKUP_ID = 32 @@ -233,6 +233,8 @@ const Checkout = () => { return } + gtagPurchase(products, biayaKirim, isCheckouted.name) + const midtrans = async () => { for (const product of products) deleteItemCart({ productId: product.id }) const payment = await axios.post( diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 4a584761..6a87d022 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -65,10 +65,10 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { setAddCartAlert(true) } - const handleBuy = (variantId) => { - const quantity = variantQuantityRefs.current[variantId].value + const handleBuy = (variant) => { + const quantity = variantQuantityRefs.current[variant.id].value if (!validQuantity(quantity)) return - router.push(`/shop/checkout?productId=${variantId}&quantity=${quantity}`) + router.push(`/shop/checkout?productId=${variant.id}&quantity=${quantity}`) } const variantSectionRef = useRef(null) -- cgit v1.2.3 From dea8af5e7293d5e656a8a70b45b47a458420ed41 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Fri, 16 Jun 2023 14:01:58 +0700 Subject: Update cart detail --- src/lib/cart/components/Cart.jsx | 48 +++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'src/lib') diff --git a/src/lib/cart/components/Cart.jsx b/src/lib/cart/components/Cart.jsx index 8c4e7d42..c02f976f 100644 --- a/src/lib/cart/components/Cart.jsx +++ b/src/lib/cart/components/Cart.jsx @@ -140,6 +140,10 @@ const Cart = () => { router.push('/shop/checkout') } + const totalOrder = totalPriceBeforeTax - totalDiscountAmount + totalTaxAmount + const tax = totalOrder * 0.11 + const totalPrice = totalOrder + tax + return ( <> { ))}
-
-
- Total: - -   - {selectedProduct().length > 0 - ? currencyFormat(totalPriceBeforeTax - totalDiscountAmount + totalTaxAmount) - : '-'} - +
+
+ Total Pesanan + {currencyFormat(totalOrder)} +
+
+ PPN 11% + {currencyFormat(tax)} +
+
+
+ Total Harga: + {currencyFormat(totalPrice)}
@@ -447,15 +455,19 @@ const Cart = () => {

Ringkasan Belanja

-
-
- Total: - -   - {selectedProduct().length > 0 - ? currencyFormat(totalPriceBeforeTax - totalDiscountAmount + totalTaxAmount) - : '-'} - +
+
+ Total Pesanan + {currencyFormat(totalOrder)} +
+
+ PPN 11% + {currencyFormat(tax)} +
+
+
+ Total Harga: + {currencyFormat(totalPrice)}
-- cgit v1.2.3 From 290114b315a2f478113918cd8fc37737a47f8e70 Mon Sep 17 00:00:00 2001 From: Rafi Zadanly Date: Tue, 20 Jun 2023 09:01:38 +0700 Subject: Update UI style --- src/lib/home/components/CategoryHomeId.jsx | 2 +- src/lib/home/components/PreferredBrand.jsx | 4 ++-- src/lib/review/components/CustomerReviews.jsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/lib') diff --git a/src/lib/home/components/CategoryHomeId.jsx b/src/lib/home/components/CategoryHomeId.jsx index 3707063c..71428e27 100644 --- a/src/lib/home/components/CategoryHomeId.jsx +++ b/src/lib/home/components/CategoryHomeId.jsx @@ -7,7 +7,7 @@ const CategoryHomeId = () => { return (
-
Kategori Pilihan
+
Kategori Pilihan
{categoryHomeIds.data?.map((id) => ( diff --git a/src/lib/home/components/PreferredBrand.jsx b/src/lib/home/components/PreferredBrand.jsx index 34c50220..55abe0b7 100644 --- a/src/lib/home/components/PreferredBrand.jsx +++ b/src/lib/home/components/PreferredBrand.jsx @@ -12,9 +12,9 @@ const PreferredBrand = () => { return (
-
Brand Pilihan
+
Brand Pilihan
{isDesktop && ( - + Lihat Semua )} diff --git a/src/lib/review/components/CustomerReviews.jsx b/src/lib/review/components/CustomerReviews.jsx index 5cc179e9..7cad52fb 100644 --- a/src/lib/review/components/CustomerReviews.jsx +++ b/src/lib/review/components/CustomerReviews.jsx @@ -12,7 +12,7 @@ const CustomerReviews = () => { return (
-
Ulasan Konsumen Kami
+
Ulasan Konsumen Kami
-- cgit v1.2.3 From bbc333053b2cb963f8a16cecb4d7f15a0111daf2 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Thu, 22 Jun 2023 11:02:53 +0700 Subject: page variant --- src/lib/product/api/variantApi.js | 9 + src/lib/product/components/Product/Product.jsx | 39 ++- .../components/Product/ProductDesktopVariant.jsx | 348 +++++++++++++++++++++ .../components/Product/ProductMobileVariant.jsx | 315 +++++++++++++++++++ 4 files changed, 702 insertions(+), 9 deletions(-) create mode 100644 src/lib/product/api/variantApi.js create mode 100644 src/lib/product/components/Product/ProductDesktopVariant.jsx create mode 100644 src/lib/product/components/Product/ProductMobileVariant.jsx (limited to 'src/lib') diff --git a/src/lib/product/api/variantApi.js b/src/lib/product/api/variantApi.js new file mode 100644 index 00000000..47273dd7 --- /dev/null +++ b/src/lib/product/api/variantApi.js @@ -0,0 +1,9 @@ +import odooApi from '@/core/api/odooApi' + +const variantApi = async ({ id, headers = {} }) => { + if (!id) return + const dataProduct = await odooApi('GET', `/api/v2/product_variant/${id}`, {}, headers) + return dataProduct +} + +export default variantApi diff --git a/src/lib/product/components/Product/Product.jsx b/src/lib/product/components/Product/Product.jsx index 351c07c1..0547c36e 100644 --- a/src/lib/product/components/Product/Product.jsx +++ b/src/lib/product/components/Product/Product.jsx @@ -7,8 +7,10 @@ import ProductMobile from './ProductMobile' import { useRouter } from 'next/router' import { useEffect } from 'react' import { gtagViewItem } from '@/core/utils/googleTag' +import ProductDesktopVariant from './ProductDesktopVariant' +import ProductMobileVariant from './ProductMobileVariant' -const Product = ({ product }) => { +const Product = ({ product, isVariant = false }) => { const auth = useAuth() const router = useRouter() const { wishlist } = useWishlist({ productId: product?.id }) @@ -29,15 +31,34 @@ const Product = ({ product }) => { } useEffect(() => { - gtagViewItem(product.variants) - }, [product]) + if (isVariant == false) { + gtagViewItem(product.variants) + } + }, [product, isVariant]) - return ( - <> - - - - ) + if (isVariant == true) { + return ( + <> + + + + ) + } else { + return ( + <> + + + + ) + } } export default Product diff --git a/src/lib/product/components/Product/ProductDesktopVariant.jsx b/src/lib/product/components/Product/ProductDesktopVariant.jsx new file mode 100644 index 00000000..a98985c9 --- /dev/null +++ b/src/lib/product/components/Product/ProductDesktopVariant.jsx @@ -0,0 +1,348 @@ +import Image from '@/core/components/elements/Image/Image' +import Link from '@/core/components/elements/Link/Link' +import DesktopView from '@/core/components/views/DesktopView' +import currencyFormat from '@/core/utils/currencyFormat' +import { HeartIcon } from '@heroicons/react/24/outline' +import { useCallback, useEffect, useRef, useState } from 'react' +import LazyLoad from 'react-lazy-load' +import ProductSimilar from '../ProductSimilar' +import { toast } from 'react-hot-toast' +import { updateItemCart } from '@/core/utils/cart' +import { useRouter } from 'next/router' +import { createSlug } from '@/core/utils/slug' +import BottomPopup from '@/core/components/elements/Popup/BottomPopup' +import ProductCard from '../ProductCard' +import productSimilarApi from '../../api/productSimilarApi' +import whatsappUrl from '@/core/utils/whatsappUrl' + +const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant }) => { + const router = useRouter() + + const [lowestPrice, setLowestPrice] = useState(null) + + const [addCartAlert, setAddCartAlert] = useState(false) + + const getLowestPrice = useCallback(() => { + const lowest = product.price + /* const lowest = prices.reduce((lowest, price) => { + return price.priceDiscount < lowest.priceDiscount ? price : lowest + }, prices[0])*/ + return lowest + }, [product]) + + useEffect(() => { + const lowest = getLowestPrice() + setLowestPrice(lowest) + }, [getLowestPrice]) + + const [informationTab, setInformationTab] = useState(informationTabOptions[0].value) + + const variantQuantityRefs = useRef([]) + + const setVariantQuantityRef = (variantId) => (element) => { + variantQuantityRefs.current[variantId] = element + } + + const validQuantity = (quantity) => { + let isValid = true + if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) { + toast.error('Jumlah barang minimal 1') + isValid = false + } + return isValid + } + + const handleAddToCart = (variant) => { + const quantity = variantQuantityRefs.current[variant].value + if (!validQuantity(quantity)) return + updateItemCart({ + productId: variant, + quantity, + selected: true + }) + setAddCartAlert(true) + } + + const handleBuy = (variant) => { + const quantity = variantQuantityRefs.current[variant].value + if (!validQuantity(quantity)) return + router.push(`/shop/checkout?productId=${variant}&quantity=${quantity}`) + } + + const variantSectionRef = useRef(null) + const goToVariantSection = () => { + if (variantSectionRef.current) { + const position = variantSectionRef.current.getBoundingClientRect() + window.scrollTo({ + top: position.top - 120 + window.pageYOffset, + behavior: 'smooth' + }) + } + } + + const productSimilarQuery = [ + product?.name, + `fq=-product_id_i:${product.id}`, + `fq=-manufacture_id_i:${product.manufacture?.id || 0}` + ].join('&') + + const [productSimilarInBrand, setProductSimilarInBrand] = useState(null) + + useEffect(() => { + const loadProductSimilarInBrand = async () => { + const productSimilarQuery = [product?.name, `fq=-product_id_i:${product.id}`].join('&') + const dataProductSimilar = await productSimilarApi({ query: productSimilarQuery }) + setProductSimilarInBrand(dataProductSimilar.products) + } + if (!productSimilarInBrand) loadProductSimilarInBrand() + }, [product, productSimilarInBrand]) + + return ( + +
+
+
+
+ {product.name} +
+ +
+

{product?.name}

+
+
+
Nomor SKU
+
SKU-{product.id}
+
+
+
Part Number
+
{product.code || '-'}
+
+
+
Manufacture
+
+ {product.manufacture?.name ? ( + + {product.manufacture?.name} + + ) : ( +
-
+ )} +
+
+
+
Berat Barang
+
+ {product?.weight > 0 && {product?.weight} KG} + {product?.weight == 0 && ( + + Tanya Berat + + )} +
+
+
+
+ + {/*
+
+
Informasi Produk
+
+ {informationTabOptions.map((option) => ( + setInformationTab(option.value)} + > + {option.label} + + ))} +
+
+
+ + + + + + Belum ada informasi. + +
+
+
+
*/} +
+ +
+ {lowestPrice?.discountPercentage > 0 && ( +
+
+ {lowestPrice?.discountPercentage}% +
+
+ {currencyFormat(lowestPrice?.price * 1.11)} +
+
+ )} +

+ {currencyFormat(lowestPrice?.priceDiscount)} +

+

+ {lowestPrice?.priceDiscount > 0 ? ( + currencyFormat(lowestPrice?.priceDiscount * 1.11) + ) : ( + + Hubungi kami untuk dapatkan harga terbaik,  + + klik disini + + + )} + {lowestPrice?.priceDiscount > 0 && ( + *include PPN + )} +

+ +
+ + + +
+ +
+ +
+ +
+
+ Produk Serupa +
+
+ {productSimilarInBrand && + productSimilarInBrand?.map((product) => ( +
+ +
+ ))} +
+
+
+
+ +
+
Kamu Mungkin Juga Suka
+ + + +
+ + setAddCartAlert(false)} + > +
+
+ {product.name} +
+
{product.name}
+
+ + Lihat Keranjang + +
+
+ +
+
Kamu Mungkin Juga Suka
+ + + +
+
+
+
+ ) +} + +const informationTabOptions = [ + { value: 'description', label: 'Deskripsi' }, + { value: 'information', label: 'Info Penting' } +] + +const TabButton = ({ children, active, ...props }) => { + const activeClassName = active + ? 'text-danger-500 underline underline-offset-4' + : 'text-gray_r-12/80' + return ( + + ) +} + +const TabContent = ({ children, active, className = '', ...props }) => ( +
+ {children} +
+) + +export default ProductDesktopVariant diff --git a/src/lib/product/components/Product/ProductMobileVariant.jsx b/src/lib/product/components/Product/ProductMobileVariant.jsx new file mode 100644 index 00000000..29d7700d --- /dev/null +++ b/src/lib/product/components/Product/ProductMobileVariant.jsx @@ -0,0 +1,315 @@ +import Divider from '@/core/components/elements/Divider/Divider' +import Image from '@/core/components/elements/Image/Image' +import Link from '@/core/components/elements/Link/Link' +import currencyFormat from '@/core/utils/currencyFormat' +import { useEffect, useState } from 'react' +import Select from 'react-select' +import ProductSimilar from '../ProductSimilar' +import LazyLoad from 'react-lazy-load' +import { updateItemCart } from '@/core/utils/cart' +import { HeartIcon } from '@heroicons/react/24/outline' +import { useRouter } from 'next/router' +import MobileView from '@/core/components/views/MobileView' +import { toast } from 'react-hot-toast' +import { createSlug } from '@/core/utils/slug' +import BottomPopup from '@/core/components/elements/Popup/BottomPopup' +import whatsappUrl from '@/core/utils/whatsappUrl' +import { gtagAddToCart } from '@/core/utils/googleTag' + +const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { + const router = useRouter() + + const [quantity, setQuantity] = useState('1') + const [selectedVariant, setSelectedVariant] = useState(product.id) + const [informationTab, setInformationTab] = useState(informationTabOptions[0].value) + const [addCartAlert, setAddCartAlert] = useState(false) + + const getLowestPrice = () => { + const lowest = product.price + return lowest + } + + const [activeVariant, setActiveVariant] = useState({ + id: null, + code: product.code, + name: product.name, + price: getLowestPrice(), + stock: product.stockTotal, + weight: product.weight + }) + + useEffect(() => { + if (selectedVariant) { + setActiveVariant({ + id: product.id, + code: product.code, + name: product.name, + price: product.price, + stock: product.stock, + weight: product.weight + }) + } + }, [selectedVariant, product]) + + const validAction = () => { + let isValid = true + if (!selectedVariant) { + toast.error('Pilih varian terlebih dahulu') + isValid = false + } + if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) { + toast.error('Jumlah barang minimal 1') + isValid = false + } + return isValid + } + + const handleClickCart = () => { + if (!validAction()) return + gtagAddToCart(activeVariant, quantity) + updateItemCart({ + productId: activeVariant.id, + quantity, + selected: true + }) + setAddCartAlert(true) + } + + const handleClickBuy = () => { + if (!validAction()) return + router.push(`/shop/checkout?productId=${activeVariant.id}&quantity=${quantity}`) + } + + const productSimilarQuery = [ + product?.name, + `fq=-product_id_i:${product.id}`, + `fq=-manufacture_id_i:${product.manufacture?.id || 0}` + ].join('&') + + return ( + + {product.name} + +
+
+ {product.manufacture?.name ? ( + + {product.manufacture?.name} + + ) : ( +
-
+ )} + +
+

{activeVariant?.name}

+ + {activeVariant?.price?.discountPercentage > 0 && ( +
+
+ {currencyFormat(activeVariant?.price?.price * 1.11)} +
+
{activeVariant?.price?.discountPercentage}%
+
+ )} +

+ {currencyFormat(activeVariant?.price?.priceDiscount)} +

+

+ {activeVariant?.price?.priceDiscount > 0 ? ( + currencyFormat(activeVariant?.price?.priceDiscount * 1.11) + ) : ( + + Hubungi kami untuk dapatkan harga terbaik,  + + klik disini + + + )} + + {activeVariant?.price?.priceDiscount > 0 && ( + *include PPN + )} +

+
+ + + +
+
Jumlah
+
+
+ setQuantity(e.target.value)} + /> +
+ + +
+
+ + + +
+

Informasi Produk

+
+ {informationTabOptions.map((option) => ( + setInformationTab(option.value)} + > + {option.label} + + ))} +
+ + + + SKU-{product?.id} + + + {activeVariant?.code || '-'} + + + {activeVariant?.stock > 0 && ( + +
Ready Stock
+
{activeVariant?.stock > 5 ? '> 5' : '< 5'}
+
+ )} + {activeVariant?.stock == 0 && ( + + Tanya Stok + + )} +
+ + {activeVariant?.weight > 0 && {activeVariant?.weight} KG} + {activeVariant?.weight == 0 && ( + + Tanya Berat + + )} + +
+ + +
+ + + +
+

Kamu Mungkin Juga Suka

+ + + +
+ + setAddCartAlert(false)} + > +
+
+ {product.name} +
+
{product.name}
+
+ + Lihat Keranjang + +
+
+
+
Kamu Mungkin Juga Suka
+ + + +
+
+
+ ) +} + +const informationTabOptions = [ + { value: 'specification', label: 'Spesifikasi' } + // { value: 'description', label: 'Deskripsi' }, + // { value: 'information', label: 'Info Penting' } +] + +const TabButton = ({ children, active, ...props }) => { + const activeClassName = active ? 'text-danger-500 underline underline-offset-4' : 'text-gray_r-11' + return ( + + ) +} + +const TabContent = ({ children, active, className, ...props }) => ( +
+ {children} +
+) + +const SpecificationContent = ({ children, label }) => ( +
+ {label} + {children} +
+) + +export default ProductMobileVariant -- cgit v1.2.3 From 9bbb8d45420eca5a5987a43b55c2a4bec01f19fe Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Thu, 22 Jun 2023 13:39:23 +0700 Subject: xml google merchnt --- src/lib/product/api/variantSearchApi.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/lib/product/api/variantSearchApi.js (limited to 'src/lib') diff --git a/src/lib/product/api/variantSearchApi.js b/src/lib/product/api/variantSearchApi.js new file mode 100644 index 00000000..d7b05423 --- /dev/null +++ b/src/lib/product/api/variantSearchApi.js @@ -0,0 +1,11 @@ +import _ from 'lodash-contrib' +import axios from 'axios' + +const variantSearchApi = async ({ query, operation = 'AND' }) => { + const dataProductSearch = await axios( + `${process.env.NEXT_PUBLIC_SELF_HOST}/api/shop/variant?${query}&operation=${operation}` + ) + return dataProductSearch.data +} + +export default variantSearchApi -- cgit v1.2.3 From 033b880d1a88e2fc0cd5bb8bce2ed24dae3e94ea Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Thu, 22 Jun 2023 16:57:41 +0700 Subject: change layout --- .../components/Product/ProductDesktopVariant.jsx | 56 ++++++++++++---------- 1 file changed, 30 insertions(+), 26 deletions(-) (limited to 'src/lib') diff --git a/src/lib/product/components/Product/ProductDesktopVariant.jsx b/src/lib/product/components/Product/ProductDesktopVariant.jsx index a98985c9..557bcc0e 100644 --- a/src/lib/product/components/Product/ProductDesktopVariant.jsx +++ b/src/lib/product/components/Product/ProductDesktopVariant.jsx @@ -195,42 +195,46 @@ const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant })
*/}
-
+
+
+ Harga Sebelum PPN : +
+
+ + {currencyFormat(lowestPrice?.priceDiscount)} + +
+
+ Termasuk PPN : {lowestPrice?.discountPercentage > 0 && ( -
+
{lowestPrice?.discountPercentage}%
{currencyFormat(lowestPrice?.price * 1.11)}
+

+ {lowestPrice?.priceDiscount > 0 ? ( + currencyFormat(lowestPrice?.priceDiscount * 1.11) + ) : ( + + Hubungi kami untuk dapatkan harga terbaik,  + + klik disini + + + )} +

)} -

- {currencyFormat(lowestPrice?.priceDiscount)} -

-

- {lowestPrice?.priceDiscount > 0 ? ( - currencyFormat(lowestPrice?.priceDiscount * 1.11) - ) : ( - - Hubungi kami untuk dapatkan harga terbaik,  - - klik disini - - - )} - {lowestPrice?.priceDiscount > 0 && ( - *include PPN - )} -

Date: Fri, 23 Jun 2023 09:32:49 +0700 Subject: change request layout harga --- .../components/Product/ProductDesktopVariant.jsx | 75 +++++++++++----------- .../components/Product/ProductMobileVariant.jsx | 71 +++++++++++--------- 2 files changed, 76 insertions(+), 70 deletions(-) (limited to 'src/lib') diff --git a/src/lib/product/components/Product/ProductDesktopVariant.jsx b/src/lib/product/components/Product/ProductDesktopVariant.jsx index 557bcc0e..e0573357 100644 --- a/src/lib/product/components/Product/ProductDesktopVariant.jsx +++ b/src/lib/product/components/Product/ProductDesktopVariant.jsx @@ -196,46 +196,45 @@ const ProductDesktopVariant = ({ product, wishlist, toggleWishlist, isVariant })
*/}
-
-
- Harga Sebelum PPN : -
-
- - {currencyFormat(lowestPrice?.priceDiscount)} - -
-
- Termasuk PPN : - {lowestPrice?.discountPercentage > 0 && ( -
-
- {lowestPrice?.discountPercentage}% + {lowestPrice?.priceDiscount > 0 ? ( + <> +
+
+ Harga Sebelum PPN : +
+
+ + {currencyFormat(lowestPrice?.priceDiscount)} + +
-
- {currencyFormat(lowestPrice?.price * 1.11)} + Termasuk PPN : +
+
+ {lowestPrice?.discountPercentage}% +
+
+ {currencyFormat(lowestPrice?.price * 1.11)} +
+

+ {currencyFormat(lowestPrice?.priceDiscount * 1.11)} +

-

- {lowestPrice?.priceDiscount > 0 ? ( - currencyFormat(lowestPrice?.priceDiscount * 1.11) - ) : ( - - Hubungi kami untuk dapatkan harga terbaik,  - - klik disini - - - )} -

-
+ + ) : ( + + Hubungi kami untuk dapatkan harga terbaik,  + + klik disini + + )} -
-
-
Produk Serupa diff --git a/src/lib/product/components/Product/ProductMobileVariant.jsx b/src/lib/product/components/Product/ProductMobileVariant.jsx index 29d7700d..26c3fea3 100644 --- a/src/lib/product/components/Product/ProductMobileVariant.jsx +++ b/src/lib/product/components/Product/ProductMobileVariant.jsx @@ -115,39 +115,48 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => {

{activeVariant?.name}

- {activeVariant?.price?.discountPercentage > 0 && ( -
-
- {currencyFormat(activeVariant?.price?.price * 1.11)} + {activeVariant?.price?.priceDiscount > 0 ? ( + <> +
+
Harga Sebelum PPN :
+
+ {' '} + {currencyFormat(activeVariant?.price?.priceDiscount)} +
-
{activeVariant?.price?.discountPercentage}%
-
+
+ Termasuk PPN : +
+ {activeVariant?.price?.discountPercentage > 0 && ( + <> +
+ {activeVariant?.price?.discountPercentage}% +
+
+ {currencyFormat(activeVariant?.price?.price * 1.11)} +
+ + )} +

+ {currencyFormat(activeVariant?.price?.priceDiscount * 1.11)} +

+
+
+ + ) : ( + + Hubungi kami untuk dapatkan harga terbaik,  + + klik disini + + )} -

- {currencyFormat(activeVariant?.price?.priceDiscount)} -

-

- {activeVariant?.price?.priceDiscount > 0 ? ( - currencyFormat(activeVariant?.price?.priceDiscount * 1.11) - ) : ( - - Hubungi kami untuk dapatkan harga terbaik,  - - klik disini - - - )} - - {activeVariant?.price?.priceDiscount > 0 && ( - *include PPN - )} -

-- cgit v1.2.3 From c4e0051472ce343212ea98768d59f367ba9ca727 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Tue, 4 Jul 2023 13:42:00 +0700 Subject: fixing label sebelum ppn --- src/lib/product/components/Product/ProductMobileVariant.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/product/components/Product/ProductMobileVariant.jsx b/src/lib/product/components/Product/ProductMobileVariant.jsx index 26c3fea3..958b00cc 100644 --- a/src/lib/product/components/Product/ProductMobileVariant.jsx +++ b/src/lib/product/components/Product/ProductMobileVariant.jsx @@ -118,7 +118,7 @@ const ProductMobileVariant = ({ product, wishlist, toggleWishlist }) => { {activeVariant?.price?.priceDiscount > 0 ? ( <>
-
Harga Sebelum PPN :
+
Harga Sebelum PPN :
{' '} {currencyFormat(activeVariant?.price?.priceDiscount)} -- cgit v1.2.3 From 502ea2700003e8959f3d81c8978126da0d3b9828 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Mon, 10 Jul 2023 10:31:42 +0700 Subject: button voucher --- src/lib/checkout/components/Checkout.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/lib') diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 07d9acb6..6cb735fe 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -578,6 +578,16 @@ const Checkout = () => { )}
+ +
+ + +

Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '} -- cgit v1.2.3 From bdb8aa884317fdca72a20989f73764fdde06f42e Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Mon, 10 Jul 2023 16:56:58 +0700 Subject: layouting --- src/lib/checkout/api/getVoucher.js | 8 ++ src/lib/checkout/components/Checkout.jsx | 134 +++++++++++++++++++++++++++++-- 2 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 src/lib/checkout/api/getVoucher.js (limited to 'src/lib') diff --git a/src/lib/checkout/api/getVoucher.js b/src/lib/checkout/api/getVoucher.js new file mode 100644 index 00000000..68185021 --- /dev/null +++ b/src/lib/checkout/api/getVoucher.js @@ -0,0 +1,8 @@ +import odooApi from '@/core/api/odooApi' + +const getVoucher = async () => { + const dataVoucher = await odooApi('GET', `/api/v1/voucher`) + return dataVoucher +} + +export default getVoucher diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 6cb735fe..629ec5bc 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -24,6 +24,7 @@ import whatsappUrl from '@/core/utils/whatsappUrl' import { createSlug } from '@/core/utils/slug' import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import { gtagPurchase } from '@/core/utils/googleTag' +import getVoucher from '../api/getVoucher' const SELF_PICKUP_ID = 32 @@ -81,7 +82,13 @@ const Checkout = () => { const [selectedExpedisiService, setselectedExpedisiService] = useState(null) const [etd, setEtd] = useState(null) const [etdFix, setEtdFix] = useState(null) + const [bottomPopup, SetBottomPopup] = useState(null) + const [listVouchers, SetListVoucher] = useState(null) + const voucher = async () => { + let dataVoucher = await getVoucher() + SetListVoucher(dataVoucher) + } useEffect(() => { const loadExpedisi = async () => { let dataExpedisi = await ExpedisiList() @@ -93,8 +100,11 @@ const Checkout = () => { setExpedisi(dataExpedisi) } loadExpedisi() + voucher() }, []) + console.log('ini voucher', listVouchers) + useEffect(() => { const loadProducts = async () => { let variantIds = '' @@ -260,6 +270,95 @@ const Checkout = () => { return ( <> + SetBottomPopup(false)} title='Gunakan Promo'> +

+
+
+ +
+
+ +
+
+ +
+
+

Promo yang tersedia

+ {listVouchers?.map((item) => ( +
+
+
+ {item.name} +
+
+
+
+

{item.name}

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

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

+
+
+
+

+ Voucher ini dapat anda gunakan untuk pengguna pertama{' '} +

+
+
+ + + Berakhir dalam {item.endTime} lagi !{' '} + + Lihat Detail + + +
+
+
+ ))} +
+
+
@@ -353,6 +452,22 @@ const Checkout = () => { )}
+ +
+ +
+ +
{/*

*) Belum termasuk biaya pengiriman

*/}

Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '} @@ -581,12 +696,19 @@ const Checkout = () => {


- +
+ +

Dengan melakukan pembelian melalui website Indoteknik, saya menyetujui{' '} -- cgit v1.2.3 From dc334fa49ad13959b6a0d572fd56a4cde38176fa Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Tue, 11 Jul 2023 15:29:03 +0700 Subject: get voucher --- src/lib/checkout/api/getVoucher.js | 7 +- src/lib/checkout/components/Checkout.jsx | 230 ++++++++++++++++++++++--------- 2 files changed, 168 insertions(+), 69 deletions(-) (limited to 'src/lib') diff --git a/src/lib/checkout/api/getVoucher.js b/src/lib/checkout/api/getVoucher.js index 68185021..03ac3d6d 100644 --- a/src/lib/checkout/api/getVoucher.js +++ b/src/lib/checkout/api/getVoucher.js @@ -1,8 +1,11 @@ import odooApi from '@/core/api/odooApi' -const getVoucher = async () => { +export const getVoucher = async () => { const dataVoucher = await odooApi('GET', `/api/v1/voucher`) return dataVoucher } -export default getVoucher +export const findVoucher = async (code) => { + const dataVoucher = await odooApi('GET', `/api/v1/voucher?code=${code}`) + return dataVoucher +} diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 629ec5bc..dcc00eb8 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -24,7 +24,7 @@ import whatsappUrl from '@/core/utils/whatsappUrl' import { createSlug } from '@/core/utils/slug' import BottomPopup from '@/core/components/elements/Popup/BottomPopup' import { gtagPurchase } from '@/core/utils/googleTag' -import getVoucher from '../api/getVoucher' +import { findVoucher, getVoucher } from '../api/getVoucher' const SELF_PICKUP_ID = 32 @@ -84,11 +84,22 @@ const Checkout = () => { const [etdFix, setEtdFix] = useState(null) const [bottomPopup, SetBottomPopup] = useState(null) const [listVouchers, SetListVoucher] = useState(null) + const [activeVoucher, SetActiveVoucher] = useState(null) + const [discountVoucher, SetDiscountVoucher] = useState(null) + const [codeVoucher, SetCodeVoucher] = useState(null) const voucher = async () => { let dataVoucher = await getVoucher() SetListVoucher(dataVoucher) } + const VoucherCode = async (code) => { + let dataVoucher = await findVoucher(code) + if (!dataVoucher) return + + let addNewLine = dataVoucher[0] + SetListVoucher((prevList) => [addNewLine, ...prevList]) + SetActiveVoucher(addNewLine.code) + } useEffect(() => { const loadExpedisi = async () => { let dataExpedisi = await ExpedisiList() @@ -103,7 +114,27 @@ const Checkout = () => { voucher() }, []) - console.log('ini voucher', listVouchers) + useEffect(() => { + if (!listVouchers) return + if (!activeVoucher) return + + let dataVoucherIndex = listVouchers.findIndex((vocuher) => vocuher.code == activeVoucher) + let dataActiveVocuher = listVouchers[dataVoucherIndex] + let countDiscount = 0 + + if (dataActiveVocuher.discountType === 'percentage') { + countDiscount = (totalAmount - totalDiscountAmount) * 0.1 + if ( + dataActiveVocuher.maxDiscountAmount > 0 && + countDiscount > dataActiveVocuher.maxDiscountAmount + ) { + countDiscount = dataActiveVocuher.maxDiscountAmount + } + } else { + countDiscount = dataActiveVocuher.discountAmount + } + SetDiscountVoucher(countDiscount) + }, [activeVoucher, listVouchers]) useEffect(() => { const loadProducts = async () => { @@ -266,92 +297,137 @@ const Checkout = () => { event_callback: midtrans }) } + + const handlingActivateCode = async () => { + VoucherCode(codeVoucher) + } const taxTotal = (totalAmount - totalDiscountAmount) * 0.11 return ( <> - SetBottomPopup(false)} title='Gunakan Promo'> + SetBottomPopup(false)} + title='Gunakan Promo' + >

SetCodeVoucher(e.target.value)} />
-
+ {codeVoucher && activeVoucher == codeVoucher ? ( +
+ + Voucher berhasil ditambahkan{' '} + +
+ ) : ( +
+ + Kode voucher salah / sudah tidak berlaku lagi. Coba voucher lainnya, ya. + +
+ )}

Promo yang tersedia

{listVouchers?.map((item) => ( -
-
-
- {item.name} -
-
-
-
-

{item.name}

-
- {item.description} +
+ {totalAmount - totalDiscountAmount < item.minPurchaseAmount && ( +
+ )} + +
+
+
+ {item.name} +
+
+
+
+

{item.name}

+
+ {item.description} +
+
+
+
-
- +
+
+

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

+

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

-
-

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

-
-
-

- Voucher ini dapat anda gunakan untuk pengguna pertama{' '} -

-
-
- - - Berakhir dalam {item.endTime} lagi !{' '} - - Lihat Detail - - +
+

+ {totalAmount - totalDiscountAmount < item.minPurchaseAmount + ? 'Tambah ' + + currencyFormat( + item.minPurchaseAmount - (totalAmount - totalDiscountAmount) + ) + + ' untuk pakai promo ini' + : 'Voucher ini dapat anda gunakan untuk pengguna pertama'} +

+
+
+ + + Berakhir dalam {item.remainingTime}{' '} + lagi{' '} + +
@@ -462,9 +538,18 @@ const Checkout = () => { className='text-gray-900 flex items-center justify-center rounded-lg bg-white border font-medium border-gray-300 hover:bg-gray-100 py-2.5 h-[50px] w-[100%]' > % - - Hemat belanja dengan promo - + {activeVoucher ? ( +
+ + Kamu dapat potogan {discountVoucher} + + Voucher berhasil digunakan +
+ ) : ( + + Hemat belanja dengan promo + + )} {'>'}
@@ -700,12 +785,23 @@ const Checkout = () => {
-- cgit v1.2.3 From b3855694c2723168d1c7ad949d892649fff220b8 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Tue, 11 Jul 2023 17:05:43 +0700 Subject: find voucher --- src/lib/checkout/components/Checkout.jsx | 40 ++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 5 deletions(-) (limited to 'src/lib') diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index dcc00eb8..f19b6054 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -87,6 +87,8 @@ const Checkout = () => { const [activeVoucher, SetActiveVoucher] = useState(null) const [discountVoucher, SetDiscountVoucher] = useState(null) const [codeVoucher, SetCodeVoucher] = useState(null) + const [findCodeVoucher, SetFindVoucher] = useState(null) + const [selisihHargaCode, SetSelisihHargaCode] = useState(null) const voucher = async () => { let dataVoucher = await getVoucher() @@ -94,9 +96,21 @@ const Checkout = () => { } const VoucherCode = async (code) => { let dataVoucher = await findVoucher(code) - if (!dataVoucher) return + if (dataVoucher.length <= 0) { + SetFindVoucher(1) + return + } let addNewLine = dataVoucher[0] + if (totalAmount - totalDiscountAmount < addNewLine.minPurchaseAmount) { + SetSelisihHargaCode( + currencyFormat(addNewLine.minPurchaseAmount - (totalAmount - totalDiscountAmount)) + ) + SetFindVoucher(2) + return + } else { + SetFindVoucher(3) + } SetListVoucher((prevList) => [addNewLine, ...prevList]) SetActiveVoucher(addNewLine.code) } @@ -301,6 +315,14 @@ const Checkout = () => { const handlingActivateCode = async () => { VoucherCode(codeVoucher) } + + const handleUseVoucher = async (code) => { + SetActiveVoucher(code) + SetFindVoucher(null) + // document.getElementById('uniqCode').val('') + } + + console.log('ini find voucher', findCodeVoucher) const taxTotal = (totalAmount - totalDiscountAmount) * 0.11 return ( @@ -334,19 +356,27 @@ const Checkout = () => {
- {codeVoucher && activeVoucher == codeVoucher ? ( + {findCodeVoucher === 3 && activeVoucher === codeVoucher && (
Voucher berhasil ditambahkan{' '}
- ) : ( + )} + {findCodeVoucher === 1 && (
- + Kode voucher salah / sudah tidak berlaku lagi. Coba voucher lainnya, ya.
)} + {findCodeVoucher === 2 && ( +
+ + {'Tambah ' + selisihHargaCode + ' untuk pakai promo ini'} + +
+ )}
@@ -374,7 +404,7 @@ const Checkout = () => {
@@ -351,6 +361,7 @@ const Checkout = () => { className='btn-solid-red flex-1 md:flex-none rounded-md' type='button' onClick={() => handlingActivateCode()} + disabled={buttonTerapkan} > Terapkan @@ -380,7 +391,16 @@ const Checkout = () => {
-

Promo yang tersedia

+ {!listVouchers ? ( +
+
+

Tidak ada voucher tersedia

+

Maaf, saat ini tidak ada voucher yang tersedia.

+
+
+ ) : ( +

Promo yang tersedia

+ )} {listVouchers?.map((item) => (
{totalAmount - totalDiscountAmount < item.minPurchaseAmount && ( @@ -389,7 +409,7 @@ const Checkout = () => {
-
+
{item.name}
@@ -528,9 +548,15 @@ const Checkout = () => {
{currencyFormat(totalAmount)}
-
Total Diskon
+
Diskon Produk
- {currencyFormat(totalDiscountAmount)}
+ {activeVoucher && ( +
+
Diskon Voucher
+
- {currencyFormat(discountVoucher)}
+
+ )}
Subtotal
{currencyFormat(totalAmount - totalDiscountAmount)}
@@ -552,7 +578,8 @@ const Checkout = () => {
{currencyFormat( totalAmount - - totalDiscountAmount + + totalDiscountAmount - + discountVoucher + taxTotal + Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000 )} @@ -565,22 +592,33 @@ const Checkout = () => {
{/*

*) Belum termasuk biaya pengiriman

*/} @@ -778,9 +816,15 @@ const Checkout = () => {
Total Diskon
- {currencyFormat(totalDiscountAmount)}
+ {activeVoucher && ( +
+
Diskon Voucher
+
- {currencyFormat(discountVoucher)}
+
+ )}
Subtotal
-
{currencyFormat(totalAmount - totalDiscountAmount)}
+
{currencyFormat(totalAmount - totalDiscountAmount - discountVoucher)}
PPN 11%
@@ -802,7 +846,8 @@ const Checkout = () => {
{currencyFormat( totalAmount - - totalDiscountAmount + + totalDiscountAmount - + discountVoucher + taxTotal + Math.round(parseInt(biayaKirim * 1.1) / 1000) * 1000 )} @@ -815,9 +860,15 @@ const Checkout = () => {
-- cgit v1.2.3 From c2be9e77d22840eb33142ea2e694c3278613c4ef Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 12 Jul 2023 11:49:53 +0700 Subject: checkout --- src/lib/checkout/components/Checkout.jsx | 80 ++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 34 deletions(-) (limited to 'src/lib') diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 1763ae5b..6990b420 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -104,7 +104,7 @@ const Checkout = () => { let addNewLine = dataVoucher[0] let checkList = listVouchers.findIndex((voucher) => voucher.code == addNewLine.code) - if(checkList > 0) return + if (checkList > 0) return if (totalAmount - totalDiscountAmount < addNewLine.minPurchaseAmount) { SetSelisihHargaCode( currencyFormat(addNewLine.minPurchaseAmount - (totalAmount - totalDiscountAmount)) @@ -132,25 +132,34 @@ const Checkout = () => { voucher() }, []) - useEffect(() => { - if (!listVouchers) return - if (!activeVoucher) return + const hitungDiscountVoucher = (code) => { + let dataVoucherIndex = listVouchers.findIndex((voucher) => voucher.code == code) + let dataActiveVoucher = listVouchers[dataVoucherIndex] - let dataVoucherIndex = listVouchers.findIndex((voucher) => voucher.code == activeVoucher) - let dataActiveVocuher = listVouchers[dataVoucherIndex] + console.log('ini data active', dataActiveVoucher, code, dataVoucherIndex) let countDiscount = 0 - if (dataActiveVocuher.discountType === 'percentage') { + if (dataActiveVoucher.discountType === 'percentage') { countDiscount = (totalAmount - totalDiscountAmount) * 0.1 if ( - dataActiveVocuher.maxDiscountAmount > 0 && - countDiscount > dataActiveVocuher.maxDiscountAmount + dataActiveVoucher.maxDiscountAmount > 0 && + countDiscount > dataActiveVoucher.maxDiscountAmount ) { - countDiscount = dataActiveVocuher.maxDiscountAmount + countDiscount = dataActiveVoucher.maxDiscountAmount } } else { - countDiscount = dataActiveVocuher.discountAmount + countDiscount = dataActiveVoucher.discountAmount } + + return countDiscount + } + + useEffect(() => { + if (!listVouchers) return + if (!activeVoucher) return + + const countDiscount = hitungDiscountVoucher(activeVoucher) + SetDiscountVoucher(countDiscount) }, [activeVoucher, listVouchers]) @@ -417,7 +426,7 @@ const Checkout = () => {

{item.name}

- {item.description} + {item.description}
@@ -455,7 +464,8 @@ const Checkout = () => { item.minPurchaseAmount - (totalAmount - totalDiscountAmount) ) + ' untuk pakai promo ini' - : 'Voucher ini dapat anda gunakan untuk pengguna pertama'} + : 'Potensi potongan sebesar ' + + currencyFormat(hitungDiscountVoucher(item.code))}


@@ -559,7 +569,7 @@ const Checkout = () => { )}
Subtotal
-
{currencyFormat(totalAmount - totalDiscountAmount)}
+
{currencyFormat(totalAmount - totalDiscountAmount - discountVoucher)}
PPN 11%
@@ -862,27 +872,29 @@ const Checkout = () => { onClick={() => SetBottomPopup(true)} className='text-gray-900 p-3 flex items-center justify-between rounded-lg bg-white border font-medium border-gray-300 hover:bg-gray-100 py-2.5 h-[50px] w-[100%]' > - - {''} - - {activeVoucher ? ( -
-
- Hemat {currencyFormat(discountVoucher)} -
-
- Voucher berhasil digunakan -
-
- ) : ( - - Hemat belanja dengan promo +
+ + {''} - )} + {activeVoucher ? ( +
+
+ Hemat {currencyFormat(discountVoucher)} +
+
+ Voucher berhasil digunakan +
+
+ ) : ( + + Hemat belanja dengan promo + + )} +
{'>'}
-- cgit v1.2.3 From 3f890e6d482cefba37014e021cb4c2b8d5de2a9d Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 12 Jul 2023 14:31:07 +0700 Subject: cr --- src/lib/checkout/components/Checkout.jsx | 34 +++++++++++----------- .../product/components/Product/ProductDesktop.jsx | 4 +-- 2 files changed, 19 insertions(+), 19 deletions(-) (limited to 'src/lib') diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 6990b420..27cdda76 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -17,6 +17,7 @@ import { useRouter } from 'next/router' import VariantGroupCard from '@/lib/variant/components/VariantGroupCard' import axios from 'axios' import Image from '@/core/components/elements/Image/Image' +import imageNext from 'next/image' import MobileView from '@/core/components/views/MobileView' import DesktopView from '@/core/components/views/DesktopView' import ExpedisiList from '../api/ExpedisiList' @@ -136,15 +137,11 @@ const Checkout = () => { let dataVoucherIndex = listVouchers.findIndex((voucher) => voucher.code == code) let dataActiveVoucher = listVouchers[dataVoucherIndex] - console.log('ini data active', dataActiveVoucher, code, dataVoucherIndex) let countDiscount = 0 if (dataActiveVoucher.discountType === 'percentage') { - countDiscount = (totalAmount - totalDiscountAmount) * 0.1 - if ( - dataActiveVoucher.maxDiscountAmount > 0 && - countDiscount > dataActiveVoucher.maxDiscountAmount - ) { + countDiscount = (totalAmount - totalDiscountAmount) * (dataActiveVoucher.discountAmount/100) + if (dataActiveVoucher.maxDiscountAmount > 0 && countDiscount > dataActiveVoucher.maxDiscountAmount) { countDiscount = dataActiveVoucher.maxDiscountAmount } } else { @@ -331,10 +328,14 @@ const Checkout = () => { } const handleUseVoucher = async (code) => { - SetActiveVoucher(code) - SetFindVoucher(null) - document.getElementById('uniqCode').value = '' - SetButtonTerapkan(false) + if(code === activeVoucher){ + SetActiveVoucher(null) + }else{ + SetActiveVoucher(code) + SetFindVoucher(null) + document.getElementById('uniqCode').value = '' + SetButtonTerapkan(false) + } } const onChangeCodeVoucher = async (e) => { @@ -354,7 +355,7 @@ const Checkout = () => { >
-
+
{
)} -
+
{!listVouchers ? (
@@ -418,7 +419,7 @@ const Checkout = () => {
-
+
{item.name}
@@ -434,9 +435,8 @@ const Checkout = () => { className='btn-solid-red w-[102px] md:flex-none rounded-md' type='button' onClick={() => handleUseVoucher(item.code)} - disabled={activeVoucher === item.code} > - {activeVoucher === item.code ? 'Terpakai' : 'Pakai'} + {activeVoucher === item.code ? 'Batal' : 'Pakai'}
@@ -609,7 +609,7 @@ const Checkout = () => { {''} {activeVoucher ? ( @@ -823,7 +823,7 @@ const Checkout = () => {
{currencyFormat(totalAmount)}
-
Total Diskon
+
Diskon Produk
- {currencyFormat(totalDiscountAmount)}
{activeVoucher && ( diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 6a87d022..cafab721 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -66,9 +66,9 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { } const handleBuy = (variant) => { - const quantity = variantQuantityRefs.current[variant.id].value + const quantity = variantQuantityRefs.current[variant].value if (!validQuantity(quantity)) return - router.push(`/shop/checkout?productId=${variant.id}&quantity=${quantity}`) + router.push(`/shop/checkout?productId=${variant}&quantity=${quantity}`) } const variantSectionRef = useRef(null) -- cgit v1.2.3 From b886fcf2dbc9114bc2e2347e3d4bf5299ed43d3b Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Fri, 14 Jul 2023 09:26:08 +0700 Subject: toggle on off --- src/lib/checkout/components/Checkout.jsx | 62 ++++++++++++++-------- .../product/components/Product/ProductDesktop.jsx | 2 +- 2 files changed, 42 insertions(+), 22 deletions(-) (limited to 'src/lib') diff --git a/src/lib/checkout/components/Checkout.jsx b/src/lib/checkout/components/Checkout.jsx index 27cdda76..78d61770 100644 --- a/src/lib/checkout/components/Checkout.jsx +++ b/src/lib/checkout/components/Checkout.jsx @@ -105,7 +105,7 @@ const Checkout = () => { let addNewLine = dataVoucher[0] let checkList = listVouchers.findIndex((voucher) => voucher.code == addNewLine.code) - if (checkList > 0) return + if (checkList >= 0) return if (totalAmount - totalDiscountAmount < addNewLine.minPurchaseAmount) { SetSelisihHargaCode( currencyFormat(addNewLine.minPurchaseAmount - (totalAmount - totalDiscountAmount)) @@ -140,8 +140,11 @@ const Checkout = () => { let countDiscount = 0 if (dataActiveVoucher.discountType === 'percentage') { - countDiscount = (totalAmount - totalDiscountAmount) * (dataActiveVoucher.discountAmount/100) - if (dataActiveVoucher.maxDiscountAmount > 0 && countDiscount > dataActiveVoucher.maxDiscountAmount) { + countDiscount = (totalAmount - totalDiscountAmount) * (dataActiveVoucher.discountAmount / 100) + if ( + dataActiveVoucher.maxDiscountAmount > 0 && + countDiscount > dataActiveVoucher.maxDiscountAmount + ) { countDiscount = dataActiveVoucher.maxDiscountAmount } } else { @@ -327,10 +330,17 @@ const Checkout = () => { VoucherCode(codeVoucher) } - const handleUseVoucher = async (code) => { - if(code === activeVoucher){ - SetActiveVoucher(null) - }else{ + const handleUseVoucher = async (code, isCheck) => { + if (isCheck) { + if (code === activeVoucher) { + SetActiveVoucher(null) + } else { + SetActiveVoucher(code) + SetFindVoucher(null) + document.getElementById('uniqCode').value = '' + SetButtonTerapkan(false) + } + } else { SetActiveVoucher(code) SetFindVoucher(null) document.getElementById('uniqCode').value = '' @@ -343,6 +353,13 @@ const Checkout = () => { SetButtonTerapkan(false) } + const [isChecked, setIsChecked] = useState(false) + + const ToggleSwitch = (code) => { + setIsChecked(!isChecked) + handleUseVoucher(code, !isChecked) + } + const taxTotal = (totalAmount - totalDiscountAmount - discountVoucher) * 0.11 return ( @@ -409,21 +426,21 @@ const Checkout = () => {
) : ( -

Promo yang tersedia

+

Promo Khusus Untuk {auth.name}

)} {listVouchers?.map((item) => (
{totalAmount - totalDiscountAmount < item.minPurchaseAmount && ( -
+
)}
-
+
{item.name}
-
+

{item.name}

@@ -431,24 +448,27 @@ const Checkout = () => {
- +

-

+

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

-

+

{activeVoucher === item.code && ( - + Voucher digunakan{' '} )} diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index cafab721..037b8c66 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -256,7 +256,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => {

@@ -556,6 +575,8 @@ const Checkout = () => { listExpedisi={listExpedisi} setSelectedExpedisi={setSelectedExpedisi} checkWeigth={checkWeigth} + checkoutValidation={checkoutValidation} + expedisiValidation={expedisiValidation} /> { @@ -738,6 +757,8 @@ const Checkout = () => { listExpedisi={listExpedisi} setSelectedExpedisi={setSelectedExpedisi} checkWeigth={checkWeigth} + checkoutValidation={checkoutValidation} + expedisiValidation={expedisiValidation} /> { @@ -1028,13 +1042,24 @@ const SectionValidation = ({ address }) => ) -const SectionExpedisi = ({ address, listExpedisi, setSelectedExpedisi, checkWeigth }) => +const SectionExpedisi = ({ + address, + listExpedisi, + setSelectedExpedisi, + checkWeigth, + checkoutValidation, + expedisiValidation +}) => address?.rajaongkirCityId > 0 && ( -
+
Pilih Expedisi :
-
- setSelectedExpedisi(e.target.value)} + required + > {checkWeigth != true && @@ -1049,7 +1074,15 @@ const SectionExpedisi = ({ address, listExpedisi, setSelectedExpedisi, checkWeig ))} + {checkoutValidation && ( + * Silahkan pilih expedisi + )}
+
{checkWeigth == true && (

-- cgit v1.2.3