[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/build/routes/post-list/ -> route.js (source)

   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  // routes/post-list/route.ts
  56  var import_data4 = __toESM(require_data());
  57  var import_core_data2 = __toESM(require_core_data());
  58  
  59  // packages/views/build-module/preference-keys.js
  60  function generatePreferenceKey(kind, name, slug) {
  61    return `dataviews-$kind}-$name}-$slug}`;
  62  }
  63  
  64  // packages/views/build-module/use-view.js
  65  var import_element = __toESM(require_element());
  66  var import_data = __toESM(require_data());
  67  var import_preferences = __toESM(require_preferences());
  68  
  69  // packages/views/build-module/load-view.js
  70  var import_data2 = __toESM(require_data());
  71  var import_preferences2 = __toESM(require_preferences());
  72  async function loadView(config) {
  73    const { kind, name, slug, defaultView, queryParams } = config;
  74    const preferenceKey = generatePreferenceKey(kind, name, slug);
  75    const persistedView = (0, import_data2.select)(import_preferences2.store).get(
  76      "core/views",
  77      preferenceKey
  78    );
  79    const baseView = persistedView ?? defaultView;
  80    const page = queryParams?.page ?? 1;
  81    const search = queryParams?.search ?? "";
  82    return {
  83      ...baseView,
  84      page,
  85      search
  86    };
  87  }
  88  
  89  // routes/post-list/view-utils.ts
  90  var import_data3 = __toESM(require_data());
  91  var import_core_data = __toESM(require_core_data());
  92  var DEFAULT_VIEW = {
  93    type: "table",
  94    sort: {
  95      field: "date",
  96      direction: "desc"
  97    },
  98    fields: ["author", "status", "date"],
  99    titleField: "title",
 100    mediaField: "featured_media",
 101    descriptionField: "excerpt"
 102  };
 103  var DEFAULT_VIEWS = [
 104    {
 105      slug: "all",
 106      label: "All",
 107      view: {
 108        ...DEFAULT_VIEW
 109      }
 110    },
 111    {
 112      slug: "publish",
 113      label: "Published",
 114      view: {
 115        ...DEFAULT_VIEW,
 116        filters: [
 117          {
 118            field: "status",
 119            operator: "is",
 120            value: "publish"
 121          }
 122        ]
 123      }
 124    },
 125    {
 126      slug: "draft",
 127      label: "Draft",
 128      view: {
 129        ...DEFAULT_VIEW,
 130        filters: [
 131          {
 132            field: "status",
 133            operator: "is",
 134            value: "draft"
 135          }
 136        ]
 137      }
 138    },
 139    {
 140      slug: "pending",
 141      label: "Pending",
 142      view: {
 143        ...DEFAULT_VIEW,
 144        filters: [
 145          {
 146            field: "status",
 147            operator: "is",
 148            value: "pending"
 149          }
 150        ]
 151      }
 152    },
 153    {
 154      slug: "private",
 155      label: "Private",
 156      view: {
 157        ...DEFAULT_VIEW,
 158        filters: [
 159          {
 160            field: "status",
 161            operator: "is",
 162            value: "private"
 163          }
 164        ]
 165      }
 166    },
 167    {
 168      slug: "trash",
 169      label: "Trash",
 170      view: {
 171        ...DEFAULT_VIEW,
 172        filters: [
 173          {
 174            field: "status",
 175            operator: "is",
 176            value: "trash"
 177          }
 178        ]
 179      }
 180    }
 181  ];
 182  function getDefaultView(postType, slug) {
 183    const viewConfig = DEFAULT_VIEWS.find((v) => v.slug === slug);
 184    const baseView = viewConfig?.view || DEFAULT_VIEW;
 185    return {
 186      ...baseView,
 187      showLevels: postType?.hierarchical
 188    };
 189  }
 190  async function ensureView(type, slug, search) {
 191    const postTypeObject = await (0, import_data3.resolveSelect)(import_core_data.store).getPostType(type);
 192    const defaultView = getDefaultView(postTypeObject, slug);
 193    return loadView({
 194      kind: "postType",
 195      name: type,
 196      slug: slug ?? "all",
 197      defaultView,
 198      queryParams: search
 199    });
 200  }
 201  function viewToQuery(view, postType) {
 202    const result = {};
 203    if (void 0 !== view.perPage) {
 204      result.per_page = view.perPage;
 205    }
 206    if (void 0 !== view.page) {
 207      result.page = view.page;
 208    }
 209    if (![void 0, ""].includes(view.search)) {
 210      result.search = view.search;
 211    }
 212    if (void 0 !== view.sort?.field) {
 213      let sortField = view.sort.field;
 214      if (sortField === "attached_to") {
 215        sortField = "parent";
 216      }
 217      result.orderby = sortField;
 218    }
 219    if (void 0 !== view.sort?.direction) {
 220      result.order = view.sort.direction;
 221    }
 222    if (view.showLevels) {
 223      result.orderby_hierarchy = true;
 224    }
 225    const status = view.filters?.find(
 226      (filter) => filter.field === "status"
 227    );
 228    if (status) {
 229      result.status = status.value;
 230    } else if (postType === "attachment") {
 231      result.status = "inherit";
 232    } else {
 233      result.status = "draft,future,pending,private,publish";
 234    }
 235    const author = view.filters?.find(
 236      (filter) => filter.field === "author"
 237    );
 238    if (author && author.operator === "is") {
 239      result.author = author.value;
 240    } else if (author && author.operator === "isNot") {
 241      result.author_exclude = author.value;
 242    }
 243    const commentStatus = view.filters?.find(
 244      (filter) => filter.field === "comment_status"
 245    );
 246    if (commentStatus && commentStatus.operator === "is") {
 247      result.comment_status = commentStatus.value;
 248    } else if (commentStatus && commentStatus.operator === "isNot") {
 249      result.comment_status_exclude = commentStatus.value;
 250    }
 251    const mediaType = view.filters?.find(
 252      (filter) => filter.field === "media_type"
 253    );
 254    if (mediaType) {
 255      result.media_type = mediaType.value;
 256    }
 257    const date = view.filters?.find((filter) => filter.field === "date");
 258    if (date && date.value) {
 259      if (date.operator === "before") {
 260        result.before = date.value;
 261      } else if (date.operator === "after") {
 262        result.after = date.value;
 263      }
 264    }
 265    if (postType === "attachment") {
 266      result._embed = "wp:attached-to";
 267    }
 268    return result;
 269  }
 270  
 271  // routes/post-list/route.ts
 272  var route = {
 273    title: async ({ params }) => {
 274      const postType = await (0, import_data4.resolveSelect)(import_core_data2.store).getPostType(
 275        params.type
 276      );
 277      return postType?.labels?.name || params.type;
 278    },
 279    async canvas(context) {
 280      const { params, search } = context;
 281      const view = await ensureView(params.type, params.slug, {
 282        page: search.page,
 283        search: search.search
 284      });
 285      if (view.type !== "list") {
 286        return void 0;
 287      }
 288      if (search.postIds && search.postIds.length > 0) {
 289        const postId = search.postIds[0].toString();
 290        return {
 291          postType: params.type,
 292          postId,
 293          isPreview: true,
 294          editLink: `/types/$params.type}/edit/$postId}`
 295        };
 296      }
 297      const query = viewToQuery(view, params.type);
 298      const posts = await (0, import_data4.resolveSelect)(import_core_data2.store).getEntityRecords(
 299        "postType",
 300        params.type,
 301        { ...query, per_page: 1 }
 302      );
 303      if (posts && posts.length > 0) {
 304        const postId = posts[0].id.toString();
 305        return {
 306          postType: params.type,
 307          postId,
 308          isPreview: true,
 309          editLink: `/types/$params.type}/edit/$postId}`
 310        };
 311      }
 312      return void 0;
 313    }
 314  };
 315  export {
 316    route
 317  };


Generated : Wed Apr 15 08:20:10 2026 Cross-referenced by PHPXref