From eb4ae7be05ed97bd02b7f3e9cc56393f435188e2 Mon Sep 17 00:00:00 2001 From: "HATEC\\SPVDEV001" Date: Wed, 14 Jun 2023 13:22:20 +0700 Subject: layout promotion program di detail product dan layout modal popup --- .../components/elements/CountDown/CountDown2.jsx | 51 +++++ src/lib/cart/components/Cart.jsx | 6 + .../product/components/Product/ProductDesktop.jsx | 24 +- .../product/components/Product/ProductMobile.jsx | 6 +- src/lib/product/components/ProductCard.jsx | 2 +- src/lib/promotinProgram/api/homepageApi.js | 11 + src/lib/promotinProgram/components/HomePage.jsx | 152 +++++++----- .../promotinProgram/components/PromotionType.jsx | 254 +++++++++++++++------ src/pages/shop/cart.jsx | 23 +- src/styles/globals.css | 2 +- 10 files changed, 384 insertions(+), 147 deletions(-) create mode 100644 src/core/components/elements/CountDown/CountDown2.jsx create mode 100644 src/lib/promotinProgram/api/homepageApi.js (limited to 'src') diff --git a/src/core/components/elements/CountDown/CountDown2.jsx b/src/core/components/elements/CountDown/CountDown2.jsx new file mode 100644 index 00000000..61503d17 --- /dev/null +++ b/src/core/components/elements/CountDown/CountDown2.jsx @@ -0,0 +1,51 @@ +import { useEffect, useState } from 'react' + +const CountDown2 = ({ initialTime }) => { + const hours = Math.floor(initialTime / 3600) + const minutes = Math.floor((initialTime % 3600) / 60) + const seconds = initialTime % 60 + + const [timeLeft, setTimeLeft] = useState({ + hour: hours, + minute: minutes, + second: seconds + }) + + useEffect(() => { + const timer = setInterval(() => { + const totalSeconds = timeLeft.hour * 3600 + timeLeft.minute * 60 + timeLeft.second + const secondsLeft = totalSeconds - 1 + if (secondsLeft < 0) { + clearInterval(timer) + } else { + const hours = Math.floor(secondsLeft / 3600) + const minutes = Math.floor((secondsLeft % 3600) / 60) + const seconds = secondsLeft % 60 + setTimeLeft({ hour: hours, minute: minutes, second: seconds }) + } + }, 1000) + return () => clearInterval(timer) + }, [timeLeft]) + + return ( +
+
+ + {timeLeft.hour.toString().padStart(2, '0')} + +
+
+ + {timeLeft.minute.toString().padStart(2, '0')} + +
+
+ + {timeLeft.second.toString().padStart(2, '0')} + +
+
+ ) +} + +export default CountDown2 diff --git a/src/lib/cart/components/Cart.jsx b/src/lib/cart/components/Cart.jsx index 907d1267..718541af 100644 --- a/src/lib/cart/components/Cart.jsx +++ b/src/lib/cart/components/Cart.jsx @@ -17,10 +17,16 @@ import DesktopView from '@/core/components/views/DesktopView' import ProductCard from '@/lib/product/components/ProductCard' import productSearchApi from '@/lib/product/api/productSearchApi' import whatsappUrl from '@/core/utils/whatsappUrl' +import useAuth from '@/core/hooks/useAuth' const Cart = () => { const router = useRouter() const [products, setProducts] = useState(null) + const auth = useAuth() + + useEffect(() => { + if (!auth) return + }, [auth]) const { cart } = useCart({ enabled: !products }) const [totalPriceBeforeTax, setTotalPriceBeforeTax] = useState(0) diff --git a/src/lib/product/components/Product/ProductDesktop.jsx b/src/lib/product/components/Product/ProductDesktop.jsx index c3addbb9..f1a001a6 100644 --- a/src/lib/product/components/Product/ProductDesktop.jsx +++ b/src/lib/product/components/Product/ProductDesktop.jsx @@ -15,9 +15,12 @@ import ProductCard from '../ProductCard' import productSimilarApi from '../../api/productSimilarApi' import whatsappUrl from '@/core/utils/whatsappUrl' import PromotionType from '@/lib/promotinProgram/components/PromotionType' +import useAuth from '@/core/hooks/useAuth' const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { const router = useRouter() + const auth = useAuth() + const { slug } = router.query const [lowestPrice, setLowestPrice] = useState(null) @@ -55,6 +58,10 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => { } const handleAddToCart = (variantId) => { + if(!auth) { + router.push(`/login?next=/shop/product/${slug}`) + return + } const quantity = variantQuantityRefs.current[variantId].value if (!validQuantity(quantity)) return updateItemCart({ @@ -159,8 +166,7 @@ const ProductDesktop = ({ product, wishlist, toggleWishlist }) => {
-
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 }) => {
- {/* */} - +