moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
278 lines • 17.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
/**
* @record
*/
export function PageList() { }
if (false) {
/** @type {?} */
PageList.prototype.index;
/** @type {?} */
PageList.prototype.path;
/** @type {?} */
PageList.prototype.isComplete;
/* Skipping unhandled member: [key: string]: any;*/
}
var PageStateService = /** @class */ (function () {
function PageStateService(router) {
this.router = router;
this.pageList = [];
}
/**
* @param {?} arr
* @param {?} routeListConst
* @param {?=} fn
* @return {?}
*/
PageStateService.prototype.setPages = /**
* @param {?} arr
* @param {?} routeListConst
* @param {?=} fn
* @return {?}
*/
function (arr, routeListConst, fn) {
if (this.pageList && !this.pageList.length) {
/** @type {?} */
var routeConst_1 = Object.keys(routeListConst).map((/**
* @param {?} x
* @return {?}
*/
function (x) { return routeListConst[x]; }));
/** @type {?} */
var cnt_1 = 0;
this.pageList = arr.filter((/**
* @param {?} itm
* @return {?}
*/
function (itm) { return !itm.redirectTo; }))
.map((/**
* @param {?} itm
* @return {?}
*/
function (itm) {
/** @type {?} */
var val = routeConst_1.find((/**
* @param {?} x
* @return {?}
*/
function (x) { return x.path === itm.path; }));
cnt_1 = cnt_1 + 1; // count for indices
// count for indices
// Page List to be returned
/** @type {?} */
var obj = {
index: cnt_1,
path: val.path,
isComplete: false,
};
if (fn) {
obj = Object.assign(obj, fn(val));
}
return obj;
}));
}
return this.pageList;
};
// Returns index parameter value
// Returns index parameter value
/**
* @param {?=} url
* @return {?}
*/
PageStateService.prototype.findIndex =
// Returns index parameter value
/**
* @param {?=} url
* @return {?}
*/
function (url) {
if (url === void 0) { url = null; }
/** @type {?} */
var idx = 0;
if (this.pageList) {
/** @type {?} */
var obj = this._find(url ? url : this.router.url);
if (obj) {
idx = obj.index;
}
}
return idx;
};
/**
* @param {?} idx
* @return {?}
*/
PageStateService.prototype.getPageAtIndex = /**
* @param {?} idx
* @return {?}
*/
function (idx) {
/** @type {?} */
var index = idx - 1;
if (this.pageList && index >= 0 && this.pageList.length > index) {
return this.pageList[index];
}
return null;
};
/**
* @param {?=} url
* @return {?}
*/
PageStateService.prototype.setPageIncomplete = /**
* @param {?=} url
* @return {?}
*/
function (url) {
if (url === void 0) { url = null; }
/** @type {?} */
var obj = this._find(url ? url : this.router.url);
if (obj) {
obj.isComplete = false;
// Set future pages to not complete
this.pageList.map((/**
* @param {?} x
* @return {?}
*/
function (x) {
if (obj.index < x.index && x.isComplete) {
x.isComplete = false;
}
}));
}
};
/**
* @param {?=} path
* @return {?}
*/
PageStateService.prototype.setPageComplete = /**
* @param {?=} path
* @return {?}
*/
function (path) {
if (path === void 0) { path = null; }
/** @type {?} */
var obj = this._find(path ? path : this.router.url);
if (obj) {
obj.isComplete = true;
}
};
/**
* @param {?=} path
* @return {?}
*/
PageStateService.prototype.canNavigateToPage = /**
* @param {?=} path
* @return {?}
*/
function (path) {
if (path === void 0) { path = null; }
/** @type {?} */
var complete = false;
/** @type {?} */
var obj = this._find(path ? path : this.router.url);
if (obj) {
// Can navigate to first play whether complete or not
/** @type {?} */
var prevIdx = obj.index - 1;
complete = (prevIdx === 0 ? true : this.pageList[prevIdx - 1].isComplete);
}
return complete;
};
/**
* @return {?}
*/
PageStateService.prototype.clearCompletePages = /**
* @return {?}
*/
function () {
this.pageList.map((/**
* @param {?} x
* @return {?}
*/
function (x) {
x.isComplete = false;
}));
};
/**
* @return {?}
*/
PageStateService.prototype.pageListIsClear = /**
* @return {?}
*/
function () {
/** @type {?} */
var isClear = true;
if (this.pageList.length > 0) {
isClear = this.pageList.every((/**
* @param {?} x
* @return {?}
*/
function (x) { return x.isComplete === false; }));
}
return isClear;
};
// Redirect
// Redirect
/**
* @param {?} path
* @return {?}
*/
PageStateService.prototype.navigateByUrl =
// Redirect
/**
* @param {?} path
* @return {?}
*/
function (path) {
this.router.navigateByUrl(path);
};
// Find item in list
// Find item in list
/**
* @private
* @param {?} path
* @return {?}
*/
PageStateService.prototype._find =
// Find item in list
/**
* @private
* @param {?} path
* @return {?}
*/
function (path) {
return this.pageList.find((/**
* @param {?} x
* @return {?}
*/
function (x) { return path.includes(x.path) || path.endsWith(x.path); }));
};
PageStateService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
PageStateService.ctorParameters = function () { return [
{ type: Router }
]; };
/** @nocollapse */ PageStateService.ngInjectableDef = i0.defineInjectable({ factory: function PageStateService_Factory() { return new PageStateService(i0.inject(i1.Router)); }, token: PageStateService, providedIn: "root" });
return PageStateService;
}());
export { PageStateService };
if (false) {
/** @type {?} */
PageStateService.prototype.pageList;
/**
* @type {?}
* @protected
*/
PageStateService.prototype.router;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW9oLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvcGFnZS1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7O0FBRWhELDhCQUtDOzs7SUFKQyx5QkFBYzs7SUFDZCx3QkFBYTs7SUFDYiw4QkFBb0I7OztBQUl0QjtJQU9FLDBCQUF1QixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUZyQyxhQUFRLEdBQWUsRUFBRSxDQUFDO0lBRWdCLENBQUM7Ozs7Ozs7SUFFM0MsbUNBQVE7Ozs7OztJQUFSLFVBQVUsR0FBWSxFQUNaLGNBQW1CLEVBQ25CLEVBQXFDO1FBRTdDLElBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFHOztnQkFFdEMsWUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUUsY0FBYyxDQUFFLENBQUMsR0FBRzs7OztZQUFFLFVBQUEsQ0FBQyxJQUFJLE9BQUEsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFqQixDQUFpQixFQUFFOztnQkFFMUUsS0FBRyxHQUFHLENBQUM7WUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNOzs7O1lBQUMsVUFBQyxHQUFRLElBQUssT0FBQSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQWYsQ0FBZSxFQUFDO2lCQUN0RCxHQUFHOzs7O1lBQUMsVUFBQyxHQUFROztvQkFDTixHQUFHLEdBQUcsWUFBVSxDQUFDLElBQUk7Ozs7Z0JBQUUsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQW5CLENBQW1CLEVBQUU7Z0JBRXZELEtBQUcsR0FBRyxLQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0JBQW9COzs7O29CQUcvQixHQUFHLEdBQUc7b0JBQ1IsS0FBSyxFQUFFLEtBQUc7b0JBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNkLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjtnQkFFRCxJQUFLLEVBQUUsRUFBRztvQkFDUixHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBRSxHQUFHLEVBQUUsRUFBRSxDQUFFLEdBQUcsQ0FBRSxDQUFFLENBQUM7aUJBQ3ZDO2dCQUNELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0NBQWdDOzs7Ozs7SUFDaEMsb0NBQVM7Ozs7OztJQUFULFVBQVcsR0FBa0I7UUFBbEIsb0JBQUEsRUFBQSxVQUFrQjs7WUFDdkIsR0FBRyxHQUFHLENBQUM7UUFDWCxJQUFLLElBQUksQ0FBQyxRQUFRLEVBQUc7O2dCQUNiLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUNuRCxJQUFLLEdBQUcsRUFBRztnQkFDVCxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzthQUNqQjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzs7OztJQUVELHlDQUFjOzs7O0lBQWQsVUFBZ0IsR0FBVzs7WUFDbkIsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRztZQUNqRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7O0lBRUQsNENBQWlCOzs7O0lBQWpCLFVBQW1CLEdBQWtCO1FBQWxCLG9CQUFBLEVBQUEsVUFBa0I7O1lBQzdCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNuRCxJQUFLLEdBQUcsRUFBRztZQUNULEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUc7Ozs7WUFBRSxVQUFBLENBQUM7Z0JBQ2xCLElBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUc7b0JBQ3pDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2lCQUN0QjtZQUNILENBQUMsRUFBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7OztJQUVELDBDQUFlOzs7O0lBQWYsVUFBaUIsSUFBbUI7UUFBbkIscUJBQUEsRUFBQSxXQUFtQjs7WUFDNUIsR0FBRyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3RELElBQUssR0FBRyxFQUFHO1lBQ1QsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDdkI7SUFDSCxDQUFDOzs7OztJQUVELDRDQUFpQjs7OztJQUFqQixVQUFtQixJQUFvQjtRQUFwQixxQkFBQSxFQUFBLFdBQW9COztZQUNqQyxRQUFRLEdBQUcsS0FBSzs7WUFDZCxHQUFHLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDdEQsSUFBSyxHQUFHLEVBQUc7OztnQkFFSCxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDO1lBQzdCLFFBQVEsR0FBRyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFFLENBQUM7U0FDNUU7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7O0lBRUQsNkNBQWtCOzs7SUFBbEI7UUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUc7Ozs7UUFBRSxVQUFBLENBQUM7WUFDaEIsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBR0QsMENBQWU7OztJQUFmOztZQUNNLE9BQU8sR0FBRyxJQUFJO1FBQ2xCLElBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFHO1lBQzlCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7Ozs7WUFBRSxVQUFBLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUF0QixDQUFzQixFQUFFLENBQUM7U0FDL0Q7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBR0QsV0FBVzs7Ozs7O0lBQ1gsd0NBQWE7Ozs7OztJQUFiLFVBQWUsSUFBWTtRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBRSxJQUFJLENBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0JBQW9COzs7Ozs7O0lBQ1osZ0NBQUs7Ozs7Ozs7SUFBYixVQUFlLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7Ozs7UUFBRSxVQUFBLENBQUMsSUFBSSxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUE5QyxDQUE4QyxFQUFDLENBQUM7SUFDbEYsQ0FBQzs7Z0JBbkhGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBWGUsTUFBTTs7OzJCQUR0QjtDQThIQyxBQXBIRCxJQW9IQztTQWpIWSxnQkFBZ0I7OztJQUUzQixvQ0FBMEI7Ozs7O0lBRWIsa0NBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUxpc3Qge1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgcGF0aDogc3RyaW5nO1xyXG4gIGlzQ29tcGxldGU6IGJvb2xlYW47XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdlU3RhdGVTZXJ2aWNlIHtcclxuXHJcbiAgcGFnZUxpc3Q6IFBhZ2VMaXN0W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlciApIHsgfVxyXG5cclxuICBzZXRQYWdlcyggYXJyOiBSb3V0ZVtdLFxyXG4gICAgICAgICAgICByb3V0ZUxpc3RDb25zdDogYW55LFxyXG4gICAgICAgICAgICBmbj86ICh4OiBhbnkpID0+IHtba2V5OiBzdHJpbmddOiBhbnl9ICk6IFBhZ2VMaXN0W10ge1xyXG5cclxuICAgIGlmICggdGhpcy5wYWdlTGlzdCAmJiAhdGhpcy5wYWdlTGlzdC5sZW5ndGggKSB7XHJcblxyXG4gICAgICBjb25zdCByb3V0ZUNvbnN0ID0gT2JqZWN0LmtleXMoIHJvdXRlTGlzdENvbnN0ICkubWFwKCB4ID0+IHJvdXRlTGlzdENvbnN0W3hdICk7XHJcblxyXG4gICAgICBsZXQgY250ID0gMDtcclxuICAgICAgdGhpcy5wYWdlTGlzdCA9IGFyci5maWx0ZXIoKGl0bTogYW55KSA9PiAhaXRtLnJlZGlyZWN0VG8pXHJcbiAgICAgICAgLm1hcCgoaXRtOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHZhbCA9IHJvdXRlQ29uc3QuZmluZCggeCA9PiB4LnBhdGggPT09IGl0bS5wYXRoICk7XHJcblxyXG4gICAgICAgICAgY250ID0gY250ICsgMTsgLy8gY291bnQgZm9yIGluZGljZXNcclxuXHJcbiAgICAgICAgICAvLyBQYWdlIExpc3QgdG8gYmUgcmV0dXJuZWRcclxuICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgIGluZGV4OiBjbnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHZhbC5wYXRoLFxyXG4gICAgICAgICAgICBpc0NvbXBsZXRlOiBmYWxzZSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKCBmbiApIHtcclxuICAgICAgICAgICAgb2JqID0gT2JqZWN0LmFzc2lnbiggb2JqLCBmbiggdmFsICkgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlTGlzdDtcclxuICB9XHJcblxyXG4gIC8vIFJldHVybnMgaW5kZXggcGFyYW1ldGVyIHZhbHVlXHJcbiAgZmluZEluZGV4KCB1cmw6IHN0cmluZyA9IG51bGwgKTogbnVtYmVyIHtcclxuICAgIGxldCBpZHggPSAwO1xyXG4gICAgaWYgKCB0aGlzLnBhZ2VMaXN0ICkge1xyXG4gICAgICBjb25zdCBvYmogPSB0aGlzLl9maW5kKHVybCA/IHVybCA6IHRoaXMucm91dGVyLnVybCk7XHJcbiAgICAgIGlmICggb2JqICkge1xyXG4gICAgICAgIGlkeCA9IG9iai5pbmRleDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkeDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VBdEluZGV4KCBpZHg6IG51bWJlciApOiBQYWdlTGlzdCAgfCBudWxsIHtcclxuICAgIGNvbnN0IGluZGV4ID0gaWR4IC0gMTtcclxuICAgIGlmICggdGhpcy5wYWdlTGlzdCAmJiBpbmRleCA+PSAwICYmIHRoaXMucGFnZUxpc3QubGVuZ3RoID4gaW5kZXggKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhZ2VMaXN0W2luZGV4XTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZUluY29tcGxldGUoIHVybDogc3RyaW5nID0gbnVsbCApIHtcclxuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2ZpbmQodXJsID8gdXJsIDogdGhpcy5yb3V0ZXIudXJsKTtcclxuICAgIGlmICggb2JqICkge1xyXG4gICAgICBvYmouaXNDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAvLyBTZXQgZnV0dXJlIHBhZ2VzIHRvIG5vdCBjb21wbGV0ZVxyXG4gICAgICB0aGlzLnBhZ2VMaXN0Lm1hcCggeCA9PiB7XHJcbiAgICAgICAgaWYgKCBvYmouaW5kZXggPCB4LmluZGV4ICYmIHguaXNDb21wbGV0ZSApIHtcclxuICAgICAgICAgIHguaXNDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlQ29tcGxldGUoIHBhdGg6IHN0cmluZyA9IG51bGwgKSB7XHJcbiAgICBjb25zdCBvYmogPSAgdGhpcy5fZmluZChwYXRoID8gcGF0aCA6IHRoaXMucm91dGVyLnVybCk7XHJcbiAgICBpZiAoIG9iaiApIHtcclxuICAgICAgb2JqLmlzQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuTmF2aWdhdGVUb1BhZ2UoIHBhdGg6IHN0cmluZyAgPSBudWxsICk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvbXBsZXRlID0gZmFsc2U7XHJcbiAgICBjb25zdCBvYmogPSAgdGhpcy5fZmluZChwYXRoID8gcGF0aCA6IHRoaXMucm91dGVyLnVybCk7XHJcbiAgICBpZiAoIG9iaiApIHtcclxuICAgICAgLy8gQ2FuIG5hdmlnYXRlIHRvIGZpcnN0IHBsYXkgd2hldGhlciBjb21wbGV0ZSBvciBub3RcclxuICAgICAgY29uc3QgcHJldklkeCA9IG9iai5pbmRleCAtIDE7XHJcbiAgICAgIGNvbXBsZXRlID0gKHByZXZJZHggPT09IDAgPyB0cnVlIDogdGhpcy5wYWdlTGlzdFtwcmV2SWR4IC0gMV0uaXNDb21wbGV0ZSApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBsZXRlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJDb21wbGV0ZVBhZ2VzKCkge1xyXG4gICAgdGhpcy5wYWdlTGlzdC5tYXAoIHggPT4ge1xyXG4gICAgICAgIHguaXNDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcGFnZUxpc3RJc0NsZWFyKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzQ2xlYXIgPSB0cnVlO1xyXG4gICAgaWYgKCB0aGlzLnBhZ2VMaXN0Lmxlbmd0aCA+IDAgKSB7XHJcbiAgICAgIGlzQ2xlYXIgPSB0aGlzLnBhZ2VMaXN0LmV2ZXJ5KCB4ICA9PiB4LmlzQ29tcGxldGUgPT09IGZhbHNlICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNDbGVhcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZWRpcmVjdFxyXG4gIG5hdmlnYXRlQnlVcmwoIHBhdGg6IHN0cmluZyApIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIHBhdGggKTtcclxuICB9XHJcblxyXG4gIC8vIEZpbmQgaXRlbSBpbiBsaXN0XHJcbiAgcHJpdmF0ZSBfZmluZCggcGF0aDogc3RyaW5nICkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZUxpc3QuZmluZCggeCA9PiBwYXRoLmluY2x1ZGVzKHgucGF0aCkgfHwgcGF0aC5lbmRzV2l0aCh4LnBhdGgpKTtcclxuICB9XHJcbn1cclxuIl19