dynamic-display-shared
Version:
A library for dynamic view
389 lines • 97.7 kB
JavaScript
import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
import { EventEmitter, Output, ViewChild, ElementRef, HostListener, ChangeDetectorRef } from '@angular/core';
import { EntityDetailsViewModel } from '../model/entity-details.view-model';
import { DeviceTypeService } from '../services/device-type.service';
import { EntityService } from '../services/entity.service';
import { Inject } from '@angular/core';
import { applyDownloadLink } from '../documents/documents.helper';
import { StorageService } from '../documents/storage.service';
import { ParametersGroup } from '../model/entity-details.view-model';
import { isSimpleParameter, isEntityParameter, getSimpleParameters } from '../model/view-model.helper';
import { MatDialog } from '@angular/material/dialog';
import { LongTextDialogComponent } from './long-text-dialog/long-text-dialog.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/material/expansion";
import * as i3 from "../services/entity.service";
import * as i4 from "../services/device-type.service";
import * as i5 from "../documents/storage.service";
import * as i6 from "@angular/material/tooltip";
import * as i7 from "@angular/material/dialog";
import * as i8 from "@angular/material/icon";
class EntitiesCollectionViewComponent {
constructor() { }
ngOnInit() {
}
}
EntitiesCollectionViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: EntitiesCollectionViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
EntitiesCollectionViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: EntitiesCollectionViewComponent, selector: "app-entities-collection-view", inputs: { entityParameter: "entityParameter" }, ngImport: i0, template: "<div *ngIf=\"entityParameter\" class=\"entities-collection\">\r\n <app-inner-entity-details *ngIf=\"entityParameter.value.length === 1\"\r\n [entityDetailsViewModel]=\"entityParameter.value[0]\">\r\n </app-inner-entity-details>\r\n <div *ngIf=\"entityParameter.value.length > 1\">\r\n <mat-expansion-panel *ngIf=\"$any(entityParameter).enableExpansion\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{entityParameter.value[0].pluralEntitiesDescription}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{entityParameter.value.length}} {{entityParameter.value[0].pluralEntitiesDescription}}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <app-entities-list [entities]=\"entityParameter.value\"></app-entities-list>\r\n\r\n </mat-expansion-panel>\r\n <div *ngIf=\"$any(!entityParameter).enableExpansion\">\r\n <app-entities-list [entities]=\"entityParameter.value\"></app-entities-list>\r\n </div>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(function () { return i2.MatExpansionPanel; }), selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i0.forwardRef(function () { return i2.MatExpansionPanelHeader; }), selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.MatExpansionPanelTitle; }), selector: "mat-panel-title" }, { kind: "directive", type: i0.forwardRef(function () { return i2.MatExpansionPanelDescription; }), selector: "mat-panel-description" }, { kind: "component", type: i0.forwardRef(function () { return InnerEntityDetailsComponent; }), selector: "app-inner-entity-details", inputs: ["entityDetailsViewModel", "currentPage"], outputs: ["expantionOpened", "expantionClosed"] }, { kind: "component", type: i0.forwardRef(function () { return EntitiesListComponent; }), selector: "app-entities-list", inputs: ["displayEntitiesInline", "displayEntityBackground", "entities", "columnsNumber", "index", "isProcess"], outputs: ["entityClickEmitter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: EntitiesCollectionViewComponent, decorators: [{
type: Component,
args: [{ selector: 'app-entities-collection-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"entityParameter\" class=\"entities-collection\">\r\n <app-inner-entity-details *ngIf=\"entityParameter.value.length === 1\"\r\n [entityDetailsViewModel]=\"entityParameter.value[0]\">\r\n </app-inner-entity-details>\r\n <div *ngIf=\"entityParameter.value.length > 1\">\r\n <mat-expansion-panel *ngIf=\"$any(entityParameter).enableExpansion\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{entityParameter.value[0].pluralEntitiesDescription}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{entityParameter.value.length}} {{entityParameter.value[0].pluralEntitiesDescription}}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <app-entities-list [entities]=\"entityParameter.value\"></app-entities-list>\r\n\r\n </mat-expansion-panel>\r\n <div *ngIf=\"$any(!entityParameter).enableExpansion\">\r\n <app-entities-list [entities]=\"entityParameter.value\"></app-entities-list>\r\n </div>\r\n </div>\r\n</div>" }]
}], ctorParameters: function () { return []; }, propDecorators: { entityParameter: [{
type: Input
}] } });
class EntitiesListComponent {
constructor(entittService, deviceTypeService, changeDetector) {
this.entittService = entittService;
this.deviceTypeService = deviceTypeService;
this.changeDetector = changeDetector;
this.entityClickEmitter = new EventEmitter();
}
ngOnInit() {
this.deviceTypeService.isMobile$.subscribe(isMobile => {
this.isMobile = isMobile;
this.changeDetector.markForCheck();
});
}
ngAfterViewInit() {
if (this.isProcess && this.elementView && !this.isMobile) {
this.equalHeightEntitiesList();
}
}
entityClick(entityDetailsViewModel) {
console.log(`from entities list: ${entityDetailsViewModel.id}`);
this.entityClickEmitter.emit(entityDetailsViewModel);
}
equalHeightEntitiesList() {
this.viewHeight = this.elementView.nativeElement.offsetHeight;
this.index === 0 ? this.entittService.innerEntitiesProcessHeight = [] : null;
if ((this.index % 2) === 0) {
if (!(this.entittService.innerEntitiesProcessHeight[this.index + 1])) {
this.entittService.innerEntitiesProcessHeight[this.index] = this.viewHeight;
document.getElementById(`entitiesList${this.index}`).style.height = this.entittService.innerEntitiesProcessHeight[this.index] + 'px';
}
else {
document.getElementById(`entitiesList${this.index}`).style.height = this.entittService.innerEntitiesProcessHeight[this.index] + 'px';
}
}
else {
if (this.entittService.innerEntitiesProcessHeight[this.index - 1] > this.viewHeight) {
this.entittService.innerEntitiesProcessHeight[this.index] = this.entittService.innerEntitiesProcessHeight[this.index - 1];
document.getElementById(`entitiesList${this.index}`).style.height = this.entittService.innerEntitiesProcessHeight[this.index] + 'px';
}
else {
this.entittService.innerEntitiesProcessHeight[this.index] = this.viewHeight;
if (this.entittService.innerEntitiesProcessHeight[this.index - 1]) {
this.entittService.innerEntitiesProcessHeight[this.index - 1] = this.entittService.innerEntitiesProcessHeight[this.index];
document.getElementById(`entitiesList${this.index - 1}`).style.height = this.entittService.innerEntitiesProcessHeight[this.index - 1] + 'px';
}
}
}
}
onResize() {
if (this.index === undefined) {
this.entittService.innerEntitiesProcessHeight = [];
}
else if (!this.isMobile) {
this.equalHeightEntitiesList();
}
}
}
EntitiesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: EntitiesListComponent, deps: [{ token: i3.EntityService }, { token: i4.DeviceTypeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
EntitiesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: EntitiesListComponent, selector: "app-entities-list", inputs: { displayEntitiesInline: "displayEntitiesInline", displayEntityBackground: "displayEntityBackground", entities: "entities", columnsNumber: "columnsNumber", index: "index", isProcess: "isProcess" }, outputs: { entityClickEmitter: "entityClickEmitter" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "elementView", first: true, predicate: ["spanElement"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div *ngIf=\"entities\">\r\n <div id=\"column-count\" [style.column-count]=\"columnsNumber\" #entitiesListElement id=\"{{'entitiesList'+index}}\"\r\n [class.entities-background]=\"isProcess\">\r\n <div #spanElement>\r\n <div *ngFor=\"let entity of entities; index as i\" [class.entity-item-inline]=\"displayEntitiesInline\"\r\n [class.entity-item-in-collection]=\"!displayEntitiesInline\"\r\n [class.border-buttom]=\"i==entities.length-1 && isProcess\">\r\n <div [class.entity-background]=\"displayEntityBackground\">\r\n <app-inner-entity-details (click)=\"entityClick(entity)\" [entityDetailsViewModel]=\"entity\">\r\n </app-inner-entity-details>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".entity-item-in-collection{border-top:solid 1px #ddd}.entity-item-inline{display:inline-block}.entity-background{background-color:#62b0a763;margin:2px;width:max-content}.entities-background{background-color:#f5f5f5}.border-buttom{border-bottom:solid 1px #ddd}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(function () { return InnerEntityDetailsComponent; }), selector: "app-inner-entity-details", inputs: ["entityDetailsViewModel", "currentPage"], outputs: ["expantionOpened", "expantionClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: EntitiesListComponent, decorators: [{
type: Component,
args: [{ selector: 'app-entities-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"entities\">\r\n <div id=\"column-count\" [style.column-count]=\"columnsNumber\" #entitiesListElement id=\"{{'entitiesList'+index}}\"\r\n [class.entities-background]=\"isProcess\">\r\n <div #spanElement>\r\n <div *ngFor=\"let entity of entities; index as i\" [class.entity-item-inline]=\"displayEntitiesInline\"\r\n [class.entity-item-in-collection]=\"!displayEntitiesInline\"\r\n [class.border-buttom]=\"i==entities.length-1 && isProcess\">\r\n <div [class.entity-background]=\"displayEntityBackground\">\r\n <app-inner-entity-details (click)=\"entityClick(entity)\" [entityDetailsViewModel]=\"entity\">\r\n </app-inner-entity-details>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".entity-item-in-collection{border-top:solid 1px #ddd}.entity-item-inline{display:inline-block}.entity-background{background-color:#62b0a763;margin:2px;width:max-content}.entities-background{background-color:#f5f5f5}.border-buttom{border-bottom:solid 1px #ddd}\n"] }]
}], ctorParameters: function () { return [{ type: i3.EntityService }, { type: i4.DeviceTypeService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { displayEntitiesInline: [{
type: Input
}], displayEntityBackground: [{
type: Input
}], entities: [{
type: Input
}], columnsNumber: [{
type: Input
}], index: [{
type: Input
}], isProcess: [{
type: Input
}], entityClickEmitter: [{
type: Output
}], elementView: [{
type: ViewChild,
args: ['spanElement', { read: ElementRef, static: false }]
}], onResize: [{
type: HostListener,
args: ['window:resize', ['$event']]
}] } });
class InnerEntityDetailsComponent {
constructor(storageService, env) {
this.storageService = storageService;
this.env = env;
this.expantionOpened = new EventEmitter();
this.expantionClosed = new EventEmitter();
this.isDisplayDevIndications = this.env.isDisplayDevIndications;
this.mobWidth = (window.screen.width);
}
ngOnInit() {
}
getMoreClasses() {
const defaultClass = 'entity-container';
if (this.entityDetailsViewModel.cssClasses) {
console.log(this.entityDetailsViewModel.cssClasses);
return `${defaultClass} ${this.entityDetailsViewModel.cssClasses}`;
}
else {
return defaultClass;
}
}
onResize() {
this.mobWidth = (window.screen.width);
}
downloadDocument(parameter) {
this.storageService.getReadSASTokenURL(parameter.storedFileName).subscribe(url => {
applyDownloadLink(url, parameter.value, true);
});
}
groupCollectionOpen() {
console.log("expantion opened event2 in inner-entity-details");
this.expantionOpened.emit();
}
groupCollectionClosed() {
this.expantionClosed.emit();
}
getIsDisplayGroup(group) {
let isDisplayGroup = false;
let innerGroup = group;
if (innerGroup) {
for (let i = 0; i < innerGroup.parameters.length; i++) {
if ((innerGroup.parameters[i].hideWhenEmptyValue === null || innerGroup.parameters[i].hideWhenEmptyValue === false) || (innerGroup.parameters[i].value !== null && innerGroup.parameters[i].value !== '')) {
isDisplayGroup = true;
break;
}
else {
isDisplayGroup = false;
}
}
}
return isDisplayGroup;
}
}
InnerEntityDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: InnerEntityDetailsComponent, deps: [{ token: i5.StorageService }, { token: 'env' }], target: i0.ɵɵFactoryTarget.Component });
InnerEntityDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: InnerEntityDetailsComponent, selector: "app-inner-entity-details", inputs: { entityDetailsViewModel: "entityDetailsViewModel", currentPage: "currentPage" }, outputs: { expantionOpened: "expantionOpened", expantionClosed: "expantionClosed" }, host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<div *ngIf=\"entityDetailsViewModel\" [class]=\"getMoreClasses()\"\r\n[matTooltip]=\"isDisplayDevIndications? this.entityDetailsViewModel.type + ', ' + entityDetailsViewModel.presentationEntityId + ' (' + entityDetailsViewModel.id + ', ' + entityDetailsViewModel.fixedId + ')': '' \" matTooltipPosition=\"above\">\r\n <!-- <span dir=\"ltr\" *ngIf=\"isDisplayDevIndications\"\r\n class=\"dev-indication\">{{entityDetailsViewModel.presentationEntityId}} ({{entityDetailsViewModel.id}}, {{entityDetailsViewModel.fixedId}})</span> -->\r\n <div *ngFor=\"let group of entityDetailsViewModel.parametersGroups; let i = index\" class=\"parameters-group\">\r\n <span *ngIf=\"entityDetailsViewModel.isDisplayDescription && i === 0 && mobWidth > 700\"\r\n class=\"title-parameter bold entity-description\">{{entityDetailsViewModel.description}}</span>\r\n <app-parameters-group *ngIf=\"getIsDisplayGroup(group)\" class=\"group-delimitation\" (expantionClosed)=\"groupCollectionClosed()\"\r\n (expantionOpened)=\"groupCollectionOpen()\" [group]=\"group\" (downloadDocument)=\"downloadDocument($event)\"\r\n [style.width.%]=\"100\" [currentPage]=\"currentPage\">\r\n </app-parameters-group>\r\n </div>\r\n</div>\r\n", styles: [".parameters-group{display:flex;align-items:center}.parameters-group .parameters-group{padding:0!important}.entity-description{padding:10px 10px 10px 0}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i6.MatTooltip; }), selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i0.forwardRef(function () { return ParametersGroupComponent; }), selector: "app-parameters-group", inputs: ["group", "cssClasses", "currentPage"], outputs: ["downloadDocument", "expantionOpened", "expantionClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: InnerEntityDetailsComponent, decorators: [{
type: Component,
args: [{ selector: 'app-inner-entity-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"entityDetailsViewModel\" [class]=\"getMoreClasses()\"\r\n[matTooltip]=\"isDisplayDevIndications? this.entityDetailsViewModel.type + ', ' + entityDetailsViewModel.presentationEntityId + ' (' + entityDetailsViewModel.id + ', ' + entityDetailsViewModel.fixedId + ')': '' \" matTooltipPosition=\"above\">\r\n <!-- <span dir=\"ltr\" *ngIf=\"isDisplayDevIndications\"\r\n class=\"dev-indication\">{{entityDetailsViewModel.presentationEntityId}} ({{entityDetailsViewModel.id}}, {{entityDetailsViewModel.fixedId}})</span> -->\r\n <div *ngFor=\"let group of entityDetailsViewModel.parametersGroups; let i = index\" class=\"parameters-group\">\r\n <span *ngIf=\"entityDetailsViewModel.isDisplayDescription && i === 0 && mobWidth > 700\"\r\n class=\"title-parameter bold entity-description\">{{entityDetailsViewModel.description}}</span>\r\n <app-parameters-group *ngIf=\"getIsDisplayGroup(group)\" class=\"group-delimitation\" (expantionClosed)=\"groupCollectionClosed()\"\r\n (expantionOpened)=\"groupCollectionOpen()\" [group]=\"group\" (downloadDocument)=\"downloadDocument($event)\"\r\n [style.width.%]=\"100\" [currentPage]=\"currentPage\">\r\n </app-parameters-group>\r\n </div>\r\n</div>\r\n", styles: [".parameters-group{display:flex;align-items:center}.parameters-group .parameters-group{padding:0!important}.entity-description{padding:10px 10px 10px 0}\n"] }]
}], ctorParameters: function () { return [{ type: i5.StorageService }, { type: undefined, decorators: [{
type: Inject,
args: ['env']
}] }]; }, propDecorators: { entityDetailsViewModel: [{
type: Input
}], currentPage: [{
type: Input
}], expantionOpened: [{
type: Output
}], expantionClosed: [{
type: Output
}], onResize: [{
type: HostListener,
args: ['window:resize', ['$event']]
}] } });
class ParametersGroupComponent {
constructor(cd, dialog, deviceTypeService, changeDetector, env) {
this.cd = cd;
this.dialog = dialog;
this.deviceTypeService = deviceTypeService;
this.changeDetector = changeDetector;
this.env = env;
this.isDisplayDevIndications = this.env.isDisplayDevIndications;
this.downloadDocument = new EventEmitter();
this.expantionOpened = new EventEmitter();
this.expantionClosed = new EventEmitter();
this.counter = 0;
}
set group(value) {
this._group = value;
this.cd.markForCheck();
}
get group() {
return this._group;
}
get parameters() {
return this.group.parameters.filter(p => !this.currentPage || p.page == this.currentPage);
}
ngOnInit() {
this.deviceTypeService.isMobile$.subscribe(isMobile => {
this.isMobile = isMobile;
this.changeDetector.markForCheck();
});
}
getValueCssClassName(parameter) {
if (parameter.metadata.fieldType === 8 && parameter.value && (parameter.value.slice(parameter.value.length - 1) !== '%')) {
parameter.value = (parameter.value) + '%';
}
return parameter.valueCssClassName ? parameter.valueCssClassName : 'simple-parameter';
}
getParameterValue(parameter) {
if (parameter.isMulti) {
return parameter.value.join(',');
}
else if (parameter.value) {
if (parameter.charactersNumber && parameter.value.length > parameter.charactersNumber) {
return parameter.value.slice(0, parameter.charactersNumber) + '...';
}
else if (parameter.value.length > 40 && this.isMobile) {
return parameter.value.slice(0, 40) + '...';
}
else if (parameter.value.length > 70) {
return parameter.value.slice(0, 70) + '...';
}
return parameter.value === "False" ? "לא" : parameter.value === "True" ? "כן" : parameter.value;
}
return parameter.value;
}
isLongValue(parameter) {
if (parameter.value === this.getParameterValue(parameter) || (parameter.isMulti)) {
return false;
}
return true;
}
getLabelCssClassName(parameter) {
return parameter.labelCssClassName ? parameter.labelCssClassName : 'simple-parameter';
}
valueClick(parameter) {
if (this.isLongValue(parameter)) {
const dialogRef = this.dialog.open(LongTextDialogComponent, {
width: '60%',
data: { title: parameter.displayName ? parameter.displayName : parameter.metadata.name, longText: parameter.value },
direction: 'rtl',
});
}
}
isSimpleParameter(parameter) {
return isSimpleParameter(parameter);
}
isEntityParameter(parameter) {
return isEntityParameter(parameter);
}
log(message) {
console.log(message);
}
getIconColor(iconName) {
// temporary....
return iconName.includes('warning') ? 'warn' : 'primary';
}
getIconClass(iconName) {
// temporary....
return iconName.includes('warning') ? 'warning' : 'standard-icon';
}
getLabelLocation(parameter) {
if ((window.screen.width < 700) && (parameter.labelLocation === 3)) {
return 1;
}
else {
return parameter.labelLocation;
}
}
downloadDocumentEmit(parameter) {
this.downloadDocument.emit(parameter);
}
groupCollectionOpen() {
console.log("open expantion event1 in parameters-group");
this.expantionOpened.emit();
}
groupCollectionClosed() {
this.expantionClosed.emit();
}
}
ParametersGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: ParametersGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i7.MatDialog }, { token: i4.DeviceTypeService }, { token: i0.ChangeDetectorRef }, { token: 'env' }], target: i0.ɵɵFactoryTarget.Component });
ParametersGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: ParametersGroupComponent, selector: "app-parameters-group", inputs: { group: "group", cssClasses: "cssClasses", currentPage: "currentPage" }, outputs: { downloadDocument: "downloadDocument", expantionOpened: "expantionOpened", expantionClosed: "expantionClosed" }, ngImport: i0, template: "<div *ngIf=\"group\" class=\"layout\">\r\n <span *ngFor=\"let parameter of parameters\" [class.snap-left]=\"$any(parameter).snapLeft\" class=\"parameters-group-collection\">\r\n <span *ngIf=\"isSimpleParameter(parameter) && !($any(parameter).hideWhenEmptyValue && !parameter.value)\"\r\n class=\"parameter-container\" [matTooltip]=\"isDisplayDevIndications? $any(parameter).metadata.id: null\" matTooltipPosition=\"right\">\r\n <!-- <span *ngIf=\"isDisplayDevIndications\" class=\"parameter-metadata-id\">{{parameter.metadata.id}}</span> -->\r\n <mat-icon *ngIf=\"$any(parameter).iconName\" [color]=\"getIconColor($any(parameter).iconName)\" [inline]=\"true\">\r\n {{$any(parameter).iconName}}</mat-icon>\r\n <span [ngSwitch]=\"getLabelLocation(parameter)\">\r\n <!-- [class]=\"getIconClass(parameter.iconName)\" -->\r\n <span *ngSwitchCase=\"3\" class=\"parameter-label-stack-container-span\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <div class=\"parameter-label-stack-container\">\r\n <div class=\"parameter-label-stack first {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">\r\n {{getParameterValue(parameter)}}</div>\r\n <div class=\"parameter-label-stack second {{getLabelCssClassName(parameter)}}\">{{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}\r\n </div>\r\n </div>\r\n </span>\r\n <span *ngSwitchCase=\"4\" class=\"parameter-label-stack-container-span\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <div class=\"parameter-label-stack-container\">\r\n <div class=\"parameter-label-stack first {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">\r\n {{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}</div>\r\n <div class=\"parameter-label-stack second {{getLabelCssClassName(parameter)}}\">{{getParameterValue(parameter)}}\r\n </div>\r\n </div>\r\n </span>\r\n <span *ngSwitchCase=\"0\" class=\"{{getLabelCssClassName(parameter)}}\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <span *ngIf=\" !$any(parameter).isLink\" class=\"simple-text {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">{{getParameterValue(parameter)}}\r\n </span>\r\n <a *ngIf=\"$any(parameter).isLink\" href=\"{{parameter.value}}\"\r\n target=\"_blank\">{{$any(parameter).linkDescription ? $any(parameter).linkDescription : parameter.value}}</a>\r\n\r\n </span>\r\n <span *ngSwitchCase=\"1\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <span class=\"simple-label {{getLabelCssClassName(parameter)}}\">{{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}\r\n </span>\r\n\r\n <span *ngIf=\"$any(parameter).metadata.fieldType !== 11; else fileView\">\r\n <span *ngIf=\"!$any(parameter).isLink\" class=\"simple-text {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\"\r\n (click)=\"valueClick(parameter)\">{{getParameterValue(parameter)}}\r\n </span>\r\n </span>\r\n\r\n <ng-template #fileView>\r\n <a *ngIf=\"parameter.value\" (click)=\"downloadDocumentEmit(parameter)\" class=\"file-link\"\r\n target=\"_blank\"><span>\r\n {{parameter.value}}\r\n </span></a>\r\n <span *ngIf=\"!parameter.value\" class=\"no-doc\">\u05D0\u05D9\u05DF \u05DE\u05E1\u05DE\u05DA</span>\r\n </ng-template>\r\n\r\n <a *ngIf=\"$any(parameter).isLink\" href=\"{{parameter.value}}\" target=\"_blank\">{{$any(parameter).linkDescription}}</a>\r\n </span>\r\n\r\n <span *ngSwitchCase=\"2\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <span *ngIf=\"!$any(parameter).isLink\" class=\"simple-label {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">{{getParameterValue(parameter)}}\r\n </span>\r\n <span class=\"simple-text {{getLabelCssClassName(parameter)}}\">{{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}\r\n </span>\r\n\r\n <a *ngIf=\"$any(parameter).isLink\" href=\"{{parameter.value}}\" target=\"_blank\">{{$any(parameter).linkDescription}}</a>\r\n </span>\r\n </span>\r\n\r\n </span>\r\n\r\n <span *ngIf=\"isEntityParameter(parameter)\" >\r\n\r\n <app-groups-collection (expantionClosed)=\"groupCollectionClosed()\" (expantionOpened)=\"groupCollectionOpen()\" *ngIf=\"$any(parameter).groupByParameterId\" [entityParameter]=\"parameter\" class=\"group-collection\">\r\n </app-groups-collection>\r\n <app-entities-collection-view *ngIf=\"!$any(parameter).groupByParameterId\" [entityParameter]=\"parameter\">\r\n </app-entities-collection-view>\r\n </span>\r\n </span>\r\n\r\n</div>\r\n", styles: [".label-under{color:red}.parameter-label-stack-container{position:relative;width:130px;display:inline-block;height:40px}.parameter-label-stack{position:absolute;display:inline-block;width:100%;text-align:center}.snap-left{float:left;margin-right:auto}.first{z-index:1}.second{margin-top:15px;z-index:2}.top-big-value{font-size:20pt}.bottom-gray-small-label{margin-top:30px!important;font-size:smaller;color:#a5a2a2}.simple-text{display:inline-block;margin-left:5px}.group-key{font-weight:700}.warning{color:#dc143c}.standard-icon{color:gray}.parameters-group .parameters-group{padding:0!important}.layout{display:inline-flex;align-items:center;flex-flow:row wrap;width:100%;padding:10px}.parameter-container{display:flex;flex-flow:row nowrap}@media screen and (orientation: portrait) and (max-width: 700px){.layout{width:unset}.top-big-value{font-style:normal;line-height:29px;margin-left:3px;font-weight:700;color:#5f9ea0;font-size:15px}.bottom-gray-small-label{font-size:15px;color:#000}.simple-text{margin-left:5px;display:initial}.snap-left{margin-right:0}}.snap-left{margin-right:0}.long-text{width:-moz-fit-content;width:fit-content;white-space:nowrap;cursor:pointer}.file-link{text-decoration:underline;margin-right:14px}.no-doc{font-weight:700;color:#b9aeb9;margin-right:7px}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i0.forwardRef(function () { return i8.MatIcon; }), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i0.forwardRef(function () { return i6.MatTooltip; }), selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i0.forwardRef(function () { return EntitiesCollectionViewComponent; }), selector: "app-entities-collection-view", inputs: ["entityParameter"] }, { kind: "component", type: i0.forwardRef(function () { return GroupsCollectionComponent; }), selector: "app-groups-collection", inputs: ["entityParameter"], outputs: ["expantionOpened", "expantionClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: ParametersGroupComponent, decorators: [{
type: Component,
args: [{ selector: 'app-parameters-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"group\" class=\"layout\">\r\n <span *ngFor=\"let parameter of parameters\" [class.snap-left]=\"$any(parameter).snapLeft\" class=\"parameters-group-collection\">\r\n <span *ngIf=\"isSimpleParameter(parameter) && !($any(parameter).hideWhenEmptyValue && !parameter.value)\"\r\n class=\"parameter-container\" [matTooltip]=\"isDisplayDevIndications? $any(parameter).metadata.id: null\" matTooltipPosition=\"right\">\r\n <!-- <span *ngIf=\"isDisplayDevIndications\" class=\"parameter-metadata-id\">{{parameter.metadata.id}}</span> -->\r\n <mat-icon *ngIf=\"$any(parameter).iconName\" [color]=\"getIconColor($any(parameter).iconName)\" [inline]=\"true\">\r\n {{$any(parameter).iconName}}</mat-icon>\r\n <span [ngSwitch]=\"getLabelLocation(parameter)\">\r\n <!-- [class]=\"getIconClass(parameter.iconName)\" -->\r\n <span *ngSwitchCase=\"3\" class=\"parameter-label-stack-container-span\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <div class=\"parameter-label-stack-container\">\r\n <div class=\"parameter-label-stack first {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">\r\n {{getParameterValue(parameter)}}</div>\r\n <div class=\"parameter-label-stack second {{getLabelCssClassName(parameter)}}\">{{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}\r\n </div>\r\n </div>\r\n </span>\r\n <span *ngSwitchCase=\"4\" class=\"parameter-label-stack-container-span\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <div class=\"parameter-label-stack-container\">\r\n <div class=\"parameter-label-stack first {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">\r\n {{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}</div>\r\n <div class=\"parameter-label-stack second {{getLabelCssClassName(parameter)}}\">{{getParameterValue(parameter)}}\r\n </div>\r\n </div>\r\n </span>\r\n <span *ngSwitchCase=\"0\" class=\"{{getLabelCssClassName(parameter)}}\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <span *ngIf=\" !$any(parameter).isLink\" class=\"simple-text {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">{{getParameterValue(parameter)}}\r\n </span>\r\n <a *ngIf=\"$any(parameter).isLink\" href=\"{{parameter.value}}\"\r\n target=\"_blank\">{{$any(parameter).linkDescription ? $any(parameter).linkDescription : parameter.value}}</a>\r\n\r\n </span>\r\n <span *ngSwitchCase=\"1\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <span class=\"simple-label {{getLabelCssClassName(parameter)}}\">{{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}\r\n </span>\r\n\r\n <span *ngIf=\"$any(parameter).metadata.fieldType !== 11; else fileView\">\r\n <span *ngIf=\"!$any(parameter).isLink\" class=\"simple-text {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\"\r\n (click)=\"valueClick(parameter)\">{{getParameterValue(parameter)}}\r\n </span>\r\n </span>\r\n\r\n <ng-template #fileView>\r\n <a *ngIf=\"parameter.value\" (click)=\"downloadDocumentEmit(parameter)\" class=\"file-link\"\r\n target=\"_blank\"><span>\r\n {{parameter.value}}\r\n </span></a>\r\n <span *ngIf=\"!parameter.value\" class=\"no-doc\">\u05D0\u05D9\u05DF \u05DE\u05E1\u05DE\u05DA</span>\r\n </ng-template>\r\n\r\n <a *ngIf=\"$any(parameter).isLink\" href=\"{{parameter.value}}\" target=\"_blank\">{{$any(parameter).linkDescription}}</a>\r\n </span>\r\n\r\n <span *ngSwitchCase=\"2\" [class.snap-left]=\"$any(parameter).snapLeft\">\r\n <span *ngIf=\"!$any(parameter).isLink\" class=\"simple-label {{getValueCssClassName(parameter)}}\"\r\n [class.long-text]=\"isLongValue(parameter)\" (click)=\"valueClick(parameter)\">{{getParameterValue(parameter)}}\r\n </span>\r\n <span class=\"simple-text {{getLabelCssClassName(parameter)}}\">{{parameter.displayName? parameter.displayName: $any(parameter).metadata.name}}\r\n </span>\r\n\r\n <a *ngIf=\"$any(parameter).isLink\" href=\"{{parameter.value}}\" target=\"_blank\">{{$any(parameter).linkDescription}}</a>\r\n </span>\r\n </span>\r\n\r\n </span>\r\n\r\n <span *ngIf=\"isEntityParameter(parameter)\" >\r\n\r\n <app-groups-collection (expantionClosed)=\"groupCollectionClosed()\" (expantionOpened)=\"groupCollectionOpen()\" *ngIf=\"$any(parameter).groupByParameterId\" [entityParameter]=\"parameter\" class=\"group-collection\">\r\n </app-groups-collection>\r\n <app-entities-collection-view *ngIf=\"!$any(parameter).groupByParameterId\" [entityParameter]=\"parameter\">\r\n </app-entities-collection-view>\r\n </span>\r\n </span>\r\n\r\n</div>\r\n", styles: [".label-under{color:red}.parameter-label-stack-container{position:relative;width:130px;display:inline-block;height:40px}.parameter-label-stack{position:absolute;display:inline-block;width:100%;text-align:center}.snap-left{float:left;margin-right:auto}.first{z-index:1}.second{margin-top:15px;z-index:2}.top-big-value{font-size:20pt}.bottom-gray-small-label{margin-top:30px!important;font-size:smaller;color:#a5a2a2}.simple-text{display:inline-block;margin-left:5px}.group-key{font-weight:700}.warning{color:#dc143c}.standard-icon{color:gray}.parameters-group .parameters-group{padding:0!important}.layout{display:inline-flex;align-items:center;flex-flow:row wrap;width:100%;padding:10px}.parameter-container{display:flex;flex-flow:row nowrap}@media screen and (orientation: portrait) and (max-width: 700px){.layout{width:unset}.top-big-value{font-style:normal;line-height:29px;margin-left:3px;font-weight:700;color:#5f9ea0;font-size:15px}.bottom-gray-small-label{font-size:15px;color:#000}.simple-text{margin-left:5px;display:initial}.snap-left{margin-right:0}}.snap-left{margin-right:0}.long-text{width:-moz-fit-content;width:fit-content;white-space:nowrap;cursor:pointer}.file-link{text-decoration:underline;margin-right:14px}.no-doc{font-weight:700;color:#b9aeb9;margin-right:7px}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i7.MatDialog }, { type: i4.DeviceTypeService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
type: Inject,
args: ['env']
}] }]; }, propDecorators: { group: [{
type: Input
}], cssClasses: [{
type: Input
}], currentPage: [{
type: Input
}], downloadDocument: [{
type: Output
}], expantionOpened: [{
type: Output
}], expantionClosed: [{
type: Output
}] } });
class GroupsCollectionComponent {
constructor() {
this.expantionOpened = new EventEmitter();
this.expantionClosed = new EventEmitter();
}
ngOnInit() {
// @ts-ignore
this.groups = this.getChildsGroups(this.entityParameter.value, this.entityParameter.groupByParameterId);
}
ngAfterViewInit() {
// console.log(this.groups.length);
}
getChildsGroups(entities, groupByParameterId) {
const groups = new Map();
for (let i = 0, ntt = entities[0]; i < entities.length; i++, ntt = entities[i]) {
// atention: it return only the first value of 'groupByParameterId'
const parameterKey = getSimpleParameters(ntt.parametersGroups.flatMap(group => group.parameters))
.find(pr => pr.metadata.id === groupByParameterId);
let key;
let nttWithoutParameter;
if (parameterKey) {
key = parameterKey.metadata.name + ' ' + parameterKey.value;
nttWithoutParameter = {
...ntt,
parametersGroups: [...ntt.parametersGroups.map(g => ({
...g,
parameters: g.parameters
.filter(p => isSimpleParameter(p) ? p.metadata.id !== parameterKey.metadata.id : true)
}))]
};
const collection = groups.get(key);
if (!collection) {
groups.set(key, [nttWithoutParameter]);
}
else {
collection.push(nttWithoutParameter);
}
}
else {
// key = 'ללא';
}
}
// console.log('in time ' + (this.counter++) + ' keys:' + groups.size);
const x = [...groups.entries()];
const y = [...groups.values()];
const z = [...groups.keys()];
return [...groups.entries()].map(entry => ({
groupKey: entry[0], entities: entry[1].sort((a, b) => a.parametersGroups.flatMap(ntt => ntt.parameters)[0].value.localeCompare(b.parametersGroups.flatMap(ntt => ntt.parameters)[0].value))
}));
}
onExpantionOpened() {
this.expantionOpened.emit();
}
onExpantionClosed() {
this.expantionClosed.emit();
}
}
GroupsCollectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: GroupsCollectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
GroupsCollectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.4", type: GroupsCollectionComponent, selector: "app-groups-collection", inputs: { entityParameter: "entityParameter" }, outputs: { expantionOpened: "expantionOpened", expantionClosed: "expantionClosed" }, ngImport: i0, template: "<div *ngIf=\"groups\">\r\n <mat-accordion>\r\n <div *ngFor=\"let groupChild of groups\">\r\n <mat-expansion-panel (closed)=\"onExpantionClosed()\" (opened)=\"onExpantionOpened()\" class=\"expantion-panel\" >\r\n <mat-expansion-panel-header class=\"expantion-header\">\r\n <mat-panel-title>{{groupChild.groupKey}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{groupChild.entities.length}} {{groupChild.entities[0].pluralEntitiesDescription}}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <app-entities-list [entities]=\"groupChild.entities\"></app-entities-list>\r\n </mat-expansion-panel>\r\n </div>\r\n </mat-accordion>\r\n</div>\r\n\r\n\r\n\r\n", styles: [".expantion-header{background-color:#f5f5f5}.expantion-panel{width:41vw}@media screen and (orientation: portrait) and (max-width: 700px){.expantion-panel{width:88vw}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i2.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: EntitiesListComponent, selector: "app-entities-list", inputs: ["displayEntitiesInline", "displayEntityBackground", "entities", "columnsNumber", "index", "isProcess"], outputs: ["entityClickEmitter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: GroupsCollectionComponent, decorators: [{
type: Component,
args: [{ selector: 'app-groups-collection', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"groups\">\r\n <mat-accordion>\r\n <div *ngFor=\"let groupChild of groups\">\r\n <mat-expansion-panel (closed)=\"onExpantionClosed()\" (opened)=\"onExpantionOpened()\" class=\"expantion-panel\" >\r\n <mat-expansion-panel-header class=\"expantion-header\">\r\n <mat-panel-title>{{groupChild.groupKey}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n {{groupChild.entities.length}} {{groupChild.entities[0].pluralEntitiesDescription}}\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <app-entities-list [entities]=\"groupChild.entities\"></app-entities-list>\r\n </mat-expansion-panel>\r\n </div>\r\n </mat-accordion>\r\n</div>\r\n\r\n\r\n\r\n", styles: [".expantion-header{background-color:#f5f5f5}.expantion-panel{width:41vw}@media screen and (orientation: portrait) and (max-width: 700px){.expantion-panel{width:88vw}}\n"] }]
}], ctorParameters: function () { return []; }, propDecorators: { entityParameter: [{
type: Input
}], expantionOpened: [{
type: Output
}], expantionClosed: [{
type: Output
}] } });
export { EntitiesCollectionViewComponent, EntitiesListComponent, InnerEntityDetailsComponent, ParametersGroupComponent, GroupsCollectionComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaXZlLWNvbXBvbmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9keW5hbWljLWRpc3BsYXktc2hhcmVkL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcmVjdXJzaXZlLWNvbXBvbmVudHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9keW5hbWljLWRpc3BsYXktc2hhcmVkL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvZW50aXRpZXMtY29sbGVjdGlvbi12aWV3L2VudGl0aWVzLWNvbGxlY3Rpb24tdmlldy5jb21wb25lbnQuaHRtbCIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2R5bmFtaWMtZGlzcGxheS1zaGFyZWQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9lbnRpdGllcy1saXN0L2VudGl0aWVzLWxpc3QuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9keW5hbWljLWRpc3BsYXktc2hhcmVkL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvaW5uZXItZW50aXR5LWRldGFpbHMvaW5uZXItZW50aXR5LWRldGFpbHMuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9keW5hbWljLWRpc3BsYXktc2hhcmVkL3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFyYW1ldGVycy1ncm91cC9wYXJhbWV0ZXJzLWdyb3VwLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHluYW1pYy1kaXNwbGF5LXNoYXJlZC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL2dyb3Vwcy1jb2xsZWN0aW9uL2dyb3Vwcy1jb2xsZWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQWEsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7Ozs7Ozs7O0FBU3hGLE1BTU0sK0JBQStCO0lBSW5DLGdCQUFnQixDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDOzs0SEFQRywrQkFBK0I7Z0hBQS9CLCtCQUErQixvSENoQ3JDLHFoQ0FxQk0sODlCRGdIQSwyQkFBMkIsZ05BbkYzQixxQkFBcUI7MkZBbEJyQiwrQkFBK0I7a0JBTnBDLFNBQVM7K0JBQ0UsOEJBQThCLG1CQUd2Qix1QkFBdUIsQ0FBQyxNQUFNOzBFQUt4QyxlQUFlO3NCQURyQixLQUFLOztBQVVSLE1BTU0scUJBQXFCO0lBZXpCLFlBQW9CL