Я хочу объединить два селектора, чтобы получить продукты и получить категории.
Категории имеют ссылку на свои продукты.
//category.selectors.ts
import {ProductSelector} from "./product.selector.ts"
export const selectCategoryEntitiesDeep = createSelector(
CategorySelectors.selectCategoryEntities,
ProductSelectors.selectProductEntitiesDeep,
(categoryEntities, productEntities): Dictionary<Category> => {
const _categoryEntities = ObjUtils.cloneDeep(categoryEntities);
Object.keys(_categoryEntities).forEach(id => {
_categoryEntities[id]["products"] = _categoryEntities[id].productsIds.map(productId => {
return productEntities[productId];
});
});
return _categoryEntities;
}
);
Это прямо вперед. При составлении селектора для продуктов я хочу добавить ссылку на все категории, к которым относится продукт. Для этого мне нужно импортировать category.selctor.ts в product.selector.ts. Поскольку я импортирую товары и по категориям, это приведет к круговой зависимости.
// product.selectors.ts
import {CategorySelectors} from "./category.selectors.ts"
export const selectProductEntitiesDeep = createSelectorFactory<{}, Dictionary<Product>>(StateUtils.customObjectMemoizer)(
ProductSelectors.selectEntities,
CategorySelectors.selectCategoryEntities,
(productEntities: Dictionary<Product>,
categoryEntities: Dictionary<Category>
) => {
return createProductDictionary(productEntities, categoryEntities)
}
);
Какие решения для предотвращения этого? Прямо сейчас я использую другой более абстрактный файл для объединения селекторов из разных состояний. Это не похоже на масштабируемое решение. Это немного грязно.