@weaverse/hydrogen 1.1.4 → 1.1.6
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 +5 -20
- package/dist/index.d.ts +5 -20
- package/dist/index.js +52 -85
- package/dist/index.mjs +50 -81
- package/package.json +7 -7
package/dist/index.d.mts
CHANGED
|
@@ -175,17 +175,8 @@ type HydrogenPageData = {
|
|
|
175
175
|
type RelativeRoutingType = 'route' | 'path';
|
|
176
176
|
type To = string | Partial<Path>;
|
|
177
177
|
type Path = {
|
|
178
|
-
/**
|
|
179
|
-
* A URL pathname, beginning with a /.
|
|
180
|
-
*/
|
|
181
178
|
pathname: string;
|
|
182
|
-
/**
|
|
183
|
-
* A URL search string, beginning with a ?.
|
|
184
|
-
*/
|
|
185
179
|
search: string;
|
|
186
|
-
/**
|
|
187
|
-
* A URL fragment identifier, beginning with a #.
|
|
188
|
-
*/
|
|
189
180
|
hash: string;
|
|
190
181
|
};
|
|
191
182
|
type NavigateOptions = {
|
|
@@ -197,6 +188,8 @@ type NavigateOptions = {
|
|
|
197
188
|
type NavigateFunction = (to: To, options?: NavigateOptions) => void;
|
|
198
189
|
interface WeaverseHydrogenRootProps {
|
|
199
190
|
components: HydrogenComponent[];
|
|
191
|
+
countries: Localizations;
|
|
192
|
+
themeSchema: HydrogenThemeSchema;
|
|
200
193
|
errorComponent: React.FC<{
|
|
201
194
|
error: {
|
|
202
195
|
message: string;
|
|
@@ -228,12 +221,12 @@ type FetchProjectRequestBody = {
|
|
|
228
221
|
countries: Localizations;
|
|
229
222
|
i18n?: I18nLocale;
|
|
230
223
|
loaderConfigs?: WeaverseLoaderConfigs;
|
|
224
|
+
isDesignMode?: boolean;
|
|
231
225
|
};
|
|
232
226
|
declare global {
|
|
233
227
|
interface Window {
|
|
234
228
|
__weaverse: WeaverseHydrogen;
|
|
235
229
|
__weaverses: WeaverseHydrogen[];
|
|
236
|
-
__weaverseThemeConfigs: WeaverseThemeConfigs;
|
|
237
230
|
}
|
|
238
231
|
}
|
|
239
232
|
|
|
@@ -249,20 +242,12 @@ declare function fetchWithServerCache(params: FetchWithServerCacheParams): Promi
|
|
|
249
242
|
|
|
250
243
|
declare function weaverseLoader(args: LoaderArgs, components: HydrogenComponent[], countries: Localizations, loaderConfigs?: WeaverseLoaderConfigs): Promise<WeaverseLoaderData | null>;
|
|
251
244
|
|
|
252
|
-
declare function WeaverseStudio(): React.JSX.Element | null;
|
|
253
|
-
|
|
254
245
|
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
255
|
-
/**
|
|
256
|
-
* Check if the request is from Weaverse Studio.
|
|
257
|
-
* @param request Request
|
|
258
|
-
* @returns boolean
|
|
259
|
-
*/
|
|
260
|
-
declare function studioCheck(request: Request): boolean;
|
|
261
246
|
|
|
262
247
|
declare function getSelectedProductOptions(request: Request): _shopify_hydrogen_react_storefront_api_types.SelectedOptionInput[];
|
|
263
248
|
|
|
264
249
|
declare function useThemeSettings(): (Record<string, any> | ((newSettings: any) => void))[];
|
|
265
250
|
|
|
266
|
-
declare function WeaverseHydrogenRoot({
|
|
251
|
+
declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, ...themeConfigs }: WeaverseHydrogenRootProps): React.JSX.Element;
|
|
267
252
|
|
|
268
|
-
export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData,
|
|
253
|
+
export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, useThemeSettings, weaverseLoader };
|
package/dist/index.d.ts
CHANGED
|
@@ -175,17 +175,8 @@ type HydrogenPageData = {
|
|
|
175
175
|
type RelativeRoutingType = 'route' | 'path';
|
|
176
176
|
type To = string | Partial<Path>;
|
|
177
177
|
type Path = {
|
|
178
|
-
/**
|
|
179
|
-
* A URL pathname, beginning with a /.
|
|
180
|
-
*/
|
|
181
178
|
pathname: string;
|
|
182
|
-
/**
|
|
183
|
-
* A URL search string, beginning with a ?.
|
|
184
|
-
*/
|
|
185
179
|
search: string;
|
|
186
|
-
/**
|
|
187
|
-
* A URL fragment identifier, beginning with a #.
|
|
188
|
-
*/
|
|
189
180
|
hash: string;
|
|
190
181
|
};
|
|
191
182
|
type NavigateOptions = {
|
|
@@ -197,6 +188,8 @@ type NavigateOptions = {
|
|
|
197
188
|
type NavigateFunction = (to: To, options?: NavigateOptions) => void;
|
|
198
189
|
interface WeaverseHydrogenRootProps {
|
|
199
190
|
components: HydrogenComponent[];
|
|
191
|
+
countries: Localizations;
|
|
192
|
+
themeSchema: HydrogenThemeSchema;
|
|
200
193
|
errorComponent: React.FC<{
|
|
201
194
|
error: {
|
|
202
195
|
message: string;
|
|
@@ -228,12 +221,12 @@ type FetchProjectRequestBody = {
|
|
|
228
221
|
countries: Localizations;
|
|
229
222
|
i18n?: I18nLocale;
|
|
230
223
|
loaderConfigs?: WeaverseLoaderConfigs;
|
|
224
|
+
isDesignMode?: boolean;
|
|
231
225
|
};
|
|
232
226
|
declare global {
|
|
233
227
|
interface Window {
|
|
234
228
|
__weaverse: WeaverseHydrogen;
|
|
235
229
|
__weaverses: WeaverseHydrogen[];
|
|
236
|
-
__weaverseThemeConfigs: WeaverseThemeConfigs;
|
|
237
230
|
}
|
|
238
231
|
}
|
|
239
232
|
|
|
@@ -249,20 +242,12 @@ declare function fetchWithServerCache(params: FetchWithServerCacheParams): Promi
|
|
|
249
242
|
|
|
250
243
|
declare function weaverseLoader(args: LoaderArgs, components: HydrogenComponent[], countries: Localizations, loaderConfigs?: WeaverseLoaderConfigs): Promise<WeaverseLoaderData | null>;
|
|
251
244
|
|
|
252
|
-
declare function WeaverseStudio(): React.JSX.Element | null;
|
|
253
|
-
|
|
254
245
|
declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
|
|
255
|
-
/**
|
|
256
|
-
* Check if the request is from Weaverse Studio.
|
|
257
|
-
* @param request Request
|
|
258
|
-
* @returns boolean
|
|
259
|
-
*/
|
|
260
|
-
declare function studioCheck(request: Request): boolean;
|
|
261
246
|
|
|
262
247
|
declare function getSelectedProductOptions(request: Request): _shopify_hydrogen_react_storefront_api_types.SelectedOptionInput[];
|
|
263
248
|
|
|
264
249
|
declare function useThemeSettings(): (Record<string, any> | ((newSettings: any) => void))[];
|
|
265
250
|
|
|
266
|
-
declare function WeaverseHydrogenRoot({
|
|
251
|
+
declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, ...themeConfigs }: WeaverseHydrogenRootProps): React.JSX.Element;
|
|
267
252
|
|
|
268
|
-
export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData,
|
|
253
|
+
export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, useThemeSettings, weaverseLoader };
|
package/dist/index.js
CHANGED
|
@@ -32,18 +32,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
32
32
|
var src_exports = {};
|
|
33
33
|
__export(src_exports, {
|
|
34
34
|
WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
|
|
35
|
-
WeaverseStudio: () => WeaverseStudio,
|
|
36
35
|
fetchWithServerCache: () => fetchWithServerCache,
|
|
37
36
|
getRequestQueries: () => getRequestQueries,
|
|
38
37
|
getSelectedProductOptions: () => getSelectedProductOptions,
|
|
39
|
-
studioCheck: () => studioCheck,
|
|
40
38
|
useThemeSettings: () => useThemeSettings,
|
|
41
39
|
weaverseLoader: () => weaverseLoader
|
|
42
40
|
});
|
|
43
41
|
module.exports = __toCommonJS(src_exports);
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
-
var
|
|
42
|
+
var import_react6 = require("@remix-run/react");
|
|
43
|
+
var import_react7 = require("@weaverse/react");
|
|
44
|
+
var import_react8 = __toESM(require("react"));
|
|
47
45
|
var import_react_error_boundary = require("react-error-boundary");
|
|
48
46
|
|
|
49
47
|
// src/context.ts
|
|
@@ -58,6 +56,8 @@ function createCachedWeaverseInstance(init) {
|
|
|
58
56
|
if (!weaverse) {
|
|
59
57
|
weaverse = new import_react.Weaverse(init);
|
|
60
58
|
window.__weaverses.push(weaverse);
|
|
59
|
+
} else {
|
|
60
|
+
weaverse.setProjectData(init.data);
|
|
61
61
|
}
|
|
62
62
|
return weaverse;
|
|
63
63
|
}
|
|
@@ -72,10 +72,9 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
72
72
|
...configs,
|
|
73
73
|
data: page || {},
|
|
74
74
|
pageId: page?.id,
|
|
75
|
-
platformType: "shopify-hydrogen"
|
|
75
|
+
platformType: "shopify-hydrogen",
|
|
76
|
+
internal: { project, pageAssignment }
|
|
76
77
|
});
|
|
77
|
-
weaverse.internal.project = project;
|
|
78
|
-
weaverse.internal.pageAssignment = pageAssignment;
|
|
79
78
|
components.forEach((comp) => {
|
|
80
79
|
weaverse.registerElement({
|
|
81
80
|
type: comp?.schema?.type,
|
|
@@ -90,22 +89,29 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
90
89
|
var import_react2 = require("@remix-run/react");
|
|
91
90
|
var import_react3 = require("@weaverse/react");
|
|
92
91
|
var import_react4 = require("react");
|
|
93
|
-
function useStudio(weaverse) {
|
|
92
|
+
function useStudio(weaverse, countries, schema) {
|
|
94
93
|
let navigate = (0, import_react2.useNavigate)();
|
|
95
94
|
let revalidator = (0, import_react2.useRevalidator)();
|
|
95
|
+
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
96
|
+
let isStudio = import_react3.isIframe && isDesignMode && weaverseHost && weaverseVersion;
|
|
96
97
|
(0, import_react4.useEffect)(() => {
|
|
97
|
-
if (
|
|
98
|
+
if (isStudio) {
|
|
98
99
|
weaverse.internal = {
|
|
99
100
|
...weaverse.internal,
|
|
100
101
|
navigate,
|
|
101
|
-
revalidator
|
|
102
|
+
revalidator,
|
|
103
|
+
themeConfigs: { schema, countries }
|
|
102
104
|
};
|
|
103
105
|
window.__weaverse = weaverse;
|
|
104
106
|
if (window.weaverseStudio) {
|
|
105
107
|
window.weaverseStudio.init(weaverse);
|
|
108
|
+
} else {
|
|
109
|
+
(0, import_react3.loadScript)(
|
|
110
|
+
`${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`
|
|
111
|
+
);
|
|
106
112
|
}
|
|
107
113
|
}
|
|
108
|
-
}, [weaverse]);
|
|
114
|
+
}, [weaverse, revalidator]);
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
// src/index.tsx
|
|
@@ -138,13 +144,6 @@ function getRequestQueries(request) {
|
|
|
138
144
|
{}
|
|
139
145
|
);
|
|
140
146
|
}
|
|
141
|
-
function studioCheck(request) {
|
|
142
|
-
let queries = getRequestQueries(request);
|
|
143
|
-
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
144
|
-
return Boolean(
|
|
145
|
-
isDesignMode && weaverseProjectId && weaverseHost && weaverseVersion
|
|
146
|
-
);
|
|
147
|
-
}
|
|
148
147
|
|
|
149
148
|
// src/loader.ts
|
|
150
149
|
async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
@@ -153,7 +152,7 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
|
153
152
|
let { request, context, params } = args;
|
|
154
153
|
let queries = getRequestQueries(request);
|
|
155
154
|
let { WEAVERSE_PROJECT_ID, WEAVERSE_HOST } = context?.env || {};
|
|
156
|
-
let { weaverseProjectId, weaverseHost } = queries;
|
|
155
|
+
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
157
156
|
let projectId = weaverseProjectId || WEAVERSE_PROJECT_ID;
|
|
158
157
|
weaverseHost = weaverseHost || WEAVERSE_HOST || "https://weaverse.io";
|
|
159
158
|
if (!projectId) {
|
|
@@ -163,17 +162,27 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
|
163
162
|
}
|
|
164
163
|
let i18n = context?.storefront?.i18n;
|
|
165
164
|
let reqBody = {
|
|
165
|
+
isDesignMode,
|
|
166
166
|
i18n,
|
|
167
167
|
countries,
|
|
168
168
|
projectId,
|
|
169
169
|
loaderConfigs,
|
|
170
170
|
url: request.url
|
|
171
171
|
};
|
|
172
|
-
let
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
172
|
+
let url = `${weaverseHost}/api/public/project`;
|
|
173
|
+
let payload;
|
|
174
|
+
if (isDesignMode) {
|
|
175
|
+
payload = await fetch(url, {
|
|
176
|
+
method: "POST",
|
|
177
|
+
body: JSON.stringify(reqBody)
|
|
178
|
+
}).then((res) => res.json());
|
|
179
|
+
} else {
|
|
180
|
+
payload = await fetchWithServerCache({
|
|
181
|
+
url,
|
|
182
|
+
options: { method: "POST", body: JSON.stringify(reqBody) },
|
|
183
|
+
context
|
|
184
|
+
});
|
|
185
|
+
}
|
|
177
186
|
let { page, project, pageAssignment } = payload;
|
|
178
187
|
if (!page || !project || !pageAssignment) {
|
|
179
188
|
throw new Error(
|
|
@@ -184,8 +193,8 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
|
184
193
|
let configs = {
|
|
185
194
|
projectId,
|
|
186
195
|
weaverseHost,
|
|
187
|
-
weaverseVersion
|
|
188
|
-
isDesignMode
|
|
196
|
+
weaverseVersion,
|
|
197
|
+
isDesignMode,
|
|
189
198
|
requestInfo: {
|
|
190
199
|
i18n,
|
|
191
200
|
params,
|
|
@@ -230,40 +239,6 @@ async function withLoaderData(items, components, configs, args) {
|
|
|
230
239
|
);
|
|
231
240
|
}
|
|
232
241
|
|
|
233
|
-
// src/studio.tsx
|
|
234
|
-
var import_react5 = require("@remix-run/react");
|
|
235
|
-
var import_react6 = __toESM(require("react"));
|
|
236
|
-
function WeaverseStudio() {
|
|
237
|
-
let { search } = (0, import_react5.useLocation)();
|
|
238
|
-
let { weaverseThemeConfigs } = (0, import_react5.useLoaderData)();
|
|
239
|
-
if (weaverseThemeConfigs instanceof Promise) {
|
|
240
|
-
let params = new URLSearchParams(search);
|
|
241
|
-
let weaverseHost = params.get("weaverseHost");
|
|
242
|
-
let weaverseVersion = params.get("weaverseVersion");
|
|
243
|
-
return /* @__PURE__ */ import_react6.default.createElement(import_react6.Suspense, null, /* @__PURE__ */ import_react6.default.createElement(import_react5.Await, { resolve: weaverseThemeConfigs }, (configs) => {
|
|
244
|
-
if (!configs)
|
|
245
|
-
return null;
|
|
246
|
-
return /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement(
|
|
247
|
-
"script",
|
|
248
|
-
{
|
|
249
|
-
src: `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`,
|
|
250
|
-
async: true
|
|
251
|
-
}
|
|
252
|
-
), /* @__PURE__ */ import_react6.default.createElement(
|
|
253
|
-
"script",
|
|
254
|
-
{
|
|
255
|
-
dangerouslySetInnerHTML: {
|
|
256
|
-
__html: `window.__weaverseThemeConfigs = ${JSON.stringify(
|
|
257
|
-
configs
|
|
258
|
-
)}`
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
));
|
|
262
|
-
}));
|
|
263
|
-
}
|
|
264
|
-
return null;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
242
|
// src/hydrogen-wrappers.ts
|
|
268
243
|
var import_hydrogen2 = require("@shopify/hydrogen");
|
|
269
244
|
function getSelectedProductOptions(request) {
|
|
@@ -274,9 +249,9 @@ function getSelectedProductOptions(request) {
|
|
|
274
249
|
}
|
|
275
250
|
|
|
276
251
|
// src/hooks/use-theme-settings.ts
|
|
277
|
-
var
|
|
252
|
+
var import_react5 = require("@weaverse/react");
|
|
278
253
|
function useThemeSettings() {
|
|
279
|
-
let weaverse = (0,
|
|
254
|
+
let weaverse = (0, import_react5.useWeaverse)();
|
|
280
255
|
let settings = weaverse?.internal?.project?.config?.theme;
|
|
281
256
|
let updateSettings = (newSettings) => {
|
|
282
257
|
weaverse.internal.project.config.theme = Object.assign(
|
|
@@ -291,32 +266,26 @@ function useThemeSettings() {
|
|
|
291
266
|
|
|
292
267
|
// src/index.tsx
|
|
293
268
|
function WeaverseHydrogenRoot({
|
|
294
|
-
|
|
295
|
-
|
|
269
|
+
errorComponent: ErrorComponent,
|
|
270
|
+
...themeConfigs
|
|
296
271
|
}) {
|
|
297
|
-
let data = (0,
|
|
298
|
-
let
|
|
299
|
-
if (
|
|
300
|
-
if (
|
|
301
|
-
return /* @__PURE__ */
|
|
302
|
-
return /* @__PURE__ */
|
|
272
|
+
let data = (0, import_react6.useLoaderData)();
|
|
273
|
+
let weaverseData = data?.weaverseData;
|
|
274
|
+
if (weaverseData) {
|
|
275
|
+
if (weaverseData instanceof Promise) {
|
|
276
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react8.default.createElement(import_react8.Suspense, null, /* @__PURE__ */ import_react8.default.createElement(import_react6.Await, { resolve: weaverseData }, (resolvedData) => {
|
|
277
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
303
278
|
RenderWeaverseRoot,
|
|
304
279
|
{
|
|
305
280
|
weaverseData: resolvedData,
|
|
306
|
-
|
|
281
|
+
...themeConfigs
|
|
307
282
|
}
|
|
308
283
|
);
|
|
309
284
|
})));
|
|
310
285
|
}
|
|
311
|
-
return /* @__PURE__ */
|
|
312
|
-
RenderWeaverseRoot,
|
|
313
|
-
{
|
|
314
|
-
weaverseData: weaverseDataFromLoader,
|
|
315
|
-
components
|
|
316
|
-
}
|
|
317
|
-
);
|
|
286
|
+
return /* @__PURE__ */ import_react8.default.createElement(RenderWeaverseRoot, { weaverseData, ...themeConfigs });
|
|
318
287
|
}
|
|
319
|
-
return /* @__PURE__ */
|
|
288
|
+
return /* @__PURE__ */ import_react8.default.createElement(
|
|
320
289
|
ErrorComponent,
|
|
321
290
|
{
|
|
322
291
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -324,19 +293,17 @@ function WeaverseHydrogenRoot({
|
|
|
324
293
|
);
|
|
325
294
|
}
|
|
326
295
|
function RenderWeaverseRoot(props) {
|
|
327
|
-
let { components,
|
|
296
|
+
let { weaverseData, components, countries, themeSchema } = props;
|
|
328
297
|
let weaverse = createWeaverseInstance(weaverseData, components);
|
|
329
|
-
useStudio(weaverse);
|
|
330
|
-
return /* @__PURE__ */
|
|
298
|
+
useStudio(weaverse, countries, themeSchema);
|
|
299
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react7.WeaverseRoot, { context: weaverse });
|
|
331
300
|
}
|
|
332
301
|
// Annotate the CommonJS export names for ESM import in node:
|
|
333
302
|
0 && (module.exports = {
|
|
334
303
|
WeaverseHydrogenRoot,
|
|
335
|
-
WeaverseStudio,
|
|
336
304
|
fetchWithServerCache,
|
|
337
305
|
getRequestQueries,
|
|
338
306
|
getSelectedProductOptions,
|
|
339
|
-
studioCheck,
|
|
340
307
|
useThemeSettings,
|
|
341
308
|
weaverseLoader,
|
|
342
309
|
...require("@weaverse/react")
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/index.tsx
|
|
2
|
-
import { Await
|
|
2
|
+
import { Await, useLoaderData } from "@remix-run/react";
|
|
3
3
|
import { WeaverseRoot } from "@weaverse/react";
|
|
4
|
-
import
|
|
4
|
+
import React, { Suspense } from "react";
|
|
5
5
|
import { ErrorBoundary } from "react-error-boundary";
|
|
6
6
|
|
|
7
7
|
// src/context.ts
|
|
@@ -16,6 +16,8 @@ function createCachedWeaverseInstance(init) {
|
|
|
16
16
|
if (!weaverse) {
|
|
17
17
|
weaverse = new Weaverse(init);
|
|
18
18
|
window.__weaverses.push(weaverse);
|
|
19
|
+
} else {
|
|
20
|
+
weaverse.setProjectData(init.data);
|
|
19
21
|
}
|
|
20
22
|
return weaverse;
|
|
21
23
|
}
|
|
@@ -30,10 +32,9 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
30
32
|
...configs,
|
|
31
33
|
data: page || {},
|
|
32
34
|
pageId: page?.id,
|
|
33
|
-
platformType: "shopify-hydrogen"
|
|
35
|
+
platformType: "shopify-hydrogen",
|
|
36
|
+
internal: { project, pageAssignment }
|
|
34
37
|
});
|
|
35
|
-
weaverse.internal.project = project;
|
|
36
|
-
weaverse.internal.pageAssignment = pageAssignment;
|
|
37
38
|
components.forEach((comp) => {
|
|
38
39
|
weaverse.registerElement({
|
|
39
40
|
type: comp?.schema?.type,
|
|
@@ -46,24 +47,31 @@ function createWeaverseInstance(weaverseData, components) {
|
|
|
46
47
|
|
|
47
48
|
// src/hooks/use-studio.ts
|
|
48
49
|
import { useNavigate, useRevalidator } from "@remix-run/react";
|
|
49
|
-
import { isIframe } from "@weaverse/react";
|
|
50
|
+
import { isIframe, loadScript } from "@weaverse/react";
|
|
50
51
|
import { useEffect } from "react";
|
|
51
|
-
function useStudio(weaverse) {
|
|
52
|
+
function useStudio(weaverse, countries, schema) {
|
|
52
53
|
let navigate = useNavigate();
|
|
53
54
|
let revalidator = useRevalidator();
|
|
55
|
+
let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
|
|
56
|
+
let isStudio = isIframe && isDesignMode && weaverseHost && weaverseVersion;
|
|
54
57
|
useEffect(() => {
|
|
55
|
-
if (
|
|
58
|
+
if (isStudio) {
|
|
56
59
|
weaverse.internal = {
|
|
57
60
|
...weaverse.internal,
|
|
58
61
|
navigate,
|
|
59
|
-
revalidator
|
|
62
|
+
revalidator,
|
|
63
|
+
themeConfigs: { schema, countries }
|
|
60
64
|
};
|
|
61
65
|
window.__weaverse = weaverse;
|
|
62
66
|
if (window.weaverseStudio) {
|
|
63
67
|
window.weaverseStudio.init(weaverse);
|
|
68
|
+
} else {
|
|
69
|
+
loadScript(
|
|
70
|
+
`${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`
|
|
71
|
+
);
|
|
64
72
|
}
|
|
65
73
|
}
|
|
66
|
-
}, [weaverse]);
|
|
74
|
+
}, [weaverse, revalidator]);
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
// src/index.tsx
|
|
@@ -96,13 +104,6 @@ function getRequestQueries(request) {
|
|
|
96
104
|
{}
|
|
97
105
|
);
|
|
98
106
|
}
|
|
99
|
-
function studioCheck(request) {
|
|
100
|
-
let queries = getRequestQueries(request);
|
|
101
|
-
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
102
|
-
return Boolean(
|
|
103
|
-
isDesignMode && weaverseProjectId && weaverseHost && weaverseVersion
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
107
|
|
|
107
108
|
// src/loader.ts
|
|
108
109
|
async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
@@ -111,7 +112,7 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
|
111
112
|
let { request, context, params } = args;
|
|
112
113
|
let queries = getRequestQueries(request);
|
|
113
114
|
let { WEAVERSE_PROJECT_ID, WEAVERSE_HOST } = context?.env || {};
|
|
114
|
-
let { weaverseProjectId, weaverseHost } = queries;
|
|
115
|
+
let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
|
|
115
116
|
let projectId = weaverseProjectId || WEAVERSE_PROJECT_ID;
|
|
116
117
|
weaverseHost = weaverseHost || WEAVERSE_HOST || "https://weaverse.io";
|
|
117
118
|
if (!projectId) {
|
|
@@ -121,17 +122,27 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
|
121
122
|
}
|
|
122
123
|
let i18n = context?.storefront?.i18n;
|
|
123
124
|
let reqBody = {
|
|
125
|
+
isDesignMode,
|
|
124
126
|
i18n,
|
|
125
127
|
countries,
|
|
126
128
|
projectId,
|
|
127
129
|
loaderConfigs,
|
|
128
130
|
url: request.url
|
|
129
131
|
};
|
|
130
|
-
let
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
let url = `${weaverseHost}/api/public/project`;
|
|
133
|
+
let payload;
|
|
134
|
+
if (isDesignMode) {
|
|
135
|
+
payload = await fetch(url, {
|
|
136
|
+
method: "POST",
|
|
137
|
+
body: JSON.stringify(reqBody)
|
|
138
|
+
}).then((res) => res.json());
|
|
139
|
+
} else {
|
|
140
|
+
payload = await fetchWithServerCache({
|
|
141
|
+
url,
|
|
142
|
+
options: { method: "POST", body: JSON.stringify(reqBody) },
|
|
143
|
+
context
|
|
144
|
+
});
|
|
145
|
+
}
|
|
135
146
|
let { page, project, pageAssignment } = payload;
|
|
136
147
|
if (!page || !project || !pageAssignment) {
|
|
137
148
|
throw new Error(
|
|
@@ -142,8 +153,8 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
|
|
|
142
153
|
let configs = {
|
|
143
154
|
projectId,
|
|
144
155
|
weaverseHost,
|
|
145
|
-
weaverseVersion
|
|
146
|
-
isDesignMode
|
|
156
|
+
weaverseVersion,
|
|
157
|
+
isDesignMode,
|
|
147
158
|
requestInfo: {
|
|
148
159
|
i18n,
|
|
149
160
|
params,
|
|
@@ -188,40 +199,6 @@ async function withLoaderData(items, components, configs, args) {
|
|
|
188
199
|
);
|
|
189
200
|
}
|
|
190
201
|
|
|
191
|
-
// src/studio.tsx
|
|
192
|
-
import { Await, useLoaderData, useLocation } from "@remix-run/react";
|
|
193
|
-
import React, { Suspense } from "react";
|
|
194
|
-
function WeaverseStudio() {
|
|
195
|
-
let { search } = useLocation();
|
|
196
|
-
let { weaverseThemeConfigs } = useLoaderData();
|
|
197
|
-
if (weaverseThemeConfigs instanceof Promise) {
|
|
198
|
-
let params = new URLSearchParams(search);
|
|
199
|
-
let weaverseHost = params.get("weaverseHost");
|
|
200
|
-
let weaverseVersion = params.get("weaverseVersion");
|
|
201
|
-
return /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: weaverseThemeConfigs }, (configs) => {
|
|
202
|
-
if (!configs)
|
|
203
|
-
return null;
|
|
204
|
-
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
205
|
-
"script",
|
|
206
|
-
{
|
|
207
|
-
src: `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`,
|
|
208
|
-
async: true
|
|
209
|
-
}
|
|
210
|
-
), /* @__PURE__ */ React.createElement(
|
|
211
|
-
"script",
|
|
212
|
-
{
|
|
213
|
-
dangerouslySetInnerHTML: {
|
|
214
|
-
__html: `window.__weaverseThemeConfigs = ${JSON.stringify(
|
|
215
|
-
configs
|
|
216
|
-
)}`
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
));
|
|
220
|
-
}));
|
|
221
|
-
}
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
202
|
// src/hydrogen-wrappers.ts
|
|
226
203
|
import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from "@shopify/hydrogen";
|
|
227
204
|
function getSelectedProductOptions(request) {
|
|
@@ -249,32 +226,26 @@ function useThemeSettings() {
|
|
|
249
226
|
|
|
250
227
|
// src/index.tsx
|
|
251
228
|
function WeaverseHydrogenRoot({
|
|
252
|
-
|
|
253
|
-
|
|
229
|
+
errorComponent: ErrorComponent,
|
|
230
|
+
...themeConfigs
|
|
254
231
|
}) {
|
|
255
|
-
let data =
|
|
256
|
-
let
|
|
257
|
-
if (
|
|
258
|
-
if (
|
|
259
|
-
return /* @__PURE__ */
|
|
260
|
-
return /* @__PURE__ */
|
|
232
|
+
let data = useLoaderData();
|
|
233
|
+
let weaverseData = data?.weaverseData;
|
|
234
|
+
if (weaverseData) {
|
|
235
|
+
if (weaverseData instanceof Promise) {
|
|
236
|
+
return /* @__PURE__ */ React.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: weaverseData }, (resolvedData) => {
|
|
237
|
+
return /* @__PURE__ */ React.createElement(
|
|
261
238
|
RenderWeaverseRoot,
|
|
262
239
|
{
|
|
263
240
|
weaverseData: resolvedData,
|
|
264
|
-
|
|
241
|
+
...themeConfigs
|
|
265
242
|
}
|
|
266
243
|
);
|
|
267
244
|
})));
|
|
268
245
|
}
|
|
269
|
-
return /* @__PURE__ */
|
|
270
|
-
RenderWeaverseRoot,
|
|
271
|
-
{
|
|
272
|
-
weaverseData: weaverseDataFromLoader,
|
|
273
|
-
components
|
|
274
|
-
}
|
|
275
|
-
);
|
|
246
|
+
return /* @__PURE__ */ React.createElement(RenderWeaverseRoot, { weaverseData, ...themeConfigs });
|
|
276
247
|
}
|
|
277
|
-
return /* @__PURE__ */
|
|
248
|
+
return /* @__PURE__ */ React.createElement(
|
|
278
249
|
ErrorComponent,
|
|
279
250
|
{
|
|
280
251
|
error: { message: "No Weaverse data return from route loader!" }
|
|
@@ -282,18 +253,16 @@ function WeaverseHydrogenRoot({
|
|
|
282
253
|
);
|
|
283
254
|
}
|
|
284
255
|
function RenderWeaverseRoot(props) {
|
|
285
|
-
let { components,
|
|
256
|
+
let { weaverseData, components, countries, themeSchema } = props;
|
|
286
257
|
let weaverse = createWeaverseInstance(weaverseData, components);
|
|
287
|
-
useStudio(weaverse);
|
|
288
|
-
return /* @__PURE__ */
|
|
258
|
+
useStudio(weaverse, countries, themeSchema);
|
|
259
|
+
return /* @__PURE__ */ React.createElement(WeaverseRoot, { context: weaverse });
|
|
289
260
|
}
|
|
290
261
|
export {
|
|
291
262
|
WeaverseHydrogenRoot,
|
|
292
|
-
WeaverseStudio,
|
|
293
263
|
fetchWithServerCache,
|
|
294
264
|
getRequestQueries,
|
|
295
265
|
getSelectedProductOptions,
|
|
296
|
-
studioCheck,
|
|
297
266
|
useThemeSettings,
|
|
298
267
|
weaverseLoader
|
|
299
268
|
};
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.1.
|
|
2
|
+
"version": "1.1.6",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
"name": "@weaverse/hydrogen",
|
|
33
33
|
"author": "Weaverse Team",
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@remix-run/react": "1.19.
|
|
36
|
-
"@shopify/hydrogen": "2023.7.
|
|
37
|
-
"@weaverse/react": "1.1.
|
|
38
|
-
"react-error-boundary": "^4.0.
|
|
35
|
+
"@remix-run/react": "1.19.3",
|
|
36
|
+
"@shopify/hydrogen": "2023.7.2",
|
|
37
|
+
"@weaverse/react": "1.1.6",
|
|
38
|
+
"react-error-boundary": "^4.0.11"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@shopify/remix-oxygen": "^1.1.
|
|
41
|
+
"@shopify/remix-oxygen": "^1.1.3"
|
|
42
42
|
}
|
|
43
|
-
}
|
|
43
|
+
}
|