FolderStore.ts 1.6 KB

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