FolderStore.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. 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(uid: string) {
  15. const backendSrv = getEnv(self).backendSrv;
  16. const res = yield backendSrv.getDashboardByUid(uid);
  17. self.folder = Folder.create({
  18. id: res.dashboard.id,
  19. title: res.dashboard.title,
  20. url: res.meta.url,
  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.saveFolder(dashboard, options);
  34. self.folder.url = res.url;
  35. return `${self.folder.url}/settings`;
  36. }),
  37. deleteFolder: flow(function* deleteFolder() {
  38. const backendSrv = getEnv(self).backendSrv;
  39. return backendSrv.deleteDashboard(self.folder.url);
  40. }),
  41. }));