@spartacus/order
Version:
Order feature library for Spartacus
162 lines • 20.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { select } from '@ngrx/store';
import { ProcessSelectors, } from '@spartacus/core';
import { map, tap } from 'rxjs/operators';
import { OrderActions } from '../store/actions/index';
import { CANCEL_REPLENISHMENT_ORDER_PROCESS_ID, } from '../store/order-state';
import { OrderSelectors } from '../store/selectors/index';
import * as i0 from "@angular/core";
import * as i1 from "@ngrx/store";
import * as i2 from "@spartacus/core";
export class ReplenishmentOrderService {
constructor(store, processStateStore, userIdService) {
this.store = store;
this.processStateStore = processStateStore;
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 OrderActions.LoadReplenishmentOrderDetails({
userId,
replenishmentOrderCode,
}));
}, () => {
// TODO: for future releases, refactor this part to thrown errors
});
}
/**
* Returns a replenishment order details
*/
getReplenishmentOrderDetails() {
return this.store.pipe(select(OrderSelectors.getReplenishmentOrderDetailsValue));
}
/**
* Returns a replenishment order details loading flag
*/
getReplenishmentOrderDetailsLoading() {
return this.store.pipe(select(OrderSelectors.getReplenishmentOrderDetailsLoading));
}
/**
* Returns a replenishment order details success flag
*/
getReplenishmentOrderDetailsSuccess() {
return this.store.pipe(select(OrderSelectors.getReplenishmentOrderDetailsSuccess));
}
/**
* Returns a replenishment order details error flag
*/
getReplenishmentOrderDetailsError() {
return this.store.pipe(select(OrderSelectors.getReplenishmentOrderDetailsError));
}
/**
* Clears the replenishment orders details state
*/
clearReplenishmentOrderDetails() {
this.store.dispatch(new OrderActions.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 OrderActions.CancelReplenishmentOrder({
userId,
replenishmentOrderCode,
}));
}, () => {
// TODO: for future releases, refactor this part to thrown errors
});
}
/**
* Returns the cancel replenishment order loading flag
*/
getCancelReplenishmentOrderLoading() {
return this.processStateStore.pipe(select(ProcessSelectors.getProcessLoadingFactory(CANCEL_REPLENISHMENT_ORDER_PROCESS_ID)));
}
/**
* Returns the cancel replenishment order success flag
*/
getCancelReplenishmentOrderSuccess() {
return this.processStateStore.pipe(select(ProcessSelectors.getProcessSuccessFactory(CANCEL_REPLENISHMENT_ORDER_PROCESS_ID)));
}
/**
* Returns the cancel replenishment order error flag
*/
getCancelReplenishmentOrderError() {
return this.processStateStore.pipe(select(ProcessSelectors.getProcessErrorFactory(CANCEL_REPLENISHMENT_ORDER_PROCESS_ID)));
}
/**
* Clears the cancel replenishment order processing state
*/
clearCancelReplenishmentOrderProcessState() {
this.store.dispatch(new OrderActions.ClearCancelReplenishmentOrder());
}
/**
* Returns replenishment order history list
*/
getReplenishmentOrderHistoryList(pageSize) {
return this.store.pipe(select(OrderSelectors.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(OrderSelectors.getReplenishmentOrdersLoading));
}
/**
* Returns a error flag for replenishment order history list
*/
getReplenishmentOrderHistoryListError() {
return this.store.pipe(select(OrderSelectors.getReplenishmentOrdersError));
}
/**
* Returns a success flag for replenishment order history list
*/
getReplenishmentOrderHistoryListSuccess() {
return this.store.pipe(select(OrderSelectors.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 OrderActions.LoadUserReplenishmentOrders({
userId,
pageSize,
currentPage,
sort,
}));
}, () => {
// TODO: for future releases, refactor this part to thrown errors
});
}
/**
* Cleaning replenishment order list
*/
clearReplenishmentOrderList() {
this.store.dispatch(new OrderActions.ClearUserReplenishmentOrders());
}
}
ReplenishmentOrderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReplenishmentOrderService, deps: [{ token: i1.Store }, { token: i1.Store }, { token: i2.UserIdService }], target: i0.ɵɵFactoryTarget.Injectable });
ReplenishmentOrderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReplenishmentOrderService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReplenishmentOrderService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i1.Store }, { type: i2.UserIdService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGVuaXNobWVudC1vcmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL29yZGVyL2NvcmUvZmFjYWRlL3JlcGxlbmlzaG1lbnQtb3JkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUNMLGdCQUFnQixHQUtqQixNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFDTCxxQ0FBcUMsR0FFdEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFHMUQsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUNZLEtBQTRCLEVBQzVCLGlCQUFnRCxFQUNoRCxhQUE0QjtRQUY1QixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQStCO1FBQ2hELGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ3JDLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsNkJBQTZCLENBQUMsc0JBQThCO1FBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixJQUFJLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQztnQkFDN0MsTUFBTTtnQkFDTixzQkFBc0I7YUFDdkIsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLEVB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MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBQcm9jZXNzU2VsZWN0b3JzLFxuICBSZXBsZW5pc2htZW50T3JkZXIsXG4gIFJlcGxlbmlzaG1lbnRPcmRlckxpc3QsXG4gIFN0YXRlV2l0aFByb2Nlc3MsXG4gIFVzZXJJZFNlcnZpY2UsXG59IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XG5pbXBvcnQgeyBSZXBsZW5pc2htZW50T3JkZXJGYWNhZGUgfSBmcm9tICdAc3BhcnRhY3VzL29yZGVyL3Jvb3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPcmRlckFjdGlvbnMgfSBmcm9tICcuLi9zdG9yZS9hY3Rpb25zL2luZGV4JztcbmltcG9ydCB7XG4gIENBTkNFTF9SRVBMRU5JU0hNRU5UX09SREVSX1BST0NFU1NfSUQsXG4gIFN0YXRlV2l0aE9yZGVyLFxufSBmcm9tICcuLi9zdG9yZS9vcmRlci1zdGF0ZSc7XG5pbXBvcnQgeyBPcmRlclNlbGVjdG9ycyB9IGZyb20gJy4uL3N0b3JlL3NlbGVjdG9ycy9pbmRleCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBsZW5pc2htZW50T3JkZXJTZXJ2aWNlIGltcGxlbWVudHMgUmVwbGVuaXNobWVudE9yZGVyRmFjYWRlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZTxTdGF0ZVdpdGhPcmRlcj4sXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NTdGF0ZVN0b3JlOiBTdG9yZTxTdGF0ZVdpdGhQcm9jZXNzPHZvaWQ+PixcbiAgICBwcm90ZWN0ZWQgdXNlcklkU2VydmljZTogVXNlcklkU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcmVwbGVuaXNobWVudCBvcmRlciBkZXRhaWxzIGZvciBhIGdpdmVuICdjdXJyZW50JyB1c2VyXG4gICAqXG4gICAqIEBwYXJhbSByZXBsZW5pc2htZW50T3JkZXJDb2RlIGEgcmVwbGVuaXNobWVudCBvcmRlciBjb2RlXG4gICAqL1xuICBsb2FkUmVwbGVuaXNobWVudE9yZGVyRGV0YWlscyhyZXBsZW5pc2htZW50T3JkZXJDb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJJZFNlcnZpY2UudGFrZVVzZXJJZCh0cnVlKS5zdWJzY3JpYmUoXG4gICAgICAodXNlcklkKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IE9yZGVyQWN0aW9ucy5Mb2FkUmVwbGVuaXNobWVudE9yZGVyRGV0YWlscyh7XG4gICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICByZXBsZW5pc2htZW50T3JkZXJDb2RlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPOiBmb3IgZnV0dXJlIHJlbGVhc2VzLCByZWZhY3RvciB0aGlzIHBhcnQgdG8gdGhyb3duIGVycm9yc1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlcGxlbmlzaG1lbnQgb3JkZXIgZGV0YWlsc1xuICAgKi9cbiAgZ2V0UmVwbGVuaXNobWVudE9yZGVyRGV0YWlscygpOiBPYnNlcnZhYmxlPFJlcGxlbmlzaG1lbnRPcmRlcj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoT3JkZXJTZWxlY3RvcnMuZ2V0UmVwbGVuaXNobWVudE9yZGVyRGV0YWlsc1ZhbHVlKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlcGxlbmlzaG1lbnQgb3JkZXIgZGV0YWlscyBsb2FkaW5nIGZsYWdcbiAgICovXG4gIGdldFJlcGxlbmlzaG1lbnRPcmRlckRldGFpbHNMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoT3JkZXJTZWxlY3RvcnMuZ2V0UmVwbGVuaXNobWVudE9yZGVyRGV0YWlsc0xvYWRpbmcpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVwbGVuaXNobWVudCBvcmRlciBkZXRhaWxzIHN1Y2Nlc3MgZmxhZ1xuICAgKi9cbiAgZ2V0UmVwbGVuaXNobWVudE9yZGVyRGV0YWlsc1N1Y2Nlc3MoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChPcmRlclNlbGVjdG9ycy5nZXRSZXBsZW5pc2htZW50T3JkZXJEZXRhaWxzU3VjY2VzcylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZXBsZW5pc2htZW50IG9yZGVyIGRldGFpbHMgZXJyb3IgZmxhZ1xuICAgKi9cbiAgZ2V0UmVwbGVuaXNobWVudE9yZGVyRGV0YWlsc0Vycm9yKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoT3JkZXJTZWxlY3RvcnMuZ2V0UmVwbGVuaXNobWVudE9yZGVyRGV0YWlsc0Vycm9yKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSByZXBsZW5pc2htZW50IG9yZGVycyBkZXRhaWxzIHN0YXRlXG4gICAqL1xuICBjbGVhclJlcGxlbmlzaG1lbnRPcmRlckRldGFpbHMoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgT3JkZXJBY3Rpb25zLkNsZWFyUmVwbGVuaXNobWVudE9yZGVyRGV0YWlscygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIGEgc3BlY2lmaWMgcmVwbGVuaXNobWVudCBvcmRlciBmb3IgYSBnaXZlbiAnY3VycmVudCcgdXNlclxuICAgKlxuICAgKiBAcGFyYW0gcmVwbGVuaXNobWVudE9yZGVyQ29kZSBhIHJlcGxlbmlzaG1lbnQgb3JkZXIgY29kZVxuICAgKi9cbiAgY2FuY2VsUmVwbGVuaXNobWVudE9yZGVyKHJlcGxlbmlzaG1lbnRPcmRlckNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXNlcklkU2VydmljZS50YWtlVXNlcklkKHRydWUpLnN1YnNjcmliZShcbiAgICAgICh1c2VySWQpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBuZXcgT3JkZXJBY3Rpb25zLkNhbmNlbFJlcGxlbmlzaG1lbnRPcmRlcih7XG4gICAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgICByZXBsZW5pc2htZW50T3JkZXJDb2RlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBUT0RPOiBmb3IgZnV0dXJlIHJlbGVhc2VzLCByZWZhY3RvciB0aGlzIHBhcnQgdG8gdGhyb3duIGVycm9yc1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2FuY2VsIHJlcGxlbmlzaG1lbnQgb3JkZXIgbG9hZGluZyBmbGFnXG4gICAqL1xuICBnZXRDYW5jZWxSZXBsZW5pc2htZW50T3JkZXJMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGF0ZVN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoXG4gICAgICAgIFByb2Nlc3NTZWxlY3RvcnMuZ2V0UHJvY2Vzc0xvYWRpbmdGYWN0b3J5KFxuICAgICAgICAgIENBTkNFTF9SRVBMRU5JU0hNRU5UX09SREVSX1BST0NFU1NfSURcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2FuY2VsIHJlcGxlbmlzaG1lbnQgb3JkZXIgc3VjY2VzcyBmbGFnXG4gICAqL1xuICBnZXRDYW5jZWxSZXBsZW5pc2htZW50T3JkZXJTdWNjZXNzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGF0ZVN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoXG4gICAgICAgIFByb2Nlc3NTZWxlY3RvcnMuZ2V0UHJvY2Vzc1N1Y2Nlc3NGYWN0b3J5KFxuICAgICAgICAgIENBTkNFTF9SRVBMRU5JU0hNRU5UX09SREVSX1BST0NFU1NfSURcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2FuY2VsIHJlcGxlbmlzaG1lbnQgb3JkZXIgZXJyb3IgZmxhZ1xuICAgKi9cbiAgZ2V0Q2FuY2VsUmVwbGVuaXNobWVudE9yZGVyRXJyb3IoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXRlU3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChcbiAgICAgICAgUHJvY2Vzc1NlbGVjdG9ycy5nZXRQcm9jZXNzRXJyb3JGYWN0b3J5KFxuICAgICAgICAgIENBTkNFTF9SRVBMRU5JU0hNRU5UX09SREVSX1BST0NFU1NfSURcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjYW5jZWwgcmVwbGVuaXNobWVudCBvcmRlciBwcm9jZXNzaW5nIHN0YXRlXG4gICAqL1xuICBjbGVhckNhbmNlbFJlcGxlbmlzaG1lbnRPcmRlclByb2Nlc3NTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBPcmRlckFjdGlvbnMuQ2xlYXJDYW5jZWxSZXBsZW5pc2htZW50T3JkZXIoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByZXBsZW5pc2htZW50IG9yZGVyIGhpc3RvcnkgbGlzdFxuICAgKi9cbiAgZ2V0UmVwbGVuaXNobWVudE9yZGVySGlzdG9yeUxpc3QoXG4gICAgcGFnZVNpemU6IG51bWJlclxuICApOiBPYnNlcnZhYmxlPFJlcGxlbmlzaG1lbnRPcmRlckxpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KE9yZGVyU2VsZWN0b3JzLmdldFJlcGxlbmlzaG1lbnRPcmRlcnNTdGF0ZSksXG4gICAgICB0YXAoKHJlcGxlbmlzaG1lbnRPcmRlckxpc3RTdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBhdHRlbXB0ZWRMb2FkID1cbiAgICAgICAgICByZXBsZW5pc2htZW50T3JkZXJMaXN0U3RhdGUubG9hZGluZyB8fFxuICAgICAgICAgIHJlcGxlbmlzaG1lbnRPcmRlckxpc3RTdGF0ZS5zdWNjZXNzIHx8XG4gICAgICAgICAgcmVwbGVuaXNobWVudE9yZGVyTGlzdFN0YXRlLmVycm9yO1xuICAgICAgICBpZiAoIWF0dGVtcHRlZExvYWQpIHtcbiAgICAgICAgICB0aGlzLmxvYWRSZXBsZW5pc2htZW50T3JkZXJMaXN0KHBhZ2VTaXplKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBtYXAoKHJlcGxlbmlzaG1lbnRPcmRlckxpc3RTdGF0ZSkgPT4gcmVwbGVuaXNobWVudE9yZGVyTGlzdFN0YXRlLnZhbHVlKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvYWRpbmcgZmxhZyBmb3IgcmVwbGVuaXNobWVudCBvcmRlciBoaXN0b3J5IGxpc3RcbiAgICovXG4gIGdldFJlcGxlbmlzaG1lbnRPcmRlckhpc3RvcnlMaXN0TG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KE9yZGVyU2VsZWN0b3JzLmdldFJlcGxlbmlzaG1lbnRPcmRlcnNMb2FkaW5nKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGVycm9yIGZsYWcgZm9yIHJlcGxlbmlzaG1lbnQgb3JkZXIgaGlzdG9yeSBsaXN0XG4gICAqL1xuICBnZXRSZXBsZW5pc2htZW50T3JkZXJIaXN0b3J5TGlzdEVycm9yKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KE9yZGVyU2VsZWN0b3JzLmdldFJlcGxlbmlzaG1lbnRPcmRlcnNFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdWNjZXNzIGZsYWcgZm9yIHJlcGxlbmlzaG1lbnQgb3JkZXIgaGlzdG9yeSBsaXN0XG4gICAqL1xuICBnZXRSZXBsZW5pc2htZW50T3JkZXJIaXN0b3J5TGlzdFN1Y2Nlc3MoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucGlwZShcbiAgICAgIHNlbGVjdChPcmRlclNlbGVjdG9ycy5nZXRSZXBsZW5pc2htZW50T3JkZXJzU3VjY2VzcylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHJlcGxlbmlzaG1lbnQgb3JkZXIgbGlzdFxuICAgKiBAcGFyYW0gcGFnZVNpemUgcGFnZSBzaXplXG4gICAqIEBwYXJhbSBjdXJyZW50UGFnZSBjdXJyZW50IHBhZ2VcbiAgICogQHBhcmFtIHNvcnQgc29ydFxuICAgKi9cbiAgbG9hZFJlcGxlbmlzaG1lbnRPcmRlckxpc3QoXG4gICAgcGFnZVNpemU/OiBudW1iZXIsXG4gICAgY3VycmVudFBhZ2U/OiBudW1iZXIsXG4gICAgc29ydD86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJJZFNlcnZpY2UudGFrZVVzZXJJZCh0cnVlKS5zdWJzY3JpYmUoXG4gICAgICAodXNlcklkKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IE9yZGVyQWN0aW9ucy5Mb2FkVXNlclJlcGxlbmlzaG1lbnRPcmRlcnMoe1xuICAgICAgICAgICAgdXNlcklkLFxuICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGZvciBmdXR1cmUgcmVsZWFzZXMsIHJlZmFjdG9yIHRoaXMgcGFydCB0byB0aHJvd24gZXJyb3JzXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbmluZyByZXBsZW5pc2htZW50IG9yZGVyIGxpc3RcbiAgICovXG4gIGNsZWFyUmVwbGVuaXNobWVudE9yZGVyTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBPcmRlckFjdGlvbnMuQ2xlYXJVc2VyUmVwbGVuaXNobWVudE9yZGVycygpKTtcbiAgfVxufVxuIl19