Brak opisu

server-side-render.js 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. this["wp"] = this["wp"] || {}; this["wp"]["serverSideRender"] =
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41. /******/ }
  42. /******/ };
  43. /******/
  44. /******/ // define __esModule on exports
  45. /******/ __webpack_require__.r = function(exports) {
  46. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48. /******/ }
  49. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  50. /******/ };
  51. /******/
  52. /******/ // create a fake namespace object
  53. /******/ // mode & 1: value is a module id, require it
  54. /******/ // mode & 2: merge all properties of value into the ns
  55. /******/ // mode & 4: return value when already ns object
  56. /******/ // mode & 8|1: behave like require
  57. /******/ __webpack_require__.t = function(value, mode) {
  58. /******/ if(mode & 1) value = __webpack_require__(value);
  59. /******/ if(mode & 8) return value;
  60. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61. /******/ var ns = Object.create(null);
  62. /******/ __webpack_require__.r(ns);
  63. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65. /******/ return ns;
  66. /******/ };
  67. /******/
  68. /******/ // getDefaultExport function for compatibility with non-harmony modules
  69. /******/ __webpack_require__.n = function(module) {
  70. /******/ var getter = module && module.__esModule ?
  71. /******/ function getDefault() { return module['default']; } :
  72. /******/ function getModuleExports() { return module; };
  73. /******/ __webpack_require__.d(getter, 'a', getter);
  74. /******/ return getter;
  75. /******/ };
  76. /******/
  77. /******/ // Object.prototype.hasOwnProperty.call
  78. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79. /******/
  80. /******/ // __webpack_public_path__
  81. /******/ __webpack_require__.p = "";
  82. /******/
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = "4dqW");
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ({
  89. /***/ "1ZqX":
  90. /***/ (function(module, exports) {
  91. (function() { module.exports = window["wp"]["data"]; }());
  92. /***/ }),
  93. /***/ "4dqW":
  94. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  95. "use strict";
  96. // ESM COMPAT FLAG
  97. __webpack_require__.r(__webpack_exports__);
  98. // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
  99. var esm_extends = __webpack_require__("wx14");
  100. // EXTERNAL MODULE: external ["wp","element"]
  101. var external_wp_element_ = __webpack_require__("GRId");
  102. // EXTERNAL MODULE: external ["wp","data"]
  103. var external_wp_data_ = __webpack_require__("1ZqX");
  104. // EXTERNAL MODULE: external ["wp","deprecated"]
  105. var external_wp_deprecated_ = __webpack_require__("NMb1");
  106. var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_);
  107. // EXTERNAL MODULE: external "lodash"
  108. var external_lodash_ = __webpack_require__("YLtl");
  109. // EXTERNAL MODULE: external ["wp","compose"]
  110. var external_wp_compose_ = __webpack_require__("K9lf");
  111. // EXTERNAL MODULE: external ["wp","i18n"]
  112. var external_wp_i18n_ = __webpack_require__("l3Sj");
  113. // EXTERNAL MODULE: external ["wp","apiFetch"]
  114. var external_wp_apiFetch_ = __webpack_require__("ywyh");
  115. var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_);
  116. // EXTERNAL MODULE: external ["wp","url"]
  117. var external_wp_url_ = __webpack_require__("Mmq9");
  118. // EXTERNAL MODULE: external ["wp","components"]
  119. var external_wp_components_ = __webpack_require__("tI+e");
  120. // EXTERNAL MODULE: external ["wp","blocks"]
  121. var external_wp_blocks_ = __webpack_require__("HSyU");
  122. // CONCATENATED MODULE: ./node_modules/@wordpress/server-side-render/build-module/server-side-render.js
  123. /**
  124. * External dependencies
  125. */
  126. /**
  127. * WordPress dependencies
  128. */
  129. function rendererPath(block, attributes = null, urlQueryArgs = {}) {
  130. return Object(external_wp_url_["addQueryArgs"])(`/wp/v2/block-renderer/${block}`, {
  131. context: 'edit',
  132. ...(null !== attributes ? {
  133. attributes
  134. } : {}),
  135. ...urlQueryArgs
  136. });
  137. }
  138. function DefaultEmptyResponsePlaceholder({
  139. className
  140. }) {
  141. return Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], {
  142. className: className
  143. }, Object(external_wp_i18n_["__"])('Block rendered as empty.'));
  144. }
  145. function DefaultErrorResponsePlaceholder({
  146. response,
  147. className
  148. }) {
  149. const errorMessage = Object(external_wp_i18n_["sprintf"])( // translators: %s: error message describing the problem
  150. Object(external_wp_i18n_["__"])('Error loading block: %s'), response.errorMsg);
  151. return Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], {
  152. className: className
  153. }, errorMessage);
  154. }
  155. function DefaultLoadingResponsePlaceholder({
  156. className
  157. }) {
  158. return Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], {
  159. className: className
  160. }, Object(external_wp_element_["createElement"])(external_wp_components_["Spinner"], null));
  161. }
  162. function ServerSideRender(props) {
  163. const {
  164. attributes,
  165. block,
  166. className,
  167. httpMethod = 'GET',
  168. urlQueryArgs,
  169. EmptyResponsePlaceholder = DefaultEmptyResponsePlaceholder,
  170. ErrorResponsePlaceholder = DefaultErrorResponsePlaceholder,
  171. LoadingResponsePlaceholder = DefaultLoadingResponsePlaceholder
  172. } = props;
  173. const isMountedRef = Object(external_wp_element_["useRef"])(true);
  174. const fetchRequestRef = Object(external_wp_element_["useRef"])();
  175. const [response, setResponse] = Object(external_wp_element_["useState"])(null);
  176. const prevProps = Object(external_wp_compose_["usePrevious"])(props);
  177. function fetchData() {
  178. if (!isMountedRef.current) {
  179. return;
  180. }
  181. if (null !== response) {
  182. setResponse(null);
  183. }
  184. const sanitizedAttributes = attributes && Object(external_wp_blocks_["__experimentalSanitizeBlockAttributes"])(block, attributes); // If httpMethod is 'POST', send the attributes in the request body instead of the URL.
  185. // This allows sending a larger attributes object than in a GET request, where the attributes are in the URL.
  186. const isPostRequest = 'POST' === httpMethod;
  187. const urlAttributes = isPostRequest ? null : sanitizedAttributes !== null && sanitizedAttributes !== void 0 ? sanitizedAttributes : null;
  188. const path = rendererPath(block, urlAttributes, urlQueryArgs);
  189. const data = isPostRequest ? {
  190. attributes: sanitizedAttributes !== null && sanitizedAttributes !== void 0 ? sanitizedAttributes : null
  191. } : null; // Store the latest fetch request so that when we process it, we can
  192. // check if it is the current request, to avoid race conditions on slow networks.
  193. const fetchRequest = fetchRequestRef.current = external_wp_apiFetch_default()({
  194. path,
  195. data,
  196. method: isPostRequest ? 'POST' : 'GET'
  197. }).then(fetchResponse => {
  198. if (isMountedRef.current && fetchRequest === fetchRequestRef.current && fetchResponse) {
  199. setResponse(fetchResponse.rendered);
  200. }
  201. }).catch(error => {
  202. if (isMountedRef.current && fetchRequest === fetchRequestRef.current) {
  203. setResponse({
  204. error: true,
  205. errorMsg: error.message
  206. });
  207. }
  208. });
  209. return fetchRequest;
  210. }
  211. const debouncedFetchData = Object(external_wp_compose_["useDebounce"])(fetchData, 500); // When the component unmounts, set isMountedRef to false. This will
  212. // let the async fetch callbacks know when to stop.
  213. Object(external_wp_element_["useEffect"])(() => () => {
  214. isMountedRef.current = false;
  215. }, []);
  216. Object(external_wp_element_["useEffect"])(() => {
  217. // Don't debounce the first fetch. This ensures that the first render
  218. // shows data as soon as possible
  219. if (prevProps === undefined) {
  220. fetchData();
  221. } else if (!Object(external_lodash_["isEqual"])(prevProps, props)) {
  222. debouncedFetchData();
  223. }
  224. });
  225. if (response === '') {
  226. return Object(external_wp_element_["createElement"])(EmptyResponsePlaceholder, props);
  227. } else if (!response) {
  228. return Object(external_wp_element_["createElement"])(LoadingResponsePlaceholder, props);
  229. } else if (response.error) {
  230. return Object(external_wp_element_["createElement"])(ErrorResponsePlaceholder, Object(esm_extends["a" /* default */])({
  231. response: response
  232. }, props));
  233. }
  234. return Object(external_wp_element_["createElement"])(external_wp_element_["RawHTML"], {
  235. className: className
  236. }, response);
  237. }
  238. // CONCATENATED MODULE: ./node_modules/@wordpress/server-side-render/build-module/index.js
  239. /**
  240. * WordPress dependencies
  241. */
  242. /**
  243. * Internal dependencies
  244. */
  245. /**
  246. * Constants
  247. */
  248. const EMPTY_OBJECT = {};
  249. const ExportedServerSideRender = Object(external_wp_data_["withSelect"])(select => {
  250. const coreEditorSelect = select('core/editor');
  251. if (coreEditorSelect) {
  252. const currentPostId = coreEditorSelect.getCurrentPostId(); // For templates and template parts we use a custom ID format.
  253. // Since they aren't real posts, we don't want to use their ID
  254. // for server-side rendering. Since they use a string based ID,
  255. // we can assume real post IDs are numbers.
  256. if (currentPostId && typeof currentPostId === 'number') {
  257. return {
  258. currentPostId
  259. };
  260. }
  261. }
  262. return EMPTY_OBJECT;
  263. })(({
  264. urlQueryArgs = EMPTY_OBJECT,
  265. currentPostId,
  266. ...props
  267. }) => {
  268. const newUrlQueryArgs = Object(external_wp_element_["useMemo"])(() => {
  269. if (!currentPostId) {
  270. return urlQueryArgs;
  271. }
  272. return {
  273. post_id: currentPostId,
  274. ...urlQueryArgs
  275. };
  276. }, [currentPostId, urlQueryArgs]);
  277. return Object(external_wp_element_["createElement"])(ServerSideRender, Object(esm_extends["a" /* default */])({
  278. urlQueryArgs: newUrlQueryArgs
  279. }, props));
  280. });
  281. if (window && window.wp && window.wp.components) {
  282. window.wp.components.ServerSideRender = Object(external_wp_element_["forwardRef"])((props, ref) => {
  283. external_wp_deprecated_default()('wp.components.ServerSideRender', {
  284. since: '5.3',
  285. alternative: 'wp.serverSideRender'
  286. });
  287. return Object(external_wp_element_["createElement"])(ExportedServerSideRender, Object(esm_extends["a" /* default */])({}, props, {
  288. ref: ref
  289. }));
  290. });
  291. }
  292. /* harmony default export */ var build_module = __webpack_exports__["default"] = (ExportedServerSideRender);
  293. /***/ }),
  294. /***/ "GRId":
  295. /***/ (function(module, exports) {
  296. (function() { module.exports = window["wp"]["element"]; }());
  297. /***/ }),
  298. /***/ "HSyU":
  299. /***/ (function(module, exports) {
  300. (function() { module.exports = window["wp"]["blocks"]; }());
  301. /***/ }),
  302. /***/ "K9lf":
  303. /***/ (function(module, exports) {
  304. (function() { module.exports = window["wp"]["compose"]; }());
  305. /***/ }),
  306. /***/ "Mmq9":
  307. /***/ (function(module, exports) {
  308. (function() { module.exports = window["wp"]["url"]; }());
  309. /***/ }),
  310. /***/ "NMb1":
  311. /***/ (function(module, exports) {
  312. (function() { module.exports = window["wp"]["deprecated"]; }());
  313. /***/ }),
  314. /***/ "YLtl":
  315. /***/ (function(module, exports) {
  316. (function() { module.exports = window["lodash"]; }());
  317. /***/ }),
  318. /***/ "l3Sj":
  319. /***/ (function(module, exports) {
  320. (function() { module.exports = window["wp"]["i18n"]; }());
  321. /***/ }),
  322. /***/ "tI+e":
  323. /***/ (function(module, exports) {
  324. (function() { module.exports = window["wp"]["components"]; }());
  325. /***/ }),
  326. /***/ "wx14":
  327. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  328. "use strict";
  329. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });
  330. function _extends() {
  331. _extends = Object.assign || function (target) {
  332. for (var i = 1; i < arguments.length; i++) {
  333. var source = arguments[i];
  334. for (var key in source) {
  335. if (Object.prototype.hasOwnProperty.call(source, key)) {
  336. target[key] = source[key];
  337. }
  338. }
  339. }
  340. return target;
  341. };
  342. return _extends.apply(this, arguments);
  343. }
  344. /***/ }),
  345. /***/ "ywyh":
  346. /***/ (function(module, exports) {
  347. (function() { module.exports = window["wp"]["apiFetch"]; }());
  348. /***/ })
  349. /******/ })["default"];