UNPKG

@spartacus/core

Version:

Spartacus - the core framework

169 lines 20.9 kB
import { Injectable } from '@angular/core'; import { select } from '@ngrx/store'; import { map, tap } from 'rxjs/operators'; import { getProcessErrorFactory, getProcessLoadingFactory, getProcessSuccessFactory, } from '../../process/store/selectors/process.selectors'; import { UserActions } from '../store/actions/index'; import { UsersSelectors } from '../store/selectors/index'; import { CANCEL_REPLENISHMENT_ORDER_PROCESS_ID, } from '../store/user-state'; import * as i0 from "@angular/core"; import * as i1 from "@ngrx/store"; import * as i2 from "../../auth/user-auth/facade/user-id.service"; /** * @deprecated since 4.2 - use ReplenishmentOrderFacade in @spartacus/order/root instead * TODO: In order lib, processStateStore is added in ReplenishmentOrderService's constructor, * need to update it in 5.0 migration doc. */ export class UserReplenishmentOrderService { constructor(store, userIdService) { this.store = store; this.userIdService = userIdService; } /** * Returns replenishment order details for a given 'current' user * * @param replenishmentOrderCode a replenishment order code */ loadReplenishmentOrderDetails(replenishmentOrderCode) { this.userIdService.takeUserId(true).subscribe((userId) => { this.store.dispatch(new UserActions.LoadReplenishmentOrderDetails({ userId, replenishmentOrderCode, })); }, () => { // TODO: for future releases, refactor this part to thrown errors }); } /** * Returns a replenishment order details */ getReplenishmentOrderDetails() { return this.store.pipe(select(UsersSelectors.getReplenishmentOrderDetailsValue)); } /** * Returns a replenishment order details loading flag */ getReplenishmentOrderDetailsLoading() { return this.store.pipe(select(UsersSelectors.getReplenishmentOrderDetailsLoading)); } /** * Returns a replenishment order details success flag */ getReplenishmentOrderDetailsSuccess() { return this.store.pipe(select(UsersSelectors.getReplenishmentOrderDetailsSuccess)); } /** * Returns a replenishment order details error flag */ getReplenishmentOrderDetailsError() { return this.store.pipe(select(UsersSelectors.getReplenishmentOrderDetailsError)); } /** * Clears the replenishment orders details state */ clearReplenishmentOrderDetails() { this.store.dispatch(new UserActions.ClearReplenishmentOrderDetails()); } /** * Cancels a specific replenishment order for a given 'current' user * * @param replenishmentOrderCode a replenishment order code */ cancelReplenishmentOrder(replenishmentOrderCode) { this.userIdService.takeUserId(true).subscribe((userId) => { this.store.dispatch(new UserActions.CancelReplenishmentOrder({ userId, replenishmentOrderCode, })); }, () => { // TODO: for future releases, refactor this part to thrown errors }); } /** * Returns the cancel replenishment order loading flag */ getCancelReplenishmentOrderLoading() { return this.store.pipe(select(getProcessLoadingFactory(CANCEL_REPLENISHMENT_ORDER_PROCESS_ID))); } /** * Returns the cancel replenishment order success flag */ getCancelReplenishmentOrderSuccess() { return this.store.pipe(select(getProcessSuccessFactory(CANCEL_REPLENISHMENT_ORDER_PROCESS_ID))); } /** * Returns the cancel replenishment order error flag */ getCancelReplenishmentOrderError() { return this.store.pipe(select(getProcessErrorFactory(CANCEL_REPLENISHMENT_ORDER_PROCESS_ID))); } /** * Clears the cancel replenishment order processing state */ clearCancelReplenishmentOrderProcessState() { this.store.dispatch(new UserActions.ClearCancelReplenishmentOrder()); } /** * Returns replenishment order history list */ getReplenishmentOrderHistoryList(pageSize) { return this.store.pipe(select(UsersSelectors.getReplenishmentOrdersState), tap((replenishmentOrderListState) => { const attemptedLoad = replenishmentOrderListState.loading || replenishmentOrderListState.success || replenishmentOrderListState.error; if (!attemptedLoad) { this.loadReplenishmentOrderList(pageSize); } }), map((replenishmentOrderListState) => replenishmentOrderListState.value)); } /** * Returns a loading flag for replenishment order history list */ getReplenishmentOrderHistoryListLoading() { return this.store.pipe(select(UsersSelectors.getReplenishmentOrdersLoading)); } /** * Returns a error flag for replenishment order history list */ getReplenishmentOrderHistoryListError() { return this.store.pipe(select(UsersSelectors.getReplenishmentOrdersError)); } /** * Returns a success flag for replenishment order history list */ getReplenishmentOrderHistoryListSuccess() { return this.store.pipe(select(UsersSelectors.getReplenishmentOrdersSuccess)); } /** * Retrieves a replenishment order list * @param pageSize page size * @param currentPage current page * @param sort sort */ loadReplenishmentOrderList(pageSize, currentPage, sort) { this.userIdService.takeUserId(true).subscribe((userId) => { this.store.dispatch(new UserActions.LoadUserReplenishmentOrders({ userId, pageSize, currentPage, sort, })); }, () => { // TODO: for future releases, refactor this part to thrown errors }); } /** * Cleaning replenishment order list */ clearReplenishmentOrderList() { this.store.dispatch(new UserActions.ClearUserReplenishmentOrders()); } } UserReplenishmentOrderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UserReplenishmentOrderService, deps: [{ token: i1.Store }, { token: i2.UserIdService }], target: i0.ɵɵFactoryTarget.Injectable }); UserReplenishmentOrderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UserReplenishmentOrderService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UserReplenishmentOrderService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.UserIdService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZXBsZW5pc2htZW50LW9yZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91c2VyL2ZhY2FkZS91c2VyLXJlcGxlbmlzaG1lbnQtb3JkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU8xQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qix3QkFBd0IsR0FDekIsTUFBTSxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFDTCxxQ0FBcUMsR0FFdEMsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUU3Qjs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLDZCQUE2QjtJQUN4QyxZQUNZLEtBQW9ELEVBQ3BELGFBQTRCO1FBRDVCLFVBQUssR0FBTCxLQUFLLENBQStDO1FBQ3BELGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ3JDLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsNkJBQTZCLENBQUMsc0JBQThCO1FBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixJQUFJLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQztnQkFDNUMsTUFBTTtnQkFDTixzQkFBc0I7YUFDdkIsQ0FBQyxDQUNILENBQUM7UUFDSixD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QUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVXNlcklkU2VydmljZSB9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1hdXRoL2ZhY2FkZS91c2VyLWlkLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUmVwbGVuaXNobWVudE9yZGVyLFxuICBSZXBsZW5pc2htZW50T3JkZXJMaXN0LFxufSBmcm9tICcuLi8uLi9tb2RlbC9yZXBsZW5pc2htZW50LW9yZGVyLm1vZGVsJztcbmltcG9ydCB7IFN0YXRlV2l0aFByb2Nlc3MgfSBmcm9tICcuLi8uLi9wcm9jZXNzL3N0b3JlL3Byb2Nlc3Mtc3RhdGUnO1xuaW1wb3J0IHtcbiAgZ2V0UHJvY2Vzc0Vycm9yRmFjdG9yeSxcbiAgZ2V0UHJvY2Vzc0xvYWRpbmdGYWN0b3J5LFxuICBnZXRQcm9jZXNzU3VjY2Vzc0ZhY3RvcnksXG59IGZyb20gJy4uLy4uL3Byb2Nlc3Mvc3RvcmUvc2VsZWN0b3JzL3Byb2Nlc3Muc2VsZWN0b3JzJztcbmltcG9ydCB7IFVzZXJBY3Rpb25zIH0gZnJvbSAnLi4vc3RvcmUvYWN0aW9ucy9pbmRleCc7XG5pbXBvcnQgeyBVc2Vyc1NlbGVjdG9ycyB9IGZyb20gJy4uL3N0b3JlL3NlbGVjdG9ycy9pbmRleCc7XG5pbXBvcnQge1xuICBDQU5DRUxfUkVQTEVOSVNITUVOVF9PUkRFUl9QUk9DRVNTX0lELFxuICBTdGF0ZVdpdGhVc2VyLFxufSBmcm9tICcuLi9zdG9yZS91c2VyLXN0YXRlJztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSA0LjIgLSB1c2UgUmVwbGVuaXNobWVudE9yZGVyRmFjYWRlIGluIEBzcGFydGFjdXMvb3JkZXIvcm9vdCBpbnN0ZWFkXG4gKiBUT0RPOiBJbiBvcmRlciBsaWIsIHByb2Nlc3NTdGF0ZVN0b3JlIGlzIGFkZGVkIGluIFJlcGxlbmlzaG1lbnRPcmRlclNlcnZpY2UncyBjb25zdHJ1Y3RvcixcbiAqIG5lZWQgdG8gdXBkYXRlIGl0IGluIDUuMCBtaWdyYXRpb24gZG9jLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclJlcGxlbmlzaG1lbnRPcmRlclNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPFN0YXRlV2l0aFVzZXIgfCBTdGF0ZVdpdGhQcm9jZXNzPHZvaWQ+PixcbiAgICBwcm90ZWN0ZWQgdXNlcklkU2VydmljZTogVXNlcklkU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcmVwbGVuaXNobWVudCBvcmRlciBkZXRhaWxzIGZvciBhIGdpdmVuICdjdXJyZW50JyB1c2VyXG4gICAqXG4gICAqIEBwYXJhbSByZXBsZW5pc2htZW50T3JkZXJDb2RlIGEgcmVwbGVuaXNobWVudCBvcmRlciBjb2RlXG4gICAqL1xuICBsb2FkUmVwbGVuaXNobWVudE9yZGVyRGV0YWlscyhyZXBsZW5pc2htZW50T3JkZXJDb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJJZFNlcnZpY2UudGFrZVVzZXJJZCh0cnVlKS5zdWJzY3JpYmUoXG4gICAgICAodXNlcklkKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IFVzZXJBY3Rpb25zLkxvYWRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzKHtcbiAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgIHJlcGxlbmlzaG1lbnRPcmRlckNvZGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGZvciBmdXR1cmUgcmVsZWFzZXMsIHJlZmFjdG9yIHRoaXMgcGFydCB0byB0aHJvd24gZXJyb3JzXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVwbGVuaXNobWVudCBvcmRlciBkZXRhaWxzXG4gICAqL1xuICBnZXRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzKCk6IE9ic2VydmFibGU8UmVwbGVuaXNobWVudE9yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChVc2Vyc1NlbGVjdG9ycy5nZXRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzVmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVwbGVuaXNobWVudCBvcmRlciBkZXRhaWxzIGxvYWRpbmcgZmxhZ1xuICAgKi9cbiAgZ2V0UmVwbGVuaXNobWVudE9yZGVyRGV0YWlsc0xvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChVc2Vyc1NlbGVjdG9ycy5nZXRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzTG9hZGluZylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZXBsZW5pc2htZW50IG9yZGVyIGRldGFpbHMgc3VjY2VzcyBmbGFnXG4gICAqL1xuICBnZXRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzU3VjY2VzcygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KFVzZXJzU2VsZWN0b3JzLmdldFJlcGxlbmlzaG1lbnRPcmRlckRldGFpbHNTdWNjZXNzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlcGxlbmlzaG1lbnQgb3JkZXIgZGV0YWlscyBlcnJvciBmbGFnXG4gICAqL1xuICBnZXRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzRXJyb3IoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChVc2Vyc1NlbGVjdG9ycy5nZXRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzRXJyb3IpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHJlcGxlbmlzaG1lbnQgb3JkZXJzIGRldGFpbHMgc3RhdGVcbiAgICovXG4gIGNsZWFyUmVwbGVuaXNobWVudE9yZGVyRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVc2VyQWN0aW9ucy5DbGVhclJlcGxlbmlzaG1lbnRPcmRlckRldGFpbHMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBhIHNwZWNpZmljIHJlcGxlbmlzaG1lbnQgb3JkZXIgZm9yIGEgZ2l2ZW4gJ2N1cnJlbnQnIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIHJlcGxlbmlzaG1lbnRPcmRlckNvZGUgYSByZXBsZW5pc2htZW50IG9yZGVyIGNvZGVcbiAgICovXG4gIGNhbmNlbFJlcGxlbmlzaG1lbnRPcmRlcihyZXBsZW5pc2htZW50T3JkZXJDb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJJZFNlcnZpY2UudGFrZVVzZXJJZCh0cnVlKS5zdWJzY3JpYmUoXG4gICAgICAodXNlcklkKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IFVzZXJBY3Rpb25zLkNhbmNlbFJlcGxlbmlzaG1lbnRPcmRlcih7XG4gICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICByZXBsZW5pc2htZW50T3JkZXJDb2RlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPOiBmb3IgZnV0dXJlIHJlbGVhc2VzLCByZWZhY3RvciB0aGlzIHBhcnQgdG8gdGhyb3duIGVycm9yc1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2FuY2VsIHJlcGxlbmlzaG1lbnQgb3JkZXIgbG9hZGluZyBmbGFnXG4gICAqL1xuICBnZXRDYW5jZWxSZXBsZW5pc2htZW50T3JkZXJMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoZ2V0UHJvY2Vzc0xvYWRpbmdGYWN0b3J5KENBTkNFTF9SRVBMRU5JU0hNRU5UX09SREVSX1BST0NFU1NfSUQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2FuY2VsIHJlcGxlbmlzaG1lbnQgb3JkZXIgc3VjY2VzcyBmbGFnXG4gICAqL1xuICBnZXRDYW5jZWxSZXBsZW5pc2htZW50T3JkZXJTdWNjZXNzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoZ2V0UHJvY2Vzc1N1Y2Nlc3NGYWN0b3J5KENBTkNFTF9SRVBMRU5JU0hNRU5UX09SREVSX1BST0NFU1NfSUQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2FuY2VsIHJlcGxlbmlzaG1lbnQgb3JkZXIgZXJyb3IgZmxhZ1xuICAgKi9cbiAgZ2V0Q2FuY2VsUmVwbGVuaXNobWVudE9yZGVyRXJyb3IoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChnZXRQcm9jZXNzRXJyb3JGYWN0b3J5KENBTkNFTF9SRVBMRU5JU0hNRU5UX09SREVSX1BST0NFU1NfSUQpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjYW5jZWwgcmVwbGVuaXNobWVudCBvcmRlciBwcm9jZXNzaW5nIHN0YXRlXG4gICAqL1xuICBjbGVhckNhbmNlbFJlcGxlbmlzaG1lbnRPcmRlclByb2Nlc3NTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVc2VyQWN0aW9ucy5DbGVhckNhbmNlbFJlcGxlbmlzaG1lbnRPcmRlcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlcGxlbmlzaG1lbnQgb3JkZXIgaGlzdG9yeSBsaXN0XG4gICAqL1xuICBnZXRSZXBsZW5pc2htZW50T3JkZXJIaXN0b3J5TGlzdChcbiAgICBwYWdlU2l6ZTogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8UmVwbGVuaXNobWVudE9yZGVyTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoVXNlcnNTZWxlY3RvcnMuZ2V0UmVwbGVuaXNobWVudE9yZGVyc1N0YXRlKSxcbiAgICAgIHRhcCgocmVwbGVuaXNobWVudE9yZGVyTGlzdFN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dGVtcHRlZExvYWQgPVxuICAgICAgICAgIHJlcGxlbmlzaG1lbnRPcmRlckxpc3RTdGF0ZS5sb2FkaW5nIHx8XG4gICAgICAgICAgcmVwbGVuaXNobWVudE9yZGVyTGlzdFN0YXRlLnN1Y2Nlc3MgfHxcbiAgICAgICAgICByZXBsZW5pc2htZW50T3JkZXJMaXN0U3RhdGUuZXJyb3I7XG4gICAgICAgIGlmICghYXR0ZW1wdGVkTG9hZCkge1xuICAgICAgICAgIHRoaXMubG9hZFJlcGxlbmlzaG1lbnRPcmRlckxpc3QocGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG1hcCgocmVwbGVuaXNobWVudE9yZGVyTGlzdFN0YXRlKSA9PiByZXBsZW5pc2htZW50T3JkZXJMaXN0U3RhdGUudmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbG9hZGluZyBmbGFnIGZvciByZXBsZW5pc2htZW50IG9yZGVyIGhpc3RvcnkgbGlzdFxuICAgKi9cbiAgZ2V0UmVwbGVuaXNobWVudE9yZGVySGlzdG9yeUxpc3RMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoVXNlcnNTZWxlY3RvcnMuZ2V0UmVwbGVuaXNobWVudE9yZGVyc0xvYWRpbmcpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZXJyb3IgZmxhZyBmb3IgcmVwbGVuaXNobWVudCBvcmRlciBoaXN0b3J5IGxpc3RcbiAgICovXG4gIGdldFJlcGxlbmlzaG1lbnRPcmRlckhpc3RvcnlMaXN0RXJyb3IoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucGlwZShzZWxlY3QoVXNlcnNTZWxlY3RvcnMuZ2V0UmVwbGVuaXNobWVudE9yZGVyc0Vycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN1Y2Nlc3MgZmxhZyBmb3IgcmVwbGVuaXNobWVudCBvcmRlciBoaXN0b3J5IGxpc3RcbiAgICovXG4gIGdldFJlcGxlbmlzaG1lbnRPcmRlckhpc3RvcnlMaXN0U3VjY2VzcygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KFVzZXJzU2VsZWN0b3JzLmdldFJlcGxlbmlzaG1lbnRPcmRlcnNTdWNjZXNzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgcmVwbGVuaXNobWVudCBvcmRlciBsaXN0XG4gICAqIEBwYXJhbSBwYWdlU2l6ZSBwYWdlIHNpemVcbiAgICogQHBhcmFtIGN1cnJlbnRQYWdlIGN1cnJlbnQgcGFnZVxuICAgKiBAcGFyYW0gc29ydCBzb3J0XG4gICAqL1xuICBsb2FkUmVwbGVuaXNobWVudE9yZGVyTGlzdChcbiAgICBwYWdlU2l6ZT86IG51bWJlcixcbiAgICBjdXJyZW50UGFnZT86IG51bWJlcixcbiAgICBzb3J0Pzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMudXNlcklkU2VydmljZS50YWtlVXNlcklkKHRydWUpLnN1YnNjcmliZShcbiAgICAgICh1c2VySWQpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBuZXcgVXNlckFjdGlvbnMuTG9hZFVzZXJSZXBsZW5pc2htZW50T3JkZXJzKHtcbiAgICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAgIHBhZ2VTaXplLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPOiBmb3IgZnV0dXJlIHJlbGVhc2VzLCByZWZhY3RvciB0aGlzIHBhcnQgdG8gdGhyb3duIGVycm9yc1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5pbmcgcmVwbGVuaXNobWVudCBvcmRlciBsaXN0XG4gICAqL1xuICBjbGVhclJlcGxlbmlzaG1lbnRPcmRlckxpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXNlckFjdGlvbnMuQ2xlYXJVc2VyUmVwbGVuaXNobWVudE9yZGVycygpKTtcbiAgfVxufVxuIl19