@gem-sdk/pages 1.57.15-staging.12 → 1.58.0-dev.114
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 +1 -0
- package/dist/cjs/components/ErrorFallback.js +1 -0
- package/dist/cjs/components/FacebookPixel.js +1 -0
- package/dist/cjs/components/FooterForPostPurchase.js +1 -0
- package/dist/cjs/components/GoogleAnalytic.js +1 -0
- package/dist/cjs/components/TikTokPixel.js +1 -0
- package/dist/cjs/components/builder/Body.js +1 -0
- package/dist/cjs/components/builder/Footer.js +1 -0
- package/dist/cjs/components/builder/Header.js +1 -0
- package/dist/cjs/components/builder/InteractionSelectOnPageHeader.js +9 -3
- package/dist/cjs/components/builder/PopupManager.js +1 -0
- package/dist/cjs/components/builder/SwitchView.js +1 -0
- package/dist/cjs/components/builder/Toolbar.js +1 -0
- package/dist/cjs/components/builder/Toolbox.js +1 -0
- package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +1 -0
- package/dist/cjs/components/image-to-layout/DropElement.js +1 -0
- package/dist/cjs/components/image-to-layout/ImageToLayout.js +1 -0
- package/dist/cjs/layouts/main.js +1 -0
- package/dist/cjs/libs/api/get-builder-props.js +7 -2
- package/dist/cjs/libs/api/get-static-page-props-preview.js +19 -15
- package/dist/cjs/libs/api/get-static-page-props-v2.js +2 -1
- package/dist/cjs/libs/helpers/normalize.js +9 -0
- package/dist/cjs/libs/hooks/use-tracking-view.js +1 -0
- package/dist/cjs/pages/404.js +1 -0
- package/dist/cjs/pages/500.js +1 -0
- package/dist/cjs/pages/CollectionGlobalProvider.js +1 -0
- package/dist/cjs/pages/builder.js +1 -0
- package/dist/cjs/pages/collection-detail.js +1 -0
- package/dist/cjs/pages/preview.js +1 -0
- package/dist/cjs/pages/product-detail.js +1 -0
- package/dist/cjs/pages/static-v2.js +11 -2
- package/dist/cjs/pages/static.js +1 -0
- package/dist/esm/components/ErrorBoundary.js +1 -0
- package/dist/esm/components/ErrorFallback.js +1 -0
- package/dist/esm/components/FacebookPixel.js +1 -0
- package/dist/esm/components/FooterForPostPurchase.js +1 -0
- package/dist/esm/components/GoogleAnalytic.js +1 -0
- package/dist/esm/components/TikTokPixel.js +1 -0
- package/dist/esm/components/builder/Body.js +1 -0
- package/dist/esm/components/builder/Footer.js +1 -0
- package/dist/esm/components/builder/Header.js +1 -0
- package/dist/esm/components/builder/InteractionSelectOnPageHeader.js +9 -3
- package/dist/esm/components/builder/PopupManager.js +1 -0
- package/dist/esm/components/builder/SwitchView.js +1 -0
- package/dist/esm/components/builder/Toolbar.js +1 -0
- package/dist/esm/components/builder/Toolbox.js +1 -0
- package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +1 -0
- package/dist/esm/components/image-to-layout/DropElement.js +1 -0
- package/dist/esm/components/image-to-layout/ImageToLayout.js +1 -0
- package/dist/esm/layouts/main.js +1 -0
- package/dist/esm/libs/api/get-builder-props.js +8 -3
- package/dist/esm/libs/api/get-static-page-props-preview.js +21 -17
- package/dist/esm/libs/api/get-static-page-props-v2.js +3 -2
- package/dist/esm/libs/helpers/normalize.js +9 -1
- package/dist/esm/libs/hooks/use-tracking-view.js +1 -0
- package/dist/esm/pages/404.js +1 -0
- package/dist/esm/pages/500.js +1 -0
- package/dist/esm/pages/CollectionGlobalProvider.js +1 -0
- package/dist/esm/pages/builder.js +1 -0
- package/dist/esm/pages/collection-detail.js +1 -0
- package/dist/esm/pages/preview.js +1 -0
- package/dist/esm/pages/product-detail.js +1 -0
- package/dist/esm/pages/static-v2.js +11 -2
- package/dist/esm/pages/static.js +1 -0
- package/dist/types/index.d.ts +7 -2
- package/package.json +5 -5
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
@@ -37,8 +38,13 @@ const InteractionSelectOnPageHeader = ()=>{
|
|
|
37
38
|
}, [
|
|
38
39
|
handleClickOutside
|
|
39
40
|
]);
|
|
41
|
+
react.useEffect(()=>{
|
|
42
|
+
setHoverOption(null);
|
|
43
|
+
}, [
|
|
44
|
+
selectType
|
|
45
|
+
]);
|
|
40
46
|
const isShowOverlay = react.useMemo(()=>{
|
|
41
|
-
return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE')
|
|
47
|
+
return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE');
|
|
42
48
|
}, [
|
|
43
49
|
hoverOption,
|
|
44
50
|
selectType
|
|
@@ -87,7 +93,7 @@ const InteractionSelectOnPageHeader = ()=>{
|
|
|
87
93
|
className: "gp-grow",
|
|
88
94
|
children: title
|
|
89
95
|
}),
|
|
90
|
-
|
|
96
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
91
97
|
className: "gp-w-[21px]",
|
|
92
98
|
children: /*#__PURE__*/ jsxRuntime.jsx("svg", {
|
|
93
99
|
width: "16",
|
|
@@ -105,7 +111,7 @@ const InteractionSelectOnPageHeader = ()=>{
|
|
|
105
111
|
})
|
|
106
112
|
]
|
|
107
113
|
}),
|
|
108
|
-
openDropdown &&
|
|
114
|
+
openDropdown && /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
109
115
|
ref: popupRef,
|
|
110
116
|
className: "gp-p-2 gp-flex gp-flex-col gp-absolute gp-top-[calc(100%_+_4px)] gp-w-[280px] gp-bg-[#151515] gp-rounded-xl gp-text-white",
|
|
111
117
|
children: [
|
package/dist/cjs/layouts/main.js
CHANGED
|
@@ -5,16 +5,20 @@ var adapterShopify = require('@gem-sdk/adapter-shopify');
|
|
|
5
5
|
var parseJson = require('../helpers/parse-json.js');
|
|
6
6
|
|
|
7
7
|
const getBuilderProps = async (fetcher, shopifyFetcher)=>{
|
|
8
|
-
const [storeProperty, shopifyMeta] = await Promise.allSettled([
|
|
8
|
+
const [storeProperty, shopifyMeta, shopifyInfo] = await Promise.allSettled([
|
|
9
9
|
fetcher([
|
|
10
10
|
core.StorePropertyDocument
|
|
11
11
|
]),
|
|
12
12
|
shopifyFetcher([
|
|
13
13
|
adapterShopify.ShopMetaDocument
|
|
14
|
+
]),
|
|
15
|
+
fetcher([
|
|
16
|
+
core.ShopShopifyDocument
|
|
14
17
|
])
|
|
15
18
|
]);
|
|
16
19
|
const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
|
|
17
20
|
const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
|
|
21
|
+
const shopInfo = shopifyInfo.status === 'fulfilled' ? shopifyInfo.value : undefined;
|
|
18
22
|
const seo = shopMeta ? {
|
|
19
23
|
titleTemplate: `%s | ${shopMeta.shop.name}`,
|
|
20
24
|
defaultTitle: shopMeta?.shop.name,
|
|
@@ -34,7 +38,8 @@ const getBuilderProps = async (fetcher, shopifyFetcher)=>{
|
|
|
34
38
|
swr: {
|
|
35
39
|
revalidateOnMount: true
|
|
36
40
|
},
|
|
37
|
-
seo
|
|
41
|
+
seo,
|
|
42
|
+
timezone: shopInfo?.shopShopify?.timezone
|
|
38
43
|
});
|
|
39
44
|
};
|
|
40
45
|
|
|
@@ -9,6 +9,7 @@ var generateManifres = require('../helpers/generate-manifres.js');
|
|
|
9
9
|
var getFallback = require('../helpers/get-fallback.js');
|
|
10
10
|
var normalize = require('../helpers/normalize.js');
|
|
11
11
|
var parseJson = require('../helpers/parse-json.js');
|
|
12
|
+
var customFonts = require('../custom-fonts.js');
|
|
12
13
|
|
|
13
14
|
const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
14
15
|
try {
|
|
@@ -19,9 +20,8 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
19
20
|
};
|
|
20
21
|
const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
|
|
21
22
|
fetcher([
|
|
22
|
-
core.
|
|
23
|
-
variables
|
|
24
|
-
'previewPage'
|
|
23
|
+
core.PreviewThemePageDocument,
|
|
24
|
+
variables
|
|
25
25
|
]),
|
|
26
26
|
fetcher([
|
|
27
27
|
core.StorePropertyDocument
|
|
@@ -33,19 +33,21 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
33
33
|
if (theme.status === 'rejected') {
|
|
34
34
|
throw new Error(theme.reason?.[0]);
|
|
35
35
|
}
|
|
36
|
-
const dataBuilder = theme.value.
|
|
36
|
+
const dataBuilder = theme.value.previewThemePage;
|
|
37
37
|
if (!dataBuilder) {
|
|
38
38
|
throw new Error(`No data builder found for slug: /preview/${slug}`);
|
|
39
39
|
}
|
|
40
|
+
const themePageCustomFonts = dataBuilder.customFonts;
|
|
40
41
|
const pageTemplate = normalize.parseBuilderTemplateV2(dataBuilder);
|
|
41
|
-
const [elementFontStyle, fontStyle, fallback] = await Promise.all([
|
|
42
|
+
const [elementFontStyle, fontStyle, fallback, customFonts$1] = await Promise.all([
|
|
42
43
|
googleFonts.getFontStyleFromPageTemplate(pageTemplate),
|
|
43
|
-
googleFonts.getFontFromGlobalStyle(dataBuilder?.
|
|
44
|
-
getFallback.getFallbackV2(fetcher, pageTemplate)
|
|
44
|
+
googleFonts.getFontFromGlobalStyle(dataBuilder?.themeStyle?.data),
|
|
45
|
+
getFallback.getFallbackV2(fetcher, pageTemplate),
|
|
46
|
+
customFonts.getCustomFonts(themePageCustomFonts)
|
|
45
47
|
]);
|
|
46
48
|
const mobileOnly = dataBuilder.isMobile ?? false;
|
|
47
|
-
const description = dataBuilder?.
|
|
48
|
-
const thumbnail = parseJson.parseJson(dataBuilder?.
|
|
49
|
+
const description = dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
|
|
50
|
+
const thumbnail = parseJson.parseJson(dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
|
|
49
51
|
const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
|
|
50
52
|
const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
|
|
51
53
|
const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
|
|
@@ -119,7 +121,7 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
119
121
|
const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
|
|
120
122
|
const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
|
|
121
123
|
return parseJson.serializableJson({
|
|
122
|
-
themeStyle: genCss.genCSS(dataBuilder?.
|
|
124
|
+
themeStyle: genCss.genCSS(dataBuilder?.themeStyle?.data, mobileOnly),
|
|
123
125
|
fontStyle,
|
|
124
126
|
elementFontStyle,
|
|
125
127
|
builderData: pageTemplate,
|
|
@@ -135,11 +137,13 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
135
137
|
swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
|
|
136
138
|
seo,
|
|
137
139
|
mobileOnly,
|
|
138
|
-
gaTrackingId: dataBuilder.
|
|
139
|
-
facebookPixelId: dataBuilder.
|
|
140
|
-
tiktokPixelId: dataBuilder.
|
|
141
|
-
customCodeHeader: dataBuilder.
|
|
142
|
-
customCodeBody: dataBuilder.
|
|
140
|
+
gaTrackingId: dataBuilder.analytic?.gaTrackingID ?? null,
|
|
141
|
+
facebookPixelId: dataBuilder.analytic?.fbPixelID ?? null,
|
|
142
|
+
tiktokPixelId: dataBuilder.analytic?.tiktokPixelID ?? null,
|
|
143
|
+
customCodeHeader: dataBuilder.customCode?.header ?? null,
|
|
144
|
+
customCodeBody: dataBuilder.customCode?.body ?? null,
|
|
145
|
+
customFonts: customFonts$1,
|
|
146
|
+
pageBackground: normalize.extractPageBackground(dataBuilder)
|
|
143
147
|
});
|
|
144
148
|
} catch (err) {
|
|
145
149
|
nextjs.captureException(err);
|
|
@@ -152,7 +152,8 @@ const getStaticPagePropsV2 = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
152
152
|
customCodeBody: dataBuilder.themePageCustomCode?.body ?? null,
|
|
153
153
|
pageHandle: dataBuilder.handle ?? null,
|
|
154
154
|
customFonts: customFonts$1,
|
|
155
|
-
interaction: dataBuilder?.interaction
|
|
155
|
+
interaction: dataBuilder?.interaction,
|
|
156
|
+
pageBackground: normalize.extractPageBackground(dataBuilder)
|
|
156
157
|
});
|
|
157
158
|
} catch (err) {
|
|
158
159
|
nextjs.captureException(err);
|
|
@@ -83,6 +83,14 @@ const parseBuilderTemplate = (data)=>{
|
|
|
83
83
|
...data?.themePageCustomSections ?? []
|
|
84
84
|
], data?.sectionPosition);
|
|
85
85
|
};
|
|
86
|
+
const extractPageBackground = (data)=>{
|
|
87
|
+
try {
|
|
88
|
+
const pageBackgroundStr = data?.metafields?.find((item)=>item?.key === 'page_background')?.value;
|
|
89
|
+
return JSON.parse(pageBackgroundStr ?? '{}');
|
|
90
|
+
} catch {
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
};
|
|
86
94
|
const parseBuilderLibraryTemplate = (data)=>{
|
|
87
95
|
return normalizePageSectionResponseV2([
|
|
88
96
|
...data?.sections ?? []
|
|
@@ -94,6 +102,7 @@ const parseShopLibraryPageTemplate = (data)=>{
|
|
|
94
102
|
], data?.sectionPosition);
|
|
95
103
|
};
|
|
96
104
|
|
|
105
|
+
exports.extractPageBackground = extractPageBackground;
|
|
97
106
|
exports.normalizeBuilderData = normalizeBuilderData;
|
|
98
107
|
exports.normalizePageSectionResponseV2 = normalizePageSectionResponseV2;
|
|
99
108
|
exports.parseBuilderLibraryTemplate = parseBuilderLibraryTemplate;
|
package/dist/cjs/pages/404.js
CHANGED
package/dist/cjs/pages/500.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -8,12 +9,12 @@ var Header = require('../components/builder/Header.js');
|
|
|
8
9
|
var FooterForPostPurchase = require('../components/FooterForPostPurchase.js');
|
|
9
10
|
var Script = require('next/script');
|
|
10
11
|
|
|
11
|
-
const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontStyle, elementFontStyle, customCodeHeader, shopToken, pageHandle, customFonts, isPostPurchase, shopName, productOffers, publicStoreFrontData, isPreview, interaction })=>{
|
|
12
|
+
const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontStyle, elementFontStyle, customCodeHeader, shopToken, pageHandle, customFonts, isPostPurchase, shopName, productOffers, publicStoreFrontData, isPreview, interaction, pageBackground })=>{
|
|
12
13
|
const baseAssetURL = process.env.NEXT_GP_BASE_ASSET_URL || 'https://d3kbi0je7pp4lw.cloudfront.net';
|
|
13
14
|
useTrackingView.useTrackingView(shopToken, pageHandle);
|
|
14
15
|
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
15
16
|
children: [
|
|
16
|
-
parseHtml.parseHtml(customCodeHeader
|
|
17
|
+
parseHtml.parseHtml(customCodeHeader),
|
|
17
18
|
themeStyle && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
18
19
|
"data-id": "global-style",
|
|
19
20
|
type: "text/css",
|
|
@@ -42,6 +43,13 @@ const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontSt
|
|
|
42
43
|
__html: customFonts
|
|
43
44
|
}
|
|
44
45
|
}, fontStyle),
|
|
46
|
+
pageBackground?.isUsePageBackground && pageBackground?.background && /*#__PURE__*/ jsxRuntime.jsx("style", {
|
|
47
|
+
children: `
|
|
48
|
+
body {
|
|
49
|
+
background: ${pageBackground.background};
|
|
50
|
+
}
|
|
51
|
+
`
|
|
52
|
+
}, `page_background_${pageBackground?.background}`),
|
|
45
53
|
/*#__PURE__*/ jsxRuntime.jsx(core.PageProvider, {
|
|
46
54
|
productOffers: productOffers,
|
|
47
55
|
publicStoreFrontData: publicStoreFrontData,
|
|
@@ -72,6 +80,7 @@ const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontSt
|
|
|
72
80
|
}),
|
|
73
81
|
/*#__PURE__*/ jsxRuntime.jsx(Script, {
|
|
74
82
|
defer: true,
|
|
83
|
+
strategy: "lazyOnload",
|
|
75
84
|
src: `${baseAssetURL}/assets-v2/gp-flow-action-lip.js`
|
|
76
85
|
})
|
|
77
86
|
]
|
package/dist/cjs/pages/static.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
3
|
import { usePageStore, useInteraction } from '@gem-sdk/core';
|
|
3
4
|
import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
|
|
@@ -33,8 +34,13 @@ const InteractionSelectOnPageHeader = ()=>{
|
|
|
33
34
|
}, [
|
|
34
35
|
handleClickOutside
|
|
35
36
|
]);
|
|
37
|
+
useEffect(()=>{
|
|
38
|
+
setHoverOption(null);
|
|
39
|
+
}, [
|
|
40
|
+
selectType
|
|
41
|
+
]);
|
|
36
42
|
const isShowOverlay = useMemo(()=>{
|
|
37
|
-
return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE')
|
|
43
|
+
return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE');
|
|
38
44
|
}, [
|
|
39
45
|
hoverOption,
|
|
40
46
|
selectType
|
|
@@ -83,7 +89,7 @@ const InteractionSelectOnPageHeader = ()=>{
|
|
|
83
89
|
className: "gp-grow",
|
|
84
90
|
children: title
|
|
85
91
|
}),
|
|
86
|
-
|
|
92
|
+
/*#__PURE__*/ jsx("div", {
|
|
87
93
|
className: "gp-w-[21px]",
|
|
88
94
|
children: /*#__PURE__*/ jsx("svg", {
|
|
89
95
|
width: "16",
|
|
@@ -101,7 +107,7 @@ const InteractionSelectOnPageHeader = ()=>{
|
|
|
101
107
|
})
|
|
102
108
|
]
|
|
103
109
|
}),
|
|
104
|
-
openDropdown &&
|
|
110
|
+
openDropdown && /*#__PURE__*/ jsxs("div", {
|
|
105
111
|
ref: popupRef,
|
|
106
112
|
className: "gp-p-2 gp-flex gp-flex-col gp-absolute gp-top-[calc(100%_+_4px)] gp-w-[280px] gp-bg-[#151515] gp-rounded-xl gp-text-white",
|
|
107
113
|
children: [
|
package/dist/esm/layouts/main.js
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
import { StorePropertyDocument } from '@gem-sdk/core';
|
|
1
|
+
import { StorePropertyDocument, ShopShopifyDocument } from '@gem-sdk/core';
|
|
2
2
|
import { ShopMetaDocument } from '@gem-sdk/adapter-shopify';
|
|
3
3
|
import { serializableJson, parseJson } from '../helpers/parse-json.js';
|
|
4
4
|
|
|
5
5
|
const getBuilderProps = async (fetcher, shopifyFetcher)=>{
|
|
6
|
-
const [storeProperty, shopifyMeta] = await Promise.allSettled([
|
|
6
|
+
const [storeProperty, shopifyMeta, shopifyInfo] = await Promise.allSettled([
|
|
7
7
|
fetcher([
|
|
8
8
|
StorePropertyDocument
|
|
9
9
|
]),
|
|
10
10
|
shopifyFetcher([
|
|
11
11
|
ShopMetaDocument
|
|
12
|
+
]),
|
|
13
|
+
fetcher([
|
|
14
|
+
ShopShopifyDocument
|
|
12
15
|
])
|
|
13
16
|
]);
|
|
14
17
|
const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
|
|
15
18
|
const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
|
|
19
|
+
const shopInfo = shopifyInfo.status === 'fulfilled' ? shopifyInfo.value : undefined;
|
|
16
20
|
const seo = shopMeta ? {
|
|
17
21
|
titleTemplate: `%s | ${shopMeta.shop.name}`,
|
|
18
22
|
defaultTitle: shopMeta?.shop.name,
|
|
@@ -32,7 +36,8 @@ const getBuilderProps = async (fetcher, shopifyFetcher)=>{
|
|
|
32
36
|
swr: {
|
|
33
37
|
revalidateOnMount: true
|
|
34
38
|
},
|
|
35
|
-
seo
|
|
39
|
+
seo,
|
|
40
|
+
timezone: shopInfo?.shopShopify?.timezone
|
|
36
41
|
});
|
|
37
42
|
};
|
|
38
43
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PreviewThemePageDocument, StorePropertyDocument } from '@gem-sdk/core';
|
|
2
2
|
import { ShopMetaDocument } from '@gem-sdk/adapter-shopify';
|
|
3
3
|
import { captureException } from '@sentry/nextjs';
|
|
4
4
|
import { getFontStyleFromPageTemplate, getFontFromGlobalStyle } from '../google-fonts.js';
|
|
5
5
|
import { genCSS } from '../helpers/gen-css.js';
|
|
6
6
|
import { generateManifest } from '../helpers/generate-manifres.js';
|
|
7
7
|
import { getFallbackV2 } from '../helpers/get-fallback.js';
|
|
8
|
-
import { parseBuilderTemplateV2 } from '../helpers/normalize.js';
|
|
8
|
+
import { parseBuilderTemplateV2, extractPageBackground } from '../helpers/normalize.js';
|
|
9
9
|
import { parseJson, serializableJson } from '../helpers/parse-json.js';
|
|
10
|
+
import { getCustomFonts } from '../custom-fonts.js';
|
|
10
11
|
|
|
11
12
|
const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
12
13
|
try {
|
|
@@ -17,9 +18,8 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
17
18
|
};
|
|
18
19
|
const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
|
|
19
20
|
fetcher([
|
|
20
|
-
|
|
21
|
-
variables
|
|
22
|
-
'previewPage'
|
|
21
|
+
PreviewThemePageDocument,
|
|
22
|
+
variables
|
|
23
23
|
]),
|
|
24
24
|
fetcher([
|
|
25
25
|
StorePropertyDocument
|
|
@@ -31,19 +31,21 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
31
31
|
if (theme.status === 'rejected') {
|
|
32
32
|
throw new Error(theme.reason?.[0]);
|
|
33
33
|
}
|
|
34
|
-
const dataBuilder = theme.value.
|
|
34
|
+
const dataBuilder = theme.value.previewThemePage;
|
|
35
35
|
if (!dataBuilder) {
|
|
36
36
|
throw new Error(`No data builder found for slug: /preview/${slug}`);
|
|
37
37
|
}
|
|
38
|
+
const themePageCustomFonts = dataBuilder.customFonts;
|
|
38
39
|
const pageTemplate = parseBuilderTemplateV2(dataBuilder);
|
|
39
|
-
const [elementFontStyle, fontStyle, fallback] = await Promise.all([
|
|
40
|
+
const [elementFontStyle, fontStyle, fallback, customFonts] = await Promise.all([
|
|
40
41
|
getFontStyleFromPageTemplate(pageTemplate),
|
|
41
|
-
getFontFromGlobalStyle(dataBuilder?.
|
|
42
|
-
getFallbackV2(fetcher, pageTemplate)
|
|
42
|
+
getFontFromGlobalStyle(dataBuilder?.themeStyle?.data),
|
|
43
|
+
getFallbackV2(fetcher, pageTemplate),
|
|
44
|
+
getCustomFonts(themePageCustomFonts)
|
|
43
45
|
]);
|
|
44
46
|
const mobileOnly = dataBuilder.isMobile ?? false;
|
|
45
|
-
const description = dataBuilder?.
|
|
46
|
-
const thumbnail = parseJson(dataBuilder?.
|
|
47
|
+
const description = dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
|
|
48
|
+
const thumbnail = parseJson(dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
|
|
47
49
|
const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
|
|
48
50
|
const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
|
|
49
51
|
const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
|
|
@@ -117,7 +119,7 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
117
119
|
const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
|
|
118
120
|
const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
|
|
119
121
|
return serializableJson({
|
|
120
|
-
themeStyle: genCSS(dataBuilder?.
|
|
122
|
+
themeStyle: genCSS(dataBuilder?.themeStyle?.data, mobileOnly),
|
|
121
123
|
fontStyle,
|
|
122
124
|
elementFontStyle,
|
|
123
125
|
builderData: pageTemplate,
|
|
@@ -133,11 +135,13 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
133
135
|
swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
|
|
134
136
|
seo,
|
|
135
137
|
mobileOnly,
|
|
136
|
-
gaTrackingId: dataBuilder.
|
|
137
|
-
facebookPixelId: dataBuilder.
|
|
138
|
-
tiktokPixelId: dataBuilder.
|
|
139
|
-
customCodeHeader: dataBuilder.
|
|
140
|
-
customCodeBody: dataBuilder.
|
|
138
|
+
gaTrackingId: dataBuilder.analytic?.gaTrackingID ?? null,
|
|
139
|
+
facebookPixelId: dataBuilder.analytic?.fbPixelID ?? null,
|
|
140
|
+
tiktokPixelId: dataBuilder.analytic?.tiktokPixelID ?? null,
|
|
141
|
+
customCodeHeader: dataBuilder.customCode?.header ?? null,
|
|
142
|
+
customCodeBody: dataBuilder.customCode?.body ?? null,
|
|
143
|
+
customFonts,
|
|
144
|
+
pageBackground: extractPageBackground(dataBuilder)
|
|
141
145
|
});
|
|
142
146
|
} catch (err) {
|
|
143
147
|
captureException(err);
|
|
@@ -4,7 +4,7 @@ import { getFontStyleFromPageTemplate, getFontFromGlobalStyle } from '../google-
|
|
|
4
4
|
import { genCSS } from '../helpers/gen-css.js';
|
|
5
5
|
import { generateManifest } from '../helpers/generate-manifres.js';
|
|
6
6
|
import { getFallbackV2 } from '../helpers/get-fallback.js';
|
|
7
|
-
import { parseBuilderTemplateV2 } from '../helpers/normalize.js';
|
|
7
|
+
import { parseBuilderTemplateV2, extractPageBackground } from '../helpers/normalize.js';
|
|
8
8
|
import { parseJson, serializableJson } from '../helpers/parse-json.js';
|
|
9
9
|
import { captureException } from '@sentry/nextjs';
|
|
10
10
|
import { getCustomFonts } from '../custom-fonts.js';
|
|
@@ -150,7 +150,8 @@ const getStaticPagePropsV2 = (fetcher, shopifyFetcher)=>async (slug)=>{
|
|
|
150
150
|
customCodeBody: dataBuilder.themePageCustomCode?.body ?? null,
|
|
151
151
|
pageHandle: dataBuilder.handle ?? null,
|
|
152
152
|
customFonts,
|
|
153
|
-
interaction: dataBuilder?.interaction
|
|
153
|
+
interaction: dataBuilder?.interaction,
|
|
154
|
+
pageBackground: extractPageBackground(dataBuilder)
|
|
154
155
|
});
|
|
155
156
|
} catch (err) {
|
|
156
157
|
captureException(err);
|
|
@@ -81,6 +81,14 @@ const parseBuilderTemplate = (data)=>{
|
|
|
81
81
|
...data?.themePageCustomSections ?? []
|
|
82
82
|
], data?.sectionPosition);
|
|
83
83
|
};
|
|
84
|
+
const extractPageBackground = (data)=>{
|
|
85
|
+
try {
|
|
86
|
+
const pageBackgroundStr = data?.metafields?.find((item)=>item?.key === 'page_background')?.value;
|
|
87
|
+
return JSON.parse(pageBackgroundStr ?? '{}');
|
|
88
|
+
} catch {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
};
|
|
84
92
|
const parseBuilderLibraryTemplate = (data)=>{
|
|
85
93
|
return normalizePageSectionResponseV2([
|
|
86
94
|
...data?.sections ?? []
|
|
@@ -92,4 +100,4 @@ const parseShopLibraryPageTemplate = (data)=>{
|
|
|
92
100
|
], data?.sectionPosition);
|
|
93
101
|
};
|
|
94
102
|
|
|
95
|
-
export { normalizeBuilderData, normalizePageSectionResponseV2, parseBuilderLibraryTemplate, parseBuilderTemplate, parseBuilderTemplateV2, parseShopLibraryPageTemplate };
|
|
103
|
+
export { extractPageBackground, normalizeBuilderData, normalizePageSectionResponseV2, parseBuilderLibraryTemplate, parseBuilderTemplate, parseBuilderTemplateV2, parseShopLibraryPageTemplate };
|
package/dist/esm/pages/404.js
CHANGED
package/dist/esm/pages/500.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
3
|
import { PageProvider, BuilderComponentProvider, SectionProvider, BuilderProvider, Render } from '@gem-sdk/core';
|
|
3
4
|
import { useTrackingView } from '../libs/hooks/use-tracking-view.js';
|
|
@@ -6,12 +7,12 @@ import Header from '../components/builder/Header.js';
|
|
|
6
7
|
import FooterForPostPurchase from '../components/FooterForPostPurchase.js';
|
|
7
8
|
import Script from 'next/script';
|
|
8
9
|
|
|
9
|
-
const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontStyle, elementFontStyle, customCodeHeader, shopToken, pageHandle, customFonts, isPostPurchase, shopName, productOffers, publicStoreFrontData, isPreview, interaction })=>{
|
|
10
|
+
const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontStyle, elementFontStyle, customCodeHeader, shopToken, pageHandle, customFonts, isPostPurchase, shopName, productOffers, publicStoreFrontData, isPreview, interaction, pageBackground })=>{
|
|
10
11
|
const baseAssetURL = process.env.NEXT_GP_BASE_ASSET_URL || 'https://d3kbi0je7pp4lw.cloudfront.net';
|
|
11
12
|
useTrackingView(shopToken, pageHandle);
|
|
12
13
|
return /*#__PURE__*/ jsxs(Fragment, {
|
|
13
14
|
children: [
|
|
14
|
-
parseHtml(customCodeHeader
|
|
15
|
+
parseHtml(customCodeHeader),
|
|
15
16
|
themeStyle && /*#__PURE__*/ jsx("style", {
|
|
16
17
|
"data-id": "global-style",
|
|
17
18
|
type: "text/css",
|
|
@@ -40,6 +41,13 @@ const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontSt
|
|
|
40
41
|
__html: customFonts
|
|
41
42
|
}
|
|
42
43
|
}, fontStyle),
|
|
44
|
+
pageBackground?.isUsePageBackground && pageBackground?.background && /*#__PURE__*/ jsx("style", {
|
|
45
|
+
children: `
|
|
46
|
+
body {
|
|
47
|
+
background: ${pageBackground.background};
|
|
48
|
+
}
|
|
49
|
+
`
|
|
50
|
+
}, `page_background_${pageBackground?.background}`),
|
|
43
51
|
/*#__PURE__*/ jsx(PageProvider, {
|
|
44
52
|
productOffers: productOffers,
|
|
45
53
|
publicStoreFrontData: publicStoreFrontData,
|
|
@@ -70,6 +78,7 @@ const StaticPageV2 = ({ components, builderData, sectionData, themeStyle, fontSt
|
|
|
70
78
|
}),
|
|
71
79
|
/*#__PURE__*/ jsx(Script, {
|
|
72
80
|
defer: true,
|
|
81
|
+
strategy: "lazyOnload",
|
|
73
82
|
src: `${baseAssetURL}/assets-v2/gp-flow-action-lip.js`
|
|
74
83
|
})
|
|
75
84
|
]
|
package/dist/esm/pages/static.js
CHANGED
package/dist/types/index.d.ts
CHANGED
|
@@ -40,7 +40,12 @@ type PageBuilderProps = {
|
|
|
40
40
|
customCodeBody?: string | null;
|
|
41
41
|
isStorefront?: boolean;
|
|
42
42
|
customFonts?: string | null;
|
|
43
|
-
interaction?: ShopType.Maybe<Pick<ShopType.PublishedPageInteraction,
|
|
43
|
+
interaction?: ShopType.Maybe<Pick<ShopType.PublishedPageInteraction, 'id' | 'value'>>;
|
|
44
|
+
pageBackground?: {
|
|
45
|
+
isUsePageBackground?: boolean;
|
|
46
|
+
background?: string;
|
|
47
|
+
};
|
|
48
|
+
timezone?: string;
|
|
44
49
|
};
|
|
45
50
|
type PageBuilderPropsV2 = {
|
|
46
51
|
builderData?: {
|
|
@@ -257,4 +262,4 @@ type BuilderPageProps = {
|
|
|
257
262
|
};
|
|
258
263
|
declare const BuilderPage: React.FC<BuilderPageProps>;
|
|
259
264
|
|
|
260
|
-
export { AppPropsWithLayout, BuilderPage, CollectionDetailPage, CollectionPageProps, ErrorBoundary, ErrorFallback, FacebookPixel, GoogleAnalytic, NextPageWithLayout, Page404, Page500, PageBuilderProps, PreviewPage, ProductDetailPage, ProductPageProps, StaticPage, StaticPageProps, StaticPagePropsV2, StaticPageV2, TikTokPixel, createAppAPIFetcher, createFetcher, createShopifyFetcher, genCSS, getBuilderProps, getCollectionProps, getFallbackV2, getFontFromGlobalStyle, getFontFromGroupSetting, getFonts, getFontsFromDataBuilder, getHomePageProps, getHomePagePropsV2, getLayout, getPostPurchasePropsPreview, getPreviewProps, getProductProps, getStaticPagePropsPreview, getStaticPagePropsV2, getStaticPaths, getStorefrontApi, isBot, normalizePageSectionResponseV2, parseBuilderTemplateV2, retryWithDelay, usePagePreview, useTrackingView };
|
|
265
|
+
export { AppPropsWithLayout, BuilderPage, CollectionDetailPage, CollectionPageProps, ErrorBoundary, ErrorFallback, FacebookPixel, GoogleAnalytic, NextPageWithLayout, Page404, Page500, PageBuilderProps, PageBuilderPropsV2, PreviewPage, ProductDetailPage, ProductPageProps, StaticPage, StaticPageProps, StaticPagePropsV2, StaticPageV2, TikTokPixel, createAppAPIFetcher, createFetcher, createShopifyFetcher, genCSS, getBuilderProps, getCollectionProps, getFallbackV2, getFontFromGlobalStyle, getFontFromGroupSetting, getFonts, getFontsFromDataBuilder, getHomePageProps, getHomePagePropsV2, getLayout, getPostPurchasePropsPreview, getPreviewProps, getProductProps, getStaticPagePropsPreview, getStaticPagePropsV2, getStaticPaths, getStorefrontApi, isBot, normalizePageSectionResponseV2, parseBuilderTemplateV2, retryWithDelay, usePagePreview, useTrackingView };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gem-sdk/pages",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.58.0-dev.114",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "dist/cjs/index.js",
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
"next": "latest"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@gem-sdk/core": "1.
|
|
30
|
-
"@gem-sdk/plugin-cookie-bar": "1.
|
|
31
|
-
"@gem-sdk/plugin-quick-view": "1.
|
|
32
|
-
"@gem-sdk/plugin-sticky-add-to-cart": "1.
|
|
29
|
+
"@gem-sdk/core": "1.58.0-dev.114",
|
|
30
|
+
"@gem-sdk/plugin-cookie-bar": "1.58.0-dev.53",
|
|
31
|
+
"@gem-sdk/plugin-quick-view": "1.58.0-dev.53",
|
|
32
|
+
"@gem-sdk/plugin-sticky-add-to-cart": "1.58.0-dev.53"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"next": ">=13"
|