Skip to content

Commit 401d4a0

Browse files
committed
Add disable product recs to react
1 parent 7911d26 commit 401d4a0

5 files changed

Lines changed: 67 additions & 143 deletions

File tree

.eslintrc.js

Lines changed: 0 additions & 100 deletions
This file was deleted.

.prettierrc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"printWidth": 120,
3+
"proseWrap": "preserve",
4+
"semi": false,
5+
"singleQuote": true,
6+
"useTabs": false,
7+
"tabWidth": 2,
8+
"arrowParens": "avoid",
9+
"trailingComma": "es5"
10+
}

.vscode/settings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"editor.formatOnPaste": false,
3+
"editor.formatOnType": false,
4+
"editor.formatOnSave": true,
5+
"editor.formatOnSaveMode": "file",
6+
"editor.defaultFormatter": "esbenp.prettier-vscode",
7+
"files.autoSave": "onFocusChange"
8+
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"jest": "27.5.1",
3939
"prettier": "2.5.1",
4040
"react": "17.0.2",
41+
"react-dom": "17.0.2",
4142
"ts-jest": "27.1.3",
4243
"typescript": "4.6.2"
4344
}

src/faslet-widget.tsx

Lines changed: 48 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
1-
import React, { useEffect } from 'react';
1+
import React, { useEffect } from 'react'
22

33
export interface Color {
4-
id: string;
5-
name: string;
4+
id: string
5+
name: string
66
}
77

88
export 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

1818
export 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

3634
export 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

Comments
 (0)