@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.
Files changed (79) hide show
  1. package/dist/cjs/components/ErrorBoundary.js +32 -24
  2. package/dist/cjs/components/ErrorFallback.js +19 -2
  3. package/dist/cjs/components/FacebookPixel.js +25 -20
  4. package/dist/cjs/components/Footer.js +462 -0
  5. package/dist/cjs/components/GoogleAnalytic.js +49 -23
  6. package/dist/cjs/components/Header.js +211 -0
  7. package/dist/cjs/components/TikTokPixel.js +9 -6
  8. package/dist/cjs/components/builder/Toolbox.js +215 -188
  9. package/dist/cjs/layouts/main.js +19 -5
  10. package/dist/cjs/libs/api/get-builder-props.js +26 -24
  11. package/dist/cjs/libs/api/get-collection-props.js +59 -55
  12. package/dist/cjs/libs/api/get-home-page-props-v2.js +121 -114
  13. package/dist/cjs/libs/api/get-home-page-props.js +133 -123
  14. package/dist/cjs/libs/api/get-preview-props.js +10 -10
  15. package/dist/cjs/libs/api/get-product-props.js +64 -62
  16. package/dist/cjs/libs/api/get-static-page-props-preview.js +128 -121
  17. package/dist/cjs/libs/api/get-static-page-props-v2.js +126 -119
  18. package/dist/cjs/libs/api/get-static-page-props.js +130 -120
  19. package/dist/cjs/libs/fetcher.js +59 -63
  20. package/dist/cjs/libs/get-layout.js +5 -2
  21. package/dist/cjs/libs/get-storefront-api.js +7 -7
  22. package/dist/cjs/libs/getStaticPaths.js +5 -5
  23. package/dist/cjs/libs/google-fonts.js +54 -61
  24. package/dist/cjs/libs/helpers/gen-css.js +103 -94
  25. package/dist/cjs/libs/helpers/generate-manifres.js +1 -1
  26. package/dist/cjs/libs/helpers/get-fallback.js +24 -22
  27. package/dist/cjs/libs/helpers/normalize.js +82 -80
  28. package/dist/cjs/libs/helpers/parse-json.js +10 -12
  29. package/dist/cjs/libs/helpers/user-agent.js +2 -2
  30. package/dist/cjs/libs/hooks/use-tracking-view.js +36 -31
  31. package/dist/cjs/libs/parse-html.js +33 -26
  32. package/dist/cjs/pages/404.js +34 -2
  33. package/dist/cjs/pages/500.js +63 -8
  34. package/dist/cjs/pages/builder.js +69 -14
  35. package/dist/cjs/pages/collection-detail.js +48 -7
  36. package/dist/cjs/pages/preview.js +18 -12
  37. package/dist/cjs/pages/product-detail.js +53 -7
  38. package/dist/cjs/pages/static-v2.js +62 -7
  39. package/dist/cjs/pages/static.js +60 -6
  40. package/dist/esm/components/ErrorBoundary.js +32 -24
  41. package/dist/esm/components/ErrorFallback.js +19 -2
  42. package/dist/esm/components/FacebookPixel.js +25 -20
  43. package/dist/esm/components/Footer.js +458 -0
  44. package/dist/esm/components/GoogleAnalytic.js +49 -23
  45. package/dist/esm/components/Header.js +207 -0
  46. package/dist/esm/components/TikTokPixel.js +9 -6
  47. package/dist/esm/components/builder/Toolbox.js +217 -190
  48. package/dist/esm/layouts/main.js +19 -5
  49. package/dist/esm/libs/api/get-builder-props.js +26 -24
  50. package/dist/esm/libs/api/get-collection-props.js +59 -55
  51. package/dist/esm/libs/api/get-home-page-props-v2.js +121 -114
  52. package/dist/esm/libs/api/get-home-page-props.js +133 -123
  53. package/dist/esm/libs/api/get-preview-props.js +10 -10
  54. package/dist/esm/libs/api/get-product-props.js +64 -62
  55. package/dist/esm/libs/api/get-static-page-props-preview.js +128 -121
  56. package/dist/esm/libs/api/get-static-page-props-v2.js +126 -119
  57. package/dist/esm/libs/api/get-static-page-props.js +130 -120
  58. package/dist/esm/libs/fetcher.js +59 -63
  59. package/dist/esm/libs/get-layout.js +5 -2
  60. package/dist/esm/libs/get-storefront-api.js +7 -7
  61. package/dist/esm/libs/getStaticPaths.js +5 -5
  62. package/dist/esm/libs/google-fonts.js +54 -61
  63. package/dist/esm/libs/helpers/gen-css.js +103 -94
  64. package/dist/esm/libs/helpers/generate-manifres.js +1 -1
  65. package/dist/esm/libs/helpers/get-fallback.js +24 -22
  66. package/dist/esm/libs/helpers/normalize.js +82 -80
  67. package/dist/esm/libs/helpers/parse-json.js +10 -12
  68. package/dist/esm/libs/helpers/user-agent.js +2 -2
  69. package/dist/esm/libs/hooks/use-tracking-view.js +36 -31
  70. package/dist/esm/libs/parse-html.js +33 -26
  71. package/dist/esm/pages/404.js +34 -2
  72. package/dist/esm/pages/500.js +63 -8
  73. package/dist/esm/pages/builder.js +69 -14
  74. package/dist/esm/pages/collection-detail.js +48 -7
  75. package/dist/esm/pages/preview.js +18 -12
  76. package/dist/esm/pages/product-detail.js +53 -7
  77. package/dist/esm/pages/static-v2.js +62 -7
  78. package/dist/esm/pages/static.js +60 -6
  79. package/package.json +3 -3
@@ -2,199 +2,226 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var jsxRuntime = require('react/jsx-runtime');
5
6
  var core = require('@gem-sdk/core');
6
7
  var react = require('react');
7
8
  var googleFonts = require('../../libs/google-fonts.js');
8
9
  var genCss = require('../../libs/helpers/gen-css.js');
9
10
  var getStorefrontApi = require('../../libs/get-storefront-api.js');
10
11
 
11
- const globalStyleId = 'global-style';
12
- const globalFontId = 'google-font-builder';
13
- const Toolbox = () => {
14
- const matchMutate = core.useMatchMutate();
15
- const provider = core.useShopStore((s) => s.provider);
16
- const changeStorefrontInfo = core.useShopStore((s) => s.changeStorefrontInfo);
17
- const initState = core.useBuilderPreviewStore((s) => s.initState);
18
- const initNormalizeState = core.useBuilderPreviewStore((s) => s.forceChangeState);
19
- const changeItemPropByKey = core.useBuilderPreviewStore((s) => s.changeItemPropByKey);
20
- const addItem = core.useBuilderPreviewStore((s) => s.addItem);
21
- const moveItem = core.useBuilderPreviewStore((s) => s.moveItem);
22
- const removeItem = core.useBuilderPreviewStore((s) => s.removeItem);
23
- const addSection = core.useSectionStore((s) => s.addSection);
24
- const changeSwatches = core.useShopStore((s) => s.changeSwatches);
25
- // Revalidate all query with key match query/
26
- const onRevalidateQuery = react.useCallback(() => {
27
- matchMutate(/query\//);
28
- }, [matchMutate]);
29
- // Update shop info
30
- const onChangeShopInfo = react.useCallback((e) => {
31
- const detail = e.detail;
32
- changeStorefrontInfo({
33
- url: detail.shopHandle ? getStorefrontApi.getStorefrontApi(detail.shopHandle, provider) : undefined,
34
- token: detail.shopToken,
35
- });
36
- }, [changeStorefrontInfo, provider]);
37
- const onChangeGlobalStyle = react.useCallback((e) => {
38
- const detail = e.detail;
39
- try {
40
- if (detail.data) {
41
- const themeStyle = genCss.genCSS(detail.data, detail.mobileOnly);
42
- const font = Object.entries(detail.data?.font).map(([, value]) => {
43
- return value;
44
- });
45
- const fontUrl = googleFonts.createFontUrl(font);
46
- const globalStyle = document.getElementById(globalStyleId);
47
- const googleFont = document.getElementById(globalFontId);
48
- if (googleFont) {
49
- googleFont.getAttribute('href') !== fontUrl && googleFont.setAttribute('href', fontUrl);
50
- //
51
- }
52
- else {
53
- const link = document.createElement('link');
54
- link.id = globalFontId;
55
- link.href = fontUrl;
56
- link.rel = 'stylesheet';
57
- document.head.appendChild(link);
58
- }
59
- if (globalStyle) {
60
- globalStyle.innerHTML = themeStyle;
61
- }
62
- else {
63
- const style = document.createElement('style');
64
- style.id = globalStyleId;
65
- style.innerHTML = themeStyle;
66
- document.head.appendChild(style);
67
- }
68
- }
69
- }
70
- catch {
71
- //
72
- }
73
- }, []);
74
- // Init builder data
75
- const onInitBuilder = react.useCallback((e) => {
76
- try {
77
- const detail = e.detail;
78
- if (detail.data) {
79
- if (detail.type === 'flat') {
80
- initNormalizeState(detail.data);
81
- }
82
- else {
83
- initState(detail.data);
84
- }
85
- }
86
- }
87
- catch {
88
- //
89
- }
90
- }, [initNormalizeState, initState]);
91
- // Add new entity
92
- const onAddEntity = react.useCallback((e) => {
93
- try {
94
- const detail = e.detail;
95
- if (detail.entity) {
96
- addItem({
97
- data: detail.entity,
98
- id: detail.id,
99
- position: detail.position,
100
- type: detail.type ?? 'component',
101
- });
102
- if (detail?.type === 'section' && !Array.isArray(detail.entity)) {
103
- addSection(detail.entity.uid, detail.entity);
104
- }
105
- }
106
- }
107
- catch {
108
- //
109
- }
110
- }, [addItem, addSection]);
111
- // Update props of entity
112
- const onUpdateEntityProp = react.useCallback((e) => {
113
- try {
114
- const detail = e.detail;
115
- if (detail.uid && detail.propName) {
116
- changeItemPropByKey({
117
- id: detail.uid,
118
- key: detail.propName,
119
- data: detail.propValue,
120
- group: detail.group,
121
- });
122
- }
123
- }
124
- catch {
125
- //
126
- }
127
- }, [changeItemPropByKey]);
128
- // Move entity
129
- const onMoveEntity = react.useCallback((e) => {
130
- try {
131
- const detail = e.detail;
132
- if (detail.to && detail.uid) {
133
- moveItem(detail.uid, detail.to, Number(detail.position) ?? 0);
134
- }
135
- }
136
- catch {
137
- //
138
- }
139
- }, [moveItem]);
140
- // Remove entity
141
- const onRemoveEntity = react.useCallback((e) => {
142
- try {
143
- const detail = e.detail;
144
- if (detail.uid) {
145
- removeItem(detail.uid);
146
- }
147
- }
148
- catch {
149
- //
150
- }
151
- }, [removeItem]);
152
- // Change Swatches Data
153
- const onChangeSwatchesData = react.useCallback((e) => {
154
- const detail = e.detail;
155
- try {
156
- if (detail.data) {
157
- changeSwatches(detail.data);
158
- }
159
- }
160
- catch {
161
- //
162
- }
163
- }, [changeSwatches]);
164
- react.useEffect(() => {
165
- window.addEventListener('update-shop-info', onChangeShopInfo);
166
- window.addEventListener('revalidate-query', onRevalidateQuery);
167
- window.addEventListener('init-builder', onInitBuilder);
168
- window.addEventListener('add-entity', onAddEntity);
169
- window.addEventListener('remove-entity', onRemoveEntity);
170
- window.addEventListener('move-entity', onMoveEntity);
171
- window.addEventListener('update-entity-prop', onUpdateEntityProp);
172
- window.addEventListener('set-global-style', onChangeGlobalStyle);
173
- window.addEventListener('update-global-swatches-data', onChangeSwatchesData);
174
- return () => {
175
- window.removeEventListener('update-shop-info', onChangeShopInfo);
176
- window.removeEventListener('revalidate-query', onRevalidateQuery);
177
- window.removeEventListener('init-builder', onInitBuilder);
178
- window.removeEventListener('add-entity', onAddEntity);
179
- window.removeEventListener('remove-entity', onRemoveEntity);
180
- window.removeEventListener('move-entity', onMoveEntity);
181
- window.removeEventListener('update-entity-prop', onUpdateEntityProp);
182
- window.removeEventListener('set-global-style', onChangeGlobalStyle);
183
- window.removeEventListener('update-global-swatches-data', onChangeSwatchesData);
184
- };
185
- }, [
186
- onAddEntity,
187
- onUpdateEntityProp,
188
- onInitBuilder,
189
- onMoveEntity,
190
- onRemoveEntity,
191
- onChangeGlobalStyle,
192
- onChangeSwatchesData,
193
- onRevalidateQuery,
194
- onChangeShopInfo,
195
- ]);
196
- return null;
197
- };
198
- var Toolbox$1 = react.memo(Toolbox);
12
+ const globalStyleId = 'global-style';
13
+ const globalFontId = 'google-font-builder';
14
+ const Toolbox = ()=>{
15
+ const matchMutate = core.useMatchMutate();
16
+ const provider = core.useShopStore((s)=>s.provider);
17
+ const changeStorefrontInfo = core.useShopStore((s)=>s.changeStorefrontInfo);
18
+ const initState = core.useBuilderPreviewStore((s)=>s.initState);
19
+ const initNormalizeState = core.useBuilderPreviewStore((s)=>s.forceChangeState);
20
+ const changeItemPropByKey = core.useBuilderPreviewStore((s)=>s.changeItemPropByKey);
21
+ const addItem = core.useBuilderPreviewStore((s)=>s.addItem);
22
+ const moveItem = core.useBuilderPreviewStore((s)=>s.moveItem);
23
+ const removeItem = core.useBuilderPreviewStore((s)=>s.removeItem);
24
+ const addSection = core.useSectionStore((s)=>s.addSection);
25
+ const changeSwatches = core.useShopStore((s)=>s.changeSwatches);
26
+ const changeLayoutSettings = core.useShopStore((s)=>s.changeLayoutSettings);
27
+ const [initEventSuccess, setInitEventSuccess] = react.useState(false);
28
+ // Revalidate all query with key match query/
29
+ const onRevalidateQuery = react.useCallback(()=>{
30
+ matchMutate(/query\//);
31
+ }, [
32
+ matchMutate
33
+ ]);
34
+ // Update shop info
35
+ const onChangeShopInfo = react.useCallback((e)=>{
36
+ const detail = e.detail;
37
+ changeStorefrontInfo({
38
+ url: detail.shopHandle ? getStorefrontApi.getStorefrontApi(detail.shopHandle, provider) : undefined,
39
+ token: detail.shopToken
40
+ });
41
+ }, [
42
+ changeStorefrontInfo,
43
+ provider
44
+ ]);
45
+ const onChangeGlobalStyle = react.useCallback((e)=>{
46
+ const detail = e.detail;
47
+ try {
48
+ if (detail.data) {
49
+ const themeStyle = genCss.genCSS(detail.data, detail.mobileOnly);
50
+ const font = Object.entries(detail.data?.font).map(([, value])=>{
51
+ return value;
52
+ });
53
+ const fontUrl = googleFonts.createFontUrl(font);
54
+ const globalStyle = document.getElementById(globalStyleId);
55
+ const googleFont = document.getElementById(globalFontId);
56
+ if (googleFont) {
57
+ googleFont.getAttribute('href') !== fontUrl && googleFont.setAttribute('href', fontUrl);
58
+ //
59
+ } else {
60
+ const link = document.createElement('link');
61
+ link.id = globalFontId;
62
+ link.href = fontUrl;
63
+ link.rel = 'stylesheet';
64
+ document.head.appendChild(link);
65
+ }
66
+ if (globalStyle) {
67
+ globalStyle.innerHTML = themeStyle;
68
+ } else {
69
+ const style = document.createElement('style');
70
+ style.id = globalStyleId;
71
+ style.innerHTML = themeStyle;
72
+ document.head.appendChild(style);
73
+ }
74
+ }
75
+ } catch {
76
+ //
77
+ }
78
+ }, []);
79
+ // Init builder data
80
+ const onInitBuilder = react.useCallback((e)=>{
81
+ try {
82
+ const detail = e.detail;
83
+ if (detail.data) {
84
+ if (detail.type === 'flat') {
85
+ initNormalizeState(detail.data);
86
+ } else {
87
+ initState(detail.data);
88
+ }
89
+ }
90
+ } catch {
91
+ //
92
+ }
93
+ }, [
94
+ initNormalizeState,
95
+ initState
96
+ ]);
97
+ // Add new entity
98
+ const onAddEntity = react.useCallback((e)=>{
99
+ try {
100
+ const detail = e.detail;
101
+ if (detail.entity) {
102
+ addItem({
103
+ data: detail.entity,
104
+ id: detail.id,
105
+ position: detail.position,
106
+ type: detail.type ?? 'component'
107
+ });
108
+ if (detail?.type === 'section' && !Array.isArray(detail.entity)) {
109
+ addSection(detail.entity.uid, detail.entity);
110
+ }
111
+ }
112
+ } catch {
113
+ //
114
+ }
115
+ }, [
116
+ addItem,
117
+ addSection
118
+ ]);
119
+ // Update props of entity
120
+ const onUpdateEntityProp = react.useCallback((e)=>{
121
+ try {
122
+ const detail = e.detail;
123
+ if (detail.uid && detail.propName) {
124
+ changeItemPropByKey({
125
+ id: detail.uid,
126
+ key: detail.propName,
127
+ data: detail.propValue,
128
+ group: detail.group
129
+ });
130
+ }
131
+ } catch {
132
+ //
133
+ }
134
+ }, [
135
+ changeItemPropByKey
136
+ ]);
137
+ // Move entity
138
+ const onMoveEntity = react.useCallback((e)=>{
139
+ try {
140
+ const detail = e.detail;
141
+ if (detail.to && detail.uid) {
142
+ moveItem(detail.uid, detail.to, Number(detail.position) ?? 0);
143
+ }
144
+ } catch {
145
+ //
146
+ }
147
+ }, [
148
+ moveItem
149
+ ]);
150
+ // Remove entity
151
+ const onRemoveEntity = react.useCallback((e)=>{
152
+ try {
153
+ const detail = e.detail;
154
+ if (detail.uid) {
155
+ removeItem(detail.uid);
156
+ }
157
+ } catch {
158
+ //
159
+ }
160
+ }, [
161
+ removeItem
162
+ ]);
163
+ // Change Swatches Data
164
+ const onChangeSwatchesData = react.useCallback((e)=>{
165
+ const detail = e.detail;
166
+ try {
167
+ if (detail.data) {
168
+ changeSwatches(detail.data);
169
+ }
170
+ } catch {
171
+ //
172
+ }
173
+ }, [
174
+ changeSwatches
175
+ ]);
176
+ const onChangeLayoutSettingData = react.useCallback((e)=>{
177
+ const detail = e.detail;
178
+ if (!detail) return;
179
+ changeLayoutSettings(detail);
180
+ }, [
181
+ changeLayoutSettings
182
+ ]);
183
+ react.useEffect(()=>{
184
+ window.addEventListener('update-shop-info', onChangeShopInfo);
185
+ window.addEventListener('revalidate-query', onRevalidateQuery);
186
+ window.addEventListener('init-builder', onInitBuilder);
187
+ window.addEventListener('add-entity', onAddEntity);
188
+ window.addEventListener('remove-entity', onRemoveEntity);
189
+ window.addEventListener('move-entity', onMoveEntity);
190
+ window.addEventListener('update-entity-prop', onUpdateEntityProp);
191
+ window.addEventListener('set-global-style', onChangeGlobalStyle);
192
+ window.addEventListener('update-global-swatches-data', onChangeSwatchesData);
193
+ window.addEventListener('on-off-header-footer', onChangeLayoutSettingData);
194
+ setInitEventSuccess(true);
195
+ return ()=>{
196
+ window.removeEventListener('update-shop-info', onChangeShopInfo);
197
+ window.removeEventListener('revalidate-query', onRevalidateQuery);
198
+ window.removeEventListener('init-builder', onInitBuilder);
199
+ window.removeEventListener('add-entity', onAddEntity);
200
+ window.removeEventListener('remove-entity', onRemoveEntity);
201
+ window.removeEventListener('move-entity', onMoveEntity);
202
+ window.removeEventListener('update-entity-prop', onUpdateEntityProp);
203
+ window.removeEventListener('set-global-style', onChangeGlobalStyle);
204
+ window.removeEventListener('update-global-swatches-data', onChangeSwatchesData);
205
+ window.addEventListener('on-off-header-footer', onChangeLayoutSettingData);
206
+ };
207
+ }, [
208
+ onAddEntity,
209
+ onUpdateEntityProp,
210
+ onInitBuilder,
211
+ onMoveEntity,
212
+ onRemoveEntity,
213
+ onChangeGlobalStyle,
214
+ onChangeSwatchesData,
215
+ onRevalidateQuery,
216
+ onChangeShopInfo,
217
+ onChangeLayoutSettingData
218
+ ]);
219
+ return /*#__PURE__*/ jsxRuntime.jsx("div", {
220
+ className: core.cls({
221
+ "toolbox": initEventSuccess
222
+ })
223
+ });
224
+ };
225
+ var Toolbox$1 = /*#__PURE__*/ react.memo(Toolbox);
199
226
 
200
227
  exports.default = Toolbox$1;
@@ -6,11 +6,25 @@ var jsxRuntime = require('react/jsx-runtime');
6
6
  var core = require('@gem-sdk/core');
7
7
  var parseHtml = require('../libs/parse-html.js');
8
8
 
9
- const MainLayout = ({ children, ...props }) => {
10
- const mobileOnly = core.useShopStore((s) => s.mobileOnly);
11
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [parseHtml.parseHtml(props?.customCodeBody), jsxRuntime.jsx("div", { className: core.cls({
12
- 'max-w-mobile mx-auto w-full': mobileOnly,
13
- }), children: children }), jsxRuntime.jsx(core.AddOn, { name: "cookie-bar" }), jsxRuntime.jsx(core.AddOn, { name: "cart-drawer" })] }));
9
+ const MainLayout = ({ children , ...props })=>{
10
+ const mobileOnly = core.useShopStore((s)=>s.mobileOnly);
11
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
12
+ children: [
13
+ parseHtml.parseHtml(props?.customCodeBody),
14
+ /*#__PURE__*/ jsxRuntime.jsx("div", {
15
+ className: core.cls({
16
+ 'max-w-mobile mx-auto w-full': mobileOnly
17
+ }),
18
+ children: children
19
+ }),
20
+ /*#__PURE__*/ jsxRuntime.jsx(core.AddOn, {
21
+ name: "cookie-bar"
22
+ }),
23
+ /*#__PURE__*/ jsxRuntime.jsx(core.AddOn, {
24
+ name: "cart-drawer"
25
+ })
26
+ ]
27
+ });
14
28
  };
15
29
 
16
30
  exports.default = MainLayout;
@@ -4,30 +4,32 @@ var core = require('@gem-sdk/core');
4
4
  var adapterShopify = require('@gem-sdk/adapter-shopify');
5
5
  var parseJson = require('../helpers/parse-json.js');
6
6
 
7
- const getBuilderProps = async (fetcher, shopifyFetcher) => {
8
- const [storeProperty, shopifyMeta] = await Promise.allSettled([
9
- fetcher([core.StorePropertyDocument]),
10
- shopifyFetcher([adapterShopify.ShopMetaDocument]),
11
- ]);
12
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
13
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
14
- const seo = shopMeta
15
- ? {
16
- titleTemplate: `%s | ${shopMeta.shop.name}`,
17
- defaultTitle: shopMeta?.shop.name,
18
- title: 'Preview',
19
- description: shopMeta?.shop.description,
20
- }
21
- : {};
22
- return parseJson.serializableJson({
23
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
24
- locale: shopMeta?.localization.country.isoCode ?? null,
25
- swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
26
- swr: {
27
- revalidateOnMount: true,
28
- },
29
- seo,
30
- });
7
+ const getBuilderProps = async (fetcher, shopifyFetcher)=>{
8
+ const [storeProperty, shopifyMeta] = await Promise.allSettled([
9
+ fetcher([
10
+ core.StorePropertyDocument
11
+ ]),
12
+ shopifyFetcher([
13
+ adapterShopify.ShopMetaDocument
14
+ ])
15
+ ]);
16
+ const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
17
+ const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
18
+ const seo = shopMeta ? {
19
+ titleTemplate: `%s | ${shopMeta.shop.name}`,
20
+ defaultTitle: shopMeta?.shop.name,
21
+ title: 'Preview',
22
+ description: shopMeta?.shop.description
23
+ } : {};
24
+ return parseJson.serializableJson({
25
+ currency: shopMeta?.localization.country.currency.isoCode ?? null,
26
+ locale: shopMeta?.localization.country.isoCode ?? null,
27
+ swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
28
+ swr: {
29
+ revalidateOnMount: true
30
+ },
31
+ seo
32
+ });
31
33
  };
32
34
 
33
35
  exports.getBuilderProps = getBuilderProps;
@@ -5,60 +5,64 @@ var genCss = require('../helpers/gen-css.js');
5
5
  var normalize = require('../helpers/normalize.js');
6
6
  var parseJson = require('../helpers/parse-json.js');
7
7
 
8
- const getCollectionProps = (fetcher) => async (handle) => {
9
- const pageType = 'COLLECTION';
10
- const variables = {
11
- slug: handle,
12
- slugType: pageType,
13
- };
14
- const [collectionData, theme] = await Promise.all([
15
- fetcher([
16
- core.CollectionDocument,
17
- {
18
- handle,
19
- },
20
- ]),
21
- fetcher([
22
- core.PublishedThemePagesDocument,
23
- variables,
24
- ]),
25
- ]);
26
- const dataBuilder = theme.publishedThemePages?.[0];
27
- const collectionTemplate = normalize.parseBuilderTemplate(dataBuilder);
28
- if (!collectionData || !collectionData?.collection || !dataBuilder) {
29
- throw new Error('Collection not found');
30
- }
31
- const { collection } = collectionData;
32
- const queries = core.prefetchQueries(collectionTemplate);
33
- const datas = await Promise.allSettled(queries.map(({ query, variables, func }) => {
34
- if (func) {
35
- return func(fetcher, variables);
36
- }
37
- if (query)
38
- return fetcher([query, variables]);
39
- return {};
40
- }));
41
- const fallback = queries.reduce((acc, { key }, index) => {
42
- const res = datas[index];
43
- if (res?.status === 'fulfilled') {
44
- return {
45
- ...acc,
46
- [key]: res.value,
47
- };
48
- }
49
- return acc;
50
- }, {});
51
- return parseJson.serializableJson({
52
- builderData: collectionTemplate,
53
- collection,
54
- pageType,
55
- themeStyle: genCss.genCSS(dataBuilder.pageStyle?.data),
56
- swr: { fallback },
57
- seo: {
58
- title: collection.title,
59
- description: collection.description,
60
- },
61
- });
62
- };
8
+ const getCollectionProps = (fetcher)=>async (handle)=>{
9
+ const pageType = 'COLLECTION';
10
+ const variables = {
11
+ slug: handle,
12
+ slugType: pageType
13
+ };
14
+ const [collectionData, theme] = await Promise.all([
15
+ fetcher([
16
+ core.CollectionDocument,
17
+ {
18
+ handle
19
+ }
20
+ ]),
21
+ fetcher([
22
+ core.PublishedThemePagesDocument,
23
+ variables
24
+ ])
25
+ ]);
26
+ const dataBuilder = theme.publishedThemePages?.[0];
27
+ const collectionTemplate = normalize.parseBuilderTemplate(dataBuilder);
28
+ if (!collectionData || !collectionData?.collection || !dataBuilder) {
29
+ throw new Error('Collection not found');
30
+ }
31
+ const { collection } = collectionData;
32
+ const queries = core.prefetchQueries(collectionTemplate);
33
+ const datas = await Promise.allSettled(queries.map(({ query , variables , func })=>{
34
+ if (func) {
35
+ return func(fetcher, variables);
36
+ }
37
+ if (query) return fetcher([
38
+ query,
39
+ variables
40
+ ]);
41
+ return {};
42
+ }));
43
+ const fallback = queries.reduce((acc, { key }, index)=>{
44
+ const res = datas[index];
45
+ if (res?.status === 'fulfilled') {
46
+ return {
47
+ ...acc,
48
+ [key]: res.value
49
+ };
50
+ }
51
+ return acc;
52
+ }, {});
53
+ return parseJson.serializableJson({
54
+ builderData: collectionTemplate,
55
+ collection,
56
+ pageType,
57
+ themeStyle: genCss.genCSS(dataBuilder.pageStyle?.data),
58
+ swr: {
59
+ fallback
60
+ },
61
+ seo: {
62
+ title: collection.title,
63
+ description: collection.description
64
+ }
65
+ });
66
+ };
63
67
 
64
68
  exports.getCollectionProps = getCollectionProps;