UNPKG

@spartacus/checkout

Version:

Checkout feature library for Spartacus

74 lines 10.2 kB
import { HttpErrorResponse, } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { throwError } from 'rxjs'; import { catchError, switchMap, take } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@spartacus/core"; /** * Interceptor that handles "Cart not found" errors while a user is in a checkout step. * * When a user doing a checkout has a "Cart not found" error, he is redirected to checkout and the cart is reloaded. * If a "Cart not found" error happens and the user is not on checkout, this interceptor does not perform any actions. */ export class CheckoutCartInterceptor { constructor(routingService, multiCartService) { this.routingService = routingService; this.multiCartService = multiCartService; } intercept(request, next) { return this.routingService.getRouterState().pipe(take(1), switchMap((state) => { return next.handle(request).pipe(catchError((response) => { var _a; if (response instanceof HttpErrorResponse && this.isUserInCheckoutRoute((_a = state.state) === null || _a === void 0 ? void 0 : _a.semanticRoute)) { if (this.isCartNotFoundError(response)) { this.routingService.go({ cxRoute: 'cart' }); const cartCode = this.getCartIdFromError(response); if (cartCode) { this.multiCartService.reloadCart(cartCode); } } } return throwError(response); })); })); } /** * Returns true if the parameter semantic route is part of "checkout" * Checkout semantic routes: * checkout * checkoutPaymentType * CheckoutShippingAddress * checkoutDeliveryMode * checkoutPaymentDetails * checkoutReviewOrder * checkoutLogin * @param semanticRoute */ isUserInCheckoutRoute(semanticRoute) { var _a; return (_a = semanticRoute === null || semanticRoute === void 0 ? void 0 : semanticRoute.toLowerCase().startsWith('checkout')) !== null && _a !== void 0 ? _a : false; } /** * Checks of the error is for a cart not found, i.e. the cart doesn't exist anymore * * @param response */ isCartNotFoundError(response) { var _a, _b, _c, _d, _e, _f; return (response.status === 400 && ((_c = (_b = (_a = response.error) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.type) === 'CartError' && ((_f = (_e = (_d = response.error) === null || _d === void 0 ? void 0 : _d.errors) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.reason) === 'notFound'); } getCartIdFromError(response) { var _a, _b, _c; return (_c = (_b = (_a = response.error) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.subject; } } CheckoutCartInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutCartInterceptor, deps: [{ token: i1.RoutingService }, { token: i1.MultiCartService }], target: i0.ɵɵFactoryTarget.Injectable }); CheckoutCartInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutCartInterceptor, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CheckoutCartInterceptor, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.RoutingService }, { type: i1.MultiCartService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtY2FydC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2ZlYXR1cmUtbGlicy9jaGVja291dC9yb290L2h0dHAtaW50ZXJjZXB0b3JzL2NoZWNrb3V0LWNhcnQuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixHQUtsQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTdEOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUNZLGNBQThCLEVBQzlCLGdCQUFrQztRQURsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUMzQyxDQUFDO0lBRUosU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDL0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDOUIsVUFBVSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7O2dCQUMzQixJQUNFLFFBQVEsWUFBWSxpQkFBaUI7b0JBQ3JDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLGFBQWEsQ0FBQyxFQUN0RDtvQkFDQSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzt3QkFFNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNuRCxJQUFJLFFBQVEsRUFBRTs0QkFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3lCQUM1QztxQkFDRjtpQkFDRjtnQkFDRCxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNPLHFCQUFxQixDQUFDLGFBQXNCOztRQUNwRCxPQUFPLE1BQUEsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLG1DQUFJLEtBQUssQ0FBQztJQUN0RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLG1CQUFtQixDQUFDLFFBQTJCOztRQUN2RCxPQUFPLENBQ0wsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHO1lBQ3ZCLENBQUEsTUFBQSxNQUFBLE1BQUEsUUFBUSxDQUFDLEtBQUssMENBQUUsTUFBTSwwQ0FBRyxDQUFDLENBQUMsMENBQUUsSUFBSSxNQUFLLFdBQVc7WUFDakQsQ0FBQSxNQUFBLE1BQUEsTUFBQSxRQUFRLENBQUMsS0FBSywwQ0FBRSxNQUFNLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxNQUFNLE1BQUssVUFBVSxDQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVTLGtCQUFrQixDQUFDLFFBQTJCOztRQUN0RCxPQUFPLE1BQUEsTUFBQSxNQUFBLFFBQVEsQ0FBQyxLQUFLLDBDQUFFLE1BQU0sMENBQUcsQ0FBQyxDQUFDLDBDQUFFLE9BQU8sQ0FBQztJQUM5QyxDQUFDOztvSEFsRVUsdUJBQXVCO3dIQUF2Qix1QkFBdUIsY0FEVixNQUFNOzJGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE11bHRpQ2FydFNlcnZpY2UsIFJvdXRlclN0YXRlLCBSb3V0aW5nU2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgdGhhdCBoYW5kbGVzIFwiQ2FydCBub3QgZm91bmRcIiBlcnJvcnMgd2hpbGUgYSB1c2VyIGlzIGluIGEgY2hlY2tvdXQgc3RlcC5cbiAqXG4gKiBXaGVuIGEgdXNlciBkb2luZyBhIGNoZWNrb3V0IGhhcyBhIFwiQ2FydCBub3QgZm91bmRcIiBlcnJvciwgaGUgaXMgcmVkaXJlY3RlZCB0byBjaGVja291dCBhbmQgdGhlIGNhcnQgaXMgcmVsb2FkZWQuXG4gKiBJZiBhIFwiQ2FydCBub3QgZm91bmRcIiBlcnJvciBoYXBwZW5zIGFuZCB0aGUgdXNlciBpcyBub3Qgb24gY2hlY2tvdXQsIHRoaXMgaW50ZXJjZXB0b3IgZG9lcyBub3QgcGVyZm9ybSBhbnkgYWN0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDaGVja291dENhcnRJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG11bHRpQ2FydFNlcnZpY2U6IE11bHRpQ2FydFNlcnZpY2VcbiAgKSB7fVxuXG4gIGludGVyY2VwdChcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0aW5nU2VydmljZS5nZXRSb3V0ZXJTdGF0ZSgpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgc3dpdGNoTWFwKChzdGF0ZTogUm91dGVyU3RhdGUpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmXG4gICAgICAgICAgICAgIHRoaXMuaXNVc2VySW5DaGVja291dFJvdXRlKHN0YXRlLnN0YXRlPy5zZW1hbnRpY1JvdXRlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2FydE5vdEZvdW5kRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0aW5nU2VydmljZS5nbyh7IGN4Um91dGU6ICdjYXJ0JyB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcnRDb2RlID0gdGhpcy5nZXRDYXJ0SWRGcm9tRXJyb3IocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGlmIChjYXJ0Q29kZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aUNhcnRTZXJ2aWNlLnJlbG9hZENhcnQoY2FydENvZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IocmVzcG9uc2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJhbWV0ZXIgc2VtYW50aWMgcm91dGUgaXMgcGFydCBvZiBcImNoZWNrb3V0XCJcbiAgICogQ2hlY2tvdXQgc2VtYW50aWMgcm91dGVzOlxuICAgKiBjaGVja291dFxuICAgKiBjaGVja291dFBheW1lbnRUeXBlXG4gICAqIENoZWNrb3V0U2hpcHBpbmdBZGRyZXNzXG4gICAqIGNoZWNrb3V0RGVsaXZlcnlNb2RlXG4gICAqIGNoZWNrb3V0UGF5bWVudERldGFpbHNcbiAgICogY2hlY2tvdXRSZXZpZXdPcmRlclxuICAgKiBjaGVja291dExvZ2luXG4gICAqIEBwYXJhbSBzZW1hbnRpY1JvdXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNVc2VySW5DaGVja291dFJvdXRlKHNlbWFudGljUm91dGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2VtYW50aWNSb3V0ZT8udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjaGVja291dCcpID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBvZiB0aGUgZXJyb3IgaXMgZm9yIGEgY2FydCBub3QgZm91bmQsIGkuZS4gdGhlIGNhcnQgZG9lc24ndCBleGlzdCBhbnltb3JlXG4gICAqXG4gICAqIEBwYXJhbSByZXNwb25zZVxuICAgKi9cbiAgcHJvdGVjdGVkIGlzQ2FydE5vdEZvdW5kRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmXG4gICAgICByZXNwb25zZS5lcnJvcj8uZXJyb3JzPy5bMF0/LnR5cGUgPT09ICdDYXJ0RXJyb3InICYmXG4gICAgICByZXNwb25zZS5lcnJvcj8uZXJyb3JzPy5bMF0/LnJlYXNvbiA9PT0gJ25vdEZvdW5kJ1xuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FydElkRnJvbUVycm9yKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmVycm9yPy5lcnJvcnM/LlswXT8uc3ViamVjdDtcbiAgfVxufVxuIl19