1- import React , { useEffect } from 'react' ;
1+ import React , { useEffect } from 'react'
22
33export interface Color {
4- id : string ;
5- name : string ;
4+ id : string
5+ name : string
66}
77
88export interface Variant {
9- variantId : string ;
10- sizeLabel : string ;
11- inStock : boolean ;
12- sku : string ;
13- colorId : string ;
14- price ?: number ;
15- imageUrl ?: string ;
9+ variantId : string
10+ sizeLabel : string
11+ inStock : boolean
12+ sku : string
13+ colorId : string
14+ price ?: number
15+ imageUrl ?: string
1616}
1717
1818export interface FasletWidgetProps {
19- shopId : string ;
20- brandId : string ;
21- productId : string ;
22- productName : string ;
23- productImageUrl : string ;
24- fasletTag ?: string ;
25- locale ?: string ;
26- variants : Variant [ ] ;
27- colors ?: Color [ ] ;
28- shopPageUrl ?: string ;
29- onAddToCart ?: ( id : string ) => Promise < unknown > ;
30- onResult ?: (
31- { label : string } ,
32- resultType : 'auto' | 'result-screen'
33- ) => unknown;
19+ shopId : string
20+ brandId : string
21+ productId : string
22+ productName : string
23+ productImageUrl : string
24+ fasletTag ?: string
25+ locale ?: string
26+ disableProductRecommendations ?: boolean
27+ variants : Variant [ ]
28+ colors ?: Color [ ]
29+ shopPageUrl ?: string
30+ onAddToCart ?: ( id : string ) => Promise < unknown >
31+ onResult ?: ( { label } : { label : string } , resultType : 'auto' | 'result-screen' ) => unknown
3432}
3533
3634export function FasletWidget ( {
@@ -41,51 +39,57 @@ export function FasletWidget({
4139 productName,
4240 productImageUrl,
4341 locale,
42+ disableProductRecommendations,
4443 variants,
4544 colors,
4645 onAddToCart,
4746 shopPageUrl,
48- onResult
47+ onResult,
4948} : FasletWidgetProps ) {
5049 // Add script tag to head
5150 useEffect ( ( ) => {
52- const existing = document . querySelector ( 'script#faslet-script-tag' ) ;
51+ const existing = document . querySelector ( 'script#faslet-script-tag' )
5352 // Don't add twice
5453 if ( existing ) {
55- return ;
54+ return
5655 }
57- const root =
58- document . getElementsByTagName ( 'script' ) [ 0 ] ?? document . head . lastChild ;
56+ const root = document . getElementsByTagName ( 'script' ) [ 0 ] ?? document . head . lastChild
5957
60- const faslet = document . createElement ( 'script' ) ;
61- faslet . type = 'text/javascript' ;
62- faslet . id = 'faslet-script-tag' ;
63- faslet . src = 'https://widget.prod.faslet.net/faslet-app.min.js' ;
64- faslet . defer = true ;
58+ const faslet = document . createElement ( 'script' )
59+ faslet . type = 'text/javascript'
60+ faslet . id = 'faslet-script-tag'
61+ faslet . src = 'https://widget.prod.faslet.net/faslet-app.min.js'
62+ faslet . defer = true
6563 if ( root ) {
66- root . parentNode . insertBefore ( faslet , root ) ;
64+ root . parentNode . insertBefore ( faslet , root )
6765 } else {
68- document . head . appendChild ( faslet ) ;
66+ document . head . appendChild ( faslet )
6967 }
70- } , [ ] ) ;
68+ } , [ ] )
7169
7270 window . _faslet = {
7371 ...window . _faslet ,
7472 id : productId ,
75- variants : variants . map ( ( variant ) => ( {
73+ variants : variants . map ( variant => ( {
7674 size : variant . sizeLabel ,
7775 sku : variant . sku ,
7876 id : variant . variantId ,
7977 available : variant . inStock ,
8078 color : variant . colorId ,
8179 price : variant . price ,
82- imageUrl : variant . imageUrl
80+ imageUrl : variant . imageUrl ,
8381 } ) ) ,
8482 colors,
8583 shopUrl : shopPageUrl ,
8684 addToCart : onAddToCart ,
87- onResult
88- } ;
85+ onResult,
86+ }
87+
88+ const extraAttributes : Record < string , any > = { }
89+
90+ if ( disableProductRecommendations ) {
91+ extraAttributes [ 'disable-product-recommendations' ] = true
92+ }
8993
9094 return (
9195 < faslet-app
@@ -96,6 +100,7 @@ export function FasletWidget({
96100 brand = { brandId }
97101 product-img = { productImageUrl }
98102 locale = { locale }
103+ { ...extraAttributes }
99104 />
100- ) ;
105+ )
101106}
0 commit comments