UNPKG

@spartacus/storefront

Version:

Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.

65 lines 10.1 kB
import { isDevMode } from '@angular/core'; import { ofType } from '@ngrx/effects'; import { CartActions } from '@spartacus/core'; import { filter, map, switchMap, take } from 'rxjs/operators'; import { ProductImportStatus, } from './import-to-cart.model'; /** * An abstract class for contexts based on cart (active cart, saved cart) which share part of logic - mainly handle cart actions and map results. */ export class CartOrderEntriesContext { constructor(actionsSubject) { this.actionsSubject = actionsSubject; } addEntries(products) { return this.add(products).pipe(switchMap((cartId) => this.getResults(cartId)), take(products.length)); } /** * Get emission of add entry results from actions subject * * @param {string} cartId * @returns {Observable<ProductImportInfo>} */ getResults(cartId) { return this.actionsSubject.pipe(ofType(CartActions.CART_ADD_ENTRY_SUCCESS, CartActions.CART_ADD_ENTRY_FAIL), filter((action) => action.payload.cartId === cartId), map((action) => this.mapMessages(action))); } /** * Map actions to summary messages * * @param {CartActions.CartAddEntrySuccess | CartActions.CartAddEntryFail} action * @returns ProductImportInfo */ mapMessages(action) { var _a, _b, _c; const { productCode } = action.payload; if (action instanceof CartActions.CartAddEntrySuccess) { const { quantity, quantityAdded, entry, statusCode } = action.payload; if (statusCode === ProductImportStatus.LOW_STOCK) { return { productCode, statusCode, productName: (_a = entry === null || entry === void 0 ? void 0 : entry.product) === null || _a === void 0 ? void 0 : _a.name, quantity, quantityAdded, }; } if (statusCode === ProductImportStatus.SUCCESS || statusCode === ProductImportStatus.NO_STOCK) { return { productCode, statusCode, productName: (_b = entry === null || entry === void 0 ? void 0 : entry.product) === null || _b === void 0 ? void 0 : _b.name }; } } else if (action instanceof CartActions.CartAddEntryFail) { const { error } = action.payload; if (((_c = error === null || error === void 0 ? void 0 : error.details[0]) === null || _c === void 0 ? void 0 : _c.type) === 'UnknownIdentifierError') { return { productCode, statusCode: ProductImportStatus.UNKNOWN_IDENTIFIER, }; } } if (isDevMode()) { console.warn('Unrecognized cart add entry action type while mapping messages', action); } return { productCode, statusCode: ProductImportStatus.UNKNOWN_ERROR }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1vcmRlci1lbnRyaWVzLmNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdG9yZWZyb250bGliL2Ntcy1jb21wb25lbnRzL2NhcnQvb3JkZXItZW50cmllcy1jb250ZXh0L2NhcnQtb3JkZXItZW50cmllcy5jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFHTCxtQkFBbUIsR0FDcEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQzs7R0FFRztBQUNILE1BQU0sT0FBZ0IsdUJBQXVCO0lBQzNDLFlBQWdDLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUFHLENBQUM7SUFFbEUsVUFBVSxDQUFDLFFBQXVCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUN0QixDQUFDO0lBQ0osQ0FBQztJQVVEOzs7OztPQUtHO0lBQ08sVUFBVSxDQUFDLE1BQWM7UUFDakMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDN0IsTUFBTSxDQUNKLFdBQVcsQ0FBQyxzQkFBc0IsRUFDbEMsV0FBVyxDQUFDLG1CQUFtQixDQUNoQyxFQUNELE1BQU0sQ0FDSixDQUNFLE1BQXNFLEVBQ3RFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQ3RDLEVBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxXQUFXLENBQ25CLE1BQXNFOztRQUV0RSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN2QyxJQUFJLE1BQU0sWUFBWSxXQUFXLENBQUMsbUJBQW1CLEVBQUU7WUFDckQsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDdEUsSUFBSSxVQUFVLEtBQUssbUJBQW1CLENBQUMsU0FBUyxFQUFFO2dCQUNoRCxPQUFPO29CQUNMLFdBQVc7b0JBQ1gsVUFBVTtvQkFDVixXQUFXLEVBQUUsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTywwQ0FBRSxJQUFJO29CQUNqQyxRQUFRO29CQUNSLGFBQWE7aUJBQ2QsQ0FBQzthQUNIO1lBQ0QsSUFDRSxVQUFVLEtBQUssbUJBQW1CLENBQUMsT0FBTztnQkFDMUMsVUFBVSxLQUFLLG1CQUFtQixDQUFDLFFBQVEsRUFDM0M7Z0JBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sMENBQUUsSUFBSSxFQUFFLENBQUM7YUFDdkU7U0FDRjthQUFNLElBQUksTUFBTSxZQUFZLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6RCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNqQyxJQUFJLENBQUEsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxJQUFJLE1BQUssd0JBQXdCLEVBQUU7Z0JBQ3hELE9BQU87b0JBQ0wsV0FBVztvQkFDWCxVQUFVLEVBQUUsbUJBQW1CLENBQUMsa0JBQWtCO2lCQUNuRCxDQUFDO2FBQ0g7U0FDRjtRQUNELElBQUksU0FBUyxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsSUFBSSxDQUNWLGdFQUFnRSxFQUNoRSxNQUFNLENBQ1AsQ0FBQztTQUNIO1FBQ0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IEFjdGlvbnNTdWJqZWN0IH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQ2FydEFjdGlvbnMgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIFByb2R1Y3REYXRhLFxuICBQcm9kdWN0SW1wb3J0SW5mbyxcbiAgUHJvZHVjdEltcG9ydFN0YXR1cyxcbn0gZnJvbSAnLi9pbXBvcnQtdG8tY2FydC5tb2RlbCc7XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgY2xhc3MgZm9yIGNvbnRleHRzIGJhc2VkIG9uIGNhcnQgKGFjdGl2ZSBjYXJ0LCBzYXZlZCBjYXJ0KSB3aGljaCBzaGFyZSBwYXJ0IG9mIGxvZ2ljIC0gbWFpbmx5IGhhbmRsZSBjYXJ0IGFjdGlvbnMgYW5kIG1hcCByZXN1bHRzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2FydE9yZGVyRW50cmllc0NvbnRleHQge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIGFjdGlvbnNTdWJqZWN0OiBBY3Rpb25zU3ViamVjdCkge31cblxuICBhZGRFbnRyaWVzKHByb2R1Y3RzOiBQcm9kdWN0RGF0YVtdKTogT2JzZXJ2YWJsZTxQcm9kdWN0SW1wb3J0SW5mbz4ge1xuICAgIHJldHVybiB0aGlzLmFkZChwcm9kdWN0cykucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoY2FydElkOiBzdHJpbmcpID0+IHRoaXMuZ2V0UmVzdWx0cyhjYXJ0SWQpKSxcbiAgICAgIHRha2UocHJvZHVjdHMubGVuZ3RoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHByb2R1Y3RzIGFuZCByZXR1cm5zIGNhcnRJZCBvZiBjb250ZXh0IGNhcnRcbiAgICpcbiAgICogQHBhcmFtIHsgUHJvZHVjdERhdGFbXSB9IHByb2R1Y3RzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IGNhcnRJZCAtIG5lY2Vzc2FyeSB0byBnZXQgcmVzdWx0c1xuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFkZChwcm9kdWN0czogUHJvZHVjdERhdGFbXSk6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAvKipcbiAgICogR2V0IGVtaXNzaW9uIG9mIGFkZCBlbnRyeSByZXN1bHRzIGZyb20gYWN0aW9ucyBzdWJqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYXJ0SWRcbiAgICogQHJldHVybnMge09ic2VydmFibGU8UHJvZHVjdEltcG9ydEluZm8+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFJlc3VsdHMoY2FydElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFByb2R1Y3RJbXBvcnRJbmZvPiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc1N1YmplY3QucGlwZShcbiAgICAgIG9mVHlwZShcbiAgICAgICAgQ2FydEFjdGlvbnMuQ0FSVF9BRERfRU5UUllfU1VDQ0VTUyxcbiAgICAgICAgQ2FydEFjdGlvbnMuQ0FSVF9BRERfRU5UUllfRkFJTFxuICAgICAgKSxcbiAgICAgIGZpbHRlcihcbiAgICAgICAgKFxuICAgICAgICAgIGFjdGlvbjogQ2FydEFjdGlvbnMuQ2FydEFkZEVudHJ5U3VjY2VzcyB8IENhcnRBY3Rpb25zLkNhcnRBZGRFbnRyeUZhaWxcbiAgICAgICAgKSA9PiBhY3Rpb24ucGF5bG9hZC5jYXJ0SWQgPT09IGNhcnRJZFxuICAgICAgKSxcbiAgICAgIG1hcCgoYWN0aW9uKSA9PiB0aGlzLm1hcE1lc3NhZ2VzKGFjdGlvbikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgYWN0aW9ucyB0byBzdW1tYXJ5IG1lc3NhZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FydEFjdGlvbnMuQ2FydEFkZEVudHJ5U3VjY2VzcyB8IENhcnRBY3Rpb25zLkNhcnRBZGRFbnRyeUZhaWx9IGFjdGlvblxuICAgKiBAcmV0dXJucyBQcm9kdWN0SW1wb3J0SW5mb1xuICAgKi9cbiAgcHJvdGVjdGVkIG1hcE1lc3NhZ2VzKFxuICAgIGFjdGlvbjogQ2FydEFjdGlvbnMuQ2FydEFkZEVudHJ5U3VjY2VzcyB8IENhcnRBY3Rpb25zLkNhcnRBZGRFbnRyeUZhaWxcbiAgKTogUHJvZHVjdEltcG9ydEluZm8ge1xuICAgIGNvbnN0IHsgcHJvZHVjdENvZGUgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBDYXJ0QWN0aW9ucy5DYXJ0QWRkRW50cnlTdWNjZXNzKSB7XG4gICAgICBjb25zdCB7IHF1YW50aXR5LCBxdWFudGl0eUFkZGVkLCBlbnRyeSwgc3RhdHVzQ29kZSB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gUHJvZHVjdEltcG9ydFN0YXR1cy5MT1dfU1RPQ0spIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9kdWN0Q29kZSxcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIHByb2R1Y3ROYW1lOiBlbnRyeT8ucHJvZHVjdD8ubmFtZSxcbiAgICAgICAgICBxdWFudGl0eSxcbiAgICAgICAgICBxdWFudGl0eUFkZGVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBzdGF0dXNDb2RlID09PSBQcm9kdWN0SW1wb3J0U3RhdHVzLlNVQ0NFU1MgfHxcbiAgICAgICAgc3RhdHVzQ29kZSA9PT0gUHJvZHVjdEltcG9ydFN0YXR1cy5OT19TVE9DS1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7IHByb2R1Y3RDb2RlLCBzdGF0dXNDb2RlLCBwcm9kdWN0TmFtZTogZW50cnk/LnByb2R1Y3Q/Lm5hbWUgfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIENhcnRBY3Rpb25zLkNhcnRBZGRFbnRyeUZhaWwpIHtcbiAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgaWYgKGVycm9yPy5kZXRhaWxzWzBdPy50eXBlID09PSAnVW5rbm93bklkZW50aWZpZXJFcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9kdWN0Q29kZSxcbiAgICAgICAgICBzdGF0dXNDb2RlOiBQcm9kdWN0SW1wb3J0U3RhdHVzLlVOS05PV05fSURFTlRJRklFUixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdVbnJlY29nbml6ZWQgY2FydCBhZGQgZW50cnkgYWN0aW9uIHR5cGUgd2hpbGUgbWFwcGluZyBtZXNzYWdlcycsXG4gICAgICAgIGFjdGlvblxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcHJvZHVjdENvZGUsIHN0YXR1c0NvZGU6IFByb2R1Y3RJbXBvcnRTdGF0dXMuVU5LTk9XTl9FUlJPUiB9O1xuICB9XG59XG4iXX0=