From 702f43a7190d65c2370e7019311cc26c2cc0eafd Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Tue, 6 Jun 2023 17:01:23 +0700 Subject: program promotion --- .../product/components/Product/ProductDesktop.jsx | 28 ++++++++++++++++++++++ .../product/components/Product/ProductMobile.jsx | 8 +++++++ 2 files changed, 36 insertions(+) (limited to 'src/lib/product') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 75b37b9d..c3addbb9 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 PromotionType from '@/lib/promotinProgram/components/PromotionType' const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const router = useRouter() @@ -21,6 +22,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const [lowestPrice, setLowestPrice] = useState(null) const [addCartAlert, setAddCartAlert] = useState(false) + const [promotionType, setPromotionType] = useState(false) const getLowestPrice = useCallback(() => { const prices = product.variants.map((variant) => variant.price) @@ -156,6 +158,12 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { )} +
+
Promotion Program
+
+ +
+
@@ -229,6 +237,16 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { )} +
+ +
{product.variants.length > 1 ? ( +
-
Promotion Program
-
+
@@ -237,7 +243,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { )} -
+ {/*
-
+
*/} {product.variants.length > 1 ? (
- setPromotionType(false)} - > -
- -
-
) diff --git a/src/lib/product/components/Product/ProductMobile.jsx b/src/lib/product/components/Product/ProductMobile.jsx index 5ed796ae..1c2974b0 100644 --- a/src/lib/product/components/Product/ProductMobile.jsx +++ b/src/lib/product/components/Product/ProductMobile.jsx @@ -172,11 +172,7 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => {
- {/* */} - +
@@ -328,7 +331,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { - {product.variants.map((variant) => ( + {product.variants.map((variant, index) => ( {variant.code} {variant.attributes.join(', ') || '-'} @@ -367,6 +370,27 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { /> + {index == 0 ? ( + setPromotionType(true)} + className='cursor-pointer' + > + ) : ( +
+ setPromotionType(true)} + className='cursor-pointer' + > +
+ )}
- + setPromotionType(false)} + > +
+ +
+
{
-
- -
+
+ +
+
Jumlah
-- cgit v1.2.3 From 62c6c84dfae2564e92e2b3228c67d2fb12f5c3e5 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Thu, 22 Jun 2023 15:08:05 +0700 Subject: get promotion progrm --- src/lib/product/components/Product/ProductDesktop.jsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/lib/product') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index d9c95327..c1243a50 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -17,6 +17,7 @@ import productSimilarApi from '../../api/productSimilarApi' import whatsappUrl from '@/core/utils/whatsappUrl' import PromotionType from '@/lib/promotinProgram/components/PromotionType' import useAuth from '@/core/hooks/useAuth' +import odooApi from '@/core/api/odooApi' const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const router = useRouter() @@ -36,6 +37,13 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { return lowest }, [product]) + useEffect(() => { + if(product.variants.length > 1){ + const listProgram = getPromotionProgram(product.variants[0].id) + console.log('promotion list', listProgram) + } + },[product]) + useEffect(() => { const lowest = getLowestPrice() setLowestPrice(lowest) @@ -486,4 +494,9 @@ const TabContent = ({ children, active, className = '', ...props }) => (
) +const getPromotionProgram = async ({id}) => { + const listProgram = await odooApi('GET', `/api/v1/product_variant/${id}/promotions`) + + return listProgram +} export default ProductDesktop -- cgit v1.2.3 From 592bb7f73a93f07db26efb985518505e0958c5f0 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Thu, 22 Jun 2023 15:34:40 +0700 Subject: get program list --- src/lib/product/components/Product/ProductDesktop.jsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/lib/product') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index c1243a50..9fa5412d 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -28,6 +28,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const [addCartAlert, setAddCartAlert] = useState(false) const [promotionType, setPromotionType] = useState(false) + const [promotionList, setPromotionList] = useState(null) const getLowestPrice = useCallback(() => { const prices = product.variants.map((variant) => variant.price) @@ -38,11 +39,15 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { }, [product]) useEffect(() => { - if(product.variants.length > 1){ - const listProgram = getPromotionProgram(product.variants[0].id) - console.log('promotion list', listProgram) + if(product.variants.length == 1){ + const id = product.variants[0].id + const listProgram = async () => { + const programs = await getPromotionProgram({id}) + setPromotionList(programs) + } + listProgram() } - },[product]) + },[]) useEffect(() => { const lowest = getLowestPrice() -- cgit v1.2.3 From 88be517479704ee6b40334e0cabcfc86b824419b Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Fri, 23 Jun 2023 09:00:49 +0700 Subject: log --- src/lib/product/components/Product/ProductDesktop.jsx | 1 + 1 file changed, 1 insertion(+) (limited to 'src/lib/product') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 9fa5412d..25b12911 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -44,6 +44,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const listProgram = async () => { const programs = await getPromotionProgram({id}) setPromotionList(programs) + console.log('list program', promotionList) } listProgram() } -- cgit v1.2.3 From 84ae09f61f05f212ec098da1fd4ed14960119527 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Tue, 27 Jun 2023 09:07:22 +0700 Subject: promotion detail --- .../product/components/Product/ProductDesktop.jsx | 48 ++++++++-------------- 1 file changed, 16 insertions(+), 32 deletions(-) (limited to 'src/lib/product') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 25b12911..507d676c 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -28,7 +28,8 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const [addCartAlert, setAddCartAlert] = useState(false) const [promotionType, setPromotionType] = useState(false) - const [promotionList, setPromotionList] = useState(null) + const [promotionActiveId, setPromotionActiveId] = useState(null) + const [quantity, setQuantity] = useState(null) const getLowestPrice = useCallback(() => { const prices = product.variants.map((variant) => variant.price) @@ -38,18 +39,6 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { return lowest }, [product]) - useEffect(() => { - if(product.variants.length == 1){ - const id = product.variants[0].id - const listProgram = async () => { - const programs = await getPromotionProgram({id}) - setPromotionList(programs) - console.log('list program', promotionList) - } - listProgram() - } - },[]) - useEffect(() => { const lowest = getLowestPrice() setLowestPrice(lowest) @@ -60,6 +49,9 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const variantQuantityRefs = useRef([]) const setVariantQuantityRef = (variantId) => (element) => { + if (element) { + setQuantity(element.value) + } variantQuantityRefs.current[variantId] = element } @@ -82,6 +74,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { updateItemCart({ productId: variantId, quantity, + programLineId:promotionActiveId, selected: true }) setAddCartAlert(true) @@ -183,7 +176,12 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { {product.variants.length <= 1 && (
- +
)} @@ -260,16 +258,6 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { )} - {/*
- -
*/} {product.variants.length > 1 ? (
- setPromotionType(false)} >
- +
-
+ */} (
) -const getPromotionProgram = async ({id}) => { - const listProgram = await odooApi('GET', `/api/v1/product_variant/${id}/promotions`) - - return listProgram -} export default ProductDesktop -- cgit v1.2.3 From 927022b91855dba6d64365b68b4d20551256e7db Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Tue, 27 Jun 2023 16:47:16 +0700 Subject: product detail mobile & cart --- src/lib/product/components/Product/ProductDesktop.jsx | 4 ++-- src/lib/product/components/Product/ProductMobile.jsx | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/lib/product') diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index 507d676c..d15e84d1 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -423,7 +423,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { - {/* {
-
*/} +
{ const [informationTab, setInformationTab] = useState(informationTabOptions[0].value) const [addCartAlert, setAddCartAlert] = useState(false) + const [promotionType, setPromotionType] = useState(false) + const [promotionActiveId, setPromotionActiveId] = useState(null) + const getLowestPrice = () => { const prices = product.variants.map((variant) => variant.price) const lowest = prices.reduce((lowest, price) => { @@ -89,6 +92,7 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => { updateItemCart({ productId: activeVariant.id, quantity, + programLineId: promotionActiveId, selected: true }) setAddCartAlert(true) @@ -187,7 +191,12 @@ const ProductMobile = ({ product, wishlist, toggleWishlist }) => { />
- +
Jumlah
-- cgit v1.2.3 From cb69cf4e6633bb9192cd7bdc0a0063541f67102f Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 5 Jul 2023 17:01:24 +0700 Subject: promotion program cart dan variant --- src/lib/product/components/Product/Product.jsx | 2 +- .../product/components/Product/ProductDesktop.jsx | 73 +++++++++++++++++----- 2 files changed, 57 insertions(+), 18 deletions(-) (limited to 'src/lib/product') diff --git a/src/lib/product/components/Product/Product.jsx b/src/lib/product/components/Product/Product.jsx index 9521cbe4..9649fd21 100644 --- a/src/lib/product/components/Product/Product.jsx +++ b/src/lib/product/components/Product/Product.jsx @@ -29,7 +29,7 @@ const Product = ({ product }) => { return ( <> - + ) } diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index d15e84d1..946529ce 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -19,17 +19,19 @@ import PromotionType from '@/lib/promotinProgram/components/PromotionType' import useAuth from '@/core/hooks/useAuth' import odooApi from '@/core/api/odooApi' -const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { +const ProductDesktop = ({ products, wishlist, toggleWishlist }) => { const router = useRouter() const auth = useAuth() const { slug } = router.query + const [quantityActive, setQuantity] = useState(null) const [lowestPrice, setLowestPrice] = useState(null) + const [product, setProducts] = useState(products) const [addCartAlert, setAddCartAlert] = useState(false) const [promotionType, setPromotionType] = useState(false) const [promotionActiveId, setPromotionActiveId] = useState(null) - const [quantity, setQuantity] = useState(null) + const [selectVariantPromoActive, setSelectVariantPromoActive] = useState(null) const getLowestPrice = useCallback(() => { const prices = product.variants.map((variant) => variant.price) @@ -50,11 +52,13 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const setVariantQuantityRef = (variantId) => (element) => { if (element) { - setQuantity(element.value) + let variantIndex = product.variants.findIndex((varian) => varian.id == variantId) + product.variants[variantIndex].quantity = element.value } variantQuantityRefs.current[variantId] = element } + const validQuantity = (quantity) => { let isValid = true if (!quantity || quantity < 1 || isNaN(parseInt(quantity))) { @@ -70,13 +74,25 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { return } const quantity = variantQuantityRefs.current[variantId].value + if (!validQuantity(quantity)) return - updateItemCart({ - productId: variantId, - quantity, - programLineId:promotionActiveId, - selected: true - }) + if(product.variants.length > 1){ + let variantIndex = product.variants.findIndex((varian) => varian.id == variantId) + updateItemCart({ + productId: variantId, + quantity, + programLineId: product.variants[variantIndex].programActive, + selected: true + }) + }{ + updateItemCart({ + productId: variantId, + quantity, + programLineId: promotionActiveId, + selected: true + }) + } + setAddCartAlert(true) } @@ -97,6 +113,11 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { } } + const handlePromoClick = (variantId) => { + setSelectVariantPromoActive(variantId) + setPromotionType(true) + } + const productSimilarQuery = [ product?.name, `fq=-product_id_i:${product.id}`, @@ -180,7 +201,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { variantId={product.variants[0].id} setPromotionActiveId={setPromotionActiveId} promotionActiveId={promotionActiveId} - quantity={quantity} + quantity={quantityActive} > @@ -369,30 +390,40 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { type='number' className='form-input w-16 py-2 text-center bg-gray_r-1' ref={setVariantQuantityRef(variant.id)} + onChange={setVariantQuantityRef(variant.id)} defaultValue={1} /> - {index == 0 ? ( + {variant.programActive ? ( setPromotionType(true)} + onClick={() => handlePromoClick(variant.id)} className='cursor-pointer' > ) : ( -
+ variant.hasProgram ? (
+ handlePromoClick(variant.id)} + className='cursor-pointer' + > +
):(
setPromotionType(true)} className='cursor-pointer' > -
+
) + )}