diff --git a/src/app/product/components/Cart.tsx b/src/app/product/components/Cart.tsx
index 209925a..97b98a7 100644
--- a/src/app/product/components/Cart.tsx
+++ b/src/app/product/components/Cart.tsx
@@ -4,16 +4,20 @@ import { useSharedStore } from '@/share/store/sharedStore'
import OnlineCart from './OnlineCart'
import OfflineCart from './OfflineCart'
-const Cart = () => {
+interface CartProps {
+ stock: number
+}
+
+const Cart = ({ stock }: CartProps) => {
const { variantId } = useProductStore()
const { isLogin } = useSharedStore()
return (
{isLogin ? (
-
+
) : (
-
+
)}
)
diff --git a/src/app/product/components/OfflineCart.tsx b/src/app/product/components/OfflineCart.tsx
index 52c3d37..5c078b0 100644
--- a/src/app/product/components/OfflineCart.tsx
+++ b/src/app/product/components/OfflineCart.tsx
@@ -8,9 +8,10 @@ import { useLocalCart } from '../hooks/useLocalCart'
interface OfflineCartProps {
variantId: string
+ stock: number
}
-const OfflineCart: React.FC
= ({ variantId }) => {
+const OfflineCart: React.FC = ({ variantId, stock }) => {
const { id } = useParams()
// Local cart hooks for non-logged in users
@@ -24,7 +25,11 @@ const OfflineCart: React.FC = ({ variantId }) => {
const [isInCart, setIsInCart] = useState(false)
const [quantity, setQuantity] = useState(1)
+ const isOutOfStock = stock <= 0
+
const handleAddToCart = () => {
+ if (isOutOfStock) return
+
addToLocalCart(Number(id), variantId, 1)
setIsInCart(true)
setQuantity(1)
@@ -48,8 +53,9 @@ const OfflineCart: React.FC = ({ variantId }) => {
return
}
- setQuantity(number)
- updateLocalCartItem(Number(id), variantId, number)
+ const clampedQuantity = Math.min(number, stock)
+ setQuantity(clampedQuantity)
+ updateLocalCartItem(Number(id), variantId, clampedQuantity)
}
const handleEmptyCart = () => {
@@ -59,21 +65,30 @@ const OfflineCart: React.FC = ({ variantId }) => {
setQuantity(0)
}
+ if (isOutOfStock) {
+ return (
+
+ )
+ }
+
return (
{
!isInCart ?
-