@spartacus/cart
Version:
`@spartacus/cart` is a package that you can include in your application, which allows you to use various cart features.
239 lines (230 loc) • 10.8 kB
JavaScript
import * as i0 from '@angular/core';
import { Injectable, isDevMode, NgModule } from '@angular/core';
import * as i2 from '@spartacus/core';
import { Config, facadeFactory, provideDefaultConfigFactory, provideDefaultConfig } from '@spartacus/core';
import { Subject, forkJoin, of, from } from 'rxjs';
import { take, catchError, switchMap, filter, tap } from 'rxjs/operators';
import { OrderEntriesSource, ProductImportStatus, CmsPageGuard, PageLayoutComponent, ORDER_ENTRIES_CONTEXT } from '@spartacus/storefront';
import * as i1 from '@angular/router';
import { RouterModule } from '@angular/router';
const defaultQuickOrderConfig = {
quickOrder: {
searchForm: {
displayProductImages: true,
maxProducts: 5,
minCharactersBeforeRequest: 3,
},
},
};
class QuickOrderConfig {
}
QuickOrderConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
QuickOrderConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderConfig, providedIn: 'root', useExisting: Config });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderConfig, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
useExisting: Config,
}]
}] });
const CART_QUICK_ORDER_FEATURE = 'cartQuickOrder';
const CART_QUICK_ORDER_CORE_FEATURE = 'cartQuickOrderCore';
function quickOrderFacadeFactory() {
return facadeFactory({
facade: QuickOrderFacade,
feature: CART_QUICK_ORDER_CORE_FEATURE,
methods: [
'addProduct',
'addToCart',
'clearList',
'canAdd',
'setListLimit',
'getEntries',
'getProductAdded',
'loadEntries',
'softDeleteEntry',
'search',
'searchProducts',
'setProductAdded',
'updateEntryQuantity',
'getSoftDeletedEntries',
'restoreSoftDeletedEntry',
'hardDeleteEntry',
'clearDeletedEntries',
'getNonPurchasableProductError',
'setNonPurchasableProductError',
'clearNonPurchasableProductError',
],
});
}
class QuickOrderFacade {
}
QuickOrderFacade.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
QuickOrderFacade.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderFacade, providedIn: 'root', useFactory: quickOrderFacadeFactory });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderFacade, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
useFactory: quickOrderFacadeFactory,
}]
}] });
class QuickOrderOrderEntriesContext {
constructor(quickOrderService, productConnector) {
this.quickOrderService = quickOrderService;
this.productConnector = productConnector;
this.type = OrderEntriesSource.QUICK_ORDER;
}
getEntries() {
return this.quickOrderService.getEntries();
}
addEntries(productsData) {
const results$ = new Subject();
forkJoin(productsData.map((productData) => this.productConnector.get(productData.productCode).pipe(take(1), catchError((response) => {
this.handleErrors(response, productData.productCode, results$);
return of(null);
}))))
.pipe(switchMap((products) => from(products).pipe(filter((product) => !!product), switchMap((product) => this.quickOrderService.canAdd(product.code).pipe(take(1), tap((canAdd) => {
const productData = productsData.find((p) => p.productCode === product.code);
if (canAdd) {
this.handleResults(product, productData, results$);
this.quickOrderService.addProduct(product, productData.quantity);
}
else {
results$.next({
productCode: productData.productCode,
statusCode: ProductImportStatus.LIMIT_EXCEEDED,
});
}
}))))))
.subscribe();
return results$.pipe(take(productsData.length));
}
handleResults(product, productData, results$) {
var _a, _b;
if (((_a = product.stock) === null || _a === void 0 ? void 0 : _a.stockLevel) &&
productData.quantity >= product.stock.stockLevel) {
results$.next({
productCode: productData.productCode,
productName: product === null || product === void 0 ? void 0 : product.name,
statusCode: ProductImportStatus.LOW_STOCK,
quantity: productData.quantity,
quantityAdded: product.stock.stockLevel,
});
}
else if (((_b = product.stock) === null || _b === void 0 ? void 0 : _b.stockLevelStatus) === 'outOfStock') {
results$.next({
productCode: productData.productCode,
statusCode: ProductImportStatus.NO_STOCK,
productName: product === null || product === void 0 ? void 0 : product.name,
});
}
else {
results$.next({
productCode: productData.productCode,
statusCode: ProductImportStatus.SUCCESS,
});
}
}
handleErrors(response, productCode, results$) {
var _a;
if (((_a = response === null || response === void 0 ? void 0 : response.error) === null || _a === void 0 ? void 0 : _a.errors[0].type) === 'UnknownIdentifierError') {
results$.next({
productCode,
statusCode: ProductImportStatus.UNKNOWN_IDENTIFIER,
});
}
else {
if (isDevMode()) {
console.warn('Unrecognized cart add entry action type while mapping messages', response);
}
results$.next({
productCode,
statusCode: ProductImportStatus.UNKNOWN_ERROR,
});
}
}
}
QuickOrderOrderEntriesContext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderOrderEntriesContext, deps: [{ token: QuickOrderFacade }, { token: i2.ProductConnector }], target: i0.ɵɵFactoryTarget.Injectable });
QuickOrderOrderEntriesContext.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderOrderEntriesContext, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderOrderEntriesContext, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: QuickOrderFacade }, { type: i2.ProductConnector }]; } });
function defaultQuickOrderComponentsConfig() {
const config = {
featureModules: {
[CART_QUICK_ORDER_FEATURE]: {
cmsComponents: ['QuickOrderComponent', 'CartQuickOrderFormComponent'],
},
// by default core is bundled together with components
[CART_QUICK_ORDER_CORE_FEATURE]: CART_QUICK_ORDER_FEATURE,
},
};
return config;
}
const defaultQuickOrderRoutingConfig = {
routing: {
routes: {
quickOrder: {
paths: ['my-account/quick-order'],
},
},
},
};
class QuickOrderRootModule {
}
QuickOrderRootModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderRootModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
QuickOrderRootModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderRootModule, imports: [i1.RouterModule] });
QuickOrderRootModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderRootModule, providers: [
provideDefaultConfigFactory(defaultQuickOrderComponentsConfig),
provideDefaultConfig(defaultQuickOrderRoutingConfig),
provideDefaultConfig(defaultQuickOrderConfig),
], imports: [[
RouterModule.forChild([
{
// @ts-ignore
path: null,
canActivate: [CmsPageGuard],
component: PageLayoutComponent,
data: {
cxRoute: 'quickOrder',
cxContext: {
[ORDER_ENTRIES_CONTEXT]: QuickOrderOrderEntriesContext,
},
},
},
]),
]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: QuickOrderRootModule, decorators: [{
type: NgModule,
args: [{
imports: [
RouterModule.forChild([
{
// @ts-ignore
path: null,
canActivate: [CmsPageGuard],
component: PageLayoutComponent,
data: {
cxRoute: 'quickOrder',
cxContext: {
[ORDER_ENTRIES_CONTEXT]: QuickOrderOrderEntriesContext,
},
},
},
]),
],
providers: [
provideDefaultConfigFactory(defaultQuickOrderComponentsConfig),
provideDefaultConfig(defaultQuickOrderRoutingConfig),
provideDefaultConfig(defaultQuickOrderConfig),
],
}]
}] });
/**
* Generated bundle index. Do not edit.
*/
export { CART_QUICK_ORDER_CORE_FEATURE, CART_QUICK_ORDER_FEATURE, QuickOrderConfig, QuickOrderFacade, QuickOrderOrderEntriesContext, QuickOrderRootModule, defaultQuickOrderComponentsConfig, defaultQuickOrderConfig, defaultQuickOrderRoutingConfig, quickOrderFacadeFactory };
//# sourceMappingURL=spartacus-cart-quick-order-root.js.map