UNPKG

@woocommerce/data

Version:
80 lines (79 loc) 3.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.request = exports.getResourceIdentifier = exports.isResourcePrefix = exports.getResourcePrefix = exports.getTotalCountResourceName = exports.getResourceName = void 0; /** * External dependencies */ const url_1 = require("@wordpress/url"); const data_controls_1 = require("@wordpress/data-controls"); const controls_1 = require("./controls"); function replacer(_, value) { if (value) { if (Array.isArray(value)) { return [...value].sort(); } if (typeof value === 'object') { return Object.entries(value) .sort() .reduce((current, [propKey, propVal]) => ({ ...current, [propKey]: propVal, }), {}); } } return value; } function getResourceName(prefix, ...identifier) { const identifierString = JSON.stringify(identifier, replacer).replace(/\\"/g, '"'); return `${prefix}:${identifierString}`; } exports.getResourceName = getResourceName; /** * Generate a resource name for order totals count. * * It omits query parameters from the identifier that don't affect * totals values like pagination and response field filtering. * * @param {string} prefix Resource name prefix. * @param {Object} query Query for order totals count. * @return {string} Resource name for order totals. */ function getTotalCountResourceName(prefix, query) { const { _fields, page, per_page, order, orderby, ...totalsQuery } = query; return getResourceName(prefix, totalsQuery); } exports.getTotalCountResourceName = getTotalCountResourceName; function getResourcePrefix(resourceName) { const hasPrefixIndex = resourceName.indexOf(':'); return hasPrefixIndex < 0 ? resourceName : resourceName.substring(0, hasPrefixIndex); } exports.getResourcePrefix = getResourcePrefix; function isResourcePrefix(resourceName, prefix) { const resourcePrefix = getResourcePrefix(resourceName); return resourcePrefix === prefix; } exports.isResourcePrefix = isResourcePrefix; function getResourceIdentifier(resourceName) { const identifierString = resourceName.substring(resourceName.indexOf(':') + 1); return JSON.parse(identifierString); } exports.getResourceIdentifier = getResourceIdentifier; function* request(namespace, query) { const url = (0, url_1.addQueryArgs)(namespace, query); const isUnboundedRequest = query.per_page === -1; const fetch = isUnboundedRequest ? data_controls_1.apiFetch : controls_1.fetchWithHeaders; const response = yield fetch({ path: url, method: 'GET', }); if (isUnboundedRequest && !('data' in response)) { return { items: response, totalCount: response.length }; } if (!isUnboundedRequest && 'data' in response) { const totalCount = parseInt(response.headers.get('x-wp-total') || '', 10); return { items: response.data, totalCount }; } } exports.request = request;