From de6415965a6dda6525264b94ce5e3336f4c067fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Wed, 13 Oct 2021 20:09:10 +0300 Subject: [PATCH] Update selected on displayed change --- src/lib/listing/services/listing.service.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lib/listing/services/listing.service.ts b/src/lib/listing/services/listing.service.ts index 21e87cf..159149e 100644 --- a/src/lib/listing/services/listing.service.ts +++ b/src/lib/listing/services/listing.service.ts @@ -5,10 +5,10 @@ import { FilterService, getFilteredEntities } from '../../filtering'; import { SearchService } from '../../search'; import { IListable } from '../models'; import { EntitiesService } from './entities.service'; -import { getLength } from '../../utils'; +import { AutoUnsubscribe, getLength } from '../../utils'; @Injectable() -export class ListingService { +export class ListingService extends AutoUnsubscribe { readonly displayed$: Observable; readonly displayedLength$: Observable; readonly areAllSelected$: Observable; @@ -25,6 +25,8 @@ export class ListingService { private readonly _searchService: SearchService, private readonly _entitiesService: EntitiesService, ) { + super(); + this.displayed$ = this._getDisplayed$.pipe(shareReplay()); this.displayedLength$ = this.displayed$.pipe(getLength, distinctUntilChanged(), shareReplay()); @@ -38,6 +40,10 @@ export class ListingService { this.areAllSelected$ = this._areAllSelected$; this.areSomeSelected$ = this._areSomeSelected$; this.notAllSelected$ = this._notAllSelected$; + + this.addSubscription = this.displayed$.subscribe(() => { + this._updateSelection(); + }); } get selected(): E[] { @@ -116,7 +122,7 @@ export class ListingService { this.setSelected(this.selected.filter((el, idx) => idx !== currentEntityIdx)); } - updateSelection(): void { + private _updateSelection(): void { const items = this._displayed.filter(item => this.selected.includes(item)); this.setSelected(items); }