Advertisement
Guest User

Untitled

a guest
May 24th, 2017
730
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1. import { fromJS, List } from 'immutable';
  2. import camelize from 'camelize';
  3. import {
  4. GET_RESTAURANT_MENUS_REQUEST,
  5. GET_RESTAURANT_MENUS_SUCCESS,
  6. GET_RESTAURANT_MENUS_ERROR,
  7. SET_ACTIVE_MENU_CONTAINER_ID,
  8. SET_ACTIVE_MENU_ITEM_ID,
  9. PUT_UPDATE_MENU_CONTAINER_REQUEST,
  10. PUT_UPDATE_MENU_CONTAINER_SUCCESS,
  11. PUT_UPDATE_MENU_CONTAINER_ERROR,
  12. DELETE_MENU_CONTAINER_REQUEST,
  13. DELETE_MENU_CONTAINER_SUCCESS,
  14. DELETE_MENU_CONTAINER_ERROR,
  15. } from './constants';
  16.  
  17. const initialState = fromJS({
  18. gettingMenus: false,
  19. updatingMenu: false,
  20. deletingMenu: false,
  21. menus: [],
  22. });
  23.  
  24. function menusReducer(state = initialState, action) {
  25. const { type, payload } = action;
  26. switch (type) {
  27. case GET_RESTAURANT_MENUS_REQUEST:
  28. return state
  29. .set('gettingMenus', true);
  30. case GET_RESTAURANT_MENUS_SUCCESS: {
  31. let restaurantMenus = fromJS(camelize(payload.result));
  32. if (restaurantMenus.size > 0) {
  33. restaurantMenus = restaurantMenus.map((menu) => {
  34. let menuItems = menu.get('menuItems', List());
  35. if (menuItems.size > 0) {
  36. menuItems = menuItems.set(0, menuItems.get(0).set('selected', true));
  37. }
  38. return menu.set('menuItems', menuItems);
  39. });
  40.  
  41. restaurantMenus = restaurantMenus.set(0, restaurantMenus.first().set('selected', true));
  42. }
  43.  
  44. return state
  45. .set('gettingMenus', false)
  46. .set('menus', restaurantMenus);
  47. }
  48. case SET_ACTIVE_MENU_CONTAINER_ID:
  49. return state.set('menus', state.get('menus').map((menu) => {
  50. if (menu.get('id') === payload.menuID) {
  51. return menu.set('selected', true);
  52. }
  53. if (menu.get('containersLength') > 0) {
  54. let hasSelectedChild = false;
  55. const menuContainers = menu.get('menuContainers').map((subMenu) => {
  56. if (subMenu.get('id') === payload.menuID) {
  57. hasSelectedChild = true;
  58. return subMenu.set('selected', true);
  59. }
  60. return subMenu.set('selected', false);
  61. });
  62.  
  63. return menu
  64. .set('menuContainers', menuContainers)
  65. .set('selected', false)
  66. .set('hasSelectedChild', hasSelectedChild);
  67. }
  68. return menu
  69. .set('selected', false).set('hasSelectedChild', false);
  70. }));
  71. case SET_ACTIVE_MENU_ITEM_ID: {
  72. let currentMenus = state.get('menus');
  73. currentMenus = currentMenus.map((menu) => {
  74. if (menu.get('id') === payload.menuID) {
  75. let menuItems = menu.get('menuItems', List());
  76. if (menuItems.size > 0) {
  77. menuItems = menuItems.map((menuItem) => (menuItem.set('selected', menuItem.get('id') === payload.menuItemID)));
  78. return menu.set('menuItems', menuItems);
  79. }
  80. return menu;
  81. }
  82. if (menu.get('containersLength') > 0) {
  83. const subMenus = menu.get('menuContainers').map((subMenu) => {
  84. let menuItems = subMenu.get('menuItems', List());
  85. if (menuItems.size > 0) {
  86. menuItems = menuItems.map((menuItem) => (menuItem.set('selected', menuItem.get('id') === payload.menuItemID)));
  87. return subMenu.set('menuItems', menuItems);
  88. }
  89. return subMenu;
  90. });
  91. return menu.set('menuContainers', subMenus);
  92. }
  93. return menu;
  94. });
  95.  
  96. return state.set('menus', currentMenus);
  97. }
  98. case GET_RESTAURANT_MENUS_ERROR:
  99. return state
  100. .set('gettingMenus', false);
  101. case PUT_UPDATE_MENU_CONTAINER_REQUEST:
  102. return state
  103. .set('updatingMenu', true);
  104. case PUT_UPDATE_MENU_CONTAINER_SUCCESS:
  105. return state
  106. .set('updatingMenu', false)
  107. .set('menus', state.get('menus').map((menu) => {
  108. if (menu.get('id') === payload.id) {
  109. return fromJS(camelize(payload));
  110. } else if (menu.get('menuContainers').size > 0) {
  111. return menu.set('menuContainers', menu.get('menuContainers').map((subMenu) => {
  112. if (subMenu.get('id') === payload.id) {
  113. return fromJS(camelize(payload));
  114. }
  115. return subMenu;
  116. }));
  117. }
  118. return menu;
  119. }));
  120. case PUT_UPDATE_MENU_CONTAINER_ERROR:
  121. return state
  122. .set('updatingMenu', false);
  123. case DELETE_MENU_CONTAINER_REQUEST:
  124. return state
  125. .set('deletingMenu', true);
  126. case DELETE_MENU_CONTAINER_SUCCESS: // TODO: Need to support delete sub menu
  127. return state
  128. .set('deletingMenu', false)
  129. .set('menus', state.get('menus').filter((menu) => (menu.get('id') !== payload.menuContainerID)));
  130. case DELETE_MENU_CONTAINER_ERROR:
  131. return state
  132. .set('deletingMenu', false);
  133. default:
  134. return state;
  135. }
  136. }
  137.  
  138. export default menusReducer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement