@woocommerce/data
Version:
WooCommerce Admin data store and utilities
102 lines (101 loc) • 3.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createProductFromTemplate = exports.updateProductStock = exports.setError = exports.setItemsTotalCount = exports.setItems = exports.setItem = void 0;
/**
* External dependencies
*/
const data_controls_1 = require("@wordpress/data-controls");
const url_1 = require("@wordpress/url");
/**
* Internal dependencies
*/
const action_types_1 = __importDefault(require("./action-types"));
const constants_1 = require("../constants");
function setItem(itemType, id, item) {
return {
type: action_types_1.default.SET_ITEM,
id,
item,
itemType,
};
}
exports.setItem = setItem;
function setItems(itemType, query, items, totalCount) {
return {
type: action_types_1.default.SET_ITEMS,
items,
itemType,
query,
totalCount,
};
}
exports.setItems = setItems;
function setItemsTotalCount(itemType, query, totalCount) {
return {
type: action_types_1.default.SET_ITEMS_TOTAL_COUNT,
itemType,
query,
totalCount,
};
}
exports.setItemsTotalCount = setItemsTotalCount;
function setError(itemType, query, error) {
return {
type: action_types_1.default.SET_ERROR,
itemType,
query,
error,
};
}
exports.setError = setError;
function* updateProductStock(product, quantity) {
const updatedProduct = { ...product, stock_quantity: quantity };
const { id, parent_id: parentId, type } = updatedProduct;
// Optimistically update product stock.
yield setItem('products', id, updatedProduct);
let url = constants_1.NAMESPACE;
switch (type) {
case 'variation':
url += `/products/${parentId}/variations/${id}`;
break;
case 'variable':
case 'simple':
default:
url += `/products/${id}`;
}
try {
yield (0, data_controls_1.apiFetch)({
path: url,
method: 'PUT',
data: updatedProduct,
});
return true;
}
catch (error) {
// Update failed, return product back to original state.
yield setItem('products', id, product);
yield setError('products', { id }, error);
return false;
}
}
exports.updateProductStock = updateProductStock;
function* createProductFromTemplate(itemFields, query) {
try {
const url = (0, url_1.addQueryArgs)(`${constants_1.WC_ADMIN_NAMESPACE}/onboarding/tasks/create_product_from_template`, query || {});
const newItem = yield (0, data_controls_1.apiFetch)({
path: url,
method: 'POST',
data: itemFields,
});
yield setItem('products', newItem.id, newItem);
return newItem;
}
catch (error) {
yield setError('createProductFromTemplate', query, error);
throw error;
}
}
exports.createProductFromTemplate = createProductFromTemplate;