@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
101 lines • 17 kB
JavaScript
import { SmeResponsiveWindowBreakpointsValue, SmeResponsiveWindowManagerComponent } from '../common/sme-responsive-window-manager.component';
export class DataTableResponsiveWindowManager extends SmeResponsiveWindowManagerComponent {
constructor() {
super(...arguments);
this.name = 'sme-data-table';
this.previousWindowHeight = -1;
this._isTableRenderedOnPhoneDownWithMinHeight = false;
}
set isTableRenderedOnPhoneDownWithMinHeight(input) {
this._isTableRenderedOnPhoneDownWithMinHeight = !!input;
}
get isTableRenderedOnPhoneDownWithMinHeight() {
return this._isTableRenderedOnPhoneDownWithMinHeight;
}
/**
* Dynamically sync the width of the table header to the table body on phone-down.
*/
updateViewPortWidthDynamicallyOnPhoneDown(scrollBodyElement, renderer, scrollContainerElement, headerTableElement) {
if (!this.cssV2) {
return;
}
const tableContentViewWidth = scrollBodyElement.nativeElement.style.width;
const currentWindowWidth = this.width;
if (tableContentViewWidth && currentWindowWidth > SmeResponsiveWindowBreakpointsValue.PhoneDown) {
renderer.removeStyle(scrollContainerElement.nativeElement, 'overflow-x');
scrollBodyElement.nativeElement.style.width = null;
}
if (!tableContentViewWidth && currentWindowWidth > SmeResponsiveWindowBreakpointsValue.PhoneDown) {
if (headerTableElement.nativeElement.className.includes('sme-table-row-full-width')) {
headerTableElement.nativeElement.classList.remove('sme-table-row-full-width');
}
return;
}
if (currentWindowWidth <= SmeResponsiveWindowBreakpointsValue.PhoneDown) {
renderer.setStyle(scrollContainerElement.nativeElement, 'overflow-x', `auto`);
const scrollContentFullWidth = this.getMaxChildrenWidth(scrollBodyElement.nativeElement);
// grouping data table 47px
// regular data table 26px
const tableCheckboxWidth = 47;
const headerTableElementWidth = headerTableElement.nativeElement.clientWidth;
const headerTableContainerWidth = headerTableElement.nativeElement.parentElement.clientWidth;
if (headerTableElementWidth <= tableCheckboxWidth) {
return;
}
if (headerTableElementWidth < headerTableContainerWidth) {
if (headerTableElement.nativeElement.className.includes('sme-table-auto-width-phone-down')) {
headerTableElement.nativeElement.classList.add('sme-table-row-full-width');
}
scrollBodyElement.nativeElement.style.width = '100%';
}
else {
if (headerTableElement.nativeElement.clientWidth > 0) {
scrollBodyElement.nativeElement.style.width =
headerTableElement.nativeElement.clientWidth + 'px';
}
}
}
}
/**
* This function determines whether the table is displaying with min-height 150px on phone mode.
* This is mainly for some custom logic to get the height of the table for absolute layout calculations.
*/
checkIsTableRenderedOnPhoneDownWithMinHeight(headerTableElement, scrollContainerElement) {
const currentWindowWidth = this.width;
const currentWindowHeight = this.height;
if (currentWindowHeight === this.previousWindowHeight) {
this.previousWindowHeight = currentWindowHeight;
return this.setIsTableRenderedOnPhoneDownWithMinHeight(false);
}
if (currentWindowWidth > SmeResponsiveWindowBreakpointsValue.PhoneDown) {
return this.setIsTableRenderedOnPhoneDownWithMinHeight(false);
}
const headerHeight = headerTableElement.nativeElement.offsetHeight;
const contentHeight = scrollContainerElement.nativeElement.offsetHeight;
// 150px + header, generously grant 200px as limit.
if (headerHeight + contentHeight <= 200) {
return this.setIsTableRenderedOnPhoneDownWithMinHeight(true);
}
return this.setIsTableRenderedOnPhoneDownWithMinHeight(false);
}
setIsTableRenderedOnPhoneDownWithMinHeight(input) {
this.isTableRenderedOnPhoneDownWithMinHeight = input;
return input;
}
getMaxChildrenWidth(parentElement) {
if (!parentElement || !parentElement.childElementCount) {
return;
}
if (!parentElement.className.includes('sme-arrange-stack-h')) {
return parentElement.getBoundingClientRect().width;
}
// For now, only support layout inside of sme-position-stretch-h
let totalWidth = 0;
for (let i = 0; i < parentElement.childElementCount; i++) {
const child = parentElement.children[i];
totalWidth += child.offsetWidth;
}
return totalWidth;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLXJlc3BvbnNpdmUtd2luZG93LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1DQUFtQyxFQUN4QyxtQ0FBbUMsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRW5HLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSxtQ0FBbUM7SUFBekY7O1FBQ29CLFNBQUksR0FBRyxnQkFBZ0IsQ0FBQztRQUNqQyx5QkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQVV6Qiw2Q0FBd0MsR0FBRyxLQUFLLENBQUM7SUEwRzdELENBQUM7SUFsSEcsSUFBVyx1Q0FBdUMsQ0FBQyxLQUFjO1FBQzdELElBQUksQ0FBQyx3Q0FBd0MsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFXLHVDQUF1QztRQUM5QyxPQUFPLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQztJQUN6RCxDQUFDO0lBSUQ7O09BRUc7SUFDSSx5Q0FBeUMsQ0FBQyxpQkFBNkIsRUFBRSxRQUFtQixFQUMvRixzQkFBa0MsRUFBRSxrQkFBOEI7UUFFbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPO1NBQ1Y7UUFFRCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV0QyxJQUFJLHFCQUFxQixJQUFJLGtCQUFrQixHQUFHLG1DQUFtQyxDQUFDLFNBQVMsRUFBRTtZQUM3RixRQUFRLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxZQUFZLENB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LElBQUksQ0FBQyx1Q0FBdUMsR0FBRyxLQUFLLENBQUM7UUFDckQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGFBQTBCO1FBQ2xELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUU7WUFDcEQsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDMUQsT0FBTyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDdEQ7UUFFRCxnRUFBZ0U7UUFDaEUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxLQUFLLEdBQWdCLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsVUFBVSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7U0FDbkM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU21lUmVzcG9uc2l2ZVdpbmRvd0JyZWFrcG9pbnRzVmFsdWUsXHJcbiAgICBTbWVSZXNwb25zaXZlV2luZG93TWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9zbWUtcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlci5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZVJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIGV4dGVuZHMgU21lUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXJDb21wb25lbnQge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSAnc21lLWRhdGEtdGFibGUnO1xyXG4gICAgcHVibGljIHByZXZpb3VzV2luZG93SGVpZ2h0ID0gLTE7XHJcblxyXG4gICAgcHVibGljIHNldCBpc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQoaW5wdXQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9pc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQgPSAhIWlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0ID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEeW5hbWljYWxseSBzeW5jIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUgaGVhZGVyIHRvIHRoZSB0YWJsZSBib2R5IG9uIHBob25lLWRvd24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVWaWV3UG9ydFdpZHRoRHluYW1pY2FsbHlPblBob25lRG93bihzY3JvbGxCb2R5RWxlbWVudDogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBzY3JvbGxDb250YWluZXJFbGVtZW50OiBFbGVtZW50UmVmLCBoZWFkZXJUYWJsZUVsZW1lbnQ6IEVsZW1lbnRSZWYpOiB2b2lkIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNzc1YyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRhYmxlQ29udGVudFZpZXdXaWR0aCA9IHNjcm9sbEJvZHlFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFdpbmRvd1dpZHRoID0gdGhpcy53aWR0aDtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlQ29udGVudFZpZXdXaWR0aCAmJiBjdXJyZW50V2luZG93V2lkdGggPiBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHNWYWx1ZS5QaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoc2Nyb2xsQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAnb3ZlcmZsb3cteCcpO1xyXG4gICAgICAgICAgICBzY3JvbGxCb2R5RWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGFibGVDb250ZW50Vmlld1dpZHRoICYmIGN1cnJlbnRXaW5kb3dXaWR0aCA+IFNtZVJlc3BvbnNpdmVXaW5kb3dCcmVha3BvaW50c1ZhbHVlLlBob25lRG93bikge1xyXG4gICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdzbWUtdGFibGUtcm93LWZ1bGwtd2lkdGgnKSkge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnc21lLXRhYmxlLXJvdy1mdWxsLXdpZHRoJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRXaW5kb3dXaWR0aCA8PSBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHNWYWx1ZS5QaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoc2Nyb2xsQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LCAnb3ZlcmZsb3cteCcsIGBhdXRvYCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxDb250ZW50RnVsbFdpZHRoID0gdGhpcy5nZXRNYXhDaGlsZHJlbldpZHRoKHNjcm9sbEJvZHlFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAvLyBncm91cGluZyBkYXRhIHRhYmxlIDQ3cHhcclxuICAgICAgICAgICAgLy8gcmVndWxhciBkYXRhIHRhYmxlIDI2cHhcclxuICAgICAgICAgICAgY29uc3QgdGFibGVDaGVja2JveFdpZHRoID0gNDc7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlclRhYmxlRWxlbWVudFdpZHRoID0gaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlclRhYmxlQ29udGFpbmVyV2lkdGggPSBoZWFkZXJUYWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKGhlYWRlclRhYmxlRWxlbWVudFdpZHRoIDw9IHRhYmxlQ2hlY2tib3hXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50V2lkdGggPCBoZWFkZXJUYWJsZUNvbnRhaW5lcldpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdzbWUtdGFibGUtYXV0by13aWR0aC1waG9uZS1kb3duJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJUYWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzbWUtdGFibGUtcm93LWZ1bGwtd2lkdGgnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNjcm9sbEJvZHlFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQm9keUVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlclRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0YWJsZSBpcyBkaXNwbGF5aW5nIHdpdGggbWluLWhlaWdodCAxNTBweCBvbiBwaG9uZSBtb2RlLlxyXG4gICAgICogVGhpcyBpcyBtYWlubHkgZm9yIHNvbWUgY3VzdG9tIGxvZ2ljIHRvIGdldCB0aGUgaGVpZ2h0IG9mIHRoZSB0YWJsZSBmb3IgYWJzb2x1dGUgbGF5b3V0IGNhbGN1bGF0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoZWNrSXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KGhlYWRlclRhYmxlRWxlbWVudDogRWxlbWVudFJlZiwgc2Nyb2xsQ29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZik6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRXaW5kb3dXaWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFdpbmRvd0hlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudFdpbmRvd0hlaWdodCA9PT0gdGhpcy5wcmV2aW91c1dpbmRvd0hlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzV2luZG93SGVpZ2h0ID0gY3VycmVudFdpbmRvd0hlaWdodDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50V2luZG93V2lkdGggPiBTbWVSZXNwb25zaXZlV2luZG93QnJlYWtwb2ludHNWYWx1ZS5QaG9uZURvd24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SXNUYWJsZVJlbmRlcmVkT25QaG9uZURvd25XaXRoTWluSGVpZ2h0KGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IGhlYWRlclRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gc2Nyb2xsQ29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gMTUwcHggKyBoZWFkZXIsIGdlbmVyb3VzbHkgZ3JhbnQgMjAwcHggYXMgbGltaXQuXHJcbiAgICAgICAgaWYgKGhlYWRlckhlaWdodCArIGNvbnRlbnRIZWlnaHQgPD0gMjAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldElzVGFibGVSZW5kZXJlZE9uUGhvbmVEb3duV2l0aE1pbkhlaWdodCh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNldElzVGFibGVSZW5kZXJlZE9uUGhvbmVEb3duV2l0aE1pbkhlaWdodChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRJc1RhYmxlUmVuZGVyZWRPblBob25lRG93bldpdGhNaW5IZWlnaHQoaW5wdXQ6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLmlzVGFibGVSZW5kZXJlZE9uUGhvbmVEb3duV2l0aE1pbkhlaWdodCA9IGlucHV0O1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1heENoaWxkcmVuV2lkdGgocGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQgfHwgIXBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnc21lLWFycmFuZ2Utc3RhY2staCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IGxheW91dCBpbnNpZGUgb2Ygc21lLXBvc2l0aW9uLXN0cmV0Y2gtaFxyXG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IDxIVE1MRWxlbWVudD5wYXJlbnRFbGVtZW50LmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICB0b3RhbFdpZHRoICs9IGNoaWxkLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvdGFsV2lkdGg7XHJcbiAgICB9XHJcbn1cclxuIl19