@spartacus/core
Version:
Spartacus - the core framework
63 lines • 8.2 kB
JavaScript
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { META_REDUCERS } from '@ngrx/store';
import { tap } from 'rxjs/operators';
import { ConfigInitializerService } from '../config/config-initializer/config-initializer.service';
import { MultiCartStatePersistenceService } from './services/multi-cart-state-persistence.service';
import { activeCartInitialState } from './store/reducers/multi-cart.reducer';
import * as i0 from "@angular/core";
export function cartStatePersistenceFactory(cartStatePersistenceService, configInit) {
const result = () => configInit
.getStable('context')
.pipe(tap(() => {
cartStatePersistenceService.initSync();
}))
.toPromise();
return result;
}
/**
* Before `MultiCartStatePersistenceService` restores the active cart id `ActiveCartService`
* will use `current` cart instead of the one saved in browser. This meta reducer
* sets the value on store initialization to null cart which holds active cart loading
* until the data from storage is restored.
*/
export function uninitializeActiveCartMetaReducerFactory() {
const metaReducer = (reducer) => (state, action) => {
const newState = Object.assign({}, state);
if (action.type === '@ngrx/store/init') {
newState.cart = Object.assign(Object.assign({}, newState.cart), { active: activeCartInitialState });
}
return reducer(newState, action);
};
return metaReducer;
}
/**
* Complimentary module for cart to store cart id in browser storage.
* This makes it possible to work on the same anonymous cart even after page refresh.
*/
export class CartPersistenceModule {
static forRoot() {
return {
ngModule: CartPersistenceModule,
providers: [
{
provide: APP_INITIALIZER,
useFactory: cartStatePersistenceFactory,
deps: [MultiCartStatePersistenceService, ConfigInitializerService],
multi: true,
},
{
provide: META_REDUCERS,
useFactory: uninitializeActiveCartMetaReducerFactory,
multi: true,
},
],
};
}
}
CartPersistenceModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CartPersistenceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
CartPersistenceModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CartPersistenceModule });
CartPersistenceModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CartPersistenceModule });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CartPersistenceModule, decorators: [{
type: NgModule
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1wZXJzaXN0ZW5jZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9jYXJ0L2NhcnQtcGVyc2lzdGVuY2UubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQThCLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFFbkcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBRTdFLE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsMkJBQTZELEVBQzdELFVBQW9DO0lBRXBDLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUNsQixVQUFVO1NBQ1AsU0FBUyxDQUFDLFNBQVMsQ0FBQztTQUNwQixJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNQLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUNIO1NBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QztJQUN0RCxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQTJCLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JFLE1BQU0sUUFBUSxxQkFBUSxLQUFLLENBQUUsQ0FBQztRQUM5QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUU7WUFDdEMsUUFBUSxDQUFDLElBQUksbUNBQ1IsUUFBUSxDQUFDLElBQUksR0FDYixFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxDQUN0QyxDQUFDO1NBQ0g7UUFDRCxPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7R0FHRztBQUVILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLHFCQUFxQjtZQUMvQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFVBQVUsRUFBRSwyQkFBMkI7b0JBQ3ZDLElBQUksRUFBRSxDQUFDLGdDQUFnQyxFQUFFLHdCQUF3QixDQUFDO29CQUNsRSxLQUFLLEVBQUUsSUFBSTtpQkFDWjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsYUFBYTtvQkFDdEIsVUFBVSxFQUFFLHdDQUF3QztvQkFDcEQsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOztrSEFsQlUscUJBQXFCO21IQUFyQixxQkFBcUI7bUhBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uUmVkdWNlciwgTWV0YVJlZHVjZXIsIE1FVEFfUkVEVUNFUlMgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb25maWdJbml0aWFsaXplclNlcnZpY2UgfSBmcm9tICcuLi9jb25maWcvY29uZmlnLWluaXRpYWxpemVyL2NvbmZpZy1pbml0aWFsaXplci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb25maWctdG9rZW5zJztcbmltcG9ydCB7IE11bHRpQ2FydFN0YXRlUGVyc2lzdGVuY2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9tdWx0aS1jYXJ0LXN0YXRlLXBlcnNpc3RlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgYWN0aXZlQ2FydEluaXRpYWxTdGF0ZSB9IGZyb20gJy4vc3RvcmUvcmVkdWNlcnMvbXVsdGktY2FydC5yZWR1Y2VyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRTdGF0ZVBlcnNpc3RlbmNlRmFjdG9yeShcbiAgY2FydFN0YXRlUGVyc2lzdGVuY2VTZXJ2aWNlOiBNdWx0aUNhcnRTdGF0ZVBlcnNpc3RlbmNlU2VydmljZSxcbiAgY29uZmlnSW5pdDogQ29uZmlnSW5pdGlhbGl6ZXJTZXJ2aWNlXG4pOiAoKSA9PiBQcm9taXNlPENvbmZpZz4ge1xuICBjb25zdCByZXN1bHQgPSAoKSA9PlxuICAgIGNvbmZpZ0luaXRcbiAgICAgIC5nZXRTdGFibGUoJ2NvbnRleHQnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgY2FydFN0YXRlUGVyc2lzdGVuY2VTZXJ2aWNlLmluaXRTeW5jKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQmVmb3JlIGBNdWx0aUNhcnRTdGF0ZVBlcnNpc3RlbmNlU2VydmljZWAgcmVzdG9yZXMgdGhlIGFjdGl2ZSBjYXJ0IGlkIGBBY3RpdmVDYXJ0U2VydmljZWBcbiAqIHdpbGwgdXNlIGBjdXJyZW50YCBjYXJ0IGluc3RlYWQgb2YgdGhlIG9uZSBzYXZlZCBpbiBicm93c2VyLiBUaGlzIG1ldGEgcmVkdWNlclxuICogc2V0cyB0aGUgdmFsdWUgb24gc3RvcmUgaW5pdGlhbGl6YXRpb24gdG8gbnVsbCBjYXJ0IHdoaWNoIGhvbGRzIGFjdGl2ZSBjYXJ0IGxvYWRpbmdcbiAqIHVudGlsIHRoZSBkYXRhIGZyb20gc3RvcmFnZSBpcyByZXN0b3JlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW5pdGlhbGl6ZUFjdGl2ZUNhcnRNZXRhUmVkdWNlckZhY3RvcnkoKTogTWV0YVJlZHVjZXI8YW55PiB7XG4gIGNvbnN0IG1ldGFSZWR1Y2VyID0gKHJlZHVjZXI6IEFjdGlvblJlZHVjZXI8YW55PikgPT4gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdAbmdyeC9zdG9yZS9pbml0Jykge1xuICAgICAgbmV3U3RhdGUuY2FydCA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUuY2FydCxcbiAgICAgICAgLi4ueyBhY3RpdmU6IGFjdGl2ZUNhcnRJbml0aWFsU3RhdGUgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICB9O1xuICByZXR1cm4gbWV0YVJlZHVjZXI7XG59XG5cbi8qKlxuICogQ29tcGxpbWVudGFyeSBtb2R1bGUgZm9yIGNhcnQgdG8gc3RvcmUgY2FydCBpZCBpbiBicm93c2VyIHN0b3JhZ2UuXG4gKiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdvcmsgb24gdGhlIHNhbWUgYW5vbnltb3VzIGNhcnQgZXZlbiBhZnRlciBwYWdlIHJlZnJlc2guXG4gKi9cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgQ2FydFBlcnNpc3RlbmNlTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxDYXJ0UGVyc2lzdGVuY2VNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IENhcnRQZXJzaXN0ZW5jZU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGNhcnRTdGF0ZVBlcnNpc3RlbmNlRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbTXVsdGlDYXJ0U3RhdGVQZXJzaXN0ZW5jZVNlcnZpY2UsIENvbmZpZ0luaXRpYWxpemVyU2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBNRVRBX1JFRFVDRVJTLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IHVuaW5pdGlhbGl6ZUFjdGl2ZUNhcnRNZXRhUmVkdWNlckZhY3RvcnksXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==