From 45a1c57e731c10939e54c5c7c4c5d3f2c936ffb5 Mon Sep 17 00:00:00 2001 From: Xiao Gui <xgui3783@gmail.com> Date: Fri, 14 Jul 2023 15:23:10 +0200 Subject: [PATCH] fix: min tray filtering --- .../regionListSearch.component.ts | 31 ++++++++++++------- .../viewerCmp/viewerCmp.template.html | 1 + 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/atlasComponents/sapiViews/core/rich/regionsListSearch/regionListSearch.component.ts b/src/atlasComponents/sapiViews/core/rich/regionsListSearch/regionListSearch.component.ts index e55fb7e12..389486f77 100644 --- a/src/atlasComponents/sapiViews/core/rich/regionsListSearch/regionListSearch.component.ts +++ b/src/atlasComponents/sapiViews/core/rich/regionsListSearch/regionListSearch.component.ts @@ -5,6 +5,7 @@ import { UntypedFormControl } from "@angular/forms"; import { debounceTime, distinctUntilChanged, map, startWith } from "rxjs/operators"; import { MatAutocompleteSelectedEvent } from "@angular/material/autocomplete"; import { SapiViewsCoreRichRegionListTemplateDirective } from "./regionListSearchTmpl.directive"; +import { BehaviorSubject, combineLatest } from "rxjs"; const filterRegionViaSearch = (searchTerm: string) => (region:SxplrRegion) => { return region.name.toLocaleLowerCase().includes(searchTerm.toLocaleLowerCase()) @@ -25,13 +26,16 @@ export class SapiViewsCoreRichRegionListSearch { showNOptions = 4 - private _regions: SxplrRegion[] = [] - get regions(){ - return this._regions - } + #regions = new BehaviorSubject<SxplrRegion[]>([]) @Input('sxplr-sapiviews-core-rich-regionlistsearch-regions') set regions(reg: SxplrRegion[]) { - this._regions = reg.filter(r => !reg.some(c => c.parentIds.includes(r.id))) + this.#regions.next(reg) + } + + #mappedRegionNames = new BehaviorSubject<string[]>([]) + @Input('sxplr-sapiviews-core-rich-regionlistsearch-mapped-region-names') + set mappedRegions(regNames: string[]) { + this.#mappedRegionNames.next(regNames) } @ContentChild(SapiViewsCoreRichRegionListTemplateDirective) @@ -51,13 +55,18 @@ export class SapiViewsCoreRichRegionListSearch { public searchFormControl = new UntypedFormControl() - public searchedList$ = this.searchFormControl.valueChanges.pipe( - startWith(''), - distinctUntilChanged(), - debounceTime(160), - map((searchTerm: string | SxplrRegion) => { + public searchedList$ = combineLatest([ + this.searchFormControl.valueChanges.pipe( + startWith(''), + distinctUntilChanged(), + debounceTime(160), + ), + this.#regions, + this.#mappedRegionNames + ]).pipe( + map(([searchTerm, regions, mappedRegionNames]) => { if (typeof searchTerm === "string") { - return this.regions.filter(filterRegionViaSearch(searchTerm)) + return regions.filter(r => mappedRegionNames.includes(r.name)).filter(filterRegionViaSearch(searchTerm)) } return [] }) diff --git a/src/viewerModule/viewerCmp/viewerCmp.template.html b/src/viewerModule/viewerCmp/viewerCmp.template.html index 283145b65..a96f02587 100644 --- a/src/viewerModule/viewerCmp/viewerCmp.template.html +++ b/src/viewerModule/viewerCmp/viewerCmp.template.html @@ -562,6 +562,7 @@ <sxplr-sapiviews-core-rich-regionlistsearch [sxplr-sapiviews-core-rich-regionlistsearch-regions]="allAvailableRegions$ | async" + [sxplr-sapiviews-core-rich-regionlistsearch-mapped-region-names]="view.labelMappedRegionNames" [sxplr-sapiviews-core-rich-regionlistsearch-current-search]="view.selectedRegions.length === 1 ? view.selectedRegions[0].name : null" (sxplr-sapiviews-core-rich-regionlistsearch-region-select)="selectRoi($event)" (sxplr-sapiviews-core-rich-regionlistsearch-region-toggle)="toggleRoi($event)"> -- GitLab