У меня есть такая сущность
interface IDevice {
id: string;
name: string;
brand: string;
plan: 'contract' | 'unlocked';
}
и хранилище сущностей
interface DevicesState extends EntityState<IDevice> {
selectedBrand: string | undefined;
selectedPlan: 'contract' | 'unlocked';
}
И я хочу запросить и отфильтровать сущности по выбранному бренду.
Моя единственная попытка была
selectedBrand$ = this.select('selectedBrand');
selectedPlan$ = this.select('selectedPlan');
devices$ = this.selectedBrand$
? this.selectAll({
filterBy: [
entity => entity.brand === this.selectedBrand$,
entity => entity.plan === this.selectedPlan$,
]
})
: this.selectMany([]);
Это не сработает, поскольку this.selectedBrand$
является наблюдаемой. Как выбрать устройства на основе двух значений внешнего состояния?
Попытка вторая: как предложено @sroes внизу, я использовал switchMap
и добавил forkJoin
, чтобы объединить два наблюдаемых. Но, похоже, это совсем не работает.
devices$ = forkJoin([this.selectedBrand$, this.selectedPlan$])
.pipe(
switchMap(([brand, plan]) => brand
? this.selectAll({
filterBy: [
entity => entity.categories.map(x => x.name).includes(brand),
entity => entity.plan_tab === plan
]
})
: this.selectMany([]))
);