@formql/core
Version:
FormQL - A framework for building dynamic forms
137 lines • 22 kB
JavaScript
import { __decorate } from "tslib";
import { Injectable } from '@angular/core';
import { UUID } from 'angular2-uuid';
var DndService = /** @class */ (function () {
function DndService() {
}
DndService.prototype.synchroniseSectionModel = function (page, event) {
var sourceSection = page.sections.find(function (s) { return s.sectionId === event.sourceWrapperId; });
var sourceComponent = null;
if (event.sourceObjectId === 'new') {
sourceComponent = this.newComponent();
event.sourceObjectId = sourceComponent.componentId;
sourceSection = page.sections.find(function (s) { return s.sectionId === event.targetWrapperId; });
if (sourceSection)
sourceSection.components.push(sourceComponent);
else
return page; // this should never happen
}
else
sourceComponent = sourceSection.components.find(function (c) { return c.componentId === event.sourceObjectId; });
if (!sourceComponent)
return;
// has the component been moved across position type (header/body)?
if (sourceComponent.position.type !== event.positionType)
sourceComponent.position.type = event.positionType;
// has the component been placed in a differnet CSS grid area?
if (sourceComponent.position.id !== event.targetPositionId)
sourceComponent.position.id = event.targetPositionId;
if (event.sourceWrapperId !== event.targetWrapperId) {
var targetSection = this.transferComponent(page, sourceSection, event);
targetSection.template.reRender = true;
targetSection = this.reorderComponents(targetSection, sourceComponent, event);
}
else
sourceSection = this.reorderComponents(sourceSection, sourceComponent, event);
sourceSection.template.reRender = true;
return page;
};
DndService.prototype.synchronisePageModel = function (page, event) {
var sourceSection = null;
if (event.sourceObjectId === 'new') {
sourceSection = this.newSection();
page.sections.push(sourceSection);
}
else
sourceSection = page.sections.find(function (s) { return s.sectionId === event.sourceObjectId; });
// can't find the source section, model must be in different page
if (sourceSection != null) {
if (sourceSection.position.id !== event.targetPositionId)
sourceSection.position.id = event.targetPositionId;
page.template.reRender = true;
page = this.reorderSections(page, sourceSection, event);
}
return page;
};
DndService.prototype.reorderComponents = function (section, sourceCompoment, event) {
var components = section.components.filter(function (c) { return c.position.id === sourceCompoment.position.id; });
var targetComponent = components.find(function (c) { return c.componentId === event.targetIndexId; });
if (targetComponent) {
sourceCompoment.position.index = targetComponent.position.index;
targetComponent.position.index = targetComponent.position.index + 0.5;
}
components = components.sort(function (left, right) {
return left.position.index - right.position.index;
});
for (var i = 0; i < components.length; i++) {
components[i].position.index = i;
}
return section;
};
DndService.prototype.reorderSections = function (page, sourceSection, event) {
var sections = page.sections.filter(function (c) { return c.position.id === sourceSection.position.id; });
var targetSection = sections.find(function (c) { return c.sectionId === event.targetIndexId; });
if (targetSection) {
sourceSection.position.index = targetSection.position.index;
targetSection.position.index = targetSection.position.index + 0.5;
}
sections = sections.sort(function (left, right) {
return left.position.index - right.position.index;
});
for (var i = 0; i < sections.length; i++)
sections[i].position.index = i;
return page;
};
DndService.prototype.transferComponent = function (page, sourceSection, event) {
var targetSection = page.sections.find(function (s) { return s.sectionId === event.targetWrapperId; });
if (!targetSection)
return null;
var component = sourceSection.components.find(function (c) { return c.componentId === event.sourceObjectId; });
if (!component)
return null;
var index = sourceSection.components.findIndex(function (s) { return s.componentId === event.sourceObjectId; });
targetSection.components.push(component);
sourceSection.components.splice(index, 1);
return targetSection;
};
DndService.prototype.newSection = function () {
return {
sectionId: UUID.UUID(),
sectionName: 'New section',
components: [],
template: {
header: {
gridTemplateColumns: '1fr',
gridTemplateRows: '1fr',
gridTemplateAreas: '"ID1_1"'
},
body: {
gridTemplateColumns: '1fr',
gridTemplateRows: '1fr',
gridTemplateAreas: '"ID1_1"'
}
},
position: {
id: '-1',
index: 0
}
};
};
DndService.prototype.newComponent = function () {
return {
componentId: UUID.UUID(),
label: 'New Component',
componentName: 'FormQLLabelComponent',
position: {
id: '-1',
index: 0
}
};
};
DndService = __decorate([
Injectable()
], DndService);
return DndService;
}());
export { DndService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZm9ybXFsL2NvcmUvIiwic291cmNlcyI6WyJzZXJ2aWNlcy9kbmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3JDO0lBQUE7SUFxSkEsQ0FBQztJQW5KRyw0Q0FBdUIsR0FBdkIsVUFBd0IsSUFBYyxFQUFFLEtBQWU7UUFDbkQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxlQUFlLEVBQXJDLENBQXFDLENBQUMsQ0FBQztRQUNuRixJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRTtZQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLEtBQUssQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztZQUNuRCxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxlQUFlLEVBQXJDLENBQXFDLENBQUMsQ0FBQztZQUMvRSxJQUFJLGFBQWE7Z0JBQ2IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7O2dCQUUvQyxPQUFPLElBQUksQ0FBQyxDQUFDLDJCQUEyQjtTQUMvQzs7WUFDRyxlQUFlLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxjQUFjLEVBQXRD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LE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFTywrQkFBVSxHQUFsQjtRQUNJLE9BQW9CO1lBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3RCLFdBQVcsRUFBRSxhQUFhO1lBQzFCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsUUFBUSxFQUFnQjtnQkFDcEIsTUFBTSxFQUFjO29CQUNoQixtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixnQkFBZ0IsRUFBRSxLQUFLO29CQUN2QixpQkFBaUIsRUFBRSxTQUFTO2lCQUMvQjtnQkFDRCxJQUFJLEVBQWE7b0JBQ2IsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsZ0JBQWdCLEVBQUUsS0FBSztvQkFDdkIsaUJBQWlCLEVBQUUsU0FBUztpQkFDL0I7YUFDSjtZQUNELFFBQVEsRUFBaUI7Z0JBQ3JCLEVBQUUsRUFBRSxJQUFJO2dCQUNSLEtBQUssRUFBRSxDQUFDO2FBQ1g7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLGlDQUFZLEdBQXBCO1FBQ0ksT0FBMkI7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDeEIsS0FBSyxFQUFFLGVBQWU7WUFDdEIsYUFBYSxFQUFFLHNCQUFzQjtZQUNyQyxRQUFRLEVBQWlCO2dCQUNyQixFQUFFLEVBQUUsSUFBSTtnQkFDUixLQUFLLEVBQUUsQ0FBQzthQUNYO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFwSlEsVUFBVTtRQUR0QixVQUFVLEVBQUU7T0FDQSxVQUFVLENBcUp0QjtJQUFELGlCQUFDO0NBQUEsQUFySkQsSUFxSkM7U0FySlksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL21vZGVscy9mb3JtLWNvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm1TZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tc2VjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm1QYWdlIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tcGFnZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVVSUQgfSBmcm9tICdhbmd1bGFyMi11dWlkJztcclxuaW1wb3J0IHsgRG5kRXZlbnQgfSBmcm9tICcuLi9tb2RlbHMvZG5kLm1vZGVsJztcclxuaW1wb3J0IHsgR3JpZFN0eWxlLCBHcmlkVGVtcGxhdGUsIEdyaWRQb3NpdGlvbiB9IGZyb20gJy4uL21vZGVscy9zdHlsZS5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEbmRTZXJ2aWNlIHtcclxuXHJcbiAgICBzeW5jaHJvbmlzZVNlY3Rpb25Nb2RlbChwYWdlOiBGb3JtUGFnZSwgZXZlbnQ6IERuZEV2ZW50KSB7XHJcbiAgICAgICAgbGV0IHNvdXJjZVNlY3Rpb24gPSBwYWdlLnNlY3Rpb25zLmZpbmQocyA9PiBzLnNlY3Rpb25JZCA9PT0gZXZlbnQuc291cmNlV3JhcHBlcklkKTtcclxuICAgICAgICBsZXQgc291cmNlQ29tcG9uZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoZXZlbnQuc291cmNlT2JqZWN0SWQgPT09ICduZXcnKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudCA9IHRoaXMubmV3Q29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZU9iamVjdElkID0gc291cmNlQ29tcG9uZW50LmNvbXBvbmVudElkO1xyXG4gICAgICAgICAgICBzb3VyY2VTZWN0aW9uID0gcGFnZS5zZWN0aW9ucy5maW5kKHMgPT4gcy5zZWN0aW9uSWQgPT09IGV2ZW50LnRhcmdldFdyYXBwZXJJZCk7XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VTZWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgc291cmNlU2VjdGlvbi5jb21wb25lbnRzLnB1c2goc291cmNlQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2U7IC8vIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2VTZWN0aW9uLmNvbXBvbmVudHMuZmluZChjID0+IGMuY29tcG9uZW50SWQgPT09IGV2ZW50LnNvdXJjZU9iamVjdElkKTtcclxuXHJcbiAgICAgICAgaWYgKCFzb3VyY2VDb21wb25lbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gaGFzIHRoZSBjb21wb25lbnQgYmVlbiBtb3ZlZCBhY3Jvc3MgcG9zaXRpb24gdHlwZSAoaGVhZGVyL2JvZHkpP1xyXG4gICAgICAgIGlmIChzb3VyY2VDb21wb25lbnQucG9zaXRpb24udHlwZSAhPT0gZXZlbnQucG9zaXRpb25UeXBlKVxyXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQucG9zaXRpb24udHlwZSA9IGV2ZW50LnBvc2l0aW9uVHlwZTtcclxuXHJcbiAgICAgICAgLy8gaGFzIHRoZSBjb21wb25lbnQgYmVlbiBwbGFjZWQgaW4gYSBkaWZmZXJuZXQgQ1NTIGdyaWQgYXJlYT9cclxuICAgICAgICBpZiAoc291cmNlQ29tcG9uZW50LnBvc2l0aW9uLmlkICE9PSBldmVudC50YXJnZXRQb3NpdGlvbklkKVxyXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQucG9zaXRpb24uaWQgPSBldmVudC50YXJnZXRQb3NpdGlvbklkO1xyXG5cclxuICAgICAgICBpZiAoZXZlbnQuc291cmNlV3JhcHBlcklkICE9PSBldmVudC50YXJnZXRXcmFwcGVySWQpIHtcclxuICAgICAgICAgICAgbGV0IHRhcmdldFNlY3Rpb24gPSB0aGlzLnRyYW5zZmVyQ29tcG9uZW50KHBhZ2UsIHNvdXJjZVNlY3Rpb24sIGV2ZW50KTtcclxuICAgICAgICAgICAgdGFyZ2V0U2VjdGlvbi50ZW1wbGF0ZS5yZVJlbmRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldFNlY3Rpb24gPSB0aGlzLnJlb3JkZXJDb21wb25lbnRzKHRhcmdldFNlY3Rpb24sIHNvdXJjZUNvbXBvbmVudCwgZXZlbnQpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBzb3VyY2VTZWN0aW9uID0gdGhpcy5yZW9yZGVyQ29tcG9uZW50cyhzb3VyY2VTZWN0aW9uLCBzb3VyY2VDb21wb25lbnQsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgc291cmNlU2VjdGlvbi50ZW1wbGF0ZS5yZVJlbmRlciA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHBhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgc3luY2hyb25pc2VQYWdlTW9kZWwocGFnZTogRm9ybVBhZ2UsIGV2ZW50OiBEbmRFdmVudCkge1xyXG4gICAgICAgIGxldCBzb3VyY2VTZWN0aW9uID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LnNvdXJjZU9iamVjdElkID09PSAnbmV3Jykge1xyXG4gICAgICAgICAgICBzb3VyY2VTZWN0aW9uID0gdGhpcy5uZXdTZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHBhZ2Uuc2VjdGlvbnMucHVzaChzb3VyY2VTZWN0aW9uKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgc291cmNlU2VjdGlvbiA9IHBhZ2Uuc2VjdGlvbnMuZmluZChzID0+IHMuc2VjdGlvbklkID09PSBldmVudC5zb3VyY2VPYmplY3RJZCk7XHJcblxyXG4gICAgICAgIC8vIGNhbid0IGZpbmQgdGhlIHNvdXJjZSBzZWN0aW9uLCBtb2RlbCBtdXN0IGJlIGluIGRpZmZlcmVudCBwYWdlXHJcbiAgICAgICAgaWYgKHNvdXJjZVNlY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoc291cmNlU2VjdGlvbi5wb3NpdGlvbi5pZCAhPT0gZXZlbnQudGFyZ2V0UG9zaXRpb25JZClcclxuICAgICAgICAgICAgICAgIHNvdXJjZVNlY3Rpb24ucG9zaXRpb24uaWQgPSBldmVudC50YXJnZXRQb3NpdGlvbklkO1xyXG5cclxuICAgICAgICAgICAgcGFnZS50ZW1wbGF0ZS5yZVJlbmRlciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBwYWdlID0gdGhpcy5yZW9yZGVyU2VjdGlvbnMocGFnZSwgc291cmNlU2VjdGlvbiwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlb3JkZXJDb21wb25lbnRzKHNlY3Rpb246IEZvcm1TZWN0aW9uLCBzb3VyY2VDb21wb21lbnQ6IEZvcm1Db21wb25lbnQ8YW55PiwgZXZlbnQ6IERuZEV2ZW50KSB7XHJcbiAgICAgICAgbGV0IGNvbXBvbmVudHMgPSBzZWN0aW9uLmNvbXBvbmVudHMuZmlsdGVyKGMgPT4gYy5wb3NpdGlvbi5pZCA9PT0gc291cmNlQ29tcG9tZW50LnBvc2l0aW9uLmlkKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29tcG9uZW50ID0gY29tcG9uZW50cy5maW5kKGMgPT4gYy5jb21wb25lbnRJZCA9PT0gZXZlbnQudGFyZ2V0SW5kZXhJZCk7XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgc291cmNlQ29tcG9tZW50LnBvc2l0aW9uLmluZGV4ID0gdGFyZ2V0Q29tcG9uZW50LnBvc2l0aW9uLmluZGV4O1xyXG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnQucG9zaXRpb24uaW5kZXggPSB0YXJnZXRDb21wb25lbnQucG9zaXRpb24uaW5kZXggKyAwLjU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnRzID0gY29tcG9uZW50cy5zb3J0KChsZWZ0OiBGb3JtQ29tcG9uZW50PGFueT4sIHJpZ2h0OiBGb3JtQ29tcG9uZW50PGFueT4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGxlZnQucG9zaXRpb24uaW5kZXggLSByaWdodC5wb3NpdGlvbi5pbmRleDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29tcG9uZW50c1tpXS5wb3NpdGlvbi5pbmRleCA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVvcmRlclNlY3Rpb25zKHBhZ2U6IEZvcm1QYWdlLCBzb3VyY2VTZWN0aW9uOiBGb3JtU2VjdGlvbiwgZXZlbnQ6IERuZEV2ZW50KSB7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25zID0gcGFnZS5zZWN0aW9ucy5maWx0ZXIoYyA9PiBjLnBvc2l0aW9uLmlkID09PSBzb3VyY2VTZWN0aW9uLnBvc2l0aW9uLmlkKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U2VjdGlvbiA9IHNlY3Rpb25zLmZpbmQoYyA9PiBjLnNlY3Rpb25JZCA9PT0gZXZlbnQudGFyZ2V0SW5kZXhJZCk7XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXRTZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHNvdXJjZVNlY3Rpb24ucG9zaXRpb24uaW5kZXggPSB0YXJnZXRTZWN0aW9uLnBvc2l0aW9uLmluZGV4O1xyXG4gICAgICAgICAgICB0YXJnZXRTZWN0aW9uLnBvc2l0aW9uLmluZGV4ID0gdGFyZ2V0U2VjdGlvbi5wb3NpdGlvbi5pbmRleCArIDAuNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlY3Rpb25zID0gc2VjdGlvbnMuc29ydCgobGVmdDogRm9ybVNlY3Rpb24sIHJpZ2h0OiBGb3JtU2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbGVmdC5wb3NpdGlvbi5pbmRleCAtIHJpZ2h0LnBvc2l0aW9uLmluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHNlY3Rpb25zW2ldLnBvc2l0aW9uLmluZGV4ID0gaTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2ZlckNvbXBvbmVudChwYWdlOiBGb3JtUGFnZSwgc291cmNlU2VjdGlvbjogRm9ybVNlY3Rpb24sIGV2ZW50OiBEbmRFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFNlY3Rpb24gPSBwYWdlLnNlY3Rpb25zLmZpbmQocyA9PiBzLnNlY3Rpb25JZCA9PT0gZXZlbnQudGFyZ2V0V3JhcHBlcklkKTtcclxuICAgICAgICBpZiAoIXRhcmdldFNlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBzb3VyY2VTZWN0aW9uLmNvbXBvbmVudHMuZmluZChjID0+IGMuY29tcG9uZW50SWQgPT09IGV2ZW50LnNvdXJjZU9iamVjdElkKTtcclxuICAgICAgICBpZiAoIWNvbXBvbmVudClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gc291cmNlU2VjdGlvbi5jb21wb25lbnRzLmZpbmRJbmRleChzID0+IHMuY29tcG9uZW50SWQgPT09IGV2ZW50LnNvdXJjZU9iamVjdElkKTtcclxuXHJcbiAgICAgICAgdGFyZ2V0U2VjdGlvbi5jb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcclxuICAgICAgICBzb3VyY2VTZWN0aW9uLmNvbXBvbmVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFNlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBuZXdTZWN0aW9uKCk6IEZvcm1TZWN0aW9uIHtcclxuICAgICAgICByZXR1cm4gPEZvcm1TZWN0aW9uPntcclxuICAgICAgICAgICAgc2VjdGlvbklkOiBVVUlELlVVSUQoKSxcclxuICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICdOZXcgc2VjdGlvbicsXHJcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtdLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogPEdyaWRUZW1wbGF0ZT57XHJcbiAgICAgICAgICAgICAgICBoZWFkZXI6IDxHcmlkU3R5bGU+IHtcclxuICAgICAgICAgICAgICAgICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiAnMWZyJyxcclxuICAgICAgICAgICAgICAgICAgICBncmlkVGVtcGxhdGVSb3dzOiAnMWZyJyxcclxuICAgICAgICAgICAgICAgICAgICBncmlkVGVtcGxhdGVBcmVhczogJ1wiSUQxXzFcIidcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBib2R5OiA8R3JpZFN0eWxlPntcclxuICAgICAgICAgICAgICAgICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiAnMWZyJyxcclxuICAgICAgICAgICAgICAgICAgICBncmlkVGVtcGxhdGVSb3dzOiAnMWZyJyxcclxuICAgICAgICAgICAgICAgICAgICBncmlkVGVtcGxhdGVBcmVhczogJ1wiSUQxXzFcIidcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcG9zaXRpb246IDxHcmlkUG9zaXRpb24+IHtcclxuICAgICAgICAgICAgICAgIGlkOiAnLTEnLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBuZXdDb21wb25lbnQoKTogRm9ybUNvbXBvbmVudDxhbnk+IHtcclxuICAgICAgICByZXR1cm4gPEZvcm1Db21wb25lbnQ8YW55Pj57XHJcbiAgICAgICAgICAgIGNvbXBvbmVudElkOiBVVUlELlVVSUQoKSxcclxuICAgICAgICAgICAgbGFiZWw6ICdOZXcgQ29tcG9uZW50JyxcclxuICAgICAgICAgICAgY29tcG9uZW50TmFtZTogJ0Zvcm1RTExhYmVsQ29tcG9uZW50JyxcclxuICAgICAgICAgICAgcG9zaXRpb246IDxHcmlkUG9zaXRpb24+IHtcclxuICAgICAgICAgICAgICAgIGlkOiAnLTEnLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIl19