NavStore.ts 926 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { types, getEnv } from 'mobx-state-tree';
  2. import { NavItem } from './NavItem';
  3. export const NavStore = types
  4. .model('NavStore', {
  5. main: types.maybe(NavItem),
  6. node: types.maybe(NavItem),
  7. })
  8. .actions(self => ({
  9. load(...args) {
  10. let children = getEnv(self).navTree;
  11. let main, node;
  12. let parents = [];
  13. for (let id of args) {
  14. node = children.find(el => el.id === id);
  15. if (!node) {
  16. throw new Error(`NavItem with id ${id} not found`);
  17. }
  18. children = node.children;
  19. parents.push(node);
  20. }
  21. main = parents[parents.length - 2];
  22. if (main.children) {
  23. for (let item of main.children) {
  24. item.active = false;
  25. if (item.url === node.url) {
  26. item.active = true;
  27. }
  28. }
  29. }
  30. self.main = NavItem.create(main);
  31. self.node = NavItem.create(node);
  32. },
  33. }));