FolderStore.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { types, getEnv, flow } from 'mobx-state-tree';
  2. export const Folder = types.model('Folder', {
  3. id: types.identifier(types.number),
  4. slug: types.string,
  5. title: types.string,
  6. canSave: types.boolean,
  7. hasChanged: types.boolean,
  8. });
  9. export const FolderStore = types
  10. .model('FolderStore', {
  11. folder: types.maybe(Folder),
  12. })
  13. .actions(self => ({
  14. load: flow(function* load(slug: string) {
  15. const backendSrv = getEnv(self).backendSrv;
  16. const res = yield backendSrv.getDashboard('db', slug);
  17. self.folder = Folder.create({
  18. id: res.dashboard.id,
  19. title: res.dashboard.title,
  20. slug: res.meta.slug,
  21. canSave: res.meta.canSave,
  22. hasChanged: false,
  23. });
  24. return res;
  25. }),
  26. setTitle: function(originalTitle: string, title: string) {
  27. self.folder.title = title;
  28. self.folder.hasChanged = originalTitle.toLowerCase() !== title.trim().toLowerCase() && title.trim().length > 0;
  29. },
  30. saveFolder: flow(function* saveFolder(dashboard: any, options: any) {
  31. const backendSrv = getEnv(self).backendSrv;
  32. dashboard.title = self.folder.title.trim();
  33. const res = yield backendSrv.saveDashboard(dashboard, options);
  34. self.folder.slug = res.slug;
  35. return `dashboards/folder/${self.folder.id}/${res.slug}/settings`;
  36. }),
  37. deleteFolder: flow(function* deleteFolder() {
  38. const backendSrv = getEnv(self).backendSrv;
  39. return backendSrv.deleteDashboard(self.folder.slug);
  40. }),
  41. }));