NavStore.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. initFolderNav(folder: any, activeChildId: string) {
  34. const folderUrl = createFolderUrl(folder.id, folder.slug);
  35. let main = {
  36. icon: 'fa fa-folder-open',
  37. id: 'manage-folder',
  38. subTitle: 'Manage folder dashboards & permissions',
  39. url: '',
  40. text: folder.title,
  41. breadcrumbs: [{ title: 'Dashboards', url: 'dashboards' }],
  42. children: [
  43. {
  44. active: activeChildId === 'manage-folder-dashboards',
  45. icon: 'fa fa-fw fa-th-large',
  46. id: 'manage-folder-dashboards',
  47. text: 'Dashboards',
  48. url: folderUrl,
  49. },
  50. {
  51. active: activeChildId === 'manage-folder-permissions',
  52. icon: 'fa fa-fw fa-lock',
  53. id: 'manage-folder-permissions',
  54. text: 'Permissions',
  55. url: folderUrl + '/permissions',
  56. },
  57. {
  58. active: activeChildId === 'manage-folder-settings',
  59. icon: 'fa fa-fw fa-cog',
  60. id: 'manage-folder-settings',
  61. text: 'Settings',
  62. url: folderUrl + '/settings',
  63. },
  64. ],
  65. };
  66. self.main = NavItem.create(main);
  67. },
  68. }));
  69. function createFolderUrl(folderId: number, slug: string) {
  70. return `dashboards/folder/${folderId}/${slug}`;
  71. }