diff --git a/public/app/core/components/manage_dashboards/manage_dashboards.ts b/public/app/core/components/manage_dashboards/manage_dashboards.ts
index b8132f6f643..a985a9fee7b 100644
--- a/public/app/core/components/manage_dashboards/manage_dashboards.ts
+++ b/public/app/core/components/manage_dashboards/manage_dashboards.ts
@@ -297,6 +297,16 @@ export class ManageDashboardsCtrl {
this.query.starred = false;
this.getDashboards();
}
+
+ createDashboardUrl() {
+ let url = '/dashboard/new';
+
+ if (this.folderId) {
+ url += `?folderId=${this.folderId}`;
+ }
+
+ return url;
+ }
}
export function manageDashboardsDirective() {
diff --git a/public/app/core/routes/dashboard_loaders.ts b/public/app/core/routes/dashboard_loaders.ts
index 7b6ed068b30..937c66bb853 100644
--- a/public/app/core/routes/dashboard_loaders.ts
+++ b/public/app/core/routes/dashboard_loaders.ts
@@ -34,7 +34,12 @@ export class NewDashboardCtrl {
constructor($scope, $routeParams) {
$scope.initDashboard(
{
- meta: { canStar: false, canShare: false, isNew: true },
+ meta: {
+ canStar: false,
+ canShare: false,
+ isNew: true,
+ folderId: Number($routeParams.folderId),
+ },
dashboard: {
title: 'New dashboard',
panels: [
@@ -44,7 +49,6 @@ export class NewDashboardCtrl {
title: 'Panel Title',
},
],
- folderId: Number($routeParams.folderId),
},
},
$scope
diff --git a/public/app/core/services/backend_srv.ts b/public/app/core/services/backend_srv.ts
index 01ca5a70d70..30b9da700e3 100644
--- a/public/app/core/services/backend_srv.ts
+++ b/public/app/core/services/backend_srv.ts
@@ -242,7 +242,7 @@ export class BackendSrv {
return this.post('/api/dashboards/db/', {
dashboard: dash,
- folderId: dash.folderId,
+ folderId: options.folderId,
overwrite: options.overwrite === true,
message: options.message || '',
});
@@ -324,20 +324,22 @@ export class BackendSrv {
return;
}
- model.folderId = toFolder.id;
- model.meta.folderId = toFolder.id;
- model.meta.folderTitle = toFolder.title;
const clone = model.getSaveModelClone();
+ let options = {
+ folderId: toFolder.id,
+ overwrite: false,
+ };
- this.saveDashboard(clone, {})
+ this.saveDashboard(clone, options)
.then(() => {
deferred.resolve({ succeeded: true });
})
.catch(err => {
if (err.data && err.data.status === 'plugin-dashboard') {
err.isHandled = true;
+ options.overwrite = true;
- this.saveDashboard(clone, { overwrite: true })
+ this.saveDashboard(clone, options)
.then(() => {
deferred.resolve({ succeeded: true });
})
diff --git a/public/app/features/dashboard/dashboard_model.ts b/public/app/features/dashboard/dashboard_model.ts
index 5def153f8fb..2f1c3cba447 100644
--- a/public/app/features/dashboard/dashboard_model.ts
+++ b/public/app/features/dashboard/dashboard_model.ts
@@ -31,7 +31,6 @@ export class DashboardModel {
revision: number;
links: any;
gnetId: any;
- folderId: number;
panels: PanelModel[];
// ------------------
@@ -76,7 +75,6 @@ export class DashboardModel {
this.version = data.version || 0;
this.links = data.links || [];
this.gnetId = data.gnetId || null;
- this.folderId = data.folderId || null;
this.panels = _.map(
data.panels || [],
panelData => new PanelModel(panelData)
diff --git a/public/app/features/dashboard/dashboard_srv.ts b/public/app/features/dashboard/dashboard_srv.ts
index b3c3b5e40dc..fddc0422f85 100644
--- a/public/app/features/dashboard/dashboard_srv.ts
+++ b/public/app/features/dashboard/dashboard_srv.ts
@@ -84,6 +84,9 @@ export class DashboardSrv {
}
save(clone, options) {
+ options = options || {};
+ options.folderId = this.dash.meta.folderId;
+
return this.backendSrv
.saveDashboard(clone, options)
.then(this.postSave.bind(this, clone))
diff --git a/public/app/features/dashboard/folder_settings_ctrl.ts b/public/app/features/dashboard/folder_settings_ctrl.ts
index 29da2666534..5f0d805192b 100644
--- a/public/app/features/dashboard/folder_settings_ctrl.ts
+++ b/public/app/features/dashboard/folder_settings_ctrl.ts
@@ -8,6 +8,8 @@ export class FolderSettingsCtrl {
canSave = false;
dashboard: any;
meta: any;
+ title: string;
+ hasChanged: boolean;
/** @ngInject */
constructor(
@@ -29,11 +31,20 @@ export class FolderSettingsCtrl {
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 => {
@@ -52,6 +63,11 @@ export class FolderSettingsCtrl {
.catch(this.handleSaveFolderError);
}
+ titleChanged() {
+ this.hasChanged =
+ this.dashboard.title.toLowerCase() !== this.title.trim().toLowerCase();
+ }
+
delete(evt) {
if (evt) {
evt.stopPropagation();
diff --git a/public/app/features/dashboard/partials/folder_settings.html b/public/app/features/dashboard/partials/folder_settings.html
index 37fdfef4a3f..6c53c330d5d 100644
--- a/public/app/features/dashboard/partials/folder_settings.html
+++ b/public/app/features/dashboard/partials/folder_settings.html
@@ -7,10 +7,10 @@