@woocommerce/data
Version:
WooCommerce Admin data store and utilities
76 lines (75 loc) • 2.3 kB
JavaScript
/**
* External dependencies
*/
/**
* Internal dependencies
*/
import TYPES from './action-types';
import { getResourceName } from '../utils';
import { getTotalCountResourceName } from './utils';
const initialState = {
items: {},
errors: {},
data: {},
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case TYPES.SET_ITEM:
const itemData = state.data[action.itemType] || {};
return {
...state,
data: {
...state.data,
[]: {
...itemData,
[]: {
...(itemData[action.id] || {}),
...action.item,
},
},
},
};
case TYPES.SET_ITEMS:
const ids = [];
const nextItems = action.items.reduce((result, theItem) => {
ids.push(theItem.id);
result[theItem.id] = theItem;
return result;
}, {});
const resourceName = getResourceName(action.itemType, action.query);
return {
...state,
items: {
...state.items,
[]: { data: ids },
},
data: {
...state.data,
[]: {
...state.data[action.itemType],
...nextItems,
},
},
};
case TYPES.SET_ITEMS_TOTAL_COUNT:
const totalResourceName = getTotalCountResourceName(action.itemType, action.query);
return {
...state,
items: {
...state.items,
[]: action.totalCount,
},
};
case TYPES.SET_ERROR:
return {
...state,
errors: {
...state.errors,
[]: action.error,
},
};
default:
return state;
}
};
export default reducer;