Browse Source

WIP: add dummy root folder to folder picker

Can move a dash from a folder back to root level as well
Daniel Lee 8 years ago
parent
commit
6c736e002a

+ 2 - 2
pkg/services/sqlstore/dashboard.go

@@ -25,7 +25,7 @@ func init() {
 func SaveDashboard(cmd *m.SaveDashboardCommand) error {
 	return inTransaction(func(sess *DBSession) error {
 		dash := cmd.GetDashboardModel()
-
+		fmt.Printf("ParentId: %v", dash.ParentId)
 		// try get existing dashboard
 		var existing, sameTitle m.Dashboard
 
@@ -81,7 +81,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
 		} else {
 			dash.Version += 1
 			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 {

+ 40 - 0
pkg/services/sqlstore/dashboard_test.go

@@ -191,6 +191,46 @@ func TestDashboardDataAccess(t *testing.T) {
 				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() {
 				query := m.GetDashboardTagsQuery{OrgId: 1}
 

+ 15 - 5
public/app/features/dashboard/folder_picker/picker.ts

@@ -6,13 +6,14 @@ import _ from 'lodash';
 
 export class FolderPickerCtrl {
   dashboard: any;
-  folders: any[];
+  folders: Folder[];
   selectedFolder: number;
 
   /** @ngInject */
   constructor(private backendSrv, private $scope, $sce) {
     this.get(this.dashboard.id);
     this.selectedFolder = this.dashboard.meta.parentId;
+    this.folders = [{id: 0, title: 'Root', type: 'dash-folder'}];
   }
 
   get(dashboardId: number) {
@@ -21,17 +22,26 @@ export class FolderPickerCtrl {
     };
 
     return this.backendSrv.search(params).then(result => {
-      this.folders = result;
+      this.folders.push(...result);
     });
   }
 
   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() {
   return {
     restrict: 'E',

+ 1 - 1
public/app/features/dashboard/partials/settings.html

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