Skip to content

Instantly share code, notes, and snippets.

@Jalson1982
Created January 12, 2019 09:05
Show Gist options
  • Save Jalson1982/2ac9cc03394e7ae2ebc40dba69dcd75f to your computer and use it in GitHub Desktop.
Save Jalson1982/2ac9cc03394e7ae2ebc40dba69dcd75f to your computer and use it in GitHub Desktop.
mport { SET_PREPARED_ORDERS } from "../constants";
const initialState = {
orders: []
};
const preparedOrdersReducer = (state = initialState, action) => {
switch (action.type) {
case SET_PREPARED_ORDERS:
return {
...state,
orders: generatePreparedOrder(state.orders, action.payload)
};
default:
return state;
}
};
// Update object without mutation.
const removeKey = (obj, propToDelete) => {
const { [propToDelete]: deleted, ...objectWithoutDeletedProp } = obj;
return objectWithoutDeletedProp;
};
const generatePreparedOrder = (orders, data) => {
//Search with ID
for (let i = 0; i < orders.length; i++) {
if (orders[i].id == data.id) {
//If find the same id order, it will combine items.
// To avoid mutation first create array of orders.
const filteredOrders = orders.filter(order => order.id !== orders[i].id);
//Remove items array from object
const filteredObj = removeKey(orders[i], "items");
const items = generatePreparedItem(orders[i].items, data.items);
//create new order.
const newOrder = { ...filteredObj, items };
// create new araray orders
const newOrders = [...filteredOrders, newOrder];
return newOrders;
}
}
//If there is not same id order, new order will be pushed.
const newOrders = [...orders, data];
return newOrders;
};
const generatePreparedItem = (oldItems, items) => {
//Search with EAN of item
for (let i = 0; i < items.length; i++) {
let j = 0;
for (j = 0; j < oldItems.length; j++) {
if (items[i].EAN == oldItems[j].EAN) {
//If you find the same EAN item, it will be replaced.
let newOrder = oldItems.filter(item => item !== oldItems[j]);
oldItems = [...newOrder, items[i]];
break;
}
}
if (j === oldItems.length) {
//Not found with same EAN item, it will be pushed.
oldItems = [...oldItems, items[i]];
}
}
return oldItems;
};
export default preparedOrdersReducer;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment