@woocommerce/data
Version:
WooCommerce Admin data store and utilities
81 lines (80 loc) • 2.64 kB
JavaScript
;
/**
* External dependencies
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Internal dependencies
*/
const action_types_1 = __importDefault(require("./action-types"));
const utils_1 = require("../utils");
const utils_2 = require("./utils");
const initialState = {
items: {},
errors: {},
data: {},
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case action_types_1.default.SET_ITEM:
const itemData = state.data[action.itemType] || {};
return {
...state,
data: {
...state.data,
[action.itemType]: {
...itemData,
[action.id]: {
...(itemData[action.id] || {}),
...action.item,
},
},
},
};
case action_types_1.default.SET_ITEMS:
const ids = [];
const nextItems = action.items.reduce((result, theItem) => {
ids.push(theItem.id);
result[theItem.id] = theItem;
return result;
}, {});
const resourceName = (0, utils_1.getResourceName)(action.itemType, action.query);
return {
...state,
items: {
...state.items,
[resourceName]: { data: ids },
},
data: {
...state.data,
[action.itemType]: {
...state.data[action.itemType],
...nextItems,
},
},
};
case action_types_1.default.SET_ITEMS_TOTAL_COUNT:
const totalResourceName = (0, utils_2.getTotalCountResourceName)(action.itemType, action.query);
return {
...state,
items: {
...state.items,
[totalResourceName]: action.totalCount,
},
};
case action_types_1.default.SET_ERROR:
return {
...state,
errors: {
...state.errors,
[(0, utils_1.getResourceName)(action.itemType, action.query)]: action.error,
},
};
default:
return state;
}
};
exports.default = reducer;