1- import React , { useState } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import { useParams } from 'react-router-dom' ;
33import { useResolve , useProductImages } from './hooks' ;
44import { loadProductBySlug } from './service' ;
@@ -7,6 +7,7 @@ import { SocialShare } from './SocialShare';
77import { useTranslation , useCurrency } from './app-state' ;
88import { isProductAvailable } from './helper' ;
99import { Availability } from './Availability' ;
10+ import { VariationsSelector } from './VariationsSelector' ;
1011
1112import './Product.scss' ;
1213
@@ -25,6 +26,11 @@ export const Product: React.FC = () => {
2526 async ( ) => loadProductBySlug ( productSlug , selectedLanguage , selectedCurrency ) ,
2627 [ productSlug , selectedLanguage , selectedCurrency ]
2728 ) ;
29+ const [ productId , setProductId ] = useState ( '' ) ;
30+
31+ useEffect ( ( ) => {
32+ product && setProductId ( product . id ) ;
33+ } , [ product ] )
2834
2935 const productImageHrefs = useProductImages ( product ) ;
3036 const [ currentImageIndex , setCurrentImageIndex ] = useState ( 0 ) ;
@@ -40,6 +46,10 @@ export const Product: React.FC = () => {
4046 setCurrentImageIndex ( currentImageIndex + 1 ) ;
4147 } ;
4248
49+ function handleVariationChange ( childID : string ) {
50+ setProductId ( childID ) ;
51+ }
52+
4353 return (
4454 < div className = "product" >
4555 { product ? (
@@ -72,11 +82,20 @@ export const Product: React.FC = () => {
7282 < div className = "product__comparecheck" >
7383 < CompareCheck product = { product } />
7484 </ div >
85+ {
86+ product . meta . variations
87+ ? < VariationsSelector product = { product } onChange = { handleVariationChange } />
88+ : ''
89+ }
7590 < div className = "product__moltinbtncontainer" >
76- < span
77- className = "moltin-buy-button"
78- data-moltin-product-id = { product . id }
79- > </ span >
91+ {
92+ productId &&
93+ < span
94+ className = "moltin-buy-button"
95+ data-moltin-product-id = { productId }
96+ key = { productId }
97+ > </ span >
98+ }
8099 </ div >
81100 < div className = "product__description" >
82101 { product . description }
0 commit comments