import * as types from '../constants';
const item = (state, action) => {
switch (action.type) {
case types.UPDATE_ITEM_SIZE_REQUEST:
return {
...state,
isUpdatingSize: true
};
case types.UPDATE_ITEM_SIZE_SUCCESS:
return action.payload;
case types.UPDATE_ITEM_SIZE_FAILURE:
return {
...state,
isUpdatingSize: false,
error: action.payload.error
};
case types.DELETE_ITEM_REQUEST:
return {
...state,
isDeleting: true,
isDeletingTimerOn: true
};
case types.DELETE_ITEM_SUCCESS:
return {
...state,
isDeleting: false,
isDeletingTimerOn: false,
isDeleted: true
};
case types.DELETE_ITEM_FAILURE:
return {
...state,
isDeleting: true,
isDeletingTimerOn: true,
error: action.payload.error
};
case types.ADD_ITEM_TO_CART_REQUEST:
return {
...state,
isUpdatingCart: true
};
case types.ADD_ITEM_TO_CART_SUCCESS:
return {
...state,
isAddingToCart: false,
article: {
isOnCart: true
}
};
case types.ADD_ITEM_TO_CART_FAILURE:
return {
...state,
isAddingToCart: false,
error: action.payload.error
};
default:
return state;
}
};
const collectionData = (state, action) => {
switch (action.type) {
case types.SHOW_MORE_ITEMS:
return {
...state,
visibleItems: action.payload.itemCount
};
case types.UPDATE_ITEM_SIZE_SUCCESS:
return {
...state,
isProcessing: false
};
default:
return state;
}
};
const items = (state, action) => {
const itemId = action.payload.itemId;
switch (action.type) {
case types.UPDATE_ITEM_SIZE_REQUEST:
case types.UPDATE_ITEM_SIZE_SUCCESS:
case types.UPDATE_ITEM_SIZE_FAILURE:
case types.DELETE_ITEM_REQUEST:
case types.DELETE_ITEM_SUCCESS:
case types.DELETE_ITEM_FAILURE:
case types.ADD_ITEM_TO_CART_REQUEST:
case types.ADD_ITEM_TO_CART_SUCCESS:
case types.ADD_ITEM_TO_CART_FAILURE:
return {
...state,
[itemId]: item(state[itemId], action)
};
default:
return state;
}
};
const itemsByCollection = (state, action) => {
const collectionId = action.payload.collectionId;
switch (action.type) {
case types.SHOW_MORE_ITEMS:
return {
...state,
[collectionId]: collectionData(state[collectionId], action)
};
case types.UPDATE_ITEM_SIZE_REQUEST:
case types.UPDATE_ITEM_SIZE_SUCCESS:
case types.UPDATE_ITEM_SIZE_FAILURE:
case types.REMOVE_ITEM_REQUEST:
case types.REMOVE_ITEM_SUCCESS:
case types.REMOVE_ITEM_FAILURE:
case types.ADD_ITEM_TO_CART_REQUEST:
case types.ADD_ITEM_TO_CART_SUCCESS:
case types.ADD_ITEM_TO_CART_FAILURE:
return {
...state,
[collectionId]: items(state[collectionId].items, action)
};
default:
return state;
}
};
export default itemsByCollection;