сделать?
interface FilterValues {
[key: string]: string;
}
interface ActiveFilters {
[key: string]: boolean;
}
interface Filter {
value: string;
isActive: boolean;
}
interface FiltersState {
[key: string]: Filter;
}
const pluckFilter = (property: string) =>
(accumulator: FilterValues, [key, filter]: [string, Filter]) =>
({...accumulator, [key]: filter[property]});
filtersState$: BehaviorSubject<FiltersState> = new BehaviorSubject<FiltersState>({});
filterValues$: Observable<FilterValues> = this.filtersState$.asObservable().pipe(
distinctUntilChanged(),
map((filters: FiltersState) =>
Object.entries(filters).reduce(
pluckFilter('value'),
{},
),
),
);
activeFilters$: Observable<ActiveFilters> = this.filtersState$.asObservable().pipe(
distinctUntilChanged(),
map((filters: FiltersState) =>
Object.entries(filters).reduce(
pluckFilter('isActive'),
{},
),
),
);
по сути просто объект с сущностями и два селектора, которые выдают обрезанные модели
function distinctUntilKeysChanged<T>( ...keys: string[] ): MonoTypeOperatorFunction<T> { return pipe( distinctUntilChanged( (a: T, b: T): boolean => keys.every((key) => a[key] === b[key]) ) ); } source.pipe( distinctUntilKeysChanged('field1', 'field2', ...) ) Аналогично можно сделать какой-нибудь omit. (Может не работать, так как я пока не за ноутом)
Обсуждают сегодня