PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
24.1.0 24.0.0 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 All 404 releases
gutenberg / build / routes / template-part-list / route.js

route.js in Gutenberg trunk, at build/routes/template-part-list/route.js

297 lines 9.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var __create = Object.create;
2 var __defProp = Object.defineProperty;
3 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4 var __getOwnPropNames = Object.getOwnPropertyNames;
5 var __getProtoOf = Object.getPrototypeOf;
6 var __hasOwnProp = Object.prototype.hasOwnProperty;
7 var __commonJS = (cb, mod) => function __require() {
8 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9 };
10 var __copyProps = (to, from, except, desc) => {
11 if (from && typeof from === "object" || typeof from === "function") {
12 for (let key of __getOwnPropNames(from))
13 if (!__hasOwnProp.call(to, key) && key !== except)
14 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15 }
16 return to;
17 };
18 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
19 // If the importer is in node compatibility mode or this is not an ESM
20 // file that has been converted to a CommonJS file using a Babel-
21 // compatible transform (i.e. "__esModule" has not been set), then set
22 // "default" to the CommonJS "module.exports" for node compatibility.
23 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
24 mod
25 ));
26
27 // package-external:@wordpress/data
28 var require_data = __commonJS({
29 "package-external:@wordpress/data"(exports, module) {
30 module.exports = window.wp.data;
31 }
32 });
33
34 // package-external:@wordpress/core-data
35 var require_core_data = __commonJS({
36 "package-external:@wordpress/core-data"(exports, module) {
37 module.exports = window.wp.coreData;
38 }
39 });
40
41 // package-external:@wordpress/i18n
42 var require_i18n = __commonJS({
43 "package-external:@wordpress/i18n"(exports, module) {
44 module.exports = window.wp.i18n;
45 }
46 });
47
48 // package-external:@wordpress/element
49 var require_element = __commonJS({
50 "package-external:@wordpress/element"(exports, module) {
51 module.exports = window.wp.element;
52 }
53 });
54
55 // package-external:@wordpress/preferences
56 var require_preferences = __commonJS({
57 "package-external:@wordpress/preferences"(exports, module) {
58 module.exports = window.wp.preferences;
59 }
60 });
61
62 // package-external:@wordpress/private-apis
63 var require_private_apis = __commonJS({
64 "package-external:@wordpress/private-apis"(exports, module) {
65 module.exports = window.wp.privateApis;
66 }
67 });
68
69 // routes/template-part-list/route.ts
70 var import_data5 = __toESM(require_data());
71 var import_core_data3 = __toESM(require_core_data());
72 var import_i18n = __toESM(require_i18n());
73 import { notFound } from "@wordpress/route";
74
75 // packages/views/build-module/use-view.mjs
76 var import_element = __toESM(require_element(), 1);
77 var import_data = __toESM(require_data(), 1);
78 var import_preferences = __toESM(require_preferences(), 1);
79
80 // packages/views/build-module/preference-keys.mjs
81 function generatePreferenceKey(kind, name, slug) {
82 return `dataviews-${kind}-${name}-${slug}`;
83 }
84
85 // packages/views/build-module/resolve-view.mjs
86 var QUERY_PARAMS = ["page", "search"];
87 function isPlainObject(value) {
88 return typeof value === "object" && value !== null && !Array.isArray(value);
89 }
90 function withoutQueryParams(layer) {
91 const result = isPlainObject(layer) ? { ...layer } : {};
92 for (const key of QUERY_PARAMS) {
93 delete result[key];
94 }
95 return result;
96 }
97 function mergeLayer(lower, upper) {
98 const result = { ...lower };
99 for (const key of Object.keys(upper)) {
100 const value = upper[key];
101 const current = result[key];
102 result[key] = isPlainObject(current) && isPlainObject(value) ? mergeLayer(current, value) : value;
103 }
104 return result;
105 }
106 function getLockedFilters(overrides) {
107 return (overrides?.filters ?? []).filter((filter) => filter.isLocked);
108 }
109 function applyLockedFilters(view, overrides) {
110 const locked = getLockedFilters(overrides);
111 if (locked.length === 0) {
112 return view;
113 }
114 const rest = (view.filters ?? []).filter(
115 (filter) => !locked.some((f) => f.field === filter.field)
116 );
117 return { ...view, filters: [...locked, ...rest] };
118 }
119 function getApplicablePersistedView(persistedView, defaultLayouts) {
120 if (!persistedView || persistedView.type === void 0 || !defaultLayouts || defaultLayouts[persistedView.type]) {
121 return persistedView;
122 }
123 const { type, ...rest } = persistedView;
124 return Object.keys(rest).length > 0 ? rest : void 0;
125 }
126 function resolveBaseView(layers, effectiveType) {
127 const { defaultView, defaultLayouts, activeViewOverrides } = layers;
128 const layoutDefaults = defaultLayouts?.[effectiveType];
129 return applyLockedFilters(
130 [layoutDefaults, activeViewOverrides].reduce(
131 (lower, upper) => mergeLayer(lower, withoutQueryParams(upper)),
132 withoutQueryParams(defaultView)
133 ),
134 activeViewOverrides
135 );
136 }
137 function resolveView(args) {
138 const { defaultView, defaultLayouts, activeViewOverrides, page, search } = args;
139 const persistedView = getApplicablePersistedView(
140 args.persistedView,
141 defaultLayouts
142 );
143 const effectiveType = persistedView?.type ?? activeViewOverrides?.type ?? defaultView?.type;
144 const baseView = resolveBaseView(args, effectiveType);
145 const view = {
146 ...applyLockedFilters(
147 mergeLayer(baseView, withoutQueryParams(persistedView)),
148 activeViewOverrides
149 ),
150 page: Number(page ?? 1),
151 search: search ?? ""
152 };
153 return view;
154 }
155
156 // packages/views/build-module/load-view.mjs
157 var import_data2 = __toESM(require_data(), 1);
158 var import_preferences2 = __toESM(require_preferences(), 1);
159 async function loadView(config) {
160 const {
161 kind,
162 name,
163 slug,
164 defaultView,
165 defaultLayouts,
166 activeViewOverrides,
167 queryParams
168 } = config;
169 const preferenceKey = generatePreferenceKey(kind, name, slug);
170 const persistedView = (0, import_data2.select)(
171 import_preferences2.store
172 ).get("core/views", preferenceKey);
173 return resolveView({
174 defaultView,
175 defaultLayouts,
176 activeViewOverrides,
177 persistedView,
178 page: queryParams?.page,
179 search: queryParams?.search
180 });
181 }
182
183 // packages/views/build-module/use-view-config.mjs
184 var import_data3 = __toESM(require_data(), 1);
185 var import_core_data = __toESM(require_core_data(), 1);
186
187 // packages/views/build-module/lock-unlock.mjs
188 var import_private_apis = __toESM(require_private_apis(), 1);
189 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
190 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
191 "@wordpress/views"
192 );
193
194 // routes/template-part-list/view-utils.ts
195 var import_data4 = __toESM(require_data());
196 var import_core_data2 = __toESM(require_core_data());
197
198 // routes/lock-unlock/index.ts
199 var import_private_apis2 = __toESM(require_private_apis());
200 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
201 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
202 "@wordpress/routes"
203 );
204
205 // routes/template-part-list/view-utils.ts
206 var TEMPLATE_PART_POST_TYPE = "wp_template_part";
207 async function loadTemplatePartViewConfig() {
208 const config = await unlock2((0, import_data4.resolveSelect)(import_core_data2.store)).getViewConfig(
209 "postType",
210 TEMPLATE_PART_POST_TYPE
211 );
212 return {
213 default_view: config?.default_view,
214 default_layouts: config?.default_layouts,
215 view_list: config?.view_list
216 };
217 }
218 async function ensureView(area, search) {
219 const {
220 default_view: defaultView,
221 default_layouts: defaultLayouts,
222 view_list: viewList
223 } = await loadTemplatePartViewConfig();
224 if (!defaultView) {
225 throw new Error(
226 `Missing view configuration for the ${TEMPLATE_PART_POST_TYPE} post type.`
227 );
228 }
229 return loadView({
230 kind: "postType",
231 name: TEMPLATE_PART_POST_TYPE,
232 slug: "default-new",
233 defaultView,
234 defaultLayouts,
235 activeViewOverrides: viewList?.find((v) => v.slug === area)?.view ?? {},
236 queryParams: search
237 });
238 }
239 function viewToQuery(view) {
240 const result = { per_page: -1 };
241 const areaFilter = view.filters?.find(
242 (filter) => filter.field === "area"
243 );
244 if (areaFilter) {
245 result.area = areaFilter.value;
246 }
247 return result;
248 }
249
250 // routes/template-part-list/route.ts
251 var route = {
252 async beforeLoad() {
253 const theme = await (0, import_data5.resolveSelect)(import_core_data3.store).getCurrentTheme();
254 const supports = theme?.theme_supports;
255 if (!supports?.["block-templates"] && !supports?.["block-template-parts"]) {
256 throw notFound();
257 }
258 },
259 title: () => (0, import_i18n.__)("Template Parts"),
260 async canvas(context) {
261 const { params, search } = context;
262 const view = await ensureView(params.area, {
263 page: search.page,
264 search: search.search
265 });
266 if (view.type !== "list") {
267 return void 0;
268 }
269 if (search.postIds && search.postIds.length > 0) {
270 const postId = search.postIds[0].toString();
271 return {
272 postType: "wp_template_part",
273 postId,
274 isPreview: true
275 };
276 }
277 const query = viewToQuery(view);
278 const posts = await (0, import_data5.resolveSelect)(import_core_data3.store).getEntityRecords(
279 "postType",
280 "wp_template_part",
281 query
282 );
283 if (posts && posts.length > 0) {
284 const postId = posts[0].id.toString();
285 return {
286 postType: "wp_template_part",
287 postId,
288 isPreview: true
289 };
290 }
291 return void 0;
292 }
293 };
294 export {
295 route
296 };
297