@daffodil/product-composite 0.42.4 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/state/composite-product-state.module.mjs +5 -4
- package/esm2020/state/reducers/composite-product-entities/composite-product-entities-reducer-adapter.mjs +88 -5
- package/esm2020/state/reducers/composite-product-entities/composite-product-entities.reducer.mjs +4 -46
- package/esm2020/state/reducers/injection-tokens/extra.token.mjs +27 -0
- package/esm2020/state/reducers/injection-tokens/public_api.mjs +2 -0
- package/esm2020/state/reducers/injection-tokens/reducers.token.mjs +18 -0
- package/esm2020/state/reducers/public_api.mjs +3 -1
- package/fesm2015/daffodil-product-composite-state.mjs +127 -47
- package/fesm2015/daffodil-product-composite-state.mjs.map +1 -1
- package/fesm2020/daffodil-product-composite-state.mjs +133 -53
- package/fesm2020/daffodil-product-composite-state.mjs.map +1 -1
- package/package.json +5 -5
- package/state/reducers/composite-product-entities/composite-product-entities-reducer-adapter.d.ts +45 -2
- package/state/reducers/injection-tokens/extra.token.d.ts +22 -0
- package/state/reducers/injection-tokens/public_api.d.ts +1 -0
- package/state/reducers/injection-tokens/reducers.token.d.ts +10 -0
- package/state/reducers/public_api.d.ts +3 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { StoreModule } from '@ngrx/store';
|
|
3
|
-
import {
|
|
3
|
+
import { DAFF_PRODUCT_COMPOSITE_REDUCERS } from './reducers/injection-tokens/reducers.token';
|
|
4
|
+
import { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY } from './reducers/public_api';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@ngrx/store";
|
|
6
7
|
/**
|
|
@@ -11,14 +12,14 @@ export class DaffCompositeProductStateModule {
|
|
|
11
12
|
/** @nocollapse */ /** @nocollapse */ DaffCompositeProductStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
13
|
/** @nocollapse */ /** @nocollapse */ DaffCompositeProductStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, imports: [i1.StoreFeatureModule] });
|
|
13
14
|
/** @nocollapse */ /** @nocollapse */ DaffCompositeProductStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, imports: [[
|
|
14
|
-
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY,
|
|
15
|
+
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DAFF_PRODUCT_COMPOSITE_REDUCERS),
|
|
15
16
|
]] });
|
|
16
17
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, decorators: [{
|
|
17
18
|
type: NgModule,
|
|
18
19
|
args: [{
|
|
19
20
|
imports: [
|
|
20
|
-
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY,
|
|
21
|
+
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DAFF_PRODUCT_COMPOSITE_REDUCERS),
|
|
21
22
|
],
|
|
22
23
|
}]
|
|
23
24
|
}] });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLXByb2R1Y3Qtc3RhdGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9wcm9kdWN0LWNvbXBvc2l0ZS9zdGF0ZS9zcmMvY29tcG9zaXRlLXByb2R1Y3Qtc3RhdGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBRWpGOztHQUVHO0FBTUgsTUFBTSxPQUFPLCtCQUErQjs7a0tBQS9CLCtCQUErQjttS0FBL0IsK0JBQStCO21LQUEvQiwrQkFBK0IsWUFKakM7WUFDUCxXQUFXLENBQUMsVUFBVSxDQUFDLHdDQUF3QyxFQUFFLCtCQUErQixDQUFDO1NBQ2xHOzJGQUVVLCtCQUErQjtrQkFMM0MsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsV0FBVyxDQUFDLFVBQVUsQ0FBQyx3Q0FBd0MsRUFBRSwrQkFBK0IsQ0FBQztxQkFDbEc7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmVNb2R1bGUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7IERBRkZfUFJPRFVDVF9DT01QT1NJVEVfUkVEVUNFUlMgfSBmcm9tICcuL3JlZHVjZXJzL2luamVjdGlvbi10b2tlbnMvcmVkdWNlcnMudG9rZW4nO1xuaW1wb3J0IHsgREFGRl9DT01QT1NJVEVfUFJPRFVDVF9TVE9SRV9GRUFUVVJFX0tFWSB9IGZyb20gJy4vcmVkdWNlcnMvcHVibGljX2FwaSc7XG5cbi8qKlxuICogQSBtb2R1bGUgdGhhdCBwcm92aWRlcyB0aGUgZGVmYXVsdCByZWR1Y2VycyBhbmQgZWZmZWN0cyBmb3IgY29tcG9zaXRlIHByb2R1Y3QgcmVkdXggc3RhdGUuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBTdG9yZU1vZHVsZS5mb3JGZWF0dXJlKERBRkZfQ09NUE9TSVRFX1BST0RVQ1RfU1RPUkVfRkVBVFVSRV9LRVksIERBRkZfUFJPRFVDVF9DT01QT1NJVEVfUkVEVUNFUlMpLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEYWZmQ29tcG9zaXRlUHJvZHVjdFN0YXRlTW9kdWxlIHsgfVxuIl19
|
|
@@ -1,9 +1,92 @@
|
|
|
1
1
|
import { createEntityAdapter, } from '@ngrx/entity';
|
|
2
|
+
import { defaultMemoize } from '@ngrx/store';
|
|
3
|
+
import { DaffProductTypeEnum } from '@daffodil/product';
|
|
2
4
|
/**
|
|
3
5
|
* Composite Product Item Options Adapter for changing/overwriting entity state.
|
|
4
6
|
*/
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
export class DaffCompositeProductAppliedOptionsEntitiesAdapter {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* @docs-private
|
|
11
|
+
*/
|
|
12
|
+
this._adapter = createEntityAdapter();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Gets the initial entity state.
|
|
16
|
+
*/
|
|
17
|
+
getInitialState() {
|
|
18
|
+
return this._adapter.getInitialState();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the entity selectors.
|
|
22
|
+
*/
|
|
23
|
+
getSelectors() {
|
|
24
|
+
return this._adapter.getSelectors();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Upserts the given composite products into state.
|
|
28
|
+
*/
|
|
29
|
+
upsertProducts(state, ...products) {
|
|
30
|
+
return this._adapter.upsertMany(this.mapOptionsEntities(products), state);
|
|
31
|
+
}
|
|
32
|
+
;
|
|
33
|
+
/**
|
|
34
|
+
* Apply the specified option for the given composite product item.
|
|
35
|
+
*/
|
|
36
|
+
applyOption(state, productId, itemId, optionId, qty) {
|
|
37
|
+
return this._adapter.upsertOne({
|
|
38
|
+
id: productId,
|
|
39
|
+
items: {
|
|
40
|
+
...state.entities[productId].items,
|
|
41
|
+
[itemId]: {
|
|
42
|
+
value: optionId,
|
|
43
|
+
qty: qty ?? 1,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}, state);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @docs-private
|
|
50
|
+
*/
|
|
51
|
+
mapOptionsEntities(products) {
|
|
52
|
+
return products.filter(product => product.type === DaffProductTypeEnum.Composite)
|
|
53
|
+
.map(product => this.buildCompositeProductAppliedOptionsEntity(product));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @docs-private
|
|
57
|
+
*/
|
|
58
|
+
buildCompositeProductAppliedOptionsEntity(product) {
|
|
59
|
+
return {
|
|
60
|
+
id: product.id,
|
|
61
|
+
items: product.items.reduce((acc, item) => ({
|
|
62
|
+
...acc,
|
|
63
|
+
[item.id]: this.getDefaultOption(item),
|
|
64
|
+
}), {}),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Sets the default item option to the specified default option if it is in stock.
|
|
69
|
+
* Does not set a default option if a default is not specified.
|
|
70
|
+
* Does not set a default option but does set a default qty if the default is out of stock.
|
|
71
|
+
*
|
|
72
|
+
* @param item a DaffCompositeProductItem
|
|
73
|
+
* @docs-private
|
|
74
|
+
*/
|
|
75
|
+
getDefaultOption(item) {
|
|
76
|
+
const defaultOptionIndex = item.options.findIndex(option => option.is_default);
|
|
77
|
+
if (defaultOptionIndex > -1) {
|
|
78
|
+
return {
|
|
79
|
+
value: item.options[defaultOptionIndex].in_stock ? item.options[defaultOptionIndex].id : null,
|
|
80
|
+
qty: item.options[defaultOptionIndex].quantity,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return { value: null, qty: null };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Gets the composite product entity adapter singleton.
|
|
90
|
+
*/
|
|
91
|
+
export const daffCompositeProductAppliedOptionsEntitiesAdapter = defaultMemoize(() => new DaffCompositeProductAppliedOptionsEntitiesAdapter()).memoized;
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLXByb2R1Y3QtZW50aXRpZXMtcmVkdWNlci1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wcm9kdWN0LWNvbXBvc2l0ZS9zdGF0ZS9zcmMvcmVkdWNlcnMvY29tcG9zaXRlLXByb2R1Y3QtZW50aXRpZXMvY29tcG9zaXRlLXByb2R1Y3QtZW50aXRpZXMtcmVkdWNlci1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxtQkFBbUIsR0FFcEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVV4RDs7R0FFRztBQUNILE1BQU0sT0FBTyxpREFBaUQ7SUFBOUQ7UUFDRTs7V0FFRztRQUNLLGFBQVEsR0FBRyxtQkFBbUIsRUFBOEIsQ0FBQztJQXNGdkUsQ0FBQztJQXBGQzs7T0FFRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBUSxFQUFFLEdBQUcsUUFBZ0M7UUFDMUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUNqQyxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFBQSxDQUFDO0lBRUY7O09BRUc7SUFDSCxXQUFXLENBQUMsS0FBUSxFQUFFLFNBQXFDLEVBQUUsTUFBc0MsRUFBRSxRQUE4QyxFQUFFLEdBQVk7UUFDL0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDNUI7WUFDRSxFQUFFLEVBQUUsU0FBUztZQUNiLEtBQUssRUFBRTtnQkFDTCxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSztnQkFDbEMsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDUixLQUFLLEVBQUUsUUFBUTtvQkFDZixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7aUJBQ2Q7YUFDRjtTQUNGLEVBQ0QsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0IsQ0FBQyxRQUFnQztRQUN6RCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVMsQ0FBQzthQUM5RSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7O09BRUc7SUFDSyx5Q0FBeUMsQ0FBQyxPQUE2QjtRQUM3RSxPQUFPO1lBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUMsR0FBRyxHQUFHO2dCQUNOLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7YUFDdkMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUNSLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLGdCQUFnQixDQUFDLElBQThCO1FBQ3JELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0UsSUFBRyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUMxQixPQUFPO2dCQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM3RixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVE7YUFDL0MsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbkM7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlEQUFpRCxHQUE0RCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxpREFBaUQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlRW50aXR5QWRhcHRlcixcbiAgRW50aXR5U3RhdGUsXG59IGZyb20gJ0BuZ3J4L2VudGl0eSc7XG5pbXBvcnQgeyBkZWZhdWx0TWVtb2l6ZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuaW1wb3J0IHsgRGFmZlByb2R1Y3RUeXBlRW51bSB9IGZyb20gJ0BkYWZmb2RpbC9wcm9kdWN0JztcbmltcG9ydCB7XG4gIERhZmZDb21wb3NpdGVQcm9kdWN0LFxuICBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW0sXG4gIERhZmZDb21wb3NpdGVDb25maWd1cmF0aW9uSXRlbSxcbiAgRGFmZkNvbXBvc2l0ZVByb2R1Y3RJdGVtT3B0aW9uLFxufSBmcm9tICdAZGFmZm9kaWwvcHJvZHVjdC1jb21wb3NpdGUnO1xuXG5pbXBvcnQgeyBEYWZmQ29tcG9zaXRlUHJvZHVjdEVudGl0eSB9IGZyb20gJy4vY29tcG9zaXRlLXByb2R1Y3QtZW50aXR5JztcblxuLyoqXG4gKiBDb21wb3NpdGUgUHJvZHVjdCBJdGVtIE9wdGlvbnMgQWRhcHRlciBmb3IgY2hhbmdpbmcvb3ZlcndyaXRpbmcgZW50aXR5IHN0YXRlLlxuICovXG5leHBvcnQgY2xhc3MgRGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0aWVzQWRhcHRlcjxUIGV4dGVuZHMgRW50aXR5U3RhdGU8RGFmZkNvbXBvc2l0ZVByb2R1Y3RFbnRpdHk+ID0gRW50aXR5U3RhdGU8RGFmZkNvbXBvc2l0ZVByb2R1Y3RFbnRpdHk+PiB7XG4gIC8qKlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9hZGFwdGVyID0gY3JlYXRlRW50aXR5QWRhcHRlcjxEYWZmQ29tcG9zaXRlUHJvZHVjdEVudGl0eT4oKTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5pdGlhbCBlbnRpdHkgc3RhdGUuXG4gICAqL1xuICBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbnRpdHkgc2VsZWN0b3JzLlxuICAgKi9cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9hZGFwdGVyLmdldFNlbGVjdG9ycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwc2VydHMgdGhlIGdpdmVuIGNvbXBvc2l0ZSBwcm9kdWN0cyBpbnRvIHN0YXRlLlxuICAgKi9cbiAgdXBzZXJ0UHJvZHVjdHMoc3RhdGU6IFQsIC4uLnByb2R1Y3RzOiBEYWZmQ29tcG9zaXRlUHJvZHVjdFtdKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIudXBzZXJ0TWFueShcbiAgICAgIHRoaXMubWFwT3B0aW9uc0VudGl0aWVzKHByb2R1Y3RzKSxcbiAgICAgIHN0YXRlLFxuICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBzcGVjaWZpZWQgb3B0aW9uIGZvciB0aGUgZ2l2ZW4gY29tcG9zaXRlIHByb2R1Y3QgaXRlbS5cbiAgICovXG4gIGFwcGx5T3B0aW9uKHN0YXRlOiBULCBwcm9kdWN0SWQ6IERhZmZDb21wb3NpdGVQcm9kdWN0WydpZCddLCBpdGVtSWQ6IERhZmZDb21wb3NpdGVQcm9kdWN0SXRlbVsnaWQnXSwgb3B0aW9uSWQ6IERhZmZDb21wb3NpdGVQcm9kdWN0SXRlbU9wdGlvblsnaWQnXSwgcXR5PzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXIudXBzZXJ0T25lKFxuICAgICAge1xuICAgICAgICBpZDogcHJvZHVjdElkLFxuICAgICAgICBpdGVtczoge1xuICAgICAgICAgIC4uLnN0YXRlLmVudGl0aWVzW3Byb2R1Y3RJZF0uaXRlbXMsXG4gICAgICAgICAgW2l0ZW1JZF06IHtcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb25JZCxcbiAgICAgICAgICAgIHF0eTogcXR5ID8/IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzdGF0ZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgbWFwT3B0aW9uc0VudGl0aWVzKHByb2R1Y3RzOiBEYWZmQ29tcG9zaXRlUHJvZHVjdFtdKTogRGFmZkNvbXBvc2l0ZVByb2R1Y3RFbnRpdHlbXSB7XG4gICAgcmV0dXJuIHByb2R1Y3RzLmZpbHRlcihwcm9kdWN0ID0+IHByb2R1Y3QudHlwZSA9PT0gRGFmZlByb2R1Y3RUeXBlRW51bS5Db21wb3NpdGUpXG4gICAgICAubWFwKHByb2R1Y3QgPT4gdGhpcy5idWlsZENvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0eShwcm9kdWN0KSk7XG4gIH1cblxuICAvKipcbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZENvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0eShwcm9kdWN0OiBEYWZmQ29tcG9zaXRlUHJvZHVjdCk6IERhZmZDb21wb3NpdGVQcm9kdWN0RW50aXR5IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb2R1Y3QuaWQsXG4gICAgICBpdGVtczogcHJvZHVjdC5pdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBbaXRlbS5pZF06IHRoaXMuZ2V0RGVmYXVsdE9wdGlvbihpdGVtKSxcbiAgICAgIH0pLCB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkZWZhdWx0IGl0ZW0gb3B0aW9uIHRvIHRoZSBzcGVjaWZpZWQgZGVmYXVsdCBvcHRpb24gaWYgaXQgaXMgaW4gc3RvY2suXG4gICAqIERvZXMgbm90IHNldCBhIGRlZmF1bHQgb3B0aW9uIGlmIGEgZGVmYXVsdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKiBEb2VzIG5vdCBzZXQgYSBkZWZhdWx0IG9wdGlvbiBidXQgZG9lcyBzZXQgYSBkZWZhdWx0IHF0eSBpZiB0aGUgZGVmYXVsdCBpcyBvdXQgb2Ygc3RvY2suXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIGEgRGFmZkNvbXBvc2l0ZVByb2R1Y3RJdGVtXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0RGVmYXVsdE9wdGlvbihpdGVtOiBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW0pOiBEYWZmQ29tcG9zaXRlQ29uZmlndXJhdGlvbkl0ZW0ge1xuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25JbmRleCA9IGl0ZW0ub3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvbi5pc19kZWZhdWx0KTtcblxuICAgIGlmKGRlZmF1bHRPcHRpb25JbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogaXRlbS5vcHRpb25zW2RlZmF1bHRPcHRpb25JbmRleF0uaW5fc3RvY2sgPyBpdGVtLm9wdGlvbnNbZGVmYXVsdE9wdGlvbkluZGV4XS5pZCA6IG51bGwsXG4gICAgICAgIHF0eTogaXRlbS5vcHRpb25zW2RlZmF1bHRPcHRpb25JbmRleF0ucXVhbnRpdHksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogbnVsbCwgcXR5OiBudWxsIH07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29tcG9zaXRlIHByb2R1Y3QgZW50aXR5IGFkYXB0ZXIgc2luZ2xldG9uLlxuICovXG5leHBvcnQgY29uc3QgZGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0aWVzQWRhcHRlcjogKCkgPT4gRGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0aWVzQWRhcHRlciA9IGRlZmF1bHRNZW1vaXplKCgpID0+IG5ldyBEYWZmQ29tcG9zaXRlUHJvZHVjdEFwcGxpZWRPcHRpb25zRW50aXRpZXNBZGFwdGVyKCkpLm1lbW9pemVkO1xuIl19
|
package/esm2020/state/reducers/composite-product-entities/composite-product-entities.reducer.mjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { DaffProductTypeEnum, } from '@daffodil/product';
|
|
2
1
|
import { DaffProductPageActionTypes, DaffProductGridActionTypes, DaffBestSellersActionTypes, DaffProductActionTypes, } from '@daffodil/product/state';
|
|
3
2
|
import { DaffCompositeProductActionTypes, } from '../../actions/public_api';
|
|
4
3
|
import { daffCompositeProductAppliedOptionsEntitiesAdapter } from './composite-product-entities-reducer-adapter';
|
|
@@ -14,55 +13,14 @@ export function daffCompositeProductEntitiesReducer(state = daffCompositeProduct
|
|
|
14
13
|
switch (action.type) {
|
|
15
14
|
case DaffProductGridActionTypes.ProductGridLoadSuccessAction:
|
|
16
15
|
case DaffBestSellersActionTypes.BestSellersLoadSuccessAction:
|
|
17
|
-
return adapter.
|
|
16
|
+
return adapter.upsertProducts(state, ...action.payload);
|
|
18
17
|
case DaffProductActionTypes.ProductLoadSuccessAction:
|
|
19
18
|
case DaffProductPageActionTypes.ProductPageLoadSuccessAction:
|
|
20
|
-
return adapter.
|
|
19
|
+
return adapter.upsertProducts(state, ...action.payload.products);
|
|
21
20
|
case DaffCompositeProductActionTypes.CompositeProductApplyOptionAction:
|
|
22
|
-
return adapter.
|
|
23
|
-
id: action.id,
|
|
24
|
-
items: {
|
|
25
|
-
...state.entities[action.id].items,
|
|
26
|
-
[action.itemId]: {
|
|
27
|
-
value: action.optionId,
|
|
28
|
-
qty: action.qty ? action.qty : 1,
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
}, state);
|
|
21
|
+
return adapter.applyOption(state, action.id, action.itemId, action.optionId, action.qty);
|
|
32
22
|
default:
|
|
33
23
|
return state;
|
|
34
24
|
}
|
|
35
25
|
}
|
|
36
|
-
|
|
37
|
-
return products.filter(product => product.type === DaffProductTypeEnum.Composite)
|
|
38
|
-
.map(product => buildCompositeProductAppliedOptionsEntity(product));
|
|
39
|
-
}
|
|
40
|
-
function buildCompositeProductAppliedOptionsEntity(product) {
|
|
41
|
-
return {
|
|
42
|
-
id: product.id,
|
|
43
|
-
items: product.items.reduce((acc, item) => ({
|
|
44
|
-
...acc,
|
|
45
|
-
[item.id]: getDefaultOption(item),
|
|
46
|
-
}), {}),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Sets the default item option to the specified default option if it is in stock.
|
|
51
|
-
* Does not set a default option if a default is not specified.
|
|
52
|
-
* Does not set a default option but does set a default qty if the default is out of stock.
|
|
53
|
-
*
|
|
54
|
-
* @param item a DaffCompositeProductItem
|
|
55
|
-
*/
|
|
56
|
-
function getDefaultOption(item) {
|
|
57
|
-
const defaultOptionIndex = item.options.findIndex(option => option.is_default);
|
|
58
|
-
if (defaultOptionIndex > -1) {
|
|
59
|
-
return {
|
|
60
|
-
value: item.options[defaultOptionIndex].in_stock ? item.options[defaultOptionIndex].id : null,
|
|
61
|
-
qty: item.options[defaultOptionIndex].quantity,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
return { value: null, qty: null };
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLXByb2R1Y3QtZW50aXRpZXMucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcHJvZHVjdC1jb21wb3NpdGUvc3RhdGUvc3JjL3JlZHVjZXJzL2NvbXBvc2l0ZS1wcm9kdWN0LWVudGl0aWVzL2NvbXBvc2l0ZS1wcm9kdWN0LWVudGl0aWVzLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUVMLG1CQUFtQixHQUNwQixNQUFNLG1CQUFtQixDQUFDO0FBTTNCLE9BQU8sRUFFTCwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBSTFCLDBCQUEwQixFQUMxQixzQkFBc0IsR0FDdkIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBRUwsK0JBQStCLEdBQ2hDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlEQUFpRCxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFHakg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG1DQUFtQyxDQUNqRCxLQUFLLEdBQUcsaURBQWlELEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFDN0UsTUFBa0o7SUFDbEosTUFBTSxPQUFPLEdBQUcsaURBQWlELEVBQUUsQ0FBQztJQUNwRSxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDbkIsS0FBSywwQkFBMEIsQ0FBQyw0QkFBNEIsQ0FBQztRQUM3RCxLQUFLLDBCQUEwQixDQUFDLDRCQUE0QjtZQUMxRCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQ3ZCLGtCQUFrQixDQUFlLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFDaEQsS0FBSyxDQUNOLENBQUM7UUFDSixLQUFLLHNCQUFzQixDQUFDLHdCQUF3QixDQUFDO1FBQ3JELEtBQUssMEJBQTBCLENBQUMsNEJBQTRCO1lBQzFELE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FDdkIsa0JBQWtCLENBQWUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFDekQsS0FBSyxDQUNOLENBQUM7UUFDSixLQUFLLCtCQUErQixDQUFDLGlDQUFpQztZQUNwRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQ3RCO2dCQUNFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDYixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLO29CQUNsQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDZixLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVE7d0JBQ3RCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNqQztpQkFDRjthQUNGLEVBQ0QsS0FBSyxDQUNOLENBQUM7UUFDSjtZQUNFLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0gsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBZ0M7SUFDMUQsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7U0FDOUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMseUNBQXlDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsU0FBUyx5Q0FBeUMsQ0FBQyxPQUE2QjtJQUM5RSxPQUFPO1FBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ2QsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxQyxHQUFHLEdBQUc7WUFDTixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7U0FDbEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztLQUNSLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUE4QjtJQUN0RCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9FLElBQUcsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDMUIsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzdGLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUTtTQUMvQyxDQUFDO0tBQ0g7U0FBTTtRQUNMLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNuQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJ0BuZ3J4L2VudGl0eSc7XG5cbmltcG9ydCB7XG4gIERhZmZQcm9kdWN0LFxuICBEYWZmUHJvZHVjdFR5cGVFbnVtLFxufSBmcm9tICdAZGFmZm9kaWwvcHJvZHVjdCc7XG5pbXBvcnQge1xuICBEYWZmQ29tcG9zaXRlQ29uZmlndXJhdGlvbkl0ZW0sXG4gIERhZmZDb21wb3NpdGVQcm9kdWN0LFxuICBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW0sXG59IGZyb20gJ0BkYWZmb2RpbC9wcm9kdWN0LWNvbXBvc2l0ZSc7XG5pbXBvcnQge1xuICBEYWZmUHJvZHVjdFBhZ2VBY3Rpb25zLFxuICBEYWZmUHJvZHVjdFBhZ2VBY3Rpb25UeXBlcyxcbiAgRGFmZlByb2R1Y3RHcmlkQWN0aW9uVHlwZXMsXG4gIERhZmZQcm9kdWN0R3JpZEFjdGlvbnMsXG4gIERhZmZCZXN0U2VsbGVyc0FjdGlvbnMsXG4gIERhZmZQcm9kdWN0QWN0aW9ucyxcbiAgRGFmZkJlc3RTZWxsZXJzQWN0aW9uVHlwZXMsXG4gIERhZmZQcm9kdWN0QWN0aW9uVHlwZXMsXG59IGZyb20gJ0BkYWZmb2RpbC9wcm9kdWN0L3N0YXRlJztcblxuaW1wb3J0IHtcbiAgRGFmZkNvbXBvc2l0ZVByb2R1Y3RBY3Rpb25zLFxuICBEYWZmQ29tcG9zaXRlUHJvZHVjdEFjdGlvblR5cGVzLFxufSBmcm9tICcuLi8uLi9hY3Rpb25zL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgZGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0aWVzQWRhcHRlciB9IGZyb20gJy4vY29tcG9zaXRlLXByb2R1Y3QtZW50aXRpZXMtcmVkdWNlci1hZGFwdGVyJztcbmltcG9ydCB7IERhZmZDb21wb3NpdGVQcm9kdWN0RW50aXR5IH0gZnJvbSAnLi9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdHknO1xuXG4vKipcbiAqIFJlZHVjZXIgZnVuY3Rpb24gdGhhdCBjYXRjaGVzIGFjdGlvbnMgYW5kIGNoYW5nZXMvb3ZlcndyaXRlcyBjb21wb3NpdGUgcHJvZHVjdCBlbnRpdGllcyBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gc3RhdGUgY3VycmVudCBTdGF0ZSBvZiB0aGUgcmVkdXggc3RvcmVcbiAqIEBwYXJhbSBhY3Rpb24gUHJvZHVjdEdyaWQsIEJlc3RTZWxsZXJzLCBQcm9kdWN0LCBvciBDb21wb3NpdGUgUHJvZHVjdCBhY3Rpb25zXG4gKiBAcmV0dXJucyBQcm9kdWN0IGVudGl0aWVzIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYWZmQ29tcG9zaXRlUHJvZHVjdEVudGl0aWVzUmVkdWNlcjxUIGV4dGVuZHMgRGFmZlByb2R1Y3QsIFYgZXh0ZW5kcyBEYWZmQ29tcG9zaXRlUHJvZHVjdD4oXG4gIHN0YXRlID0gZGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0aWVzQWRhcHRlcigpLmdldEluaXRpYWxTdGF0ZSgpLFxuICBhY3Rpb246IERhZmZQcm9kdWN0R3JpZEFjdGlvbnM8VD4gfCBEYWZmQmVzdFNlbGxlcnNBY3Rpb25zPFQ+IHwgRGFmZlByb2R1Y3RBY3Rpb25zPFQ+IHwgRGFmZlByb2R1Y3RQYWdlQWN0aW9uczxUPiB8IERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uczxWPik6IEVudGl0eVN0YXRlPERhZmZDb21wb3NpdGVQcm9kdWN0RW50aXR5PiB7XG4gIGNvbnN0IGFkYXB0ZXIgPSBkYWZmQ29tcG9zaXRlUHJvZHVjdEFwcGxpZWRPcHRpb25zRW50aXRpZXNBZGFwdGVyKCk7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIERhZmZQcm9kdWN0R3JpZEFjdGlvblR5cGVzLlByb2R1Y3RHcmlkTG9hZFN1Y2Nlc3NBY3Rpb246XG4gICAgY2FzZSBEYWZmQmVzdFNlbGxlcnNBY3Rpb25UeXBlcy5CZXN0U2VsbGVyc0xvYWRTdWNjZXNzQWN0aW9uOlxuICAgICAgcmV0dXJuIGFkYXB0ZXIudXBzZXJ0TWFueShcbiAgICAgICAgbWFwT3B0aW9uc0VudGl0aWVzKDxWW10+PHVua25vd24+YWN0aW9uLnBheWxvYWQpLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICk7XG4gICAgY2FzZSBEYWZmUHJvZHVjdEFjdGlvblR5cGVzLlByb2R1Y3RMb2FkU3VjY2Vzc0FjdGlvbjpcbiAgICBjYXNlIERhZmZQcm9kdWN0UGFnZUFjdGlvblR5cGVzLlByb2R1Y3RQYWdlTG9hZFN1Y2Nlc3NBY3Rpb246XG4gICAgICByZXR1cm4gYWRhcHRlci51cHNlcnRNYW55KFxuICAgICAgICBtYXBPcHRpb25zRW50aXRpZXMoPFZbXT48dW5rbm93bj5hY3Rpb24ucGF5bG9hZC5wcm9kdWN0cyksXG4gICAgICAgIHN0YXRlLFxuICAgICAgKTtcbiAgICBjYXNlIERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uVHlwZXMuQ29tcG9zaXRlUHJvZHVjdEFwcGx5T3B0aW9uQWN0aW9uOlxuICAgICAgcmV0dXJuIGFkYXB0ZXIudXBzZXJ0T25lKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IGFjdGlvbi5pZCxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgLi4uc3RhdGUuZW50aXRpZXNbYWN0aW9uLmlkXS5pdGVtcyxcbiAgICAgICAgICAgIFthY3Rpb24uaXRlbUlkXToge1xuICAgICAgICAgICAgICB2YWx1ZTogYWN0aW9uLm9wdGlvbklkLFxuICAgICAgICAgICAgICBxdHk6IGFjdGlvbi5xdHkgPyBhY3Rpb24ucXR5IDogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGUsXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwT3B0aW9uc0VudGl0aWVzKHByb2R1Y3RzOiBEYWZmQ29tcG9zaXRlUHJvZHVjdFtdKTogRGFmZkNvbXBvc2l0ZVByb2R1Y3RFbnRpdHlbXSB7XG4gIHJldHVybiBwcm9kdWN0cy5maWx0ZXIocHJvZHVjdCA9PiBwcm9kdWN0LnR5cGUgPT09IERhZmZQcm9kdWN0VHlwZUVudW0uQ29tcG9zaXRlKVxuICAgIC5tYXAocHJvZHVjdCA9PiBidWlsZENvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0eShwcm9kdWN0KSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29tcG9zaXRlUHJvZHVjdEFwcGxpZWRPcHRpb25zRW50aXR5KHByb2R1Y3Q6IERhZmZDb21wb3NpdGVQcm9kdWN0KTogRGFmZkNvbXBvc2l0ZVByb2R1Y3RFbnRpdHkge1xuICByZXR1cm4ge1xuICAgIGlkOiBwcm9kdWN0LmlkLFxuICAgIGl0ZW1zOiBwcm9kdWN0Lml0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiAoe1xuICAgICAgLi4uYWNjLFxuICAgICAgW2l0ZW0uaWRdOiBnZXREZWZhdWx0T3B0aW9uKGl0ZW0pLFxuICAgIH0pLCB7fSksXG4gIH07XG59XG5cbi8qKlxuICogU2V0cyB0aGUgZGVmYXVsdCBpdGVtIG9wdGlvbiB0byB0aGUgc3BlY2lmaWVkIGRlZmF1bHQgb3B0aW9uIGlmIGl0IGlzIGluIHN0b2NrLlxuICogRG9lcyBub3Qgc2V0IGEgZGVmYXVsdCBvcHRpb24gaWYgYSBkZWZhdWx0IGlzIG5vdCBzcGVjaWZpZWQuXG4gKiBEb2VzIG5vdCBzZXQgYSBkZWZhdWx0IG9wdGlvbiBidXQgZG9lcyBzZXQgYSBkZWZhdWx0IHF0eSBpZiB0aGUgZGVmYXVsdCBpcyBvdXQgb2Ygc3RvY2suXG4gKlxuICogQHBhcmFtIGl0ZW0gYSBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbihpdGVtOiBEYWZmQ29tcG9zaXRlUHJvZHVjdEl0ZW0pOiBEYWZmQ29tcG9zaXRlQ29uZmlndXJhdGlvbkl0ZW0ge1xuICBjb25zdCBkZWZhdWx0T3B0aW9uSW5kZXggPSBpdGVtLm9wdGlvbnMuZmluZEluZGV4KG9wdGlvbiA9PiBvcHRpb24uaXNfZGVmYXVsdCk7XG5cbiAgaWYoZGVmYXVsdE9wdGlvbkluZGV4ID4gLTEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGl0ZW0ub3B0aW9uc1tkZWZhdWx0T3B0aW9uSW5kZXhdLmluX3N0b2NrID8gaXRlbS5vcHRpb25zW2RlZmF1bHRPcHRpb25JbmRleF0uaWQgOiBudWxsLFxuICAgICAgcXR5OiBpdGVtLm9wdGlvbnNbZGVmYXVsdE9wdGlvbkluZGV4XS5xdWFudGl0eSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IHZhbHVlOiBudWxsLCBxdHk6IG51bGwgfTtcbiAgfVxufVxuIl19
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLXByb2R1Y3QtZW50aXRpZXMucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcHJvZHVjdC1jb21wb3NpdGUvc3RhdGUvc3JjL3JlZHVjZXJzL2NvbXBvc2l0ZS1wcm9kdWN0LWVudGl0aWVzL2NvbXBvc2l0ZS1wcm9kdWN0LWVudGl0aWVzLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUVMLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFJMUIsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUN2QixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFFTCwrQkFBK0IsR0FDaEMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaURBQWlELEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUdqSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUNBQW1DLENBQ2pELEtBQUssR0FBRyxpREFBaUQsRUFBRSxDQUFDLGVBQWUsRUFBRSxFQUM3RSxNQUFrSjtJQUNsSixNQUFNLE9BQU8sR0FBRyxpREFBaUQsRUFBRSxDQUFDO0lBQ3BFLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNuQixLQUFLLDBCQUEwQixDQUFDLDRCQUE0QixDQUFDO1FBQzdELEtBQUssMEJBQTBCLENBQUMsNEJBQTRCO1lBQzFELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBa0IsTUFBTSxDQUFDLE9BQVEsQ0FBQyxDQUFDO1FBRTFFLEtBQUssc0JBQXNCLENBQUMsd0JBQXdCLENBQUM7UUFDckQsS0FBSywwQkFBMEIsQ0FBQyw0QkFBNEI7WUFDMUQsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFrQixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVMsQ0FBQyxDQUFDO1FBRW5GLEtBQUssK0JBQStCLENBQUMsaUNBQWlDO1lBQ3BFLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNGO1lBQ0UsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5U3RhdGUgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xuXG5pbXBvcnQgeyBEYWZmUHJvZHVjdCB9IGZyb20gJ0BkYWZmb2RpbC9wcm9kdWN0JztcbmltcG9ydCB7IERhZmZDb21wb3NpdGVQcm9kdWN0IH0gZnJvbSAnQGRhZmZvZGlsL3Byb2R1Y3QtY29tcG9zaXRlJztcbmltcG9ydCB7XG4gIERhZmZQcm9kdWN0UGFnZUFjdGlvbnMsXG4gIERhZmZQcm9kdWN0UGFnZUFjdGlvblR5cGVzLFxuICBEYWZmUHJvZHVjdEdyaWRBY3Rpb25UeXBlcyxcbiAgRGFmZlByb2R1Y3RHcmlkQWN0aW9ucyxcbiAgRGFmZkJlc3RTZWxsZXJzQWN0aW9ucyxcbiAgRGFmZlByb2R1Y3RBY3Rpb25zLFxuICBEYWZmQmVzdFNlbGxlcnNBY3Rpb25UeXBlcyxcbiAgRGFmZlByb2R1Y3RBY3Rpb25UeXBlcyxcbn0gZnJvbSAnQGRhZmZvZGlsL3Byb2R1Y3Qvc3RhdGUnO1xuXG5pbXBvcnQge1xuICBEYWZmQ29tcG9zaXRlUHJvZHVjdEFjdGlvbnMsXG4gIERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uVHlwZXMsXG59IGZyb20gJy4uLy4uL2FjdGlvbnMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBkYWZmQ29tcG9zaXRlUHJvZHVjdEFwcGxpZWRPcHRpb25zRW50aXRpZXNBZGFwdGVyIH0gZnJvbSAnLi9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdGllcy1yZWR1Y2VyLWFkYXB0ZXInO1xuaW1wb3J0IHsgRGFmZkNvbXBvc2l0ZVByb2R1Y3RFbnRpdHkgfSBmcm9tICcuL2NvbXBvc2l0ZS1wcm9kdWN0LWVudGl0eSc7XG5cbi8qKlxuICogUmVkdWNlciBmdW5jdGlvbiB0aGF0IGNhdGNoZXMgYWN0aW9ucyBhbmQgY2hhbmdlcy9vdmVyd3JpdGVzIGNvbXBvc2l0ZSBwcm9kdWN0IGVudGl0aWVzIHN0YXRlLlxuICpcbiAqIEBwYXJhbSBzdGF0ZSBjdXJyZW50IFN0YXRlIG9mIHRoZSByZWR1eCBzdG9yZVxuICogQHBhcmFtIGFjdGlvbiBQcm9kdWN0R3JpZCwgQmVzdFNlbGxlcnMsIFByb2R1Y3QsIG9yIENvbXBvc2l0ZSBQcm9kdWN0IGFjdGlvbnNcbiAqIEByZXR1cm5zIFByb2R1Y3QgZW50aXRpZXMgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhZmZDb21wb3NpdGVQcm9kdWN0RW50aXRpZXNSZWR1Y2VyPFQgZXh0ZW5kcyBEYWZmUHJvZHVjdCwgViBleHRlbmRzIERhZmZDb21wb3NpdGVQcm9kdWN0PihcbiAgc3RhdGUgPSBkYWZmQ29tcG9zaXRlUHJvZHVjdEFwcGxpZWRPcHRpb25zRW50aXRpZXNBZGFwdGVyKCkuZ2V0SW5pdGlhbFN0YXRlKCksXG4gIGFjdGlvbjogRGFmZlByb2R1Y3RHcmlkQWN0aW9uczxUPiB8IERhZmZCZXN0U2VsbGVyc0FjdGlvbnM8VD4gfCBEYWZmUHJvZHVjdEFjdGlvbnM8VD4gfCBEYWZmUHJvZHVjdFBhZ2VBY3Rpb25zPFQ+IHwgRGFmZkNvbXBvc2l0ZVByb2R1Y3RBY3Rpb25zPFY+KTogRW50aXR5U3RhdGU8RGFmZkNvbXBvc2l0ZVByb2R1Y3RFbnRpdHk+IHtcbiAgY29uc3QgYWRhcHRlciA9IGRhZmZDb21wb3NpdGVQcm9kdWN0QXBwbGllZE9wdGlvbnNFbnRpdGllc0FkYXB0ZXIoKTtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgRGFmZlByb2R1Y3RHcmlkQWN0aW9uVHlwZXMuUHJvZHVjdEdyaWRMb2FkU3VjY2Vzc0FjdGlvbjpcbiAgICBjYXNlIERhZmZCZXN0U2VsbGVyc0FjdGlvblR5cGVzLkJlc3RTZWxsZXJzTG9hZFN1Y2Nlc3NBY3Rpb246XG4gICAgICByZXR1cm4gYWRhcHRlci51cHNlcnRQcm9kdWN0cyhzdGF0ZSwgLi4uKDxWW10+PHVua25vd24+YWN0aW9uLnBheWxvYWQpKTtcblxuICAgIGNhc2UgRGFmZlByb2R1Y3RBY3Rpb25UeXBlcy5Qcm9kdWN0TG9hZFN1Y2Nlc3NBY3Rpb246XG4gICAgY2FzZSBEYWZmUHJvZHVjdFBhZ2VBY3Rpb25UeXBlcy5Qcm9kdWN0UGFnZUxvYWRTdWNjZXNzQWN0aW9uOlxuICAgICAgcmV0dXJuIGFkYXB0ZXIudXBzZXJ0UHJvZHVjdHMoc3RhdGUsIC4uLig8VltdPjx1bmtub3duPmFjdGlvbi5wYXlsb2FkLnByb2R1Y3RzKSk7XG5cbiAgICBjYXNlIERhZmZDb21wb3NpdGVQcm9kdWN0QWN0aW9uVHlwZXMuQ29tcG9zaXRlUHJvZHVjdEFwcGx5T3B0aW9uQWN0aW9uOlxuICAgICAgcmV0dXJuIGFkYXB0ZXIuYXBwbHlPcHRpb24oc3RhdGUsIGFjdGlvbi5pZCwgYWN0aW9uLml0ZW1JZCwgYWN0aW9uLm9wdGlvbklkLCBhY3Rpb24ucXR5KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { InjectionToken, } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* A token to hold the injectable extra reducers.
|
|
4
|
+
*
|
|
5
|
+
* Prefer using {@link daffProductCompositeProvideExtraReducers}.
|
|
6
|
+
*/
|
|
7
|
+
export const DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS = new InjectionToken('DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS', { factory: () => [] });
|
|
8
|
+
/**
|
|
9
|
+
* Provides additional reducers that run after the standard Daffodil cart reducers.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* providers: [
|
|
13
|
+
* ...daffProductCompositeProvideExtraReducers(
|
|
14
|
+
* myReducer1,
|
|
15
|
+
* myReducer2
|
|
16
|
+
* )
|
|
17
|
+
* ]
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function daffProductCompositeProvideExtraReducers(...reducers) {
|
|
21
|
+
return reducers.map(reducer => ({
|
|
22
|
+
provide: DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS,
|
|
23
|
+
useValue: reducer,
|
|
24
|
+
multi: true,
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmEudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Byb2R1Y3QtY29tcG9zaXRlL3N0YXRlL3NyYy9yZWR1Y2Vycy9pbmplY3Rpb24tdG9rZW5zL2V4dHJhLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEdBRWYsTUFBTSxlQUFlLENBQUM7QUFLdkI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLElBQUksY0FBYyxDQUNyRSx1Q0FBdUMsRUFDdkMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFDLENBQ3JCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSx3Q0FBd0MsQ0FDdEQsR0FBRyxRQUFxRTtJQUV4RSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sRUFBRSxxQ0FBcUM7UUFDOUMsUUFBUSxFQUFFLE9BQU87UUFDakIsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3Rpb25Ub2tlbixcbiAgUHJvdmlkZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uUmVkdWNlciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuaW1wb3J0IHsgRGFmZkNvbXBvc2l0ZVByb2R1Y3RSZWR1Y2Vyc1N0YXRlIH0gZnJvbSAnLi4vY29tcG9zaXRlLXByb2R1Y3QtcmVkdWNlcnMtc3RhdGUuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBIHRva2VuIHRvIGhvbGQgdGhlIGluamVjdGFibGUgZXh0cmEgcmVkdWNlcnMuXG4gKlxuICogUHJlZmVyIHVzaW5nIHtAbGluayBkYWZmUHJvZHVjdENvbXBvc2l0ZVByb3ZpZGVFeHRyYVJlZHVjZXJzfS5cbiAqL1xuZXhwb3J0IGNvbnN0IERBRkZfUFJPRFVDVF9DT01QT1NJVEVfRVhUUkFfUkVEVUNFUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QWN0aW9uUmVkdWNlcjxEYWZmQ29tcG9zaXRlUHJvZHVjdFJlZHVjZXJzU3RhdGU+W10+KFxuICAnREFGRl9QUk9EVUNUX0NPTVBPU0lURV9FWFRSQV9SRURVQ0VSUycsXG4gIHsgZmFjdG9yeTogKCkgPT4gW119LFxuKTtcblxuLyoqXG4gKiBQcm92aWRlcyBhZGRpdGlvbmFsIHJlZHVjZXJzIHRoYXQgcnVuIGFmdGVyIHRoZSBzdGFuZGFyZCBEYWZmb2RpbCBjYXJ0IHJlZHVjZXJzLlxuICpcbiAqIGBgYHRzXG4gKiBwcm92aWRlcnM6IFtcbiAqICAgLi4uZGFmZlByb2R1Y3RDb21wb3NpdGVQcm92aWRlRXh0cmFSZWR1Y2VycyhcbiAqICAgICBteVJlZHVjZXIxLFxuICogICAgIG15UmVkdWNlcjJcbiAqICAgKVxuICogXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYWZmUHJvZHVjdENvbXBvc2l0ZVByb3ZpZGVFeHRyYVJlZHVjZXJzKFxuICAuLi5yZWR1Y2VyczogQWN0aW9uUmVkdWNlcjxQYXJ0aWFsPERhZmZDb21wb3NpdGVQcm9kdWN0UmVkdWNlcnNTdGF0ZT4+W11cbik6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gcmVkdWNlcnMubWFwKHJlZHVjZXIgPT4gKHtcbiAgICBwcm92aWRlOiBEQUZGX1BST0RVQ1RfQ09NUE9TSVRFX0VYVFJBX1JFRFVDRVJTLFxuICAgIHVzZVZhbHVlOiByZWR1Y2VyLFxuICAgIG11bHRpOiB0cnVlLFxuICB9KSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { daffProductCompositeProvideExtraReducers, DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS, } from './extra.token';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcHJvZHVjdC1jb21wb3NpdGUvc3RhdGUvc3JjL3JlZHVjZXJzL2luamVjdGlvbi10b2tlbnMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsd0NBQXdDLEVBQ3hDLHFDQUFxQyxHQUN0QyxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGRhZmZQcm9kdWN0Q29tcG9zaXRlUHJvdmlkZUV4dHJhUmVkdWNlcnMsXG4gIERBRkZfUFJPRFVDVF9DT01QT1NJVEVfRVhUUkFfUkVEVUNFUlMsXG59IGZyb20gJy4vZXh0cmEudG9rZW4nO1xuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { inject, InjectionToken, } from '@angular/core';
|
|
2
|
+
import { combineReducers, } from '@ngrx/store';
|
|
3
|
+
import { daffComposeReducers } from '@daffodil/core/state';
|
|
4
|
+
import { daffCompositeProductReducers } from '../composite-product-reducers';
|
|
5
|
+
import { DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS } from './extra.token';
|
|
6
|
+
/**
|
|
7
|
+
* An internal token to hold the Daffodil composite product reducers.
|
|
8
|
+
* Includes the extra and standard reducers.
|
|
9
|
+
*
|
|
10
|
+
* @docs-private
|
|
11
|
+
*/
|
|
12
|
+
export const DAFF_PRODUCT_COMPOSITE_REDUCERS = new InjectionToken('DAFF_PRODUCT_COMPOSITE_REDUCERS', {
|
|
13
|
+
factory: () => daffComposeReducers([
|
|
14
|
+
combineReducers(daffCompositeProductReducers),
|
|
15
|
+
...inject(DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS),
|
|
16
|
+
]),
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlcnMudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Byb2R1Y3QtY29tcG9zaXRlL3N0YXRlL3NyYy9yZWR1Y2Vycy9pbmplY3Rpb24tdG9rZW5zL3JlZHVjZXJzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxlQUFlLEdBQ2hCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTNELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLElBQUksY0FBYyxDQUMvRCxpQ0FBaUMsRUFDakM7SUFDRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7UUFDakMsZUFBZSxDQUFDLDRCQUE0QixDQUFDO1FBQzdDLEdBQUcsTUFBTSxDQUFDLHFDQUFxQyxDQUFDO0tBQ2pELENBQUM7Q0FDSCxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBpbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvblJlZHVjZXIsXG4gIGNvbWJpbmVSZWR1Y2Vycyxcbn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5pbXBvcnQgeyBkYWZmQ29tcG9zZVJlZHVjZXJzIH0gZnJvbSAnQGRhZmZvZGlsL2NvcmUvc3RhdGUnO1xuXG5pbXBvcnQgeyBkYWZmQ29tcG9zaXRlUHJvZHVjdFJlZHVjZXJzIH0gZnJvbSAnLi4vY29tcG9zaXRlLXByb2R1Y3QtcmVkdWNlcnMnO1xuaW1wb3J0IHsgRGFmZkNvbXBvc2l0ZVByb2R1Y3RSZWR1Y2Vyc1N0YXRlIH0gZnJvbSAnLi4vY29tcG9zaXRlLXByb2R1Y3QtcmVkdWNlcnMtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IERBRkZfUFJPRFVDVF9DT01QT1NJVEVfRVhUUkFfUkVEVUNFUlMgfSBmcm9tICcuL2V4dHJhLnRva2VuJztcblxuLyoqXG4gKiBBbiBpbnRlcm5hbCB0b2tlbiB0byBob2xkIHRoZSBEYWZmb2RpbCBjb21wb3NpdGUgcHJvZHVjdCByZWR1Y2Vycy5cbiAqIEluY2x1ZGVzIHRoZSBleHRyYSBhbmQgc3RhbmRhcmQgcmVkdWNlcnMuXG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgREFGRl9QUk9EVUNUX0NPTVBPU0lURV9SRURVQ0VSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBY3Rpb25SZWR1Y2VyPERhZmZDb21wb3NpdGVQcm9kdWN0UmVkdWNlcnNTdGF0ZT4+KFxuICAnREFGRl9QUk9EVUNUX0NPTVBPU0lURV9SRURVQ0VSUycsXG4gIHtcbiAgICBmYWN0b3J5OiAoKSA9PiBkYWZmQ29tcG9zZVJlZHVjZXJzKFtcbiAgICAgIGNvbWJpbmVSZWR1Y2VycyhkYWZmQ29tcG9zaXRlUHJvZHVjdFJlZHVjZXJzKSxcbiAgICAgIC4uLmluamVjdChEQUZGX1BST0RVQ1RfQ09NUE9TSVRFX0VYVFJBX1JFRFVDRVJTKSxcbiAgICBdKSxcbiAgfSxcbik7XG4iXX0=
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { daffCompositeProductReducers } from './composite-product-reducers';
|
|
2
|
+
export { daffCompositeProductAppliedOptionsEntitiesAdapter, DaffCompositeProductAppliedOptionsEntitiesAdapter, } from './composite-product-entities/composite-product-entities-reducer-adapter';
|
|
2
3
|
export { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY } from './composite-product-store-feature-key';
|
|
3
4
|
export * from './composite-product-entities/composite-product-entity';
|
|
4
|
-
|
|
5
|
+
export * from './injection-tokens/public_api';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcHJvZHVjdC1jb21wb3NpdGUvc3RhdGUvc3JjL3JlZHVjZXJzL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFNNUUsT0FBTyxFQUNMLGlEQUFpRCxFQUNqRCxpREFBaUQsR0FDbEQsTUFBTSx5RUFBeUUsQ0FBQztBQUNqRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRyxjQUFjLHVEQUF1RCxDQUFDO0FBRXRFLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkYWZmQ29tcG9zaXRlUHJvZHVjdFJlZHVjZXJzIH0gZnJvbSAnLi9jb21wb3NpdGUtcHJvZHVjdC1yZWR1Y2Vycyc7XG5leHBvcnQge1xuICBEYWZmQ29tcG9zaXRlUHJvZHVjdFJlZHVjZXJzU3RhdGUsXG4gIERhZmZDb21wb3NpdGVQcm9kdWN0U3RhdGVSb290U2xpY2UsXG59IGZyb20gJy4vY29tcG9zaXRlLXByb2R1Y3QtcmVkdWNlcnMtc3RhdGUuaW50ZXJmYWNlJztcbmV4cG9ydCB7IERhZmZDb21wb3NpdGVQcm9kdWN0RW50aXR5IH0gZnJvbSAnLi9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdGllcy9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdHknO1xuZXhwb3J0IHtcbiAgZGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0aWVzQWRhcHRlcixcbiAgRGFmZkNvbXBvc2l0ZVByb2R1Y3RBcHBsaWVkT3B0aW9uc0VudGl0aWVzQWRhcHRlcixcbn0gZnJvbSAnLi9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdGllcy9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdGllcy1yZWR1Y2VyLWFkYXB0ZXInO1xuZXhwb3J0IHsgREFGRl9DT01QT1NJVEVfUFJPRFVDVF9TVE9SRV9GRUFUVVJFX0tFWSB9IGZyb20gJy4vY29tcG9zaXRlLXByb2R1Y3Qtc3RvcmUtZmVhdHVyZS1rZXknO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdGllcy9jb21wb3NpdGUtcHJvZHVjdC1lbnRpdHknO1xuXG5leHBvcnQgKiBmcm9tICcuL2luamVjdGlvbi10b2tlbnMvcHVibGljX2FwaSc7XG4iXX0=
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, NgModule } from '@angular/core';
|
|
2
|
+
import { Injectable, InjectionToken, inject, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@ngrx/store';
|
|
4
|
-
import { createFeatureSelector, createSelector,
|
|
4
|
+
import { defaultMemoize, createFeatureSelector, createSelector, select, combineReducers, StoreModule } from '@ngrx/store';
|
|
5
5
|
import { DaffProductTypeEnum, productPriceRangeHasDiscount, productPriceRangeHasPriceRange } from '@daffodil/product';
|
|
6
6
|
import { getDaffProductEntitiesSelectors, DaffProductPageActionTypes, DaffProductActionTypes, DaffBestSellersActionTypes, DaffProductGridActionTypes } from '@daffodil/product/state';
|
|
7
7
|
import { createEntityAdapter } from '@ngrx/entity';
|
|
8
8
|
import { daffAdd, daffMultiply, daffSubtract, daffDivide } from '@daffodil/core';
|
|
9
|
+
import { daffComposeReducers } from '@daffodil/core/state';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Action types for Composite Product Actions.
|
|
@@ -34,10 +35,85 @@ class DaffCompositeProductApplyOption {
|
|
|
34
35
|
/**
|
|
35
36
|
* Composite Product Item Options Adapter for changing/overwriting entity state.
|
|
36
37
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
class DaffCompositeProductAppliedOptionsEntitiesAdapter {
|
|
39
|
+
constructor() {
|
|
40
|
+
/**
|
|
41
|
+
* @docs-private
|
|
42
|
+
*/
|
|
43
|
+
this._adapter = createEntityAdapter();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Gets the initial entity state.
|
|
47
|
+
*/
|
|
48
|
+
getInitialState() {
|
|
49
|
+
return this._adapter.getInitialState();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the entity selectors.
|
|
53
|
+
*/
|
|
54
|
+
getSelectors() {
|
|
55
|
+
return this._adapter.getSelectors();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Upserts the given composite products into state.
|
|
59
|
+
*/
|
|
60
|
+
upsertProducts(state, ...products) {
|
|
61
|
+
return this._adapter.upsertMany(this.mapOptionsEntities(products), state);
|
|
62
|
+
}
|
|
63
|
+
;
|
|
64
|
+
/**
|
|
65
|
+
* Apply the specified option for the given composite product item.
|
|
66
|
+
*/
|
|
67
|
+
applyOption(state, productId, itemId, optionId, qty) {
|
|
68
|
+
return this._adapter.upsertOne({
|
|
69
|
+
id: productId,
|
|
70
|
+
items: Object.assign(Object.assign({}, state.entities[productId].items), { [itemId]: {
|
|
71
|
+
value: optionId,
|
|
72
|
+
qty: qty !== null && qty !== void 0 ? qty : 1,
|
|
73
|
+
} }),
|
|
74
|
+
}, state);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @docs-private
|
|
78
|
+
*/
|
|
79
|
+
mapOptionsEntities(products) {
|
|
80
|
+
return products.filter(product => product.type === DaffProductTypeEnum.Composite)
|
|
81
|
+
.map(product => this.buildCompositeProductAppliedOptionsEntity(product));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @docs-private
|
|
85
|
+
*/
|
|
86
|
+
buildCompositeProductAppliedOptionsEntity(product) {
|
|
87
|
+
return {
|
|
88
|
+
id: product.id,
|
|
89
|
+
items: product.items.reduce((acc, item) => (Object.assign(Object.assign({}, acc), { [item.id]: this.getDefaultOption(item) })), {}),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Sets the default item option to the specified default option if it is in stock.
|
|
94
|
+
* Does not set a default option if a default is not specified.
|
|
95
|
+
* Does not set a default option but does set a default qty if the default is out of stock.
|
|
96
|
+
*
|
|
97
|
+
* @param item a DaffCompositeProductItem
|
|
98
|
+
* @docs-private
|
|
99
|
+
*/
|
|
100
|
+
getDefaultOption(item) {
|
|
101
|
+
const defaultOptionIndex = item.options.findIndex(option => option.is_default);
|
|
102
|
+
if (defaultOptionIndex > -1) {
|
|
103
|
+
return {
|
|
104
|
+
value: item.options[defaultOptionIndex].in_stock ? item.options[defaultOptionIndex].id : null,
|
|
105
|
+
qty: item.options[defaultOptionIndex].quantity,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
return { value: null, qty: null };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Gets the composite product entity adapter singleton.
|
|
115
|
+
*/
|
|
116
|
+
const daffCompositeProductAppliedOptionsEntitiesAdapter = defaultMemoize(() => new DaffCompositeProductAppliedOptionsEntitiesAdapter()).memoized;
|
|
41
117
|
|
|
42
118
|
const DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY = 'daffCompositeProduct';
|
|
43
119
|
|
|
@@ -330,51 +406,16 @@ function daffCompositeProductEntitiesReducer(state = daffCompositeProductApplied
|
|
|
330
406
|
switch (action.type) {
|
|
331
407
|
case DaffProductGridActionTypes.ProductGridLoadSuccessAction:
|
|
332
408
|
case DaffBestSellersActionTypes.BestSellersLoadSuccessAction:
|
|
333
|
-
return adapter.
|
|
409
|
+
return adapter.upsertProducts(state, ...action.payload);
|
|
334
410
|
case DaffProductActionTypes.ProductLoadSuccessAction:
|
|
335
411
|
case DaffProductPageActionTypes.ProductPageLoadSuccessAction:
|
|
336
|
-
return adapter.
|
|
412
|
+
return adapter.upsertProducts(state, ...action.payload.products);
|
|
337
413
|
case DaffCompositeProductActionTypes.CompositeProductApplyOptionAction:
|
|
338
|
-
return adapter.
|
|
339
|
-
id: action.id,
|
|
340
|
-
items: Object.assign(Object.assign({}, state.entities[action.id].items), { [action.itemId]: {
|
|
341
|
-
value: action.optionId,
|
|
342
|
-
qty: action.qty ? action.qty : 1,
|
|
343
|
-
} }),
|
|
344
|
-
}, state);
|
|
414
|
+
return adapter.applyOption(state, action.id, action.itemId, action.optionId, action.qty);
|
|
345
415
|
default:
|
|
346
416
|
return state;
|
|
347
417
|
}
|
|
348
418
|
}
|
|
349
|
-
function mapOptionsEntities(products) {
|
|
350
|
-
return products.filter(product => product.type === DaffProductTypeEnum.Composite)
|
|
351
|
-
.map(product => buildCompositeProductAppliedOptionsEntity(product));
|
|
352
|
-
}
|
|
353
|
-
function buildCompositeProductAppliedOptionsEntity(product) {
|
|
354
|
-
return {
|
|
355
|
-
id: product.id,
|
|
356
|
-
items: product.items.reduce((acc, item) => (Object.assign(Object.assign({}, acc), { [item.id]: getDefaultOption(item) })), {}),
|
|
357
|
-
};
|
|
358
|
-
}
|
|
359
|
-
/**
|
|
360
|
-
* Sets the default item option to the specified default option if it is in stock.
|
|
361
|
-
* Does not set a default option if a default is not specified.
|
|
362
|
-
* Does not set a default option but does set a default qty if the default is out of stock.
|
|
363
|
-
*
|
|
364
|
-
* @param item a DaffCompositeProductItem
|
|
365
|
-
*/
|
|
366
|
-
function getDefaultOption(item) {
|
|
367
|
-
const defaultOptionIndex = item.options.findIndex(option => option.is_default);
|
|
368
|
-
if (defaultOptionIndex > -1) {
|
|
369
|
-
return {
|
|
370
|
-
value: item.options[defaultOptionIndex].in_stock ? item.options[defaultOptionIndex].id : null,
|
|
371
|
-
qty: item.options[defaultOptionIndex].quantity,
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
else {
|
|
375
|
-
return { value: null, qty: null };
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
419
|
|
|
379
420
|
/**
|
|
380
421
|
* Returns state values from all composite product related reducers.
|
|
@@ -383,6 +424,45 @@ const daffCompositeProductReducers = {
|
|
|
383
424
|
compositeProductOptions: daffCompositeProductEntitiesReducer,
|
|
384
425
|
};
|
|
385
426
|
|
|
427
|
+
/**
|
|
428
|
+
* A token to hold the injectable extra reducers.
|
|
429
|
+
*
|
|
430
|
+
* Prefer using {@link daffProductCompositeProvideExtraReducers}.
|
|
431
|
+
*/
|
|
432
|
+
const DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS = new InjectionToken('DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS', { factory: () => [] });
|
|
433
|
+
/**
|
|
434
|
+
* Provides additional reducers that run after the standard Daffodil cart reducers.
|
|
435
|
+
*
|
|
436
|
+
* ```ts
|
|
437
|
+
* providers: [
|
|
438
|
+
* ...daffProductCompositeProvideExtraReducers(
|
|
439
|
+
* myReducer1,
|
|
440
|
+
* myReducer2
|
|
441
|
+
* )
|
|
442
|
+
* ]
|
|
443
|
+
* ```
|
|
444
|
+
*/
|
|
445
|
+
function daffProductCompositeProvideExtraReducers(...reducers) {
|
|
446
|
+
return reducers.map(reducer => ({
|
|
447
|
+
provide: DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS,
|
|
448
|
+
useValue: reducer,
|
|
449
|
+
multi: true,
|
|
450
|
+
}));
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* An internal token to hold the Daffodil composite product reducers.
|
|
455
|
+
* Includes the extra and standard reducers.
|
|
456
|
+
*
|
|
457
|
+
* @docs-private
|
|
458
|
+
*/
|
|
459
|
+
const DAFF_PRODUCT_COMPOSITE_REDUCERS = new InjectionToken('DAFF_PRODUCT_COMPOSITE_REDUCERS', {
|
|
460
|
+
factory: () => daffComposeReducers([
|
|
461
|
+
combineReducers(daffCompositeProductReducers),
|
|
462
|
+
...inject(DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS),
|
|
463
|
+
]),
|
|
464
|
+
});
|
|
465
|
+
|
|
386
466
|
/**
|
|
387
467
|
* A module that provides the default reducers and effects for composite product redux state.
|
|
388
468
|
*/
|
|
@@ -391,13 +471,13 @@ class DaffCompositeProductStateModule {
|
|
|
391
471
|
/** @nocollapse */ /** @nocollapse */ DaffCompositeProductStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
392
472
|
/** @nocollapse */ /** @nocollapse */ DaffCompositeProductStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, imports: [i1.StoreFeatureModule] });
|
|
393
473
|
/** @nocollapse */ /** @nocollapse */ DaffCompositeProductStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, imports: [[
|
|
394
|
-
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY,
|
|
474
|
+
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DAFF_PRODUCT_COMPOSITE_REDUCERS),
|
|
395
475
|
]] });
|
|
396
476
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DaffCompositeProductStateModule, decorators: [{
|
|
397
477
|
type: NgModule,
|
|
398
478
|
args: [{
|
|
399
479
|
imports: [
|
|
400
|
-
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY,
|
|
480
|
+
StoreModule.forFeature(DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DAFF_PRODUCT_COMPOSITE_REDUCERS),
|
|
401
481
|
],
|
|
402
482
|
}]
|
|
403
483
|
}] });
|
|
@@ -406,5 +486,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
|
|
|
406
486
|
* Generated bundle index. Do not edit.
|
|
407
487
|
*/
|
|
408
488
|
|
|
409
|
-
export { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DaffCompositeProductActionTypes, DaffCompositeProductApplyOption, DaffCompositeProductFacade, DaffCompositeProductStateModule, daffCompositeProductReducers, getDaffCompositeProductEntitiesSelectors, getDaffCompositeProductFeatureSelector, getDaffCompositeProductPriceSelectors, getDaffCompositeProductSelectors };
|
|
489
|
+
export { DAFF_COMPOSITE_PRODUCT_STORE_FEATURE_KEY, DAFF_PRODUCT_COMPOSITE_EXTRA_REDUCERS, DaffCompositeProductActionTypes, DaffCompositeProductAppliedOptionsEntitiesAdapter, DaffCompositeProductApplyOption, DaffCompositeProductFacade, DaffCompositeProductStateModule, daffCompositeProductAppliedOptionsEntitiesAdapter, daffCompositeProductReducers, daffProductCompositeProvideExtraReducers, getDaffCompositeProductEntitiesSelectors, getDaffCompositeProductFeatureSelector, getDaffCompositeProductPriceSelectors, getDaffCompositeProductSelectors };
|
|
410
490
|
//# sourceMappingURL=daffodil-product-composite-state.mjs.map
|