@daffodil/product-composite 0.68.0 → 0.68.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export var DaffCompositeProductActionTypes;
5
5
  (function (DaffCompositeProductActionTypes) {
6
- DaffCompositeProductActionTypes["CompositeProductApplyOptionAction"] = "[Composite Product] Composite Product Apply Option Action";
6
+ DaffCompositeProductActionTypes["CompositeProductApplyOptionAction"] = "[@daffodil/product-composite] Composite Product Apply Option Action";
7
7
  })(DaffCompositeProductActionTypes || (DaffCompositeProductActionTypes = {}));
8
8
  /**
9
9
  * Applies a product option to a particular composite product.
@@ -21,4 +21,4 @@ export class DaffCompositeProductApplyOption {
21
21
  this.type = DaffCompositeProductActionTypes.CompositeProductApplyOptionAction;
22
22
  }
23
23
  }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLXByb2R1Y3QuYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcHJvZHVjdC1jb21wb3NpdGUvc3RhdGUvc3JjL2FjdGlvbnMvY29tcG9zaXRlLXByb2R1Y3QuYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLCtCQUVYO0FBRkQsV0FBWSwrQkFBK0I7SUFDekMsa0lBQStGLENBQUE7QUFDakcsQ0FBQyxFQUZXLCtCQUErQixLQUEvQiwrQkFBK0IsUUFFMUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sK0JBQStCO0lBRzFDLFlBQW1CLEVBQVcsRUFBUyxNQUFzQyxFQUFTLFFBQThDLEVBQVMsR0FBWTtRQUF0SSxPQUFFLEdBQUYsRUFBRSxDQUFTO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0M7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFzQztRQUFTLFFBQUcsR0FBSCxHQUFHLENBQVM7UUFGaEosU0FBSSxHQUFHLCtCQUErQixDQUFDLGlDQUFpQyxDQUFDO0lBRTBFLENBQUM7Q0FDOUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7XG4gIERhZmZDb21wb3NpdGVQcm9kdWN0LFxuICBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW0sXG4gIERhZmZDb21wb3NpdGVQcm9kdWN0SXRlbU9wdGlvbixcbn0gZnJvbSAnQGRhZmZvZGlsL3Byb2R1Y3QtY29tcG9zaXRlJztcblxuLyoqXG4gKiBBY3Rpb24gdHlwZXMgZm9yIENvbXBvc2l0ZSBQcm9kdWN0IEFjdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uVHlwZXMge1xuICBDb21wb3NpdGVQcm9kdWN0QXBwbHlPcHRpb25BY3Rpb24gPSAnW0NvbXBvc2l0ZSBQcm9kdWN0XSBDb21wb3NpdGUgUHJvZHVjdCBBcHBseSBPcHRpb24gQWN0aW9uJ1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBwcm9kdWN0IG9wdGlvbiB0byBhIHBhcnRpY3VsYXIgY29tcG9zaXRlIHByb2R1Y3QuXG4gKlxuICogQHBhcmFtIGlkIC0gSWQgb2YgdGhlIENvbXBvc2l0ZSBQcm9kdWN0XG4gKiBAcGFyYW0gaXRlbUlkIC0gSWQgb2YgdGhlIHByb2R1Y3QgaXRlbS5cbiAqIEBwYXJhbSBvcHRpb25JZCAtIElkIG9mIHRoZSBvcHRpb24gb2YgdGhlIHByb2R1Y3QgaXRlbSB0aGF0IGlzIGNob3Nlbi5cbiAqL1xuZXhwb3J0IGNsYXNzIERhZmZDb21wb3NpdGVQcm9kdWN0QXBwbHlPcHRpb248VCBleHRlbmRzIERhZmZDb21wb3NpdGVQcm9kdWN0ID0gRGFmZkNvbXBvc2l0ZVByb2R1Y3Q+IGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uVHlwZXMuQ29tcG9zaXRlUHJvZHVjdEFwcGx5T3B0aW9uQWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogVFsnaWQnXSwgcHVibGljIGl0ZW1JZDogRGFmZkNvbXBvc2l0ZVByb2R1Y3RJdGVtWydpZCddLCBwdWJsaWMgb3B0aW9uSWQ6IERhZmZDb21wb3NpdGVQcm9kdWN0SXRlbU9wdGlvblsnaWQnXSwgcHVibGljIHF0eT86IG51bWJlcikge31cbn1cblxuZXhwb3J0IHR5cGUgRGFmZkNvbXBvc2l0ZVByb2R1Y3RBY3Rpb25zPFQgZXh0ZW5kcyBEYWZmQ29tcG9zaXRlUHJvZHVjdCA9IERhZmZDb21wb3NpdGVQcm9kdWN0PiA9XG5cdHwgRGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBseU9wdGlvbjxUPjtcbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLXByb2R1Y3QuYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcHJvZHVjdC1jb21wb3NpdGUvc3RhdGUvc3JjL2FjdGlvbnMvY29tcG9zaXRlLXByb2R1Y3QuYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLCtCQUVYO0FBRkQsV0FBWSwrQkFBK0I7SUFDekMsNElBQXlHLENBQUE7QUFDM0csQ0FBQyxFQUZXLCtCQUErQixLQUEvQiwrQkFBK0IsUUFFMUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sK0JBQStCO0lBRzFDLFlBQW1CLEVBQVcsRUFBUyxNQUFzQyxFQUFTLFFBQThDLEVBQVMsR0FBWTtRQUF0SSxPQUFFLEdBQUYsRUFBRSxDQUFTO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0M7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFzQztRQUFTLFFBQUcsR0FBSCxHQUFHLENBQVM7UUFGaEosU0FBSSxHQUFHLCtCQUErQixDQUFDLGlDQUFpQyxDQUFDO0lBRTBFLENBQUM7Q0FDOUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7XG4gIERhZmZDb21wb3NpdGVQcm9kdWN0LFxuICBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW0sXG4gIERhZmZDb21wb3NpdGVQcm9kdWN0SXRlbU9wdGlvbixcbn0gZnJvbSAnQGRhZmZvZGlsL3Byb2R1Y3QtY29tcG9zaXRlJztcblxuLyoqXG4gKiBBY3Rpb24gdHlwZXMgZm9yIENvbXBvc2l0ZSBQcm9kdWN0IEFjdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uVHlwZXMge1xuICBDb21wb3NpdGVQcm9kdWN0QXBwbHlPcHRpb25BY3Rpb24gPSAnW0BkYWZmb2RpbC9wcm9kdWN0LWNvbXBvc2l0ZV0gQ29tcG9zaXRlIFByb2R1Y3QgQXBwbHkgT3B0aW9uIEFjdGlvbidcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgcHJvZHVjdCBvcHRpb24gdG8gYSBwYXJ0aWN1bGFyIGNvbXBvc2l0ZSBwcm9kdWN0LlxuICpcbiAqIEBwYXJhbSBpZCAtIElkIG9mIHRoZSBDb21wb3NpdGUgUHJvZHVjdFxuICogQHBhcmFtIGl0ZW1JZCAtIElkIG9mIHRoZSBwcm9kdWN0IGl0ZW0uXG4gKiBAcGFyYW0gb3B0aW9uSWQgLSBJZCBvZiB0aGUgb3B0aW9uIG9mIHRoZSBwcm9kdWN0IGl0ZW0gdGhhdCBpcyBjaG9zZW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBEYWZmQ29tcG9zaXRlUHJvZHVjdEFwcGx5T3B0aW9uPFQgZXh0ZW5kcyBEYWZmQ29tcG9zaXRlUHJvZHVjdCA9IERhZmZDb21wb3NpdGVQcm9kdWN0PiBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBEYWZmQ29tcG9zaXRlUHJvZHVjdEFjdGlvblR5cGVzLkNvbXBvc2l0ZVByb2R1Y3RBcHBseU9wdGlvbkFjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IFRbJ2lkJ10sIHB1YmxpYyBpdGVtSWQ6IERhZmZDb21wb3NpdGVQcm9kdWN0SXRlbVsnaWQnXSwgcHVibGljIG9wdGlvbklkOiBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW1PcHRpb25bJ2lkJ10sIHB1YmxpYyBxdHk/OiBudW1iZXIpIHt9XG59XG5cbmV4cG9ydCB0eXBlIERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uczxUIGV4dGVuZHMgRGFmZkNvbXBvc2l0ZVByb2R1Y3QgPSBEYWZmQ29tcG9zaXRlUHJvZHVjdD4gPVxuXHR8IERhZmZDb21wb3NpdGVQcm9kdWN0QXBwbHlPcHRpb248VD47XG4iXX0=
@@ -13,7 +13,7 @@ import { daffComposeReducers } from '@daffodil/core/state';
13
13
  */
14
14
  var DaffCompositeProductActionTypes;
15
15
  (function (DaffCompositeProductActionTypes) {
16
- DaffCompositeProductActionTypes["CompositeProductApplyOptionAction"] = "[Composite Product] Composite Product Apply Option Action";
16
+ DaffCompositeProductActionTypes["CompositeProductApplyOptionAction"] = "[@daffodil/product-composite] Composite Product Apply Option Action";
17
17
  })(DaffCompositeProductActionTypes || (DaffCompositeProductActionTypes = {}));
18
18
  /**
19
19
  * Applies a product option to a particular composite product.
@@ -1 +1 @@
1
- {"version":3,"file":"daffodil-product-composite-state.mjs","sources":["../../../libs/product-composite/state/src/actions/composite-product.actions.ts","../../../libs/product-composite/state/src/reducers/composite-product-entities/composite-product-entities-reducer-adapter.ts","../../../libs/product-composite/state/src/reducers/composite-product-store-feature-key.ts","../../../libs/product-composite/state/src/selectors/feature.selector.ts","../../../libs/product-composite/state/src/selectors/composite-product-entities/composite-product-entities.selectors.ts","../../../libs/product-composite/state/src/selectors/composite-product/composite-product.selectors.ts","../../../libs/product-composite/state/src/selectors/all.selector.ts","../../../libs/product-composite/state/src/facades/composite-product/composite-product.facade.ts","../../../libs/product-composite/state/src/reducers/composite-product-entities/composite-product-entities.reducer.ts","../../../libs/product-composite/state/src/reducers/composite-product-reducers.ts","../../../libs/product-composite/state/src/reducers/injection-tokens/extra.token.ts","../../../libs/product-composite/state/src/helpers/ensure-items.ts","../../../libs/product-composite/state/src/reducers/ensure-items.meta-reducer.ts","../../../libs/product-composite/state/src/reducers/injection-tokens/reducers.token.ts","../../../libs/product-composite/state/src/composite-product-state.module.ts","../../../libs/product-composite/state/src/daffodil-product-composite-state.ts"],"sourcesContent":["import { Action } from '@ngrx/store';\n\nimport {\n DaffCompositeProduct,\n DaffCompositeProductItem,\n DaffCompositeProductItemOption,\n} from '@daffodil/product-composite';\n\n/**\n * Action types for Composite Product Actions.\n */\nexport enum DaffCompositeProductActionTypes {\n CompositeProductApplyOptionAction = '[Composite Product] Composite Product Apply Option Action'\n}\n\n/**\n * Applies a product option to a particular composite product.\n *\n * @param id - Id of the Composite Product\n * @param itemId - Id of the product item.\n * @param optionId - Id of the option of the product item that is chosen.\n */\nexport class DaffCompositeProductApplyOption<T extends DaffCompositeProduct = DaffCompositeProduct> implements Action {\n readonly type = DaffCompositeProductActionTypes.CompositeProductApplyOptionAction;\n\n constructor(public id: T['id'], public itemId: DaffCompositeProductItem['id'], public optionId: DaffCompositeProductItemOption['id'], public qty?: number) {}\n}\n\nexport type DaffCompositeProductActions<T extends DaffCompositeProduct = DaffCompositeProduct> =\n\t| DaffCompositeProductApplyOption<T>;\n","import {\n createEntityAdapter,\n EntityState,\n} from '@ngrx/entity';\nimport { defaultMemoize } from '@ngrx/store';\n\nimport { DaffProductTypeEnum } from '@daffodil/product';\nimport {\n DaffCompositeProduct,\n DaffCompositeProductItem,\n DaffCompositeConfigurationItem,\n DaffCompositeProductItemOption,\n} from '@daffodil/product-composite';\n\nimport { DaffCompositeProductEntity } from './composite-product-entity';\n\n/**\n * Composite Product Item Options Adapter for changing/overwriting entity state.\n */\nexport class DaffCompositeProductAppliedOptionsEntitiesAdapter<T extends EntityState<DaffCompositeProductEntity> = EntityState<DaffCompositeProductEntity>> {\n /**\n * @docs-private\n */\n private _adapter = createEntityAdapter<DaffCompositeProductEntity>();\n\n /**\n * Gets the initial entity state.\n */\n getInitialState() {\n return this._adapter.getInitialState();\n }\n\n /**\n * Get the entity selectors.\n */\n getSelectors() {\n return this._adapter.getSelectors();\n }\n\n /**\n * Upserts the given composite products into state.\n */\n upsertProducts(state: T, ...products: DaffCompositeProduct[]): T {\n return this._adapter.upsertMany(\n this.mapOptionsEntities(products),\n state,\n );\n };\n\n /**\n * Apply the specified option for the given composite product item.\n */\n applyOption(state: T, productId: DaffCompositeProduct['id'], itemId: DaffCompositeProductItem['id'], optionId: DaffCompositeProductItemOption['id'], qty?: number) {\n return this._adapter.upsertOne(\n {\n id: productId,\n items: {\n ...state.entities[productId].items,\n [itemId]: {\n value: optionId,\n qty: qty ?? 1,\n },\n },\n },\n state,\n );\n }\n\n /**\n * @docs-private\n */\n private mapOptionsEntities(products: DaffCompositeProduct[]): DaffCompositeProductEntity[] {\n return products.filter(product => product.type === DaffProductTypeEnum.Composite)\n .map(product => this.buildCompositeProductAppliedOptionsEntity(product));\n }\n\n /**\n * @docs-private\n */\n private buildCompositeProductAppliedOptionsEntity(product: DaffCompositeProduct): DaffCompositeProductEntity {\n return {\n id: product.id,\n items: product.items.reduce((acc, item) => ({\n ...acc,\n [item.id]: this.getDefaultOption(item),\n }), {}),\n };\n }\n\n /**\n * Sets the default item option to the specified default option if it is in stock.\n * Does not set a default option if a default is not specified.\n * Does not set a default option but does set a default qty if the default is out of stock.\n *\n * @param item a DaffCompositeProductItem\n * @docs-private\n */\n private getDefaultOption(item: DaffCompositeProductItem): DaffCompositeConfigurationItem {\n const defaultOptionIndex = item.options.findIndex(option => option.is_default);\n\n if(defaultOptionIndex > -1) {\n return {\n value: item.options[defaultOptionIndex].in_stock ? item.options[defaultOptionIndex].id : null,\n qty: item.options[defaultOptionIndex].quantity,\n };\n } else {\n return { value: null, qty: null };\n }\n }\n}\n\n/**\n * Gets the composite product entity adapter singleton.\n */\nexport const daffCompositeProductAppliedOptionsEntitiesAdapter: () => DaffCompositeProductAppliedOptionsEntitiesAdapter = defaultMemoize(() => new DaffCompositeProductAppliedOptionsEntitiesAdapter()).memoized;\n","export const DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY = 'daffCompositeProduct';\n","import {\n createFeatureSelector,\n MemoizedSelector,\n} from '@ngrx/store';\n\nimport { DaffCompositeProductReducersState } from '../reducers/composite-product-reducers-state.interface';\nimport { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY } from '../reducers/composite-product-store-feature-key';\n\n/**\n * An interface for the composite product feature state.\n */\nexport interface DaffCompositeProductFeatureMemoizedSelector {\n selectCompositeProductState: MemoizedSelector<Record<string, any>, DaffCompositeProductReducersState>;\n}\n\n/**\n * A function that returns a selector for the composite product feature state.\n */\nexport const getDaffCompositeProductFeatureSelector = (() => {\n let cache;\n return (): DaffCompositeProductFeatureMemoizedSelector => cache = cache\n ? cache\n : { selectCompositeProductState: createFeatureSelector<DaffCompositeProductReducersState>(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY) };\n})();\n","import {\n EntityState,\n Dictionary,\n} from '@ngrx/entity';\nimport {\n createSelector,\n MemoizedSelector,\n defaultMemoize,\n} from '@ngrx/store';\n\nimport {\n DaffProduct,\n DaffProductTypeEnum,\n} from '@daffodil/product';\nimport { getDaffProductEntitiesSelectors } from '@daffodil/product/state';\nimport {\n DaffCompositeProductItemOption,\n DaffCompositeProductItem,\n DaffCompositeProduct,\n} from '@daffodil/product-composite';\n\nimport { daffCompositeProductAppliedOptionsEntitiesAdapter } from '../../reducers/composite-product-entities/composite-product-entities-reducer-adapter';\nimport { DaffCompositeProductEntity } from '../../reducers/composite-product-entities/composite-product-entity';\nimport {\n DaffCompositeProductReducersState,\n DaffCompositeProductStateRootSlice,\n} from '../../reducers/composite-product-reducers-state.interface';\nimport { getDaffCompositeProductFeatureSelector } from '../feature.selector';\n\n/**\n * An interface for selectors related to the composite product applied options.\n */\nexport interface DaffCompositeProductEntitiesMemoizedSelectors<T extends DaffProduct = DaffProduct> {\n /**\n * The ngrx entities state for composite product applied options.\n */\n selectCompositeProductAppliedOptionsEntitiesState: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, EntityState<DaffCompositeProductEntity>>;\n /**\n * A selector for all composite product ids in state.\n */\n selectCompositeProductIds: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, EntityState<DaffCompositeProductEntity>['ids']>;\n /**\n * The ngrx entities for the composite product appllied options.\n */\n selectCompositeProductAppliedOptionsEntities: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, EntityState<DaffCompositeProductEntity>['entities']>;\n /**\n * The total number of composite products in state.\n */\n selectCompositeProductTotal: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, number>;\n /**\n * Selects the applied options for a composite product.\n *\n * @param id the id of the composite product.\n */\n selectCompositeProductAppliedOptions: (id: T['id']) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, Dictionary<DaffCompositeProductItemOption>>;\n /**\n * Selects whether the particular item of a composite product is required in order for the product to be valid, i.e. addable to the cart.\n *\n * @param id the id of the composite product.\n * @param item_id the id of the composite product item.\n */\n selectIsCompositeProductItemRequired: (id: T['id'], item_id: DaffCompositeProductItem['id']) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, boolean>;\n}\n\nconst createCompositeProductAppliedOptionsEntitiesSelectors = <T extends DaffProduct>(): DaffCompositeProductEntitiesMemoizedSelectors<T> => {\n const {\n selectCompositeProductState,\n } = getDaffCompositeProductFeatureSelector();\n const {\n selectProduct,\n } = getDaffProductEntitiesSelectors<T>();\n const adapterSelectors = daffCompositeProductAppliedOptionsEntitiesAdapter().getSelectors();\n\n const selectCompositeProductAppliedOptionsEntitiesState = createSelector(\n selectCompositeProductState,\n (state: DaffCompositeProductReducersState) => state.compositeProductOptions,\n );\n\n const selectCompositeProductIds = createSelector(\n selectCompositeProductAppliedOptionsEntitiesState,\n adapterSelectors.selectIds,\n );\n\n const selectCompositeProductAppliedOptionsEntities = createSelector(\n selectCompositeProductAppliedOptionsEntitiesState,\n adapterSelectors.selectEntities,\n );\n\n const selectCompositeProductTotal = createSelector(\n selectCompositeProductAppliedOptionsEntitiesState,\n adapterSelectors.selectTotal,\n );\n\n const selectCompositeProductAppliedOptions = defaultMemoize((id: T['id']) => createSelector(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntitiesState,\n (product: T, appliedOptions) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n return (<DaffCompositeProduct><any>product).items.reduce((acc, item) => ({\n ...acc,\n [item.id]: appliedOptions.entities[product.id].items[item.id].value ? {\n ...item.options.find(option => option.id === appliedOptions.entities[product.id].items[item.id].value),\n quantity: appliedOptions.entities[product.id].items[item.id].qty,\n } : null,\n }), {});\n },\n )).memoized;\n\n const selectIsCompositeProductItemRequired = defaultMemoize((id: T['id'], item_id: DaffCompositeProductItem['id']) => createSelector(\n selectProduct(id),\n (product: T) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n const productItem = (<DaffCompositeProduct><any>product).items.find(item => item.id === item_id);\n\n return productItem ? productItem.required : null;\n },\n )).memoized;\n\n\n return {\n selectCompositeProductAppliedOptionsEntitiesState,\n selectCompositeProductIds,\n selectCompositeProductAppliedOptionsEntities,\n selectCompositeProductTotal,\n selectCompositeProductAppliedOptions,\n selectIsCompositeProductItemRequired,\n };\n};\n\n/**\n * A function that returns all selectors related to composite product applied option entities.\n * Returns {@link DaffCompositeProductEntitiesMemoizedSelectors}.\n */\nexport const getDaffCompositeProductEntitiesSelectors = (() => {\n let cache;\n return <T extends DaffProduct>(): DaffCompositeProductEntitiesMemoizedSelectors<T> => cache = cache\n ? cache\n : createCompositeProductAppliedOptionsEntitiesSelectors<T>();\n})();\n","import {\n Dictionary,\n EntityState,\n} from '@ngrx/entity';\nimport {\n createSelector,\n MemoizedSelector,\n defaultMemoize,\n} from '@ngrx/store';\n\nimport {\n daffAdd,\n daffDivide,\n daffMultiply,\n daffSubtract,\n} from '@daffodil/core';\nimport {\n DaffProduct,\n DaffProductTypeEnum,\n DaffProductPrices,\n DaffPriceRange,\n} from '@daffodil/product';\nimport { getDaffProductEntitiesSelectors } from '@daffodil/product/state';\nimport {\n DaffCompositeProduct,\n DaffCompositeConfigurationItem,\n DaffCompositeProductItem,\n DaffCompositeProductItemOption,\n} from '@daffodil/product-composite';\n\nimport { DaffCompositeProductStateRootSlice } from '../../reducers/composite-product-reducers-state.interface';\nimport { DaffCompositeProductEntity } from '../../reducers/public_api';\nimport { getDaffCompositeProductEntitiesSelectors } from '../composite-product-entities/composite-product-entities.selectors';\n\n/**\n * An interface describing selectors unique to the composite product, such as pricing and discounts.\n */\nexport interface DaffCompositeProductMemoizedSelectors<T extends DaffProduct = DaffProduct> {\n /**\n * Get a DaffPriceRange for a composite product based on the configuration provided excluding unselected, optional item prices.\n */\n selectCompositeProductRequiredItemPricesForConfiguration: ( id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem> ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, DaffPriceRange>;\n /**\n * Get the broadest possible DaffPriceRange for a composite product based on the configuration provided including optional item prices.\n */\n selectCompositeProductOptionalItemPricesForConfiguration: ( id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem> ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, DaffPriceRange>;\n /**\n * Get the DaffPriceRange for a composite product based on the current configuration of selected item options in redux state and\n * excluding unselected, optional item prices.\n */\n selectCompositeProductPricesAsCurrentlyConfigured: ( id: DaffCompositeProduct['id'] ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, DaffPriceRange>;\n /**\n * Get the discount amount for a composite product. This value will be undefined if all required options are not chosen.\n */\n selectCompositeProductDiscountAmount: ( id: DaffCompositeProduct['id'] ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, number>;\n /**\n * Get the discount percent for a composite product. This value will be undefined if all required options are not chosen.\n * Note: this percent is computed client-side and should be treated as an estimate rather than an exact value.\n */\n selectCompositeProductDiscountPercent: ( id: DaffCompositeProduct['id'] ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, number>;\n}\n\nconst createCompositeProductSelectors = <T extends DaffProduct>(): DaffCompositeProductMemoizedSelectors<T> => {\n\n const {\n selectProduct,\n } = getDaffProductEntitiesSelectors<T>();\n\n const {\n selectCompositeProductAppliedOptionsEntities,\n } = getDaffCompositeProductEntitiesSelectors();\n\n const selectCompositeProductRequiredItemPricesForConfiguration = defaultMemoize((id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>) => createSelector(\n selectProduct(id),\n (product: T) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n const appliedOptions = configuration ? getAppliedOptionsForConfiguration(<DaffCompositeProduct><any>product, configuration) : {};\n return {\n minPrice: getMinPricesForConfiguration(<DaffCompositeProduct><any>product, appliedOptions),\n maxPrice: getMaxPricesForConfiguration(<DaffCompositeProduct><any>product, appliedOptions),\n };\n },\n )).memoized;\n\n const selectCompositeProductOptionalItemPricesForConfiguration = defaultMemoize((id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>) => createSelector(\n selectProduct(id),\n (product: T) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n const appliedOptions = configuration ? getAppliedOptionsForConfiguration(<DaffCompositeProduct><any>product, configuration) : {};\n return {\n minPrice: getMinPricesForConfiguration(<DaffCompositeProduct><any>product, appliedOptions),\n maxPrice: getMaxPricesForConfigurationIncludingOptionalItems(<DaffCompositeProduct><any>product, appliedOptions),\n };\n },\n )).memoized;\n\n const selectCompositeProductPricesAsCurrentlyConfigured = defaultMemoize((id: T['id']) => createSelector<DaffCompositeProductStateRootSlice<T>, [T, EntityState<DaffCompositeProductEntity>['entities']], DaffPriceRange>(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntities,\n (product: T, appliedOptionsEntities) =>\n selectCompositeProductRequiredItemPricesForConfiguration(id, appliedOptionsEntities[id]?.items || null).projector(product),\n )).memoized;\n\n const selectCompositeProductDiscountAmount = defaultMemoize((id: DaffCompositeProduct['id']) => createSelector<DaffCompositeProductStateRootSlice<T>, [T, EntityState<DaffCompositeProductEntity>['entities']], number>(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntities,\n (product: T, appliedOptionsEntities) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n const appliedConfigurationItem = appliedOptionsEntities[product.id].items;\n if((<DaffCompositeProduct><any>product).items.filter(item => item.required && appliedConfigurationItem[item.id].value === null).length > 0) {\n return undefined;\n }\n const appliedOptions = getAppliedOptionsForConfiguration((<DaffCompositeProduct><any>product), appliedConfigurationItem);\n\n return (<DaffCompositeProduct><any>product).items.reduce((acc, item) =>\n appliedOptions[item.id]?.discount?.amount ? daffAdd(acc, daffMultiply(appliedOptions[item.id].discount.amount, appliedOptions[item.id].quantity)) : acc,\n product.discount.amount);\n },\n )).memoized;\n\n const selectCompositeProductDiscountPercent = defaultMemoize((id: DaffCompositeProduct['id']) => createSelector<DaffCompositeProductStateRootSlice<T>, [T, EntityState<DaffCompositeProductEntity>['entities']], number>(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntities,\n (product: T, appliedOptionsEntities) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n const appliedOptions = appliedOptionsEntities[product.id].items;\n if((<DaffCompositeProduct><any>product).items.filter(item => item.required && appliedOptions[item.id].value === null).length > 0) {\n return undefined;\n }\n\n const prices = getMinPricesForConfiguration(\n (<DaffCompositeProduct><any>product),\n getAppliedOptionsForConfiguration((<DaffCompositeProduct><any>product), appliedOptions),\n );\n\n return daffMultiply(\n daffDivide(\n daffSubtract(prices.originalPrice, prices.discountedPrice),\n prices.originalPrice,\n ),\n 100,\n );\n },\n )).memoized;\n\n return {\n selectCompositeProductRequiredItemPricesForConfiguration,\n selectCompositeProductOptionalItemPricesForConfiguration,\n selectCompositeProductPricesAsCurrentlyConfigured,\n selectCompositeProductDiscountAmount,\n selectCompositeProductDiscountPercent,\n };\n};\n\n/**\n * A function that returns all selectors related to the composite product feature.\n *\n * Returns {@link DaffCompositeProductMemoizedSelectors}.\n */\nexport const getDaffCompositeProductPriceSelectors = (() => {\n let cache;\n return <T extends DaffProduct = DaffProduct>(): DaffCompositeProductMemoizedSelectors<T> => cache = cache\n ? cache\n : createCompositeProductSelectors<T>();\n})();\n\n/**\n * The minimum price of an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMinimumRequiredCompositeItemPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.min(...item.options.map(option => option.price)), qty) : 0;\n}\n\n/**\n * The maximum price for an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMaximumRequiredCompositeItemPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.max(...item.options.map(option => option.price)), qty) : 0;\n}\n\n/**\n * The minimum discounted price of an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMinimumRequiredCompositeItemDiscountedPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.min(...item.options.map(getDiscountedPrice)), qty) : 0;\n}\n/**\n * The maximum discounted price of an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMaximumRequiredCompositeItemDiscountedPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.max(...item.options.map(getDiscountedPrice)), qty) : 0;\n}\n\n/**\n * Gets the minimum prices of a composite product for the configuration provided excluding unselected, optional item prices.\n *\n * @param product a DaffCompositeProduct\n * @param appliedOptions a Dictionary<DaffCompositeProductItemOption> that determines the current configuration of the composite product.\n */\nfunction getMinPricesForConfiguration(product: DaffCompositeProduct, appliedOptions: Dictionary<DaffCompositeProductItemOption>): DaffProductPrices {\n return {\n discountedPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(getDiscountedPrice(appliedOptions[item.id]), appliedOptions[item.id].quantity) :\n getMinimumRequiredCompositeItemDiscountedPrice(item, getOptionQty(appliedOptions[item.id])),\n ), getDiscountedPrice(product)),\n discount: { amount: null, percent: null },\n originalPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(appliedOptions[item.id].price, appliedOptions[item.id].quantity) :\n getMinimumRequiredCompositeItemPrice(item, getOptionQty(appliedOptions[item.id])),\n ), product.price),\n };\n}\n\n/**\n * Gets the maximum prices of a composite product for the configuration provided excluding unselected, optional item prices.\n *\n * @param product a DaffCompositeProduct\n * @param appliedOptions a Dictionary<DaffCompositeProductItemOption> that determines the current configuration of the composite product.\n */\nfunction getMaxPricesForConfiguration(product: DaffCompositeProduct, appliedOptions: Dictionary<DaffCompositeProductItemOption>): DaffProductPrices {\n return {\n discountedPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(getDiscountedPrice(appliedOptions[item.id]), appliedOptions[item.id].quantity) :\n getMaximumRequiredCompositeItemDiscountedPrice(item, getOptionQty(appliedOptions[item.id])),\n ), getDiscountedPrice(product)),\n discount: { amount: null, percent: null },\n originalPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(appliedOptions[item.id].price, appliedOptions[item.id].quantity) :\n getMaximumRequiredCompositeItemPrice(item, getOptionQty(appliedOptions[item.id])),\n ), product.price),\n };\n}\n\nfunction getDiscountedPrice(product: DaffProduct): number {\n return product.discount ? daffSubtract(product.price, product.discount.amount) : product.price;\n}\n\n/**\n * Gets the maximum prices of a composite product including optional item prices.\n *\n * @param product a DaffCompositeProduct\n */\nfunction getMaxPricesForConfigurationIncludingOptionalItems(product: DaffCompositeProduct, appliedOptions: Dictionary<DaffCompositeProductItemOption>): DaffProductPrices {\n return {\n discountedPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(getDiscountedPrice(appliedOptions[item.id]), appliedOptions[item.id].quantity) :\n appliedOptionHasQty(appliedOptions[item.id]) ?\n daffMultiply(Math.max(...item.options.map(getDiscountedPrice)), appliedOptions[item.id].quantity) :\n Math.max(...item.options.map(getDiscountedPrice)),\n ), getDiscountedPrice(product)),\n discount: { amount: null, percent: null },\n originalPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(appliedOptions[item.id].price, appliedOptions[item.id].quantity) :\n appliedOptionHasQty(appliedOptions[item.id]) ?\n daffMultiply(Math.max(...item.options.map(option => option.price)), appliedOptions[item.id].quantity) :\n Math.max(...item.options.map(option => option.price)),\n ), product.price),\n };\n}\n\n/**\n * Takes a product and a set of option configurations and convert it into a dictionary of the full option objects.\n *\n * @param product a DaffCompositeProduct\n * @param configuration a Dictionary<DaffCompositeConfigurationItem> used to build the appliedOptions object.\n */\nfunction getAppliedOptionsForConfiguration(product: DaffCompositeProduct, configuration: Dictionary<DaffCompositeConfigurationItem>): Dictionary<DaffCompositeProductItemOption> {\n return product.items.reduce((acc, item) => ({\n ...acc,\n [item.id]: configuration[item.id] ? {\n ...item.options.find(option => option.id === configuration[item.id].value),\n quantity: (configuration[item.id].qty === null || configuration[item.id].qty === undefined) ? 1 : configuration[item.id].qty,\n } : null,\n }), {});\n}\n\nfunction appliedOptionHasId(appliedOption: DaffCompositeProductItemOption): boolean {\n return !!appliedOption?.id;\n}\n\nfunction getOptionQty(appliedOption: DaffCompositeProductItemOption): number {\n return appliedOptionHasQty(appliedOption) ? appliedOption.quantity : 1;\n}\n\nfunction appliedOptionHasQty(appliedOption: DaffCompositeProductItemOption): boolean {\n return appliedOption?.quantity !== null && appliedOption?.quantity !== undefined;\n}\n","import { DaffProduct } from '@daffodil/product';\n\nimport {\n DaffCompositeProductMemoizedSelectors,\n getDaffCompositeProductPriceSelectors,\n} from './composite-product/composite-product.selectors';\nimport {\n DaffCompositeProductEntitiesMemoizedSelectors,\n getDaffCompositeProductEntitiesSelectors,\n} from './composite-product-entities/composite-product-entities.selectors';\n\n/**\n * An interface for all selectors in the composite product feature area.\n */\nexport interface DaffCompositeProductAllSelectors<T extends DaffProduct = DaffProduct> extends\n DaffCompositeProductEntitiesMemoizedSelectors<T>,\n DaffCompositeProductMemoizedSelectors<T> { }\n\n/**\n * A function that returns all selectors in the composite product feature area.\n * Returns {@link DaffCompositeProductAllSelectors}.\n */\nexport const getDaffCompositeProductSelectors = <T extends DaffProduct>(): DaffCompositeProductAllSelectors<T> => ({\n ...getDaffCompositeProductEntitiesSelectors<T>(),\n ...getDaffCompositeProductPriceSelectors<T>(),\n});\n","import { Injectable } from '@angular/core';\nimport { Dictionary } from '@ngrx/entity';\nimport {\n Store,\n select,\n Action,\n} from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\nimport {\n DaffProduct,\n DaffPriceRange,\n productPriceRangeHasDiscount,\n productPriceRangeHasPriceRange,\n} from '@daffodil/product';\nimport {\n DaffCompositeConfigurationItem,\n DaffCompositeProductItemOption,\n DaffCompositeProductItem,\n} from '@daffodil/product-composite';\n\nimport { DaffCompositeProductFacadeInterface } from './composite-product-facade.interface';\nimport { DaffCompositeProductStateRootSlice } from '../../reducers/composite-product-reducers-state.interface';\nimport { getDaffCompositeProductSelectors } from '../../selectors/public_api';\n\n/**\n * A facade for interacting with the composite product state.\n * Exposes many parts of the state for easy access and allows dispatching of actions.\n *\n * @inheritdoc\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DaffCompositeProductFacade<T extends DaffProduct = DaffProduct> implements DaffCompositeProductFacadeInterface {\n\n constructor(private store: Store<DaffCompositeProductStateRootSlice<T>>) {}\n\n compositeProductSelectors = getDaffCompositeProductSelectors<T>();\n\n hasDiscount = productPriceRangeHasDiscount;\n\n hasPriceRange = productPriceRangeHasPriceRange;\n\n getRequiredItemPricesForConfiguration(id: T['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>): Observable<DaffPriceRange> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductRequiredItemPricesForConfiguration(id, configuration)));\n }\n\n getOptionalItemPricesForConfiguration(id: T['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>): Observable<DaffPriceRange> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductOptionalItemPricesForConfiguration(id, configuration)));\n }\n\n getPricesAsCurrentlyConfigured(id: T['id']): Observable<DaffPriceRange> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductPricesAsCurrentlyConfigured(id)));\n }\n\n getAppliedOptions(id: T['id']): Observable<Dictionary<DaffCompositeProductItemOption>> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductAppliedOptions(id)));\n }\n\n getDiscountAmount(id: T['id']): Observable<number> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductDiscountAmount(id)));\n }\n\n getDiscountPercent(id: T['id']): Observable<number> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductDiscountPercent(id)));\n }\n\n isItemRequired(id: T['id'], item_id: DaffCompositeProductItem['id']) {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectIsCompositeProductItemRequired(id, item_id)));\n }\n\n dispatch(action: Action) {\n\t this.store.dispatch(action);\n }\n}\n","import { EntityState } from '@ngrx/entity';\n\nimport { DaffProduct } from '@daffodil/product';\nimport {\n DaffProductPageActions,\n DaffProductPageActionTypes,\n DaffProductGridActionTypes,\n DaffProductGridActions,\n DaffBestSellersActions,\n DaffProductActions,\n DaffBestSellersActionTypes,\n DaffProductActionTypes,\n} from '@daffodil/product/state';\nimport { DaffCompositeProduct } from '@daffodil/product-composite';\n\nimport { daffCompositeProductAppliedOptionsEntitiesAdapter } from './composite-product-entities-reducer-adapter';\nimport { DaffCompositeProductEntity } from './composite-product-entity';\nimport {\n DaffCompositeProductActions,\n DaffCompositeProductActionTypes,\n} from '../../actions/public_api';\n\n/**\n * Reducer function that catches actions and changes/overwrites composite product entities state.\n *\n * @param state current State of the redux store\n * @param action ProductGrid, BestSellers, Product, or Composite Product actions\n * @returns Product entities state\n */\nexport function daffCompositeProductEntitiesReducer<T extends DaffProduct, V extends DaffCompositeProduct>(\n state = daffCompositeProductAppliedOptionsEntitiesAdapter().getInitialState(),\n action: DaffProductGridActions<T> | DaffBestSellersActions<T> | DaffProductActions<T> | DaffProductPageActions<T> | DaffCompositeProductActions<V>): EntityState<DaffCompositeProductEntity> {\n const adapter = daffCompositeProductAppliedOptionsEntitiesAdapter();\n switch (action.type) {\n case DaffProductGridActionTypes.ProductGridLoadSuccessAction:\n case DaffBestSellersActionTypes.BestSellersLoadSuccessAction:\n return adapter.upsertProducts(state, ...(<V[]><unknown>action.payload));\n\n case DaffProductActionTypes.ProductLoadSuccessAction:\n case DaffProductPageActionTypes.ProductPageLoadSuccessAction:\n return adapter.upsertProducts(state, ...(<V[]><unknown>action.payload.products));\n\n case DaffCompositeProductActionTypes.CompositeProductApplyOptionAction:\n return adapter.applyOption(state, action.id, action.itemId, action.optionId, action.qty);\n\n default:\n return state;\n }\n}\n","import { ActionReducerMap } from '@ngrx/store';\n\nimport { daffCompositeProductEntitiesReducer } from './composite-product-entities/composite-product-entities.reducer';\nimport { DaffCompositeProductReducersState } from './composite-product-reducers-state.interface';\n\n/**\n * Returns state values from all composite product related reducers.\n */\nexport const daffCompositeProductReducers: ActionReducerMap<DaffCompositeProductReducersState> = {\n compositeProductOptions: daffCompositeProductEntitiesReducer,\n};\n","import {\n InjectionToken,\n Provider,\n} from '@angular/core';\nimport { ActionReducer } from '@ngrx/store';\n\nimport { DaffCompositeProductReducersState } from '../composite-product-reducers-state.interface';\n\n/**\n * A token to hold the injectable extra reducers.\n *\n * Prefer using {@link daffProductCompositeProvideExtraReducers}.\n */\nexport const DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS = new InjectionToken<ActionReducer<DaffCompositeProductReducersState>[]>(\n 'DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS',\n { factory: () => []},\n);\n\n/**\n * Provides additional reducers that run after the standard Daffodil cart reducers.\n *\n * ```ts\n * providers: [\n * ...daffProductCompositeProvideExtraReducers(\n * myReducer1,\n * myReducer2\n * )\n * ]\n * ```\n */\nexport function daffProductCompositeProvideExtraReducers(\n ...reducers: ActionReducer<Partial<DaffCompositeProductReducersState>>[]\n): Provider[] {\n return reducers.map(reducer => ({\n provide: DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS,\n useValue: reducer,\n multi: true,\n }));\n}\n","import { DaffProductTypeEnum } from '@daffodil/product';\nimport { DaffProductReducersState } from '@daffodil/product/state';\nimport { DaffCompositeProduct } from '@daffodil/product-composite';\n\n/**\n * Maps a list of products, ensuring that the composite products have a list of items.\n * If the incoming items is empty or nully, the items from state are intentionally used instead.\n */\nexport function daffProductCompositeEnsureItems<T extends DaffCompositeProduct = DaffCompositeProduct>(state: DaffProductReducersState<T>, products: T[]): T[] {\n return products.map((product) =>\n product.type === DaffProductTypeEnum.Composite\n ? {\n ...product,\n items: product.items.length > 0\n ? product.items\n : state.products.entities[product.id]?.items ?? [],\n }\n : product,\n );\n}\n","import { ActionReducer } from '@ngrx/store';\n\nimport { DaffProductTypeEnum } from '@daffodil/product';\nimport {\n DaffProductActionTypes,\n DaffProductActions,\n DaffProductLoadSuccess,\n DaffProductPageActionTypes,\n DaffProductPageActions,\n DaffProductPageLoadSuccess,\n DaffProductReducersState,\n} from '@daffodil/product/state';\nimport { DaffCompositeProduct } from '@daffodil/product-composite';\n\nimport { daffProductCompositeEnsureItems } from '../helpers/public_api';\n\ntype Reducer = ActionReducer<DaffProductReducersState<DaffCompositeProduct>, DaffProductActions<DaffCompositeProduct> | DaffProductPageActions<DaffCompositeProduct>>;\n\nexport function daffProductCompositeEnsureItemsMetaReducer(reducer: Reducer): Reducer {\n return (state, action) => {\n switch (action.type) {\n case DaffProductPageActionTypes.ProductPageLoadSuccessAction:\n return reducer(state, new DaffProductPageLoadSuccess({\n ...action.payload,\n products: daffProductCompositeEnsureItems(state, action.payload.products),\n }));\n\n case DaffProductActionTypes.ProductLoadSuccessAction:\n return reducer(state, new DaffProductLoadSuccess({\n ...action.payload,\n products: daffProductCompositeEnsureItems(state, action.payload.products),\n }));\n\n default:\n return reducer(state, action);\n }\n };\n}\n","import {\n inject,\n InjectionToken,\n} from '@angular/core';\nimport {\n ActionReducer,\n combineReducers,\n} from '@ngrx/store';\n\nimport { daffComposeReducers } from '@daffodil/core/state';\n\nimport { DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS } from './extra.token';\nimport { daffCompositeProductReducers } from '../composite-product-reducers';\nimport { DaffCompositeProductReducersState } from '../composite-product-reducers-state.interface';\n\n/**\n * An internal token to hold the Daffodil composite product reducers.\n * Includes the extra and standard reducers.\n *\n * @docs-private\n */\nexport const DAFF_PRODUCT_COMPOSITE_REDUCERS = new InjectionToken<ActionReducer<DaffCompositeProductReducersState>>(\n 'DAFF_PRODUCT_COMPOSITE_REDUCERS',\n {\n factory: () => daffComposeReducers([\n combineReducers(daffCompositeProductReducers),\n ...inject(DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS),\n ]),\n },\n);\n","import { NgModule } from '@angular/core';\nimport { StoreModule } from '@ngrx/store';\n\nimport { daffProductProvideMetaReducers } from '@daffodil/product/state';\n\nimport { daffProductCompositeEnsureItemsMetaReducer } from './reducers/ensure-items.meta-reducer';\nimport { DAFF_PRODUCT_COMPOSITE_REDUCERS } from './reducers/injection-tokens/reducers.token';\nimport { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY } from './reducers/public_api';\n\n/**\n * A module that provides the default reducers and effects for composite product redux state.\n */\n@NgModule({\n imports: [\n StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DAFF_PRODUCT_COMPOSITE_REDUCERS),\n ],\n providers: [\n ...daffProductProvideMetaReducers(daffProductCompositeEnsureItemsMetaReducer),\n ],\n})\nexport class DaffCompositeProductStateModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAQA;;AAEG;IACS,gCAEX;AAFD,CAAA,UAAY,+BAA+B,EAAA;AACzC,IAAA,+BAAA,CAAA,mCAAA,CAAA,GAAA,2DAA+F,CAAA;AACjG,CAAC,EAFW,+BAA+B,KAA/B,+BAA+B,GAE1C,EAAA,CAAA,CAAA,CAAA;AAED;;;;;;AAMG;MACU,+BAA+B,CAAA;AAG1C,IAAA,WAAA,CAAmB,EAAW,EAAS,MAAsC,EAAS,QAA8C,EAAS,GAAY,EAAA;QAAtI,IAAE,CAAA,EAAA,GAAF,EAAE,CAAS;QAAS,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgC;QAAS,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAsC;QAAS,IAAG,CAAA,GAAA,GAAH,GAAG,CAAS;AAFhJ,QAAA,IAAA,CAAA,IAAI,GAAG,+BAA+B,CAAC,iCAAiC,CAAC;KAE2E;AAC9J;;ACVD;;AAEG;MACU,iDAAiD,CAAA;AAA9D,IAAA,WAAA,GAAA;AACE;;AAEG;QACK,IAAQ,CAAA,QAAA,GAAG,mBAAmB,EAA8B,CAAC;KAsFtE;AApFC;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;KACxC;AAED;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;AAED;;AAEG;AACH,IAAA,cAAc,CAAC,KAAQ,EAAE,GAAG,QAAgC,EAAA;AAC1D,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAC7B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EACjC,KAAK,CACN,CAAC;KACH;;AAED;;AAEG;IACH,WAAW,CAAC,KAAQ,EAAE,SAAqC,EAAE,MAAsC,EAAE,QAA8C,EAAE,GAAY,EAAA;AAC/J,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC5B;AACE,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,KAAK,EAAE;AACL,gBAAA,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK;gBAClC,CAAC,MAAM,GAAG;AACR,oBAAA,KAAK,EAAE,QAAQ;oBACf,GAAG,EAAE,GAAG,IAAI,CAAC;AACd,iBAAA;AACF,aAAA;SACF,EACD,KAAK,CACN,CAAC;KACH;AAED;;AAEG;AACK,IAAA,kBAAkB,CAAC,QAAgC,EAAA;AACzD,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,CAAC;AAC9E,aAAA,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,yCAAyC,CAAC,OAAO,CAAC,CAAC,CAAC;KAC5E;AAED;;AAEG;AACK,IAAA,yCAAyC,CAAC,OAA6B,EAAA;QAC7E,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;AACd,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM;AAC1C,gBAAA,GAAG,GAAG;gBACN,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;aACvC,CAAC,EAAE,EAAE,CAAC;SACR,CAAC;KACH;AAED;;;;;;;AAOG;AACK,IAAA,gBAAgB,CAAC,IAA8B,EAAA;AACrD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;AAE/E,QAAA,IAAG,kBAAkB,GAAG,CAAC,CAAC,EAAE;YAC1B,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,IAAI;gBAC7F,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ;aAC/C,CAAC;AACH,SAAA;AAAM,aAAA;YACL,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACnC,SAAA;KACF;AACF,CAAA;AAED;;AAEG;AACI,MAAM,iDAAiD,GAA4D,cAAc,CAAC,MAAM,IAAI,iDAAiD,EAAE,CAAC,CAAC;;AClHjM,MAAM,wCAAwC,GAAG;;ACexD;;AAEG;AACU,MAAA,sCAAsC,GAAG,CAAC,MAAK;AAC1D,IAAA,IAAI,KAAK,CAAC;AACV,IAAA,OAAO,MAAmD,KAAK,GAAG,KAAK;AACrE,UAAE,KAAK;UACL,EAAE,2BAA2B,EAAE,qBAAqB,CAAoC,wCAAwC,CAAC,EAAE,CAAC;AAC1I,CAAC;;ACyCD,MAAM,qDAAqD,GAAG,MAA8E;AAC1I,IAAA,MAAM,EACJ,2BAA2B,GAC5B,GAAG,sCAAsC,EAAE,CAAC;AAC7C,IAAA,MAAM,EACJ,aAAa,GACd,GAAG,+BAA+B,EAAK,CAAC;AACzC,IAAA,MAAM,gBAAgB,GAAG,iDAAiD,EAAE,CAAC,YAAY,EAAE,CAAC;AAE5F,IAAA,MAAM,iDAAiD,GAAG,cAAc,CACtE,2BAA2B,EAC3B,CAAC,KAAwC,KAAK,KAAK,CAAC,uBAAuB,CAC5E,CAAC;IAEF,MAAM,yBAAyB,GAAG,cAAc,CAC9C,iDAAiD,EACjD,gBAAgB,CAAC,SAAS,CAC3B,CAAC;IAEF,MAAM,4CAA4C,GAAG,cAAc,CACjE,iDAAiD,EACjD,gBAAgB,CAAC,cAAc,CAChC,CAAC;IAEF,MAAM,2BAA2B,GAAG,cAAc,CAChD,iDAAiD,EACjD,gBAAgB,CAAC,WAAW,CAC7B,CAAC;IAEF,MAAM,oCAAoC,GAAG,cAAc,CAAC,CAAC,EAAW,KAAK,cAAc,CACzF,aAAa,CAAC,EAAE,CAAC,EACjB,iDAAiD,EACjD,CAAC,OAAU,EAAE,cAAc,KAAI;AAC7B,QAAA,IAAG,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,OAAmC,OAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM;AACvE,YAAA,GAAG,GAAG;YACN,CAAC,IAAI,CAAC,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG;AACpE,gBAAA,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AACtG,gBAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG;aACjE,GAAG,IAAI;SACT,CAAC,EAAE,EAAE,CAAC,CAAC;AACV,KAAC,CACF,CAAC,CAAC,QAAQ,CAAC;IAEZ,MAAM,oCAAoC,GAAG,cAAc,CAAC,CAAC,EAAW,EAAE,OAAuC,KAAK,cAAc,CAClI,aAAa,CAAC,EAAE,CAAC,EACjB,CAAC,OAAU,KAAI;AACb,QAAA,IAAG,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,MAAM,WAAW,GAA+B,OAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QAEjG,OAAO,WAAW,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;AACnD,KAAC,CACF,CAAC,CAAC,QAAQ,CAAC;IAGZ,OAAO;QACL,iDAAiD;QACjD,yBAAyB;QACzB,4CAA4C;QAC5C,2BAA2B;QAC3B,oCAAoC;QACpC,oCAAoC;KACrC,CAAC;AACJ,CAAC,CAAC;AAEF;;;AAGG;AACU,MAAA,wCAAwC,GAAG,CAAC,MAAK;AAC5D,IAAA,IAAI,KAAK,CAAC;AACV,IAAA,OAAO,MAA+E,KAAK,GAAG,KAAK;AACjG,UAAE,KAAK;UACL,qDAAqD,EAAK,CAAC;AACjE,CAAC;;AClFD,MAAM,+BAA+B,GAAG,MAAsE;AAE5G,IAAA,MAAM,EACJ,aAAa,GACd,GAAG,+BAA+B,EAAK,CAAC;AAEzC,IAAA,MAAM,EACJ,4CAA4C,GAC7C,GAAG,wCAAwC,EAAE,CAAC;IAE/C,MAAM,wDAAwD,GAAG,cAAc,CAAC,CAAC,EAA8B,EAAE,aAA0D,KAAK,cAAc,CAC5L,aAAa,CAAC,EAAE,CAAC,EACjB,CAAC,OAAU,KAAI;AACb,QAAA,IAAG,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,MAAM,cAAc,GAAG,aAAa,GAAG,iCAAiC,CAA4B,OAAO,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC;QACjI,OAAO;AACL,YAAA,QAAQ,EAAE,4BAA4B,CAA4B,OAAO,EAAE,cAAc,CAAC;AAC1F,YAAA,QAAQ,EAAE,4BAA4B,CAA4B,OAAO,EAAE,cAAc,CAAC;SAC3F,CAAC;AACJ,KAAC,CACF,CAAC,CAAC,QAAQ,CAAC;IAEZ,MAAM,wDAAwD,GAAG,cAAc,CAAC,CAAC,EAA8B,EAAE,aAA0D,KAAK,cAAc,CAC5L,aAAa,CAAC,EAAE,CAAC,EACjB,CAAC,OAAU,KAAI;AACb,QAAA,IAAG,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,MAAM,cAAc,GAAG,aAAa,GAAG,iCAAiC,CAA4B,OAAO,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC;QACjI,OAAO;AACL,YAAA,QAAQ,EAAE,4BAA4B,CAA4B,OAAO,EAAE,cAAc,CAAC;AAC1F,YAAA,QAAQ,EAAE,kDAAkD,CAA4B,OAAO,EAAE,cAAc,CAAC;SACjH,CAAC;AACJ,KAAC,CACF,CAAC,CAAC,QAAQ,CAAC;IAEZ,MAAM,iDAAiD,GAAG,cAAc,CAAC,CAAC,EAAW,KAAK,cAAc,CACtG,aAAa,CAAC,EAAE,CAAC,EACjB,4CAA4C,EAC5C,CAAC,OAAU,EAAE,sBAAsB,KACjC,wDAAwD,CAAC,EAAE,EAAE,sBAAsB,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAC7H,CAAC,CAAC,QAAQ,CAAC;IAEZ,MAAM,oCAAoC,GAAG,cAAc,CAAC,CAAC,EAA8B,KAAK,cAAc,CAC5G,aAAa,CAAC,EAAE,CAAC,EACjB,4CAA4C,EAC5C,CAAC,OAAU,EAAE,sBAAsB,KAAI;AACrC,QAAA,IAAG,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,MAAM,wBAAwB,GAAG,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AAC1E,QAAA,IAA+B,OAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1I,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,MAAM,cAAc,GAAG,iCAAiC,CAA6B,OAAQ,EAAE,wBAAwB,CAAC,CAAC;AAEzH,QAAA,OAAmC,OAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KACjE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,EACzJ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3B,KAAC,CACF,CAAC,CAAC,QAAQ,CAAC;IAEZ,MAAM,qCAAqC,GAAG,cAAc,CAAC,CAAC,EAA8B,KAAK,cAAc,CAC7G,aAAa,CAAC,EAAE,CAAC,EACjB,4CAA4C,EAC5C,CAAC,OAAU,EAAE,sBAAsB,KAAI;AACrC,QAAA,IAAG,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AAChE,QAAA,IAA+B,OAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAChI,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AAED,QAAA,MAAM,MAAM,GAAG,4BAA4B,CACb,OAAQ,EACpC,iCAAiC,CAA6B,OAAQ,EAAE,cAAc,CAAC,CACxF,CAAC;QAEF,OAAO,YAAY,CACjB,UAAU,CACR,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,EAC1D,MAAM,CAAC,aAAa,CACrB,EACD,GAAG,CACJ,CAAC;AACJ,KAAC,CACF,CAAC,CAAC,QAAQ,CAAC;IAEZ,OAAO;QACL,wDAAwD;QACxD,wDAAwD;QACxD,iDAAiD;QACjD,oCAAoC;QACpC,qCAAqC;KACtC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;AAIG;AACU,MAAA,qCAAqC,GAAG,CAAC,MAAK;AACzD,IAAA,IAAI,KAAK,CAAC;AACV,IAAA,OAAO,MAAqF,KAAK,GAAG,KAAK;AACvG,UAAE,KAAK;UACL,+BAA+B,EAAK,CAAC;AAC3C,CAAC,IAAI;AAEL;;;;AAIG;AACH,SAAS,oCAAoC,CAAC,IAA8B,EAAE,GAAW,EAAA;AACvF,IAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACtG,CAAC;AAED;;;;AAIG;AACH,SAAS,oCAAoC,CAAC,IAA8B,EAAE,GAAW,EAAA;AACvF,IAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACtG,CAAC;AAED;;;;AAIG;AACH,SAAS,8CAA8C,CAAC,IAA8B,EAAE,GAAW,EAAA;AACjG,IAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAClG,CAAC;AACD;;;;AAIG;AACH,SAAS,8CAA8C,CAAC,IAA8B,EAAE,GAAW,EAAA;AACjG,IAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAClG,CAAC;AAED;;;;;AAKG;AACH,SAAS,4BAA4B,CAAC,OAA6B,EAAE,cAA0D,EAAA;IAC7H,OAAO;AACL,QAAA,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAC1D,GAAG,EACH,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAC3F,YAAA,8CAA8C,CAAC,IAAI,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAC9F,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC/B,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AACzC,QAAA,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CACxD,GAAG,EACH,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAC7E,YAAA,oCAAoC,CAAC,IAAI,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CACpF,EAAE,OAAO,CAAC,KAAK,CAAC;KAClB,CAAC;AACJ,CAAC;AAED;;;;;AAKG;AACH,SAAS,4BAA4B,CAAC,OAA6B,EAAE,cAA0D,EAAA;IAC7H,OAAO;AACL,QAAA,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAC1D,GAAG,EACH,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAC3F,YAAA,8CAA8C,CAAC,IAAI,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAC9F,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC/B,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AACzC,QAAA,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CACxD,GAAG,EACH,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAC7E,YAAA,oCAAoC,CAAC,IAAI,EAAE,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CACpF,EAAE,OAAO,CAAC,KAAK,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAoB,EAAA;IAC9C,OAAO,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;AACjG,CAAC;AAED;;;;AAIG;AACH,SAAS,kDAAkD,CAAC,OAA6B,EAAE,cAA0D,EAAA;IACnJ,OAAO;AACL,QAAA,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CAC1D,GAAG,EACH,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;YAC3F,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC1C,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AACjG,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CACtD,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC/B,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AACzC,QAAA,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,CACxD,GAAG,EACH,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;YAC7E,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;gBACrG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,EAAE,OAAO,CAAC,KAAK,CAAC;KAClB,CAAC;AACJ,CAAC;AAED;;;;;AAKG;AACH,SAAS,iCAAiC,CAAC,OAA6B,EAAE,aAAyD,EAAA;AACjI,IAAA,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM;AAC1C,QAAA,GAAG,GAAG;AACN,QAAA,CAAC,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;YAClC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AAC1E,YAAA,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG;SAC7H,GAAG,IAAI;KACT,CAAC,EAAE,EAAE,CAAC,CAAC;AACV,CAAC;AAED,SAAS,kBAAkB,CAAC,aAA6C,EAAA;AACvE,IAAA,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,aAA6C,EAAA;AACjE,IAAA,OAAO,mBAAmB,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,mBAAmB,CAAC,aAA6C,EAAA;IACxE,OAAO,aAAa,EAAE,QAAQ,KAAK,IAAI,IAAI,aAAa,EAAE,QAAQ,KAAK,SAAS,CAAC;AACnF;;AC1SA;;;AAGG;AACU,MAAA,gCAAgC,GAAG,OAAmE;AACjH,IAAA,GAAG,wCAAwC,EAAK;AAChD,IAAA,GAAG,qCAAqC,EAAK;AAC9C,CAAA;;ACAD;;;;;AAKG;MAIU,0BAA0B,CAAA;AAErC,IAAA,WAAA,CAAoB,KAAmD,EAAA;QAAnD,IAAK,CAAA,KAAA,GAAL,KAAK,CAA8C;QAEvE,IAAyB,CAAA,yBAAA,GAAG,gCAAgC,EAAK,CAAC;QAElE,IAAW,CAAA,WAAA,GAAG,4BAA4B,CAAC;QAE3C,IAAa,CAAA,aAAA,GAAG,8BAA8B,CAAC;KAN4B;IAQ3E,qCAAqC,CAAC,EAAW,EAAE,aAA0D,EAAA;QAC5G,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,wDAAwD,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;KAC3I;IAED,qCAAqC,CAAC,EAAW,EAAE,aAA0D,EAAA;QAC5G,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,wDAAwD,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;KAC3I;AAED,IAAA,8BAA8B,CAAC,EAAW,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,iDAAiD,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACrH;AAED,IAAA,iBAAiB,CAAC,EAAW,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACxG;AAED,IAAA,iBAAiB,CAAC,EAAW,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACxG;AAED,IAAA,kBAAkB,CAAC,EAAW,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACzG;IAED,cAAc,CAAC,EAAW,EAAE,OAAuC,EAAA;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,oCAAoC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;KACjH;AAED,IAAA,QAAQ,CAAC,MAAc,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC5B;iIAxCU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,uBAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACXD;;;;;;AAMG;AACG,SAAU,mCAAmC,CACjD,KAAK,GAAG,iDAAiD,EAAE,CAAC,eAAe,EAAE,EAC7E,MAAkJ,EAAA;AAClJ,IAAA,MAAM,OAAO,GAAG,iDAAiD,EAAE,CAAC;IACpE,QAAQ,MAAM,CAAC,IAAI;QACjB,KAAK,0BAA0B,CAAC,4BAA4B,CAAC;QAC7D,KAAK,0BAA0B,CAAC,4BAA4B;YAC1D,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,GAAkB,MAAM,CAAC,OAAQ,CAAC,CAAC;QAE1E,KAAK,sBAAsB,CAAC,wBAAwB,CAAC;QACrD,KAAK,0BAA0B,CAAC,4BAA4B;AAC1D,YAAA,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,GAAkB,MAAM,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;QAEnF,KAAK,+BAA+B,CAAC,iCAAiC;YACpE,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAE3F,QAAA;AACE,YAAA,OAAO,KAAK,CAAC;AAChB,KAAA;AACH;;AC3CA;;AAEG;AACU,MAAA,4BAA4B,GAAwD;AAC/F,IAAA,uBAAuB,EAAE,mCAAmC;;;ACD9D;;;;AAIG;AACU,MAAA,qCAAqC,GAAG,IAAI,cAAc,CACrE,uCAAuC,EACvC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAC,EACpB;AAEF;;;;;;;;;;;AAWG;AACa,SAAA,wCAAwC,CACtD,GAAG,QAAqE,EAAA;IAExE,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,KAAK;AAC9B,QAAA,OAAO,EAAE,qCAAqC;AAC9C,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,KAAK,EAAE,IAAI;AACZ,KAAA,CAAC,CAAC,CAAC;AACN;;AClCA;;;AAGG;AACa,SAAA,+BAA+B,CAAwD,KAAkC,EAAE,QAAa,EAAA;AACtJ,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAC1B,OAAO,CAAC,IAAI,KAAK,mBAAmB,CAAC,SAAS;AAC5C,UAAE;AACA,YAAA,GAAG,OAAO;AACV,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;kBAC3B,OAAO,CAAC,KAAK;AACf,kBAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE;AACrD,SAAA;UACC,OAAO,CACZ,CAAC;AACJ;;ACDM,SAAU,0CAA0C,CAAC,OAAgB,EAAA;AACzE,IAAA,OAAO,CAAC,KAAK,EAAE,MAAM,KAAI;QACvB,QAAQ,MAAM,CAAC,IAAI;YACjB,KAAK,0BAA0B,CAAC,4BAA4B;AAC1D,gBAAA,OAAO,OAAO,CAAC,KAAK,EAAE,IAAI,0BAA0B,CAAC;oBACnD,GAAG,MAAM,CAAC,OAAO;oBACjB,QAAQ,EAAE,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC1E,iBAAA,CAAC,CAAC,CAAC;YAEN,KAAK,sBAAsB,CAAC,wBAAwB;AAClD,gBAAA,OAAO,OAAO,CAAC,KAAK,EAAE,IAAI,sBAAsB,CAAC;oBAC/C,GAAG,MAAM,CAAC,OAAO;oBACjB,QAAQ,EAAE,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC1E,iBAAA,CAAC,CAAC,CAAC;AAEN,YAAA;AACE,gBAAA,OAAO,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjC,SAAA;AACH,KAAC,CAAC;AACJ;;ACtBA;;;;;AAKG;AACI,MAAM,+BAA+B,GAAG,IAAI,cAAc,CAC/D,iCAAiC,EACjC;AACE,IAAA,OAAO,EAAE,MAAM,mBAAmB,CAAC;QACjC,eAAe,CAAC,4BAA4B,CAAC;QAC7C,GAAG,MAAM,CAAC,qCAAqC,CAAC;KACjD,CAAC;AACH,CAAA,CACF;;ACpBD;;AAEG;MASU,+BAA+B,CAAA;iIAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;kIAA/B,+BAA+B,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,CAAA,EAAA;AAA/B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,EAJ/B,SAAA,EAAA;YACT,GAAG,8BAA8B,CAAC,0CAA0C,CAAC;AAC9E,SAAA,EAAA,OAAA,EAAA,CAJC,WAAW,CAAC,UAAU,CAAC,wCAAwC,EAAE,+BAA+B,CAAC,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMxF,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAR3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,WAAW,CAAC,UAAU,CAAC,wCAAwC,EAAE,+BAA+B,CAAC;AAClG,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,GAAG,8BAA8B,CAAC,0CAA0C,CAAC;AAC9E,qBAAA;AACF,iBAAA,CAAA;;;ACnBD;;AAEG;;;;"}
1
+ {"version":3,"file":"daffodil-product-composite-state.mjs","sources":["../../../libs/product-composite/state/src/actions/composite-product.actions.ts","../../../libs/product-composite/state/src/reducers/composite-product-entities/composite-product-entities-reducer-adapter.ts","../../../libs/product-composite/state/src/reducers/composite-product-store-feature-key.ts","../../../libs/product-composite/state/src/selectors/feature.selector.ts","../../../libs/product-composite/state/src/selectors/composite-product-entities/composite-product-entities.selectors.ts","../../../libs/product-composite/state/src/selectors/composite-product/composite-product.selectors.ts","../../../libs/product-composite/state/src/selectors/all.selector.ts","../../../libs/product-composite/state/src/facades/composite-product/composite-product.facade.ts","../../../libs/product-composite/state/src/reducers/composite-product-entities/composite-product-entities.reducer.ts","../../../libs/product-composite/state/src/reducers/composite-product-reducers.ts","../../../libs/product-composite/state/src/reducers/injection-tokens/extra.token.ts","../../../libs/product-composite/state/src/helpers/ensure-items.ts","../../../libs/product-composite/state/src/reducers/ensure-items.meta-reducer.ts","../../../libs/product-composite/state/src/reducers/injection-tokens/reducers.token.ts","../../../libs/product-composite/state/src/composite-product-state.module.ts","../../../libs/product-composite/state/src/daffodil-product-composite-state.ts"],"sourcesContent":["import { Action } from '@ngrx/store';\n\nimport {\n DaffCompositeProduct,\n DaffCompositeProductItem,\n DaffCompositeProductItemOption,\n} from '@daffodil/product-composite';\n\n/**\n * Action types for Composite Product Actions.\n */\nexport enum DaffCompositeProductActionTypes {\n CompositeProductApplyOptionAction = '[@daffodil/product-composite] Composite Product Apply Option Action'\n}\n\n/**\n * Applies a product option to a particular composite product.\n *\n * @param id - Id of the Composite Product\n * @param itemId - Id of the product item.\n * @param optionId - Id of the option of the product item that is chosen.\n */\nexport class DaffCompositeProductApplyOption<T extends DaffCompositeProduct = DaffCompositeProduct> implements Action {\n readonly type = DaffCompositeProductActionTypes.CompositeProductApplyOptionAction;\n\n constructor(public id: T['id'], public itemId: DaffCompositeProductItem['id'], public optionId: DaffCompositeProductItemOption['id'], public qty?: number) {}\n}\n\nexport type DaffCompositeProductActions<T extends DaffCompositeProduct = DaffCompositeProduct> =\n\t| DaffCompositeProductApplyOption<T>;\n","import {\n createEntityAdapter,\n EntityState,\n} from '@ngrx/entity';\nimport { defaultMemoize } from '@ngrx/store';\n\nimport { DaffProductTypeEnum } from '@daffodil/product';\nimport {\n DaffCompositeProduct,\n DaffCompositeProductItem,\n DaffCompositeConfigurationItem,\n DaffCompositeProductItemOption,\n} from '@daffodil/product-composite';\n\nimport { DaffCompositeProductEntity } from './composite-product-entity';\n\n/**\n * Composite Product Item Options Adapter for changing/overwriting entity state.\n */\nexport class DaffCompositeProductAppliedOptionsEntitiesAdapter<T extends EntityState<DaffCompositeProductEntity> = EntityState<DaffCompositeProductEntity>> {\n /**\n * @docs-private\n */\n private _adapter = createEntityAdapter<DaffCompositeProductEntity>();\n\n /**\n * Gets the initial entity state.\n */\n getInitialState() {\n return this._adapter.getInitialState();\n }\n\n /**\n * Get the entity selectors.\n */\n getSelectors() {\n return this._adapter.getSelectors();\n }\n\n /**\n * Upserts the given composite products into state.\n */\n upsertProducts(state: T, ...products: DaffCompositeProduct[]): T {\n return this._adapter.upsertMany(\n this.mapOptionsEntities(products),\n state,\n );\n };\n\n /**\n * Apply the specified option for the given composite product item.\n */\n applyOption(state: T, productId: DaffCompositeProduct['id'], itemId: DaffCompositeProductItem['id'], optionId: DaffCompositeProductItemOption['id'], qty?: number) {\n return this._adapter.upsertOne(\n {\n id: productId,\n items: {\n ...state.entities[productId].items,\n [itemId]: {\n value: optionId,\n qty: qty ?? 1,\n },\n },\n },\n state,\n );\n }\n\n /**\n * @docs-private\n */\n private mapOptionsEntities(products: DaffCompositeProduct[]): DaffCompositeProductEntity[] {\n return products.filter(product => product.type === DaffProductTypeEnum.Composite)\n .map(product => this.buildCompositeProductAppliedOptionsEntity(product));\n }\n\n /**\n * @docs-private\n */\n private buildCompositeProductAppliedOptionsEntity(product: DaffCompositeProduct): DaffCompositeProductEntity {\n return {\n id: product.id,\n items: product.items.reduce((acc, item) => ({\n ...acc,\n [item.id]: this.getDefaultOption(item),\n }), {}),\n };\n }\n\n /**\n * Sets the default item option to the specified default option if it is in stock.\n * Does not set a default option if a default is not specified.\n * Does not set a default option but does set a default qty if the default is out of stock.\n *\n * @param item a DaffCompositeProductItem\n * @docs-private\n */\n private getDefaultOption(item: DaffCompositeProductItem): DaffCompositeConfigurationItem {\n const defaultOptionIndex = item.options.findIndex(option => option.is_default);\n\n if(defaultOptionIndex > -1) {\n return {\n value: item.options[defaultOptionIndex].in_stock ? item.options[defaultOptionIndex].id : null,\n qty: item.options[defaultOptionIndex].quantity,\n };\n } else {\n return { value: null, qty: null };\n }\n }\n}\n\n/**\n * Gets the composite product entity adapter singleton.\n */\nexport const daffCompositeProductAppliedOptionsEntitiesAdapter: () => DaffCompositeProductAppliedOptionsEntitiesAdapter = defaultMemoize(() => new DaffCompositeProductAppliedOptionsEntitiesAdapter()).memoized;\n","export const DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY = 'daffCompositeProduct';\n","import {\n createFeatureSelector,\n MemoizedSelector,\n} from '@ngrx/store';\n\nimport { DaffCompositeProductReducersState } from '../reducers/composite-product-reducers-state.interface';\nimport { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY } from '../reducers/composite-product-store-feature-key';\n\n/**\n * An interface for the composite product feature state.\n */\nexport interface DaffCompositeProductFeatureMemoizedSelector {\n selectCompositeProductState: MemoizedSelector<Record<string, any>, DaffCompositeProductReducersState>;\n}\n\n/**\n * A function that returns a selector for the composite product feature state.\n */\nexport const getDaffCompositeProductFeatureSelector = (() => {\n let cache;\n return (): DaffCompositeProductFeatureMemoizedSelector => cache = cache\n ? cache\n : { selectCompositeProductState: createFeatureSelector<DaffCompositeProductReducersState>(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY) };\n})();\n","import {\n EntityState,\n Dictionary,\n} from '@ngrx/entity';\nimport {\n createSelector,\n MemoizedSelector,\n defaultMemoize,\n} from '@ngrx/store';\n\nimport {\n DaffProduct,\n DaffProductTypeEnum,\n} from '@daffodil/product';\nimport { getDaffProductEntitiesSelectors } from '@daffodil/product/state';\nimport {\n DaffCompositeProductItemOption,\n DaffCompositeProductItem,\n DaffCompositeProduct,\n} from '@daffodil/product-composite';\n\nimport { daffCompositeProductAppliedOptionsEntitiesAdapter } from '../../reducers/composite-product-entities/composite-product-entities-reducer-adapter';\nimport { DaffCompositeProductEntity } from '../../reducers/composite-product-entities/composite-product-entity';\nimport {\n DaffCompositeProductReducersState,\n DaffCompositeProductStateRootSlice,\n} from '../../reducers/composite-product-reducers-state.interface';\nimport { getDaffCompositeProductFeatureSelector } from '../feature.selector';\n\n/**\n * An interface for selectors related to the composite product applied options.\n */\nexport interface DaffCompositeProductEntitiesMemoizedSelectors<T extends DaffProduct = DaffProduct> {\n /**\n * The ngrx entities state for composite product applied options.\n */\n selectCompositeProductAppliedOptionsEntitiesState: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, EntityState<DaffCompositeProductEntity>>;\n /**\n * A selector for all composite product ids in state.\n */\n selectCompositeProductIds: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, EntityState<DaffCompositeProductEntity>['ids']>;\n /**\n * The ngrx entities for the composite product appllied options.\n */\n selectCompositeProductAppliedOptionsEntities: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, EntityState<DaffCompositeProductEntity>['entities']>;\n /**\n * The total number of composite products in state.\n */\n selectCompositeProductTotal: MemoizedSelector<DaffCompositeProductStateRootSlice<T>, number>;\n /**\n * Selects the applied options for a composite product.\n *\n * @param id the id of the composite product.\n */\n selectCompositeProductAppliedOptions: (id: T['id']) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, Dictionary<DaffCompositeProductItemOption>>;\n /**\n * Selects whether the particular item of a composite product is required in order for the product to be valid, i.e. addable to the cart.\n *\n * @param id the id of the composite product.\n * @param item_id the id of the composite product item.\n */\n selectIsCompositeProductItemRequired: (id: T['id'], item_id: DaffCompositeProductItem['id']) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, boolean>;\n}\n\nconst createCompositeProductAppliedOptionsEntitiesSelectors = <T extends DaffProduct>(): DaffCompositeProductEntitiesMemoizedSelectors<T> => {\n const {\n selectCompositeProductState,\n } = getDaffCompositeProductFeatureSelector();\n const {\n selectProduct,\n } = getDaffProductEntitiesSelectors<T>();\n const adapterSelectors = daffCompositeProductAppliedOptionsEntitiesAdapter().getSelectors();\n\n const selectCompositeProductAppliedOptionsEntitiesState = createSelector(\n selectCompositeProductState,\n (state: DaffCompositeProductReducersState) => state.compositeProductOptions,\n );\n\n const selectCompositeProductIds = createSelector(\n selectCompositeProductAppliedOptionsEntitiesState,\n adapterSelectors.selectIds,\n );\n\n const selectCompositeProductAppliedOptionsEntities = createSelector(\n selectCompositeProductAppliedOptionsEntitiesState,\n adapterSelectors.selectEntities,\n );\n\n const selectCompositeProductTotal = createSelector(\n selectCompositeProductAppliedOptionsEntitiesState,\n adapterSelectors.selectTotal,\n );\n\n const selectCompositeProductAppliedOptions = defaultMemoize((id: T['id']) => createSelector(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntitiesState,\n (product: T, appliedOptions) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n return (<DaffCompositeProduct><any>product).items.reduce((acc, item) => ({\n ...acc,\n [item.id]: appliedOptions.entities[product.id].items[item.id].value ? {\n ...item.options.find(option => option.id === appliedOptions.entities[product.id].items[item.id].value),\n quantity: appliedOptions.entities[product.id].items[item.id].qty,\n } : null,\n }), {});\n },\n )).memoized;\n\n const selectIsCompositeProductItemRequired = defaultMemoize((id: T['id'], item_id: DaffCompositeProductItem['id']) => createSelector(\n selectProduct(id),\n (product: T) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n const productItem = (<DaffCompositeProduct><any>product).items.find(item => item.id === item_id);\n\n return productItem ? productItem.required : null;\n },\n )).memoized;\n\n\n return {\n selectCompositeProductAppliedOptionsEntitiesState,\n selectCompositeProductIds,\n selectCompositeProductAppliedOptionsEntities,\n selectCompositeProductTotal,\n selectCompositeProductAppliedOptions,\n selectIsCompositeProductItemRequired,\n };\n};\n\n/**\n * A function that returns all selectors related to composite product applied option entities.\n * Returns {@link DaffCompositeProductEntitiesMemoizedSelectors}.\n */\nexport const getDaffCompositeProductEntitiesSelectors = (() => {\n let cache;\n return <T extends DaffProduct>(): DaffCompositeProductEntitiesMemoizedSelectors<T> => cache = cache\n ? cache\n : createCompositeProductAppliedOptionsEntitiesSelectors<T>();\n})();\n","import {\n Dictionary,\n EntityState,\n} from '@ngrx/entity';\nimport {\n createSelector,\n MemoizedSelector,\n defaultMemoize,\n} from '@ngrx/store';\n\nimport {\n daffAdd,\n daffDivide,\n daffMultiply,\n daffSubtract,\n} from '@daffodil/core';\nimport {\n DaffProduct,\n DaffProductTypeEnum,\n DaffProductPrices,\n DaffPriceRange,\n} from '@daffodil/product';\nimport { getDaffProductEntitiesSelectors } from '@daffodil/product/state';\nimport {\n DaffCompositeProduct,\n DaffCompositeConfigurationItem,\n DaffCompositeProductItem,\n DaffCompositeProductItemOption,\n} from '@daffodil/product-composite';\n\nimport { DaffCompositeProductStateRootSlice } from '../../reducers/composite-product-reducers-state.interface';\nimport { DaffCompositeProductEntity } from '../../reducers/public_api';\nimport { getDaffCompositeProductEntitiesSelectors } from '../composite-product-entities/composite-product-entities.selectors';\n\n/**\n * An interface describing selectors unique to the composite product, such as pricing and discounts.\n */\nexport interface DaffCompositeProductMemoizedSelectors<T extends DaffProduct = DaffProduct> {\n /**\n * Get a DaffPriceRange for a composite product based on the configuration provided excluding unselected, optional item prices.\n */\n selectCompositeProductRequiredItemPricesForConfiguration: ( id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem> ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, DaffPriceRange>;\n /**\n * Get the broadest possible DaffPriceRange for a composite product based on the configuration provided including optional item prices.\n */\n selectCompositeProductOptionalItemPricesForConfiguration: ( id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem> ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, DaffPriceRange>;\n /**\n * Get the DaffPriceRange for a composite product based on the current configuration of selected item options in redux state and\n * excluding unselected, optional item prices.\n */\n selectCompositeProductPricesAsCurrentlyConfigured: ( id: DaffCompositeProduct['id'] ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, DaffPriceRange>;\n /**\n * Get the discount amount for a composite product. This value will be undefined if all required options are not chosen.\n */\n selectCompositeProductDiscountAmount: ( id: DaffCompositeProduct['id'] ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, number>;\n /**\n * Get the discount percent for a composite product. This value will be undefined if all required options are not chosen.\n * Note: this percent is computed client-side and should be treated as an estimate rather than an exact value.\n */\n selectCompositeProductDiscountPercent: ( id: DaffCompositeProduct['id'] ) => MemoizedSelector<DaffCompositeProductStateRootSlice<T>, number>;\n}\n\nconst createCompositeProductSelectors = <T extends DaffProduct>(): DaffCompositeProductMemoizedSelectors<T> => {\n\n const {\n selectProduct,\n } = getDaffProductEntitiesSelectors<T>();\n\n const {\n selectCompositeProductAppliedOptionsEntities,\n } = getDaffCompositeProductEntitiesSelectors();\n\n const selectCompositeProductRequiredItemPricesForConfiguration = defaultMemoize((id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>) => createSelector(\n selectProduct(id),\n (product: T) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n const appliedOptions = configuration ? getAppliedOptionsForConfiguration(<DaffCompositeProduct><any>product, configuration) : {};\n return {\n minPrice: getMinPricesForConfiguration(<DaffCompositeProduct><any>product, appliedOptions),\n maxPrice: getMaxPricesForConfiguration(<DaffCompositeProduct><any>product, appliedOptions),\n };\n },\n )).memoized;\n\n const selectCompositeProductOptionalItemPricesForConfiguration = defaultMemoize((id: DaffCompositeProduct['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>) => createSelector(\n selectProduct(id),\n (product: T) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n\n const appliedOptions = configuration ? getAppliedOptionsForConfiguration(<DaffCompositeProduct><any>product, configuration) : {};\n return {\n minPrice: getMinPricesForConfiguration(<DaffCompositeProduct><any>product, appliedOptions),\n maxPrice: getMaxPricesForConfigurationIncludingOptionalItems(<DaffCompositeProduct><any>product, appliedOptions),\n };\n },\n )).memoized;\n\n const selectCompositeProductPricesAsCurrentlyConfigured = defaultMemoize((id: T['id']) => createSelector<DaffCompositeProductStateRootSlice<T>, [T, EntityState<DaffCompositeProductEntity>['entities']], DaffPriceRange>(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntities,\n (product: T, appliedOptionsEntities) =>\n selectCompositeProductRequiredItemPricesForConfiguration(id, appliedOptionsEntities[id]?.items || null).projector(product),\n )).memoized;\n\n const selectCompositeProductDiscountAmount = defaultMemoize((id: DaffCompositeProduct['id']) => createSelector<DaffCompositeProductStateRootSlice<T>, [T, EntityState<DaffCompositeProductEntity>['entities']], number>(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntities,\n (product: T, appliedOptionsEntities) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n const appliedConfigurationItem = appliedOptionsEntities[product.id].items;\n if((<DaffCompositeProduct><any>product).items.filter(item => item.required && appliedConfigurationItem[item.id].value === null).length > 0) {\n return undefined;\n }\n const appliedOptions = getAppliedOptionsForConfiguration((<DaffCompositeProduct><any>product), appliedConfigurationItem);\n\n return (<DaffCompositeProduct><any>product).items.reduce((acc, item) =>\n appliedOptions[item.id]?.discount?.amount ? daffAdd(acc, daffMultiply(appliedOptions[item.id].discount.amount, appliedOptions[item.id].quantity)) : acc,\n product.discount.amount);\n },\n )).memoized;\n\n const selectCompositeProductDiscountPercent = defaultMemoize((id: DaffCompositeProduct['id']) => createSelector<DaffCompositeProductStateRootSlice<T>, [T, EntityState<DaffCompositeProductEntity>['entities']], number>(\n selectProduct(id),\n selectCompositeProductAppliedOptionsEntities,\n (product: T, appliedOptionsEntities) => {\n if(product.type !== DaffProductTypeEnum.Composite) {\n return undefined;\n }\n const appliedOptions = appliedOptionsEntities[product.id].items;\n if((<DaffCompositeProduct><any>product).items.filter(item => item.required && appliedOptions[item.id].value === null).length > 0) {\n return undefined;\n }\n\n const prices = getMinPricesForConfiguration(\n (<DaffCompositeProduct><any>product),\n getAppliedOptionsForConfiguration((<DaffCompositeProduct><any>product), appliedOptions),\n );\n\n return daffMultiply(\n daffDivide(\n daffSubtract(prices.originalPrice, prices.discountedPrice),\n prices.originalPrice,\n ),\n 100,\n );\n },\n )).memoized;\n\n return {\n selectCompositeProductRequiredItemPricesForConfiguration,\n selectCompositeProductOptionalItemPricesForConfiguration,\n selectCompositeProductPricesAsCurrentlyConfigured,\n selectCompositeProductDiscountAmount,\n selectCompositeProductDiscountPercent,\n };\n};\n\n/**\n * A function that returns all selectors related to the composite product feature.\n *\n * Returns {@link DaffCompositeProductMemoizedSelectors}.\n */\nexport const getDaffCompositeProductPriceSelectors = (() => {\n let cache;\n return <T extends DaffProduct = DaffProduct>(): DaffCompositeProductMemoizedSelectors<T> => cache = cache\n ? cache\n : createCompositeProductSelectors<T>();\n})();\n\n/**\n * The minimum price of an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMinimumRequiredCompositeItemPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.min(...item.options.map(option => option.price)), qty) : 0;\n}\n\n/**\n * The maximum price for an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMaximumRequiredCompositeItemPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.max(...item.options.map(option => option.price)), qty) : 0;\n}\n\n/**\n * The minimum discounted price of an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMinimumRequiredCompositeItemDiscountedPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.min(...item.options.map(getDiscountedPrice)), qty) : 0;\n}\n/**\n * The maximum discounted price of an item is zero if the item is optional.\n *\n * @param item DaffCompositeProductItem\n */\nfunction getMaximumRequiredCompositeItemDiscountedPrice(item: DaffCompositeProductItem, qty: number): number {\n return item.required ? daffMultiply(Math.max(...item.options.map(getDiscountedPrice)), qty) : 0;\n}\n\n/**\n * Gets the minimum prices of a composite product for the configuration provided excluding unselected, optional item prices.\n *\n * @param product a DaffCompositeProduct\n * @param appliedOptions a Dictionary<DaffCompositeProductItemOption> that determines the current configuration of the composite product.\n */\nfunction getMinPricesForConfiguration(product: DaffCompositeProduct, appliedOptions: Dictionary<DaffCompositeProductItemOption>): DaffProductPrices {\n return {\n discountedPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(getDiscountedPrice(appliedOptions[item.id]), appliedOptions[item.id].quantity) :\n getMinimumRequiredCompositeItemDiscountedPrice(item, getOptionQty(appliedOptions[item.id])),\n ), getDiscountedPrice(product)),\n discount: { amount: null, percent: null },\n originalPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(appliedOptions[item.id].price, appliedOptions[item.id].quantity) :\n getMinimumRequiredCompositeItemPrice(item, getOptionQty(appliedOptions[item.id])),\n ), product.price),\n };\n}\n\n/**\n * Gets the maximum prices of a composite product for the configuration provided excluding unselected, optional item prices.\n *\n * @param product a DaffCompositeProduct\n * @param appliedOptions a Dictionary<DaffCompositeProductItemOption> that determines the current configuration of the composite product.\n */\nfunction getMaxPricesForConfiguration(product: DaffCompositeProduct, appliedOptions: Dictionary<DaffCompositeProductItemOption>): DaffProductPrices {\n return {\n discountedPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(getDiscountedPrice(appliedOptions[item.id]), appliedOptions[item.id].quantity) :\n getMaximumRequiredCompositeItemDiscountedPrice(item, getOptionQty(appliedOptions[item.id])),\n ), getDiscountedPrice(product)),\n discount: { amount: null, percent: null },\n originalPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(appliedOptions[item.id].price, appliedOptions[item.id].quantity) :\n getMaximumRequiredCompositeItemPrice(item, getOptionQty(appliedOptions[item.id])),\n ), product.price),\n };\n}\n\nfunction getDiscountedPrice(product: DaffProduct): number {\n return product.discount ? daffSubtract(product.price, product.discount.amount) : product.price;\n}\n\n/**\n * Gets the maximum prices of a composite product including optional item prices.\n *\n * @param product a DaffCompositeProduct\n */\nfunction getMaxPricesForConfigurationIncludingOptionalItems(product: DaffCompositeProduct, appliedOptions: Dictionary<DaffCompositeProductItemOption>): DaffProductPrices {\n return {\n discountedPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(getDiscountedPrice(appliedOptions[item.id]), appliedOptions[item.id].quantity) :\n appliedOptionHasQty(appliedOptions[item.id]) ?\n daffMultiply(Math.max(...item.options.map(getDiscountedPrice)), appliedOptions[item.id].quantity) :\n Math.max(...item.options.map(getDiscountedPrice)),\n ), getDiscountedPrice(product)),\n discount: { amount: null, percent: null },\n originalPrice: product.items.reduce((acc, item) => daffAdd(\n acc,\n appliedOptionHasId(appliedOptions[item.id]) ?\n daffMultiply(appliedOptions[item.id].price, appliedOptions[item.id].quantity) :\n appliedOptionHasQty(appliedOptions[item.id]) ?\n daffMultiply(Math.max(...item.options.map(option => option.price)), appliedOptions[item.id].quantity) :\n Math.max(...item.options.map(option => option.price)),\n ), product.price),\n };\n}\n\n/**\n * Takes a product and a set of option configurations and convert it into a dictionary of the full option objects.\n *\n * @param product a DaffCompositeProduct\n * @param configuration a Dictionary<DaffCompositeConfigurationItem> used to build the appliedOptions object.\n */\nfunction getAppliedOptionsForConfiguration(product: DaffCompositeProduct, configuration: Dictionary<DaffCompositeConfigurationItem>): Dictionary<DaffCompositeProductItemOption> {\n return product.items.reduce((acc, item) => ({\n ...acc,\n [item.id]: configuration[item.id] ? {\n ...item.options.find(option => option.id === configuration[item.id].value),\n quantity: (configuration[item.id].qty === null || configuration[item.id].qty === undefined) ? 1 : configuration[item.id].qty,\n } : null,\n }), {});\n}\n\nfunction appliedOptionHasId(appliedOption: DaffCompositeProductItemOption): boolean {\n return !!appliedOption?.id;\n}\n\nfunction getOptionQty(appliedOption: DaffCompositeProductItemOption): number {\n return appliedOptionHasQty(appliedOption) ? appliedOption.quantity : 1;\n}\n\nfunction appliedOptionHasQty(appliedOption: DaffCompositeProductItemOption): boolean {\n return appliedOption?.quantity !== null && appliedOption?.quantity !== undefined;\n}\n","import { DaffProduct } from '@daffodil/product';\n\nimport {\n DaffCompositeProductMemoizedSelectors,\n getDaffCompositeProductPriceSelectors,\n} from './composite-product/composite-product.selectors';\nimport {\n DaffCompositeProductEntitiesMemoizedSelectors,\n getDaffCompositeProductEntitiesSelectors,\n} from './composite-product-entities/composite-product-entities.selectors';\n\n/**\n * An interface for all selectors in the composite product feature area.\n */\nexport interface DaffCompositeProductAllSelectors<T extends DaffProduct = DaffProduct> extends\n DaffCompositeProductEntitiesMemoizedSelectors<T>,\n DaffCompositeProductMemoizedSelectors<T> { }\n\n/**\n * A function that returns all selectors in the composite product feature area.\n * Returns {@link DaffCompositeProductAllSelectors}.\n */\nexport const getDaffCompositeProductSelectors = <T extends DaffProduct>(): DaffCompositeProductAllSelectors<T> => ({\n ...getDaffCompositeProductEntitiesSelectors<T>(),\n ...getDaffCompositeProductPriceSelectors<T>(),\n});\n","import { Injectable } from '@angular/core';\nimport { Dictionary } from '@ngrx/entity';\nimport {\n Store,\n select,\n Action,\n} from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\nimport {\n DaffProduct,\n DaffPriceRange,\n productPriceRangeHasDiscount,\n productPriceRangeHasPriceRange,\n} from '@daffodil/product';\nimport {\n DaffCompositeConfigurationItem,\n DaffCompositeProductItemOption,\n DaffCompositeProductItem,\n} from '@daffodil/product-composite';\n\nimport { DaffCompositeProductFacadeInterface } from './composite-product-facade.interface';\nimport { DaffCompositeProductStateRootSlice } from '../../reducers/composite-product-reducers-state.interface';\nimport { getDaffCompositeProductSelectors } from '../../selectors/public_api';\n\n/**\n * A facade for interacting with the composite product state.\n * Exposes many parts of the state for easy access and allows dispatching of actions.\n *\n * @inheritdoc\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class DaffCompositeProductFacade<T extends DaffProduct = DaffProduct> implements DaffCompositeProductFacadeInterface {\n\n constructor(private store: Store<DaffCompositeProductStateRootSlice<T>>) {}\n\n compositeProductSelectors = getDaffCompositeProductSelectors<T>();\n\n hasDiscount = productPriceRangeHasDiscount;\n\n hasPriceRange = productPriceRangeHasPriceRange;\n\n getRequiredItemPricesForConfiguration(id: T['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>): Observable<DaffPriceRange> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductRequiredItemPricesForConfiguration(id, configuration)));\n }\n\n getOptionalItemPricesForConfiguration(id: T['id'], configuration?: Dictionary<DaffCompositeConfigurationItem>): Observable<DaffPriceRange> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductOptionalItemPricesForConfiguration(id, configuration)));\n }\n\n getPricesAsCurrentlyConfigured(id: T['id']): Observable<DaffPriceRange> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductPricesAsCurrentlyConfigured(id)));\n }\n\n getAppliedOptions(id: T['id']): Observable<Dictionary<DaffCompositeProductItemOption>> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductAppliedOptions(id)));\n }\n\n getDiscountAmount(id: T['id']): Observable<number> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductDiscountAmount(id)));\n }\n\n getDiscountPercent(id: T['id']): Observable<number> {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectCompositeProductDiscountPercent(id)));\n }\n\n isItemRequired(id: T['id'], item_id: DaffCompositeProductItem['id']) {\n\t return this.store.pipe(select(this.compositeProductSelectors.selectIsCompositeProductItemRequired(id, item_id)));\n }\n\n dispatch(action: Action) {\n\t this.store.dispatch(action);\n }\n}\n","import { EntityState } from '@ngrx/entity';\n\nimport { DaffProduct } from '@daffodil/product';\nimport {\n DaffProductPageActions,\n DaffProductPageActionTypes,\n DaffProductGridActionTypes,\n DaffProductGridActions,\n DaffBestSellersActions,\n DaffProductActions,\n DaffBestSellersActionTypes,\n DaffProductActionTypes,\n} from '@daffodil/product/state';\nimport { DaffCompositeProduct } from '@daffodil/product-composite';\n\nimport { daffCompositeProductAppliedOptionsEntitiesAdapter } from './composite-product-entities-reducer-adapter';\nimport { DaffCompositeProductEntity } from './composite-product-entity';\nimport {\n DaffCompositeProductActions,\n DaffCompositeProductActionTypes,\n} from '../../actions/public_api';\n\n/**\n * Reducer function that catches actions and changes/overwrites composite product entities state.\n *\n * @param state current State of the redux store\n * @param action ProductGrid, BestSellers, Product, or Composite Product actions\n * @returns Product entities state\n */\nexport function daffCompositeProductEntitiesReducer<T extends DaffProduct, V extends DaffCompositeProduct>(\n state = daffCompositeProductAppliedOptionsEntitiesAdapter().getInitialState(),\n action: DaffProductGridActions<T> | DaffBestSellersActions<T> | DaffProductActions<T> | DaffProductPageActions<T> | DaffCompositeProductActions<V>): EntityState<DaffCompositeProductEntity> {\n const adapter = daffCompositeProductAppliedOptionsEntitiesAdapter();\n switch (action.type) {\n case DaffProductGridActionTypes.ProductGridLoadSuccessAction:\n case DaffBestSellersActionTypes.BestSellersLoadSuccessAction:\n return adapter.upsertProducts(state, ...(<V[]><unknown>action.payload));\n\n case DaffProductActionTypes.ProductLoadSuccessAction:\n case DaffProductPageActionTypes.ProductPageLoadSuccessAction:\n return adapter.upsertProducts(state, ...(<V[]><unknown>action.payload.products));\n\n case DaffCompositeProductActionTypes.CompositeProductApplyOptionAction:\n return adapter.applyOption(state, action.id, action.itemId, action.optionId, action.qty);\n\n default:\n return state;\n }\n}\n","import { ActionReducerMap } from '@ngrx/store';\n\nimport { daffCompositeProductEntitiesReducer } from './composite-product-entities/composite-product-entities.reducer';\nimport { DaffCompositeProductReducersState } from './composite-product-reducers-state.interface';\n\n/**\n * Returns state values from all composite product related reducers.\n */\nexport const daffCompositeProductReducers: ActionReducerMap<DaffCompositeProductReducersState> = {\n compositeProductOptions: daffCompositeProductEntitiesReducer,\n};\n","import {\n InjectionToken,\n Provider,\n} from '@angular/core';\nimport { ActionReducer } from '@ngrx/store';\n\nimport { DaffCompositeProductReducersState } from '../composite-product-reducers-state.interface';\n\n/**\n * A token to hold the injectable extra reducers.\n *\n * Prefer using {@link daffProductCompositeProvideExtraReducers}.\n */\nexport const DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS = new InjectionToken<ActionReducer<DaffCompositeProductReducersState>[]>(\n 'DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS',\n { factory: () => []},\n);\n\n/**\n * Provides additional reducers that run after the standard Daffodil cart reducers.\n *\n * ```ts\n * providers: [\n * ...daffProductCompositeProvideExtraReducers(\n * myReducer1,\n * myReducer2\n * )\n * ]\n * ```\n */\nexport function daffProductCompositeProvideExtraReducers(\n ...reducers: ActionReducer<Partial<DaffCompositeProductReducersState>>[]\n): Provider[] {\n return reducers.map(reducer => ({\n provide: DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS,\n useValue: reducer,\n multi: true,\n }));\n}\n","import { DaffProductTypeEnum } from '@daffodil/product';\nimport { DaffProductReducersState } from '@daffodil/product/state';\nimport { DaffCompositeProduct } from '@daffodil/product-composite';\n\n/**\n * Maps a list of products, ensuring that the composite products have a list of items.\n * If the incoming items is empty or nully, the items from state are intentionally used instead.\n */\nexport function daffProductCompositeEnsureItems<T extends DaffCompositeProduct = DaffCompositeProduct>(state: DaffProductReducersState<T>, products: T[]): T[] {\n return products.map((product) =>\n product.type === DaffProductTypeEnum.Composite\n ? {\n ...product,\n items: product.items.length > 0\n ? product.items\n : state.products.entities[product.id]?.items ?? [],\n }\n : product,\n );\n}\n","import { ActionReducer } from '@ngrx/store';\n\nimport { DaffProductTypeEnum } from '@daffodil/product';\nimport {\n DaffProductActionTypes,\n DaffProductActions,\n DaffProductLoadSuccess,\n DaffProductPageActionTypes,\n DaffProductPageActions,\n DaffProductPageLoadSuccess,\n DaffProductReducersState,\n} from '@daffodil/product/state';\nimport { DaffCompositeProduct } from '@daffodil/product-composite';\n\nimport { daffProductCompositeEnsureItems } from '../helpers/public_api';\n\ntype Reducer = ActionReducer<DaffProductReducersState<DaffCompositeProduct>, DaffProductActions<DaffCompositeProduct> | DaffProductPageActions<DaffCompositeProduct>>;\n\nexport function daffProductCompositeEnsureItemsMetaReducer(reducer: Reducer): Reducer {\n return (state, action) => {\n switch (action.type) {\n case DaffProductPageActionTypes.ProductPageLoadSuccessAction:\n return reducer(state, new DaffProductPageLoadSuccess({\n ...action.payload,\n products: daffProductCompositeEnsureItems(state, action.payload.products),\n }));\n\n case DaffProductActionTypes.ProductLoadSuccessAction:\n return reducer(state, new DaffProductLoadSuccess({\n ...action.payload,\n products: daffProductCompositeEnsureItems(state, action.payload.products),\n }));\n\n default:\n return reducer(state, action);\n }\n };\n}\n","import {\n inject,\n InjectionToken,\n} from '@angular/core';\nimport {\n ActionReducer,\n combineReducers,\n} from '@ngrx/store';\n\nimport { daffComposeReducers } from '@daffodil/core/state';\n\nimport { DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS } from './extra.token';\nimport { daffCompositeProductReducers } from '../composite-product-reducers';\nimport { DaffCompositeProductReducersState } from '../composite-product-reducers-state.interface';\n\n/**\n * An internal token to hold the Daffodil composite product reducers.\n * Includes the extra and standard reducers.\n *\n * @docs-private\n */\nexport const DAFF_PRODUCT_COMPOSITE_REDUCERS = new InjectionToken<ActionReducer<DaffCompositeProductReducersState>>(\n 'DAFF_PRODUCT_COMPOSITE_REDUCERS',\n {\n factory: () => daffComposeReducers([\n combineReducers(daffCompositeProductReducers),\n ...inject(DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS),\n ]),\n },\n);\n","import { NgModule } from '@angular/core';\nimport { StoreModule } from '@ngrx/store';\n\nimport { daffProductProvideMetaReducers } from '@daffodil/product/state';\n\nimport { daffProductCompositeEnsureItemsMetaReducer } from './reducers/ensure-items.meta-reducer';\nimport { DAFF_PRODUCT_COMPOSITE_REDUCERS } from './reducers/injection-tokens/reducers.token';\nimport { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY } from './reducers/public_api';\n\n/**\n * A module that provides the default reducers and effects for composite product redux state.\n */\n@NgModule({\n imports: [\n StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DAFF_PRODUCT_COMPOSITE_REDUCERS),\n ],\n providers: [\n ...daffProductProvideMetaReducers(daffProductCompositeEnsureItemsMetaReducer),\n ],\n})\nexport class DaffCompositeProductStateModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@daffodil/product-composite","nx":{"targets":{"build":{"outputs":["{workspaceRoot}/dist/product-composite"]}}},"version":"0.68.0","description":"Interfaces built for daffodil/state","repository":{"type":"git","url":"https://github.com/graycoreio/daffodil"},"author":"Graycore LLC","license":"MIT","bugs":{"url":"https://github.com/graycoreio/daffodil/issues"},"publishConfig":{"directory":"../../dist/product-composite"},"homepage":"https://github.com/graycoreio/daffodil","peerDependencies":{"@angular/common":"^17.0.0","@angular/core":"^17.0.0","@daffodil/core":"0.68.0","@daffodil/product":"0.68.0","@ngrx/effects":"^17.0.0","@ngrx/entity":"^17.0.0","@ngrx/store":"^17.0.0","rxjs":"7.8.1"},"optionalDependencies":{"@apollo/client":"^3.0.0","@daffodil/driver":"0.68.0","@daffodil/product":"0.68.0","angular-in-memory-web-api":"^0.17.0","apollo-angular":"^6.0.0","@faker-js/faker":"^7.6.0"},"module":"fesm2022/daffodil-product-composite.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/daffodil-product-composite.mjs","esm":"./esm2022/daffodil-product-composite.mjs","default":"./fesm2022/daffodil-product-composite.mjs"},"./routing":{"types":"./routing/index.d.ts","esm2022":"./esm2022/routing/daffodil-product-composite-routing.mjs","esm":"./esm2022/routing/daffodil-product-composite-routing.mjs","default":"./fesm2022/daffodil-product-composite-routing.mjs"},"./state":{"types":"./state/index.d.ts","esm2022":"./esm2022/state/daffodil-product-composite-state.mjs","esm":"./esm2022/state/daffodil-product-composite-state.mjs","default":"./fesm2022/daffodil-product-composite-state.mjs"},"./testing":{"types":"./testing/index.d.ts","esm2022":"./esm2022/testing/daffodil-product-composite-testing.mjs","esm":"./esm2022/testing/daffodil-product-composite-testing.mjs","default":"./fesm2022/daffodil-product-composite-testing.mjs"},"./driver/in-memory":{"types":"./driver/in-memory/index.d.ts","esm2022":"./esm2022/driver/in-memory/daffodil-product-composite-driver-in-memory.mjs","esm":"./esm2022/driver/in-memory/daffodil-product-composite-driver-in-memory.mjs","default":"./fesm2022/daffodil-product-composite-driver-in-memory.mjs"},"./driver/magento":{"types":"./driver/magento/index.d.ts","esm2022":"./esm2022/driver/magento/daffodil-product-composite-driver-magento.mjs","esm":"./esm2022/driver/magento/daffodil-product-composite-driver-magento.mjs","default":"./fesm2022/daffodil-product-composite-driver-magento.mjs"},"./driver/testing":{"types":"./driver/testing/index.d.ts","esm2022":"./esm2022/driver/testing/daffodil-product-composite-driver-testing.mjs","esm":"./esm2022/driver/testing/daffodil-product-composite-driver-testing.mjs","default":"./fesm2022/daffodil-product-composite-driver-testing.mjs"},"./state/testing":{"types":"./state/testing/index.d.ts","esm2022":"./esm2022/state/testing/daffodil-product-composite-state-testing.mjs","esm":"./esm2022/state/testing/daffodil-product-composite-state-testing.mjs","default":"./fesm2022/daffodil-product-composite-state-testing.mjs"},"./driver/magento/testing":{"types":"./driver/magento/testing/index.d.ts","esm2022":"./esm2022/driver/magento/testing/daffodil-product-composite-driver-magento-testing.mjs","esm":"./esm2022/driver/magento/testing/daffodil-product-composite-driver-magento-testing.mjs","default":"./fesm2022/daffodil-product-composite-driver-magento-testing.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"}}
1
+ {"name":"@daffodil/product-composite","nx":{"targets":{"build":{"outputs":["{workspaceRoot}/dist/product-composite"]}}},"version":"0.68.1","description":"Interfaces built for daffodil/state","repository":{"type":"git","url":"https://github.com/graycoreio/daffodil"},"author":"Graycore LLC","license":"MIT","bugs":{"url":"https://github.com/graycoreio/daffodil/issues"},"publishConfig":{"directory":"../../dist/product-composite"},"homepage":"https://github.com/graycoreio/daffodil","peerDependencies":{"@angular/common":"^17.0.0","@angular/core":"^17.0.0","@daffodil/core":"0.68.1","@daffodil/product":"0.68.1","@ngrx/effects":"^17.0.0","@ngrx/entity":"^17.0.0","@ngrx/store":"^17.0.0","rxjs":"7.8.1"},"optionalDependencies":{"@apollo/client":"^3.0.0","@daffodil/driver":"0.68.1","@daffodil/product":"0.68.1","angular-in-memory-web-api":"^0.17.0","apollo-angular":"^6.0.0","@faker-js/faker":"^7.6.0"},"module":"fesm2022/daffodil-product-composite.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/daffodil-product-composite.mjs","esm":"./esm2022/daffodil-product-composite.mjs","default":"./fesm2022/daffodil-product-composite.mjs"},"./routing":{"types":"./routing/index.d.ts","esm2022":"./esm2022/routing/daffodil-product-composite-routing.mjs","esm":"./esm2022/routing/daffodil-product-composite-routing.mjs","default":"./fesm2022/daffodil-product-composite-routing.mjs"},"./state":{"types":"./state/index.d.ts","esm2022":"./esm2022/state/daffodil-product-composite-state.mjs","esm":"./esm2022/state/daffodil-product-composite-state.mjs","default":"./fesm2022/daffodil-product-composite-state.mjs"},"./testing":{"types":"./testing/index.d.ts","esm2022":"./esm2022/testing/daffodil-product-composite-testing.mjs","esm":"./esm2022/testing/daffodil-product-composite-testing.mjs","default":"./fesm2022/daffodil-product-composite-testing.mjs"},"./driver/in-memory":{"types":"./driver/in-memory/index.d.ts","esm2022":"./esm2022/driver/in-memory/daffodil-product-composite-driver-in-memory.mjs","esm":"./esm2022/driver/in-memory/daffodil-product-composite-driver-in-memory.mjs","default":"./fesm2022/daffodil-product-composite-driver-in-memory.mjs"},"./driver/magento":{"types":"./driver/magento/index.d.ts","esm2022":"./esm2022/driver/magento/daffodil-product-composite-driver-magento.mjs","esm":"./esm2022/driver/magento/daffodil-product-composite-driver-magento.mjs","default":"./fesm2022/daffodil-product-composite-driver-magento.mjs"},"./driver/testing":{"types":"./driver/testing/index.d.ts","esm2022":"./esm2022/driver/testing/daffodil-product-composite-driver-testing.mjs","esm":"./esm2022/driver/testing/daffodil-product-composite-driver-testing.mjs","default":"./fesm2022/daffodil-product-composite-driver-testing.mjs"},"./state/testing":{"types":"./state/testing/index.d.ts","esm2022":"./esm2022/state/testing/daffodil-product-composite-state-testing.mjs","esm":"./esm2022/state/testing/daffodil-product-composite-state-testing.mjs","default":"./fesm2022/daffodil-product-composite-state-testing.mjs"},"./driver/magento/testing":{"types":"./driver/magento/testing/index.d.ts","esm2022":"./esm2022/driver/magento/testing/daffodil-product-composite-driver-magento-testing.mjs","esm":"./esm2022/driver/magento/testing/daffodil-product-composite-driver-magento-testing.mjs","default":"./fesm2022/daffodil-product-composite-driver-magento-testing.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"}}
@@ -4,7 +4,7 @@ import { DaffCompositeProduct, DaffCompositeProductItem, DaffCompositeProductIte
4
4
  * Action types for Composite Product Actions.
5
5
  */
6
6
  export declare enum DaffCompositeProductActionTypes {
7
- CompositeProductApplyOptionAction = "[Composite Product] Composite Product Apply Option Action"
7
+ CompositeProductApplyOptionAction = "[@daffodil/product-composite] Composite Product Apply Option Action"
8
8
  }
9
9
  /**
10
10
  * Applies a product option to a particular composite product.