diff --git a/src/ngx-tree-select/src/components/tree-select.component.ts b/src/ngx-tree-select/src/components/tree-select.component.ts index 3f13b64..9d7e2c2 100644 --- a/src/ngx-tree-select/src/components/tree-select.component.ts +++ b/src/ngx-tree-select/src/components/tree-select.component.ts @@ -124,6 +124,7 @@ export class TreeSelectComponent implements ControlValueAccessor { for (const item of this.internalItems) { this.ProcessMatchFilterTreeItem(item, this.svc.Configuration.filter); } + this.svc.setExpand(); } public constructor( @@ -268,11 +269,6 @@ export class TreeSelectComponent implements ControlValueAccessor { tree.text.toLowerCase().indexOf(filter.toLowerCase()) > -1 || result ); - if (filter !== '') { - tree.isOpen = true; - } else { - tree.isOpen = false; - } return tree.matchFilter; } } diff --git a/src/ngx-tree-select/src/models/select-option.ts b/src/ngx-tree-select/src/models/select-option.ts index 259da5a..35b186d 100644 --- a/src/ngx-tree-select/src/models/select-option.ts +++ b/src/ngx-tree-select/src/models/select-option.ts @@ -19,6 +19,15 @@ export class SelectOption { return this.childProperty && this.childProperty.trim().length > 0; } + public get filterExpandMode(): ExpandMode + { + if (this.filter !== '') { + return ExpandMode.All; + } else { + return this.expandMode; + } + } + public displayCheckbox(): boolean { return this.allowMultiple && this.isHierarchy(); } diff --git a/src/ngx-tree-select/src/services/select.service.ts b/src/ngx-tree-select/src/services/select.service.ts index 14b8d8d..6ebddb0 100644 --- a/src/ngx-tree-select/src/services/select.service.ts +++ b/src/ngx-tree-select/src/services/select.service.ts @@ -117,17 +117,6 @@ export class SelectService { } } - public setAllOpoen(items: SelectableItem[]) { - for (const itm of items) { - if (itm.hasChild) { - itm.isOpen = true; - this.setAllOpoen(itm.children); - } else { - itm.isOpen = true; - } - } - } - public setConfiguration(delegate: OptionDelegate, processItems: boolean): void { const modelBck = this._options.model; delegate(this._options); @@ -151,17 +140,21 @@ export class SelectService { } public setExpand() { - if (this._items) { - for (const item of this._items) { - if (this._options.expandMode === ExpandMode.All) { - item.isOpen = true; - if (item.hasChild) { - this.setAllOpoen(item.children); - } - } else if (this._options.expandMode === ExpandMode.Selection && item.children) { - item.isOpen = item.children.some((itm: SelectableItem) => itm.isOpen || itm.selected); - } else { - item.isOpen = false; + this.setExpandForList(this._items); + } + + private setExpandForList(items: SelectableItem[]) { + if (!items) { + return; + } + for (const item of items) { + this.setExpandForList(item.children); + item.isOpen = (this._options.filterExpandMode === ExpandMode.All); + if (this._options.filterExpandMode === ExpandMode.Selection) { + if (item.children) { + item.isOpen = item.children.some( + (itm: SelectableItem) => itm.isOpen || itm.selected + ); } } }