UNPKG

@wordpress/core-data

Version:
93 lines (92 loc) 2.99 kB
// packages/core-data/src/queried-data/selectors.js import EquivalentKeyMap from "equivalent-key-map"; import getQueryParts from "./get-query-parts.mjs"; import { setNestedValue } from "../utils/index.mjs"; var queriedItemsCacheByState = /* @__PURE__ */ new WeakMap(); function getQueriedItemsUncached(state, query, options = {}) { const { supportsPagination = true } = options; const { stableKey, page, perPage, offset: queryOffset, include, fields, context } = getQueryParts(query); const itemIds = state.queries?.[context]?.[stableKey]?.itemIds; if (!itemIds) { return null; } const isPaginated = supportsPagination && perPage !== -1; const startOffset = isPaginated ? queryOffset ?? (page - 1) * perPage : 0; const endOffset = isPaginated ? Math.min(startOffset + perPage, itemIds.length) : itemIds.length; if (isPaginated && itemIds.length < startOffset + perPage) { const totalItems = state.queries[context][stableKey].meta?.totalItems; if (Number.isFinite(totalItems) && itemIds.length < totalItems) { return null; } } const items = []; for (let i = startOffset; i < endOffset; i++) { const itemId = itemIds[i]; if (Array.isArray(include) && !include.includes(itemId)) { continue; } if (itemId === void 0) { continue; } if (!state.items[context]?.hasOwnProperty(itemId)) { return null; } const item = state.items[context][itemId]; let filteredItem; if (Array.isArray(fields)) { filteredItem = {}; for (let f = 0; f < fields.length; f++) { const field = fields[f].split("."); let value = item; field.forEach((fieldName) => { value = value?.[fieldName]; }); setNestedValue(filteredItem, field, value); } } else { if (!state.itemIsComplete[context]?.[itemId]) { return null; } filteredItem = item; } items.push(filteredItem); } return items; } function getQueriedItems(state, query = {}, options = {}) { let queriedItemsCache = queriedItemsCacheByState.get(state); if (queriedItemsCache) { const queriedItems = queriedItemsCache.get(query); if (queriedItems !== void 0) { return queriedItems; } } else { queriedItemsCache = new EquivalentKeyMap(); queriedItemsCacheByState.set(state, queriedItemsCache); } const items = getQueriedItemsUncached(state, query, options); queriedItemsCache.set(query, items); return items; } function getQueriedTotalItems(state, query = {}) { const { stableKey, context } = getQueryParts(query); return state.queries?.[context]?.[stableKey]?.meta?.totalItems ?? null; } function getQueriedTotalPages(state, query = {}) { const { stableKey, context } = getQueryParts(query); return state.queries?.[context]?.[stableKey]?.meta?.totalPages ?? null; } export { getQueriedItems, getQueriedTotalItems, getQueriedTotalPages }; //# sourceMappingURL=selectors.mjs.map