diff --git a/src/aria/tree/tree.spec.ts b/src/aria/tree/tree.spec.ts index c64209561fc5..7ef922ac8f1d 100644 --- a/src/aria/tree/tree.spec.ts +++ b/src/aria/tree/tree.spec.ts @@ -1067,6 +1067,48 @@ describe('Tree', () => { expect(berriesEl.getAttribute('aria-expanded')).toBe('true'); }); + it('should not affect selected item when collapse', () => { + setupTestTree(); + updateTree({ + nodes: [ + { + value: 'fruits', + label: 'Fruits', + children: [ + {value: 'apple', label: 'Apple'}, + {value: 'banana', label: 'Banana'}, + { + value: 'berries', + label: 'Berries', + children: [ + {value: 'strawberry', label: 'Strawberry'}, + {value: 'blueberry', label: 'Blueberry'}, + ], + expanded: true, + }, + ], + expanded: true, + }, + ], + }); + const blueberryEl = getTreeItemElementByValue('blueberry')!; + const berriesEl = getTreeItemElementByValue('berries')!; + const fruits = getTreeItemElementByValue('fruits')!; + + click(blueberryEl); + expect(treeInstance.values()).toEqual(['blueberry']); + + left(); + left(); // collapse berries + expect(berriesEl.getAttribute('aria-expanded')).toBe('false'); + expect(treeInstance.values()).toEqual(['blueberry']); + + left(); + left(); // collapse fruits + expect(fruits.getAttribute('aria-expanded')).toBe('false'); + expect(treeInstance.values()).toEqual(['blueberry']); + }); + describe('LTR', () => { beforeEach(() => { setupTestTree(); diff --git a/src/aria/tree/tree.ts b/src/aria/tree/tree.ts index b3c0493cf900..8f8b67671887 100644 --- a/src/aria/tree/tree.ts +++ b/src/aria/tree/tree.ts @@ -208,6 +208,8 @@ export class Tree { }); afterRenderEffect(() => { + if (!(this._pattern instanceof ComboboxTreePattern)) return; + const items = inputs.allItems(); const values = untracked(() => this.values());