2017-12-20 05:33:33 -06:00
|
|
|
import { FolderPageLoader } from './folder_page_loader';
|
|
|
|
import appEvents from 'app/core/app_events';
|
2017-12-13 03:54:08 -06:00
|
|
|
|
|
|
|
export class FolderSettingsCtrl {
|
|
|
|
folderPageLoader: FolderPageLoader;
|
|
|
|
navModel: any;
|
|
|
|
folderId: number;
|
2018-01-31 10:15:00 -06:00
|
|
|
uid: string;
|
2017-12-13 03:54:08 -06:00
|
|
|
canSave = false;
|
2018-02-01 15:32:26 -06:00
|
|
|
folder: any;
|
2017-12-20 14:17:55 -06:00
|
|
|
title: string;
|
|
|
|
hasChanged: boolean;
|
2017-12-13 03:54:08 -06:00
|
|
|
|
|
|
|
/** @ngInject */
|
2017-12-21 01:39:31 -06:00
|
|
|
constructor(private backendSrv, navModelSrv, private $routeParams, private $location) {
|
2018-01-31 10:15:00 -06:00
|
|
|
if (this.$routeParams.uid) {
|
|
|
|
this.uid = $routeParams.uid;
|
2017-12-13 03:54:08 -06:00
|
|
|
|
2018-01-31 10:15:00 -06:00
|
|
|
this.folderPageLoader = new FolderPageLoader(this.backendSrv);
|
2018-01-31 11:24:47 -06:00
|
|
|
this.folderPageLoader.load(this, this.uid, 'manage-folder-settings').then(folder => {
|
|
|
|
if ($location.path() !== folder.meta.url) {
|
|
|
|
$location.path(`${folder.meta.url}/settings`).replace();
|
|
|
|
}
|
|
|
|
|
2018-02-01 15:32:26 -06:00
|
|
|
this.folder = folder;
|
|
|
|
this.canSave = this.folder.canSave;
|
|
|
|
this.title = this.folder.title;
|
2017-12-21 01:39:31 -06:00
|
|
|
});
|
2017-12-13 03:54:08 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
save() {
|
2017-12-20 14:17:55 -06:00
|
|
|
this.titleChanged();
|
|
|
|
|
|
|
|
if (!this.hasChanged) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2018-02-01 15:32:26 -06:00
|
|
|
this.folder.title = this.title.trim();
|
2017-12-20 14:17:55 -06:00
|
|
|
|
2017-12-19 09:06:54 -06:00
|
|
|
return this.backendSrv
|
2018-02-01 15:32:26 -06:00
|
|
|
.updateFolder(this.folder)
|
2017-12-13 03:54:08 -06:00
|
|
|
.then(result => {
|
2018-01-31 10:15:00 -06:00
|
|
|
if (result.url !== this.$location.path()) {
|
|
|
|
this.$location.url(result.url + '/settings');
|
2017-12-13 03:54:08 -06:00
|
|
|
}
|
|
|
|
|
2017-12-20 05:33:33 -06:00
|
|
|
appEvents.emit('dashboard-saved');
|
|
|
|
appEvents.emit('alert-success', ['Folder saved']);
|
2017-12-13 03:54:08 -06:00
|
|
|
})
|
|
|
|
.catch(this.handleSaveFolderError);
|
|
|
|
}
|
|
|
|
|
2017-12-20 14:17:55 -06:00
|
|
|
titleChanged() {
|
2018-02-01 15:32:26 -06:00
|
|
|
this.hasChanged = this.folder.title.toLowerCase() !== this.title.trim().toLowerCase();
|
2017-12-20 14:17:55 -06:00
|
|
|
}
|
|
|
|
|
2017-12-13 03:54:08 -06:00
|
|
|
delete(evt) {
|
|
|
|
if (evt) {
|
|
|
|
evt.stopPropagation();
|
|
|
|
evt.preventDefault();
|
|
|
|
}
|
|
|
|
|
2017-12-20 05:33:33 -06:00
|
|
|
appEvents.emit('confirm-modal', {
|
|
|
|
title: 'Delete',
|
2017-12-13 03:54:08 -06:00
|
|
|
text: `Do you want to delete this folder and all its dashboards?`,
|
2017-12-20 05:33:33 -06:00
|
|
|
icon: 'fa-trash',
|
|
|
|
yesText: 'Delete',
|
2017-12-13 03:54:08 -06:00
|
|
|
onConfirm: () => {
|
2018-02-01 15:32:26 -06:00
|
|
|
return this.backendSrv.deleteFolder(this.uid).then(() => {
|
|
|
|
appEvents.emit('alert-success', ['Folder Deleted', `${this.folder.title} has been deleted`]);
|
2017-12-31 05:24:21 -06:00
|
|
|
this.$location.url('dashboards');
|
2017-12-13 03:54:08 -06:00
|
|
|
});
|
2017-12-20 05:33:33 -06:00
|
|
|
},
|
2017-12-13 03:54:08 -06:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
handleSaveFolderError(err) {
|
2017-12-20 05:33:33 -06:00
|
|
|
if (err.data && err.data.status === 'version-mismatch') {
|
2017-12-13 03:54:08 -06:00
|
|
|
err.isHandled = true;
|
|
|
|
|
2017-12-20 05:33:33 -06:00
|
|
|
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',
|
2017-12-13 03:54:08 -06:00
|
|
|
onConfirm: () => {
|
2018-02-01 15:32:26 -06:00
|
|
|
this.backendSrv.updateFolder(this.folder, { overwrite: true });
|
2017-12-20 05:33:33 -06:00
|
|
|
},
|
2017-12-13 03:54:08 -06:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|