WIP: add dummy root folder to folder picker

Can move a dash from a folder back to root level as well
This commit is contained in:
Daniel Lee 2017-05-31 16:53:12 +02:00
parent 1e865211c9
commit 6c736e002a
4 changed files with 58 additions and 8 deletions

View File

@ -25,7 +25,7 @@ func init() {
func SaveDashboard(cmd *m.SaveDashboardCommand) error { func SaveDashboard(cmd *m.SaveDashboardCommand) error {
return inTransaction(func(sess *DBSession) error { return inTransaction(func(sess *DBSession) error {
dash := cmd.GetDashboardModel() dash := cmd.GetDashboardModel()
fmt.Printf("ParentId: %v", dash.ParentId)
// try get existing dashboard // try get existing dashboard
var existing, sameTitle m.Dashboard var existing, sameTitle m.Dashboard
@ -81,7 +81,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
} else { } else {
dash.Version += 1 dash.Version += 1
dash.Data.Set("version", dash.Version) dash.Data.Set("version", dash.Version)
affectedRows, err = sess.Id(dash.Id).Update(dash) affectedRows, err = sess.MustCols("parent_id").Id(dash.Id).Update(dash)
} }
if err != nil { if err != nil {

View File

@ -191,6 +191,46 @@ func TestDashboardDataAccess(t *testing.T) {
So(err, ShouldNotBeNil) So(err, ShouldNotBeNil)
}) })
Convey("Should be able to update dashboard and remove parentId", func() {
cmd := m.SaveDashboardCommand{
OrgId: 1,
Dashboard: simplejson.NewFromAny(map[string]interface{}{
"id": 1,
"title": "parentId",
"tags": []interface{}{},
}),
Overwrite: true,
ParentId: 2,
}
err := SaveDashboard(&cmd)
So(err, ShouldBeNil)
So(cmd.Result.ParentId, ShouldEqual, 2)
cmd = m.SaveDashboardCommand{
OrgId: 1,
Dashboard: simplejson.NewFromAny(map[string]interface{}{
"id": 1,
"title": "parentId",
"tags": []interface{}{},
}),
ParentId: 0,
Overwrite: true,
}
err = SaveDashboard(&cmd)
So(err, ShouldBeNil)
query := m.GetDashboardQuery{
Slug: cmd.Result.Slug,
OrgId: 1,
}
err = GetDashboard(&query)
So(err, ShouldBeNil)
So(query.Result.ParentId, ShouldEqual, 0)
})
Convey("Should be able to get dashboard tags", func() { Convey("Should be able to get dashboard tags", func() {
query := m.GetDashboardTagsQuery{OrgId: 1} query := m.GetDashboardTagsQuery{OrgId: 1}

View File

@ -6,13 +6,14 @@ import _ from 'lodash';
export class FolderPickerCtrl { export class FolderPickerCtrl {
dashboard: any; dashboard: any;
folders: any[]; folders: Folder[];
selectedFolder: number; selectedFolder: number;
/** @ngInject */ /** @ngInject */
constructor(private backendSrv, private $scope, $sce) { constructor(private backendSrv, private $scope, $sce) {
this.get(this.dashboard.id); this.get(this.dashboard.id);
this.selectedFolder = this.dashboard.meta.parentId; this.selectedFolder = this.dashboard.meta.parentId;
this.folders = [{id: 0, title: 'Root', type: 'dash-folder'}];
} }
get(dashboardId: number) { get(dashboardId: number) {
@ -21,17 +22,26 @@ export class FolderPickerCtrl {
}; };
return this.backendSrv.search(params).then(result => { return this.backendSrv.search(params).then(result => {
this.folders = result; this.folders.push(...result);
}); });
} }
folderChanged() { folderChanged() {
if (this.selectedFolder > 0) { this.dashboard.parentId = this.selectedFolder;
this.dashboard.parentId = this.selectedFolder;
}
} }
} }
export interface Folder {
id: number;
title: string;
uri?: string;
type: string;
tags?: string[];
isStarred?: boolean;
parentId?: number;
dashboards?: any;
}
export function folderPicker() { export function folderPicker() {
return { return {
restrict: 'E', restrict: 'E',

View File

@ -45,7 +45,7 @@
</div> </div>
</div> </div>
<folder-picker dashboard="dashboard"></folder-picker> <folder-picker ng-hide="dashboardMeta.isFolder" dashboard="dashboard"></folder-picker>
</div> </div>
<div class="section"> <div class="section">