Created
October 15, 2017 01:14
-
-
Save SanskarSans/c6664a50e5461b1073b026dbaf049a14 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//reducer for adding and updating menu. Adding is working fine but editing is not working as in editing, the user can switch | |
// from one menu to another | |
const restaurantsMenu = { | |
food_beverages: { | |
restaurant: { | |
food_menu: [], | |
beverages_menu: [] | |
}, | |
coffee_shop: { | |
food_menu: [], | |
beverages_menu: [] | |
}, | |
bar: { | |
food_menu: [], | |
beverages_menu: [] | |
}, | |
pub: { | |
food_menu: [], | |
beverages_menu: [] | |
}, | |
room_service: { | |
food_menu: [], | |
beverages_menu: [] | |
} | |
} | |
}; | |
const initialState = fromJS({ | |
loading: false, | |
loaded: false, | |
response: {}, | |
error: null, | |
restaurantsMenu, | |
bar: {} | |
}); | |
function foodAndBeverage(state = initialState, action) { | |
switch (action.type) { | |
case LOAD_FOOD_AND_BEVERAGE: | |
case POST_FOOD_AND_BEVERAGE: | |
case DELETE_FOOD_AND_BEVERAGE: | |
case EDIT_FOOD_AND_BEVERAGE: | |
return state.merge({ | |
loading: true, | |
loaded: false, | |
response: null, | |
error: null | |
}); | |
case LOAD_FOOD_AND_BEVERAGE_SUCCESS: | |
return state | |
.merge({ | |
loading: false, | |
loaded: true, | |
response: action.response.message, | |
error: null | |
}) | |
.updateIn(['restaurantsMenu', 'food_beverages'], menus => { | |
const menu = Object.assign( | |
{}, | |
{ ...menus.toJS(), ...action.response.data.food_beverages } | |
); | |
return fromJS(menu); | |
}); | |
case POST_FOOD_AND_BEVERAGE_SUCCESS: { | |
const { data, message } = action.response; | |
return state | |
.merge({ | |
loading: false, | |
loaded: true, | |
response: message, | |
error: null | |
}) | |
.updateIn(['restaurantsMenu', 'food_beverages', data.type], menus => { | |
let newFoodMenu = menus.get('food_menu'); | |
let newBeverageMenu = menus.get('beverages_menu'); | |
data.dataList.food_menu.map(food => { | |
newFoodMenu = menus.get('food_menu').push(fromJS(food)); | |
}); | |
data.dataList.beverages_menu.map(beverage => { | |
newBeverageMenu = menus.get('beverages_menu').push(fromJS(beverage)); | |
}); | |
return menus.merge({ | |
food_menu: newFoodMenu, | |
beverages_menu: newBeverageMenu | |
}); | |
}); | |
} | |
case EDIT_FOOD_AND_BEVERAGE_SUCCESS: { | |
const { | |
data, | |
food_beverage_type, | |
menuId, | |
menu_type, | |
new_date_inserted, | |
message | |
} = action.response.data; | |
return state | |
.merge({ | |
loading: false, | |
loaded: true, | |
response: message, | |
error: null | |
}) | |
.updateIn( | |
['restaurantsMenu', 'food_beverages', food_beverage_type, new_date_inserted.type], | |
menus => { | |
const updated_menu_type = new_date_inserted.type; | |
if (menu_type === updated_menu_type) { | |
return menus.map(menu => { | |
if (menu.get('_id') === menuId) { | |
return menu.merge({ | |
menu_title: data.menu_title, | |
type: updated_menu_type | |
}); | |
} | |
return fromJS(menu); | |
}); | |
} | |
if (menu_type !== updated_menu_type) { | |
const updateUnmatched = state.updateIn( | |
['restaurantsMenu', 'food_beverages', food_beverage_type, menu_type], | |
menus_instance => menus_instance.filter(instance => instance.get('_id') !== menuId) | |
); | |
const menusNotToUpdate = updateUnmatched.getIn([ | |
'restaurantsMenu', | |
'food_beverages', | |
food_beverage_type, | |
menu_type | |
]); | |
return state.updateIn( | |
['restaurantsMenu', 'food_beverages', food_beverage_type], | |
menus => | |
menus.merge({ | |
[menu_type]: menusNotToUpdate, | |
[updated_menu_type]: data | |
}) | |
); | |
// return menus.merge({ | |
// food_menu: newFoodMenu, | |
// beverages_menu: newBeverageMenu | |
// }); | |
// return menus.push(fromJS(data)); | |
} | |
} | |
); | |
} | |
case DELETE_FOOD_AND_BEVERAGE_SUCCESS: { | |
const { data, message } = action.response; | |
return state | |
.merge({ | |
loading: false, | |
loaded: true, | |
response: message, | |
error: null | |
}) | |
.updateIn( | |
['restaurantsMenu', 'food_beverages', data.food_beverage_type, data.menu_type], | |
menus => menus.filter(menu => menu.get('_id') !== data.menuId) | |
); | |
} | |
case LOAD_FOOD_AND_BEVERAGE_FAILURE: | |
case POST_FOOD_AND_BEVERAGE_FAILURE: | |
case DELETE_FOOD_AND_BEVERAGE_FAILURE: | |
case EDIT_FOOD_AND_BEVERAGE_FAILURE: | |
return state.merge({ | |
loading: false, | |
loaded: true, | |
response: null, | |
error: action.error | |
}); | |
default: | |
return state; | |
} | |
} | |
export default foodAndBeverage; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// the shape of state | |
state shape { | |
"food_beverages": { | |
"restaurant": { | |
"food_menu": [ | |
{ | |
"updated_on": "2017-10-12T10:59:51.093Z", | |
"document_name": "food-beverage-1507805871955-568b6.jpg", | |
"document_mimetype": "image/jpeg", | |
"document_original_name": "tandoori-chicken.jpg", | |
"menu_title": "Tandoori", | |
"_id": "59df4ab156fea940b6ad3ef5", | |
"type": "food_menu", | |
"updated_by": "property_user25@yopmail.com", | |
"added_on": "2017-10-12T10:57:53.816Z" | |
} | |
], | |
"beverages_menu": [ | |
{ | |
"updated_on": "2017-10-12T11:17:38.090Z", | |
"document_name": "food-beverage-1507807029255-f71ea.jpeg", | |
"document_mimetype": "image/jpeg", | |
"document_original_name": "Macbook-Apple-Imac-Computer-HD-Wallpaper-Desktop.jpeg", | |
"menu_title": "maharaja-mac", | |
"_id": "59df4f3d56fea940b6ad3f0a", | |
"type": "beverages_menu", | |
"updated_by": "property_user25@yopmail.com", | |
"added_on": "2017-10-12T11:17:17.923Z" | |
} | |
] | |
}, | |
"coffee_shop": { | |
"food_menu": [], | |
"beverages_menu": [] | |
}, | |
"bar": { | |
"food_menu": [], | |
"beverages_menu": [] | |
}, | |
"pub": { | |
"food_menu": [], | |
"beverages_menu": [] | |
}, | |
"room_service": { | |
"food_menu": [], | |
"beverages_menu": [] | |
} | |
} | |
} | |
action data that is received when edited and server sends the response | |
{ | |
"type": "Project/PropertyDashboard/FoodAndBeverages/EDIT_FOOD_AND_BEVERAGE_SUCCESS", | |
"response": { | |
"status": 200, | |
"message": "Food and Beverages item info updated successfully", | |
"data": { | |
"propertyId": "59d5c0011e933417530807ab", | |
"food_beverage_type": "restaurant", | |
"menu_type": "food_menu", | |
"new_date_inserted": { | |
"type": "beverages_menu" | |
}, | |
"data": { | |
"menu_title": "Ma", | |
"type": "beverages_menu", | |
"updated_on": "2017-10-15T01:13:00.023Z", | |
"updated_by": "property_user25@yopmail.com" | |
}, | |
"menuId": "59df4f3d56fea940b6ad3f0a" | |
} | |
} | |
} | |
step 1 image - https://imgur.com/a/ZeQdr | |
step 2 image - https://imgur.com/a/lrAf5 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment