FolderStore.ts 1.6 KB

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