diff --git a/src/lib/filtering/filter-utils.ts b/src/lib/filtering/filter-utils.ts index f8288da..44b4e5c 100644 --- a/src/lib/filtering/filter-utils.ts +++ b/src/lib/filtering/filter-utils.ts @@ -3,6 +3,7 @@ import { INestedFilter } from './models/nested-filter.model'; import { IFilterGroup } from './models/filter-group.model'; import { IFilter } from './models/filter.model'; import { NestedFilter } from './models/nested-filter'; +import { IListable } from '../listing'; function copySettings(oldFilters: INestedFilter[], newFilters: INestedFilter[]) { if (!oldFilters || !newFilters) { @@ -52,7 +53,7 @@ export function checkFilter( validateArgs: any = [], matchAll = false, ): boolean { - const hasChecked = filters.find(f => f.checked); + const hasChecked = filters.some(f => f.checked); if (!hasChecked) { return true; @@ -77,7 +78,7 @@ export const keyChecker = (entity: Record, filter: INestedFilter): boolean => entity[key] === filter.id; -export function getFilteredEntities(entities: T[], filters: IFilterGroup[]): T[] { +export function getFilteredEntities(entities: T[], filters: IFilterGroup[]): T[] { const filteredEntities: T[] = []; entities.forEach(entity => { let add = true; diff --git a/src/lib/filtering/filter.service.ts b/src/lib/filtering/filter.service.ts index a76d68a..2e94b57 100644 --- a/src/lib/filtering/filter.service.ts +++ b/src/lib/filtering/filter.service.ts @@ -73,6 +73,21 @@ export class FilterService { this._filterGroups$.next([...this.filterGroups.filter(f => f.slug !== newGroup.slug), newGroup]); } + addFilterGroups(values: IFilterGroup[]): void { + const newFilters = values.map(value => { + const oldFilters = this.getGroup(value.slug)?.filters; + if (!oldFilters) { + return value; + } + + return { ...value, filters: processFilters(oldFilters, value.filters) }; + }); + + const filterSlugs = newFilters.map(f => f.slug); + + this._filterGroups$.next([...this.filterGroups.filter(f => !filterSlugs.includes(f.slug)), ...newFilters]); + } + getGroup(slug: string): IFilterGroup | undefined { return this.filterGroups.find(group => group.slug === slug); } @@ -82,7 +97,10 @@ export class FilterService { } getGroup$(slug: string): Observable { - return this.filterGroups$.pipe(get(group => group.slug === slug)); + return this.filterGroups$.pipe( + get(group => group.slug === slug), + shareReplay(), + ); } reset(): void { diff --git a/src/lib/listing/services/listing.service.ts b/src/lib/listing/services/listing.service.ts index 159149e..86b7815 100644 --- a/src/lib/listing/services/listing.service.ts +++ b/src/lib/listing/services/listing.service.ts @@ -27,7 +27,7 @@ export class ListingService extends AutoUnsubscribe { ) { super(); - this.displayed$ = this._getDisplayed$.pipe(shareReplay()); + this.displayed$ = this._getDisplayed$; this.displayedLength$ = this.displayed$.pipe(getLength, distinctUntilChanged(), shareReplay()); this.selected$ = this._selected$.asObservable().pipe(shareReplay()); diff --git a/src/lib/listing/table-header/table-header.component.html b/src/lib/listing/table-header/table-header.component.html index 31cf36a..06d9dc4 100644 --- a/src/lib/listing/table-header/table-header.component.html +++ b/src/lib/listing/table-header/table-header.component.html @@ -12,7 +12,7 @@ - + diff --git a/src/lib/listing/table-header/table-header.component.ts b/src/lib/listing/table-header/table-header.component.ts index ffe2d44..8632905 100644 --- a/src/lib/listing/table-header/table-header.component.ts +++ b/src/lib/listing/table-header/table-header.component.ts @@ -21,6 +21,8 @@ export class TableHeaderComponent { @Input() totalSize?: number; @Input() bulkActions?: TemplateRef; + readonly quickFilters$ = this.filterService.getFilterModels$('quickFilters'); + constructor( readonly entitiesService: EntitiesService, readonly listingService: ListingService,