|
|
@@ -0,0 +1,83 @@
|
|
|
+import {FolderPageLoader} from './folder_page_loader';
|
|
|
+import appEvents from 'app/core/app_events';
|
|
|
+
|
|
|
+export class FolderSettingsCtrl {
|
|
|
+ folderPageLoader: FolderPageLoader;
|
|
|
+ navModel: any;
|
|
|
+ folderId: number;
|
|
|
+ canSave = false;
|
|
|
+ dashboard: any;
|
|
|
+ meta: any;
|
|
|
+
|
|
|
+ /** @ngInject */
|
|
|
+ constructor(private backendSrv, navModelSrv, private $routeParams, private $location) {
|
|
|
+ if (this.$routeParams.folderId && this.$routeParams.type && this.$routeParams.slug) {
|
|
|
+ this.folderId = $routeParams.folderId;
|
|
|
+
|
|
|
+ this.folderPageLoader = new FolderPageLoader(this.backendSrv, this.$routeParams);
|
|
|
+ this.folderPageLoader.load(this, this.folderId, 'manage-folder-settings')
|
|
|
+ .then(result => {
|
|
|
+ this.dashboard = result.dashboard;
|
|
|
+ this.meta = result.meta;
|
|
|
+ this.canSave = result.meta.canSave;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ save() {
|
|
|
+ return this.backendSrv.saveDashboard(this.dashboard, {overwrite: false})
|
|
|
+ .then(result => {
|
|
|
+ var folderUrl = this.folderPageLoader.createFolderUrl(this.folderId, this.meta.type, result.slug);
|
|
|
+ if (folderUrl !== this.$location.path()) {
|
|
|
+ this.$location.url(folderUrl + '/settings');
|
|
|
+ }
|
|
|
+
|
|
|
+ appEvents.emit('dashboard-saved');
|
|
|
+ appEvents.emit('alert-success', ['Folder saved']);
|
|
|
+ })
|
|
|
+ .catch(this.handleSaveFolderError);
|
|
|
+ }
|
|
|
+
|
|
|
+ delete(evt) {
|
|
|
+ if (evt) {
|
|
|
+ evt.stopPropagation();
|
|
|
+ evt.preventDefault();
|
|
|
+ }
|
|
|
+
|
|
|
+ appEvents.emit('confirm-modal', {
|
|
|
+ title: 'Delete',
|
|
|
+ text: `Do you want to delete this folder and all its dashboards?`,
|
|
|
+ icon: 'fa-trash',
|
|
|
+ yesText: 'Delete',
|
|
|
+ onConfirm: () => {
|
|
|
+ return this.backendSrv.delete(`/api/dashboards/${this.meta.type}/${this.meta.slug}`).then(() => {
|
|
|
+ appEvents.emit('alert-success', ['Folder deleted']);
|
|
|
+ this.$location.url('/dashboards');
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ handleSaveFolderError(err) {
|
|
|
+ if (err.data && err.data.status === 'version-mismatch') {
|
|
|
+ err.isHandled = true;
|
|
|
+
|
|
|
+ appEvents.emit('confirm-modal', {
|
|
|
+ title: 'Conflict',
|
|
|
+ text: 'Someone else has updated this folder.',
|
|
|
+ text2: 'Would you still like to save this folder?',
|
|
|
+ yesText: 'Save & Overwrite',
|
|
|
+ icon: 'fa-warning',
|
|
|
+ onConfirm: () => {
|
|
|
+ this.backendSrv.saveDashboard(this.dashboard, {overwrite: true});
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (err.data && err.data.status === 'name-exists') {
|
|
|
+ err.isHandled = true;
|
|
|
+
|
|
|
+ appEvents.emit('alert-error', ['A folder or dashboard with this name exists already.']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|