@comet/site-react 7.21.0-canary-20250522145352
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/LICENSE +24 -0
- package/lib/blockLoader/blockLoader.d.ts +32 -0
- package/lib/blockLoader/blockLoader.d.ts.map +1 -0
- package/lib/blockLoader/blockLoader.js +57 -0
- package/lib/blocks/PropsWithData.d.ts +4 -0
- package/lib/blocks/PropsWithData.d.ts.map +1 -0
- package/lib/blocks/SvgImageBlock.d.ts +9 -0
- package/lib/blocks/SvgImageBlock.d.ts.map +1 -0
- package/lib/blocks/SvgImageBlock.js +23 -0
- package/lib/blocks/factories/BlocksBlock.d.ts +15 -0
- package/lib/blocks/factories/BlocksBlock.d.ts.map +1 -0
- package/lib/blocks/factories/BlocksBlock.js +30 -0
- package/lib/blocks/factories/ListBlock.d.ts +14 -0
- package/lib/blocks/factories/ListBlock.d.ts.map +1 -0
- package/lib/blocks/factories/ListBlock.js +13 -0
- package/lib/blocks/factories/OneOfBlock.d.ts +15 -0
- package/lib/blocks/factories/OneOfBlock.d.ts.map +1 -0
- package/lib/blocks/factories/OneOfBlock.js +26 -0
- package/lib/blocks/factories/OptionalBlock.d.ts +11 -0
- package/lib/blocks/factories/OptionalBlock.d.ts.map +1 -0
- package/lib/blocks/factories/OptionalBlock.js +10 -0
- package/lib/blocks/factories/types.d.ts +5 -0
- package/lib/blocks/factories/types.d.ts.map +1 -0
- package/lib/blocks/helpers/RichTextBlockHelper.d.ts +3 -0
- package/lib/blocks/helpers/RichTextBlockHelper.d.ts.map +1 -0
- package/lib/blocks/helpers/RichTextBlockHelper.js +7 -0
- package/lib/blocks/helpers/useIsElementInViewport.d.ts +2 -0
- package/lib/blocks/helpers/useIsElementInViewport.d.ts.map +1 -0
- package/lib/blocks/helpers/useIsElementInViewport.js +21 -0
- package/lib/blocks.generated.d.ts +176 -0
- package/lib/blocks.generated.d.ts.map +1 -0
- package/lib/cookies/CookieApiContext.d.ts +14 -0
- package/lib/cookies/CookieApiContext.d.ts.map +1 -0
- package/lib/cookies/CookieApiContext.js +19 -0
- package/lib/cookies/CookieSafe.d.ts +9 -0
- package/lib/cookies/CookieSafe.d.ts.map +1 -0
- package/lib/cookies/CookieSafe.js +19 -0
- package/lib/cookies/useCookieBotCookieApi.d.ts +3 -0
- package/lib/cookies/useCookieBotCookieApi.d.ts.map +1 -0
- package/lib/cookies/useCookieBotCookieApi.js +34 -0
- package/lib/cookies/useLocalStorageCookieApi.d.ts +11 -0
- package/lib/cookies/useLocalStorageCookieApi.d.ts.map +1 -0
- package/lib/cookies/useLocalStorageCookieApi.js +41 -0
- package/lib/cookies/useOneTrustCookieApi.d.ts +3 -0
- package/lib/cookies/useOneTrustCookieApi.d.ts.map +1 -0
- package/lib/cookies/useOneTrustCookieApi.js +49 -0
- package/lib/errorHandler/ErrorHandlerBoundary.d.ts +3 -0
- package/lib/errorHandler/ErrorHandlerBoundary.d.ts.map +1 -0
- package/lib/errorHandler/ErrorHandlerBoundary.js +10 -0
- package/lib/errorHandler/ErrorHandlerBoundaryInternal.d.ts +17 -0
- package/lib/errorHandler/ErrorHandlerBoundaryInternal.d.ts.map +1 -0
- package/lib/errorHandler/ErrorHandlerBoundaryInternal.js +27 -0
- package/lib/errorHandler/ErrorHandlerProvider.d.ts +9 -0
- package/lib/errorHandler/ErrorHandlerProvider.d.ts.map +1 -0
- package/lib/errorHandler/ErrorHandlerProvider.js +22 -0
- package/lib/graphQLFetch/fetchInMemoryCache.d.ts +4 -0
- package/lib/graphQLFetch/fetchInMemoryCache.d.ts.map +1 -0
- package/lib/graphQLFetch/fetchInMemoryCache.js +38 -0
- package/lib/graphQLFetch/graphQLFetch.d.ts +12 -0
- package/lib/graphQLFetch/graphQLFetch.d.ts.map +1 -0
- package/lib/graphQLFetch/graphQLFetch.js +111 -0
- package/lib/iframebridge/IFrameBridge.d.ts +40 -0
- package/lib/iframebridge/IFrameBridge.d.ts.map +1 -0
- package/lib/iframebridge/IFrameBridge.js +239 -0
- package/lib/iframebridge/IFrameBridge.module.scss.js +8 -0
- package/lib/iframebridge/IFrameMessage.d.ts +118 -0
- package/lib/iframebridge/IFrameMessage.d.ts.map +1 -0
- package/lib/iframebridge/IFrameMessage.js +21 -0
- package/lib/iframebridge/Preview.d.ts +9 -0
- package/lib/iframebridge/Preview.d.ts.map +1 -0
- package/lib/iframebridge/Preview.js +57 -0
- package/lib/iframebridge/Preview.module.scss.js +8 -0
- package/lib/iframebridge/PreviewOverlay.d.ts +2 -0
- package/lib/iframebridge/PreviewOverlay.d.ts.map +1 -0
- package/lib/iframebridge/PreviewOverlay.js +27 -0
- package/lib/iframebridge/PreviewOverlay.module.scss.js +8 -0
- package/lib/iframebridge/PreviewOverlayElement.d.ts +7 -0
- package/lib/iframebridge/PreviewOverlayElement.d.ts.map +1 -0
- package/lib/iframebridge/PreviewOverlayElement.js +36 -0
- package/lib/iframebridge/PreviewOverlayElement.module.scss.js +20 -0
- package/lib/iframebridge/useBlockPreviewFetch.d.ts +16 -0
- package/lib/iframebridge/useBlockPreviewFetch.d.ts.map +1 -0
- package/lib/iframebridge/useBlockPreviewFetch.js +29 -0
- package/lib/iframebridge/useIFrameBridge.d.ts +3 -0
- package/lib/iframebridge/useIFrameBridge.d.ts.map +1 -0
- package/lib/iframebridge/useIFrameBridge.js +8 -0
- package/lib/iframebridge/utils.d.ts +10 -0
- package/lib/iframebridge/utils.d.ts.map +1 -0
- package/lib/iframebridge/utils.js +45 -0
- package/lib/iframebridge/withPreview.d.ts +18 -0
- package/lib/iframebridge/withPreview.d.ts.map +1 -0
- package/lib/iframebridge/withPreview.js +34 -0
- package/lib/image/Image.d.ts +8 -0
- package/lib/image/Image.d.ts.map +1 -0
- package/lib/image/Image.js +10 -0
- package/lib/image/image.utils.d.ts +18 -0
- package/lib/image/image.utils.d.ts.map +1 -0
- package/lib/image/image.utils.js +53 -0
- package/lib/index.d.ts +32 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +69 -0
- package/lib/preview/BlockPreviewProvider.d.ts +3 -0
- package/lib/preview/BlockPreviewProvider.d.ts.map +1 -0
- package/lib/preview/BlockPreviewProvider.js +18 -0
- package/lib/preview/PreviewContext.d.ts +9 -0
- package/lib/preview/PreviewContext.d.ts.map +1 -0
- package/lib/preview/PreviewContext.js +11 -0
- package/lib/preview/usePreview.d.ts +11 -0
- package/lib/preview/usePreview.d.ts.map +1 -0
- package/lib/preview/usePreview.js +41 -0
- package/lib/previewskeleton/PreviewSkeleton.d.ts +14 -0
- package/lib/previewskeleton/PreviewSkeleton.d.ts.map +1 -0
- package/lib/previewskeleton/PreviewSkeleton.js +64 -0
- package/lib/previewskeleton/PreviewSkeleton.module.scss.js +17 -0
- package/lib/style.css +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import isEqual from "lodash.isequal";
|
|
4
|
+
import { createContext, useState, useRef, useCallback, useEffect, useMemo } from "react";
|
|
5
|
+
import { useDebounceCallback } from "usehooks-ts";
|
|
6
|
+
import styles from "./IFrameBridge.module.scss.js";
|
|
7
|
+
import { AdminMessageType, IFrameMessageType } from "./IFrameMessage.js";
|
|
8
|
+
import { PreviewOverlay } from "./PreviewOverlay.js";
|
|
9
|
+
import { getRecursiveChildrenOfPreviewElement, getCombinedPositioningOfElements, PREVIEW_ELEMENT_SCROLLED_INTO_VIEW_EVENT } from "./utils.js";
|
|
10
|
+
const IFrameBridgeContext = createContext({
|
|
11
|
+
hasBridge: false,
|
|
12
|
+
showOutlines: false,
|
|
13
|
+
showOnlyVisible: false,
|
|
14
|
+
sendSelectComponent: () => {
|
|
15
|
+
},
|
|
16
|
+
sendHoverComponent: () => {
|
|
17
|
+
},
|
|
18
|
+
sendMessage: () => {
|
|
19
|
+
},
|
|
20
|
+
contentScope: void 0,
|
|
21
|
+
graphQLApiUrl: void 0,
|
|
22
|
+
previewElementsData: [],
|
|
23
|
+
removePreviewElement: () => {
|
|
24
|
+
},
|
|
25
|
+
addPreviewElement: () => {
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const IFrameBridgeProvider = ({ children }) => {
|
|
29
|
+
var _a;
|
|
30
|
+
const [block, setBlock] = useState(void 0);
|
|
31
|
+
const [showOnlyVisible, setShowOnlyVisible] = useState(false);
|
|
32
|
+
const [selectedAdminRoute, setSelectedAdminRoute] = useState(void 0);
|
|
33
|
+
const [hoveredAdminRoute, setHoveredAdminRoute] = useState(null);
|
|
34
|
+
const [showOutlines, setShowOutlines] = useState(false);
|
|
35
|
+
const [contentScope, setContentScope] = useState(void 0);
|
|
36
|
+
const [graphQLApiUrl, setGraphQLApiUrl] = useState("");
|
|
37
|
+
const [previewElements, setPreviewElements] = useState([]);
|
|
38
|
+
const [previewElementsData, setPreviewElementsData] = useState([]);
|
|
39
|
+
const childrenWrapperRef = useRef(null);
|
|
40
|
+
const childrenWrapperWidth = (_a = childrenWrapperRef.current) == null ? void 0 : _a.offsetWidth;
|
|
41
|
+
const recalculatePreviewElementsData = useCallback(() => {
|
|
42
|
+
if (!childrenWrapperWidth) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const newPreviewElementsData = previewElements.map((previewElement) => {
|
|
46
|
+
const childNodes = getRecursiveChildrenOfPreviewElement(previewElement.element);
|
|
47
|
+
const positioning = getCombinedPositioningOfElements(childNodes);
|
|
48
|
+
const isRenderedOutsideOfViewportWidth = positioning.left > childrenWrapperWidth;
|
|
49
|
+
if (isRenderedOutsideOfViewportWidth) {
|
|
50
|
+
return {
|
|
51
|
+
adminRoute: previewElement.adminRoute,
|
|
52
|
+
label: previewElement.label,
|
|
53
|
+
position: {
|
|
54
|
+
top: positioning.top,
|
|
55
|
+
left: positioning.left,
|
|
56
|
+
width: 0,
|
|
57
|
+
height: positioning.height
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const spaceBetweenRightEdgeOfElementAndRightEdgeOfViewport = positioning.left + positioning.width - childrenWrapperWidth;
|
|
62
|
+
const tooWideForPreviewViewportByPixels = spaceBetweenRightEdgeOfElementAndRightEdgeOfViewport > 0 ? spaceBetweenRightEdgeOfElementAndRightEdgeOfViewport : 0;
|
|
63
|
+
return {
|
|
64
|
+
adminRoute: previewElement.adminRoute,
|
|
65
|
+
label: previewElement.label,
|
|
66
|
+
position: {
|
|
67
|
+
top: positioning.top,
|
|
68
|
+
left: positioning.left,
|
|
69
|
+
width: positioning.width - tooWideForPreviewViewportByPixels,
|
|
70
|
+
height: positioning.height
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}).filter((elementData) => elementData.position.width !== 0).sort((previousElementData, nextElementData) => {
|
|
74
|
+
const previousSize = previousElementData.position.width * previousElementData.position.height;
|
|
75
|
+
const nextSize = nextElementData.position.width * nextElementData.position.height;
|
|
76
|
+
return nextSize - previousSize;
|
|
77
|
+
}).map((elementData, index) => {
|
|
78
|
+
return {
|
|
79
|
+
...elementData,
|
|
80
|
+
position: {
|
|
81
|
+
...elementData.position,
|
|
82
|
+
zIndex: index + 1
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
setPreviewElementsData((previousElementsData) => {
|
|
87
|
+
const dataDidNotChange = isEqual(previousElementsData, newPreviewElementsData);
|
|
88
|
+
if (dataDidNotChange) {
|
|
89
|
+
return previousElementsData;
|
|
90
|
+
}
|
|
91
|
+
return newPreviewElementsData;
|
|
92
|
+
});
|
|
93
|
+
}, [previewElements, childrenWrapperWidth]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (childrenWrapperRef.current) {
|
|
96
|
+
const mutationObserver = new MutationObserver(() => {
|
|
97
|
+
recalculatePreviewElementsData();
|
|
98
|
+
});
|
|
99
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
100
|
+
recalculatePreviewElementsData();
|
|
101
|
+
});
|
|
102
|
+
mutationObserver.observe(childrenWrapperRef.current, { childList: true, subtree: true, attributes: true });
|
|
103
|
+
resizeObserver.observe(childrenWrapperRef.current);
|
|
104
|
+
return () => {
|
|
105
|
+
mutationObserver.disconnect();
|
|
106
|
+
resizeObserver.disconnect();
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}, [recalculatePreviewElementsData]);
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
previewElements.forEach((previewElement) => {
|
|
112
|
+
previewElement.element.addEventListener(PREVIEW_ELEMENT_SCROLLED_INTO_VIEW_EVENT, recalculatePreviewElementsData);
|
|
113
|
+
});
|
|
114
|
+
return () => {
|
|
115
|
+
previewElements.forEach((previewElement) => {
|
|
116
|
+
previewElement.element.removeEventListener(PREVIEW_ELEMENT_SCROLLED_INTO_VIEW_EVENT, recalculatePreviewElementsData);
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
}, [previewElements, recalculatePreviewElementsData]);
|
|
120
|
+
const sendMessage = useCallback((message) => {
|
|
121
|
+
window.parent.postMessage(JSON.stringify(message), "*");
|
|
122
|
+
}, []);
|
|
123
|
+
const debounceDeactivateOutlines = useDebounceCallback(() => {
|
|
124
|
+
setShowOutlines(false);
|
|
125
|
+
}, 2500);
|
|
126
|
+
const onReceiveMessage = useCallback(
|
|
127
|
+
(message) => {
|
|
128
|
+
switch (message.cometType) {
|
|
129
|
+
case AdminMessageType.Block:
|
|
130
|
+
setBlock(message.data.block);
|
|
131
|
+
break;
|
|
132
|
+
case AdminMessageType.ShowOnlyVisible:
|
|
133
|
+
setShowOnlyVisible(message.data.showOnlyVisible);
|
|
134
|
+
break;
|
|
135
|
+
case AdminMessageType.SelectComponent:
|
|
136
|
+
setSelectedAdminRoute(
|
|
137
|
+
message.data.adminRoute.lastIndexOf("#") > 0 ? message.data.adminRoute.substr(0, message.data.adminRoute.lastIndexOf("#")) : message.data.adminRoute
|
|
138
|
+
);
|
|
139
|
+
break;
|
|
140
|
+
case AdminMessageType.HoverComponent:
|
|
141
|
+
setHoveredAdminRoute(message.data.adminRoute);
|
|
142
|
+
setShowOutlines(true);
|
|
143
|
+
debounceDeactivateOutlines();
|
|
144
|
+
break;
|
|
145
|
+
case AdminMessageType.ContentScope:
|
|
146
|
+
setContentScope(message.data.contentScope);
|
|
147
|
+
break;
|
|
148
|
+
case AdminMessageType.GraphQLApiUrl:
|
|
149
|
+
setGraphQLApiUrl(message.data.graphQLApiUrl);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
[debounceDeactivateOutlines]
|
|
154
|
+
);
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
if (typeof window === "undefined") {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const handleMessage = (e) => {
|
|
160
|
+
try {
|
|
161
|
+
const message = JSON.parse(e.data);
|
|
162
|
+
if (message.hasOwnProperty("cometType")) {
|
|
163
|
+
onReceiveMessage(message);
|
|
164
|
+
}
|
|
165
|
+
} catch (e2) {
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
window.addEventListener("message", handleMessage, false);
|
|
169
|
+
sendMessage({ cometType: IFrameMessageType.Ready });
|
|
170
|
+
return () => {
|
|
171
|
+
window.removeEventListener("message", handleMessage, false);
|
|
172
|
+
};
|
|
173
|
+
}, [onReceiveMessage, sendMessage]);
|
|
174
|
+
const addPreviewElement = useCallback(
|
|
175
|
+
(element) => {
|
|
176
|
+
setPreviewElements((prev) => [...prev, element]);
|
|
177
|
+
},
|
|
178
|
+
[setPreviewElements]
|
|
179
|
+
);
|
|
180
|
+
const removePreviewElement = useCallback(
|
|
181
|
+
(element) => {
|
|
182
|
+
setPreviewElements((prev) => prev.filter((el) => el.adminRoute !== element.adminRoute));
|
|
183
|
+
},
|
|
184
|
+
[setPreviewElements]
|
|
185
|
+
);
|
|
186
|
+
const iFrameBridgeValues = useMemo(
|
|
187
|
+
() => ({
|
|
188
|
+
showOutlines,
|
|
189
|
+
hasBridge: true,
|
|
190
|
+
block,
|
|
191
|
+
showOnlyVisible,
|
|
192
|
+
selectedAdminRoute,
|
|
193
|
+
hoveredAdminRoute,
|
|
194
|
+
sendSelectComponent: (adminRoute) => {
|
|
195
|
+
setSelectedAdminRoute(adminRoute);
|
|
196
|
+
sendMessage({ cometType: IFrameMessageType.SelectComponent, data: { adminRoute } });
|
|
197
|
+
},
|
|
198
|
+
sendHoverComponent: (route) => {
|
|
199
|
+
sendMessage({ cometType: IFrameMessageType.HoverComponent, data: { route } });
|
|
200
|
+
},
|
|
201
|
+
sendMessage,
|
|
202
|
+
contentScope,
|
|
203
|
+
graphQLApiUrl,
|
|
204
|
+
previewElementsData,
|
|
205
|
+
addPreviewElement,
|
|
206
|
+
removePreviewElement
|
|
207
|
+
}),
|
|
208
|
+
[
|
|
209
|
+
showOutlines,
|
|
210
|
+
block,
|
|
211
|
+
showOnlyVisible,
|
|
212
|
+
selectedAdminRoute,
|
|
213
|
+
hoveredAdminRoute,
|
|
214
|
+
sendMessage,
|
|
215
|
+
contentScope,
|
|
216
|
+
graphQLApiUrl,
|
|
217
|
+
previewElementsData,
|
|
218
|
+
addPreviewElement,
|
|
219
|
+
removePreviewElement
|
|
220
|
+
]
|
|
221
|
+
);
|
|
222
|
+
return /* @__PURE__ */ jsx(IFrameBridgeContext.Provider, { value: iFrameBridgeValues, children: /* @__PURE__ */ jsxs(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
onMouseMove: () => {
|
|
226
|
+
setShowOutlines(true);
|
|
227
|
+
debounceDeactivateOutlines();
|
|
228
|
+
},
|
|
229
|
+
children: [
|
|
230
|
+
/* @__PURE__ */ jsx(PreviewOverlay, {}),
|
|
231
|
+
/* @__PURE__ */ jsx("div", { ref: childrenWrapperRef, className: styles.childrenWrapper, children })
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
) });
|
|
235
|
+
};
|
|
236
|
+
export {
|
|
237
|
+
IFrameBridgeContext,
|
|
238
|
+
IFrameBridgeProvider
|
|
239
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { ExternalLinkBlockData } from '../blocks.generated';
|
|
2
|
+
export declare enum IFrameMessageType {
|
|
3
|
+
Ready = "Ready",
|
|
4
|
+
SelectComponent = "SelectComponent",
|
|
5
|
+
HoverComponent = "HoverComponent",
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use SitePreviewIFrameMessageType.OpenLink instead
|
|
8
|
+
*/
|
|
9
|
+
OpenLink = "OpenLink",
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated Use SitePreviewIFrameMessageType.SitePreviewLocation instead
|
|
12
|
+
*/
|
|
13
|
+
SitePreviewLocation = "SitePreviewLocation"
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The `IReadyIFrameMessage` message is sent from the site to the admin when the iFrame is ready to receive messages.
|
|
17
|
+
*/
|
|
18
|
+
export interface IReadyIFrameMessage {
|
|
19
|
+
cometType: IFrameMessageType.Ready;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The `IFrameSelectComponentMessage` is sent from the site to the admin when a component is selected in the iFrame.
|
|
23
|
+
*
|
|
24
|
+
* The admin interface will then try to navigate to the corresponding block's admin interface.
|
|
25
|
+
*/
|
|
26
|
+
export interface IFrameSelectComponentMessage {
|
|
27
|
+
cometType: IFrameMessageType.SelectComponent;
|
|
28
|
+
data: {
|
|
29
|
+
adminRoute: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated Use SitePreviewIFrameOpenLinkMessage instead
|
|
34
|
+
*/
|
|
35
|
+
export interface IFrameOpenLinkMessage {
|
|
36
|
+
cometType: IFrameMessageType.OpenLink;
|
|
37
|
+
data: {
|
|
38
|
+
link: ExternalLinkBlockData;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Use SitePreviewIFrameLocationMessage instead
|
|
43
|
+
*/
|
|
44
|
+
export interface IFrameLocationMessage {
|
|
45
|
+
cometType: IFrameMessageType.SitePreviewLocation;
|
|
46
|
+
data: Pick<Location, "search" | "pathname">;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The `IFrameHoverComponentMessage` is sent from the site to the admin, when a component is hovered in the iFrame and should be highlighted in the admin interface.
|
|
50
|
+
*/
|
|
51
|
+
export interface IFrameHoverComponentMessage {
|
|
52
|
+
cometType: IFrameMessageType.HoverComponent;
|
|
53
|
+
data: {
|
|
54
|
+
route: string | null;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export type IFrameMessage = IReadyIFrameMessage | IFrameSelectComponentMessage | IFrameOpenLinkMessage | IFrameLocationMessage | IFrameHoverComponentMessage;
|
|
58
|
+
export declare enum AdminMessageType {
|
|
59
|
+
Block = "Block",
|
|
60
|
+
ShowOnlyVisible = "ShowOnlyVisible",
|
|
61
|
+
SelectComponent = "SelectComponent",
|
|
62
|
+
HoverComponent = "HoverComponent",
|
|
63
|
+
ContentScope = "ContentScope",
|
|
64
|
+
GraphQLApiUrl = "GraphQLApiUrl"
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The `IAdminBlockMessage` is sent from the admin to the site, whih block should be displayed in the iFrame.
|
|
68
|
+
*/
|
|
69
|
+
export interface IAdminBlockMessage {
|
|
70
|
+
cometType: AdminMessageType.Block;
|
|
71
|
+
data: {
|
|
72
|
+
block: unknown;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The `IAdminShowOnlyVisibleMessage` is sent from the admin to the site, when the "Show only visible" checkbox is toggled.
|
|
77
|
+
*/
|
|
78
|
+
export interface IAdminShowOnlyVisibleMessage {
|
|
79
|
+
cometType: AdminMessageType.ShowOnlyVisible;
|
|
80
|
+
data: {
|
|
81
|
+
showOnlyVisible: boolean;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The `IAdminSelectComponentMessage` is sent from the admin to the site, when a component is selected in the admin interface.
|
|
86
|
+
*/
|
|
87
|
+
export interface IAdminSelectComponentMessage {
|
|
88
|
+
cometType: AdminMessageType.SelectComponent;
|
|
89
|
+
data: {
|
|
90
|
+
adminRoute: string;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The `IAdminHoverComponentMessage` is sent from the admin to the site, when a component is hovered in the admin interface.
|
|
95
|
+
*/
|
|
96
|
+
export interface IAdminHoverComponentMessage {
|
|
97
|
+
cometType: AdminMessageType.HoverComponent;
|
|
98
|
+
data: {
|
|
99
|
+
adminRoute: string | null;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The `IAdminContentScopeMessage` is sent from the admin to the site, when the content scope is changed in the admin interface.
|
|
104
|
+
*/
|
|
105
|
+
export interface IAdminContentScopeMessage {
|
|
106
|
+
cometType: AdminMessageType.ContentScope;
|
|
107
|
+
data: {
|
|
108
|
+
contentScope: unknown;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface IAdminGraphQLApiUrlMessage {
|
|
112
|
+
cometType: AdminMessageType.GraphQLApiUrl;
|
|
113
|
+
data: {
|
|
114
|
+
graphQLApiUrl: string;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export type AdminMessage = IAdminBlockMessage | IAdminSelectComponentMessage | IAdminHoverComponentMessage | IAdminContentScopeMessage | IAdminShowOnlyVisibleMessage | IAdminGraphQLApiUrlMessage;
|
|
118
|
+
//# sourceMappingURL=IFrameMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IFrameMessage.d.ts","sourceRoot":"","sources":["../../src/iframebridge/IFrameMessage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,oBAAY,iBAAiB;IACzB,KAAK,UAAU;IACf,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC;;OAEG;IACH,QAAQ,aAAa;IACrB;;OAEG;IACH,mBAAmB,wBAAwB;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IACzC,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAAC;IAC7C,IAAI,EAAE;QACF,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC;IACtC,IAAI,EAAE;QACF,IAAI,EAAE,qBAAqB,CAAC;KAC/B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,iBAAiB,CAAC,mBAAmB,CAAC;IACjD,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IAC5C,IAAI,EAAE;QACF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC;CACL;AAED,MAAM,MAAM,aAAa,GACnB,mBAAmB,GACnB,4BAA4B,GAC5B,qBAAqB,GACrB,qBAAqB,GACrB,2BAA2B,CAAC;AAGlC,oBAAY,gBAAgB;IACxB,KAAK,UAAU;IACf,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC;IAClC,IAAI,EAAE;QACF,KAAK,EAAE,OAAO,CAAC;KAClB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC,SAAS,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAC5C,IAAI,EAAE;QACF,eAAe,EAAE,OAAO,CAAC;KAC5B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC,SAAS,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAC5C,IAAI,EAAE;QACF,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,SAAS,EAAE,gBAAgB,CAAC,cAAc,CAAC;IAC3C,IAAI,EAAE;QACF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC,SAAS,EAAE,gBAAgB,CAAC,YAAY,CAAC;IACzC,IAAI,EAAE;QACF,YAAY,EAAE,OAAO,CAAC;KACzB,CAAC;CACL;AAED,MAAM,WAAW,0BAA0B;IACvC,SAAS,EAAE,gBAAgB,CAAC,aAAa,CAAC;IAC1C,IAAI,EAAE;QACF,aAAa,EAAE,MAAM,CAAC;KACzB,CAAC;CACL;AAED,MAAM,MAAM,YAAY,GAClB,kBAAkB,GAClB,4BAA4B,GAC5B,2BAA2B,GAC3B,yBAAyB,GACzB,4BAA4B,GAC5B,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
var IFrameMessageType = /* @__PURE__ */ ((IFrameMessageType2) => {
|
|
2
|
+
IFrameMessageType2["Ready"] = "Ready";
|
|
3
|
+
IFrameMessageType2["SelectComponent"] = "SelectComponent";
|
|
4
|
+
IFrameMessageType2["HoverComponent"] = "HoverComponent";
|
|
5
|
+
IFrameMessageType2["OpenLink"] = "OpenLink";
|
|
6
|
+
IFrameMessageType2["SitePreviewLocation"] = "SitePreviewLocation";
|
|
7
|
+
return IFrameMessageType2;
|
|
8
|
+
})(IFrameMessageType || {});
|
|
9
|
+
var AdminMessageType = /* @__PURE__ */ ((AdminMessageType2) => {
|
|
10
|
+
AdminMessageType2["Block"] = "Block";
|
|
11
|
+
AdminMessageType2["ShowOnlyVisible"] = "ShowOnlyVisible";
|
|
12
|
+
AdminMessageType2["SelectComponent"] = "SelectComponent";
|
|
13
|
+
AdminMessageType2["HoverComponent"] = "HoverComponent";
|
|
14
|
+
AdminMessageType2["ContentScope"] = "ContentScope";
|
|
15
|
+
AdminMessageType2["GraphQLApiUrl"] = "GraphQLApiUrl";
|
|
16
|
+
return AdminMessageType2;
|
|
17
|
+
})(AdminMessageType || {});
|
|
18
|
+
export {
|
|
19
|
+
AdminMessageType,
|
|
20
|
+
IFrameMessageType
|
|
21
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
interface Props extends PropsWithChildren {
|
|
3
|
+
adminRoute: string;
|
|
4
|
+
label: string;
|
|
5
|
+
enabledAutoScrolling?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const Preview: ({ adminRoute, children, label, enabledAutoScrolling }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=Preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Preview.d.ts","sourceRoot":"","sources":["../../src/iframebridge/Preview.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AAOlE,UAAU,KAAM,SAAQ,iBAAiB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,eAAO,MAAM,OAAO,0DAAkE,KAAK,4CAyD1F,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useEffect } from "react";
|
|
4
|
+
import scrollIntoView from "scroll-into-view-if-needed";
|
|
5
|
+
import styles from "./Preview.module.scss.js";
|
|
6
|
+
import { useIFrameBridge } from "./useIFrameBridge.js";
|
|
7
|
+
import { PREVIEW_ELEMENT_SCROLLED_INTO_VIEW_EVENT, BLOCK_PREVIEW_CONTAINER_DATA_ATTRIBUTE } from "./utils.js";
|
|
8
|
+
const Preview = ({ adminRoute, children, label, enabledAutoScrolling = true }) => {
|
|
9
|
+
const { addPreviewElement, removePreviewElement, ...iFrameBridge } = useIFrameBridge();
|
|
10
|
+
const isSelected = adminRoute === iFrameBridge.selectedAdminRoute;
|
|
11
|
+
const isHovered = adminRoute === iFrameBridge.hoveredAdminRoute;
|
|
12
|
+
const previewElementContainerRef = useRef(null);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const previewElement = previewElementContainerRef.current ? {
|
|
15
|
+
label,
|
|
16
|
+
adminRoute,
|
|
17
|
+
element: previewElementContainerRef.current
|
|
18
|
+
} : null;
|
|
19
|
+
if (previewElement) {
|
|
20
|
+
addPreviewElement(previewElement);
|
|
21
|
+
return () => {
|
|
22
|
+
removePreviewElement(previewElement);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}, [label, adminRoute, addPreviewElement, removePreviewElement]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
const timeout = setTimeout(() => {
|
|
28
|
+
var _a;
|
|
29
|
+
if (enabledAutoScrolling) {
|
|
30
|
+
if (isHovered || isSelected) {
|
|
31
|
+
if ((_a = previewElementContainerRef.current) == null ? void 0 : _a.firstElementChild) {
|
|
32
|
+
scrollIntoView(previewElementContainerRef.current.firstElementChild, {
|
|
33
|
+
scrollMode: "if-needed",
|
|
34
|
+
block: "center",
|
|
35
|
+
inline: "nearest",
|
|
36
|
+
behavior: "smooth"
|
|
37
|
+
});
|
|
38
|
+
setTimeout(() => {
|
|
39
|
+
var _a2;
|
|
40
|
+
(_a2 = previewElementContainerRef.current) == null ? void 0 : _a2.dispatchEvent(new Event(PREVIEW_ELEMENT_SCROLLED_INTO_VIEW_EVENT));
|
|
41
|
+
}, 600);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}, 500);
|
|
46
|
+
return () => {
|
|
47
|
+
clearTimeout(timeout);
|
|
48
|
+
};
|
|
49
|
+
}, [enabledAutoScrolling, isHovered, isSelected]);
|
|
50
|
+
if (iFrameBridge.hasBridge) {
|
|
51
|
+
return /* @__PURE__ */ jsx("div", { ref: previewElementContainerRef, className: styles.previewElementContainer, ...{ [BLOCK_PREVIEW_CONTAINER_DATA_ATTRIBUTE]: "" }, children });
|
|
52
|
+
}
|
|
53
|
+
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
54
|
+
};
|
|
55
|
+
export {
|
|
56
|
+
Preview
|
|
57
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewOverlay.d.ts","sourceRoot":"","sources":["../../src/iframebridge/PreviewOverlay.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,+CA2B1B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import styles from "./PreviewOverlay.module.scss.js";
|
|
3
|
+
import { PreviewOverlayElement } from "./PreviewOverlayElement.js";
|
|
4
|
+
import { useIFrameBridge } from "./useIFrameBridge.js";
|
|
5
|
+
let lastSelectedElementPath = "";
|
|
6
|
+
const PreviewOverlay = () => {
|
|
7
|
+
const iFrameBridge = useIFrameBridge();
|
|
8
|
+
let bottomMostElementPosition = 0;
|
|
9
|
+
iFrameBridge.previewElementsData.forEach((element) => {
|
|
10
|
+
if (element.position.zIndex > 1)
|
|
11
|
+
return;
|
|
12
|
+
const elementBottom = element.position.top + element.position.height;
|
|
13
|
+
if (elementBottom > bottomMostElementPosition) {
|
|
14
|
+
bottomMostElementPosition = elementBottom;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return /* @__PURE__ */ jsx("div", { className: styles.root, style: { "--height": `${bottomMostElementPosition}px` }, children: iFrameBridge.previewElementsData.map((element, index) => {
|
|
18
|
+
const isSelected = element.adminRoute === iFrameBridge.selectedAdminRoute;
|
|
19
|
+
if (isSelected && lastSelectedElementPath !== element.adminRoute) {
|
|
20
|
+
lastSelectedElementPath = element.adminRoute;
|
|
21
|
+
}
|
|
22
|
+
return /* @__PURE__ */ jsx(PreviewOverlayElement, { element }, index);
|
|
23
|
+
}) });
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
PreviewOverlay
|
|
27
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { OverlayElementData } from './IFrameBridge';
|
|
2
|
+
type Props = {
|
|
3
|
+
element: OverlayElementData;
|
|
4
|
+
};
|
|
5
|
+
export declare const PreviewOverlayElement: ({ element }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=PreviewOverlayElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewOverlayElement.d.ts","sourceRoot":"","sources":["../../src/iframebridge/PreviewOverlayElement.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAIzD,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,kBAAkB,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,qBAAqB,gBAAiB,KAAK,4CA8BvD,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import styles from "./PreviewOverlayElement.module.scss.js";
|
|
4
|
+
import { useIFrameBridge } from "./useIFrameBridge.js";
|
|
5
|
+
const PreviewOverlayElement = ({ element }) => {
|
|
6
|
+
const iFrameBridge = useIFrameBridge();
|
|
7
|
+
const isSelected = element.adminRoute === iFrameBridge.selectedAdminRoute;
|
|
8
|
+
const isHovered = element.adminRoute === iFrameBridge.hoveredAdminRoute;
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
className: clsx(
|
|
13
|
+
styles.root,
|
|
14
|
+
iFrameBridge.showOutlines && !isHovered && styles.showBlockOutlines,
|
|
15
|
+
isSelected && styles.blockIsSelected,
|
|
16
|
+
isHovered && styles.isHoveredInBlockList
|
|
17
|
+
),
|
|
18
|
+
title: element.label,
|
|
19
|
+
onClick: () => {
|
|
20
|
+
iFrameBridge.sendSelectComponent(element.adminRoute);
|
|
21
|
+
},
|
|
22
|
+
onMouseEnter: () => {
|
|
23
|
+
iFrameBridge.sendHoverComponent(element.adminRoute);
|
|
24
|
+
},
|
|
25
|
+
onMouseLeave: () => {
|
|
26
|
+
iFrameBridge.sendHoverComponent(null);
|
|
27
|
+
},
|
|
28
|
+
style: element.position,
|
|
29
|
+
children: /* @__PURE__ */ jsx("div", { className: styles.label, children: element.label })
|
|
30
|
+
},
|
|
31
|
+
element.adminRoute
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
PreviewOverlayElement
|
|
36
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const root = "_root_1ya0k_1";
|
|
2
|
+
const isHoveredInBlockList = "_isHoveredInBlockList_1ya0k_24";
|
|
3
|
+
const showBlockOutlines = "_showBlockOutlines_1ya0k_32";
|
|
4
|
+
const blockIsSelected = "_blockIsSelected_1ya0k_37";
|
|
5
|
+
const label = "_label_1ya0k_40";
|
|
6
|
+
const styles = {
|
|
7
|
+
root,
|
|
8
|
+
isHoveredInBlockList,
|
|
9
|
+
showBlockOutlines,
|
|
10
|
+
blockIsSelected,
|
|
11
|
+
label
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
blockIsSelected,
|
|
15
|
+
styles as default,
|
|
16
|
+
isHoveredInBlockList,
|
|
17
|
+
label,
|
|
18
|
+
root,
|
|
19
|
+
showBlockOutlines
|
|
20
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GraphQLFetch } from '../graphQLFetch/graphQLFetch';
|
|
2
|
+
type Fetch = typeof fetch;
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated Use useBlockPreviewFetch() without argument instead
|
|
5
|
+
* @param apiUrl the API URL
|
|
6
|
+
*/
|
|
7
|
+
export declare function useBlockPreviewFetch(apiUrl: string): {
|
|
8
|
+
fetch: Fetch;
|
|
9
|
+
graphQLFetch: GraphQLFetch;
|
|
10
|
+
};
|
|
11
|
+
export declare function useBlockPreviewFetch(apiUrl?: string | undefined): {
|
|
12
|
+
fetch: Fetch;
|
|
13
|
+
graphQLFetch?: GraphQLFetch;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=useBlockPreviewFetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBlockPreviewFetch.d.ts","sourceRoot":"","sources":["../../src/iframebridge/useBlockPreviewFetch.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAA4E,MAAM,8BAA8B,CAAC;AAK3I,KAAK,KAAK,GAAG,OAAO,KAAK,CAAC;AAE1B;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC;AACnG,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { createFetchInMemoryCache } from "../graphQLFetch/fetchInMemoryCache.js";
|
|
3
|
+
import { createGraphQLFetch, createFetchWithDefaults, convertPreviewDataToHeaders } from "../graphQLFetch/graphQLFetch.js";
|
|
4
|
+
import { useIFrameBridge } from "./useIFrameBridge.js";
|
|
5
|
+
const cachingFetch = createFetchInMemoryCache(fetch);
|
|
6
|
+
function useBlockPreviewFetch(apiUrl) {
|
|
7
|
+
const { showOnlyVisible, graphQLApiUrl } = useIFrameBridge();
|
|
8
|
+
const [graphQLFetch, setGraphQLFetch] = useState(
|
|
9
|
+
() => apiUrl ? createBlockPreviewFetch(apiUrl, !showOnlyVisible) : void 0
|
|
10
|
+
);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (graphQLApiUrl) {
|
|
13
|
+
setGraphQLFetch(() => createBlockPreviewFetch(graphQLApiUrl, !showOnlyVisible));
|
|
14
|
+
}
|
|
15
|
+
}, [showOnlyVisible, graphQLApiUrl]);
|
|
16
|
+
return {
|
|
17
|
+
graphQLFetch,
|
|
18
|
+
fetch: cachingFetch
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function createBlockPreviewFetch(graphqlApiUrl, includeInvisible) {
|
|
22
|
+
return createGraphQLFetch(
|
|
23
|
+
createFetchWithDefaults(cachingFetch, { headers: convertPreviewDataToHeaders({ includeInvisible }), credentials: "include" }),
|
|
24
|
+
graphqlApiUrl
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
useBlockPreviewFetch
|
|
29
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIFrameBridge.d.ts","sourceRoot":"","sources":["../../src/iframebridge/useIFrameBridge.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAgB,eAAe,IAAI,mBAAmB,CAErD"}
|