Как обработать функцию фильтра для моего магазина?
В настоящее время он извлекает данные из внешнего источника с помощью службы с помощью эффектов.
Как только мы получим данные, они будут доступны внутри. мой магазин.
Итак, я хочу отфильтровать сущности в моем магазине (локальное хранилище ngrx, а не резервную базу данных) на основе некоторых критериев фильтрации.
это интерфейс элемента.
export interface item {
id: string;
name: string;
price: number;
location: string;
category: string;
...
}
// component.ts
this.store.dispatch(loadItems())
this.Items$ = this.store.pipe(select(selectItems))
//actions.ts
export const loadItems = createAction(
'[Item Items Component] Load Items',
);
export const loadItemsSuccess = createAction(
'[Item Items/API] Load Items Success',
props<{ Items: Item[] }>()
);
export const loadItemsFailure = createAction(
'[Item Items/API] Load Items Failure',
props<{ error: any }>()
);
// effects.ts
loadItems$ = createEffect(() =>
this.actions$.pipe(
ofType(ItemActions.loadItems),
mergeMap(action =>
this.defaultService.getContentModeration().pipe(
map(Items => ItemActions.loadItemsSuccess({ Items })),
catchError(error =>
of(ItemActions.loadItemsFailure({ error }))
)
)
)
)
)
// selector.ts
export const selectItemState = createFeatureSelector<ItemState>(
ItemsFeatureKey
);
export const selectItems = createSelector(selectItemState, selectAll);
// reducer.ts
export const ItemsFeatureKey = 'Items';
export interface ItemState extends EntityState<Item> {
// additional entities state properties
error: any;
}
export const adapter: EntityAdapter<Item> = createEntityAdapter<Item>({
sortComparer: (c1: Item, c2: Item) => {
const compare = c1.timestamp - c2.timestamp;
return compare > 0 ? 11 : compare < 0 ? 1 : 0
},
selectId: Item => Item.contentId,
});
export const initialState: ItemState = adapter.getInitialState({
// additional entity state properties
error: undefined
});
export const reducer = createReducer(
initialState,
on(ItemActions.loadItemsSuccess,
(state, action) => adapter.setAll(action.Items, state)
),
on(ItemActions.loadItemsFailure,
(state, action) => {
return {
...state,
error: action.error
}
}
),
export const {
selectIds,
selectEntities,
selectAll,
selectTotal,
} = adapter.getSelectors();
В настоящее время я использую трубу фильтра. но это нереально. Это замедляет мое приложение. Я хочу использовать потенциал магазина, который обрабатывает состояние
Поэтому я хочу отфильтровать товары (сущности) в магазине по названию, цене, категории или по объединенному имени, цене, категории. Как и обычные фильтры, которые мы видим на таких сайтах, как amazon, flipkart и др. c ...
Я думаю, что все решения устарели (некоторые из них используют операторы switch, но недавно включены селекторы ngrx ( ) метод и действия также отличаются от предыдущих версий) .
Может кто-нибудь помочь, пожалуйста?
Если у вас нет времени, чтобы ответить, скажите, пожалуйста, это тупик или нет. Так что я могу продолжать использовать каналы и прекратить поиск дальше.