folder_settings_ctrl.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { FolderPageLoader } from './folder_page_loader';
  2. import appEvents from 'app/core/app_events';
  3. export class FolderSettingsCtrl {
  4. folderPageLoader: FolderPageLoader;
  5. navModel: any;
  6. folderId: number;
  7. uid: string;
  8. canSave = false;
  9. folder: any;
  10. title: string;
  11. hasChanged: boolean;
  12. /** @ngInject */
  13. constructor(private backendSrv, navModelSrv, private $routeParams, private $location) {
  14. if (this.$routeParams.uid) {
  15. this.uid = $routeParams.uid;
  16. this.folderPageLoader = new FolderPageLoader(this.backendSrv);
  17. this.folderPageLoader.load(this, this.uid, 'manage-folder-settings').then(folder => {
  18. if ($location.path() !== folder.meta.url) {
  19. $location.path(`${folder.meta.url}/settings`).replace();
  20. }
  21. this.folder = folder;
  22. this.canSave = this.folder.canSave;
  23. this.title = this.folder.title;
  24. });
  25. }
  26. }
  27. save() {
  28. this.titleChanged();
  29. if (!this.hasChanged) {
  30. return;
  31. }
  32. this.folder.title = this.title.trim();
  33. return this.backendSrv
  34. .updateFolder(this.folder)
  35. .then(result => {
  36. if (result.url !== this.$location.path()) {
  37. this.$location.url(result.url + '/settings');
  38. }
  39. appEvents.emit('dashboard-saved');
  40. appEvents.emit('alert-success', ['Folder saved']);
  41. })
  42. .catch(this.handleSaveFolderError);
  43. }
  44. titleChanged() {
  45. this.hasChanged = this.folder.title.toLowerCase() !== this.title.trim().toLowerCase();
  46. }
  47. delete(evt) {
  48. if (evt) {
  49. evt.stopPropagation();
  50. evt.preventDefault();
  51. }
  52. appEvents.emit('confirm-modal', {
  53. title: 'Delete',
  54. text: `Do you want to delete this folder and all its dashboards?`,
  55. icon: 'fa-trash',
  56. yesText: 'Delete',
  57. onConfirm: () => {
  58. return this.backendSrv.deleteFolder(this.uid).then(() => {
  59. appEvents.emit('alert-success', ['Folder Deleted', `${this.folder.title} has been deleted`]);
  60. this.$location.url('dashboards');
  61. });
  62. },
  63. });
  64. }
  65. handleSaveFolderError(err) {
  66. if (err.data && err.data.status === 'version-mismatch') {
  67. err.isHandled = true;
  68. appEvents.emit('confirm-modal', {
  69. title: 'Conflict',
  70. text: 'Someone else has updated this folder.',
  71. text2: 'Would you still like to save this folder?',
  72. yesText: 'Save & Overwrite',
  73. icon: 'fa-warning',
  74. onConfirm: () => {
  75. this.backendSrv.updateFolder(this.folder, { overwrite: true });
  76. },
  77. });
  78. }
  79. }
  80. }