From 765da9c841361c348d16a92a8cb162bfc6a94f25 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Wed, 10 May 2023 10:51:57 +0100 Subject: [PATCH] Nested folders: remove behaviour where selecting all children selects parent (#68084) remove behaviour where selecting all children selects parent --- .../browse-dashboards/state/reducers.test.ts | 56 +------------------ .../browse-dashboards/state/reducers.ts | 9 +-- 2 files changed, 4 insertions(+), 61 deletions(-) diff --git a/public/app/features/browse-dashboards/state/reducers.test.ts b/public/app/features/browse-dashboards/state/reducers.test.ts index 1bf0ce0d41a..6d3334347a1 100644 --- a/public/app/features/browse-dashboards/state/reducers.test.ts +++ b/public/app/features/browse-dashboards/state/reducers.test.ts @@ -201,56 +201,6 @@ describe('browse-dashboards reducers', () => { }); }); - it('selects ancestors when all their children are now selected', () => { - const state = createInitialState(); - - const rootDashboard = wellFormedDashboard(1).item; - const parentFolder = wellFormedFolder(2).item; - const childDashboard = wellFormedDashboard(3, {}, { parentUID: parentFolder.uid }).item; - const childFolder = wellFormedFolder(4, {}, { parentUID: parentFolder.uid }).item; - const grandchildDashboard = wellFormedDashboard(5, {}, { parentUID: childFolder.uid }).item; - - state.rootItems = [parentFolder, rootDashboard]; - state.childrenByParentUID[parentFolder.uid] = [childDashboard, childFolder]; - state.childrenByParentUID[childFolder.uid] = [grandchildDashboard]; - - // Selected the deepest grandchild dashboard - setItemSelectionState(state, { - type: 'setItemSelectionState', - payload: { item: grandchildDashboard, isSelected: true }, - }); - - expect(state.selectedItems).toEqual({ - $all: false, - dashboard: { - [grandchildDashboard.uid]: true, - }, - folder: { - [parentFolder.uid]: false, - [childFolder.uid]: true, // is selected because all it's children (grandchildDashboard) is selected - }, - panel: {}, - }); - - setItemSelectionState(state, { - type: 'setItemSelectionState', - payload: { item: childDashboard, isSelected: true }, - }); - - expect(state.selectedItems).toEqual({ - $all: false, - dashboard: { - [childDashboard.uid]: true, - [grandchildDashboard.uid]: true, - }, - folder: { - [parentFolder.uid]: true, // is now selected because we also selected its other child - [childFolder.uid]: true, - }, - panel: {}, - }); - }); - it('selects the $all header checkbox when all descendants are now selected', () => { const state = createInitialState(); @@ -264,16 +214,16 @@ describe('browse-dashboards reducers', () => { state.selectedItems.dashboard = { [rootDashboard.uid]: true, [childDashboardA.uid]: true }; - // Selected the deepest grandchild dashboard + // Selects the root folder setItemSelectionState(state, { type: 'setItemSelectionState', - payload: { item: childDashboardB, isSelected: true }, + payload: { item: rootFolder, isSelected: true }, }); expect(state.selectedItems.$all).toBeTruthy(); }); - it('unselects the $all header checkbox a descendant is unselected', () => { + it('unselects the $all header checkbox if a descendant is unselected', () => { const state = createInitialState(); const rootDashboard = wellFormedDashboard(1).item; diff --git a/public/app/features/browse-dashboards/state/reducers.ts b/public/app/features/browse-dashboards/state/reducers.ts index 3b8f23c9950..f9dde18434e 100644 --- a/public/app/features/browse-dashboards/state/reducers.ts +++ b/public/app/features/browse-dashboards/state/reducers.ts @@ -78,14 +78,7 @@ export function setItemSelectionState( break; } - if (isSelected) { - // If we're selecting an item, check all ancestors and see if all their children are - // now selected and update them appropriately - const children = state.childrenByParentUID[parent.uid]; - - const allChildrenSelected = children?.every((v) => state.selectedItems[v.kind][v.uid]) ?? false; - state.selectedItems[parent.kind][parent.uid] = allChildrenSelected; - } else { + if (!isSelected) { // A folder cannot be selected if any of it's children are unselected state.selectedItems[parent.kind][parent.uid] = false; }