UNPKG

@woocommerce/data

Version:
142 lines (141 loc) 5.28 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSuggestedProducts = exports.getRelatedProducts = exports.getPermalinkParts = exports.isPending = exports.getDeleteProductError = exports.getUpdateProductError = exports.getCreateProductError = exports.getProductsError = exports.getProductsTotalCount = exports.getProducts = exports.getProduct = void 0; /** * External dependencies */ const rememo_1 = __importDefault(require("rememo")); /** * Internal dependencies */ const utils_1 = require("./utils"); const constants_1 = require("./constants"); const getProduct = (state, productId, defaultValue = undefined) => { return state.data[productId] || defaultValue; }; exports.getProduct = getProduct; exports.getProducts = (0, rememo_1.default)((state, query, defaultValue = undefined) => { const resourceName = (0, utils_1.getProductResourceName)(query); const ids = state.products[resourceName] ? state.products[resourceName].data : undefined; if (!ids) { return defaultValue; } if (query && typeof query._fields !== 'undefined') { const fields = query._fields; return ids.map((id) => { return fields.reduce((product, field) => { return { ...product, [field]: state.data[id][field], }; }, {}); }); } return ids.map((id) => { return state.data[id]; }); }, (state, query) => { const resourceName = (0, utils_1.getProductResourceName)(query); const ids = state.products[resourceName] ? state.products[resourceName].data : undefined; return [ state.products[resourceName], ...(ids || []).map((id) => { return state.data[id]; }), ]; }); const getProductsTotalCount = (state, query, defaultValue = undefined) => { const resourceName = (0, utils_1.getTotalProductCountResourceName)(query); const totalCount = state.productsCount.hasOwnProperty(resourceName) ? state.productsCount[resourceName] : defaultValue; return totalCount; }; exports.getProductsTotalCount = getProductsTotalCount; const getProductsError = (state, query) => { const resourceName = (0, utils_1.getProductResourceName)(query); return state.errors[resourceName]; }; exports.getProductsError = getProductsError; const getCreateProductError = (state, query) => { const resourceName = (0, utils_1.getProductResourceName)(query); return state.errors[resourceName]; }; exports.getCreateProductError = getCreateProductError; const getUpdateProductError = (state, id, query) => { const resourceName = (0, utils_1.getProductResourceName)(query); return state.errors[`update/${id}/${resourceName}`]; }; exports.getUpdateProductError = getUpdateProductError; const getDeleteProductError = (state, id) => { return state.errors[`delete/${id}`]; }; exports.getDeleteProductError = getDeleteProductError; const isPending = (state, action, productId) => { var _a; if (productId !== undefined && action !== 'createProduct') { return ((_a = state.pending[action]) === null || _a === void 0 ? void 0 : _a[productId]) || false; } else if (action === 'createProduct') { return state.pending[action] || false; } return false; }; exports.isPending = isPending; exports.getPermalinkParts = (0, rememo_1.default)((state, productId) => { const product = state.data[productId]; if (product && product.permalink_template) { const postName = product.slug || product.generated_slug; const [prefix, suffix] = product.permalink_template.split(constants_1.PERMALINK_PRODUCT_REGEX); return { prefix, postName, suffix, }; } return null; }, (state, productId) => { return [state.data[productId]]; }); /** * Returns an array of related products for a given product ID. * * @param {ProductState} state - The current state. * @param {number} productId - The product ID. * @return {PartialProduct[]} The related products. */ exports.getRelatedProducts = (0, rememo_1.default)((state, productId) => { const product = state.data[productId]; if (!(product === null || product === void 0 ? void 0 : product.related_ids)) { return []; } const relatedProducts = (0, exports.getProducts)(state, { include: product.related_ids, }); return relatedProducts || []; }, (state, productId) => { return [state.data[productId]]; }); /** * Return an array of suggested products the * given options. * * @param {ProductState} state - The current state. * @param {GetSuggestedProductsOptions} options - The options. * @return {PartialProduct[]} The suggested products. */ function getSuggestedProducts(state, options) { const key = (0, utils_1.createIdFromOptions)(options); if (!state.suggestedProducts[key]) { return []; } return state.suggestedProducts[key].items; } exports.getSuggestedProducts = getSuggestedProducts;