@@ -12,6 +12,7 @@ import { SellerProps } from "@/types/seller"
1212import { WishlistButton } from "../WishlistButton/WishlistButton"
1313import { Wishlist } from "@/types/wishlist"
1414import { toast } from "@/lib/helpers/toast"
15+ import { useCartContext } from "@/components/providers"
1516
1617const optionsAsKeymap = (
1718 variantOptions : HttpTypes . StoreProductVariant [ "options" ]
@@ -40,6 +41,7 @@ export const ProductDetailsHeader = ({
4041 user : HttpTypes . StoreCustomer | null
4142 wishlist ?: Wishlist [ ]
4243} ) => {
44+ const { onAddToCart, cart } = useCartContext ( )
4345 const [ isAdding , setIsAdding ] = useState ( false )
4446 const { allSearchParams } = useGetAllSearchParams ( )
4547
@@ -74,13 +76,42 @@ export const ProductDetailsHeader = ({
7476 variantId,
7577 } )
7678
79+ const variantStock =
80+ product . variants ?. find ( ( { id } ) => id === variantId ) ?. inventory_quantity ||
81+ 0
82+
83+ const variantHasPrice = ! ! product . variants ?. find ( ( { id } ) => id === variantId )
84+ ?. calculated_price
85+
86+ const isVariantStockMaxLimitReached =
87+ ( cart ?. items ?. find ( ( item ) => item . variant_id === variantId ) ?. quantity ??
88+ 0 ) >= variantStock
89+
7790 // add the selected variant to the cart
7891 const handleAddToCart = async ( ) => {
7992 if ( ! variantId || ! hasAnyPrice ) return null
8093
8194 setIsAdding ( true )
8295
96+ const subtotal = + ( variantPrice ?. calculated_price_without_tax_number || 0 )
97+ const total = + ( variantPrice ?. calculated_price_number || 0 )
98+
99+ const storeCartLineItem = {
100+ thumbnail : product . thumbnail || "" ,
101+ product_title : product . title ,
102+ quantity : 1 ,
103+ subtotal,
104+ total,
105+ tax_total : total - subtotal ,
106+ variant_id : variantId ,
107+ product_id : product . id ,
108+ variant : product . variants ?. find ( ( { id } ) => id === variantId ) ,
109+ }
110+
83111 try {
112+ if ( ! isVariantStockMaxLimitReached ) {
113+ onAddToCart ( storeCartLineItem , variantPrice ?. currency_code || "eur" )
114+ }
84115 await addToCart ( {
85116 variantId : variantId ,
86117 quantity : 1 ,
@@ -96,15 +127,6 @@ export const ProductDetailsHeader = ({
96127 }
97128 }
98129
99- const variantStock =
100- product . variants ?. find ( ( { id } ) => id === variantId ) ?. inventory_quantity ||
101- 0
102-
103- const variantHasPrice = product . variants ?. find ( ( { id } ) => id === variantId )
104- ?. calculated_price
105- ? true
106- : false
107-
108130 return (
109131 < div className = "border rounded-sm p-5" >
110132 < div className = "flex justify-between" >
@@ -149,7 +171,7 @@ export const ProductDetailsHeader = ({
149171 { /* Add to Cart */ }
150172 < Button
151173 onClick = { handleAddToCart }
152- disabled = { isAdding || ! variantStock || ! variantHasPrice || ! hasAnyPrice }
174+ disabled = { ! variantStock || ! variantHasPrice || ! hasAnyPrice }
153175 loading = { isAdding }
154176 className = "w-full uppercase mb-4 py-3 flex justify-center"
155177 size = "large"
0 commit comments