navModel.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { Action, ActionTypes } from 'app/core/actions/navModel';
  2. import { NavIndex, NavModelItem } from 'app/types';
  3. import config from 'app/core/config';
  4. export function buildInitialState(): NavIndex {
  5. const navIndex: NavIndex = {};
  6. const rootNodes = config.bootData.navTree as NavModelItem[];
  7. buildNavIndex(navIndex, rootNodes);
  8. return navIndex;
  9. }
  10. function buildNavIndex(navIndex: NavIndex, children: NavModelItem[], parentItem?: NavModelItem) {
  11. for (const node of children) {
  12. navIndex[node.id] = {
  13. ...node,
  14. parentItem: parentItem,
  15. };
  16. if (node.children) {
  17. buildNavIndex(navIndex, node.children, node);
  18. }
  19. }
  20. }
  21. export const initialState: NavIndex = buildInitialState();
  22. export const navIndexReducer = (state = initialState, action: Action): NavIndex => {
  23. switch (action.type) {
  24. case ActionTypes.UpdateNavIndex:
  25. const newPages = {};
  26. const payload = action.payload;
  27. for (const node of payload.children) {
  28. newPages[node.id] = {
  29. ...node,
  30. parentItem: payload,
  31. };
  32. }
  33. return { ...state, ...newPages };
  34. }
  35. return state;
  36. };