Составьте селекторы в обоих направлениях без круговой зависимости - PullRequest
1 голос
/ 18 февраля 2020

Я хочу объединить два селектора, чтобы получить продукты и получить категории.

Категории имеют ссылку на свои продукты.

//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)
        }
    );

Какие решения для предотвращения этого? Прямо сейчас я использую другой более абстрактный файл для объединения селекторов из разных состояний. Это не похоже на масштабируемое решение. Это немного грязно.

...