@shopgate/pwa-common-commerce
Version:
Commerce library for the Shopgate Connect PWA.
60 lines (59 loc) • 1.63 kB
JavaScript
import "core-js/modules/es.array.reduce.js";
import { PRODUCT_LIFETIME, REQUEST_PRODUCT_VARIANTS, RECEIVE_PRODUCT_VARIANTS, ERROR_PRODUCT_VARIANTS, EXPIRE_PRODUCT_BY_ID, EXPIRE_PRODUCT_DATA } from "../constants";
/**
* Stores product variants by the ID of the related parent product.
* @param {Object} [state={}] The current state.
* @param {Object} action The action object.
* @return {Object} The new state.
*/
export default function variantsByProductId(state = {}, action = {}) {
switch (action.type) {
case REQUEST_PRODUCT_VARIANTS:
return {
...state,
[action.productId]: {
...state[action.productId],
isFetching: true,
expires: 0
}
};
case RECEIVE_PRODUCT_VARIANTS:
return {
...state,
[action.productId]: {
...state[action.productId],
variants: action.variants,
isFetching: false,
expires: Date.now() + PRODUCT_LIFETIME
}
};
case ERROR_PRODUCT_VARIANTS:
return {
...state,
[action.productId]: {
...state[action.productId],
isFetching: false
}
};
case EXPIRE_PRODUCT_BY_ID:
return {
...state,
[action.productId]: {
...state[action.productId],
expires: 0
}
};
case EXPIRE_PRODUCT_DATA:
{
return Object.keys(state).reduce((acc, productId) => {
acc[productId] = {
...state[productId],
expires: 0
};
return acc;
}, {});
}
default:
return state;
}
}