diff --git a/src/components/components.module.ts b/src/components/components.module.ts index d51928617d69ff3089cb7aa07dcfd7da2d37b0f0..e435687fd0541445a7989f8f87f1bb3eb392bae9 100644 --- a/src/components/components.module.ts +++ b/src/components/components.module.ts @@ -28,6 +28,7 @@ import { PillComponent } from './pill/pill.component'; import { CommonModule } from '@angular/common'; import { RadioList } from './radiolist/radiolist.component'; import { AngularMaterialModule } from 'src/ui/sharedModules/angularMaterial.module'; +import { FilterCollapsePipe } from './flatTree/filterCollapse.pipe'; @NgModule({ @@ -65,7 +66,8 @@ import { AngularMaterialModule } from 'src/ui/sharedModules/angularMaterial.modu HighlightPipe, FitlerRowsByVisibilityPipe, AppendSiblingFlagPipe, - ClusteringPipe + ClusteringPipe, + FilterCollapsePipe ], exports : [ BrowserAnimationsModule, diff --git a/src/components/flatTree/filterCollapse.pipe.ts b/src/components/flatTree/filterCollapse.pipe.ts new file mode 100644 index 0000000000000000000000000000000000000000..00ce53d406e06c316d6b9027b5570f068578e69e --- /dev/null +++ b/src/components/flatTree/filterCollapse.pipe.ts @@ -0,0 +1,28 @@ +import { PipeTransform, Pipe } from "@angular/core"; + +@Pipe({ + name: 'filterCollapsePipe' +}) + +export class FilterCollapsePipe implements PipeTransform{ + public transform(array: any[], collapsedLevels: Set<string>, uncollapsedLevels: Set<string>, defaultCollapse: boolean ){ + const isCollapsedById = (id) => { + + return collapsedLevels.has(id) + ? true + : uncollapsedLevels.has(id) + ? false + : !defaultCollapse + } + const returnArray = array.filter(item => { + return !item.lvlId.split('_') + .filter((v,idx,arr) => idx < arr.length -1 ) + .reduce((acc,curr) => acc + .concat(acc.length === 0 + ? curr + : acc[acc.length -1].concat(`_${curr}`)), []) + .some(id => isCollapsedById(id)) + }) + return returnArray + } +} \ No newline at end of file diff --git a/src/components/flatTree/flatTree.component.ts b/src/components/flatTree/flatTree.component.ts index bf1efd663bf2bb3f9af5615fb5284057f341be7c..d6002b13089f56e10b96b5b49463b4b3e7694b68 100644 --- a/src/components/flatTree/flatTree.component.ts +++ b/src/components/flatTree/flatTree.component.ts @@ -43,9 +43,15 @@ export class FlatTreeComponent{ uncollapsedLevels : Set<string> = new Set() toggleCollapse(flattenedItem:FlattenedTreeInterface){ - this.isCollapsed(flattenedItem) - ? (this.collapsedLevels.delete(flattenedItem.lvlId), this.uncollapsedLevels.add(flattenedItem.lvlId)) - : (this.collapsedLevels.add(flattenedItem.lvlId), this.uncollapsedLevels.delete(flattenedItem.lvlId)) + if (this.isCollapsed(flattenedItem)) { + this.collapsedLevels.delete(flattenedItem.lvlId) + this.uncollapsedLevels.add(flattenedItem.lvlId) + } else { + this.collapsedLevels.add(flattenedItem.lvlId) + this.uncollapsedLevels.delete(flattenedItem.lvlId) + } + this.collapsedLevels = new Set(this.collapsedLevels) + this.uncollapsedLevels = new Set(this.uncollapsedLevels) } isCollapsed(flattenedItem:FlattenedTreeInterface):boolean{ diff --git a/src/components/flatTree/flatTree.template.html b/src/components/flatTree/flatTree.template.html index 6340f50b7992ab68a9b01213699fb5cd2db666a5..3dc5601046cb636f23482dbe2025df86a6c7c4c1 100644 --- a/src/components/flatTree/flatTree.template.html +++ b/src/components/flatTree/flatTree.template.html @@ -4,13 +4,12 @@ itemSize="15"> <div - *cdkVirtualFor="let flattenedItem of (inputItem | flattenTreePipe : findChildren | filterRowsByVisbilityPipe : findChildren : searchFilter | appendSiblingFlagPipe )" + *cdkVirtualFor="let flattenedItem of (inputItem | flattenTreePipe : findChildren | filterRowsByVisbilityPipe : findChildren : searchFilter | appendSiblingFlagPipe | filterCollapsePipe : collapsedLevels : uncollapsedLevels : childrenExpanded )" [ngClass]="getClass(flattenedItem.flattenedTreeLevel)" class="text-nowrap" [attr.flattenedtreelevel]="flattenedItem.flattenedTreeLevel" [attr.collapsed]="flattenedItem.collapsed ? flattenedItem.collapsed : false" [attr.lvlId]="flattenedItem.lvlId" - [hidden]="collapseRow(flattenedItem) " renderNode> <span class="padding-block-container"> diff --git a/src/ui/regionHierachy/regionHierarchy.component.ts b/src/ui/regionHierachy/regionHierarchy.component.ts index c4b4a4951d83d5414602696297800046045cd5a9..f04dc7b1b501c71e5b5cc48ce5181cab4275e896 100644 --- a/src/ui/regionHierachy/regionHierarchy.component.ts +++ b/src/ui/regionHierachy/regionHierarchy.component.ts @@ -105,6 +105,8 @@ export class RegionHierarchy implements OnInit, AfterViewInit{ } ngOnInit(){ + this.displayTreeNode = getDisplayTreeNode(this.searchTerm, this.selectedRegions) + this.filterTreeBySearch = getFilterTreeBySearch(this.filterNameBySearchPipe, this.searchTerm) this.subscriptions.push( this.handleRegionTreeClickSubject.pipe( @@ -118,6 +120,20 @@ export class RegionHierarchy implements OnInit, AfterViewInit{ } ngAfterViewInit(){ + /** + * TODO + * bandaid fix on + * when region search loses focus, the searchTerm is cleared, + * but hierarchy filter does not reset + */ + this.subscriptions.push( + fromEvent(this.searchTermInput.nativeElement, 'focus').pipe( + + ).subscribe(() => { + this.displayTreeNode = getDisplayTreeNode(this.searchTerm, this.selectedRegions) + this.filterTreeBySearch = getFilterTreeBySearch(this.filterNameBySearchPipe, this.searchTerm) + }) + ) this.subscriptions.push( fromEvent(this.searchTermInput.nativeElement, 'input').pipe( debounceTime(200)