@spartacus/cart
Version:
`@spartacus/cart` is a package that you can include in your application, which allows you to use various cart features.
92 lines • 14.5 kB
JavaScript
import { Injectable, isDevMode } from '@angular/core';
import { forkJoin, from, of, Subject } from 'rxjs';
import { catchError, filter, switchMap, take, tap } from 'rxjs/operators';
import { OrderEntriesSource, ProductImportStatus, } from '@spartacus/storefront';
import * as i0 from "@angular/core";
import * as i1 from "../facade/quick-order.facade";
import * as i2 from "@spartacus/core";
export 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: i1.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: i1.QuickOrderFacade }, { type: i2.ProductConnector }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2stb3JkZXItb3JkZXItZW50cmllcy1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL2NhcnQvcXVpY2stb3JkZXIvcm9vdC9wYWdlcy9xdWljay1vcmRlci1vcmRlci1lbnRyaWVzLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFDTCxrQkFBa0IsRUFLbEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFNL0IsTUFBTSxPQUFPLDZCQUE2QjtJQUt4QyxZQUNZLGlCQUFtQyxFQUNuQyxnQkFBa0M7UUFEbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBSnJDLFNBQUksR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7SUFLNUMsQ0FBQztJQUVKLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsVUFBVSxDQUFDLFlBQTJCO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBRWxELFFBQVEsQ0FDTixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUNy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UUFBMkIsRUFDM0IsV0FBbUIsRUFDbkIsUUFBb0M7O1FBRXBDLElBQUksQ0FBQSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxLQUFLLDBDQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFLLHdCQUF3QixFQUFFO1lBQ2hFLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1osV0FBVztnQkFDWCxVQUFVLEVBQUUsbUJBQW1CLENBQUMsa0JBQWtCO2FBQ25ELENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLFNBQVMsRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxJQUFJLENBQ1YsZ0VBQWdFLEVBQ2hFLFFBQVEsQ0FDVCxDQUFDO2FBQ0g7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLFdBQVc7Z0JBQ1gsVUFBVSxFQUFFLG1CQUFtQixDQUFDLGFBQWE7YUFDOUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzswSEFqSFUsNkJBQTZCOzhIQUE3Qiw2QkFBNkIsY0FGNUIsTUFBTTsyRkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9yZGVyRW50cnksIFByb2R1Y3QsIFByb2R1Y3RDb25uZWN0b3IgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHtcbiAgT3JkZXJFbnRyaWVzU291cmNlLFxuICBHZXRPcmRlckVudHJpZXNDb250ZXh0LFxuICBBZGRPcmRlckVudHJpZXNDb250ZXh0LFxuICBQcm9kdWN0RGF0YSxcbiAgUHJvZHVjdEltcG9ydEluZm8sXG4gIFByb2R1Y3RJbXBvcnRTdGF0dXMsXG59IGZyb20gJ0BzcGFydGFjdXMvc3RvcmVmcm9udCc7XG5pbXBvcnQgeyBRdWlja09yZGVyRmFjYWRlIH0gZnJvbSAnLi4vZmFjYWRlL3F1aWNrLW9yZGVyLmZhY2FkZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBRdWlja09yZGVyT3JkZXJFbnRyaWVzQ29udGV4dFxuICBpbXBsZW1lbnRzIEFkZE9yZGVyRW50cmllc0NvbnRleHQsIEdldE9yZGVyRW50cmllc0NvbnRleHRcbntcbiAgcmVhZG9ubHkgdHlwZSA9IE9yZGVyRW50cmllc1NvdXJjZS5RVUlDS19PUkRFUjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcXVpY2tPcmRlclNlcnZpY2U6IFF1aWNrT3JkZXJGYWNhZGUsXG4gICAgcHJvdGVjdGVkIHByb2R1Y3RDb25uZWN0b3I6IFByb2R1Y3RDb25uZWN0b3JcbiAgKSB7fVxuXG4gIGdldEVudHJpZXMoKTogT2JzZXJ2YWJsZTxPcmRlckVudHJ5W10+IHtcbiAgICByZXR1cm4gdGhpcy5xdWlja09yZGVyU2VydmljZS5nZXRFbnRyaWVzKCk7XG4gIH1cblxuICBhZGRFbnRyaWVzKHByb2R1Y3RzRGF0YTogUHJvZHVjdERhdGFbXSk6IE9ic2VydmFibGU8UHJvZHVjdEltcG9ydEluZm8+IHtcbiAgICBjb25zdCByZXN1bHRzJCA9IG5ldyBTdWJqZWN0PFByb2R1Y3RJbXBvcnRJbmZvPigpO1xuXG4gICAgZm9ya0pvaW4oXG4gICAgICBwcm9kdWN0c0RhdGEubWFwKChwcm9kdWN0RGF0YSkgPT5cbiAgICAgICAgdGhpcy5wcm9kdWN0Q29ubmVjdG9yLmdldChwcm9kdWN0RGF0YS5wcm9kdWN0Q29kZSkucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMocmVzcG9uc2UsIHByb2R1Y3REYXRhLnByb2R1Y3RDb2RlLCByZXN1bHRzJCk7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHByb2R1Y3RzKSA9PlxuICAgICAgICAgIGZyb20ocHJvZHVjdHMgYXMgUHJvZHVjdFtdKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChwcm9kdWN0KSA9PiAhIXByb2R1Y3QpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKChwcm9kdWN0OiBQcm9kdWN0KSA9PlxuICAgICAgICAgICAgICB0aGlzLnF1aWNrT3JkZXJTZXJ2aWNlLmNhbkFkZChwcm9kdWN0LmNvZGUpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICB0YXAoKGNhbkFkZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdERhdGEgPSBwcm9kdWN0c0RhdGEuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHAucHJvZHVjdENvZGUgPT09IHByb2R1Y3QuY29kZVxuICAgICAgICAgICAgICAgICAgKSBhcyBQcm9kdWN0RGF0YTtcbiAgICAgICAgICAgICAgICAgIGlmIChjYW5BZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXN1bHRzKHByb2R1Y3QsIHByb2R1Y3REYXRhLCByZXN1bHRzJCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tPcmRlclNlcnZpY2UuYWRkUHJvZHVjdChcbiAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0LFxuICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3REYXRhLnF1YW50aXR5XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzJC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogcHJvZHVjdERhdGEucHJvZHVjdENvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogUHJvZHVjdEltcG9ydFN0YXR1cy5MSU1JVF9FWENFRURFRCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICAgIHJldHVybiByZXN1bHRzJC5waXBlKHRha2UocHJvZHVjdHNEYXRhLmxlbmd0aCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVJlc3VsdHMoXG4gICAgcHJvZHVjdDogUHJvZHVjdCxcbiAgICBwcm9kdWN0RGF0YTogUHJvZHVjdERhdGEsXG4gICAgcmVzdWx0cyQ6IFN1YmplY3Q8UHJvZHVjdEltcG9ydEluZm8+XG4gICkge1xuICAgIGlmIChcbiAgICAgIHByb2R1Y3Quc3RvY2s/LnN0b2NrTGV2ZWwgJiZcbiAgICAgIHByb2R1Y3REYXRhLnF1YW50aXR5ID49IHByb2R1Y3Quc3RvY2suc3RvY2tMZXZlbFxuICAgICkge1xuICAgICAgcmVzdWx0cyQubmV4dCh7XG4gICAgICAgIHByb2R1Y3RDb2RlOiBwcm9kdWN0RGF0YS5wcm9kdWN0Q29kZSxcbiAgICAgICAgcHJvZHVjdE5hbWU6IHByb2R1Y3Q/Lm5hbWUsXG4gICAgICAgIHN0YXR1c0NvZGU6IFByb2R1Y3RJbXBvcnRTdGF0dXMuTE9XX1NUT0NLLFxuICAgICAgICBxdWFudGl0eTogcHJvZHVjdERhdGEucXVhbnRpdHksXG4gICAgICAgIHF1YW50aXR5QWRkZWQ6IHByb2R1Y3Quc3RvY2suc3RvY2tMZXZlbCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocHJvZHVjdC5zdG9jaz8uc3RvY2tMZXZlbFN0YXR1cyA9PT0gJ291dE9mU3RvY2snKSB7XG4gICAgICByZXN1bHRzJC5uZXh0KHtcbiAgICAgICAgcHJvZHVjdENvZGU6IHByb2R1Y3REYXRhLnByb2R1Y3RDb2RlLFxuICAgICAgICBzdGF0dXNDb2RlOiBQcm9kdWN0SW1wb3J0U3RhdHVzLk5PX1NUT0NLLFxuICAgICAgICBwcm9kdWN0TmFtZTogcHJvZHVjdD8ubmFtZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzJC5uZXh0KHtcbiAgICAgICAgcHJvZHVjdENvZGU6IHByb2R1Y3REYXRhLnByb2R1Y3RDb2RlLFxuICAgICAgICBzdGF0dXNDb2RlOiBQcm9kdWN0SW1wb3J0U3RhdHVzLlNVQ0NFU1MsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRXJyb3JzKFxuICAgIHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSxcbiAgICBwcm9kdWN0Q29kZTogc3RyaW5nLFxuICAgIHJlc3VsdHMkOiBTdWJqZWN0PFByb2R1Y3RJbXBvcnRJbmZvPlxuICApIHtcbiAgICBpZiAocmVzcG9uc2U/LmVycm9yPy5lcnJvcnNbMF0udHlwZSA9PT0gJ1Vua25vd25JZGVudGlmaWVyRXJyb3InKSB7XG4gICAgICByZXN1bHRzJC5uZXh0KHtcbiAgICAgICAgcHJvZHVjdENvZGUsXG4gICAgICAgIHN0YXR1c0NvZGU6IFByb2R1Y3RJbXBvcnRTdGF0dXMuVU5LTk9XTl9JREVOVElGSUVSLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1VucmVjb2duaXplZCBjYXJ0IGFkZCBlbnRyeSBhY3Rpb24gdHlwZSB3aGlsZSBtYXBwaW5nIG1lc3NhZ2VzJyxcbiAgICAgICAgICByZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVzdWx0cyQubmV4dCh7XG4gICAgICAgIHByb2R1Y3RDb2RlLFxuICAgICAgICBzdGF0dXNDb2RlOiBQcm9kdWN0SW1wb3J0U3RhdHVzLlVOS05PV05fRVJST1IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==