add new methods to entities service

This commit is contained in:
Dan Percic 2021-10-05 00:08:55 +03:00
parent df23edf06b
commit 092ef1b2a8

View File

@ -1,5 +1,5 @@
import { Inject, Injectable, InjectionToken, Injector, Optional } from '@angular/core';
import { BehaviorSubject, combineLatest, Observable, pipe } from 'rxjs';
import { BehaviorSubject, combineLatest, Observable, pipe, Subject } from 'rxjs';
import { distinctUntilChanged, map, tap } from 'rxjs/operators';
import { FilterService, getFilteredEntities } from '../../filtering';
import { SearchService } from '../../search';
@ -32,6 +32,7 @@ export class EntitiesService<E extends IListable, I = E> extends GenericService<
readonly selectedLength$: Observable<number>;
readonly all$: Observable<E[]>;
readonly allLength$: Observable<number>;
readonly entityChanged$ = new Subject<E>();
private readonly _filterService = this._injector.get(FilterService);
private readonly _searchService = this._injector.get<SearchService<E>>(SearchService);
private readonly _all$ = new BehaviorSubject<E[]>([]);
@ -138,8 +139,23 @@ export class EntitiesService<E extends IListable, I = E> extends GenericService<
this.setSelected(this.selected.filter((el, idx) => idx !== currentEntityIdx));
}
find(id: string): E | undefined {
return this.all.find(entity => entity.id === id);
}
has(id: string): boolean {
return this.all.some(entity => entity.id === id);
}
updateSelection(): void {
const items = this._displayed.filter(item => this.selected.includes(item));
this.setSelected(items);
}
replace(newEntity: E): void {
const all = this.all.filter(item => item.id !== newEntity.id);
all.push(newEntity);
this.setEntities(all);
this.entityChanged$.next(newEntity);
}
}