| 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/element |
| 42 |
var require_element = __commonJS({ |
| 43 |
"package-external:@wordpress/element"(exports, module) { |
| 44 |
module.exports = window.wp.element; |
| 45 |
} |
| 46 |
}); |
| 47 |
|
| 48 |
// package-external:@wordpress/preferences |
| 49 |
var require_preferences = __commonJS({ |
| 50 |
"package-external:@wordpress/preferences"(exports, module) { |
| 51 |
module.exports = window.wp.preferences; |
| 52 |
} |
| 53 |
}); |
| 54 |
|
| 55 |
// package-external:@wordpress/private-apis |
| 56 |
var require_private_apis = __commonJS({ |
| 57 |
"package-external:@wordpress/private-apis"(exports, module) { |
| 58 |
module.exports = window.wp.privateApis; |
| 59 |
} |
| 60 |
}); |
| 61 |
|
| 62 |
// routes/post-list/route.ts |
| 63 |
var import_data5 = __toESM(require_data()); |
| 64 |
var import_core_data3 = __toESM(require_core_data()); |
| 65 |
import { notFound } from "@wordpress/route"; |
| 66 |
|
| 67 |
// packages/views/build-module/use-view.mjs |
| 68 |
var import_element = __toESM(require_element(), 1); |
| 69 |
var import_data = __toESM(require_data(), 1); |
| 70 |
var import_preferences = __toESM(require_preferences(), 1); |
| 71 |
|
| 72 |
// packages/views/build-module/preference-keys.mjs |
| 73 |
function generatePreferenceKey(kind, name, slug) { |
| 74 |
return `dataviews-${kind}-${name}-${slug}`; |
| 75 |
} |
| 76 |
|
| 77 |
// packages/views/build-module/resolve-view.mjs |
| 78 |
var QUERY_PARAMS = ["page", "search"]; |
| 79 |
function isPlainObject(value) { |
| 80 |
return typeof value === "object" && value !== null && !Array.isArray(value); |
| 81 |
} |
| 82 |
function withoutQueryParams(layer) { |
| 83 |
const result = isPlainObject(layer) ? { ...layer } : {}; |
| 84 |
for (const key of QUERY_PARAMS) { |
| 85 |
delete result[key]; |
| 86 |
} |
| 87 |
return result; |
| 88 |
} |
| 89 |
function mergeLayer(lower, upper) { |
| 90 |
const result = { ...lower }; |
| 91 |
for (const key of Object.keys(upper)) { |
| 92 |
const value = upper[key]; |
| 93 |
const current = result[key]; |
| 94 |
result[key] = isPlainObject(current) && isPlainObject(value) ? mergeLayer(current, value) : value; |
| 95 |
} |
| 96 |
return result; |
| 97 |
} |
| 98 |
function getLockedFilters(overrides) { |
| 99 |
return (overrides?.filters ?? []).filter((filter) => filter.isLocked); |
| 100 |
} |
| 101 |
function applyLockedFilters(view, overrides) { |
| 102 |
const locked = getLockedFilters(overrides); |
| 103 |
if (locked.length === 0) { |
| 104 |
return view; |
| 105 |
} |
| 106 |
const rest = (view.filters ?? []).filter( |
| 107 |
(filter) => !locked.some((f) => f.field === filter.field) |
| 108 |
); |
| 109 |
return { ...view, filters: [...locked, ...rest] }; |
| 110 |
} |
| 111 |
function getApplicablePersistedView(persistedView, defaultLayouts) { |
| 112 |
if (!persistedView || persistedView.type === void 0 || !defaultLayouts || defaultLayouts[persistedView.type]) { |
| 113 |
return persistedView; |
| 114 |
} |
| 115 |
const { type, ...rest } = persistedView; |
| 116 |
return Object.keys(rest).length > 0 ? rest : void 0; |
| 117 |
} |
| 118 |
function resolveBaseView(layers, effectiveType) { |
| 119 |
const { defaultView, defaultLayouts, activeViewOverrides } = layers; |
| 120 |
const layoutDefaults = defaultLayouts?.[effectiveType]; |
| 121 |
return applyLockedFilters( |
| 122 |
[layoutDefaults, activeViewOverrides].reduce( |
| 123 |
(lower, upper) => mergeLayer(lower, withoutQueryParams(upper)), |
| 124 |
withoutQueryParams(defaultView) |
| 125 |
), |
| 126 |
activeViewOverrides |
| 127 |
); |
| 128 |
} |
| 129 |
function resolveView(args) { |
| 130 |
const { defaultView, defaultLayouts, activeViewOverrides, page, search } = args; |
| 131 |
const persistedView = getApplicablePersistedView( |
| 132 |
args.persistedView, |
| 133 |
defaultLayouts |
| 134 |
); |
| 135 |
const effectiveType = persistedView?.type ?? activeViewOverrides?.type ?? defaultView?.type; |
| 136 |
const baseView = resolveBaseView(args, effectiveType); |
| 137 |
const view = { |
| 138 |
...applyLockedFilters( |
| 139 |
mergeLayer(baseView, withoutQueryParams(persistedView)), |
| 140 |
activeViewOverrides |
| 141 |
), |
| 142 |
page: Number(page ?? 1), |
| 143 |
search: search ?? "" |
| 144 |
}; |
| 145 |
return view; |
| 146 |
} |
| 147 |
|
| 148 |
// packages/views/build-module/load-view.mjs |
| 149 |
var import_data2 = __toESM(require_data(), 1); |
| 150 |
var import_preferences2 = __toESM(require_preferences(), 1); |
| 151 |
async function loadView(config) { |
| 152 |
const { |
| 153 |
kind, |
| 154 |
name, |
| 155 |
slug, |
| 156 |
defaultView, |
| 157 |
defaultLayouts, |
| 158 |
activeViewOverrides, |
| 159 |
queryParams |
| 160 |
} = config; |
| 161 |
const preferenceKey = generatePreferenceKey(kind, name, slug); |
| 162 |
const persistedView = (0, import_data2.select)( |
| 163 |
import_preferences2.store |
| 164 |
).get("core/views", preferenceKey); |
| 165 |
return resolveView({ |
| 166 |
defaultView, |
| 167 |
defaultLayouts, |
| 168 |
activeViewOverrides, |
| 169 |
persistedView, |
| 170 |
page: queryParams?.page, |
| 171 |
search: queryParams?.search |
| 172 |
}); |
| 173 |
} |
| 174 |
|
| 175 |
// packages/views/build-module/use-view-config.mjs |
| 176 |
var import_data3 = __toESM(require_data(), 1); |
| 177 |
var import_core_data = __toESM(require_core_data(), 1); |
| 178 |
|
| 179 |
// packages/views/build-module/lock-unlock.mjs |
| 180 |
var import_private_apis = __toESM(require_private_apis(), 1); |
| 181 |
var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( |
| 182 |
"I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", |
| 183 |
"@wordpress/views" |
| 184 |
); |
| 185 |
|
| 186 |
// routes/post-list/view-utils.ts |
| 187 |
var import_data4 = __toESM(require_data()); |
| 188 |
var import_core_data2 = __toESM(require_core_data()); |
| 189 |
|
| 190 |
// routes/lock-unlock/index.ts |
| 191 |
var import_private_apis2 = __toESM(require_private_apis()); |
| 192 |
var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( |
| 193 |
"I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", |
| 194 |
"@wordpress/routes" |
| 195 |
); |
| 196 |
|
| 197 |
// routes/post-list/view-utils.ts |
| 198 |
async function loadPostTypeViewConfig(postType) { |
| 199 |
const config = await unlock2((0, import_data4.resolveSelect)(import_core_data2.store)).getViewConfig( |
| 200 |
"postType", |
| 201 |
postType |
| 202 |
); |
| 203 |
return { |
| 204 |
default_view: config?.default_view, |
| 205 |
default_layouts: config?.default_layouts, |
| 206 |
view_list: config?.view_list |
| 207 |
}; |
| 208 |
} |
| 209 |
function getActiveViewOverrides(viewList, slug) { |
| 210 |
return viewList?.find((v) => v.slug === slug)?.view ?? {}; |
| 211 |
} |
| 212 |
async function ensureView(type, slug, search) { |
| 213 |
const { |
| 214 |
default_view: defaultView, |
| 215 |
default_layouts: defaultLayouts, |
| 216 |
view_list: viewList |
| 217 |
} = await loadPostTypeViewConfig(type); |
| 218 |
if (!defaultView) { |
| 219 |
throw new Error( |
| 220 |
`Missing view configuration for the ${type} post type.` |
| 221 |
); |
| 222 |
} |
| 223 |
return loadView({ |
| 224 |
kind: "postType", |
| 225 |
name: type, |
| 226 |
slug: "default-new", |
| 227 |
defaultView, |
| 228 |
defaultLayouts, |
| 229 |
activeViewOverrides: getActiveViewOverrides(viewList, slug ?? "all"), |
| 230 |
queryParams: search |
| 231 |
}); |
| 232 |
} |
| 233 |
function viewToQuery(view, postType) { |
| 234 |
const result = { _embed: "author,wp:featuredmedia" }; |
| 235 |
if (void 0 !== view.perPage) { |
| 236 |
result.per_page = view.perPage; |
| 237 |
} |
| 238 |
if (void 0 !== view.page) { |
| 239 |
result.page = view.page; |
| 240 |
} |
| 241 |
if (![void 0, ""].includes(view.search)) { |
| 242 |
result.search = view.search; |
| 243 |
} |
| 244 |
if (void 0 !== view.sort?.field) { |
| 245 |
let sortField = view.sort.field; |
| 246 |
if (sortField === "attached_to") { |
| 247 |
sortField = "parent"; |
| 248 |
} |
| 249 |
result.orderby = sortField; |
| 250 |
} |
| 251 |
if (void 0 !== view.sort?.direction) { |
| 252 |
result.order = view.sort.direction; |
| 253 |
} |
| 254 |
if (view.showLevels) { |
| 255 |
result.orderby_hierarchy = true; |
| 256 |
} |
| 257 |
const status = view.filters?.find( |
| 258 |
(filter) => filter.field === "status" |
| 259 |
); |
| 260 |
if (status) { |
| 261 |
result.status = status.value; |
| 262 |
} else if (postType === "attachment") { |
| 263 |
result.status = "inherit"; |
| 264 |
} else { |
| 265 |
result.status = "draft,future,pending,private,publish"; |
| 266 |
} |
| 267 |
const author = view.filters?.find( |
| 268 |
(filter) => filter.field === "author" |
| 269 |
); |
| 270 |
if (author && author.operator === "is") { |
| 271 |
result.author = author.value; |
| 272 |
} else if (author && author.operator === "isNot") { |
| 273 |
result.author_exclude = author.value; |
| 274 |
} |
| 275 |
const commentStatus = view.filters?.find( |
| 276 |
(filter) => filter.field === "comment_status" |
| 277 |
); |
| 278 |
if (commentStatus && commentStatus.operator === "is") { |
| 279 |
result.comment_status = commentStatus.value; |
| 280 |
} else if (commentStatus && commentStatus.operator === "isNot") { |
| 281 |
result.comment_status_exclude = commentStatus.value; |
| 282 |
} |
| 283 |
const mediaType = view.filters?.find( |
| 284 |
(filter) => filter.field === "media_type" |
| 285 |
); |
| 286 |
if (mediaType) { |
| 287 |
result.media_type = mediaType.value; |
| 288 |
} |
| 289 |
const date = view.filters?.find((filter) => filter.field === "date"); |
| 290 |
if (date && date.value) { |
| 291 |
if (date.operator === "before") { |
| 292 |
result.before = date.value; |
| 293 |
} else if (date.operator === "after") { |
| 294 |
result.after = date.value; |
| 295 |
} |
| 296 |
} |
| 297 |
if (postType === "attachment") { |
| 298 |
result._embed = "wp:attached-to"; |
| 299 |
} |
| 300 |
return result; |
| 301 |
} |
| 302 |
|
| 303 |
// routes/post-list/route.ts |
| 304 |
var route = { |
| 305 |
beforeLoad: async ({ params }) => { |
| 306 |
try { |
| 307 |
const postType = await (0, import_data5.resolveSelect)(import_core_data3.store).getPostType( |
| 308 |
params.type |
| 309 |
); |
| 310 |
if (!postType) { |
| 311 |
throw notFound(); |
| 312 |
} |
| 313 |
} catch { |
| 314 |
throw notFound(); |
| 315 |
} |
| 316 |
}, |
| 317 |
title: async ({ params }) => { |
| 318 |
const postType = await (0, import_data5.resolveSelect)(import_core_data3.store).getPostType( |
| 319 |
params.type |
| 320 |
); |
| 321 |
return postType?.labels?.name || params.type; |
| 322 |
}, |
| 323 |
async canvas(context) { |
| 324 |
const { params, search } = context; |
| 325 |
const view = await ensureView(params.type, params.slug, { |
| 326 |
page: search.page, |
| 327 |
search: search.search |
| 328 |
}); |
| 329 |
if (view.type !== "list") { |
| 330 |
return void 0; |
| 331 |
} |
| 332 |
if (search.postIds && search.postIds.length > 0) { |
| 333 |
const postId = search.postIds[0].toString(); |
| 334 |
return { |
| 335 |
postType: params.type, |
| 336 |
postId, |
| 337 |
isPreview: true |
| 338 |
}; |
| 339 |
} |
| 340 |
const query = viewToQuery(view, params.type); |
| 341 |
const posts = await (0, import_data5.resolveSelect)(import_core_data3.store).getEntityRecords( |
| 342 |
"postType", |
| 343 |
params.type, |
| 344 |
{ ...query, per_page: 1 } |
| 345 |
); |
| 346 |
if (posts && posts.length > 0) { |
| 347 |
const postId = posts[0].id.toString(); |
| 348 |
return { |
| 349 |
postType: params.type, |
| 350 |
postId, |
| 351 |
isPreview: true |
| 352 |
}; |
| 353 |
} |
| 354 |
return void 0; |
| 355 |
} |
| 356 |
}; |
| 357 |
export { |
| 358 |
route |
| 359 |
}; |
| 360 |
|