UNPKG

@clr/angular

Version:

Angular components for Clarity

117 lines 15.7 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { AccordionStatus } from '../../enums/accordion-status.enum'; import { AccordionModel } from '../../models/accordion.model'; export class StepperModel extends AccordionModel { constructor() { super(...arguments); this.stepperModelInitialize = false; } get allPanelsCompleted() { return this.panels.length && this.getNumberOfIncompletePanels() === 0 && this.getNumberOfOpenPanels() === 0; } addPanel(id, open = false) { super.addPanel(id, open); this._panels[id].disabled = true; } updatePanelOrder(ids) { super.updatePanelOrder(ids); if (this.stepperModelInitialize === false) { this.openFirstPanel(); } } togglePanel(panelId) { if (this._panels[panelId].status === AccordionStatus.Complete) { this._panels[panelId].open = !this._panels[panelId].open; } } navigateToNextPanel(currentPanelId, currentPanelValid = true) { if (currentPanelValid) { this.completePanel(currentPanelId); this.openNextPanel(this._panels[currentPanelId].id); } else { this.setPanelError(currentPanelId); } } overrideInitialPanel(panelId) { this.panels .filter(() => this._panels[panelId] !== undefined) .forEach(panel => { if (panel.index < this._panels[panelId].index) { this.completePanel(panel.id); } else if (panel.id === panelId) { this._panels[panel.id].open = true; } else { this._panels[panel.id].open = false; } }); } setPanelsWithErrors(ids) { ids.forEach(id => this.setPanelError(id)); } resetPanels() { /* return stepper to initialize state */ this.stepperModelInitialize = false; this.panels.forEach(p => this.resetPanel(p.id)); this.openFirstPanel(); } getNextPanel(currentPanelId) { return this.panels.find(s => s.index === this._panels[currentPanelId].index + 1); } resetAllFuturePanels(panelId) { this.panels.filter(panel => panel.index >= this._panels[panelId].index).forEach(panel => this.resetPanel(panel.id)); } resetPanel(panelId) { this._panels[panelId].status = AccordionStatus.Inactive; this._panels[panelId].open = false; this._panels[panelId].disabled = true; } openFirstPanel() { const firstPanel = this.getFirstPanel(); /** * You need to call updatePanelOrder first to get the correct order, * else the list of panels will not have `index` set and we won't know * how to find the first panel. */ if (!firstPanel) { return; } this._panels[firstPanel.id].open = true; this._panels[firstPanel.id].disabled = true; this.stepperModelInitialize = true; } completePanel(panelId) { this._panels[panelId].status = AccordionStatus.Complete; this._panels[panelId].disabled = false; this._panels[panelId].open = false; } openNextPanel(currentPanelId) { const nextPanel = this.getNextPanel(currentPanelId); if (nextPanel) { this.resetAllFuturePanels(nextPanel.id); this._panels[nextPanel.id].open = true; this._panels[nextPanel.id].disabled = true; } } setPanelError(panelId) { this.resetAllFuturePanels(panelId); this._panels[panelId].open = true; this._panels[panelId].status = AccordionStatus.Error; } getFirstPanel() { return this.panels.find(panel => panel.index === 0); } getNumberOfIncompletePanels() { return this.panels.reduce((prev, next) => (next.status !== AccordionStatus.Complete ? prev + 1 : prev), 0); } getNumberOfOpenPanels() { return this.panels.reduce((prev, next) => (next.open !== false ? prev + 1 : prev), 0); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2FjY29yZGlvbi9zdGVwcGVyL21vZGVscy9zdGVwcGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTlELE1BQU0sT0FBTyxZQUFhLFNBQVEsY0FBYztJQUFoRDs7UUFDVSwyQkFBc0IsR0FBRyxLQUFLLENBQUM7SUF5SHpDLENBQUM7SUF2SEMsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFUSxRQUFRLENBQUMsRUFBVSxFQUFFLElBQUksR0FBRyxLQUFLO1FBQ3hDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRVEsZ0JBQWdCLENBQUMsR0FBYTtRQUNyQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEtBQUssS0FBSyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFUSxXQUFXLENBQUMsT0FBZTtRQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxjQUFzQixFQUFFLGlCQUFpQixHQUFHLElBQUk7UUFDbEUsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFlO1FBQ2xDLElBQUksQ0FBQyxNQUFNO2FBQ1IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDO2FBQ2pELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNmLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDOUI7aUJBQU0sSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRTtnQkFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzthQUNwQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBYTtRQUMvQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1Qsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWSxDQUFDLGNBQXNCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxPQUFlO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVPLFVBQVUsQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEM7Ozs7V0FJRztRQUNILElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDNUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQWU7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxhQUFhLENBQUMsY0FBc0I7UUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVwRCxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUFlO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztJQUN2RCxDQUFDO0lBRU8sYUFBYTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIzIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBBY2NvcmRpb25TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcy9hY2NvcmRpb24tc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgQWNjb3JkaW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWNjb3JkaW9uLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFN0ZXBwZXJNb2RlbCBleHRlbmRzIEFjY29yZGlvbk1vZGVsIHtcbiAgcHJpdmF0ZSBzdGVwcGVyTW9kZWxJbml0aWFsaXplID0gZmFsc2U7XG5cbiAgZ2V0IGFsbFBhbmVsc0NvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHMubGVuZ3RoICYmIHRoaXMuZ2V0TnVtYmVyT2ZJbmNvbXBsZXRlUGFuZWxzKCkgPT09IDAgJiYgdGhpcy5nZXROdW1iZXJPZk9wZW5QYW5lbHMoKSA9PT0gMDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFkZFBhbmVsKGlkOiBzdHJpbmcsIG9wZW4gPSBmYWxzZSkge1xuICAgIHN1cGVyLmFkZFBhbmVsKGlkLCBvcGVuKTtcbiAgICB0aGlzLl9wYW5lbHNbaWRdLmRpc2FibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHVwZGF0ZVBhbmVsT3JkZXIoaWRzOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyLnVwZGF0ZVBhbmVsT3JkZXIoaWRzKTtcbiAgICBpZiAodGhpcy5zdGVwcGVyTW9kZWxJbml0aWFsaXplID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5vcGVuRmlyc3RQYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHRvZ2dsZVBhbmVsKHBhbmVsSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl9wYW5lbHNbcGFuZWxJZF0uc3RhdHVzID09PSBBY2NvcmRpb25TdGF0dXMuQ29tcGxldGUpIHtcbiAgICAgIHRoaXMuX3BhbmVsc1twYW5lbElkXS5vcGVuID0gIXRoaXMuX3BhbmVsc1twYW5lbElkXS5vcGVuO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlVG9OZXh0UGFuZWwoY3VycmVudFBhbmVsSWQ6IHN0cmluZywgY3VycmVudFBhbmVsVmFsaWQgPSB0cnVlKSB7XG4gICAgaWYgKGN1cnJlbnRQYW5lbFZhbGlkKSB7XG4gICAgICB0aGlzLmNvbXBsZXRlUGFuZWwoY3VycmVudFBhbmVsSWQpO1xuICAgICAgdGhpcy5vcGVuTmV4dFBhbmVsKHRoaXMuX3BhbmVsc1tjdXJyZW50UGFuZWxJZF0uaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFBhbmVsRXJyb3IoY3VycmVudFBhbmVsSWQpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlSW5pdGlhbFBhbmVsKHBhbmVsSWQ6IHN0cmluZykge1xuICAgIHRoaXMucGFuZWxzXG4gICAgICAuZmlsdGVyKCgpID0+IHRoaXMuX3BhbmVsc1twYW5lbElkXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZvckVhY2gocGFuZWwgPT4ge1xuICAgICAgICBpZiAocGFuZWwuaW5kZXggPCB0aGlzLl9wYW5lbHNbcGFuZWxJZF0uaW5kZXgpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlUGFuZWwocGFuZWwuaWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhbmVsLmlkID09PSBwYW5lbElkKSB7XG4gICAgICAgICAgdGhpcy5fcGFuZWxzW3BhbmVsLmlkXS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wYW5lbHNbcGFuZWwuaWRdLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZXRQYW5lbHNXaXRoRXJyb3JzKGlkczogc3RyaW5nW10pIHtcbiAgICBpZHMuZm9yRWFjaChpZCA9PiB0aGlzLnNldFBhbmVsRXJyb3IoaWQpKTtcbiAgfVxuXG4gIHJlc2V0UGFuZWxzKCkge1xuICAgIC8qIHJldHVybiBzdGVwcGVyIHRvIGluaXRpYWxpemUgc3RhdGUgKi9cbiAgICB0aGlzLnN0ZXBwZXJNb2RlbEluaXRpYWxpemUgPSBmYWxzZTtcbiAgICB0aGlzLnBhbmVscy5mb3JFYWNoKHAgPT4gdGhpcy5yZXNldFBhbmVsKHAuaWQpKTtcbiAgICB0aGlzLm9wZW5GaXJzdFBhbmVsKCk7XG4gIH1cblxuICBnZXROZXh0UGFuZWwoY3VycmVudFBhbmVsSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBhbmVscy5maW5kKHMgPT4gcy5pbmRleCA9PT0gdGhpcy5fcGFuZWxzW2N1cnJlbnRQYW5lbElkXS5pbmRleCArIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbEZ1dHVyZVBhbmVscyhwYW5lbElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhbmVscy5maWx0ZXIocGFuZWwgPT4gcGFuZWwuaW5kZXggPj0gdGhpcy5fcGFuZWxzW3BhbmVsSWRdLmluZGV4KS5mb3JFYWNoKHBhbmVsID0+IHRoaXMucmVzZXRQYW5lbChwYW5lbC5pZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFBhbmVsKHBhbmVsSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3BhbmVsc1twYW5lbElkXS5zdGF0dXMgPSBBY2NvcmRpb25TdGF0dXMuSW5hY3RpdmU7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLm9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0uZGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlyc3RQYW5lbCgpIHtcbiAgICBjb25zdCBmaXJzdFBhbmVsID0gdGhpcy5nZXRGaXJzdFBhbmVsKCk7XG4gICAgLyoqXG4gICAgICogWW91IG5lZWQgdG8gY2FsbCB1cGRhdGVQYW5lbE9yZGVyIGZpcnN0IHRvIGdldCB0aGUgY29ycmVjdCBvcmRlcixcbiAgICAgKiBlbHNlIHRoZSBsaXN0IG9mIHBhbmVscyB3aWxsIG5vdCBoYXZlIGBpbmRleGAgc2V0IGFuZCB3ZSB3b24ndCBrbm93XG4gICAgICogaG93IHRvIGZpbmQgdGhlIGZpcnN0IHBhbmVsLlxuICAgICAqL1xuICAgIGlmICghZmlyc3RQYW5lbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BhbmVsc1tmaXJzdFBhbmVsLmlkXS5vcGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9wYW5lbHNbZmlyc3RQYW5lbC5pZF0uZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuc3RlcHBlck1vZGVsSW5pdGlhbGl6ZSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNvbXBsZXRlUGFuZWwocGFuZWxJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLnN0YXR1cyA9IEFjY29yZGlvblN0YXR1cy5Db21wbGV0ZTtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0ub3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTmV4dFBhbmVsKGN1cnJlbnRQYW5lbElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXh0UGFuZWwgPSB0aGlzLmdldE5leHRQYW5lbChjdXJyZW50UGFuZWxJZCk7XG5cbiAgICBpZiAobmV4dFBhbmVsKSB7XG4gICAgICB0aGlzLnJlc2V0QWxsRnV0dXJlUGFuZWxzKG5leHRQYW5lbC5pZCk7XG4gICAgICB0aGlzLl9wYW5lbHNbbmV4dFBhbmVsLmlkXS5vcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3BhbmVsc1tuZXh0UGFuZWwuaWRdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhbmVsRXJyb3IocGFuZWxJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yZXNldEFsbEZ1dHVyZVBhbmVscyhwYW5lbElkKTtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0ub3BlbiA9IHRydWU7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLnN0YXR1cyA9IEFjY29yZGlvblN0YXR1cy5FcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3RQYW5lbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHMuZmluZChwYW5lbCA9PiBwYW5lbC5pbmRleCA9PT0gMCk7XG4gIH1cblxuICBwcml2YXRlIGdldE51bWJlck9mSW5jb21wbGV0ZVBhbmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHMucmVkdWNlKChwcmV2LCBuZXh0KSA9PiAobmV4dC5zdGF0dXMgIT09IEFjY29yZGlvblN0YXR1cy5Db21wbGV0ZSA/IHByZXYgKyAxIDogcHJldiksIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROdW1iZXJPZk9wZW5QYW5lbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gKG5leHQub3BlbiAhPT0gZmFsc2UgPyBwcmV2ICsgMSA6IHByZXYpLCAwKTtcbiAgfVxufVxuIl19