folder_settings_ctrl.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. canSave = false;
  8. dashboard: any;
  9. meta: any;
  10. /** @ngInject */
  11. constructor(
  12. private backendSrv,
  13. navModelSrv,
  14. private $routeParams,
  15. private $location
  16. ) {
  17. if (this.$routeParams.folderId && this.$routeParams.slug) {
  18. this.folderId = $routeParams.folderId;
  19. this.folderPageLoader = new FolderPageLoader(
  20. this.backendSrv,
  21. this.$routeParams
  22. );
  23. this.folderPageLoader
  24. .load(this, this.folderId, 'manage-folder-settings')
  25. .then(result => {
  26. this.dashboard = result.dashboard;
  27. this.meta = result.meta;
  28. this.canSave = result.meta.canSave;
  29. });
  30. }
  31. }
  32. save() {
  33. return this.backendSrv
  34. .saveDashboard(this.dashboard, { overwrite: false })
  35. .then(result => {
  36. var folderUrl = this.folderPageLoader.createFolderUrl(
  37. this.folderId,
  38. this.meta.type,
  39. result.slug
  40. );
  41. if (folderUrl !== this.$location.path()) {
  42. this.$location.url(folderUrl + '/settings');
  43. }
  44. appEvents.emit('dashboard-saved');
  45. appEvents.emit('alert-success', ['Folder saved']);
  46. })
  47. .catch(this.handleSaveFolderError);
  48. }
  49. delete(evt) {
  50. if (evt) {
  51. evt.stopPropagation();
  52. evt.preventDefault();
  53. }
  54. appEvents.emit('confirm-modal', {
  55. title: 'Delete',
  56. text: `Do you want to delete this folder and all its dashboards?`,
  57. icon: 'fa-trash',
  58. yesText: 'Delete',
  59. onConfirm: () => {
  60. return this.backendSrv.deleteDashboard(this.meta.slug).then(() => {
  61. appEvents.emit('alert-success', [
  62. 'Folder Deleted',
  63. `${this.dashboard.title} has been deleted`,
  64. ]);
  65. this.$location.url('/dashboards');
  66. });
  67. },
  68. });
  69. }
  70. handleSaveFolderError(err) {
  71. if (err.data && err.data.status === 'version-mismatch') {
  72. err.isHandled = true;
  73. appEvents.emit('confirm-modal', {
  74. title: 'Conflict',
  75. text: 'Someone else has updated this folder.',
  76. text2: 'Would you still like to save this folder?',
  77. yesText: 'Save & Overwrite',
  78. icon: 'fa-warning',
  79. onConfirm: () => {
  80. this.backendSrv.saveDashboard(this.dashboard, { overwrite: true });
  81. },
  82. });
  83. }
  84. if (err.data && err.data.status === 'name-exists') {
  85. err.isHandled = true;
  86. appEvents.emit('alert-error', [
  87. 'A folder or dashboard with this name exists already.',
  88. ]);
  89. }
  90. }
  91. }