folder_settings_ctrl.ts 2.5 KB

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