@weaverse/hydrogen 2.7.4 → 2.8.1
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/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +92 -78
- package/dist/index.mjs +75 -61
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -140,7 +140,6 @@ type WeaverseLoaderRequestInfo = {
|
|
|
140
140
|
};
|
|
141
141
|
type WeaverseStorefrontData = {
|
|
142
142
|
id?: string;
|
|
143
|
-
__cachedId?: string;
|
|
144
143
|
rootId: string;
|
|
145
144
|
name: string;
|
|
146
145
|
items: HydrogenComponentData[];
|
|
@@ -227,9 +226,9 @@ interface WeaverseLoaderData {
|
|
|
227
226
|
}
|
|
228
227
|
interface HydrogenPageData extends WeaverseProjectDataType {
|
|
229
228
|
id: string;
|
|
230
|
-
pageId: string;
|
|
231
229
|
name: string;
|
|
232
230
|
items: HydrogenComponentData[];
|
|
231
|
+
__cacheId?: string;
|
|
233
232
|
[key: string]: any;
|
|
234
233
|
}
|
|
235
234
|
interface WeaverseHydrogenRootProps {
|
|
@@ -273,6 +272,7 @@ type FetchProjectPayload = {
|
|
|
273
272
|
page: HydrogenPageData;
|
|
274
273
|
project: HydrogenProjectType;
|
|
275
274
|
pageAssignment: HydrogenPageAssignment;
|
|
275
|
+
error?: string;
|
|
276
276
|
};
|
|
277
277
|
type HydrogenThemeEnv = {
|
|
278
278
|
WEAVERSE_PROJECT_ID: string;
|
|
@@ -310,7 +310,7 @@ type WeaverseArticle = WeaverseResourcePickerData;
|
|
|
310
310
|
declare global {
|
|
311
311
|
interface Window {
|
|
312
312
|
__weaverse: WeaverseHydrogen;
|
|
313
|
-
__weaverses: WeaverseHydrogen
|
|
313
|
+
__weaverses: Record<string, WeaverseHydrogen>;
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
316
|
|
package/dist/index.d.ts
CHANGED
|
@@ -140,7 +140,6 @@ type WeaverseLoaderRequestInfo = {
|
|
|
140
140
|
};
|
|
141
141
|
type WeaverseStorefrontData = {
|
|
142
142
|
id?: string;
|
|
143
|
-
__cachedId?: string;
|
|
144
143
|
rootId: string;
|
|
145
144
|
name: string;
|
|
146
145
|
items: HydrogenComponentData[];
|
|
@@ -227,9 +226,9 @@ interface WeaverseLoaderData {
|
|
|
227
226
|
}
|
|
228
227
|
interface HydrogenPageData extends WeaverseProjectDataType {
|
|
229
228
|
id: string;
|
|
230
|
-
pageId: string;
|
|
231
229
|
name: string;
|
|
232
230
|
items: HydrogenComponentData[];
|
|
231
|
+
__cacheId?: string;
|
|
233
232
|
[key: string]: any;
|
|
234
233
|
}
|
|
235
234
|
interface WeaverseHydrogenRootProps {
|
|
@@ -273,6 +272,7 @@ type FetchProjectPayload = {
|
|
|
273
272
|
page: HydrogenPageData;
|
|
274
273
|
project: HydrogenProjectType;
|
|
275
274
|
pageAssignment: HydrogenPageAssignment;
|
|
275
|
+
error?: string;
|
|
276
276
|
};
|
|
277
277
|
type HydrogenThemeEnv = {
|
|
278
278
|
WEAVERSE_PROJECT_ID: string;
|
|
@@ -310,7 +310,7 @@ type WeaverseArticle = WeaverseResourcePickerData;
|
|
|
310
310
|
declare global {
|
|
311
311
|
interface Window {
|
|
312
312
|
__weaverse: WeaverseHydrogen;
|
|
313
|
-
__weaverses: WeaverseHydrogen
|
|
313
|
+
__weaverses: Record<string, WeaverseHydrogen>;
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
316
|
|
package/dist/index.js
CHANGED
|
@@ -38,15 +38,15 @@ __export(src_exports, {
|
|
|
38
38
|
getRequestQueries: () => getRequestQueries,
|
|
39
39
|
getSelectedProductOptions: () => getSelectedProductOptions,
|
|
40
40
|
getWeaverseConfigs: () => getWeaverseConfigs,
|
|
41
|
-
useChildInstances: () =>
|
|
42
|
-
useItemInstance: () =>
|
|
43
|
-
useParentInstance: () =>
|
|
41
|
+
useChildInstances: () => import_react16.useChildInstances,
|
|
42
|
+
useItemInstance: () => import_react16.useItemInstance,
|
|
43
|
+
useParentInstance: () => import_react16.useParentInstance,
|
|
44
44
|
useThemeSettings: () => useThemeSettings,
|
|
45
|
-
useWeaverse: () =>
|
|
45
|
+
useWeaverse: () => import_react16.useWeaverse,
|
|
46
46
|
withWeaverse: () => withWeaverse
|
|
47
47
|
});
|
|
48
48
|
module.exports = __toCommonJS(src_exports);
|
|
49
|
-
var
|
|
49
|
+
var import_react16 = require("@weaverse/react");
|
|
50
50
|
|
|
51
51
|
// src/components/main.tsx
|
|
52
52
|
var main_exports = {};
|
|
@@ -69,9 +69,9 @@ var schema = {
|
|
|
69
69
|
var defaultComponents = [main_exports];
|
|
70
70
|
|
|
71
71
|
// src/WeaverseHydrogenRoot.tsx
|
|
72
|
-
var
|
|
73
|
-
var
|
|
74
|
-
var
|
|
72
|
+
var import_react13 = require("@remix-run/react");
|
|
73
|
+
var import_react14 = require("@weaverse/react");
|
|
74
|
+
var import_react15 = __toESM(require("react"));
|
|
75
75
|
var import_react_error_boundary = require("react-error-boundary");
|
|
76
76
|
|
|
77
77
|
// src/context.ts
|
|
@@ -79,17 +79,13 @@ var import_react2 = require("@weaverse/react");
|
|
|
79
79
|
var import_react3 = require("react");
|
|
80
80
|
function createCachedWeaverseInstance(params, components) {
|
|
81
81
|
if (import_react2.isBrowser) {
|
|
82
|
-
window.__weaverses = window.__weaverses ||
|
|
83
|
-
let weaverse = window.__weaverses.
|
|
84
|
-
let { pathname } = w.requestInfo;
|
|
85
|
-
return pathname === params.requestInfo.pathname;
|
|
86
|
-
});
|
|
82
|
+
window.__weaverses = window.__weaverses || {};
|
|
83
|
+
let weaverse = window.__weaverses[params.pageId];
|
|
87
84
|
if (!weaverse) {
|
|
88
85
|
weaverse = new WeaverseHydrogen(params, components);
|
|
89
|
-
window.__weaverses.
|
|
86
|
+
window.__weaverses[params.pageId] = weaverse;
|
|
90
87
|
} else if (weaverse.isDesignMode) {
|
|
91
|
-
|
|
92
|
-
weaverse.setProjectData(params.data);
|
|
88
|
+
window.weaverseStudio?.refresh(params);
|
|
93
89
|
}
|
|
94
90
|
return weaverse;
|
|
95
91
|
}
|
|
@@ -110,17 +106,18 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
110
106
|
var ThemeProvider = (0, import_react3.createContext)(null);
|
|
111
107
|
ThemeProvider.displayName = "WeaverseThemeProvider";
|
|
112
108
|
|
|
113
|
-
// src/hooks/use-
|
|
114
|
-
var
|
|
115
|
-
var
|
|
116
|
-
var import_react9 = require("react");
|
|
109
|
+
// src/hooks/use-theme-settings.ts
|
|
110
|
+
var import_react5 = require("react");
|
|
111
|
+
var import_react6 = require("@weaverse/react");
|
|
117
112
|
|
|
118
113
|
// src/hooks/use-theme-context.ts
|
|
119
|
-
var
|
|
114
|
+
var import_react4 = require("react");
|
|
115
|
+
function useThemeContext() {
|
|
116
|
+
let themeContext = (0, import_react4.useContext)(ThemeProvider);
|
|
117
|
+
return themeContext || new ThemeSettingsStore({ theme: {} });
|
|
118
|
+
}
|
|
120
119
|
|
|
121
120
|
// src/hooks/use-theme-settings.ts
|
|
122
|
-
var import_react4 = require("react");
|
|
123
|
-
var import_react5 = require("@weaverse/react");
|
|
124
121
|
var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
125
122
|
static settings = null;
|
|
126
123
|
listeners = [];
|
|
@@ -129,7 +126,7 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
|
129
126
|
publicEnv;
|
|
130
127
|
constructor(data) {
|
|
131
128
|
let { theme, countries, schema: schema2, publicEnv } = data || {};
|
|
132
|
-
if (
|
|
129
|
+
if (import_react6.isBrowser && _ThemeSettingsStore.settings) {
|
|
133
130
|
_ThemeSettingsStore.settings = {
|
|
134
131
|
...theme,
|
|
135
132
|
..._ThemeSettingsStore.settings
|
|
@@ -168,7 +165,7 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
|
168
165
|
};
|
|
169
166
|
function useThemeSettings() {
|
|
170
167
|
let themeSettingsStore = useThemeContext();
|
|
171
|
-
let settings = (0,
|
|
168
|
+
let settings = (0, import_react5.useSyncExternalStore)(
|
|
172
169
|
themeSettingsStore.subscribe,
|
|
173
170
|
themeSettingsStore.getSnapshot,
|
|
174
171
|
themeSettingsStore.getServerSnapshot
|
|
@@ -176,68 +173,83 @@ function useThemeSettings() {
|
|
|
176
173
|
return settings;
|
|
177
174
|
}
|
|
178
175
|
|
|
179
|
-
// src/
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
176
|
+
// src/Effect.tsx
|
|
177
|
+
var import_react12 = require("react");
|
|
178
|
+
|
|
179
|
+
// src/hooks/use-pixel.ts
|
|
180
|
+
var import_react7 = require("react");
|
|
181
|
+
var import_react8 = require("@remix-run/react");
|
|
182
|
+
var fetchingKey = "";
|
|
183
|
+
function usePixel(context) {
|
|
184
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
185
|
+
let location = (0, import_react8.useLocation)();
|
|
186
|
+
(0, import_react7.useEffect)(() => {
|
|
187
|
+
if (isDesignMode || !projectId || !pageId || !weaverseHost)
|
|
188
|
+
return;
|
|
189
|
+
let currentKey = `${projectId}-${pageId}-${location.pathname}`;
|
|
190
|
+
if (fetchingKey === currentKey)
|
|
191
|
+
return;
|
|
192
|
+
fetchingKey = currentKey;
|
|
193
|
+
let url = `${weaverseHost}/api/public/px`;
|
|
194
|
+
let xhr = new XMLHttpRequest();
|
|
195
|
+
xhr.open("POST", url, true);
|
|
196
|
+
xhr.setRequestHeader("Content-Type", "application/json");
|
|
197
|
+
xhr.send(JSON.stringify({ projectId, pageId }));
|
|
198
|
+
}, [location]);
|
|
183
199
|
}
|
|
184
200
|
|
|
185
201
|
// src/hooks/use-studio.ts
|
|
202
|
+
var import_react9 = require("@remix-run/react");
|
|
203
|
+
var import_react10 = require("@weaverse/react");
|
|
204
|
+
var import_react11 = require("react");
|
|
186
205
|
function useStudio(weaverse) {
|
|
187
|
-
let { revalidate } = (0,
|
|
188
|
-
let
|
|
206
|
+
let { revalidate } = (0, import_react9.useRevalidator)();
|
|
207
|
+
let { pathname, search } = (0, import_react9.useLocation)();
|
|
208
|
+
let navigate = (0, import_react9.useNavigate)();
|
|
189
209
|
let themeSettingsStore = useThemeContext();
|
|
190
210
|
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (isStudio) {
|
|
211
|
+
(0, import_react11.useEffect)(() => {
|
|
212
|
+
if (isDesignMode) {
|
|
194
213
|
weaverse.internal = {
|
|
195
214
|
...weaverse.internal,
|
|
196
215
|
navigate,
|
|
197
216
|
revalidate,
|
|
198
217
|
themeSettingsStore
|
|
199
218
|
};
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
window.weaverseStudio
|
|
203
|
-
}
|
|
204
|
-
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
205
|
-
(0, import_react8.loadScript)(studioSrc);
|
|
206
|
-
}
|
|
219
|
+
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
220
|
+
(0, import_react10.loadScript)(studioSrc).then(() => {
|
|
221
|
+
window.weaverseStudio?.init(weaverse);
|
|
222
|
+
}).catch(console.error);
|
|
207
223
|
}
|
|
208
|
-
}, [
|
|
224
|
+
}, [pathname, search]);
|
|
209
225
|
}
|
|
210
226
|
|
|
211
|
-
// src/
|
|
212
|
-
var
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
};
|
|
217
|
-
var WeaversePixel = ({ context }) => {
|
|
218
|
-
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
219
|
-
if (isDesignMode || !projectId || !pageId || !weaverseHost)
|
|
227
|
+
// src/Effect.tsx
|
|
228
|
+
var WeaverseEffect = (0, import_react12.memo)(
|
|
229
|
+
({ context }) => {
|
|
230
|
+
useStudio(context);
|
|
231
|
+
usePixel(context);
|
|
220
232
|
return null;
|
|
221
|
-
|
|
222
|
-
|
|
233
|
+
}
|
|
234
|
+
);
|
|
223
235
|
|
|
224
236
|
// src/WeaverseHydrogenRoot.tsx
|
|
225
|
-
var WeaverseHydrogenRoot = (0,
|
|
237
|
+
var WeaverseHydrogenRoot = (0, import_react15.memo)(
|
|
226
238
|
({
|
|
227
239
|
errorComponent: ErrorComponent = FallbackError,
|
|
228
240
|
components
|
|
229
241
|
}) => {
|
|
230
|
-
let loaderData = (0,
|
|
242
|
+
let loaderData = (0, import_react13.useLoaderData)();
|
|
231
243
|
let data = loaderData?.weaverseData;
|
|
232
244
|
if (data) {
|
|
233
245
|
if (data instanceof Promise) {
|
|
234
|
-
return /* @__PURE__ */
|
|
235
|
-
return /* @__PURE__ */
|
|
246
|
+
return /* @__PURE__ */ import_react15.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react15.default.createElement(import_react15.Suspense, null, /* @__PURE__ */ import_react15.default.createElement(import_react13.Await, { resolve: data }, (resolvedData) => {
|
|
247
|
+
return /* @__PURE__ */ import_react15.default.createElement(RenderRoot, { data: resolvedData, components });
|
|
236
248
|
})));
|
|
237
249
|
}
|
|
238
|
-
return /* @__PURE__ */
|
|
250
|
+
return /* @__PURE__ */ import_react15.default.createElement(RenderRoot, { data, components });
|
|
239
251
|
}
|
|
240
|
-
return /* @__PURE__ */
|
|
252
|
+
return /* @__PURE__ */ import_react15.default.createElement(
|
|
241
253
|
ErrorComponent,
|
|
242
254
|
{
|
|
243
255
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -248,18 +260,17 @@ var WeaverseHydrogenRoot = (0, import_react13.memo)(
|
|
|
248
260
|
function RenderRoot(props) {
|
|
249
261
|
let { data, components } = props;
|
|
250
262
|
let weaverse = createWeaverseInstance(data, components);
|
|
251
|
-
|
|
252
|
-
return /* @__PURE__ */ import_react13.default.createElement(import_react13.default.Fragment, null, /* @__PURE__ */ import_react13.default.createElement(import_react12.WeaverseRoot, { context: weaverse }), /* @__PURE__ */ import_react13.default.createElement(WeaversePixel, { context: weaverse }));
|
|
263
|
+
return /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, /* @__PURE__ */ import_react15.default.createElement(import_react14.WeaverseRoot, { context: weaverse }), /* @__PURE__ */ import_react15.default.createElement(WeaverseEffect, { context: weaverse }));
|
|
253
264
|
}
|
|
254
265
|
function withWeaverse(Component) {
|
|
255
266
|
return (props) => {
|
|
256
|
-
let loaderData = (0,
|
|
267
|
+
let loaderData = (0, import_react13.useRouteLoaderData)("root");
|
|
257
268
|
let themeSettingsStore = new ThemeSettingsStore(loaderData?.weaverseTheme);
|
|
258
|
-
return /* @__PURE__ */
|
|
269
|
+
return /* @__PURE__ */ import_react15.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react15.default.createElement(Component, { ...props }));
|
|
259
270
|
};
|
|
260
271
|
}
|
|
261
272
|
function FallbackError({ error }) {
|
|
262
|
-
return /* @__PURE__ */
|
|
273
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", null, error?.message || "An unexpected error occurred");
|
|
263
274
|
}
|
|
264
275
|
|
|
265
276
|
// src/weaverse-client.ts
|
|
@@ -270,7 +281,7 @@ var package_default = {
|
|
|
270
281
|
name: "@weaverse/hydrogen",
|
|
271
282
|
author: "Weaverse Team",
|
|
272
283
|
description: "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
|
|
273
|
-
version: "2.
|
|
284
|
+
version: "2.8.1",
|
|
274
285
|
license: "MIT",
|
|
275
286
|
main: "dist/index.js",
|
|
276
287
|
typings: "dist/index.d.ts",
|
|
@@ -308,7 +319,7 @@ var package_default = {
|
|
|
308
319
|
singleQuote: true
|
|
309
320
|
},
|
|
310
321
|
dependencies: {
|
|
311
|
-
"@weaverse/react": "2.
|
|
322
|
+
"@weaverse/react": "2.8.1",
|
|
312
323
|
"react-error-boundary": "^4.0.11"
|
|
313
324
|
},
|
|
314
325
|
devDependencies: {
|
|
@@ -513,18 +524,19 @@ var WeaverseClient = class {
|
|
|
513
524
|
strategy
|
|
514
525
|
});
|
|
515
526
|
}
|
|
527
|
+
if (payload?.error) {
|
|
528
|
+
throw new Error(payload?.error);
|
|
529
|
+
}
|
|
516
530
|
let { page, project, pageAssignment } = payload;
|
|
517
|
-
if (!
|
|
518
|
-
throw new Error(
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
);
|
|
531
|
+
if (!project) {
|
|
532
|
+
throw new Error(`Weaverse project not found. Id: ${projectId}`);
|
|
533
|
+
}
|
|
534
|
+
if (!page) {
|
|
535
|
+
throw new Error(`No Weaverse page assigned to this url.`);
|
|
522
536
|
}
|
|
523
537
|
if (page?.items) {
|
|
524
538
|
let items = page.items;
|
|
525
|
-
page.items = await Promise.all(
|
|
526
|
-
items.map((item) => this.execComponentLoader(item))
|
|
527
|
-
);
|
|
539
|
+
page.items = await Promise.all(items.map(this.execComponentLoader));
|
|
528
540
|
}
|
|
529
541
|
let data = {
|
|
530
542
|
page,
|
|
@@ -534,6 +546,7 @@ var WeaverseClient = class {
|
|
|
534
546
|
...basePageConfigs,
|
|
535
547
|
requestInfo: {
|
|
536
548
|
i18n: storefront.i18n,
|
|
549
|
+
// TODO: @hta218 - migrate to Remix hooks
|
|
537
550
|
queries: getRequestQueries(request),
|
|
538
551
|
pathname: new URL(request.url).pathname,
|
|
539
552
|
search: new URL(request.url).search
|
|
@@ -550,7 +563,7 @@ var WeaverseClient = class {
|
|
|
550
563
|
execComponentLoader = async (item) => {
|
|
551
564
|
let { data = {}, type, id } = item;
|
|
552
565
|
let schema2 = this.components.find(({ schema: schema3 }) => schema3?.type === type);
|
|
553
|
-
let
|
|
566
|
+
let loader = schema2?.loader;
|
|
554
567
|
if (loader && typeof loader === "function") {
|
|
555
568
|
try {
|
|
556
569
|
return {
|
|
@@ -579,12 +592,13 @@ function getSelectedProductOptions(request) {
|
|
|
579
592
|
}
|
|
580
593
|
|
|
581
594
|
// src/index.ts
|
|
582
|
-
var WeaverseHydrogen = class extends
|
|
595
|
+
var WeaverseHydrogen = class extends import_react16.Weaverse {
|
|
583
596
|
platformType = "shopify-hydrogen";
|
|
584
597
|
pageId;
|
|
585
598
|
internal;
|
|
586
599
|
requestInfo;
|
|
587
600
|
constructor(params, components) {
|
|
601
|
+
console.log("\u{1F4BF} New WeaverseHydrogen", params);
|
|
588
602
|
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
589
603
|
super({ ...coreParams, ItemConstructor: WeaverseHydrogenItem });
|
|
590
604
|
this.internal = internal;
|
|
@@ -595,7 +609,7 @@ var WeaverseHydrogen = class extends import_react14.Weaverse {
|
|
|
595
609
|
}
|
|
596
610
|
registerComponents = (components) => {
|
|
597
611
|
components.forEach((comp) => {
|
|
598
|
-
|
|
612
|
+
import_react16.Weaverse.registerElement({
|
|
599
613
|
type: comp?.schema?.type,
|
|
600
614
|
Component: comp?.default,
|
|
601
615
|
schema: comp?.schema,
|
|
@@ -604,7 +618,7 @@ var WeaverseHydrogen = class extends import_react14.Weaverse {
|
|
|
604
618
|
});
|
|
605
619
|
};
|
|
606
620
|
};
|
|
607
|
-
var WeaverseHydrogenItem = class extends
|
|
621
|
+
var WeaverseHydrogenItem = class extends import_react16.WeaverseItemStore {
|
|
608
622
|
constructor(initialData, weaverse) {
|
|
609
623
|
super(initialData, weaverse);
|
|
610
624
|
let { data, ...rest } = initialData;
|
package/dist/index.mjs
CHANGED
|
@@ -37,7 +37,7 @@ var defaultComponents = [main_exports];
|
|
|
37
37
|
// src/WeaverseHydrogenRoot.tsx
|
|
38
38
|
import { Await, useLoaderData, useRouteLoaderData } from "@remix-run/react";
|
|
39
39
|
import { WeaverseRoot } from "@weaverse/react";
|
|
40
|
-
import
|
|
40
|
+
import React2, { memo as memo2, Suspense } from "react";
|
|
41
41
|
import { ErrorBoundary } from "react-error-boundary";
|
|
42
42
|
|
|
43
43
|
// src/context.ts
|
|
@@ -45,17 +45,13 @@ import { isBrowser } from "@weaverse/react";
|
|
|
45
45
|
import { createContext } from "react";
|
|
46
46
|
function createCachedWeaverseInstance(params, components) {
|
|
47
47
|
if (isBrowser) {
|
|
48
|
-
window.__weaverses = window.__weaverses ||
|
|
49
|
-
let weaverse = window.__weaverses.
|
|
50
|
-
let { pathname } = w.requestInfo;
|
|
51
|
-
return pathname === params.requestInfo.pathname;
|
|
52
|
-
});
|
|
48
|
+
window.__weaverses = window.__weaverses || {};
|
|
49
|
+
let weaverse = window.__weaverses[params.pageId];
|
|
53
50
|
if (!weaverse) {
|
|
54
51
|
weaverse = new WeaverseHydrogen(params, components);
|
|
55
|
-
window.__weaverses.
|
|
52
|
+
window.__weaverses[params.pageId] = weaverse;
|
|
56
53
|
} else if (weaverse.isDesignMode) {
|
|
57
|
-
|
|
58
|
-
weaverse.setProjectData(params.data);
|
|
54
|
+
window.weaverseStudio?.refresh(params);
|
|
59
55
|
}
|
|
60
56
|
return weaverse;
|
|
61
57
|
}
|
|
@@ -76,17 +72,18 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
76
72
|
var ThemeProvider = createContext(null);
|
|
77
73
|
ThemeProvider.displayName = "WeaverseThemeProvider";
|
|
78
74
|
|
|
79
|
-
// src/hooks/use-
|
|
80
|
-
import {
|
|
81
|
-
import {
|
|
82
|
-
import { useEffect } from "react";
|
|
75
|
+
// src/hooks/use-theme-settings.ts
|
|
76
|
+
import { useSyncExternalStore } from "react";
|
|
77
|
+
import { isBrowser as isBrowser2 } from "@weaverse/react";
|
|
83
78
|
|
|
84
79
|
// src/hooks/use-theme-context.ts
|
|
85
80
|
import { useContext } from "react";
|
|
81
|
+
function useThemeContext() {
|
|
82
|
+
let themeContext = useContext(ThemeProvider);
|
|
83
|
+
return themeContext || new ThemeSettingsStore({ theme: {} });
|
|
84
|
+
}
|
|
86
85
|
|
|
87
86
|
// src/hooks/use-theme-settings.ts
|
|
88
|
-
import { useSyncExternalStore } from "react";
|
|
89
|
-
import { isBrowser as isBrowser2 } from "@weaverse/react";
|
|
90
87
|
var ThemeSettingsStore = class _ThemeSettingsStore {
|
|
91
88
|
static settings = null;
|
|
92
89
|
listeners = [];
|
|
@@ -142,53 +139,68 @@ function useThemeSettings() {
|
|
|
142
139
|
return settings;
|
|
143
140
|
}
|
|
144
141
|
|
|
145
|
-
// src/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
142
|
+
// src/Effect.tsx
|
|
143
|
+
import { memo } from "react";
|
|
144
|
+
|
|
145
|
+
// src/hooks/use-pixel.ts
|
|
146
|
+
import { useEffect } from "react";
|
|
147
|
+
import { useLocation } from "@remix-run/react";
|
|
148
|
+
var fetchingKey = "";
|
|
149
|
+
function usePixel(context) {
|
|
150
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
151
|
+
let location = useLocation();
|
|
152
|
+
useEffect(() => {
|
|
153
|
+
if (isDesignMode || !projectId || !pageId || !weaverseHost)
|
|
154
|
+
return;
|
|
155
|
+
let currentKey = `${projectId}-${pageId}-${location.pathname}`;
|
|
156
|
+
if (fetchingKey === currentKey)
|
|
157
|
+
return;
|
|
158
|
+
fetchingKey = currentKey;
|
|
159
|
+
let url = `${weaverseHost}/api/public/px`;
|
|
160
|
+
let xhr = new XMLHttpRequest();
|
|
161
|
+
xhr.open("POST", url, true);
|
|
162
|
+
xhr.setRequestHeader("Content-Type", "application/json");
|
|
163
|
+
xhr.send(JSON.stringify({ projectId, pageId }));
|
|
164
|
+
}, [location]);
|
|
149
165
|
}
|
|
150
166
|
|
|
151
167
|
// src/hooks/use-studio.ts
|
|
168
|
+
import { useLocation as useLocation2, useNavigate, useRevalidator } from "@remix-run/react";
|
|
169
|
+
import { loadScript } from "@weaverse/react";
|
|
170
|
+
import { useEffect as useEffect2 } from "react";
|
|
152
171
|
function useStudio(weaverse) {
|
|
153
172
|
let { revalidate } = useRevalidator();
|
|
173
|
+
let { pathname, search } = useLocation2();
|
|
154
174
|
let navigate = useNavigate();
|
|
155
175
|
let themeSettingsStore = useThemeContext();
|
|
156
176
|
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
if (isStudio) {
|
|
177
|
+
useEffect2(() => {
|
|
178
|
+
if (isDesignMode) {
|
|
160
179
|
weaverse.internal = {
|
|
161
180
|
...weaverse.internal,
|
|
162
181
|
navigate,
|
|
163
182
|
revalidate,
|
|
164
183
|
themeSettingsStore
|
|
165
184
|
};
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
window.weaverseStudio
|
|
169
|
-
}
|
|
170
|
-
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
171
|
-
loadScript(studioSrc);
|
|
172
|
-
}
|
|
185
|
+
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
186
|
+
loadScript(studioSrc).then(() => {
|
|
187
|
+
window.weaverseStudio?.init(weaverse);
|
|
188
|
+
}).catch(console.error);
|
|
173
189
|
}
|
|
174
|
-
}, [
|
|
190
|
+
}, [pathname, search]);
|
|
175
191
|
}
|
|
176
192
|
|
|
177
|
-
// src/
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
};
|
|
183
|
-
var WeaversePixel = ({ context }) => {
|
|
184
|
-
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
185
|
-
if (isDesignMode || !projectId || !pageId || !weaverseHost)
|
|
193
|
+
// src/Effect.tsx
|
|
194
|
+
var WeaverseEffect = memo(
|
|
195
|
+
({ context }) => {
|
|
196
|
+
useStudio(context);
|
|
197
|
+
usePixel(context);
|
|
186
198
|
return null;
|
|
187
|
-
|
|
188
|
-
|
|
199
|
+
}
|
|
200
|
+
);
|
|
189
201
|
|
|
190
202
|
// src/WeaverseHydrogenRoot.tsx
|
|
191
|
-
var WeaverseHydrogenRoot =
|
|
203
|
+
var WeaverseHydrogenRoot = memo2(
|
|
192
204
|
({
|
|
193
205
|
errorComponent: ErrorComponent = FallbackError,
|
|
194
206
|
components
|
|
@@ -197,13 +209,13 @@ var WeaverseHydrogenRoot = memo(
|
|
|
197
209
|
let data = loaderData?.weaverseData;
|
|
198
210
|
if (data) {
|
|
199
211
|
if (data instanceof Promise) {
|
|
200
|
-
return /* @__PURE__ */
|
|
201
|
-
return /* @__PURE__ */
|
|
212
|
+
return /* @__PURE__ */ React2.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React2.createElement(Suspense, null, /* @__PURE__ */ React2.createElement(Await, { resolve: data }, (resolvedData) => {
|
|
213
|
+
return /* @__PURE__ */ React2.createElement(RenderRoot, { data: resolvedData, components });
|
|
202
214
|
})));
|
|
203
215
|
}
|
|
204
|
-
return /* @__PURE__ */
|
|
216
|
+
return /* @__PURE__ */ React2.createElement(RenderRoot, { data, components });
|
|
205
217
|
}
|
|
206
|
-
return /* @__PURE__ */
|
|
218
|
+
return /* @__PURE__ */ React2.createElement(
|
|
207
219
|
ErrorComponent,
|
|
208
220
|
{
|
|
209
221
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -214,18 +226,17 @@ var WeaverseHydrogenRoot = memo(
|
|
|
214
226
|
function RenderRoot(props) {
|
|
215
227
|
let { data, components } = props;
|
|
216
228
|
let weaverse = createWeaverseInstance(data, components);
|
|
217
|
-
|
|
218
|
-
return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(WeaverseRoot, { context: weaverse }), /* @__PURE__ */ React3.createElement(WeaversePixel, { context: weaverse }));
|
|
229
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(WeaverseRoot, { context: weaverse }), /* @__PURE__ */ React2.createElement(WeaverseEffect, { context: weaverse }));
|
|
219
230
|
}
|
|
220
231
|
function withWeaverse(Component) {
|
|
221
232
|
return (props) => {
|
|
222
233
|
let loaderData = useRouteLoaderData("root");
|
|
223
234
|
let themeSettingsStore = new ThemeSettingsStore(loaderData?.weaverseTheme);
|
|
224
|
-
return /* @__PURE__ */
|
|
235
|
+
return /* @__PURE__ */ React2.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ React2.createElement(Component, { ...props }));
|
|
225
236
|
};
|
|
226
237
|
}
|
|
227
238
|
function FallbackError({ error }) {
|
|
228
|
-
return /* @__PURE__ */
|
|
239
|
+
return /* @__PURE__ */ React2.createElement("div", null, error?.message || "An unexpected error occurred");
|
|
229
240
|
}
|
|
230
241
|
|
|
231
242
|
// src/weaverse-client.ts
|
|
@@ -236,7 +247,7 @@ var package_default = {
|
|
|
236
247
|
name: "@weaverse/hydrogen",
|
|
237
248
|
author: "Weaverse Team",
|
|
238
249
|
description: "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
|
|
239
|
-
version: "2.
|
|
250
|
+
version: "2.8.1",
|
|
240
251
|
license: "MIT",
|
|
241
252
|
main: "dist/index.js",
|
|
242
253
|
typings: "dist/index.d.ts",
|
|
@@ -274,7 +285,7 @@ var package_default = {
|
|
|
274
285
|
singleQuote: true
|
|
275
286
|
},
|
|
276
287
|
dependencies: {
|
|
277
|
-
"@weaverse/react": "2.
|
|
288
|
+
"@weaverse/react": "2.8.1",
|
|
278
289
|
"react-error-boundary": "^4.0.11"
|
|
279
290
|
},
|
|
280
291
|
devDependencies: {
|
|
@@ -479,18 +490,19 @@ var WeaverseClient = class {
|
|
|
479
490
|
strategy
|
|
480
491
|
});
|
|
481
492
|
}
|
|
493
|
+
if (payload?.error) {
|
|
494
|
+
throw new Error(payload?.error);
|
|
495
|
+
}
|
|
482
496
|
let { page, project, pageAssignment } = payload;
|
|
483
|
-
if (!
|
|
484
|
-
throw new Error(
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
);
|
|
497
|
+
if (!project) {
|
|
498
|
+
throw new Error(`Weaverse project not found. Id: ${projectId}`);
|
|
499
|
+
}
|
|
500
|
+
if (!page) {
|
|
501
|
+
throw new Error(`No Weaverse page assigned to this url.`);
|
|
488
502
|
}
|
|
489
503
|
if (page?.items) {
|
|
490
504
|
let items = page.items;
|
|
491
|
-
page.items = await Promise.all(
|
|
492
|
-
items.map((item) => this.execComponentLoader(item))
|
|
493
|
-
);
|
|
505
|
+
page.items = await Promise.all(items.map(this.execComponentLoader));
|
|
494
506
|
}
|
|
495
507
|
let data = {
|
|
496
508
|
page,
|
|
@@ -500,6 +512,7 @@ var WeaverseClient = class {
|
|
|
500
512
|
...basePageConfigs,
|
|
501
513
|
requestInfo: {
|
|
502
514
|
i18n: storefront.i18n,
|
|
515
|
+
// TODO: @hta218 - migrate to Remix hooks
|
|
503
516
|
queries: getRequestQueries(request),
|
|
504
517
|
pathname: new URL(request.url).pathname,
|
|
505
518
|
search: new URL(request.url).search
|
|
@@ -516,7 +529,7 @@ var WeaverseClient = class {
|
|
|
516
529
|
execComponentLoader = async (item) => {
|
|
517
530
|
let { data = {}, type, id } = item;
|
|
518
531
|
let schema2 = this.components.find(({ schema: schema3 }) => schema3?.type === type);
|
|
519
|
-
let
|
|
532
|
+
let loader = schema2?.loader;
|
|
520
533
|
if (loader && typeof loader === "function") {
|
|
521
534
|
try {
|
|
522
535
|
return {
|
|
@@ -551,6 +564,7 @@ var WeaverseHydrogen = class extends Weaverse {
|
|
|
551
564
|
internal;
|
|
552
565
|
requestInfo;
|
|
553
566
|
constructor(params, components) {
|
|
567
|
+
console.log("\u{1F4BF} New WeaverseHydrogen", params);
|
|
554
568
|
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
555
569
|
super({ ...coreParams, ItemConstructor: WeaverseHydrogenItem });
|
|
556
570
|
this.internal = internal;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@weaverse/hydrogen",
|
|
3
3
|
"author": "Weaverse Team",
|
|
4
4
|
"description": "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.8.1",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"typings": "dist/index.d.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"singleQuote": true
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@weaverse/react": "2.
|
|
43
|
+
"@weaverse/react": "2.8.1",
|
|
44
44
|
"react-error-boundary": "^4.0.11"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|