PluginProbe
Gutenberg / 23.5.1
Gutenberg v23.5.1
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / build / scripts / server-side-render / index.js

index.js in Gutenberg 23.5.1, at build/scripts/server-side-render/index.js

317 lines 11.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2 var wp;
3 (wp ||= {}).serverSideRender = (() => {
4 var __create = Object.create;
5 var __defProp = Object.defineProperty;
6 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7 var __getOwnPropNames = Object.getOwnPropertyNames;
8 var __getProtoOf = Object.getPrototypeOf;
9 var __hasOwnProp = Object.prototype.hasOwnProperty;
10 var __commonJS = (cb, mod) => function __require() {
11 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12 };
13 var __export = (target, all) => {
14 for (var name in all)
15 __defProp(target, name, { get: all[name], enumerable: true });
16 };
17 var __copyProps = (to, from, except, desc) => {
18 if (from && typeof from === "object" || typeof from === "function") {
19 for (let key of __getOwnPropNames(from))
20 if (!__hasOwnProp.call(to, key) && key !== except)
21 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22 }
23 return to;
24 };
25 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26 // If the importer is in node compatibility mode or this is not an ESM
27 // file that has been converted to a CommonJS file using a Babel-
28 // compatible transform (i.e. "__esModule" has not been set), then set
29 // "default" to the CommonJS "module.exports" for node compatibility.
30 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31 mod
32 ));
33 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
35 // package-external:@wordpress/element
36 var require_element = __commonJS({
37 "package-external:@wordpress/element"(exports, module) {
38 module.exports = window.wp.element;
39 }
40 });
41
42 // package-external:@wordpress/i18n
43 var require_i18n = __commonJS({
44 "package-external:@wordpress/i18n"(exports, module) {
45 module.exports = window.wp.i18n;
46 }
47 });
48
49 // package-external:@wordpress/components
50 var require_components = __commonJS({
51 "package-external:@wordpress/components"(exports, module) {
52 module.exports = window.wp.components;
53 }
54 });
55
56 // package-external:@wordpress/data
57 var require_data = __commonJS({
58 "package-external:@wordpress/data"(exports, module) {
59 module.exports = window.wp.data;
60 }
61 });
62
63 // package-external:@wordpress/compose
64 var require_compose = __commonJS({
65 "package-external:@wordpress/compose"(exports, module) {
66 module.exports = window.wp.compose;
67 }
68 });
69
70 // package-external:@wordpress/api-fetch
71 var require_api_fetch = __commonJS({
72 "package-external:@wordpress/api-fetch"(exports, module) {
73 module.exports = window.wp.apiFetch;
74 }
75 });
76
77 // package-external:@wordpress/url
78 var require_url = __commonJS({
79 "package-external:@wordpress/url"(exports, module) {
80 module.exports = window.wp.url;
81 }
82 });
83
84 // package-external:@wordpress/blocks
85 var require_blocks = __commonJS({
86 "package-external:@wordpress/blocks"(exports, module) {
87 module.exports = window.wp.blocks;
88 }
89 });
90
91 // vendor-external:react/jsx-runtime
92 var require_jsx_runtime = __commonJS({
93 "vendor-external:react/jsx-runtime"(exports, module) {
94 module.exports = window.ReactJSXRuntime;
95 }
96 });
97
98 // packages/server-side-render/build-module/index.mjs
99 var index_exports = {};
100 __export(index_exports, {
101 ServerSideRender: () => ServerSideRenderWithPostId,
102 default: () => index_default,
103 useServerSideRender: () => useServerSideRender
104 });
105
106 // packages/server-side-render/build-module/server-side-render.mjs
107 var import_element2 = __toESM(require_element(), 1);
108 var import_i18n = __toESM(require_i18n(), 1);
109 var import_components = __toESM(require_components(), 1);
110 var import_data = __toESM(require_data(), 1);
111
112 // packages/server-side-render/build-module/hook.mjs
113 var import_compose = __toESM(require_compose(), 1);
114 var import_element = __toESM(require_element(), 1);
115 var import_api_fetch = __toESM(require_api_fetch(), 1);
116 var import_url = __toESM(require_url(), 1);
117 var import_blocks = __toESM(require_blocks(), 1);
118 function rendererPath(block, attributes = null, urlQueryArgs = {}) {
119 return (0, import_url.addQueryArgs)(`/wp/v2/block-renderer/${block}`, {
120 context: "edit",
121 ...null !== attributes ? { attributes } : {},
122 ...urlQueryArgs
123 });
124 }
125 function removeBlockSupportAttributes(attributes) {
126 const {
127 backgroundColor,
128 borderColor,
129 fontFamily,
130 fontSize,
131 gradient,
132 textColor,
133 className,
134 ...restAttributes
135 } = attributes;
136 const {
137 border,
138 color,
139 elements,
140 shadow,
141 spacing,
142 typography,
143 ...restStyles
144 } = attributes?.style || {};
145 return {
146 ...restAttributes,
147 style: restStyles
148 };
149 }
150 function useServerSideRender(args) {
151 const [response, setResponse] = (0, import_element.useState)({
152 status: "idle"
153 });
154 const shouldDebounceRef = (0, import_element.useRef)(false);
155 const {
156 attributes,
157 block,
158 skipBlockSupportAttributes = false,
159 httpMethod = "GET",
160 urlQueryArgs
161 } = args;
162 let sanitizedAttributes = attributes && (0, import_blocks.__experimentalSanitizeBlockAttributes)(block, attributes);
163 if (skipBlockSupportAttributes && sanitizedAttributes) {
164 sanitizedAttributes = removeBlockSupportAttributes(sanitizedAttributes);
165 }
166 const isPostRequest = "POST" === httpMethod;
167 const urlAttributes = isPostRequest ? null : sanitizedAttributes;
168 const path = rendererPath(block, urlAttributes, urlQueryArgs);
169 const body = isPostRequest ? JSON.stringify({ attributes: sanitizedAttributes ?? null }) : void 0;
170 (0, import_element.useEffect)(() => {
171 const controller = new AbortController();
172 const debouncedFetch = (0, import_compose.debounce)(
173 function() {
174 {
175 setResponse({ status: "loading" });
176 (0, import_api_fetch.default)({
177 path,
178 method: isPostRequest ? "POST" : "GET",
179 body,
180 headers: isPostRequest ? {
181 "Content-Type": "application/json"
182 } : {},
183 signal: controller.signal
184 }).then((res) => {
185 setResponse({
186 status: "success",
187 content: res ? res.rendered : ""
188 });
189 }).catch((error) => {
190 if (error instanceof Error && error.name === "AbortError") {
191 return;
192 }
193 setResponse({
194 status: "error",
195 error: error instanceof Error ? error.message : String(error)
196 });
197 }).finally(() => {
198 shouldDebounceRef.current = true;
199 });
200 }
201 },
202 shouldDebounceRef.current ? 500 : 0
203 );
204 debouncedFetch();
205 return () => {
206 controller.abort();
207 debouncedFetch.cancel();
208 };
209 }, [path, isPostRequest, body]);
210 return response;
211 }
212
213 // packages/server-side-render/build-module/server-side-render.mjs
214 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
215 var EMPTY_OBJECT = {};
216 function DefaultEmptyResponsePlaceholder({ className }) {
217 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Placeholder, { className, children: (0, import_i18n.__)("Block rendered as empty.") });
218 }
219 function DefaultErrorResponsePlaceholder({
220 message,
221 className
222 }) {
223 const errorMessage = (0, import_i18n.sprintf)(
224 // translators: %s: error message describing the problem
225 (0, import_i18n.__)("Error loading block: %s"),
226 message || (0, import_i18n.__)("Unknown error")
227 );
228 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Placeholder, { className, children: errorMessage });
229 }
230 function DefaultLoadingResponsePlaceholder({
231 children
232 }) {
233 const [showLoader, setShowLoader] = (0, import_element2.useState)(false);
234 (0, import_element2.useEffect)(() => {
235 const timeout = setTimeout(() => {
236 setShowLoader(true);
237 }, 1e3);
238 return () => clearTimeout(timeout);
239 }, []);
240 return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { position: "relative" }, children: [
241 showLoader && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
242 "div",
243 {
244 style: {
245 position: "absolute",
246 top: "50%",
247 left: "50%",
248 marginTop: "-9px",
249 marginLeft: "-9px"
250 },
251 children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Spinner, {})
252 }
253 ),
254 /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { opacity: showLoader ? "0.3" : 1 }, children })
255 ] });
256 }
257 function ServerSideRender(props) {
258 const prevContentRef = (0, import_element2.useRef)("");
259 const {
260 className,
261 EmptyResponsePlaceholder = DefaultEmptyResponsePlaceholder,
262 ErrorResponsePlaceholder = DefaultErrorResponsePlaceholder,
263 LoadingResponsePlaceholder = DefaultLoadingResponsePlaceholder,
264 ...restProps
265 } = props;
266 const { content, status, error } = useServerSideRender(restProps);
267 (0, import_element2.useEffect)(() => {
268 if (content) {
269 prevContentRef.current = content;
270 }
271 }, [content]);
272 if (status === "loading") {
273 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadingResponsePlaceholder, { ...props, children: !!prevContentRef.current && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_element2.RawHTML, {
274 className,
275 // eslint-disable-next-line react-hooks/refs
276 children: prevContentRef.current
277 }) });
278 }
279 if (status === "success" && !content) {
280 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyResponsePlaceholder, { ...props });
281 }
282 if (status === "error") {
283 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ErrorResponsePlaceholder, { message: error, ...props });
284 }
285 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_element2.RawHTML, { className, children: content || "" });
286 }
287 function ServerSideRenderWithPostId({
288 urlQueryArgs = EMPTY_OBJECT,
289 ...props
290 }) {
291 const currentPostId = (0, import_data.useSelect)((select) => {
292 const editorStore = select("core/editor");
293 const postId = editorStore?.getCurrentPostId?.();
294 return postId && typeof postId === "number" ? postId : null;
295 }, []);
296 const newUrlQueryArgs = (0, import_element2.useMemo)(() => {
297 if (!currentPostId) {
298 return urlQueryArgs;
299 }
300 return {
301 post_id: currentPostId,
302 ...urlQueryArgs
303 };
304 }, [currentPostId, urlQueryArgs]);
305 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ServerSideRender, { urlQueryArgs: newUrlQueryArgs, ...props });
306 }
307
308 // packages/server-side-render/build-module/index.mjs
309 var ServerSideRenderCompat = ServerSideRenderWithPostId;
310 ServerSideRenderCompat.ServerSideRender = ServerSideRenderWithPostId;
311 ServerSideRenderCompat.useServerSideRender = useServerSideRender;
312 var index_default = ServerSideRenderCompat;
313 return __toCommonJS(index_exports);
314 })();
315 if (typeof wp.serverSideRender === 'object' && wp.serverSideRender.default) { wp.serverSideRender = wp.serverSideRender.default; }
316 //# sourceMappingURL=index.js.map
317