diff --git a/public/app/core/components/manage_dashboards/manage_dashboards.html b/public/app/core/components/manage_dashboards/manage_dashboards.html index 90091f3032c..cb2cec28bab 100644 --- a/public/app/core/components/manage_dashboards/manage_dashboards.html +++ b/public/app/core/components/manage_dashboards/manage_dashboards.html @@ -5,7 +5,7 @@
- + Dashboard @@ -60,22 +60,20 @@ switch-class="gf-form-switch--transparent gf-form-switch--search-result-filter-row__checkbox" />
-
+
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 @@
- +
- diff --git a/public/app/features/dashboard/save_as_modal.ts b/public/app/features/dashboard/save_as_modal.ts index 84679b90ff8..236b1f07b56 100644 --- a/public/app/features/dashboard/save_as_modal.ts +++ b/public/app/features/dashboard/save_as_modal.ts @@ -52,7 +52,7 @@ export class SaveDashboardAsModalCtrl { this.clone.title += ' Copy'; this.clone.editable = true; this.clone.hideControls = false; - this.folderId = dashboard.folderId; + this.folderId = dashboard.meta.folderId; // remove alerts if source dashboard is already persisted // do not want to create alert dupes diff --git a/public/app/features/dashboard/settings/settings.ts b/public/app/features/dashboard/settings/settings.ts index f109a1bdeb8..3b124326ada 100644 --- a/public/app/features/dashboard/settings/settings.ts +++ b/public/app/features/dashboard/settings/settings.ts @@ -185,7 +185,6 @@ export class SettingsCtrl { } onFolderChange(folder) { - this.dashboard.folderId = folder.id; this.dashboard.meta.folderId = folder.id; this.dashboard.meta.folderTitle = folder.title; }