mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* dashfolders: fix url for create dashboard from manage dashboards Don't include folderId querystring if you don't manage a folder and creating a new dashboard from there. * dashfolders: don't store folderId in dashboard model Use folderId from meta instead #10307 * dashfolders: minor ux fix * dashfolders: minor fix for edit folder title
119 lines
3.0 KiB
TypeScript
119 lines
3.0 KiB
TypeScript
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;
|
|
title: string;
|
|
hasChanged: boolean;
|
|
|
|
/** @ngInject */
|
|
constructor(
|
|
private backendSrv,
|
|
navModelSrv,
|
|
private $routeParams,
|
|
private $location
|
|
) {
|
|
if (this.$routeParams.folderId && 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;
|
|
this.title = this.dashboard.title;
|
|
});
|
|
}
|
|
}
|
|
|
|
save() {
|
|
this.titleChanged();
|
|
|
|
if (!this.hasChanged) {
|
|
return;
|
|
}
|
|
|
|
this.dashboard.title = this.title.trim();
|
|
|
|
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);
|
|
}
|
|
|
|
titleChanged() {
|
|
this.hasChanged =
|
|
this.dashboard.title.toLowerCase() !== this.title.trim().toLowerCase();
|
|
}
|
|
|
|
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.deleteDashboard(this.meta.slug).then(() => {
|
|
appEvents.emit('alert-success', [
|
|
'Folder Deleted',
|
|
`${this.dashboard.title} has been 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.',
|
|
]);
|
|
}
|
|
}
|
|
}
|