appproject-components 1.0.47 → 1.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/appproject-components.mjs +5 -0
- package/esm2022/lib/appproject-components.component.mjs +22 -0
- package/esm2022/lib/appproject-components.module.mjs +159 -0
- package/esm2022/lib/appproject-components.service.mjs +14 -0
- package/esm2022/lib/baseInputComponent.mjs +69 -0
- package/esm2022/lib/buttons/baseBtnComponent.mjs +63 -0
- package/esm2022/lib/buttons/btn-action/btn-action.component.mjs +55 -0
- package/esm2022/lib/buttons/btn-cancelar/btn-cancelar.component.mjs +25 -0
- package/esm2022/lib/buttons/btn-excluir/btn-excluir.component.mjs +29 -0
- package/esm2022/lib/buttons/btn-novo/btn-novo.component.mjs +33 -0
- package/esm2022/lib/buttons/btn-salvar/btn-salvar.component.mjs +19 -0
- package/esm2022/lib/entity-edit/entity-edit.component.mjs +53 -0
- package/esm2022/lib/grid-view/grid-view.component.mjs +275 -0
- package/esm2022/lib/input-area/input-area.component.mjs +72 -0
- package/esm2022/lib/input-arquivo/input-arquivo.component.mjs +154 -0
- package/esm2022/lib/input-cep/input-cep.component.mjs +180 -0
- package/esm2022/lib/input-checkbox/input-checkbox.component.mjs +51 -0
- package/esm2022/lib/input-format/input-format.component.mjs +138 -0
- package/esm2022/lib/input-pesquisa/input-pesquisa.component.mjs +557 -0
- package/esm2022/lib/input-radio/input-radio.component.mjs +58 -0
- package/esm2022/lib/input-select/input-select.component.mjs +110 -0
- package/esm2022/lib/input-text/input-text.component.mjs +88 -0
- package/esm2022/lib/input-valor/input-valor.component.mjs +161 -0
- package/esm2022/lib/lib-config.mjs +2 -0
- package/esm2022/lib/model-treeview/model-treeview.component.mjs +126 -0
- package/esm2022/lib/tree-view/tree-view.component.mjs +104 -0
- package/esm2022/lib/tree-view-nivel/tree-view-nivel.component.mjs +50 -0
- package/esm2022/public-api.mjs +30 -0
- package/fesm2022/appproject-components.mjs +2531 -0
- package/fesm2022/appproject-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/appproject-components.component.d.ts +8 -0
- package/lib/appproject-components.module.d.ts +36 -0
- package/lib/appproject-components.service.d.ts +6 -0
- package/lib/baseInputComponent.d.ts +28 -0
- package/lib/buttons/baseBtnComponent.d.ts +19 -0
- package/lib/buttons/btn-action/btn-action.component.d.ts +21 -0
- package/lib/buttons/btn-cancelar/btn-cancelar.component.d.ts +10 -0
- package/lib/buttons/btn-excluir/btn-excluir.component.d.ts +12 -0
- package/lib/buttons/btn-novo/btn-novo.component.d.ts +13 -0
- package/lib/buttons/btn-salvar/btn-salvar.component.d.ts +9 -0
- package/lib/entity-edit/entity-edit.component.d.ts +22 -0
- package/lib/grid-view/grid-view.component.d.ts +52 -0
- package/lib/input-area/input-area.component.d.ts +24 -0
- package/lib/input-arquivo/input-arquivo.component.d.ts +43 -0
- package/lib/input-cep/input-cep.component.d.ts +29 -0
- package/lib/input-checkbox/input-checkbox.component.d.ts +21 -0
- package/lib/input-format/input-format.component.d.ts +27 -0
- package/lib/input-pesquisa/input-pesquisa.component.d.ts +69 -0
- package/lib/input-radio/input-radio.component.d.ts +23 -0
- package/lib/input-select/input-select.component.d.ts +32 -0
- package/lib/input-text/input-text.component.d.ts +33 -0
- package/lib/input-valor/input-valor.component.d.ts +29 -0
- package/{src/lib/lib-config.ts → lib/lib-config.d.ts} +3 -4
- package/lib/model-treeview/model-treeview.component.d.ts +39 -0
- package/lib/tree-view/tree-view.component.d.ts +23 -0
- package/lib/tree-view-nivel/tree-view-nivel.component.d.ts +17 -0
- package/package.json +26 -15
- package/{src/public-api.ts → public-api.d.ts} +24 -30
- package/karma.conf.js +0 -44
- package/ng-package.json +0 -7
- package/src/lib/appproject-components.component.spec.ts +0 -23
- package/src/lib/appproject-components.component.ts +0 -20
- package/src/lib/appproject-components.module.ts +0 -106
- package/src/lib/appproject-components.service.spec.ts +0 -16
- package/src/lib/appproject-components.service.ts +0 -9
- package/src/lib/baseComponent.scss +0 -162
- package/src/lib/baseInputComponent.ts +0 -35
- package/src/lib/buttons/baseBtnComponent.ts +0 -38
- package/src/lib/buttons/btn-action/btn-action.component.html +0 -11
- package/src/lib/buttons/btn-action/btn-action.component.scss +0 -7
- package/src/lib/buttons/btn-action/btn-action.component.spec.ts +0 -24
- package/src/lib/buttons/btn-action/btn-action.component.ts +0 -31
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.html +0 -14
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.scss +0 -5
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.spec.ts +0 -24
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.ts +0 -19
- package/src/lib/buttons/btn-excluir/btn-excluir.component.html +0 -6
- package/src/lib/buttons/btn-excluir/btn-excluir.component.scss +0 -5
- package/src/lib/buttons/btn-excluir/btn-excluir.component.spec.ts +0 -24
- package/src/lib/buttons/btn-excluir/btn-excluir.component.ts +0 -18
- package/src/lib/buttons/btn-novo/btn-novo.component.html +0 -14
- package/src/lib/buttons/btn-novo/btn-novo.component.scss +0 -8
- package/src/lib/buttons/btn-novo/btn-novo.component.spec.ts +0 -24
- package/src/lib/buttons/btn-novo/btn-novo.component.ts +0 -20
- package/src/lib/buttons/btn-salvar/btn-salvar.component.html +0 -8
- package/src/lib/buttons/btn-salvar/btn-salvar.component.scss +0 -5
- package/src/lib/buttons/btn-salvar/btn-salvar.component.spec.ts +0 -24
- package/src/lib/buttons/btn-salvar/btn-salvar.component.ts +0 -16
- package/src/lib/entity-edit/entity-edit.component.html +0 -143
- package/src/lib/entity-edit/entity-edit.component.scss +0 -4
- package/src/lib/entity-edit/entity-edit.component.spec.ts +0 -23
- package/src/lib/entity-edit/entity-edit.component.ts +0 -43
- package/src/lib/grid-view/grid-view.component.html +0 -116
- package/src/lib/grid-view/grid-view.component.scss +0 -47
- package/src/lib/grid-view/grid-view.component.spec.ts +0 -23
- package/src/lib/grid-view/grid-view.component.ts +0 -292
- package/src/lib/input-area/input-area.component.html +0 -30
- package/src/lib/input-area/input-area.component.scss +0 -68
- package/src/lib/input-area/input-area.component.spec.ts +0 -23
- package/src/lib/input-area/input-area.component.ts +0 -69
- package/src/lib/input-arquivo/input-arquivo.component.html +0 -11
- package/src/lib/input-arquivo/input-arquivo.component.scss +0 -0
- package/src/lib/input-arquivo/input-arquivo.component.spec.ts +0 -23
- package/src/lib/input-arquivo/input-arquivo.component.ts +0 -140
- package/src/lib/input-cep/input-cep.component.html +0 -38
- package/src/lib/input-cep/input-cep.component.scss +0 -0
- package/src/lib/input-cep/input-cep.component.spec.ts +0 -23
- package/src/lib/input-cep/input-cep.component.ts +0 -186
- package/src/lib/input-checkbox/input-checkbox.component.html +0 -12
- package/src/lib/input-checkbox/input-checkbox.component.scss +0 -11
- package/src/lib/input-checkbox/input-checkbox.component.spec.ts +0 -23
- package/src/lib/input-checkbox/input-checkbox.component.ts +0 -48
- package/src/lib/input-format/input-format.component.html +0 -32
- package/src/lib/input-format/input-format.component.scss +0 -47
- package/src/lib/input-format/input-format.component.spec.ts +0 -23
- package/src/lib/input-format/input-format.component.ts +0 -139
- package/src/lib/input-pesquisa/input-pesquisa.component.html +0 -77
- package/src/lib/input-pesquisa/input-pesquisa.component.scss +0 -127
- package/src/lib/input-pesquisa/input-pesquisa.component.spec.ts +0 -23
- package/src/lib/input-pesquisa/input-pesquisa.component.ts +0 -558
- package/src/lib/input-radio/input-radio.component.html +0 -21
- package/src/lib/input-radio/input-radio.component.scss +0 -3
- package/src/lib/input-radio/input-radio.component.spec.ts +0 -23
- package/src/lib/input-radio/input-radio.component.ts +0 -49
- package/src/lib/input-select/input-select.component.html +0 -29
- package/src/lib/input-select/input-select.component.scss +0 -62
- package/src/lib/input-select/input-select.component.spec.ts +0 -23
- package/src/lib/input-select/input-select.component.ts +0 -96
- package/src/lib/input-text/input-text.component.html +0 -48
- package/src/lib/input-text/input-text.component.scss +0 -63
- package/src/lib/input-text/input-text.component.spec.ts +0 -23
- package/src/lib/input-text/input-text.component.ts +0 -78
- package/src/lib/input-valor/input-valor.component.html +0 -32
- package/src/lib/input-valor/input-valor.component.scss +0 -47
- package/src/lib/input-valor/input-valor.component.spec.ts +0 -23
- package/src/lib/input-valor/input-valor.component.ts +0 -164
- package/src/lib/model-treeview/model-treeview.component.html +0 -20
- package/src/lib/model-treeview/model-treeview.component.scss +0 -0
- package/src/lib/model-treeview/model-treeview.component.spec.ts +0 -23
- package/src/lib/model-treeview/model-treeview.component.ts +0 -152
- package/src/lib/tree-view/tree-view.component.html +0 -96
- package/src/lib/tree-view/tree-view.component.scss +0 -50
- package/src/lib/tree-view/tree-view.component.spec.ts +0 -23
- package/src/lib/tree-view/tree-view.component.ts +0 -92
- package/src/lib/tree-view-nivel/tree-view-nivel.component.html +0 -17
- package/src/lib/tree-view-nivel/tree-view-nivel.component.scss +0 -8
- package/src/lib/tree-view-nivel/tree-view-nivel.component.spec.ts +0 -23
- package/src/lib/tree-view-nivel/tree-view-nivel.component.ts +0 -43
- package/src/test.ts +0 -15
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "@ionic/angular";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
import * as i4 from "../input-text/input-text.component";
|
|
7
|
+
import * as i5 from "../input-format/input-format.component";
|
|
8
|
+
import * as i6 from "../input-select/input-select.component";
|
|
9
|
+
import * as i7 from "../input-pesquisa/input-pesquisa.component";
|
|
10
|
+
import * as i8 from "../input-valor/input-valor.component";
|
|
11
|
+
import * as i9 from "../input-area/input-area.component";
|
|
12
|
+
import * as i10 from "../input-cep/input-cep.component";
|
|
13
|
+
import * as i11 from "../input-checkbox/input-checkbox.component";
|
|
14
|
+
import * as i12 from "../input-radio/input-radio.component";
|
|
15
|
+
export class EntityEditComponent {
|
|
16
|
+
constructor(ngZone) {
|
|
17
|
+
this.ngZone = ngZone;
|
|
18
|
+
this.itemClass = "";
|
|
19
|
+
this.rowClass = "";
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
//this.getEntidadeCampos();
|
|
23
|
+
}
|
|
24
|
+
getEntidadeCampos() {
|
|
25
|
+
//this.entidade = new this.entidadeTipo();
|
|
26
|
+
// console.log(this.entidade);
|
|
27
|
+
// this.ngZone.run(() =>
|
|
28
|
+
// this.campos = this.entidade.getHtmlForm()
|
|
29
|
+
// );
|
|
30
|
+
// console.log(this.campos);
|
|
31
|
+
}
|
|
32
|
+
emptyHandler() {
|
|
33
|
+
}
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: EntityEditComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: EntityEditComponent, selector: "kb-entity-edit", inputs: { entidade: "entidade", campos: "campos", entidadeForm: "entidadeForm", validation_messages: "validation_messages", itemClass: "itemClass", rowClass: "rowClass" }, ngImport: i0, template: "<form *ngIf=\"campos && campos.length\" [formGroup]=\"entidadeForm\" style=\"width: 100%;\">\n\n\n <ion-row *ngFor=\"let linha of campos\" [class]=\"rowClass\">\n <ng-container *ngFor=\"let campo of linha.Linha\">\n <!-- {{ campo.Nome }} {{ campo.Tipo }} -->\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-text'\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\" [placeholder]=\"campo.PlaceHolderVisivel ? (campo.Label ?? campo.Nome + '...') : ''\"\n [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" \n [type]=\"campo.TipoInput ?? 'text'\" \n [showSeePassword]=\"campo.TipoInput == 'password'\"\n [showCustomAction]=\"campo.InputAction\"\n [customActionIcon]=\"campo.InputActionIcon ?? 'search-outline'\"\n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\"\n\n [itemClass]=\"itemClass\">\n </kb-input-text>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-area'\">\n <kb-input-area label=\"{{campo.Label ?? campo.Nome}}\" [placeholder]=\"campo.PlaceHolderVisivel ? (campo.Label ?? campo.Nome + '...') : ''\"\n [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" [linhas]=\"campo.Linhas ?? 5\"\n [itemClass]=\"itemClass\">\n </kb-input-area>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-cep'\">\n <kb-input-cep label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\"\n (getResultados)=\"campo.change ? campo.change($event) : emptyHandler()\"\n >\n </kb-input-cep>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-valor'\">\n <kb-input-valor label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-valor>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-format'\">\n <kb-input-format label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" [formato]=\"campo.Formato ?? ''\"\n [itemClass]=\"itemClass\">\n </kb-input-format>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-checkbox'\">\n <kb-input-checkbox label=\"{{ campo.Label }}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" \n [itemClass]=\"itemClass\"\n [labelColor]=\"campo.BtnColor\">\n\n </kb-input-checkbox>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-select'\">\n <kb-input-select [label]=\"campo.Label ?? campo.Nome\" [placeholder]=\"'Selecionar...'\"\n [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\" [itens]=\"campo.Itens\" [itemId]=\"campo.ItemId ?? 'Id'\"\n [itemNome]=\"campo.ItemNome ?? 'Nome'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n (selectChangeEntity)=\"campo.change ? campo.change($event) : emptyHandler()\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-select>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-radio'\">\n <kb-input-radio [label]=\"campo.Label ?? campo.Nome\" [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\"\n [itens]=\"campo.Itens\" [itemId]=\"campo.ItemId\" [itemNome]=\"campo.ItemNome\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-radio>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-pesquisa'\">\n <kb-input-pesquisa #pesquisaCentroCustoPai \n [label]=\"campo.Label ?? campo.Nome\" \n [campoId]=\"campo.ItemId\"\n [focusField]=\"campo.focusField\"\n [formControlName]=\"campo.Nome\" \n placeholder=\"Pesquisar...\" \n [campoDisplay]=\"campo.ItemNome ?? 'Nome'\" \n [form]=\"entidadeForm\"\n [tipo]=\"campo.TipoPesquisa\" \n [urlItem]=\"campo.UrlItem\" \n [max]=\"campo.Tamanho ?? '50'\" \n [url]=\"campo.UrlPesquisa\" \n [readonly]=\"campo.ReadOnly\"\n (pesquisaChange)=\"campo.change ? campo.change($event) : emptyHandler()\"\n [itemClass]=\"itemClass\">\n </kb-input-pesquisa>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-button'\">\n <!-- \n <kb-btn-action [title]=\"campo.Label\" [icon]=\"campo.Icon\" [iconSrc]=\"campo.IconSrc\" [color]=\"campo.BtnColor ?? 'light'\" \n [expand]=\"campo.BtnExpand ?? 'block'\" style=\"margin-top: var(--btn-action-margin-top, auto);\">\n </kb-btn-action>\n -->\n <ion-button [expand]=\"campo.BtnExpand ?? 'block'\" [color]=\"campo.BtnColor ?? 'light'\"\n (click)=\"campo.click ? campo.click($event) : emptyHandler()\" [size]=\"campo.BtnSize ?? 'default'\"\n [disabled]=\"campo.ReadOnly\">\n <ion-icon *ngIf=\"campo.Icon || campo.IconSrc\" [name]=\"campo.Icon\" [src]=\"campo.IconSrc\"></ion-icon>\n {{ campo.Label }}\n </ion-button>\n </ion-col>\n\n <ion-col *ngIf=\"campo.Tipo == 'col'\" size-md=\"1\" size-xs=\"0\">\n\n </ion-col>\n\n <ion-col *ngIf=\"campo.Tipo == 'sub-titulo'\" size=\"12\">\n <ion-list lines=\"none\" class=\"ion-no-padding\">\n <ion-list-header color=\"primary\" [style]=\"campo.CampoStyle ?? ''\"> \n <ion-label [style]=\"campo.LabelStyle ?? ''\">{{ campo.Label }}</ion-label>\n </ion-list-header>\n </ion-list>\n </ion-col>\n </ng-container>\n </ion-row>\n\n <!--\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Totalizador</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Totalizador\"></ion-checkbox>\n </ion-item>\n </ion-col>\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Inativo</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Inativo\"></ion-checkbox>\n </ion-item>\n </ion-col>\n -->\n</form>", styles: ["ion-list-header{text-align:center;font-size:large}\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: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.InputTextComponent, selector: "kb-input-text", inputs: ["iconInput", "inputSpanAfter", "campoFoco", "showCustomAction", "customActionIcon"], outputs: ["customActionClick"] }, { kind: "component", type: i5.InputFormatComponent, selector: "kb-input-format", inputs: ["formato", "keyEnter"] }, { kind: "component", type: i6.InputSelectComponent, selector: "kb-input-select", inputs: ["itens", "itemId", "itemNome", "showNovo", "itemNull", "opcaoDefault"], outputs: ["selectChange", "selectChangeEntity"] }, { kind: "component", type: i7.InputPesquisaComponent, selector: "kb-input-pesquisa", inputs: ["textoPesquisa", "max", "filterFunction", "selectId", "campoId", "campoPaiId", "campoDisplay", "tipo", "pesquisaChange", "pesquisaAction", "limpar", "url", "urlItem", "urlTree", "empresa", "loadInit", "treeTitulo"] }, { kind: "component", type: i8.InputValorComponent, selector: "kb-input-valor", inputs: ["maxValor"] }, { kind: "component", type: i9.InputAreaComponent, selector: "kb-input-area", inputs: ["linhas"] }, { kind: "component", type: i10.InputCepComponent, selector: "kb-input-cep", inputs: ["formato", "keyEnter"], outputs: ["getResultados"] }, { kind: "component", type: i11.InputCheckboxComponent, selector: "kb-input-checkbox", inputs: ["justify", "labelPlacement"] }, { kind: "component", type: i12.InputRadioComponent, selector: "kb-input-radio", inputs: ["itens", "itemId", "itemNome", "color"] }] }); }
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: EntityEditComponent, decorators: [{
|
|
38
|
+
type: Component,
|
|
39
|
+
args: [{ selector: 'kb-entity-edit', template: "<form *ngIf=\"campos && campos.length\" [formGroup]=\"entidadeForm\" style=\"width: 100%;\">\n\n\n <ion-row *ngFor=\"let linha of campos\" [class]=\"rowClass\">\n <ng-container *ngFor=\"let campo of linha.Linha\">\n <!-- {{ campo.Nome }} {{ campo.Tipo }} -->\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-text'\">\n <kb-input-text label=\"{{campo.Label ?? campo.Nome}}\" [placeholder]=\"campo.PlaceHolderVisivel ? (campo.Label ?? campo.Nome + '...') : ''\"\n [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" \n [type]=\"campo.TipoInput ?? 'text'\" \n [showSeePassword]=\"campo.TipoInput == 'password'\"\n [showCustomAction]=\"campo.InputAction\"\n [customActionIcon]=\"campo.InputActionIcon ?? 'search-outline'\"\n (customActionClick)=\"campo.click ? campo.click($event) : emptyHandler()\"\n\n [itemClass]=\"itemClass\">\n </kb-input-text>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-area'\">\n <kb-input-area label=\"{{campo.Label ?? campo.Nome}}\" [placeholder]=\"campo.PlaceHolderVisivel ? (campo.Label ?? campo.Nome + '...') : ''\"\n [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n [formControlName]=\"campo.Nome\" [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" [linhas]=\"campo.Linhas ?? 5\"\n [itemClass]=\"itemClass\">\n </kb-input-area>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-cep'\">\n <kb-input-cep label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\"\n (getResultados)=\"campo.change ? campo.change($event) : emptyHandler()\"\n >\n </kb-input-cep>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-valor'\">\n <kb-input-valor label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-valor>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-format'\">\n <kb-input-format label=\"{{campo.Label ?? campo.Nome}}\" [form]=\"entidadeForm\" [max]=\"campo.Tamanho ?? '50'\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" [formato]=\"campo.Formato ?? ''\"\n [itemClass]=\"itemClass\">\n </kb-input-format>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-checkbox'\">\n <kb-input-checkbox label=\"{{ campo.Label }}\" [form]=\"entidadeForm\"\n [validation_messages]=\"validation_messages[campo.Nome]\" [formControlName]=\"campo.Nome\"\n [campoFoco]=\"campo.CampoFoco\" [readonly]=\"campo.ReadOnly\" \n [itemClass]=\"itemClass\"\n [labelColor]=\"campo.BtnColor\">\n\n </kb-input-checkbox>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-select'\">\n <kb-input-select [label]=\"campo.Label ?? campo.Nome\" [placeholder]=\"'Selecionar...'\"\n [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\" [itens]=\"campo.Itens\" [itemId]=\"campo.ItemId ?? 'Id'\"\n [itemNome]=\"campo.ItemNome ?? 'Nome'\" [validation_messages]=\"validation_messages[campo.Nome]\"\n (selectChangeEntity)=\"campo.change ? campo.change($event) : emptyHandler()\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-select>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-radio'\">\n <kb-input-radio [label]=\"campo.Label ?? campo.Nome\" [formControlName]=\"campo.Nome\" [form]=\"entidadeForm\"\n [itens]=\"campo.Itens\" [itemId]=\"campo.ItemId\" [itemNome]=\"campo.ItemNome\" [readonly]=\"campo.ReadOnly\"\n [itemClass]=\"itemClass\">\n </kb-input-radio>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-pesquisa'\">\n <kb-input-pesquisa #pesquisaCentroCustoPai \n [label]=\"campo.Label ?? campo.Nome\" \n [campoId]=\"campo.ItemId\"\n [focusField]=\"campo.focusField\"\n [formControlName]=\"campo.Nome\" \n placeholder=\"Pesquisar...\" \n [campoDisplay]=\"campo.ItemNome ?? 'Nome'\" \n [form]=\"entidadeForm\"\n [tipo]=\"campo.TipoPesquisa\" \n [urlItem]=\"campo.UrlItem\" \n [max]=\"campo.Tamanho ?? '50'\" \n [url]=\"campo.UrlPesquisa\" \n [readonly]=\"campo.ReadOnly\"\n (pesquisaChange)=\"campo.change ? campo.change($event) : emptyHandler()\"\n [itemClass]=\"itemClass\">\n </kb-input-pesquisa>\n </ion-col>\n\n <ion-col [sizeMd]=\"campo.Size\" *ngIf=\"campo.Tipo == 'input-button'\">\n <!-- \n <kb-btn-action [title]=\"campo.Label\" [icon]=\"campo.Icon\" [iconSrc]=\"campo.IconSrc\" [color]=\"campo.BtnColor ?? 'light'\" \n [expand]=\"campo.BtnExpand ?? 'block'\" style=\"margin-top: var(--btn-action-margin-top, auto);\">\n </kb-btn-action>\n -->\n <ion-button [expand]=\"campo.BtnExpand ?? 'block'\" [color]=\"campo.BtnColor ?? 'light'\"\n (click)=\"campo.click ? campo.click($event) : emptyHandler()\" [size]=\"campo.BtnSize ?? 'default'\"\n [disabled]=\"campo.ReadOnly\">\n <ion-icon *ngIf=\"campo.Icon || campo.IconSrc\" [name]=\"campo.Icon\" [src]=\"campo.IconSrc\"></ion-icon>\n {{ campo.Label }}\n </ion-button>\n </ion-col>\n\n <ion-col *ngIf=\"campo.Tipo == 'col'\" size-md=\"1\" size-xs=\"0\">\n\n </ion-col>\n\n <ion-col *ngIf=\"campo.Tipo == 'sub-titulo'\" size=\"12\">\n <ion-list lines=\"none\" class=\"ion-no-padding\">\n <ion-list-header color=\"primary\" [style]=\"campo.CampoStyle ?? ''\"> \n <ion-label [style]=\"campo.LabelStyle ?? ''\">{{ campo.Label }}</ion-label>\n </ion-list-header>\n </ion-list>\n </ion-col>\n </ng-container>\n </ion-row>\n\n <!--\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Totalizador</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Totalizador\"></ion-checkbox>\n </ion-item>\n </ion-col>\n <ion-col class=\"select ion-no-margin ion-no-padding\">\n <ion-item lines=\"none\">\n <ion-label>Inativo</ion-label>\n <ion-checkbox slot=\"start\" formControlName=\"Inativo\"></ion-checkbox>\n </ion-item>\n </ion-col>\n -->\n</form>", styles: ["ion-list-header{text-align:center;font-size:large}\n"] }]
|
|
40
|
+
}], ctorParameters: () => [{ type: i0.NgZone }], propDecorators: { entidade: [{
|
|
41
|
+
type: Input
|
|
42
|
+
}], campos: [{
|
|
43
|
+
type: Input
|
|
44
|
+
}], entidadeForm: [{
|
|
45
|
+
type: Input
|
|
46
|
+
}], validation_messages: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}], itemClass: [{
|
|
49
|
+
type: Input
|
|
50
|
+
}], rowClass: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}] } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvZW50aXR5LWVkaXQvZW50aXR5LWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvZW50aXR5LWVkaXQvZW50aXR5LWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWtCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVVqRSxNQUFNLE9BQU8sbUJBQW1CO0lBVzlCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRnpCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsYUFBUSxHQUFXLEVBQUUsQ0FBQztJQUcvQixDQUFDO0lBRUQsUUFBUTtRQUNOLDJCQUEyQjtJQUM3QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsMENBQTBDO1FBRTFDLDhCQUE4QjtRQUM5Qix5QkFBeUI7UUFDekIsOENBQThDO1FBQzlDLEtBQUs7UUFDTCw0QkFBNEI7SUFDOUIsQ0FBQztJQUVELFlBQVk7SUFFWixDQUFDOzhHQS9CVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixrT0NWaEMsa3RPQThJTzs7MkZEcElNLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxnQkFBZ0I7MkVBTWpCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE5nWm9uZSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlTW9kZWwsIEh0bWxSb3cgfSBmcm9tICdhcHBwcm9qZWN0LWxpYic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tiLWVudGl0eS1lZGl0JyxcbiAgLy9zdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LWVkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZW50aXR5LWVkaXQuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIEVudGl0eUVkaXRDb21wb25lbnQ8VCBleHRlbmRzIEJhc2VNb2RlbD4gaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBlbnRpZGFkZTogVCB8IG51bGw7XG4gIC8vZW50aWRhZGU6IGFueTtcbiAgLyoqXG4gICAqIFZhaSByZWNlYmVyIG1vbnRhZG8gZG8gYmFzZSBjYWRhc3Ryb1xuICAgKi9cbiAgQElucHV0KCkgY2FtcG9zOiBIdG1sUm93W107XG4gIEBJbnB1dCgpIGVudGlkYWRlRm9ybTogRm9ybUdyb3VwO1xuICBASW5wdXQoKSB2YWxpZGF0aW9uX21lc3NhZ2VzOiBhbnk7XG4gIEBJbnB1dCgpIGl0ZW1DbGFzczogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgcm93Q2xhc3M6IHN0cmluZyA9IFwiXCI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy90aGlzLmdldEVudGlkYWRlQ2FtcG9zKCk7XG4gIH1cblxuICBnZXRFbnRpZGFkZUNhbXBvcygpIHtcbiAgICAvL3RoaXMuZW50aWRhZGUgPSBuZXcgdGhpcy5lbnRpZGFkZVRpcG8oKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZW50aWRhZGUpO1xuICAgIC8vIHRoaXMubmdab25lLnJ1bigoKSA9PiBcbiAgICAvLyAgIHRoaXMuY2FtcG9zID0gdGhpcy5lbnRpZGFkZS5nZXRIdG1sRm9ybSgpXG4gICAgLy8gKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNhbXBvcyk7XG4gIH1cblxuICBlbXB0eUhhbmRsZXIoKSB7XG5cbiAgfVxufVxuIiwiPGZvcm0gKm5nSWY9XCJjYW1wb3MgJiYgY2FtcG9zLmxlbmd0aFwiIFtmb3JtR3JvdXBdPVwiZW50aWRhZGVGb3JtXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cblxuXG4gIDxpb24tcm93ICpuZ0Zvcj1cImxldCBsaW5oYSBvZiBjYW1wb3NcIiBbY2xhc3NdPVwicm93Q2xhc3NcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYW1wbyBvZiBsaW5oYS5MaW5oYVwiPlxuICAgICAgPCEtLSB7eyBjYW1wby5Ob21lIH19IHt7IGNhbXBvLlRpcG8gfX0gLS0+XG5cbiAgICAgIDxpb24tY29sIFtzaXplTWRdPVwiY2FtcG8uU2l6ZVwiICpuZ0lmPVwiY2FtcG8uVGlwbyA9PSAnaW5wdXQtdGV4dCdcIj5cbiAgICAgICAgPGtiLWlucHV0LXRleHQgbGFiZWw9XCJ7e2NhbXBvLkxhYmVsID8/IGNhbXBvLk5vbWV9fVwiIFtwbGFjZWhvbGRlcl09XCJjYW1wby5QbGFjZUhvbGRlclZpc2l2ZWwgPyAoY2FtcG8uTGFiZWwgPz8gY2FtcG8uTm9tZSArICcuLi4nKSA6ICcnXCJcbiAgICAgICAgICBbZm9ybV09XCJlbnRpZGFkZUZvcm1cIiBbbWF4XT1cImNhbXBvLlRhbWFuaG8gPz8gJzUwJ1wiIFt2YWxpZGF0aW9uX21lc3NhZ2VzXT1cInZhbGlkYXRpb25fbWVzc2FnZXNbY2FtcG8uTm9tZV1cIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY2FtcG8uTm9tZVwiIFtjYW1wb0ZvY29dPVwiY2FtcG8uQ2FtcG9Gb2NvXCIgW3JlYWRvbmx5XT1cImNhbXBvLlJlYWRPbmx5XCIgICAgICAgICAgXG4gICAgICAgICAgW3R5cGVdPVwiY2FtcG8uVGlwb0lucHV0ID8/ICd0ZXh0J1wiIFxuICAgICAgICAgIFtzaG93U2VlUGFzc3dvcmRdPVwiY2FtcG8uVGlwb0lucHV0ID09ICdwYXNzd29yZCdcIlxuICAgICAgICAgIFtzaG93Q3VzdG9tQWN0aW9uXT1cImNhbXBvLklucHV0QWN0aW9uXCJcbiAgICAgICAgICBbY3VzdG9tQWN0aW9uSWNvbl09XCJjYW1wby5JbnB1dEFjdGlvbkljb24gPz8gJ3NlYXJjaC1vdXRsaW5lJ1wiXG4gICAgICAgICAgKGN1c3RvbUFjdGlvbkNsaWNrKT1cImNhbXBvLmNsaWNrID8gY2FtcG8uY2xpY2soJGV2ZW50KSA6IGVtcHR5SGFuZGxlcigpXCJcblxuICAgICAgICAgIFtpdGVtQ2xhc3NdPVwiaXRlbUNsYXNzXCI+XG4gICAgICAgIDwva2ItaW5wdXQtdGV4dD5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgW3NpemVNZF09XCJjYW1wby5TaXplXCIgKm5nSWY9XCJjYW1wby5UaXBvID09ICdpbnB1dC1hcmVhJ1wiPlxuICAgICAgICA8a2ItaW5wdXQtYXJlYSBsYWJlbD1cInt7Y2FtcG8uTGFiZWwgPz8gY2FtcG8uTm9tZX19XCIgW3BsYWNlaG9sZGVyXT1cImNhbXBvLlBsYWNlSG9sZGVyVmlzaXZlbCA/IChjYW1wby5MYWJlbCA/PyBjYW1wby5Ob21lICsgJy4uLicpIDogJydcIlxuICAgICAgICAgIFtmb3JtXT1cImVudGlkYWRlRm9ybVwiIFttYXhdPVwiY2FtcG8uVGFtYW5obyA/PyAnNTAnXCIgW3ZhbGlkYXRpb25fbWVzc2FnZXNdPVwidmFsaWRhdGlvbl9tZXNzYWdlc1tjYW1wby5Ob21lXVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjYW1wby5Ob21lXCIgW2NhbXBvRm9jb109XCJjYW1wby5DYW1wb0ZvY29cIiBbcmVhZG9ubHldPVwiY2FtcG8uUmVhZE9ubHlcIiBbbGluaGFzXT1cImNhbXBvLkxpbmhhcyA/PyA1XCJcbiAgICAgICAgICBbaXRlbUNsYXNzXT1cIml0ZW1DbGFzc1wiPlxuICAgICAgICA8L2tiLWlucHV0LWFyZWE+XG4gICAgICA8L2lvbi1jb2w+XG5cbiAgICAgIDxpb24tY29sIFtzaXplTWRdPVwiY2FtcG8uU2l6ZVwiICpuZ0lmPVwiY2FtcG8uVGlwbyA9PSAnaW5wdXQtY2VwJ1wiPlxuICAgICAgICA8a2ItaW5wdXQtY2VwIGxhYmVsPVwie3tjYW1wby5MYWJlbCA/PyBjYW1wby5Ob21lfX1cIiBbZm9ybV09XCJlbnRpZGFkZUZvcm1cIlxuICAgICAgICAgIFt2YWxpZGF0aW9uX21lc3NhZ2VzXT1cInZhbGlkYXRpb25fbWVzc2FnZXNbY2FtcG8uTm9tZV1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNhbXBvLk5vbWVcIlxuICAgICAgICAgIFtjYW1wb0ZvY29dPVwiY2FtcG8uQ2FtcG9Gb2NvXCIgW3JlYWRvbmx5XT1cImNhbXBvLlJlYWRPbmx5XCJcbiAgICAgICAgICBbaXRlbUNsYXNzXT1cIml0ZW1DbGFzc1wiXG4gICAgICAgICAgKGdldFJlc3VsdGFkb3MpPVwiY2FtcG8uY2hhbmdlID8gY2FtcG8uY2hhbmdlKCRldmVudCkgOiBlbXB0eUhhbmRsZXIoKVwiXG4gICAgICAgICAgPlxuICAgICAgICA8L2tiLWlucHV0LWNlcD5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgW3NpemVNZF09XCJjYW1wby5TaXplXCIgKm5nSWY9XCJjYW1wby5UaXBvID09ICdpbnB1dC12YWxvcidcIj5cbiAgICAgICAgPGtiLWlucHV0LXZhbG9yIGxhYmVsPVwie3tjYW1wby5MYWJlbCA/PyBjYW1wby5Ob21lfX1cIiBbZm9ybV09XCJlbnRpZGFkZUZvcm1cIiBbbWF4XT1cImNhbXBvLlRhbWFuaG8gPz8gJzUwJ1wiXG4gICAgICAgICAgW3ZhbGlkYXRpb25fbWVzc2FnZXNdPVwidmFsaWRhdGlvbl9tZXNzYWdlc1tjYW1wby5Ob21lXVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY2FtcG8uTm9tZVwiXG4gICAgICAgICAgW2NhbXBvRm9jb109XCJjYW1wby5DYW1wb0ZvY29cIiBbcmVhZG9ubHldPVwiY2FtcG8uUmVhZE9ubHlcIlxuICAgICAgICAgIFtpdGVtQ2xhc3NdPVwiaXRlbUNsYXNzXCI+XG4gICAgICAgIDwva2ItaW5wdXQtdmFsb3I+XG4gICAgICA8L2lvbi1jb2w+XG5cbiAgICAgIDxpb24tY29sIFtzaXplTWRdPVwiY2FtcG8uU2l6ZVwiICpuZ0lmPVwiY2FtcG8uVGlwbyA9PSAnaW5wdXQtZm9ybWF0J1wiPlxuICAgICAgICA8a2ItaW5wdXQtZm9ybWF0IGxhYmVsPVwie3tjYW1wby5MYWJlbCA/PyBjYW1wby5Ob21lfX1cIiBbZm9ybV09XCJlbnRpZGFkZUZvcm1cIiBbbWF4XT1cImNhbXBvLlRhbWFuaG8gPz8gJzUwJ1wiXG4gICAgICAgICAgW3ZhbGlkYXRpb25fbWVzc2FnZXNdPVwidmFsaWRhdGlvbl9tZXNzYWdlc1tjYW1wby5Ob21lXVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY2FtcG8uTm9tZVwiXG4gICAgICAgICAgW2NhbXBvRm9jb109XCJjYW1wby5DYW1wb0ZvY29cIiBbcmVhZG9ubHldPVwiY2FtcG8uUmVhZE9ubHlcIiBbZm9ybWF0b109XCJjYW1wby5Gb3JtYXRvID8/ICcnXCJcbiAgICAgICAgICBbaXRlbUNsYXNzXT1cIml0ZW1DbGFzc1wiPlxuICAgICAgICA8L2tiLWlucHV0LWZvcm1hdD5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgW3NpemVNZF09XCJjYW1wby5TaXplXCIgKm5nSWY9XCJjYW1wby5UaXBvID09ICdpbnB1dC1jaGVja2JveCdcIj5cbiAgICAgICAgPGtiLWlucHV0LWNoZWNrYm94IGxhYmVsPVwie3sgY2FtcG8uTGFiZWwgfX1cIiBbZm9ybV09XCJlbnRpZGFkZUZvcm1cIlxuICAgICAgICAgIFt2YWxpZGF0aW9uX21lc3NhZ2VzXT1cInZhbGlkYXRpb25fbWVzc2FnZXNbY2FtcG8uTm9tZV1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNhbXBvLk5vbWVcIlxuICAgICAgICAgIFtjYW1wb0ZvY29dPVwiY2FtcG8uQ2FtcG9Gb2NvXCIgW3JlYWRvbmx5XT1cImNhbXBvLlJlYWRPbmx5XCIgXG4gICAgICAgICAgW2l0ZW1DbGFzc109XCJpdGVtQ2xhc3NcIlxuICAgICAgICAgIFtsYWJlbENvbG9yXT1cImNhbXBvLkJ0bkNvbG9yXCI+XG5cbiAgICAgICAgPC9rYi1pbnB1dC1jaGVja2JveD5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgW3NpemVNZF09XCJjYW1wby5TaXplXCIgKm5nSWY9XCJjYW1wby5UaXBvID09ICdpbnB1dC1zZWxlY3QnXCI+XG4gICAgICAgIDxrYi1pbnB1dC1zZWxlY3QgW2xhYmVsXT1cImNhbXBvLkxhYmVsID8/IGNhbXBvLk5vbWVcIiBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjaW9uYXIuLi4nXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNhbXBvLk5vbWVcIiBbZm9ybV09XCJlbnRpZGFkZUZvcm1cIiBbaXRlbnNdPVwiY2FtcG8uSXRlbnNcIiBbaXRlbUlkXT1cImNhbXBvLkl0ZW1JZCA/PyAnSWQnXCJcbiAgICAgICAgICBbaXRlbU5vbWVdPVwiY2FtcG8uSXRlbU5vbWUgPz8gJ05vbWUnXCIgW3ZhbGlkYXRpb25fbWVzc2FnZXNdPVwidmFsaWRhdGlvbl9tZXNzYWdlc1tjYW1wby5Ob21lXVwiXG4gICAgICAgICAgKHNlbGVjdENoYW5nZUVudGl0eSk9XCJjYW1wby5jaGFuZ2UgPyBjYW1wby5jaGFuZ2UoJGV2ZW50KSA6IGVtcHR5SGFuZGxlcigpXCIgW3JlYWRvbmx5XT1cImNhbXBvLlJlYWRPbmx5XCJcbiAgICAgICAgICBbaXRlbUNsYXNzXT1cIml0ZW1DbGFzc1wiPlxuICAgICAgICA8L2tiLWlucHV0LXNlbGVjdD5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgW3NpemVNZF09XCJjYW1wby5TaXplXCIgKm5nSWY9XCJjYW1wby5UaXBvID09ICdpbnB1dC1yYWRpbydcIj5cbiAgICAgICAgPGtiLWlucHV0LXJhZGlvIFtsYWJlbF09XCJjYW1wby5MYWJlbCA/PyBjYW1wby5Ob21lXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjYW1wby5Ob21lXCIgW2Zvcm1dPVwiZW50aWRhZGVGb3JtXCJcbiAgICAgICAgICBbaXRlbnNdPVwiY2FtcG8uSXRlbnNcIiBbaXRlbUlkXT1cImNhbXBvLkl0ZW1JZFwiIFtpdGVtTm9tZV09XCJjYW1wby5JdGVtTm9tZVwiIFtyZWFkb25seV09XCJjYW1wby5SZWFkT25seVwiXG4gICAgICAgICAgW2l0ZW1DbGFzc109XCJpdGVtQ2xhc3NcIj5cbiAgICAgICAgPC9rYi1pbnB1dC1yYWRpbz5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgW3NpemVNZF09XCJjYW1wby5TaXplXCIgKm5nSWY9XCJjYW1wby5UaXBvID09ICdpbnB1dC1wZXNxdWlzYSdcIj5cbiAgICAgICAgPGtiLWlucHV0LXBlc3F1aXNhICNwZXNxdWlzYUNlbnRyb0N1c3RvUGFpIFxuICAgICAgICAgIFtsYWJlbF09XCJjYW1wby5MYWJlbCA/PyBjYW1wby5Ob21lXCIgXG4gICAgICAgICAgW2NhbXBvSWRdPVwiY2FtcG8uSXRlbUlkXCJcbiAgICAgICAgICBbZm9jdXNGaWVsZF09XCJjYW1wby5mb2N1c0ZpZWxkXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNhbXBvLk5vbWVcIiBcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiIFxuICAgICAgICAgIFtjYW1wb0Rpc3BsYXldPVwiY2FtcG8uSXRlbU5vbWUgPz8gJ05vbWUnXCIgXG4gICAgICAgICAgW2Zvcm1dPVwiZW50aWRhZGVGb3JtXCJcbiAgICAgICAgICBbdGlwb109XCJjYW1wby5UaXBvUGVzcXVpc2FcIiBcbiAgICAgICAgICBbdXJsSXRlbV09XCJjYW1wby5VcmxJdGVtXCIgXG4gICAgICAgICAgW21heF09XCJjYW1wby5UYW1hbmhvID8/ICc1MCdcIiBcbiAgICAgICAgICBbdXJsXT1cImNhbXBvLlVybFBlc3F1aXNhXCIgXG4gICAgICAgICAgW3JlYWRvbmx5XT1cImNhbXBvLlJlYWRPbmx5XCJcbiAgICAgICAgICAocGVzcXVpc2FDaGFuZ2UpPVwiY2FtcG8uY2hhbmdlID8gY2FtcG8uY2hhbmdlKCRldmVudCkgOiBlbXB0eUhhbmRsZXIoKVwiXG4gICAgICAgICAgW2l0ZW1DbGFzc109XCJpdGVtQ2xhc3NcIj5cbiAgICAgICAgPC9rYi1pbnB1dC1wZXNxdWlzYT5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgW3NpemVNZF09XCJjYW1wby5TaXplXCIgKm5nSWY9XCJjYW1wby5UaXBvID09ICdpbnB1dC1idXR0b24nXCI+XG4gICAgICAgIDwhLS0gXG4gICAgICAgIDxrYi1idG4tYWN0aW9uIFt0aXRsZV09XCJjYW1wby5MYWJlbFwiIFtpY29uXT1cImNhbXBvLkljb25cIiBbaWNvblNyY109XCJjYW1wby5JY29uU3JjXCIgW2NvbG9yXT1cImNhbXBvLkJ0bkNvbG9yID8/ICdsaWdodCdcIiBcbiAgICAgICAgICBbZXhwYW5kXT1cImNhbXBvLkJ0bkV4cGFuZCA/PyAnYmxvY2snXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiB2YXIoLS1idG4tYWN0aW9uLW1hcmdpbi10b3AsIGF1dG8pO1wiPlxuICAgICAgICA8L2tiLWJ0bi1hY3Rpb24+XG4gICAgICAtLT5cbiAgICAgICAgPGlvbi1idXR0b24gW2V4cGFuZF09XCJjYW1wby5CdG5FeHBhbmQgPz8gJ2Jsb2NrJ1wiIFtjb2xvcl09XCJjYW1wby5CdG5Db2xvciA/PyAnbGlnaHQnXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2FtcG8uY2xpY2sgPyBjYW1wby5jbGljaygkZXZlbnQpIDogZW1wdHlIYW5kbGVyKClcIiBbc2l6ZV09XCJjYW1wby5CdG5TaXplID8/ICdkZWZhdWx0J1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImNhbXBvLlJlYWRPbmx5XCI+XG4gICAgICAgICAgPGlvbi1pY29uICpuZ0lmPVwiY2FtcG8uSWNvbiB8fCBjYW1wby5JY29uU3JjXCIgW25hbWVdPVwiY2FtcG8uSWNvblwiIFtzcmNdPVwiY2FtcG8uSWNvblNyY1wiPjwvaW9uLWljb24+XG4gICAgICAgICAge3sgY2FtcG8uTGFiZWwgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuXG4gICAgICA8aW9uLWNvbCAqbmdJZj1cImNhbXBvLlRpcG8gPT0gJ2NvbCdcIiBzaXplLW1kPVwiMVwiIHNpemUteHM9XCIwXCI+XG5cbiAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgPGlvbi1jb2wgKm5nSWY9XCJjYW1wby5UaXBvID09ICdzdWItdGl0dWxvJ1wiIHNpemU9XCIxMlwiPlxuICAgICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXIgY29sb3I9XCJwcmltYXJ5XCIgW3N0eWxlXT1cImNhbXBvLkNhbXBvU3R5bGUgPz8gJydcIj4gXG4gICAgICAgICAgICA8aW9uLWxhYmVsIFtzdHlsZV09XCJjYW1wby5MYWJlbFN0eWxlID8/ICcnXCI+e3sgY2FtcG8uTGFiZWwgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9pb24tcm93PlxuXG4gIDwhLS1cbiAgICA8aW9uLWNvbCBjbGFzcz1cInNlbGVjdCBpb24tbm8tbWFyZ2luIGlvbi1uby1wYWRkaW5nXCI+XG4gICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgIDxpb24tbGFiZWw+VG90YWxpemFkb3I8L2lvbi1sYWJlbD5cbiAgICAgICAgPGlvbi1jaGVja2JveCBzbG90PVwic3RhcnRcIiBmb3JtQ29udHJvbE5hbWU9XCJUb3RhbGl6YWRvclwiPjwvaW9uLWNoZWNrYm94PlxuICAgICAgPC9pb24taXRlbT5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJzZWxlY3QgaW9uLW5vLW1hcmdpbiBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICA8aW9uLWxhYmVsPkluYXRpdm88L2lvbi1sYWJlbD5cbiAgICAgICAgPGlvbi1jaGVja2JveCBzbG90PVwic3RhcnRcIiBmb3JtQ29udHJvbE5hbWU9XCJJbmF0aXZvXCI+PC9pb24tY2hlY2tib3g+XG4gICAgICA8L2lvbi1pdGVtPlxuICAgIDwvaW9uLWNvbD5cbiAgICAtLT5cbjwvZm9ybT4iXX0=
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { GridTabela, LibService } from 'appproject-lib';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@ionic/angular";
|
|
6
|
+
import * as i3 from "@angular/forms";
|
|
7
|
+
import * as i4 from "appproject-lib";
|
|
8
|
+
export class GridViewComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.minHeight = '400px';
|
|
11
|
+
this.inMemoryPagination = false;
|
|
12
|
+
this.selecionarItem = new EventEmitter();
|
|
13
|
+
this.excluirItem = new EventEmitter();
|
|
14
|
+
this.selecionarChecked = new EventEmitter();
|
|
15
|
+
//inputs = inject(new InjectionToken<any>('title inputs'));
|
|
16
|
+
this.grupos = [{ Coluna: '', Tabela: null, Dados: null, Nivel: 0 }];
|
|
17
|
+
// tabelaCampos = {
|
|
18
|
+
// Selecionar: false,
|
|
19
|
+
// Exportar: true,
|
|
20
|
+
// Colunas: [
|
|
21
|
+
// { Campo: 'Id', Titulo: 'Id', Tamanho: '10%', Ordem: true, Grupo: false, Filtrar: true, OrdemStatus: 0, Tipo: 'number', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },
|
|
22
|
+
// { Campo: 'Marca', Titulo: 'Marca', Tamanho: '25%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'string', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },
|
|
23
|
+
// { Campo: 'Descricao', Titulo: 'Descrição', Tamanho: '25%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'string', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },
|
|
24
|
+
// { Campo: 'Data', Titulo: 'Data', Tamanho: '20%', Ordem: true, Grupo: true, Filtrar: true, OrdemStatus: 0, Tipo: 'date', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },
|
|
25
|
+
// { Campo: 'Valor', Titulo: 'Valor', Tamanho: '20%', Ordem: true, Grupo: false, Filtrar: true, OrdemStatus: 0, Tipo: 'number', Valores: [], FiltroOperador: '=', FiltroValor: '', FiltroVisivel: false },
|
|
26
|
+
// ]
|
|
27
|
+
// }
|
|
28
|
+
// dataSet: Array<any> = [
|
|
29
|
+
// { Id: 1, Marca: 'Apple', Descricao: 'IPhone 14', Data: '2023-05-01', Valor: 7899.99 },
|
|
30
|
+
// { Id: 2, Marca: 'Apple', Descricao: 'MacBook Pro', Data: '2023-06-01', Valor: 17999.99 },
|
|
31
|
+
// { Id: 3, Marca: 'Samsung', Descricao: 'Galaxy S23', Data: '2023-05-01', Valor: 6899.99 },
|
|
32
|
+
// { Id: 4, Marca: 'Sony', Descricao: 'PS 5', Data: '2023-06-01', Valor: 4899.99 },
|
|
33
|
+
// { Id: 5, Marca: 'Samsung', Descricao: 'Watch 23', Data: '2023-05-01', Valor: 1899.99 },
|
|
34
|
+
// ]
|
|
35
|
+
this.groups = [];
|
|
36
|
+
this.filteredDataSet = [];
|
|
37
|
+
this.pageDataSet = [];
|
|
38
|
+
//array com os campos filtrados para display
|
|
39
|
+
this.camposDisplay = [];
|
|
40
|
+
//filtro
|
|
41
|
+
this.isFiltroOpen = false;
|
|
42
|
+
this.todosSelecionados = false;
|
|
43
|
+
//pagination
|
|
44
|
+
//página atual
|
|
45
|
+
this.page = 1;
|
|
46
|
+
//registros por página
|
|
47
|
+
this.pageOffset = 20;
|
|
48
|
+
}
|
|
49
|
+
valoresFiltro() {
|
|
50
|
+
this.tabelaCampos.Colunas.forEach(c => {
|
|
51
|
+
if (c.Filtrar) {
|
|
52
|
+
//projetar a coluna
|
|
53
|
+
let initial = [];
|
|
54
|
+
let valores = this.dataSet.map(d => d[c.Campo]);
|
|
55
|
+
c.Valores = valores.filter((value, index, self) => {
|
|
56
|
+
return self.indexOf(value) === index;
|
|
57
|
+
}).map(v => { return { Selecionado: false, Valor: v }; });
|
|
58
|
+
// console.log(c.Campo, valores);
|
|
59
|
+
// console.log(c.Valores)
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
ngOnInit() {
|
|
64
|
+
//this.inicializaGrupo();
|
|
65
|
+
//this.agrupar('Marca');
|
|
66
|
+
//console.log('inputs', this.inputs);
|
|
67
|
+
//console.log('Input empresa', this.empresaId);
|
|
68
|
+
GridTabela.init(this.tabelaCampos);
|
|
69
|
+
this.valoresFiltro();
|
|
70
|
+
this.filteredDataSet = this.dataSet;
|
|
71
|
+
console.log('Init Tabela campos', this.tabelaCampos);
|
|
72
|
+
}
|
|
73
|
+
ngOnChanges(changes) {
|
|
74
|
+
console.log('On changes Tabela campos', this.tabelaCampos);
|
|
75
|
+
//evento chamado quando o dataset for atualizado
|
|
76
|
+
//inicializar vars de paginação
|
|
77
|
+
this.initPage();
|
|
78
|
+
this.todosSelecionados = false;
|
|
79
|
+
}
|
|
80
|
+
initPage() {
|
|
81
|
+
this.page = 1;
|
|
82
|
+
this.totalRec = this.filteredDataSet.length;
|
|
83
|
+
this.totalPages = Math.ceil(this.totalRec / this.pageOffset);
|
|
84
|
+
if (this.inMemoryPagination === true) {
|
|
85
|
+
this.getRegistrosPage();
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
this.pageDataSet = this.filteredDataSet;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getRegistrosPage() {
|
|
92
|
+
this.start = (this.page - 1) * this.pageOffset;
|
|
93
|
+
console.log('dataset', this.filteredDataSet);
|
|
94
|
+
console.log('start', this.start);
|
|
95
|
+
console.log('offset', this.pageOffset);
|
|
96
|
+
this.pageDataSet = this.filteredDataSet.slice(this.start, (this.start + this.pageOffset));
|
|
97
|
+
console.log('page dataset', this.pageDataSet);
|
|
98
|
+
}
|
|
99
|
+
proximo() {
|
|
100
|
+
if (this.page < this.totalPages) {
|
|
101
|
+
this.page++;
|
|
102
|
+
this.getRegistrosPage();
|
|
103
|
+
this.gerarArrayPags();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
anterior() {
|
|
107
|
+
if (this.page > 1) {
|
|
108
|
+
this.page--;
|
|
109
|
+
this.getRegistrosPage();
|
|
110
|
+
this.gerarArrayPags();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
gerarArrayPags() {
|
|
114
|
+
}
|
|
115
|
+
inicializaGrupo() {
|
|
116
|
+
//inicializar o primeiro grupo 'default'
|
|
117
|
+
this.camposDisplay = this.tabelaCampos.Colunas;
|
|
118
|
+
this.grupos[0].Tabela = this.camposDisplay;
|
|
119
|
+
this.grupos[0].Dados = this.dataSet;
|
|
120
|
+
}
|
|
121
|
+
agrupar(campo) {
|
|
122
|
+
this.groups.push(campo);
|
|
123
|
+
let level = 0;
|
|
124
|
+
for (let g in this.groups) {
|
|
125
|
+
console.log(g);
|
|
126
|
+
//filtrar os dados
|
|
127
|
+
let result = this.dataSet.reduce((group, data) => {
|
|
128
|
+
const { g } = data;
|
|
129
|
+
group[g] = group[campo] ?? [];
|
|
130
|
+
group[g].push(data);
|
|
131
|
+
return group;
|
|
132
|
+
}, {});
|
|
133
|
+
console.log(result);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
filtrarCampos(coluna = '') {
|
|
137
|
+
if (coluna != '') {
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
filtrar(col) {
|
|
143
|
+
//console.log('filtrar', col);
|
|
144
|
+
if (col.Valores && col.Valores.find(v => v.Selecionado) != null) {
|
|
145
|
+
const valores = col.Valores.filter(v => v.Selecionado).map(v => v.Valor);
|
|
146
|
+
//filtrar por valores selecionados
|
|
147
|
+
this.filteredDataSet = this.dataSet.filter(d => valores.indexOf(d[col.Campo]) > -1);
|
|
148
|
+
}
|
|
149
|
+
else if (col.FiltroOperador && col.FiltroValor) {
|
|
150
|
+
//console.log(col.FiltroOperador, col.FiltroValor)
|
|
151
|
+
try {
|
|
152
|
+
this.filteredDataSet = this.dataSet.filter(d => {
|
|
153
|
+
switch (col.FiltroOperador) {
|
|
154
|
+
case "=":
|
|
155
|
+
return d[col.Campo] == col.FiltroValor;
|
|
156
|
+
case ">=":
|
|
157
|
+
if (col.Tipo == 'number') {
|
|
158
|
+
return LibService.stringToDecimal(d[col.Campo], true) >= LibService.stringToDecimal(col.FiltroValor, true);
|
|
159
|
+
}
|
|
160
|
+
else if (col.Tipo == 'data') {
|
|
161
|
+
return new Date(this.dataToString(d[col.Campo])) >= new Date(this.dataToString(col.FiltroValor));
|
|
162
|
+
}
|
|
163
|
+
else
|
|
164
|
+
return d[col.Campo] >= col.FiltroValor;
|
|
165
|
+
case "<=":
|
|
166
|
+
if (col.Tipo == 'number') {
|
|
167
|
+
return LibService.stringToDecimal(d[col.Campo], true) <= LibService.stringToDecimal(col.FiltroValor, true);
|
|
168
|
+
}
|
|
169
|
+
else
|
|
170
|
+
return d[col.Campo] <= col.FiltroValor;
|
|
171
|
+
case "tem":
|
|
172
|
+
return d[col.Campo].toString().toLowerCase().indexOf(col.FiltroValor.toLowerCase()) > -1;
|
|
173
|
+
default:
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (ex) {
|
|
179
|
+
console.log(ex);
|
|
180
|
+
this.filteredDataSet = this.dataSet;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
col.FiltroVisivel = false;
|
|
184
|
+
this.initPage();
|
|
185
|
+
}
|
|
186
|
+
getPage() {
|
|
187
|
+
}
|
|
188
|
+
limpar() {
|
|
189
|
+
this.filteredDataSet = this.dataSet;
|
|
190
|
+
}
|
|
191
|
+
dataToString(data) {
|
|
192
|
+
if (data) {
|
|
193
|
+
return data.split('/').reverse().join('-');
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
return "";
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
ordenar(col) {
|
|
200
|
+
if (col.OrdemStatus == 0 || col.OrdemStatus == -1) {
|
|
201
|
+
if (col.Tipo == 'data') {
|
|
202
|
+
this.filteredDataSet.sort((a, b) => this.dataToString(a[col.Campo]) > this.dataToString(b[col.Campo]) ? 1 : (this.dataToString(a[col.Campo]) < this.dataToString(b[col.Campo]) ? -1 : 0));
|
|
203
|
+
}
|
|
204
|
+
else if (col.Tipo == 'number') {
|
|
205
|
+
this.filteredDataSet.sort((a, b) => LibService.stringToDecimal(a[col.Campo]) > LibService.stringToDecimal(b[col.Campo]) ? 1 : (LibService.stringToDecimal(a[col.Campo]) < LibService.stringToDecimal(b[col.Campo]) ? -1 : 0));
|
|
206
|
+
}
|
|
207
|
+
else
|
|
208
|
+
this.filteredDataSet.sort((a, b) => a[col.Campo] > b[col.Campo] ? 1 : (a[col.Campo] < b[col.Campo] ? -1 : 0));
|
|
209
|
+
col.OrdemStatus = 1; //asc
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
if (col.Tipo == 'data') {
|
|
213
|
+
this.filteredDataSet.sort((a, b) => this.dataToString(a[col.Campo]) < this.dataToString(b[col.Campo]) ? 1 : (this.dataToString(a[col.Campo]) > this.dataToString(b[col.Campo]) ? -1 : 0));
|
|
214
|
+
}
|
|
215
|
+
else if (col.Tipo == 'number') {
|
|
216
|
+
this.filteredDataSet.sort((a, b) => LibService.stringToDecimal(a[col.Campo], true) < LibService.stringToDecimal(b[col.Campo], true) ? 1 : (LibService.stringToDecimal(a[col.Campo], true) > LibService.stringToDecimal(b[col.Campo], true) ? -1 : 0));
|
|
217
|
+
}
|
|
218
|
+
else
|
|
219
|
+
this.filteredDataSet.sort((a, b) => a[col.Campo] < b[col.Campo] ? 1 : (a[col.Campo] > b[col.Campo] ? -1 : 0));
|
|
220
|
+
col.OrdemStatus = -1; //desc
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
setFiltroOpen(col) {
|
|
224
|
+
col.FiltroVisivel = !col.FiltroVisivel;
|
|
225
|
+
if (col.FiltroVisivel) {
|
|
226
|
+
this.selectedColuna = col;
|
|
227
|
+
//console.log(this.selectedColuna);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
selecionarTodos() {
|
|
231
|
+
//this.todosSelecionados = !this.todosSelecionados;
|
|
232
|
+
this.filteredDataSet.forEach(item => {
|
|
233
|
+
item[this.tabelaCampos.CampoSelecionar] = this.todosSelecionados;
|
|
234
|
+
});
|
|
235
|
+
this.selecionarChecked.emit();
|
|
236
|
+
}
|
|
237
|
+
selecionarLinha(item) {
|
|
238
|
+
this.selecionarItem.emit(item);
|
|
239
|
+
this.selectedItem = item;
|
|
240
|
+
}
|
|
241
|
+
excluirLinha(item) {
|
|
242
|
+
this.excluirItem.emit(item);
|
|
243
|
+
}
|
|
244
|
+
//check
|
|
245
|
+
selecionadoChecked() {
|
|
246
|
+
this.selecionarChecked.emit();
|
|
247
|
+
}
|
|
248
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: GridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
249
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: GridViewComponent, selector: "kb-grid-view", inputs: { empresaId: "empresaId", tabelaCampos: "tabelaCampos", dataSet: "dataSet", minHeight: "minHeight", inMemoryPagination: "inMemoryPagination", filteredDataSet: "filteredDataSet", pageOffset: "pageOffset" }, outputs: { selecionarItem: "selecionarItem", excluirItem: "excluirItem", selecionarChecked: "selecionarChecked" }, usesOnChanges: true, ngImport: i0, template: "<div style=\"font-size: 14px;\">\n <div id=\"painelExportacao\">\n <ion-row *ngIf=\"inMemoryPagination\">\n <!--\n <ion-col size=\"2\">\n <ion-button *ngIf=\"tabelaCampos.Selecionar === true\" size=\"small\" fill=\"outline\" color=\"medium\"\n (click)=\"selecionarTodos()\">Selecionar Todos</ion-button>\n </ion-col>\n -->\n <ion-col size=\"3\">\n <ion-button *ngIf=\"inMemoryPagination === true\" size=\"small\" fill=\"outline\" color=\"bluetool\"\n (click)=\"anterior()\">\n <ion-icon name=\"chevron-back-outline\" slot=\"start\"></ion-icon>\n Anterior\n </ion-button>\n <ion-button *ngIf=\"inMemoryPagination === true\" size=\"small\" fill=\"outline\" color=\"bluetool\"\n (click)=\"proximo()\">\n Pr\u00F3ximo\n <ion-icon name=\"chevron-forward-outline\" slot=\"end\"></ion-icon>\n </ion-button> \n </ion-col>\n <ion-col size=\"2\">\n <span style=\"display: block; margin-top: 10px;\" *ngIf=\"inMemoryPagination && totalRec > 0\">Exibindo {{ start + 1 }} - {{ (start + pageOffset) < totalRec ? (start + pageOffset) : totalRec }} total de {{ totalRec }} \n </span> \n </ion-col>\n </ion-row>\n </div>\n <div style=\"width: 100%;\" [style.min-height]=\"minHeight\">\n <table class=\"grid\">\n <thead>\n <tr style=\"background-color: var(--ion-color-bluetool); color: white;\">\n <td *ngIf=\"tabelaCampos.Selecionar === true\" style=\"width: 3%; text-align: center;\">\n <input type=\"checkbox\" [(ngModel)]=\"todosSelecionados\" (change)=\"selecionarTodos()\">\n </td>\n <td *ngFor=\"let col of tabelaCampos.Colunas\" [style.width]=\"col.Tamanho\">\n <div style=\"position: relative;\">\n <div style=\"display: flex; justify-content: space-between; align-items: end;\">\n <strong>{{ col.Titulo }}</strong>\n <div>\n <ion-icon *ngIf=\"col.Ordem\" slot=\"end\" (click)=\"ordenar(col)\" style=\"cursor: pointer;\"\n [name]=\"col.OrdemStatus == 0 ? 'swap-vertical' : (col.OrdemStatus == 1 ? 'arrow-up': 'arrow-down')\"></ion-icon>\n \n <ion-icon *ngIf=\"col.Filtrar\" name=\"funnel\" (click)=\"setFiltroOpen(col)\" slot=\"end\"></ion-icon>\n </div>\n </div>\n \n \n <div class=\"caixaGrande\" [hidden]=\"!col.FiltroVisivel\" tabindex=\"-1\"\n style=\"color: black; display: block; position: absolute; z-index: 800; width: 210px; right: 0px; opacity: 0.9;\">\n Filtrar:\n <div>\n <div style=\"display: flex; justify-content: space-between; align-items: start;\">\n <select style=\"width: 80px;\" [(ngModel)]=\"col.FiltroOperador\">\n <option>=</option>\n <option>>=</option>\n <option><=</option>\n <option>tem</option>\n </select>\n <input style=\"width: 100px;\" type=\"text\" [(ngModel)]=\"col.FiltroValor\">\n </div>\n <ion-button size=\"small\" color=\"medium\" expand=\"block\" (click)=\"filtrar(col)\">Filtrar</ion-button>\n <ion-button size=\"small\" color=\"light\" expand=\"block\" (click)=\"limpar()\">Limpar</ion-button>\n </div>\n <div *ngIf=\"col.Valores\" class=\"scroll-container\" style=\"height: 200px; overflow-y: scroll;\">\n <div *ngFor=\"let valor of col.Valores\">\n <input type=\"checkbox\" [(ngModel)]=\"valor.Selecionado\">\n <span>{{ valor.Valor }}</span>\n </div>\n </div>\n </div>\n \n </div>\n </td>\n <td *ngIf=\"tabelaCampos.Excluir === true\">\n \n </td>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of pageDataSet\" [class]=\"item == selectedItem ? 'item-selecionado' : '' \">\n <td *ngIf=\"tabelaCampos.Selecionar === true\" style=\"text-align: center; cursor: auto;\">\n <input type=\"checkbox\" [(ngModel)]=\"item[tabelaCampos.CampoSelecionar]\" (change)=\"selecionadoChecked()\">\n </td>\n <td class=\"col\" *ngFor=\"let col of tabelaCampos.Colunas\" [style.width]=\"col.Tamanho\"\n [style.text-align]=\"col.Tipo == 'number' ? 'right' : (col.Alinhamento ?? 'left')\"\n (click)=\"col.ClickFunction ? col.ClickFunction(item) : selecionarLinha(item)\">\n <span *ngIf=\"col.Pipe == 'date'\">{{ item[col.Campo] | date: 'dd/MM/yyyy' }}</span> \n <span *ngIf=\"col.Pipe == 'valor'\">{{ item[col.Campo] | valorFormat }}</span>\n <span *ngIf=\"col.RenderFunction\" [innerHtml]=\"col.RenderFunction(item) | safeHtml\"></span>\n <span *ngIf=\"!col.Pipe && !col.RenderFunction\">{{ item[col.Campo] ?? col.Default }}</span>\n </td>\n <td *ngIf=\"tabelaCampos.Excluir === true\" style=\"padding: 0px; text-align: center;\">\n <ion-button size=\"small\" color=\"danger\" fill=\"outline\" style=\"transform: scale(0.85);\" (click)=\"excluirLinha(item)\">\n <ion-icon name=\"trash\"></ion-icon>\n </ion-button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n \n <ion-modal [isOpen]=\"isFiltroOpen\" (didDismiss)=\"isFiltroOpen = false;\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <div class=\"caixaGrande\">\n Filtrar:\n <div *ngIf=\"selectedColuna.Valores\">\n <div *ngFor=\"let valor of selectedColuna.Valores\">\n <span>{{ valor }}</span>\n </div>\n </div>\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n </div>", styles: [".grid{width:100%}.grid thead td{border:1px solid gray;padding:4px;color:#000!important}.grid tbody td{border:1px solid gray;padding:2px 4px}.grid tbody tr{cursor:pointer}.grid tbody tr:hover{background-color:#699ccc80;transition-duration:.5s}.grid tbody tr.item-selecionado{background-color:#699ccc33}[hidden]{display:none!important}\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: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonModal, selector: "ion-modal", inputs: ["animated", "keepContentsMounted", "backdropBreakpoint", "backdropDismiss", "breakpoints", "canDismiss", "cssClass", "enterAnimation", "event", "handle", "handleBehavior", "initialBreakpoint", "isOpen", "keyboardClose", "leaveAnimation", "mode", "presentingElement", "showBackdrop", "translucent", "trigger"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i4.ValorFormatPipe, name: "valorFormat" }, { kind: "pipe", type: i4.SafeHtmlPipe, name: "safeHtml" }] }); }
|
|
250
|
+
}
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: GridViewComponent, decorators: [{
|
|
252
|
+
type: Component,
|
|
253
|
+
args: [{ selector: 'kb-grid-view', template: "<div style=\"font-size: 14px;\">\n <div id=\"painelExportacao\">\n <ion-row *ngIf=\"inMemoryPagination\">\n <!--\n <ion-col size=\"2\">\n <ion-button *ngIf=\"tabelaCampos.Selecionar === true\" size=\"small\" fill=\"outline\" color=\"medium\"\n (click)=\"selecionarTodos()\">Selecionar Todos</ion-button>\n </ion-col>\n -->\n <ion-col size=\"3\">\n <ion-button *ngIf=\"inMemoryPagination === true\" size=\"small\" fill=\"outline\" color=\"bluetool\"\n (click)=\"anterior()\">\n <ion-icon name=\"chevron-back-outline\" slot=\"start\"></ion-icon>\n Anterior\n </ion-button>\n <ion-button *ngIf=\"inMemoryPagination === true\" size=\"small\" fill=\"outline\" color=\"bluetool\"\n (click)=\"proximo()\">\n Pr\u00F3ximo\n <ion-icon name=\"chevron-forward-outline\" slot=\"end\"></ion-icon>\n </ion-button> \n </ion-col>\n <ion-col size=\"2\">\n <span style=\"display: block; margin-top: 10px;\" *ngIf=\"inMemoryPagination && totalRec > 0\">Exibindo {{ start + 1 }} - {{ (start + pageOffset) < totalRec ? (start + pageOffset) : totalRec }} total de {{ totalRec }} \n </span> \n </ion-col>\n </ion-row>\n </div>\n <div style=\"width: 100%;\" [style.min-height]=\"minHeight\">\n <table class=\"grid\">\n <thead>\n <tr style=\"background-color: var(--ion-color-bluetool); color: white;\">\n <td *ngIf=\"tabelaCampos.Selecionar === true\" style=\"width: 3%; text-align: center;\">\n <input type=\"checkbox\" [(ngModel)]=\"todosSelecionados\" (change)=\"selecionarTodos()\">\n </td>\n <td *ngFor=\"let col of tabelaCampos.Colunas\" [style.width]=\"col.Tamanho\">\n <div style=\"position: relative;\">\n <div style=\"display: flex; justify-content: space-between; align-items: end;\">\n <strong>{{ col.Titulo }}</strong>\n <div>\n <ion-icon *ngIf=\"col.Ordem\" slot=\"end\" (click)=\"ordenar(col)\" style=\"cursor: pointer;\"\n [name]=\"col.OrdemStatus == 0 ? 'swap-vertical' : (col.OrdemStatus == 1 ? 'arrow-up': 'arrow-down')\"></ion-icon>\n \n <ion-icon *ngIf=\"col.Filtrar\" name=\"funnel\" (click)=\"setFiltroOpen(col)\" slot=\"end\"></ion-icon>\n </div>\n </div>\n \n \n <div class=\"caixaGrande\" [hidden]=\"!col.FiltroVisivel\" tabindex=\"-1\"\n style=\"color: black; display: block; position: absolute; z-index: 800; width: 210px; right: 0px; opacity: 0.9;\">\n Filtrar:\n <div>\n <div style=\"display: flex; justify-content: space-between; align-items: start;\">\n <select style=\"width: 80px;\" [(ngModel)]=\"col.FiltroOperador\">\n <option>=</option>\n <option>>=</option>\n <option><=</option>\n <option>tem</option>\n </select>\n <input style=\"width: 100px;\" type=\"text\" [(ngModel)]=\"col.FiltroValor\">\n </div>\n <ion-button size=\"small\" color=\"medium\" expand=\"block\" (click)=\"filtrar(col)\">Filtrar</ion-button>\n <ion-button size=\"small\" color=\"light\" expand=\"block\" (click)=\"limpar()\">Limpar</ion-button>\n </div>\n <div *ngIf=\"col.Valores\" class=\"scroll-container\" style=\"height: 200px; overflow-y: scroll;\">\n <div *ngFor=\"let valor of col.Valores\">\n <input type=\"checkbox\" [(ngModel)]=\"valor.Selecionado\">\n <span>{{ valor.Valor }}</span>\n </div>\n </div>\n </div>\n \n </div>\n </td>\n <td *ngIf=\"tabelaCampos.Excluir === true\">\n \n </td>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of pageDataSet\" [class]=\"item == selectedItem ? 'item-selecionado' : '' \">\n <td *ngIf=\"tabelaCampos.Selecionar === true\" style=\"text-align: center; cursor: auto;\">\n <input type=\"checkbox\" [(ngModel)]=\"item[tabelaCampos.CampoSelecionar]\" (change)=\"selecionadoChecked()\">\n </td>\n <td class=\"col\" *ngFor=\"let col of tabelaCampos.Colunas\" [style.width]=\"col.Tamanho\"\n [style.text-align]=\"col.Tipo == 'number' ? 'right' : (col.Alinhamento ?? 'left')\"\n (click)=\"col.ClickFunction ? col.ClickFunction(item) : selecionarLinha(item)\">\n <span *ngIf=\"col.Pipe == 'date'\">{{ item[col.Campo] | date: 'dd/MM/yyyy' }}</span> \n <span *ngIf=\"col.Pipe == 'valor'\">{{ item[col.Campo] | valorFormat }}</span>\n <span *ngIf=\"col.RenderFunction\" [innerHtml]=\"col.RenderFunction(item) | safeHtml\"></span>\n <span *ngIf=\"!col.Pipe && !col.RenderFunction\">{{ item[col.Campo] ?? col.Default }}</span>\n </td>\n <td *ngIf=\"tabelaCampos.Excluir === true\" style=\"padding: 0px; text-align: center;\">\n <ion-button size=\"small\" color=\"danger\" fill=\"outline\" style=\"transform: scale(0.85);\" (click)=\"excluirLinha(item)\">\n <ion-icon name=\"trash\"></ion-icon>\n </ion-button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n \n <ion-modal [isOpen]=\"isFiltroOpen\" (didDismiss)=\"isFiltroOpen = false;\">\n <ng-template>\n <ion-content class=\"ion-padding\">\n <div class=\"caixaGrande\">\n Filtrar:\n <div *ngIf=\"selectedColuna.Valores\">\n <div *ngFor=\"let valor of selectedColuna.Valores\">\n <span>{{ valor }}</span>\n </div>\n </div>\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n </div>", styles: [".grid{width:100%}.grid thead td{border:1px solid gray;padding:4px;color:#000!important}.grid tbody td{border:1px solid gray;padding:2px 4px}.grid tbody tr{cursor:pointer}.grid tbody tr:hover{background-color:#699ccc80;transition-duration:.5s}.grid tbody tr.item-selecionado{background-color:#699ccc33}[hidden]{display:none!important}\n"] }]
|
|
254
|
+
}], ctorParameters: () => [], propDecorators: { empresaId: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], tabelaCampos: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], dataSet: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], minHeight: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}], inMemoryPagination: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], selecionarItem: [{
|
|
265
|
+
type: Output
|
|
266
|
+
}], excluirItem: [{
|
|
267
|
+
type: Output
|
|
268
|
+
}], selecionarChecked: [{
|
|
269
|
+
type: Output
|
|
270
|
+
}], filteredDataSet: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], pageOffset: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}] } });
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcHByb2plY3QtY29tcG9uZW50cy9zcmMvbGliL2dyaWQtdmlldy9ncmlkLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvZ3JpZC12aWV3L2dyaWQtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBT3BFLE1BQU0sT0FBTyxpQkFBaUI7SUFnRTVCO1FBNURTLGNBQVMsR0FBVyxPQUFPLENBQUM7UUFDNUIsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBRW5DLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdqRCwyREFBMkQ7UUFDM0QsV0FBTSxHQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0RSxtQkFBbUI7UUFDbkIsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2Ysd01BQXdNO1FBQ3hNLDZNQUE2TTtRQUM3TSxxTkFBcU47UUFDck4seU1BQXlNO1FBQ3pNLDhNQUE4TTtRQUM5TSxNQUFNO1FBQ04sSUFBSTtRQUVKLDBCQUEwQjtRQUMxQiwyRkFBMkY7UUFDM0YsOEZB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QyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9OOztnQkFDQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEgsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLO1NBQzNCO2FBQU07WUFDTCxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO2dCQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNMO2lCQUFNLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZQOztnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUcsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07U0FDN0I7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVE7UUFDcEIsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUE7UUFDdEMsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQzFCLG1DQUFtQztTQUNwQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsbURBQW1EO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO0lBQ1Asa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzhHQTFSVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixrWkNSOUIsK2tNQW1IUTs7MkZEM0dLLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxjQUFjO3dEQUtmLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkE2QkUsZUFBZTtzQkFBdkIsS0FBSztnQkFnQkcsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZENvbHVuYSwgR3JpZFRhYmVsYSwgTGliU2VydmljZSB9IGZyb20gJ2FwcHByb2plY3QtbGliJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna2ItZ3JpZC12aWV3JywgICAgXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ3JpZC12aWV3LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBHcmlkVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZW1wcmVzYUlkOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRhYmVsYUNhbXBvczogR3JpZFRhYmVsYTtcbiAgQElucHV0KCkgZGF0YVNldDogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgbWluSGVpZ2h0OiBzdHJpbmcgPSAnNDAwcHgnO1xuICBASW5wdXQoKSBpbk1lbW9yeVBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgc2VsZWNpb25hckl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBleGNsdWlySXRlbSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNlbGVjaW9uYXJDaGVja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHNlbGVjdGVkSXRlbTogYW55O1xuICAvL2lucHV0cyA9IGluamVjdChuZXcgSW5qZWN0aW9uVG9rZW48YW55PigndGl0bGUgaW5wdXRzJykpO1xuICBncnVwb3M6IGFueVtdID0gW3sgQ29sdW5hOiAnJywgVGFiZWxhOiBudWxsLCBEYWRvczogbnVsbCwgTml2ZWw6IDAgfV07XG5cbiAgLy8gdGFiZWxhQ2FtcG9zID0ge1xuICAvLyAgIFNlbGVjaW9uYXI6IGZhbHNlLFxuICAvLyAgIEV4cG9ydGFyOiB0cnVlLFxuICAvLyAgIENvbHVuYXM6IFtcbiAgLy8gICAgIHsgQ2FtcG86ICdJZCcsIFRpdHVsbzogJ0lkJywgVGFtYW5obzogJzEwJScsIE9yZGVtOiB0cnVlLCBHcnVwbzogZmFsc2UsIEZpbHRyYXI6IHRydWUsIE9yZGVtU3RhdHVzOiAwLCBUaXBvOiAnbnVtYmVyJywgVmFsb3JlczogW10sIEZpbHRyb09wZXJhZG9yOiAnPScsIEZpbHRyb1ZhbG9yOiAnJywgRmlsdHJvVmlzaXZlbDogZmFsc2UgfSxcbiAgLy8gICAgIHsgQ2FtcG86ICdNYXJjYScsIFRpdHVsbzogJ01hcmNhJywgVGFtYW5obzogJzI1JScsIE9yZGVtOiB0cnVlLCBHcnVwbzogdHJ1ZSwgRmlsdHJhcjogdHJ1ZSwgT3JkZW1TdGF0dXM6IDAsIFRpcG86ICdzdHJpbmcnLCBWYWxvcmVzOiBbXSwgRmlsdHJvT3BlcmFkb3I6ICc9JywgRmlsdHJvVmFsb3I6ICcnLCBGaWx0cm9WaXNpdmVsOiBmYWxzZSB9LFxuICAvLyAgICAgeyBDYW1wbzogJ0Rlc2NyaWNhbycsIFRpdHVsbzogJ0Rlc2NyacOnw6NvJywgVGFtYW5obzogJzI1JScsIE9yZGVtOiB0cnVlLCBHcnVwbzogdHJ1ZSwgRmlsdHJhcjogdHJ1ZSwgT3JkZW1TdGF0dXM6IDAsIFRpcG86ICdzdHJpbmcnLCBWYWxvcmVzOiBbXSwgRmlsdHJvT3BlcmFkb3I6ICc9JywgRmlsdHJvVmFsb3I6ICcnLCBGaWx0cm9WaXNpdmVsOiBmYWxzZSB9LFxuICAvLyAgICAgeyBDYW1wbzogJ0RhdGEnLCBUaXR1bG86ICdEYXRhJywgVGFtYW5obzogJzIwJScsIE9yZGVtOiB0cnVlLCBHcnVwbzogdHJ1ZSwgRmlsdHJhcjogdHJ1ZSwgT3JkZW1TdGF0dXM6IDAsIFRpcG86ICdkYXRlJywgVmFsb3JlczogW10sIEZpbHRyb09wZXJhZG9yOiAnPScsIEZpbHRyb1ZhbG9yOiAnJywgRmlsdHJvVmlzaXZlbDogZmFsc2UgfSxcbiAgLy8gICAgIHsgQ2FtcG86ICdWYWxvcicsIFRpdHVsbzogJ1ZhbG9yJywgVGFtYW5obzogJzIwJScsIE9yZGVtOiB0cnVlLCBHcnVwbzogZmFsc2UsIEZpbHRyYXI6IHRydWUsIE9yZGVtU3RhdHVzOiAwLCBUaXBvOiAnbnVtYmVyJywgVmFsb3JlczogW10sIEZpbHRyb09wZXJhZG9yOiAnPScsIEZpbHRyb1ZhbG9yOiAnJywgRmlsdHJvVmlzaXZlbDogZmFsc2UgfSxcbiAgLy8gICBdXG4gIC8vIH1cblxuICAvLyBkYXRhU2V0OiBBcnJheTxhbnk+ID0gW1xuICAvLyAgIHsgSWQ6IDEsIE1hcmNhOiAnQXBwbGUnLCBEZXNjcmljYW86ICdJUGhvbmUgMTQnLCBEYXRhOiAnMjAyMy0wNS0wMScsIFZhbG9yOiA3ODk5Ljk5IH0sXG4gIC8vICAgeyBJZDogMiwgTWFyY2E6ICdBcHBsZScsIERlc2NyaWNhbzogJ01hY0Jvb2sgUHJvJywgRGF0YTogJzIwMjMtMDYtMDEnLCBWYWxvcjogMTc5OTkuOTkgfSxcbiAgLy8gICB7IElkOiAzLCBNYXJjYTogJ1NhbXN1bmcnLCBEZXNjcmljYW86ICdHYWxheHkgUzIzJywgRGF0YTogJzIwMjMtMDUtMDEnLCBWYWxvcjogNjg5OS45OSB9LFxuICAvLyAgIHsgSWQ6IDQsIE1hcmNhOiAnU29ueScsIERlc2NyaWNhbzogJ1BTIDUnLCBEYXRhOiAnMjAyMy0wNi0wMScsIFZhbG9yOiA0ODk5Ljk5IH0sXG4gIC8vICAgeyBJZDogNSwgTWFyY2E6ICdTYW1zdW5nJywgRGVzY3JpY2FvOiAnV2F0Y2ggMjMnLCBEYXRhOiAnMjAyMy0wNS0wMScsIFZhbG9yOiAxODk5Ljk5IH0sXG4gIC8vIF1cblxuXG5cbiAgZ3JvdXBzID0gW11cbiAgQElucHV0KCkgZmlsdGVyZWREYXRhU2V0ID0gW107XG4gIHBhZ2VEYXRhU2V0ID0gW107XG5cblxuICAvL2FycmF5IGNvbSBvcyBjYW1wb3MgZmlsdHJhZG9zIHBhcmEgZGlzcGxheVxuICBjYW1wb3NEaXNwbGF5ID0gW107XG5cbiAgLy9maWx0cm9cbiAgaXNGaWx0cm9PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkQ29sdW5hOiBhbnk7XG4gIHRvZG9zU2VsZWNpb25hZG9zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9wYWdpbmF0aW9uXG4gIC8vcMOhZ2luYSBhdHVhbFxuICBwYWdlOiBudW1iZXIgPSAxO1xuICAvL3JlZ2lzdHJvcyBwb3IgcMOhZ2luYVxuICBASW5wdXQoKSBwYWdlT2Zmc2V0OiBudW1iZXIgPSAyMDtcbiAgLy90b3RhbCBkZSByZWdpc3Ryb3NcbiAgdG90YWxSZWM6IG51bWJlcjtcbiAgLy90b3RhbCBkZSBww6FnaW5hc1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIC8vaW5kZXhhZG9yIGRlIHBhZ2luYXNcbiAgcGFnZXM6IG51bWJlcltdOyAgXG4gIHN0YXJ0OiBudW1iZXI7XG5cblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIHZhbG9yZXNGaWx0cm8oKSB7XG4gICAgdGhpcy50YWJlbGFDYW1wb3MuQ29sdW5hcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgaWYgKGMuRmlsdHJhcikge1xuICAgICAgICAvL3Byb2pldGFyIGEgY29sdW5hXG4gICAgICAgIGxldCBpbml0aWFsID0gW107XG4gICAgICAgIGxldCB2YWxvcmVzID0gdGhpcy5kYXRhU2V0Lm1hcChkID0+IGRbYy5DYW1wb10pO1xuICAgICAgICBjLlZhbG9yZXMgPSB2YWxvcmVzLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuICAgICAgICB9KS5tYXAodiA9PiB7IHJldHVybiB7IFNlbGVjaW9uYWRvOiBmYWxzZSwgVmFsb3I6IHYgfSB9KTtcbiAgICAgIC8vICAgY29uc29sZS5sb2coYy5DYW1wbywgdmFsb3Jlcyk7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKGMuVmFsb3JlcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cblxuICAgIC8vdGhpcy5pbmljaWFsaXphR3J1cG8oKTtcbiAgICAvL3RoaXMuYWdydXBhcignTWFyY2EnKTtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnB1dHMnLCB0aGlzLmlucHV0cyk7XG4gICAgLy9jb25zb2xlLmxvZygnSW5wdXQgZW1wcmVzYScsIHRoaXMuZW1wcmVzYUlkKTtcbiAgICBHcmlkVGFiZWxhLmluaXQodGhpcy50YWJlbGFDYW1wb3MpO1xuICAgIHRoaXMudmFsb3Jlc0ZpbHRybygpO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhU2V0ID0gdGhpcy5kYXRhU2V0O1xuICAgIGNvbnNvbGUubG9nKCdJbml0IFRhYmVsYSBjYW1wb3MnLCB0aGlzLnRhYmVsYUNhbXBvcyk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc29sZS5sb2coJ09uIGNoYW5nZXMgVGFiZWxhIGNhbXBvcycsIHRoaXMudGFiZWxhQ2FtcG9zKTtcbiAgICAvL2V2ZW50byBjaGFtYWRvIHF1YW5kbyBvIGRhdGFzZXQgZm9yIGF0dWFsaXphZG9cbiAgICAvL2luaWNpYWxpemFyIHZhcnMgZGUgcGFnaW5hw6fDo29cbiAgICB0aGlzLmluaXRQYWdlKCk7XG4gICAgdGhpcy50b2Rvc1NlbGVjaW9uYWRvcyA9IGZhbHNlO1xuICB9XG5cbiAgaW5pdFBhZ2UoKSB7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLnRvdGFsUmVjID0gdGhpcy5maWx0ZXJlZERhdGFTZXQubGVuZ3RoO1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjIC8gdGhpcy5wYWdlT2Zmc2V0KTsgICAgXG5cbiAgICBpZiAodGhpcy5pbk1lbW9yeVBhZ2luYXRpb24gPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZ2V0UmVnaXN0cm9zUGFnZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VEYXRhU2V0ID0gdGhpcy5maWx0ZXJlZERhdGFTZXQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVnaXN0cm9zUGFnZSgpIHtcbiAgICB0aGlzLnN0YXJ0ID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5wYWdlT2Zmc2V0O1xuICAgIGNvbnNvbGUubG9nKCdkYXRhc2V0JywgdGhpcy5maWx0ZXJlZERhdGFTZXQpO1xuICAgIGNvbnNvbGUubG9nKCdzdGFydCcsIHRoaXMuc3RhcnQpO1xuICAgIGNvbnNvbGUubG9nKCdvZmZzZXQnLCB0aGlzLnBhZ2VPZmZzZXQpO1xuICAgIHRoaXMucGFnZURhdGFTZXQgPSB0aGlzLmZpbHRlcmVkRGF0YVNldC5zbGljZSh0aGlzLnN0YXJ0LCAodGhpcy5zdGFydCArIHRoaXMucGFnZU9mZnNldCkpO1xuICAgIGNvbnNvbGUubG9nKCdwYWdlIGRhdGFzZXQnLCB0aGlzLnBhZ2VEYXRhU2V0KTtcbiAgfVxuXG4gIHByb3hpbW8oKSB7XG4gICAgaWYgKHRoaXMucGFnZSA8IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgdGhpcy5wYWdlKys7XG4gICAgICB0aGlzLmdldFJlZ2lzdHJvc1BhZ2UoKTtcbiAgICAgIHRoaXMuZ2VyYXJBcnJheVBhZ3MoKTtcbiAgICB9XG4gIH1cblxuICBhbnRlcmlvcigpIHtcbiAgICBpZiAodGhpcy5wYWdlID4gMSkge1xuICAgICAgdGhpcy5wYWdlLS07XG4gICAgICB0aGlzLmdldFJlZ2lzdHJvc1BhZ2UoKTtcbiAgICAgIHRoaXMuZ2VyYXJBcnJheVBhZ3MoKTtcbiAgICB9XG4gIH1cblxuICBnZXJhckFycmF5UGFncygpIHtcblxuICB9XG5cbiAgaW5pY2lhbGl6YUdydXBvKCkge1xuICAgIC8vaW5pY2lhbGl6YXIgbyBwcmltZWlybyBncnVwbyAnZGVmYXVsdCdcbiAgICB0aGlzLmNhbXBvc0Rpc3BsYXkgPSB0aGlzLnRhYmVsYUNhbXBvcy5Db2x1bmFzO1xuICAgIHRoaXMuZ3J1cG9zWzBdLlRhYmVsYSA9IHRoaXMuY2FtcG9zRGlzcGxheTtcbiAgICB0aGlzLmdydXBvc1swXS5EYWRvcyA9IHRoaXMuZGF0YVNldDtcbiAgfVxuXG4gIGFncnVwYXIoY2FtcG86IHN0cmluZykge1xuICAgIHRoaXMuZ3JvdXBzLnB1c2goY2FtcG8pO1xuICAgIGxldCBsZXZlbCA9IDA7XG4gICAgZm9yIChsZXQgZyBpbiB0aGlzLmdyb3Vwcykge1xuICAgICAgY29uc29sZS5sb2coZyk7XG4gICAgICAvL2ZpbHRyYXIgb3MgZGFkb3NcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmRhdGFTZXQucmVkdWNlKChncm91cCwgZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCB7IGcgfSA9IGRhdGE7XG4gICAgICAgIGdyb3VwW2ddID0gZ3JvdXBbY2FtcG9dID8/IFtdO1xuICAgICAgICBncm91cFtnXS5wdXNoKGRhdGEpO1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9LCB7fSk7XG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgIH1cblxuICB9XG5cbiAgZmlsdHJhckNhbXBvcyhjb2x1bmEgPSAnJykge1xuICAgIGlmIChjb2x1bmEgIT0gJycpIHtcblxuICAgIH0gZWxzZSB7XG5cbiAgICB9XG4gIH1cblxuICBmaWx0cmFyKGNvbDogR3JpZENvbHVuYSkge1xuICAgIC8vY29uc29sZS5sb2coJ2ZpbHRyYXInLCBjb2wpO1xuICAgIGlmIChjb2wuVmFsb3JlcyAmJiBjb2wuVmFsb3Jlcy5maW5kKHYgPT4gdi5TZWxlY2lvbmFkbykgIT0gbnVsbCkge1xuICAgICAgY29uc3QgdmFsb3JlcyA9IGNvbC5WYWxvcmVzLmZpbHRlcih2ID0+IHYuU2VsZWNpb25hZG8pLm1hcCh2ID0+IHYuVmFsb3IpO1xuXG4gICAgICAvL2ZpbHRyYXIgcG9yIHZhbG9yZXMgc2VsZWNpb25hZG9zXG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YVNldCA9IHRoaXMuZGF0YVNldC5maWx0ZXIoZCA9PiB2YWxvcmVzLmluZGV4T2YoZFtjb2wuQ2FtcG9dKSA+IC0xKTtcbiAgICB9IGVsc2UgaWYgKGNvbC5GaWx0cm9PcGVyYWRvciAmJiBjb2wuRmlsdHJvVmFsb3IpIHtcbiAgICAgIC8vY29uc29sZS5sb2coY29sLkZpbHRyb09wZXJhZG9yLCBjb2wuRmlsdHJvVmFsb3IpXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YVNldCA9IHRoaXMuZGF0YVNldC5maWx0ZXIoZCA9PiB7XG4gICAgICAgICAgc3dpdGNoIChjb2wuRmlsdHJvT3BlcmFkb3IpIHtcbiAgICAgICAgICAgIGNhc2UgXCI9XCI6XG4gICAgICAgICAgICAgIHJldHVybiBkW2NvbC5DYW1wb10gPT0gY29sLkZpbHRyb1ZhbG9yO1xuICAgICAgICAgICAgY2FzZSBcIj49XCI6XG4gICAgICAgICAgICAgIGlmIChjb2wuVGlwbyA9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBMaWJTZXJ2aWNlLnN0cmluZ1RvRGVjaW1hbChkW2NvbC5DYW1wb10sIHRydWUpID49IExpYlNlcnZpY2Uuc3RyaW5nVG9EZWNpbWFsKGNvbC5GaWx0cm9WYWxvciwgdHJ1ZSk7ICBcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2wuVGlwbyA9PSAnZGF0YScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy5kYXRhVG9TdHJpbmcoZFtjb2wuQ2FtcG9dKSkgPj0gbmV3IERhdGUodGhpcy5kYXRhVG9TdHJpbmcoY29sLkZpbHRyb1ZhbG9yKSk7ICBcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIHJldHVybiBkW2NvbC5DYW1wb10gPj0gY29sLkZpbHRyb1ZhbG9yO1xuICAgICAgICAgICAgY2FzZSBcIjw9XCI6XG4gICAgICAgICAgICAgIGlmIChjb2wuVGlwbyA9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBMaWJTZXJ2aWNlLnN0cmluZ1RvRGVjaW1hbChkW2NvbC5DYW1wb10sIHRydWUpIDw9IExpYlNlcnZpY2Uuc3RyaW5nVG9EZWNpbWFsKGNvbC5GaWx0cm9WYWxvciwgdHJ1ZSk7ICBcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIHJldHVybiBkW2NvbC5DYW1wb10gPD0gY29sLkZpbHRyb1ZhbG9yO1xuICAgICAgICAgICAgY2FzZSBcInRlbVwiOlxuICAgICAgICAgICAgICByZXR1cm4gZFtjb2wuQ2FtcG9dLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNvbC5GaWx0cm9WYWxvci50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChleCkge1xuICAgICAgICBjb25zb2xlLmxvZyhleCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhU2V0ID0gdGhpcy5kYXRhU2V0O1xuICAgICAgfVxuICAgIH1cbiAgICBjb2wuRmlsdHJvVmlzaXZlbCA9IGZhbHNlO1xuXG4gICAgdGhpcy5pbml0UGFnZSgpO1xuICB9XG5cbiAgZ2V0UGFnZSgpIHtcblxuICB9XG5cbiAgbGltcGFyKCkge1xuICAgIHRoaXMuZmlsdGVyZWREYXRhU2V0ID0gdGhpcy5kYXRhU2V0O1xuICB9XG5cbiAgZGF0YVRvU3RyaW5nKGRhdGE6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHJldHVybiBkYXRhLnNwbGl0KCcvJykucmV2ZXJzZSgpLmpvaW4oJy0nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgb3JkZW5hcihjb2w6IEdyaWRDb2x1bmEpIHtcbiAgICBpZiAoY29sLk9yZGVtU3RhdHVzID09IDAgfHwgY29sLk9yZGVtU3RhdHVzID09IC0xKSB7XG4gICAgICBpZiAoY29sLlRpcG8gPT0gJ2RhdGEnKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhU2V0LnNvcnQoKGEsIGIpID0+IHRoaXMuZGF0YVRvU3RyaW5nKGFbY29sLkNhbXBvXSkgPiB0aGlzLmRhdGFUb1N0cmluZyhiW2NvbC5DYW1wb10pID8gMSA6ICh0aGlzLmRhdGFUb1N0cmluZyhhW2NvbC5DYW1wb10pIDwgdGhpcy5kYXRhVG9TdHJpbmcoYltjb2wuQ2FtcG9dKSA/IC0xIDogMCkpO1xuICAgICAgfSBlbHNlIGlmIChjb2wuVGlwbyA9PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YVNldC5zb3J0KChhLCBiKSA9PiBMaWJTZXJ2aWNlLnN0cmluZ1RvRGVjaW1hbChhW2NvbC5DYW1wb10pID4gTGliU2VydmljZS5zdHJpbmdUb0RlY2ltYWwoYltjb2wuQ2FtcG9dKSA/IDEgOiAoTGliU2VydmljZS5zdHJpbmdUb0RlY2ltYWwoYVtjb2wuQ2FtcG9dKSA8IExpYlNlcnZpY2Uuc3RyaW5nVG9EZWNpbWFsKGJbY29sLkNhbXBvXSkgPyAtMSA6IDApKTtcbiAgICAgIH0gZWxzZSBcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGFTZXQuc29ydCgoYSwgYikgPT4gYVtjb2wuQ2FtcG9dID4gYltjb2wuQ2FtcG9dID8gMSA6IChhW2NvbC5DYW1wb10gPCBiW2NvbC5DYW1wb10gPyAtMSA6IDApKTtcbiAgICAgIGNvbC5PcmRlbVN0YXR1cyA9IDE7IC8vYXNjXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2wuVGlwbyA9PSAnZGF0YScpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGFTZXQuc29ydCgoYSwgYikgPT4gdGhpcy5kYXRhVG9TdHJpbmcoYVtjb2wuQ2FtcG9dKSA8IHRoaXMuZGF0YVRvU3RyaW5nKGJbY29sLkNhbXBvXSkgPyAxIDogKHRoaXMuZGF0YVRvU3RyaW5nKGFbY29sLkNhbXBvXSkgPiB0aGlzLmRhdGFUb1N0cmluZyhiW2NvbC5DYW1wb10pID8gLTEgOiAwKSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbC5UaXBvID09ICdudW1iZXInKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhU2V0LnNvcnQoKGEsIGIpID0+IExpYlNlcnZpY2Uuc3RyaW5nVG9EZWNpbWFsKGFbY29sLkNhbXBvXSwgdHJ1ZSkgPCBMaWJTZXJ2aWNlLnN0cmluZ1RvRGVjaW1hbChiW2NvbC5DYW1wb10sIHRydWUpID8gMSA6IChMaWJTZXJ2aWNlLnN0cmluZ1RvRGVjaW1hbChhW2NvbC5DYW1wb10sIHRydWUpID4gTGliU2VydmljZS5zdHJpbmdUb0RlY2ltYWwoYltjb2wuQ2FtcG9dLCB0cnVlKSA/IC0xIDogMCkpO1xuICAgICAgfSBlbHNlIFxuICAgICAgdGhpcy5maWx0ZXJlZERhdGFTZXQuc29ydCgoYSwgYikgPT4gYVtjb2wuQ2FtcG9dIDwgYltjb2wuQ2FtcG9dID8gMSA6IChhW2NvbC5DYW1wb10gPiBiW2NvbC5DYW1wb10gPyAtMSA6IDApKTtcbiAgICAgIGNvbC5PcmRlbVN0YXR1cyA9IC0xOyAvL2Rlc2NcbiAgICB9XG4gIH1cblxuICBzZXRGaWx0cm9PcGVuKGNvbDogYW55KSB7XG4gICAgY29sLkZpbHRyb1Zpc2l2ZWwgPSAhY29sLkZpbHRyb1Zpc2l2ZWxcbiAgICBpZiAoY29sLkZpbHRyb1Zpc2l2ZWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bmEgPSBjb2w7XG4gICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRDb2x1bmEpO1xuICAgIH0gICAgXG4gIH1cblxuICBzZWxlY2lvbmFyVG9kb3MoKSB7XG4gICAgLy90aGlzLnRvZG9zU2VsZWNpb25hZG9zID0gIXRoaXMudG9kb3NTZWxlY2lvbmFkb3M7XG4gICAgdGhpcy5maWx0ZXJlZERhdGFTZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGl0ZW1bdGhpcy50YWJlbGFDYW1wb3MuQ2FtcG9TZWxlY2lvbmFyXSA9IHRoaXMudG9kb3NTZWxlY2lvbmFkb3M7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY2lvbmFyQ2hlY2tlZC5lbWl0KCk7XG4gIH1cblxuICBzZWxlY2lvbmFyTGluaGEoaXRlbTogYW55KSB7XG4gICAgdGhpcy5zZWxlY2lvbmFySXRlbS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTtcbiAgfVxuXG4gIGV4Y2x1aXJMaW5oYShpdGVtOiBhbnkpIHtcbiAgICB0aGlzLmV4Y2x1aXJJdGVtLmVtaXQoaXRlbSk7XG4gIH1cblxuICAvL2NoZWNrXG4gIHNlbGVjaW9uYWRvQ2hlY2tlZCgpIHtcbiAgICB0aGlzLnNlbGVjaW9uYXJDaGVja2VkLmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDtcIj5cbiAgICA8ZGl2IGlkPVwicGFpbmVsRXhwb3J0YWNhb1wiPlxuICAgICAgPGlvbi1yb3cgKm5nSWY9XCJpbk1lbW9yeVBhZ2luYXRpb25cIj5cbiAgICAgICAgPCEtLVxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMlwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwidGFiZWxhQ2FtcG9zLlNlbGVjaW9uYXIgPT09IHRydWVcIiBzaXplPVwic21hbGxcIiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwibWVkaXVtXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY2lvbmFyVG9kb3MoKVwiPlNlbGVjaW9uYXIgVG9kb3M8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgLS0+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIzXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJpbk1lbW9yeVBhZ2luYXRpb24gPT09IHRydWVcIiBzaXplPVwic21hbGxcIiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiYmx1ZXRvb2xcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFudGVyaW9yKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgQW50ZXJpb3JcbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJpbk1lbW9yeVBhZ2luYXRpb24gPT09IHRydWVcIiBzaXplPVwic21hbGxcIiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiYmx1ZXRvb2xcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInByb3hpbW8oKVwiPlxuICAgICAgICAgICAgUHLDs3hpbW9cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkLW91dGxpbmVcIiBzbG90PVwiZW5kXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+ICAgICAgICAgICAgICAgIFxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIyXCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJkaXNwbGF5OiBibG9jazsgbWFyZ2luLXRvcDogMTBweDtcIiAqbmdJZj1cImluTWVtb3J5UGFnaW5hdGlvbiAmJiB0b3RhbFJlYyA+IDBcIj5FeGliaW5kbyB7eyBzdGFydCArIDEgfX0gLSB7eyAoc3RhcnQgKyBwYWdlT2Zmc2V0KSA8IHRvdGFsUmVjID8gKHN0YXJ0ICsgcGFnZU9mZnNldCkgOiB0b3RhbFJlYyB9fSB0b3RhbCBkZSB7eyB0b3RhbFJlYyB9fSAgICAgICAgXG4gICAgICAgICAgPC9zcGFuPiAgICAgIFxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW9uLWNvbG9yLWJsdWV0b29sKTsgY29sb3I6IHdoaXRlO1wiPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwidGFiZWxhQ2FtcG9zLlNlbGVjaW9uYXIgPT09IHRydWVcIiBzdHlsZT1cIndpZHRoOiAzJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJ0b2Rvc1NlbGVjaW9uYWRvc1wiIChjaGFuZ2UpPVwic2VsZWNpb25hclRvZG9zKClcIj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiB0YWJlbGFDYW1wb3MuQ29sdW5hc1wiIFtzdHlsZS53aWR0aF09XCJjb2wuVGFtYW5ob1wiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBlbmQ7XCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGNvbC5UaXR1bG8gfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cImNvbC5PcmRlbVwiIHNsb3Q9XCJlbmRcIiAoY2xpY2spPVwib3JkZW5hcihjb2wpXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJjb2wuT3JkZW1TdGF0dXMgPT0gMCA/ICdzd2FwLXZlcnRpY2FsJyA6IChjb2wuT3JkZW1TdGF0dXMgPT0gMSA/ICdhcnJvdy11cCc6ICdhcnJvdy1kb3duJylcIj48L2lvbi1pY29uPlxuICBcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uICpuZ0lmPVwiY29sLkZpbHRyYXJcIiBuYW1lPVwiZnVubmVsXCIgKGNsaWNrKT1cInNldEZpbHRyb09wZW4oY29sKVwiIHNsb3Q9XCJlbmRcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gIFxuICBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FpeGFHcmFuZGVcIiBbaGlkZGVuXT1cIiFjb2wuRmlsdHJvVmlzaXZlbFwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogYmxhY2s7IGRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDgwMDsgd2lkdGg6IDIxMHB4OyByaWdodDogMHB4OyBvcGFjaXR5OiAwLjk7XCI+XG4gICAgICAgICAgICAgICAgICBGaWx0cmFyOlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IHN0YXJ0O1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9XCJ3aWR0aDogODBweDtcIiBbKG5nTW9kZWwpXT1cImNvbC5GaWx0cm9PcGVyYWRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj49PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPiZndDs9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPiZsdDs9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPnRlbTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiY29sLkZpbHRyb1ZhbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaXplPVwic21hbGxcIiBjb2xvcj1cIm1lZGl1bVwiIGV4cGFuZD1cImJsb2NrXCIgKGNsaWNrKT1cImZpbHRyYXIoY29sKVwiPkZpbHRyYXI8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwibGlnaHRcIiBleHBhbmQ9XCJibG9ja1wiIChjbGljayk9XCJsaW1wYXIoKVwiPkxpbXBhcjwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5WYWxvcmVzXCIgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCIgc3R5bGU9XCJoZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdy15OiBzY3JvbGw7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbG9yIG9mIGNvbC5WYWxvcmVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwidmFsb3IuU2VsZWNpb25hZG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWxvci5WYWxvciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRhYmVsYUNhbXBvcy5FeGNsdWlyID09PSB0cnVlXCI+XG4gIFxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2VEYXRhU2V0XCIgW2NsYXNzXT1cIml0ZW0gPT0gc2VsZWN0ZWRJdGVtID8gJ2l0ZW0tc2VsZWNpb25hZG8nIDogJycgXCI+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJ0YWJlbGFDYW1wb3MuU2VsZWNpb25hciA9PT0gdHJ1ZVwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBjdXJzb3I6IGF1dG87XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIml0ZW1bdGFiZWxhQ2FtcG9zLkNhbXBvU2VsZWNpb25hcl1cIiAoY2hhbmdlKT1cInNlbGVjaW9uYWRvQ2hlY2tlZCgpXCI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiY29sXCIgKm5nRm9yPVwibGV0IGNvbCBvZiB0YWJlbGFDYW1wb3MuQ29sdW5hc1wiIFtzdHlsZS53aWR0aF09XCJjb2wuVGFtYW5ob1wiXG4gICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbC5UaXBvID09ICdudW1iZXInID8gJ3JpZ2h0JyA6IChjb2wuQWxpbmhhbWVudG8gPz8gJ2xlZnQnKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb2wuQ2xpY2tGdW5jdGlvbiA/IGNvbC5DbGlja0Z1bmN0aW9uKGl0ZW0pIDogc2VsZWNpb25hckxpbmhhKGl0ZW0pXCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLlBpcGUgPT0gJ2RhdGUnXCI+e3sgaXRlbVtjb2wuQ2FtcG9dIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19PC9zcGFuPiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLlBpcGUgPT0gJ3ZhbG9yJ1wiPnt7IGl0ZW1bY29sLkNhbXBvXSB8IHZhbG9yRm9ybWF0IH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC5SZW5kZXJGdW5jdGlvblwiIFtpbm5lckh0bWxdPVwiY29sLlJlbmRlckZ1bmN0aW9uKGl0ZW0pIHwgc2FmZUh0bWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbC5QaXBlICYmICFjb2wuUmVuZGVyRnVuY3Rpb25cIj57eyBpdGVtW2NvbC5DYW1wb10gPz8gY29sLkRlZmF1bHQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwidGFiZWxhQ2FtcG9zLkV4Y2x1aXIgPT09IHRydWVcIiBzdHlsZT1cInBhZGRpbmc6IDBweDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaXplPVwic21hbGxcIiBjb2xvcj1cImRhbmdlclwiIGZpbGw9XCJvdXRsaW5lXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHNjYWxlKDAuODUpO1wiIChjbGljayk9XCJleGNsdWlyTGluaGEoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzRmlsdHJvT3BlblwiIChkaWREaXNtaXNzKT1cImlzRmlsdHJvT3BlbiA9IGZhbHNlO1wiPlxuICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWl4YUdyYW5kZVwiPlxuICAgICAgICAgICAgRmlsdHJhcjpcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENvbHVuYS5WYWxvcmVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbG9yIG9mIHNlbGVjdGVkQ29sdW5hLlZhbG9yZXNcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWxvciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tY29udGVudD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24tbW9kYWw+XG4gIDwvZGl2PiJdfQ==
|