@gem-sdk/pages 1.5.7 → 1.5.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/ErrorBoundary.js +32 -24
- package/dist/cjs/components/ErrorFallback.js +19 -2
- package/dist/cjs/components/FacebookPixel.js +25 -20
- package/dist/cjs/components/Footer.js +462 -0
- package/dist/cjs/components/GoogleAnalytic.js +49 -23
- package/dist/cjs/components/Header.js +211 -0
- package/dist/cjs/components/TikTokPixel.js +9 -6
- package/dist/cjs/components/builder/Toolbox.js +215 -188
- package/dist/cjs/layouts/main.js +19 -5
- package/dist/cjs/libs/api/get-builder-props.js +26 -24
- package/dist/cjs/libs/api/get-collection-props.js +59 -55
- package/dist/cjs/libs/api/get-home-page-props-v2.js +121 -114
- package/dist/cjs/libs/api/get-home-page-props.js +133 -123
- package/dist/cjs/libs/api/get-preview-props.js +10 -10
- package/dist/cjs/libs/api/get-product-props.js +64 -62
- package/dist/cjs/libs/api/get-static-page-props-preview.js +128 -121
- package/dist/cjs/libs/api/get-static-page-props-v2.js +126 -119
- package/dist/cjs/libs/api/get-static-page-props.js +130 -120
- package/dist/cjs/libs/fetcher.js +59 -63
- package/dist/cjs/libs/get-layout.js +5 -2
- package/dist/cjs/libs/get-storefront-api.js +7 -7
- package/dist/cjs/libs/getStaticPaths.js +5 -5
- package/dist/cjs/libs/google-fonts.js +54 -61
- package/dist/cjs/libs/helpers/gen-css.js +103 -94
- package/dist/cjs/libs/helpers/generate-manifres.js +1 -1
- package/dist/cjs/libs/helpers/get-fallback.js +24 -22
- package/dist/cjs/libs/helpers/normalize.js +82 -80
- package/dist/cjs/libs/helpers/parse-json.js +10 -12
- package/dist/cjs/libs/helpers/user-agent.js +2 -2
- package/dist/cjs/libs/hooks/use-tracking-view.js +36 -31
- package/dist/cjs/libs/parse-html.js +33 -26
- package/dist/cjs/pages/404.js +34 -2
- package/dist/cjs/pages/500.js +63 -8
- package/dist/cjs/pages/builder.js +69 -14
- package/dist/cjs/pages/collection-detail.js +48 -7
- package/dist/cjs/pages/preview.js +18 -12
- package/dist/cjs/pages/product-detail.js +53 -7
- package/dist/cjs/pages/static-v2.js +62 -7
- package/dist/cjs/pages/static.js +60 -6
- package/dist/esm/components/ErrorBoundary.js +32 -24
- package/dist/esm/components/ErrorFallback.js +19 -2
- package/dist/esm/components/FacebookPixel.js +25 -20
- package/dist/esm/components/Footer.js +458 -0
- package/dist/esm/components/GoogleAnalytic.js +49 -23
- package/dist/esm/components/Header.js +207 -0
- package/dist/esm/components/TikTokPixel.js +9 -6
- package/dist/esm/components/builder/Toolbox.js +217 -190
- package/dist/esm/layouts/main.js +19 -5
- package/dist/esm/libs/api/get-builder-props.js +26 -24
- package/dist/esm/libs/api/get-collection-props.js +59 -55
- package/dist/esm/libs/api/get-home-page-props-v2.js +121 -114
- package/dist/esm/libs/api/get-home-page-props.js +133 -123
- package/dist/esm/libs/api/get-preview-props.js +10 -10
- package/dist/esm/libs/api/get-product-props.js +64 -62
- package/dist/esm/libs/api/get-static-page-props-preview.js +128 -121
- package/dist/esm/libs/api/get-static-page-props-v2.js +126 -119
- package/dist/esm/libs/api/get-static-page-props.js +130 -120
- package/dist/esm/libs/fetcher.js +59 -63
- package/dist/esm/libs/get-layout.js +5 -2
- package/dist/esm/libs/get-storefront-api.js +7 -7
- package/dist/esm/libs/getStaticPaths.js +5 -5
- package/dist/esm/libs/google-fonts.js +54 -61
- package/dist/esm/libs/helpers/gen-css.js +103 -94
- package/dist/esm/libs/helpers/generate-manifres.js +1 -1
- package/dist/esm/libs/helpers/get-fallback.js +24 -22
- package/dist/esm/libs/helpers/normalize.js +82 -80
- package/dist/esm/libs/helpers/parse-json.js +10 -12
- package/dist/esm/libs/helpers/user-agent.js +2 -2
- package/dist/esm/libs/hooks/use-tracking-view.js +36 -31
- package/dist/esm/libs/parse-html.js +33 -26
- package/dist/esm/pages/404.js +34 -2
- package/dist/esm/pages/500.js +63 -8
- package/dist/esm/pages/builder.js +69 -14
- package/dist/esm/pages/collection-detail.js +48 -7
- package/dist/esm/pages/preview.js +18 -12
- package/dist/esm/pages/product-detail.js +53 -7
- package/dist/esm/pages/static-v2.js +62 -7
- package/dist/esm/pages/static.js +60 -6
- package/package.json +3 -3
|
@@ -3,18 +3,24 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var dynamic = require('next/dynamic');
|
|
5
5
|
|
|
6
|
-
const StaticPage = dynamic(()
|
|
7
|
-
const ProductPage = dynamic(()
|
|
8
|
-
const CollectionPage = dynamic(()
|
|
9
|
-
const PreviewPage = ({ pageType, ...props })
|
|
10
|
-
switch
|
|
11
|
-
case 'PRODUCT':
|
|
12
|
-
return jsxRuntime.jsx(ProductPage, {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return jsxRuntime.jsx(
|
|
17
|
-
|
|
6
|
+
const StaticPage = dynamic(()=>Promise.resolve().then(function () { return require('./static.js'); }));
|
|
7
|
+
const ProductPage = dynamic(()=>Promise.resolve().then(function () { return require('./product-detail.js'); }));
|
|
8
|
+
const CollectionPage = dynamic(()=>Promise.resolve().then(function () { return require('./collection-detail.js'); }));
|
|
9
|
+
const PreviewPage = ({ pageType , ...props })=>{
|
|
10
|
+
switch(pageType){
|
|
11
|
+
case 'PRODUCT':
|
|
12
|
+
return /*#__PURE__*/ jsxRuntime.jsx(ProductPage, {
|
|
13
|
+
...props
|
|
14
|
+
});
|
|
15
|
+
case 'COLLECTION':
|
|
16
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CollectionPage, {
|
|
17
|
+
...props
|
|
18
|
+
});
|
|
19
|
+
default:
|
|
20
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StaticPage, {
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
}
|
|
18
24
|
};
|
|
19
25
|
|
|
20
26
|
exports.PreviewPage = PreviewPage;
|
|
@@ -9,13 +9,59 @@ var dynamic = require('next/dynamic');
|
|
|
9
9
|
var Head = require('next/head');
|
|
10
10
|
var router = require('next/router');
|
|
11
11
|
|
|
12
|
-
const ProductProvider = dynamic(()
|
|
13
|
-
const ProductDetailPage = ({ themeStyle, fontStyle, seo, product, components, builderData, sectionData
|
|
14
|
-
const router$1 = router.useRouter();
|
|
15
|
-
if (router$1.isFallback) {
|
|
16
|
-
return jsxRuntime.jsx("div", {
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
const ProductProvider = dynamic(()=>import('@gem-sdk/core').then((m)=>m.ProductProvider));
|
|
13
|
+
const ProductDetailPage = ({ themeStyle , fontStyle , seo , product , components , builderData , sectionData })=>{
|
|
14
|
+
const router$1 = router.useRouter();
|
|
15
|
+
if (router$1.isFallback) {
|
|
16
|
+
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
17
|
+
children: "Loading..."
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
21
|
+
children: [
|
|
22
|
+
/*#__PURE__*/ jsxRuntime.jsx(nextSeo.NextSeo, {
|
|
23
|
+
...seo
|
|
24
|
+
}),
|
|
25
|
+
/*#__PURE__*/ jsxRuntime.jsxs(Head, {
|
|
26
|
+
children: [
|
|
27
|
+
themeStyle && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
28
|
+
"data-id": "global-style",
|
|
29
|
+
type: "text/css",
|
|
30
|
+
dangerouslySetInnerHTML: {
|
|
31
|
+
__html: themeStyle
|
|
32
|
+
}
|
|
33
|
+
}),
|
|
34
|
+
fontStyle && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
35
|
+
"data-id": "google-fonts",
|
|
36
|
+
type: "text/css",
|
|
37
|
+
dangerouslySetInnerHTML: {
|
|
38
|
+
__html: fontStyle
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
]
|
|
42
|
+
}),
|
|
43
|
+
/*#__PURE__*/ jsxRuntime.jsx(core.BuilderComponentProvider, {
|
|
44
|
+
components: components,
|
|
45
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core.SectionProvider, {
|
|
46
|
+
data: sectionData,
|
|
47
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(ProductProvider, {
|
|
48
|
+
product: product,
|
|
49
|
+
children: [
|
|
50
|
+
builderData && /*#__PURE__*/ jsxRuntime.jsx(core.BuilderProvider, {
|
|
51
|
+
state: builderData,
|
|
52
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core.Render, {
|
|
53
|
+
uid: "ROOT"
|
|
54
|
+
})
|
|
55
|
+
}),
|
|
56
|
+
/*#__PURE__*/ jsxRuntime.jsx(core.AddOn, {
|
|
57
|
+
name: "sticky-add-to-cart"
|
|
58
|
+
})
|
|
59
|
+
]
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
]
|
|
64
|
+
});
|
|
19
65
|
};
|
|
20
66
|
|
|
21
67
|
exports.default = ProductDetailPage;
|
|
@@ -8,13 +8,68 @@ var router = require('next/router');
|
|
|
8
8
|
var useTrackingView = require('../libs/hooks/use-tracking-view.js');
|
|
9
9
|
var parseHtml = require('../libs/parse-html.js');
|
|
10
10
|
|
|
11
|
-
const StaticPageV2 = ({ components, builderData, sectionData, seo, themeStyle, fontStyle, customCodeHeader, shopToken, pageHandle
|
|
12
|
-
const router$1 = router.useRouter();
|
|
13
|
-
useTrackingView.useTrackingView(shopToken, pageHandle, router$1.isFallback);
|
|
14
|
-
if (router$1.isFallback) {
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
const StaticPageV2 = ({ components , builderData , sectionData , seo , themeStyle , fontStyle , customCodeHeader , shopToken , pageHandle })=>{
|
|
12
|
+
const router$1 = router.useRouter();
|
|
13
|
+
useTrackingView.useTrackingView(shopToken, pageHandle, router$1.isFallback);
|
|
14
|
+
if (router$1.isFallback) {
|
|
15
|
+
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
16
|
+
className: "flex h-full items-center justify-center",
|
|
17
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
18
|
+
className: "flex gap-2",
|
|
19
|
+
children: [
|
|
20
|
+
/*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
21
|
+
className: "aspect-square h-2 animate-[flashing_500ms_infinite_alternate] rounded-full bg-slate-800"
|
|
22
|
+
}),
|
|
23
|
+
/*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
24
|
+
className: "aspect-square h-2 animate-[flashing_500ms_infinite_200ms_linear_alternate] rounded-full bg-slate-800"
|
|
25
|
+
}),
|
|
26
|
+
/*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
27
|
+
className: "aspect-square h-2 animate-[flashing_500ms_infinite_500ms_alternate] rounded-full bg-slate-800"
|
|
28
|
+
})
|
|
29
|
+
]
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
34
|
+
children: [
|
|
35
|
+
/*#__PURE__*/ jsxRuntime.jsx(nextSeo.NextSeo, {
|
|
36
|
+
...seo
|
|
37
|
+
}),
|
|
38
|
+
/*#__PURE__*/ jsxRuntime.jsxs(Head, {
|
|
39
|
+
children: [
|
|
40
|
+
parseHtml.parseHtml(customCodeHeader, true),
|
|
41
|
+
themeStyle && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
42
|
+
"data-id": "global-style",
|
|
43
|
+
type: "text/css",
|
|
44
|
+
dangerouslySetInnerHTML: {
|
|
45
|
+
__html: themeStyle
|
|
46
|
+
}
|
|
47
|
+
}),
|
|
48
|
+
fontStyle && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
49
|
+
"data-id": "google-fonts",
|
|
50
|
+
type: "text/css",
|
|
51
|
+
dangerouslySetInnerHTML: {
|
|
52
|
+
__html: fontStyle
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
]
|
|
56
|
+
}),
|
|
57
|
+
/*#__PURE__*/ jsxRuntime.jsx(core.BuilderComponentProvider, {
|
|
58
|
+
components: components,
|
|
59
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core.SectionProvider, {
|
|
60
|
+
data: sectionData,
|
|
61
|
+
children: builderData?.map((builder)=>/*#__PURE__*/ jsxRuntime.jsx(core.BuilderProvider, {
|
|
62
|
+
state: builder.data,
|
|
63
|
+
lazy: builder.lazy,
|
|
64
|
+
priority: builder.priority,
|
|
65
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core.Render, {
|
|
66
|
+
uid: builder.uid
|
|
67
|
+
})
|
|
68
|
+
}, builder.uid))
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
]
|
|
72
|
+
});
|
|
18
73
|
};
|
|
19
74
|
|
|
20
75
|
exports.StaticPageV2 = StaticPageV2;
|
package/dist/cjs/pages/static.js
CHANGED
|
@@ -8,12 +8,66 @@ var nextSeo = require('next-seo');
|
|
|
8
8
|
var Head = require('next/head');
|
|
9
9
|
var router = require('next/router');
|
|
10
10
|
|
|
11
|
-
const StaticPage = ({ components, builderData, sectionData, seo, themeStyle, fontStyle
|
|
12
|
-
const router$1 = router.useRouter();
|
|
13
|
-
if (router$1.isFallback) {
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
const StaticPage = ({ components , builderData , sectionData , seo , themeStyle , fontStyle })=>{
|
|
12
|
+
const router$1 = router.useRouter();
|
|
13
|
+
if (router$1.isFallback) {
|
|
14
|
+
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
15
|
+
className: "flex h-full items-center justify-center",
|
|
16
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
17
|
+
className: "flex gap-2",
|
|
18
|
+
children: [
|
|
19
|
+
/*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
20
|
+
className: "aspect-square h-2 animate-[flashing_500ms_infinite_alternate] rounded-full bg-slate-800"
|
|
21
|
+
}),
|
|
22
|
+
/*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
23
|
+
className: "aspect-square h-2 animate-[flashing_500ms_infinite_200ms_linear_alternate] rounded-full bg-slate-800"
|
|
24
|
+
}),
|
|
25
|
+
/*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
26
|
+
className: "aspect-square h-2 animate-[flashing_500ms_infinite_500ms_alternate] rounded-full bg-slate-800"
|
|
27
|
+
})
|
|
28
|
+
]
|
|
29
|
+
})
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
33
|
+
children: [
|
|
34
|
+
/*#__PURE__*/ jsxRuntime.jsx(nextSeo.NextSeo, {
|
|
35
|
+
...seo
|
|
36
|
+
}),
|
|
37
|
+
/*#__PURE__*/ jsxRuntime.jsxs(Head, {
|
|
38
|
+
children: [
|
|
39
|
+
themeStyle && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
40
|
+
"data-id": "global-style",
|
|
41
|
+
type: "text/css",
|
|
42
|
+
dangerouslySetInnerHTML: {
|
|
43
|
+
__html: themeStyle
|
|
44
|
+
}
|
|
45
|
+
}),
|
|
46
|
+
fontStyle && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
47
|
+
"data-id": "google-fonts",
|
|
48
|
+
type: "text/css",
|
|
49
|
+
dangerouslySetInnerHTML: {
|
|
50
|
+
__html: fontStyle
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
]
|
|
54
|
+
}),
|
|
55
|
+
/*#__PURE__*/ jsxRuntime.jsx(core.BuilderComponentProvider, {
|
|
56
|
+
components: components,
|
|
57
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core.SectionProvider, {
|
|
58
|
+
data: sectionData,
|
|
59
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
60
|
+
children: builderData && /*#__PURE__*/ jsxRuntime.jsx(core.BuilderProvider, {
|
|
61
|
+
state: builderData,
|
|
62
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core.Render, {
|
|
63
|
+
uid: "ROOT"
|
|
64
|
+
})
|
|
65
|
+
}, "body")
|
|
66
|
+
})
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
]
|
|
70
|
+
});
|
|
17
71
|
};
|
|
18
72
|
|
|
19
73
|
exports.default = StaticPage;
|
|
@@ -1,30 +1,38 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Component } from 'react';
|
|
3
3
|
|
|
4
|
-
const initialState = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
4
|
+
const initialState = {
|
|
5
|
+
hasError: false
|
|
6
|
+
};
|
|
7
|
+
class ErrorBoundary extends Component {
|
|
8
|
+
state = initialState;
|
|
9
|
+
static getDerivedStateFromError(error) {
|
|
10
|
+
// Update state so the next render will show the fallback UI
|
|
11
|
+
return {
|
|
12
|
+
hasError: true,
|
|
13
|
+
error
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
reset = ()=>{
|
|
17
|
+
this.setState(initialState);
|
|
18
|
+
};
|
|
19
|
+
componentDidCatch(error, errorInfo) {
|
|
20
|
+
// You can use your own error logging service here
|
|
21
|
+
this.props.onError?.(error, errorInfo);
|
|
22
|
+
}
|
|
23
|
+
render() {
|
|
24
|
+
const { FallbackComponent } = this.props;
|
|
25
|
+
// Check if the error is thrown
|
|
26
|
+
if (this.state.hasError) {
|
|
27
|
+
// You can render any custom fallback UI
|
|
28
|
+
return /*#__PURE__*/ jsx(FallbackComponent, {
|
|
29
|
+
error: this.state.error,
|
|
30
|
+
resetErrorBoundary: this.reset
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Return children components in case of no error
|
|
34
|
+
return this.props.children;
|
|
35
|
+
}
|
|
28
36
|
}
|
|
29
37
|
|
|
30
38
|
export { ErrorBoundary };
|
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
-
const ErrorFallback = ({ error, resetErrorBoundary
|
|
4
|
-
return
|
|
3
|
+
const ErrorFallback = ({ error , resetErrorBoundary })=>{
|
|
4
|
+
return /*#__PURE__*/ jsxs("div", {
|
|
5
|
+
role: "alert",
|
|
6
|
+
className: "flex flex-col items-center gap-2",
|
|
7
|
+
children: [
|
|
8
|
+
/*#__PURE__*/ jsx("p", {
|
|
9
|
+
className: "text-center text-2xl",
|
|
10
|
+
children: "Oops! Something went wrong"
|
|
11
|
+
}),
|
|
12
|
+
/*#__PURE__*/ jsx("pre", {
|
|
13
|
+
children: error?.message
|
|
14
|
+
}),
|
|
15
|
+
/*#__PURE__*/ jsx("button", {
|
|
16
|
+
onClick: resetErrorBoundary,
|
|
17
|
+
className: "inline-flex h-10 items-center justify-center gap-2 rounded bg-[#3C67FF] px-6 text-white active:translate-y-1",
|
|
18
|
+
children: "Try again"
|
|
19
|
+
})
|
|
20
|
+
]
|
|
21
|
+
});
|
|
5
22
|
};
|
|
6
23
|
|
|
7
24
|
export { ErrorFallback };
|
|
@@ -4,24 +4,28 @@ import { useRouter } from 'next/router';
|
|
|
4
4
|
import Script from 'next/script';
|
|
5
5
|
import { useEffect } from 'react';
|
|
6
6
|
|
|
7
|
-
const FacebookPixel = ({ pixelId
|
|
8
|
-
const router = useRouter();
|
|
9
|
-
useEffect(()
|
|
10
|
-
// This pageview only triggers the first time (it's important for Pixel to have real information)
|
|
11
|
-
fpixel.pageview();
|
|
12
|
-
const handleRouteChange = ()
|
|
13
|
-
fpixel.pageview();
|
|
14
|
-
};
|
|
15
|
-
router.events.on('routeChangeComplete', handleRouteChange);
|
|
16
|
-
router.events.on('hashChangeComplete', handleRouteChange);
|
|
17
|
-
return ()
|
|
18
|
-
router.events.off('routeChangeComplete', handleRouteChange);
|
|
19
|
-
router.events.off('hashChangeComplete', handleRouteChange);
|
|
20
|
-
};
|
|
21
|
-
}, [
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
const FacebookPixel = ({ pixelId })=>{
|
|
8
|
+
const router = useRouter();
|
|
9
|
+
useEffect(()=>{
|
|
10
|
+
// This pageview only triggers the first time (it's important for Pixel to have real information)
|
|
11
|
+
fpixel.pageview();
|
|
12
|
+
const handleRouteChange = ()=>{
|
|
13
|
+
fpixel.pageview();
|
|
14
|
+
};
|
|
15
|
+
router.events.on('routeChangeComplete', handleRouteChange);
|
|
16
|
+
router.events.on('hashChangeComplete', handleRouteChange);
|
|
17
|
+
return ()=>{
|
|
18
|
+
router.events.off('routeChangeComplete', handleRouteChange);
|
|
19
|
+
router.events.off('hashChangeComplete', handleRouteChange);
|
|
20
|
+
};
|
|
21
|
+
}, [
|
|
22
|
+
router.events
|
|
23
|
+
]);
|
|
24
|
+
if (!pixelId) return null;
|
|
25
|
+
return /*#__PURE__*/ jsx(Script, {
|
|
26
|
+
id: "fb-pixel",
|
|
27
|
+
strategy: "afterInteractive",
|
|
28
|
+
dangerouslySetInnerHTML: {
|
|
25
29
|
__html: `
|
|
26
30
|
!function(f,b,e,v,n,t,s)
|
|
27
31
|
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
|
@@ -32,8 +36,9 @@ const FacebookPixel = ({ pixelId }) => {
|
|
|
32
36
|
s.parentNode.insertBefore(t,s)}(window, document,'script',
|
|
33
37
|
'https://connect.facebook.net/en_US/fbevents.js');
|
|
34
38
|
fbq('init', ${pixelId});
|
|
35
|
-
|
|
36
|
-
}
|
|
39
|
+
`
|
|
40
|
+
}
|
|
41
|
+
});
|
|
37
42
|
};
|
|
38
43
|
|
|
39
44
|
export { FacebookPixel };
|