@ngx-smz/core 19.2.0 → 19.2.2
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.
|
@@ -9,6 +9,7 @@ import * as i8$1 from 'primeng/table';
|
|
|
9
9
|
import { ColumnFilter as ColumnFilter$1, TableModule as TableModule$1 } from 'primeng/table';
|
|
10
10
|
import * as i4$2 from 'primeng/button';
|
|
11
11
|
import { ButtonModule } from 'primeng/button';
|
|
12
|
+
import * as i3$2 from 'primeng/message';
|
|
12
13
|
import { MessageModule } from 'primeng/message';
|
|
13
14
|
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
14
15
|
import * as i8 from 'primeng/toolbar';
|
|
@@ -38,8 +39,6 @@ import groupBy from 'lodash-es/groupBy';
|
|
|
38
39
|
import mapValues from 'lodash-es/mapValues';
|
|
39
40
|
import * as i1$2 from '@ngxs/store';
|
|
40
41
|
import { Store, Actions, ofActionSuccessful, ofActionDispatched, ofActionErrored, Action, State, createSelector, Selector, NgxsModule } from '@ngxs/store';
|
|
41
|
-
import * as i3$2 from 'primeng/messages';
|
|
42
|
-
import { MessagesModule } from 'primeng/messages';
|
|
43
42
|
import * as i1$1 from '@angular/platform-browser';
|
|
44
43
|
import { __decorate } from 'tslib';
|
|
45
44
|
import * as i4$1 from 'primeng/api';
|
|
@@ -3241,11 +3240,11 @@ class FileUploadComponent {
|
|
|
3241
3240
|
return '.' + file.name.split('.').pop();
|
|
3242
3241
|
}
|
|
3243
3242
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: FileUploadComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$2.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
3244
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
3243
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: FileUploadComponent, isStandalone: false, selector: "smz-file-upload", inputs: { input: "input", form: "form", control: "control", behaviors: "behaviors" }, outputs: { selectChange: "selectChange" }, ngImport: i0, template: "\r\n\r\n<label *ngIf=\"input.hideLabel != true\" class=\"smz__input_name\" [innerHTML]=\"input.name\"></label>\r\n\r\n<!-- ZONA DE DROPPING -->\r\n<div *ngIf=\"input._file == null\" SmzDragDrop (fileDropped)=\"input.isDisabled ? notAllowed() : onFilesDropped($event, true, true, this.cdf)\" class=\"file_upload__drag-container grid grid-nogutter items-center justify-center mt-1 mb-1\">\r\n <div class=\"grid grid-nogutter flex-col items-center justify-center pt-3 pb-3\">\r\n <!-- ICONE DE UPLOAD -->\r\n <i [ngClass]=\"input.dragIconClass\" class=\"text-4xl mb-2\"></i>\r\n <span class=\"grid grid-nogutter gap-2\">\r\n <!-- INPUT DE UPLOAD MANUAL -->\r\n <input type=\"file\" [name]=\"uploadControl\" class=\"upload_manual_control\" [attr.disabled]=\"input.isDisabled\" [accept]=\"input.fileAccept\" [id]=\"uploadControl\" (change)=\"onInputFiles($event)\" />\r\n <!-- BOT\u00C3O PARA SELECIONAR ARQUIVO -->\r\n <label [for]=\"uploadControl\" [ngClass]=\"{ 'text-gray-500' : input.isDisabled,'clickable upload_manual_label hvr hvr-grow': !input.isDisabled }\">{{ input.inputMessage }}</label>\r\n <!-- MENSAGEM PARA ARRASTAR -->\r\n <span class=\"upload_field-drag-message\">ou {{ input.dragMessage }}</span>\r\n </span>\r\n\r\n <!-- MENSAGEM DE ERRO PARA SELE\u00C7\u00C3O DE ARQUIVO -->\r\n @for (error of errors; track error) {\r\n <p-message [ngStyle]=\"{ 'width': '100%;' }\" styleClass=\"dialog-messages\">\r\n {{error}}\r\n </p-message>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- CONTE\u00DADO COM ARQUIVO CARREGADO -->\r\n<div *ngIf=\"input._file != null\" class=\"grid grid-nogutter items-center justify-start flex-nowrap mt-1 mb-1 file_upload-container\">\r\n <div class=\"upload_field\" [style.height]=\"input.thumbnailSize\" [style.width]=\"input.thumbnailSize\">\r\n <ng-container [ngSwitch]=\"input._fileType\">\r\n\r\n <!-- IMAGENS -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n\r\n <!-- THUMBNAIL DE IMAGENS -->\r\n <img *ngIf=\"input.base64\" class=\"upload_field-img mr-3\" [src]=\"input.base64 | safeUrl\"/>\r\n\r\n <!-- ZOOM PARA IMAGENS -->\r\n <div class=\"upload_field__actions\">\r\n <div class=\"grid grid-nogutter items-center justify-end mr-2 mt-2\">\r\n <i *ngIf=\"input.allowZoom\" class=\"fa-solid fa-magnifying-glass-plus upload_field__actions_icon hvr hvr-grow text-white clickable\" (click)=\"applyZoom()\"></i>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- APLICA\u00C7\u00D5ES -->\r\n <ng-container *ngSwitchCase=\"'application'\">\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n\r\n <!-- THUMBNAIL DE APLICA\u00C7\u00D5ES -->\r\n <ng-container [ngSwitch]=\"input._fileExtension\">\r\n <i *ngSwitchCase=\"'.pdf'\" class=\"fa-solid fa-file-pdf\"></i>\r\n <i *ngSwitchCase=\"'.doc'\" class=\"fa-solid fa-file-word\"></i>\r\n <i *ngSwitchCase=\"'.docx'\" class=\"fa-solid fa-file-word\"></i>\r\n <i *ngSwitchCase=\"'.ppt'\" class=\"fa-solid fa-file-powerpoint\"></i>\r\n <i *ngSwitchCase=\"'.pptx'\" class=\"fa-solid fa-file-powerpoint\"></i>\r\n <i *ngSwitchCase=\"'.xls'\" class=\"fa-solid fa-file-excel\"></i>\r\n <i *ngSwitchCase=\"'.xlsx'\" class=\"fa-solid fa-file-excel\"></i>\r\n <i *ngSwitchCase=\"'.zip'\" class=\"fa-solid fa-file-zipper\"></i>\r\n <i *ngSwitchCase=\"'.7zip'\" class=\"fa-solid fa-file-zipper\"></i>\r\n <i *ngSwitchCase=\"'.rar'\" class=\"fa-solid fa-file-zipper\"></i>\r\n <i *ngSwitchCase=\"'.txt'\" class=\"fa-solid fa-file-lines\"></i>\r\n <i *ngSwitchDefault class=\"fa-solid fa-file\"></i>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- ZOOM PARA PDF -->\r\n <div *ngIf=\"input._fileExtension === '.pdf'\" class=\"upload_field__actions\">\r\n <div class=\"grid grid-nogutter items-center justify-end mr-2 mt-2\">\r\n <i *ngIf=\"input.allowZoom\" class=\"fa-solid fa-magnifying-glass-plus upload_field__actions_icon hvr hvr-grow text-white clickable\" (click)=\"applyZoom()\"></i>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- V\u00CDDEOS -->\r\n <ng-container *ngSwitchCase=\"'video'\">\r\n\r\n <!-- THUMBNAIL DE V\u00CDDEOS -->\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n <i class=\"fa-solid fa-file-video\"></i>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- AUDIOS -->\r\n <ng-container *ngSwitchCase=\"'audio'\">\r\n\r\n <!-- THUMBNAIL DE AUDIOS -->\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n <i class=\"fa-solid fa-file-audio\"></i>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- OUTROS -->\r\n <ng-container *ngSwitchDefault>\r\n\r\n <!-- THUMBNAIL GENERICOS -->\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n <i class=\"fa-solid fa-file\"></i>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <!-- NOME E TAMANHO DO ARQUIVO -->\r\n <div class=\"grid grid-nogutter flex-col items-start justify-end ml-3\">\r\n <span>{{ input._file.name | fileNameShorten : input.shortenLength : input.shortenSeparator }} <i class=\"far fa-trash-alt hvr hvr-grow text-red-500 clickable ml-2 mb-1 cursor-pointer\" (click)=\"clear(true)\"></i></span>\r\n <span *ngIf=\"input.showFileSize\"><small>{{ formatBytes(input._file.size) }}</small></span>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- MENSAGEM DE ERRO DE VALIDA\u00C7\u00C3O DO FORM -->\r\n<smz-validation-messages [input]=\"input\" [control]=\"control\" [behaviors]=\"behaviors\"></smz-validation-messages>\r\n\r\n<div *ngIf=\"isZoomActive\" class=\"upload_field__fullscreen-image\">\r\n\r\n <!-- VISUALIZA\u00C7\u00C3O FULLSCREEN DE PDF -->\r\n <ng-container *ngIf=\"input._fileExtension === '.pdf'; else imageTemplate\">\r\n <iframe *ngIf=\"input.base64\" [src]=\"input.base64 | safeUrl\" class=\"animate__animated animate__zoomIn animate__faster\" width=\"100%\" height=\"100%\" frameborder=\"0\"></iframe>\r\n </ng-container>\r\n\r\n <!-- VISUALIZA\u00C7\u00C3O FULLSCREEN DE IMAGENS -->\r\n <ng-template #imageTemplate>\r\n <img *ngIf=\"input.base64\" class=\"animate__animated animate__zoomIn animate__faster\" [src]=\"input.base64 | safeUrl\" height=\"100%\" width=\"100%\"/>\r\n </ng-template>\r\n\r\n <!-- ICONE DE SAIR DO FULLSCREEN -->\r\n <i class=\"far fa-times-circle clickable m-4 hvr hvr-grow text-4xl text-white\" (click)=\"restoreZoom()\"></i>\r\n</div>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3$2.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "component", type: ValidationMessagesComponent, selector: "smz-validation-messages", inputs: ["input", "control", "behaviors", "extraMessages"] }, { kind: "directive", type: FileDragDropDirective, selector: "[SmzDragDrop]", outputs: ["fileDropped"] }, { kind: "pipe", type: SafeUrlPipe$1, name: "safeUrl" }, { kind: "pipe", type: FileNameShortenPipe, name: "fileNameShorten" }] });
|
|
3245
3244
|
}
|
|
3246
3245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: FileUploadComponent, decorators: [{
|
|
3247
3246
|
type: Component,
|
|
3248
|
-
args: [{ selector: 'smz-file-upload', standalone: false, template: "\r\n\r\n<label *ngIf=\"input.hideLabel != true\" class=\"smz__input_name\" [innerHTML]=\"input.name\"></label>\r\n\r\n<!-- ZONA DE DROPPING -->\r\n<div *ngIf=\"input._file == null\" SmzDragDrop (fileDropped)=\"input.isDisabled ? notAllowed() : onFilesDropped($event, true, true, this.cdf)\" class=\"file_upload__drag-container grid grid-nogutter items-center justify-center mt-1 mb-1\">\r\n <div class=\"grid grid-nogutter flex-col items-center justify-center pt-3 pb-3\">\r\n <!-- ICONE DE UPLOAD -->\r\n <i [ngClass]=\"input.dragIconClass\" class=\"text-4xl mb-2\"></i>\r\n <span class=\"grid grid-nogutter gap-2\">\r\n <!-- INPUT DE UPLOAD MANUAL -->\r\n <input type=\"file\" [name]=\"uploadControl\" class=\"upload_manual_control\" [attr.disabled]=\"input.isDisabled\" [accept]=\"input.fileAccept\" [id]=\"uploadControl\" (change)=\"onInputFiles($event)\" />\r\n <!-- BOT\u00C3O PARA SELECIONAR ARQUIVO -->\r\n <label [for]=\"uploadControl\" [ngClass]=\"{ 'text-gray-500' : input.isDisabled,'clickable upload_manual_label hvr hvr-grow': !input.isDisabled }\">{{ input.inputMessage }}</label>\r\n <!-- MENSAGEM PARA ARRASTAR -->\r\n <span class=\"upload_field-drag-message\">ou {{ input.dragMessage }}</span>\r\n </span>\r\n\r\n <!-- MENSAGEM DE ERRO PARA SELE\u00C7\u00C3O DE ARQUIVO -->\r\n
|
|
3247
|
+
args: [{ selector: 'smz-file-upload', standalone: false, template: "\r\n\r\n<label *ngIf=\"input.hideLabel != true\" class=\"smz__input_name\" [innerHTML]=\"input.name\"></label>\r\n\r\n<!-- ZONA DE DROPPING -->\r\n<div *ngIf=\"input._file == null\" SmzDragDrop (fileDropped)=\"input.isDisabled ? notAllowed() : onFilesDropped($event, true, true, this.cdf)\" class=\"file_upload__drag-container grid grid-nogutter items-center justify-center mt-1 mb-1\">\r\n <div class=\"grid grid-nogutter flex-col items-center justify-center pt-3 pb-3\">\r\n <!-- ICONE DE UPLOAD -->\r\n <i [ngClass]=\"input.dragIconClass\" class=\"text-4xl mb-2\"></i>\r\n <span class=\"grid grid-nogutter gap-2\">\r\n <!-- INPUT DE UPLOAD MANUAL -->\r\n <input type=\"file\" [name]=\"uploadControl\" class=\"upload_manual_control\" [attr.disabled]=\"input.isDisabled\" [accept]=\"input.fileAccept\" [id]=\"uploadControl\" (change)=\"onInputFiles($event)\" />\r\n <!-- BOT\u00C3O PARA SELECIONAR ARQUIVO -->\r\n <label [for]=\"uploadControl\" [ngClass]=\"{ 'text-gray-500' : input.isDisabled,'clickable upload_manual_label hvr hvr-grow': !input.isDisabled }\">{{ input.inputMessage }}</label>\r\n <!-- MENSAGEM PARA ARRASTAR -->\r\n <span class=\"upload_field-drag-message\">ou {{ input.dragMessage }}</span>\r\n </span>\r\n\r\n <!-- MENSAGEM DE ERRO PARA SELE\u00C7\u00C3O DE ARQUIVO -->\r\n @for (error of errors; track error) {\r\n <p-message [ngStyle]=\"{ 'width': '100%;' }\" styleClass=\"dialog-messages\">\r\n {{error}}\r\n </p-message>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- CONTE\u00DADO COM ARQUIVO CARREGADO -->\r\n<div *ngIf=\"input._file != null\" class=\"grid grid-nogutter items-center justify-start flex-nowrap mt-1 mb-1 file_upload-container\">\r\n <div class=\"upload_field\" [style.height]=\"input.thumbnailSize\" [style.width]=\"input.thumbnailSize\">\r\n <ng-container [ngSwitch]=\"input._fileType\">\r\n\r\n <!-- IMAGENS -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n\r\n <!-- THUMBNAIL DE IMAGENS -->\r\n <img *ngIf=\"input.base64\" class=\"upload_field-img mr-3\" [src]=\"input.base64 | safeUrl\"/>\r\n\r\n <!-- ZOOM PARA IMAGENS -->\r\n <div class=\"upload_field__actions\">\r\n <div class=\"grid grid-nogutter items-center justify-end mr-2 mt-2\">\r\n <i *ngIf=\"input.allowZoom\" class=\"fa-solid fa-magnifying-glass-plus upload_field__actions_icon hvr hvr-grow text-white clickable\" (click)=\"applyZoom()\"></i>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- APLICA\u00C7\u00D5ES -->\r\n <ng-container *ngSwitchCase=\"'application'\">\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n\r\n <!-- THUMBNAIL DE APLICA\u00C7\u00D5ES -->\r\n <ng-container [ngSwitch]=\"input._fileExtension\">\r\n <i *ngSwitchCase=\"'.pdf'\" class=\"fa-solid fa-file-pdf\"></i>\r\n <i *ngSwitchCase=\"'.doc'\" class=\"fa-solid fa-file-word\"></i>\r\n <i *ngSwitchCase=\"'.docx'\" class=\"fa-solid fa-file-word\"></i>\r\n <i *ngSwitchCase=\"'.ppt'\" class=\"fa-solid fa-file-powerpoint\"></i>\r\n <i *ngSwitchCase=\"'.pptx'\" class=\"fa-solid fa-file-powerpoint\"></i>\r\n <i *ngSwitchCase=\"'.xls'\" class=\"fa-solid fa-file-excel\"></i>\r\n <i *ngSwitchCase=\"'.xlsx'\" class=\"fa-solid fa-file-excel\"></i>\r\n <i *ngSwitchCase=\"'.zip'\" class=\"fa-solid fa-file-zipper\"></i>\r\n <i *ngSwitchCase=\"'.7zip'\" class=\"fa-solid fa-file-zipper\"></i>\r\n <i *ngSwitchCase=\"'.rar'\" class=\"fa-solid fa-file-zipper\"></i>\r\n <i *ngSwitchCase=\"'.txt'\" class=\"fa-solid fa-file-lines\"></i>\r\n <i *ngSwitchDefault class=\"fa-solid fa-file\"></i>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- ZOOM PARA PDF -->\r\n <div *ngIf=\"input._fileExtension === '.pdf'\" class=\"upload_field__actions\">\r\n <div class=\"grid grid-nogutter items-center justify-end mr-2 mt-2\">\r\n <i *ngIf=\"input.allowZoom\" class=\"fa-solid fa-magnifying-glass-plus upload_field__actions_icon hvr hvr-grow text-white clickable\" (click)=\"applyZoom()\"></i>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- V\u00CDDEOS -->\r\n <ng-container *ngSwitchCase=\"'video'\">\r\n\r\n <!-- THUMBNAIL DE V\u00CDDEOS -->\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n <i class=\"fa-solid fa-file-video\"></i>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- AUDIOS -->\r\n <ng-container *ngSwitchCase=\"'audio'\">\r\n\r\n <!-- THUMBNAIL DE AUDIOS -->\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n <i class=\"fa-solid fa-file-audio\"></i>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <!-- OUTROS -->\r\n <ng-container *ngSwitchDefault>\r\n\r\n <!-- THUMBNAIL GENERICOS -->\r\n <div class=\"upload_field-generic h-full w-full grid grid-nogutter items-center text-5xl justify-center mr-3\">\r\n <i class=\"fa-solid fa-file\"></i>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <!-- NOME E TAMANHO DO ARQUIVO -->\r\n <div class=\"grid grid-nogutter flex-col items-start justify-end ml-3\">\r\n <span>{{ input._file.name | fileNameShorten : input.shortenLength : input.shortenSeparator }} <i class=\"far fa-trash-alt hvr hvr-grow text-red-500 clickable ml-2 mb-1 cursor-pointer\" (click)=\"clear(true)\"></i></span>\r\n <span *ngIf=\"input.showFileSize\"><small>{{ formatBytes(input._file.size) }}</small></span>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- MENSAGEM DE ERRO DE VALIDA\u00C7\u00C3O DO FORM -->\r\n<smz-validation-messages [input]=\"input\" [control]=\"control\" [behaviors]=\"behaviors\"></smz-validation-messages>\r\n\r\n<div *ngIf=\"isZoomActive\" class=\"upload_field__fullscreen-image\">\r\n\r\n <!-- VISUALIZA\u00C7\u00C3O FULLSCREEN DE PDF -->\r\n <ng-container *ngIf=\"input._fileExtension === '.pdf'; else imageTemplate\">\r\n <iframe *ngIf=\"input.base64\" [src]=\"input.base64 | safeUrl\" class=\"animate__animated animate__zoomIn animate__faster\" width=\"100%\" height=\"100%\" frameborder=\"0\"></iframe>\r\n </ng-container>\r\n\r\n <!-- VISUALIZA\u00C7\u00C3O FULLSCREEN DE IMAGENS -->\r\n <ng-template #imageTemplate>\r\n <img *ngIf=\"input.base64\" class=\"animate__animated animate__zoomIn animate__faster\" [src]=\"input.base64 | safeUrl\" height=\"100%\" width=\"100%\"/>\r\n </ng-template>\r\n\r\n <!-- ICONE DE SAIR DO FULLSCREEN -->\r\n <i class=\"far fa-times-circle clickable m-4 hvr hvr-grow text-4xl text-white\" (click)=\"restoreZoom()\"></i>\r\n</div>" }]
|
|
3249
3248
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$2.Store }], propDecorators: { input: [{
|
|
3250
3249
|
type: Input
|
|
3251
3250
|
}], form: [{
|
|
@@ -7272,7 +7271,7 @@ class NgxSmzFormsModule {
|
|
|
7272
7271
|
ReactiveFormsModule,
|
|
7273
7272
|
SmzTemplatesPipeModule,
|
|
7274
7273
|
TooltipModule,
|
|
7275
|
-
|
|
7274
|
+
MessageModule,
|
|
7276
7275
|
SafeContentPipeModule,
|
|
7277
7276
|
SmzInputTagAreaModule,
|
|
7278
7277
|
NgxSmzDataPipesModule,
|
|
@@ -7329,7 +7328,7 @@ class NgxSmzFormsModule {
|
|
|
7329
7328
|
ReactiveFormsModule,
|
|
7330
7329
|
SmzTemplatesPipeModule,
|
|
7331
7330
|
TooltipModule,
|
|
7332
|
-
|
|
7331
|
+
MessageModule,
|
|
7333
7332
|
SafeContentPipeModule,
|
|
7334
7333
|
SmzInputTagAreaModule,
|
|
7335
7334
|
NgxSmzDataPipesModule,
|
|
@@ -7430,7 +7429,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
7430
7429
|
ReactiveFormsModule,
|
|
7431
7430
|
SmzTemplatesPipeModule,
|
|
7432
7431
|
TooltipModule,
|
|
7433
|
-
|
|
7432
|
+
MessageModule,
|
|
7434
7433
|
SafeContentPipeModule,
|
|
7435
7434
|
SmzInputTagAreaModule,
|
|
7436
7435
|
NgxSmzDataPipesModule,
|
|
@@ -7511,11 +7510,11 @@ class DialogContentManagerComponent {
|
|
|
7511
7510
|
ngOnInit() {
|
|
7512
7511
|
}
|
|
7513
7512
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogContentManagerComponent, deps: [{ token: DynamicDialogRef }, { token: SmzDynamicDialogConfig }, { token: SmzDialogsVisibilityService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7514
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
7513
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: DialogContentManagerComponent, isStandalone: false, selector: "smz-dialog-content-manager", ngImport: i0, template: "<div class=\"smz-dialog-content smz_form_grid_container\" [ngClass]=\"config.data.contentClass\">\r\n\r\n <div class=\"smz-dialog-container\">\r\n <div [ngClass]=\"config.data.featureContainerClass ?? 'grid grid-nogutter items-start justify-start'\">\r\n\r\n <!-- <p-progressBar *ngIf=\"config.data._context.isLoading\" mode=\"indeterminate\" [ngStyle]=\"{ 'width': '100%;' }\" styleClass=\"dialog-loading\"></p-progressBar> -->\r\n @for (error of config.data._context.apiErrors; track error) {\r\n <p-message [ngStyle]=\"{ 'width': '100%;' }\" styleClass=\"dialog-messages\">\r\n {{error}}\r\n </p-message>\r\n }\r\n\r\n <ng-container *ngFor=\"let feature of config.data._context.injectables\">\r\n <div class=\"col\" [ngClass]=\"(feature.template != null ? feature.template : config.data._context.featureTemplate) | setTemplateClasses : ['row']\">\r\n <ng-container *ngIf=\"feature.visibilityDependsOn != null\">\r\n <ng-container *ngIf=\"(visibility.observers[feature.componentId + feature.component.name].visibility$ | async) as visibilityState\">\r\n <ng-container *ngIf=\"!feature.visibilityDependsOn.reversed === visibilityState.state || feature.visibilityDependsOn.reversed === !visibilityState.state\">\r\n <ng-template [appInjectComponent]=\"feature\" [context]=\"config.data._context\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"feature.visibilityDependsOn == null\">\r\n <ng-template [appInjectComponent]=\"feature\" [context]=\"config.data._context\"></ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [":root{--smz-dialog-padding: 1em}smz-general-dialog p-toolbar .ui-toolbar{background-color:unset;border:unset;padding:var(--smz-dialog-padding)}smz-general-dialog .smz-dialog-container{position:absolute;top:var(--smz-dialog-padding);left:var(--smz-dialog-padding);right:var(--smz-dialog-padding);bottom:calc(var(--smz-dialog-padding) * 4);overflow:scroll}smz-general-dialog .smz-dialog-footer{position:absolute;bottom:0;left:0;right:0;z-index:auto}smz-general-dialog .smz_dialog_disabled{-webkit-user-select:none!important;user-select:none!important;pointer-events:none!important;filter:brightness(70%)!important}smz-general-dialog .smz-group-right{float:right}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3$2.Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant"], outputs: ["onClose"] }, { kind: "directive", type: InjectComponentDirective, selector: "[appInjectComponent]", inputs: ["appInjectComponent", "context"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: SetTemplateClassesPipe, name: "setTemplateClasses" }], encapsulation: i0.ViewEncapsulation.None });
|
|
7515
7514
|
}
|
|
7516
7515
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogContentManagerComponent, decorators: [{
|
|
7517
7516
|
type: Component,
|
|
7518
|
-
args: [{ selector: 'smz-dialog-content-manager', encapsulation: ViewEncapsulation.None, standalone: false, template: "<div class=\"smz-dialog-content smz_form_grid_container\" [ngClass]=\"config.data.contentClass\">\r\n\r\n <div class=\"container\">\r\n <div [ngClass]=\"config.data.featureContainerClass ?? 'grid grid-nogutter items-start justify-start'\">\r\n\r\n <!-- <p-progressBar *ngIf=\"config.data._context.isLoading\" mode=\"indeterminate\" [ngStyle]=\"{ 'width': '100%;' }\" styleClass=\"dialog-loading\"></p-progressBar> -->\r\n
|
|
7517
|
+
args: [{ selector: 'smz-dialog-content-manager', encapsulation: ViewEncapsulation.None, standalone: false, template: "<div class=\"smz-dialog-content smz_form_grid_container\" [ngClass]=\"config.data.contentClass\">\r\n\r\n <div class=\"smz-dialog-container\">\r\n <div [ngClass]=\"config.data.featureContainerClass ?? 'grid grid-nogutter items-start justify-start'\">\r\n\r\n <!-- <p-progressBar *ngIf=\"config.data._context.isLoading\" mode=\"indeterminate\" [ngStyle]=\"{ 'width': '100%;' }\" styleClass=\"dialog-loading\"></p-progressBar> -->\r\n @for (error of config.data._context.apiErrors; track error) {\r\n <p-message [ngStyle]=\"{ 'width': '100%;' }\" styleClass=\"dialog-messages\">\r\n {{error}}\r\n </p-message>\r\n }\r\n\r\n <ng-container *ngFor=\"let feature of config.data._context.injectables\">\r\n <div class=\"col\" [ngClass]=\"(feature.template != null ? feature.template : config.data._context.featureTemplate) | setTemplateClasses : ['row']\">\r\n <ng-container *ngIf=\"feature.visibilityDependsOn != null\">\r\n <ng-container *ngIf=\"(visibility.observers[feature.componentId + feature.component.name].visibility$ | async) as visibilityState\">\r\n <ng-container *ngIf=\"!feature.visibilityDependsOn.reversed === visibilityState.state || feature.visibilityDependsOn.reversed === !visibilityState.state\">\r\n <ng-template [appInjectComponent]=\"feature\" [context]=\"config.data._context\"></ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"feature.visibilityDependsOn == null\">\r\n <ng-template [appInjectComponent]=\"feature\" [context]=\"config.data._context\"></ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>", styles: [":root{--smz-dialog-padding: 1em}smz-general-dialog p-toolbar .ui-toolbar{background-color:unset;border:unset;padding:var(--smz-dialog-padding)}smz-general-dialog .smz-dialog-container{position:absolute;top:var(--smz-dialog-padding);left:var(--smz-dialog-padding);right:var(--smz-dialog-padding);bottom:calc(var(--smz-dialog-padding) * 4);overflow:scroll}smz-general-dialog .smz-dialog-footer{position:absolute;bottom:0;left:0;right:0;z-index:auto}smz-general-dialog .smz_dialog_disabled{-webkit-user-select:none!important;user-select:none!important;pointer-events:none!important;filter:brightness(70%)!important}smz-general-dialog .smz-group-right{float:right}\n"] }]
|
|
7519
7518
|
}], ctorParameters: () => [{ type: DynamicDialogRef }, { type: SmzDynamicDialogConfig }, { type: SmzDialogsVisibilityService }] });
|
|
7520
7519
|
|
|
7521
7520
|
class MessageContentComponent {
|
|
@@ -8718,11 +8717,11 @@ class DialogFooterComponent {
|
|
|
8718
8717
|
return response;
|
|
8719
8718
|
}
|
|
8720
8719
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogFooterComponent, deps: [{ token: DynamicDialogRef }, { token: SmzDynamicDialogConfig }, { token: SmzDialogsVisibilityService }, { token: InjectComponentService }, { token: i0.ChangeDetectorRef }, { token: i1$2.Actions }, { token: i1$2.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
8721
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: DialogFooterComponent, isStandalone: false, selector: "smz-dialog-footer", ngImport: i0, template: "<ng-container *ngIf=\"dialogConfig.data._context as context\">\r\n\r\n <p-toolbar class=\"smz-dialog-footer\">\r\n <div class=\"grid grid-nogutter items-center justify-end gap-2\">\r\n\r\n <ng-container *ngIf=\"context.customButtonsOrder == null || context.customButtonsOrder === 'first'\">\r\n <ng-container *ngFor=\"let customButton of context.customButtons\">\r\n <p-button\r\n *ngIf=\"customButton.visible == null || customButton.visible\"\r\n [label]=\"customButton.name\"\r\n [
|
|
8720
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: DialogFooterComponent, isStandalone: false, selector: "smz-dialog-footer", ngImport: i0, template: "<ng-container *ngIf=\"dialogConfig.data._context as context\">\r\n\r\n <p-toolbar class=\"smz-dialog-footer\">\r\n <div class=\"grid grid-nogutter items-center justify-end gap-2\">\r\n\r\n <ng-container *ngIf=\"context.customButtonsOrder == null || context.customButtonsOrder === 'first'\">\r\n <ng-container *ngFor=\"let customButton of context.customButtons\">\r\n <p-button\r\n *ngIf=\"customButton.visible == null || customButton.visible\"\r\n [label]=\"customButton.name\"\r\n [styleClass]=\"customButton.class\"\r\n [disabled]=\"context.isGlobalDisabled || customButton.dependsOnValidation && !isValid() || customButton.disabled\"\r\n [pTooltip]=\"customButton.tooltip\"\r\n appendTo=\"body\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"customClick(customButton)\">\r\n </p-button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <p-button\r\n *ngIf=\"context.behaviors.showCancelButton\"\r\n [label]=\"context.builtInButtons.cancelName\"\r\n [styleClass]=\"context.builtInButtons.cancelClass\"\r\n (onClick)=\"close()\">\r\n </p-button>\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"context.behaviors.showConfirmButton\"\r\n [confirmOnEnter]=\"context.isLoading ? false : context.behaviors.confirmOnEnter\"\r\n [dialogId]=\"context.id\"\r\n [label]=\"context.builtInButtons.confirmName\"\r\n [styleClass]=\"context.builtInButtons.confirmClass\"\r\n [disabled]=\"context.isGlobalDisabled\"\r\n (onClick)=\"confirm()\">\r\n </p-button>\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"context.behaviors.showOkButton\"\r\n [confirmOnEnter]=\"context.isLoading ? false : context.behaviors.confirmOnEnter\"\r\n [dialogId]=\"context.id\"\r\n [label]=\"context.builtInButtons.okName\"\r\n [styleClass]=\"context.builtInButtons.okClass\"\r\n [disabled]=\"context.isGlobalDisabled\"\r\n (onClick)=\"ok()\">\r\n </p-button>\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"context.behaviors.showSaveButton\"\r\n [confirmOnEnter]=\"context.isLoading ? false : context.behaviors.confirmOnEnter\"\r\n [dialogId]=\"context.id\"\r\n [label]=\"context.builtInButtons.saveName\"\r\n [styleClass]=\"context.builtInButtons.saveClass\"\r\n [icon]=\"context.isLoading ? 'fa-solid fa-spinner fa-spin' : ''\"\r\n [disabled]=\"context.isGlobalDisabled\"\r\n (onClick)=\"save()\">\r\n </p-button>\r\n\r\n <ng-container *ngIf=\"context.customButtonsOrder === 'last'\">\r\n <ng-container *ngFor=\"let customButton of context.customButtons\">\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"customButton.visible == null || customButton.visible\"\r\n [label]=\"customButton.name\"\r\n [styleClass]=\"customButton.class\"\r\n [disabled]=\"context.isGlobalDisabled || customButton.disabled\"\r\n [pTooltip]=\"customButton.tooltip\"\r\n appendTo=\"body\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"customClick(customButton)\">\r\n </p-button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </p-toolbar>\r\n\r\n</ng-container>", styles: [""], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => i4$2.Button), selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i0.forwardRef(() => i8.Toolbar), selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "directive", type: i0.forwardRef(() => i2.Tooltip), selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i0.forwardRef(() => ConfirmOnEnterDirective), selector: "[confirmOnEnter]", inputs: ["confirmOnEnter", "clickEvent", "delayConfirmation", "disabled", "dialogId"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
8722
8721
|
}
|
|
8723
8722
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogFooterComponent, decorators: [{
|
|
8724
8723
|
type: Component,
|
|
8725
|
-
args: [{ selector: 'smz-dialog-footer', encapsulation: ViewEncapsulation.None, standalone: false, template: "<ng-container *ngIf=\"dialogConfig.data._context as context\">\r\n\r\n <p-toolbar class=\"smz-dialog-footer\">\r\n <div class=\"grid grid-nogutter items-center justify-end gap-2\">\r\n\r\n <ng-container *ngIf=\"context.customButtonsOrder == null || context.customButtonsOrder === 'first'\">\r\n <ng-container *ngFor=\"let customButton of context.customButtons\">\r\n <p-button\r\n *ngIf=\"customButton.visible == null || customButton.visible\"\r\n [label]=\"customButton.name\"\r\n [
|
|
8724
|
+
args: [{ selector: 'smz-dialog-footer', encapsulation: ViewEncapsulation.None, standalone: false, template: "<ng-container *ngIf=\"dialogConfig.data._context as context\">\r\n\r\n <p-toolbar class=\"smz-dialog-footer\">\r\n <div class=\"grid grid-nogutter items-center justify-end gap-2\">\r\n\r\n <ng-container *ngIf=\"context.customButtonsOrder == null || context.customButtonsOrder === 'first'\">\r\n <ng-container *ngFor=\"let customButton of context.customButtons\">\r\n <p-button\r\n *ngIf=\"customButton.visible == null || customButton.visible\"\r\n [label]=\"customButton.name\"\r\n [styleClass]=\"customButton.class\"\r\n [disabled]=\"context.isGlobalDisabled || customButton.dependsOnValidation && !isValid() || customButton.disabled\"\r\n [pTooltip]=\"customButton.tooltip\"\r\n appendTo=\"body\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"customClick(customButton)\">\r\n </p-button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <p-button\r\n *ngIf=\"context.behaviors.showCancelButton\"\r\n [label]=\"context.builtInButtons.cancelName\"\r\n [styleClass]=\"context.builtInButtons.cancelClass\"\r\n (onClick)=\"close()\">\r\n </p-button>\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"context.behaviors.showConfirmButton\"\r\n [confirmOnEnter]=\"context.isLoading ? false : context.behaviors.confirmOnEnter\"\r\n [dialogId]=\"context.id\"\r\n [label]=\"context.builtInButtons.confirmName\"\r\n [styleClass]=\"context.builtInButtons.confirmClass\"\r\n [disabled]=\"context.isGlobalDisabled\"\r\n (onClick)=\"confirm()\">\r\n </p-button>\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"context.behaviors.showOkButton\"\r\n [confirmOnEnter]=\"context.isLoading ? false : context.behaviors.confirmOnEnter\"\r\n [dialogId]=\"context.id\"\r\n [label]=\"context.builtInButtons.okName\"\r\n [styleClass]=\"context.builtInButtons.okClass\"\r\n [disabled]=\"context.isGlobalDisabled\"\r\n (onClick)=\"ok()\">\r\n </p-button>\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"context.behaviors.showSaveButton\"\r\n [confirmOnEnter]=\"context.isLoading ? false : context.behaviors.confirmOnEnter\"\r\n [dialogId]=\"context.id\"\r\n [label]=\"context.builtInButtons.saveName\"\r\n [styleClass]=\"context.builtInButtons.saveClass\"\r\n [icon]=\"context.isLoading ? 'fa-solid fa-spinner fa-spin' : ''\"\r\n [disabled]=\"context.isGlobalDisabled\"\r\n (onClick)=\"save()\">\r\n </p-button>\r\n\r\n <ng-container *ngIf=\"context.customButtonsOrder === 'last'\">\r\n <ng-container *ngFor=\"let customButton of context.customButtons\">\r\n\r\n <!-- DependsOnValidation -->\r\n <p-button\r\n *ngIf=\"customButton.visible == null || customButton.visible\"\r\n [label]=\"customButton.name\"\r\n [styleClass]=\"customButton.class\"\r\n [disabled]=\"context.isGlobalDisabled || customButton.disabled\"\r\n [pTooltip]=\"customButton.tooltip\"\r\n appendTo=\"body\"\r\n tooltipPosition=\"top\"\r\n (onClick)=\"customClick(customButton)\">\r\n </p-button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </p-toolbar>\r\n\r\n</ng-container>" }]
|
|
8726
8725
|
}], ctorParameters: () => [{ type: DynamicDialogRef }, { type: SmzDynamicDialogConfig }, { type: SmzDialogsVisibilityService }, { type: InjectComponentService }, { type: i0.ChangeDetectorRef }, { type: i1$2.Actions }, { type: i1$2.Store }] });
|
|
8727
8726
|
class ConfirmOnEnterDirective {
|
|
8728
8727
|
el;
|
|
@@ -16708,11 +16707,11 @@ class SmzTableComponent {
|
|
|
16708
16707
|
this.tableHelper.clear(this.tableKey);
|
|
16709
16708
|
}
|
|
16710
16709
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: SmzTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: TableEditableService }, { token: TableFormsService }, { token: TableHelperService }, { token: i1$2.Store }, { token: SmzExcelService }], target: i0.ɵɵFactoryTarget.Component });
|
|
16711
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: SmzTableComponent, isStandalone: false, selector: "smz-ui-table", inputs: { state: "state", items: "items", loading: "loading" }, outputs: { selectionChange: "selectionChange", filterChange: "filterChange", columnVisibilityChange: "columnVisibilityChange", create: "create", update: "update", delete: "delete" }, providers: [TableEditableService, TableFormsService], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "table", first: true, predicate: ["dt"], descendants: true }, { propertyName: "columnMultiselect", first: true, predicate: ["columnMultiselect"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state | tableContext as context; else noStateTemplate\">\r\n\r\n <ng-container *ngIf=\"(context.state.emptyFeedback != null && (context.state.emptyFeedback.extraInfo || context.state.emptyFeedback.image || context.state.emptyFeedback.actionButtons)) && (items != null && items.length === 0) && context.state.emptyFeedback.isFeatured; else tableTemplate\">\r\n <smz-data-info\r\n [image]=\"context.state.emptyFeedback.image\"\r\n [message]=\"context.state.emptyFeedback.message\"\r\n [callbackInfo]=\"context.state.emptyFeedback.extraInfo\"\r\n [actions]=\"context.state.emptyFeedback.actionButtons\">\r\n\r\n <ng-template pTemplate=\"actions\">\r\n <ng-container *ngTemplateOutlet=\"emptyActionsTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-template>\r\n\r\n </smz-data-info>\r\n </ng-container>\r\n\r\n <ng-template #tableTemplate>\r\n\r\n <ng-container *ngVar=\"state.source?.items$ != null ? (state.source.items$ | async) : null as source\">\r\n\r\n <ng-container *ngIf=\"(source ?? items | cloneTableItems : context: tableKey: context.state.rowExpansion.sincronize) as clonedData\">\r\n <p-table #dt\r\n dataKey=\"id\"\r\n editMode=\"row\"\r\n [stripedRows]=\"context.state.styles.striped\"\r\n [value]=\"clonedData.items\"\r\n [(selection)]=\"selectedItems\"\r\n [tableStyleClass]=\"context.state.styles.tableStyleClass\"\r\n [styleClass]=\"'p-datatable-smz-ui-table' + (context.state.styles.showGrid ? ' p-datatable-gridlines' : '') + (context.state.styles.size === 'extra-small' ? ' p-datatable-xs' : '') + (context.state.styles.size === 'small' ? ' p-datatable-sm' : '') + (context.state.styles.size === 'large' ? ' p-datatable-lg' : '')\"\r\n [rowHover]=\"context.state.actions.rowBehavior.hoverable\"\r\n [rows]=\"context.state.pagination.rows\"\r\n [showCurrentPageReport]=\"context.state.pagination.pageReport.isVisible\"\r\n [rowsPerPageOptions]=\"context.state.pagination.rowsPerPageOptions\"\r\n [loading]=\"loading\"\r\n [paginator]=\"context.state.pagination.isVisible\"\r\n [currentPageReportTemplate]=\"context.state.locale.paginator.template\"\r\n [sortField]=\"context.state.sort.field\"\r\n [sortMode]=\"context.state.sort.mode\"\r\n [sortOrder]=\"context.state.sort.order\"\r\n [multiSortMeta]=\"context.state.sort.multiSortMeta\"\r\n\r\n [scrollable]=\"context.state.viewport.scrollable\"\r\n [scrollHeight]=\"context.state.viewport.scrollHeight\"\r\n [scrollDirection]=\"context.state.viewport.scrollDirection\"\r\n\r\n [filterDelay]=\"0\"\r\n [globalFilterFields]=\"context.globalFilter\"\r\n\r\n [columns]=\"context.visibleColumns\"\r\n [frozenColumns]=\"context.frozenColumns\"\r\n [frozenWidth]=\"context.state.frozen.isEnabled ? context.state.frozen.width : null\"\r\n [resizableColumns]=\"context.state.viewport.resizableColumns\"\r\n [columnResizeMode]=\"context.state.viewport.columnResizeMode\"\r\n\r\n (onPage)=\"onPage($event)\"\r\n (onFilter)=\"onFilter($event)\"\r\n (selectionChange)=\"emitSelection($event)\"\r\n >\r\n\r\n <ng-template pTemplate=\"caption\" *ngIf=\"context.state.caption.isVisible\">\r\n\r\n <div class=\"grid grid-nogutter items-center gap-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <div *ngIf=\"context.state.caption.title != null\" class=\"col database-title\" [innerHTML]=\"context.state.caption.title\"></div>\r\n <ng-container *ngTemplateOutlet=\"captionTemplate; context: { $implicit: dt }\"></ng-container>\r\n\r\n <smz-table-caption-buttons [buttons]=\"context.state.caption.buttons\"></smz-table-caption-buttons>\r\n\r\n <button *ngIf=\"context.state.caption.exportToPdf.isButtonVisible\" pButton [label]=\"context.state.locale.exportToPdf.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-pdf\" (click)=\"exportToPdf(context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.exportToExcel.isButtonVisible\" pButton [label]=\"context.state.locale.exportToExcel.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-excel\" (click)=\"exportToExcel(table, context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.editable.creation.isButtonVisible\" pButton [label]=\"context.state.editable.creation.buttonLabel\" class=\"p-button-outlined\" icon=\"fa-solid fa-plus\" (click)=\"editableService.onRowCreateInit(table, context.columns)\" [disabled]=\"clonedData.showSkeleton || editableService.isEditing || editableService.isCreating || context.state.editable.creation.isButtonDisabled\"></button>\r\n <button *ngIf=\"context.state.caption.rowSelection.isButtonVisible\" pButton [label]=\"context.state.locale.rowSelection.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-check-double\" (click)=\"onRowSelection(context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.clearFilters.isButtonVisible\" pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n\r\n <p-multiSelect\r\n #columnMultiselect\r\n *ngIf=\"context.state.caption.columnVisibility.showDropdownSelector\"\r\n class=\"ml-2 col-12 md:col-2\"\r\n styleClass=\"w-full\"\r\n [options]=\"context.hideableColumns\"\r\n [(ngModel)]=\"selectedColumns\"\r\n [placeholder]=\"context.state.locale.columnVisibility.placeholder\"\r\n [selectedItemsLabel]=\"context.state.locale.columnVisibility.selectedItemsLabel\"\r\n optionLabel=\"name\"\r\n dataKey=\"field\"\r\n optionLabel=\"header\"\r\n [filter]=\"true\"\r\n (onPanelHide)=\"updateColumnsVisibility(true)\"\r\n [pTooltip]=\"context.state.locale.columnVisibility.pTooltip\">\r\n </p-multiSelect>\r\n\r\n <p-iconfield *ngIf=\"context.state.caption.globalFilter.isVisible\" class=\"col-12\" [ngClass]=\"{ 'md:col-2': !context.state.caption.globalFilter.expanded }\">\r\n <p-inputicon styleClass=\"pi pi-search\" />\r\n <input #inputGlobal [(ngModel)]=\"globalSearchInput\" pInputText type=\"text\" styleClass=\"database-global-search\" (input)=\"updateGlobalFilter(inputGlobal.value)\" [disabled]=\"clonedData.showSkeleton\" [placeholder]=\"context.state.locale.globalFilter.placeholder\" />\r\n </p-iconfield>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"toolbarTemplate != null\" class=\"grid grid-nogutter items-center mt-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <ng-container *ngTemplateOutlet=\"toolbarTemplate; context: { $implicit: dt }\"></ng-container>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr [ngClass]=\"{ 'invisible-header': !context.state.header.isVisible }\">\r\n\r\n <th *ngIf=\"context.state.caption.rowSelection.isEnabled\" [ngStyle]=\"context.state.caption.rowSelection.ngStyle\">\r\n <ng-container *ngIf=\"!context.state.actions.batchActions.isVisible\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </ng-container>\r\n </th>\r\n\r\n <th *ngIf=\"context.state.rowExpansion.isEnabled\" [ngStyle]=\"context.state.rowExpansion.ngStyle\"></th>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"context.state.viewport.resizableColumns; else nonResizable\">\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #nonResizable>\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #headerContent>\r\n <div class=\"flex justify-start items-center\">\r\n <span class=\"mr-1\">{{ col.header }}</span>\r\n\r\n <smz-table-header-actions clickStopPropagation class=\"ml-1 mt-1\" *ngIf=\"col.showHeaderActions\" [col]=\"col\"></smz-table-header-actions>\r\n\r\n <p-sortIcon [field]=\"col.sortField\" *ngIf=\"!clonedData.showSkeleton && col.isOrderable\"></p-sortIcon>\r\n\r\n <ng-container *ngIf=\"!clonedData.showSkeleton\">\r\n <ng-container [ngSwitch]=\"col.filter.type\">\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.currency\">\r\n <smz-column-filter type=\"numeric\" currency=\"BRL\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.numeric\">\r\n <smz-column-filter type=\"numeric\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.date\">\r\n <smz-column-filter type=\"date\" [field]=\"col.filterField\" [showTime]=\"col.filter.showTime\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.text\">\r\n <smz-column-filter type=\"text\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.boolean\">\r\n <smz-column-filter type=\"boolean\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.dropdown\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField + '.id'\" matchMode=\"dropdown\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-select appendTo=\"body\" [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-select>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"in\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_array\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"array-some\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : true\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_string\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"multiselectByString\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField : filterField : null : true : false : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button *ngIf=\"context.state.caption.columnVisibility.showColumnHideButton\" pButton type=\"button\" icon=\"fa-solid fa-eye-slash\" class=\"p-button-rounded p-button-text p-button-plain\" (click)=\"hideColumn(col, context)\"></button>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <th *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible|| context.state.editable.isEditable\" [ngStyle]=\"context.state.editable.isEditable ? context.state.editable.ngStyle : context.state.actions.customActions.ngStyle\"></th>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"context.state.actions.batchActions.isVisible\">\r\n <th [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\"\r\n [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n <div class=\"grid grid-nogutter items-center justify-start\">\r\n <p-tableHeaderCheckbox class=\"mr-4\"></p-tableHeaderCheckbox>\r\n <ng-container *ngIf=\"selectedItems?.length > 0\">\r\n <ng-container *ngFor=\"let batchItem of context.state.actions.batchActions.items\">\r\n <button *ngIf=\"batchItem.visible\" pButton [label]=\"batchItem.label\" class=\"p-button-rounded p-button-text p-button-plain animate__animated animate__fadeIn\" [ngClass]=\"batchItem.styleClass\" [icon]=\"batchItem.icon\" (click)=\"batchItem.command(selectedItems); selectedItems = [];\" [disabled]=\"batchItem.disabled\" [pTooltip]=\"batchItem.tooltip\"></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-item let-editing=\"editing\" let-rowIndex=\"rowIndex\" let-columns=\"columns\">\r\n <tr #editableRowElement\r\n [pEditableRow]=\"item\"\r\n tableItemAction\r\n [isClickable]=\"context.state.actions.rowBehavior.isClickable\"\r\n [callback]=\"context.state.actions.rowBehavior.clickCallback\"\r\n [expandRowOnClick]=\"context.state.actions.rowBehavior.expandRowOnClick\"\r\n [item]=\"item\"\r\n class=\"p-selectable-row\"\r\n [ngClass]=\"{ 'highlight-row': item?.id === state.actions.rowBehavior.highlights, 'preserve-in-small': state.actions.rowBehavior.preserveLayoutInSmallDevices }\"\r\n >\r\n\r\n <td *ngIf=\"context.state.caption.rowSelection.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\"\r\n [ngStyle]=\"context.state.caption.rowSelection.ngStyle\"\r\n >\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n\r\n <td *ngIf=\"context.state.rowExpansion.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading, 'grid grid-nogutter justify-start items-center gap-2': context.state.rowExpansion.highlightNewItems && item._isNew }\"\r\n [ngStyle]=\"context.state.rowExpansion.ngStyle\"\r\n >\r\n <p-toggleButton [(ngModel)]=\"item._isExpanded\" [onIcon]=\"'fa-solid fa-chevron-down'\" [offIcon]=\"'fa-solid fa-chevron-right'\" (onChange)=\"item._isNew = false\"></p-toggleButton>\r\n <div *ngIf=\"context.state.rowExpansion.highlightNewItems && item._isNew\" class=\"rounded bg-cyan-400 text-sm text-white px-2 py-0 smz-table-new-tag\" (click)=\"item._isNew = false\">{{ context.state.rowExpansion.highlightLabel }}</div>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else dataTemplate\">\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngStyle]=\"col.content.ngStyle\"><p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton></td>\r\n </ng-container>\r\n\r\n <ng-template #dataTemplate>\r\n\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\" [ngStyle]=\"col.content.ngStyle\">\r\n <span class=\"p-column-title\">{{ col.header }}</span>\r\n\r\n <p-cellEditor>\r\n\r\n <!-- CELULAR COM EDITOR -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.editable.type\">\r\n <ng-container *ngSwitchCase=\"editableTypes.none\">\r\n <smz-table-content class=\"cursor-default\" [ngClass]=\"col.content.contentStyleClass\" [col]=\"col\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\"></smz-table-content>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"editableTypes.custom\">\r\n <ng-container *ngTemplateOutlet=\"editableTemplate; context: { $implicit: item, col: col }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT -->\r\n <ng-container *ngSwitchCase=\"editableTypes.text\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <input pInputText type=\"text\" [formControl]=\"$any(control)\" style=\"width: 100%;\">\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT NUMBER -->\r\n <ng-container *ngSwitchCase=\"editableTypes.number\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputNumber\r\n *ngVar=\"col.editable.data as numberData\"\r\n [formControl]=\"$any(control)\"\r\n [mode]=\"numberData.mode\"\r\n [minFractionDigits]=\"numberData.minFractionDigits\"\r\n [maxFractionDigits]=\"numberData.maxFractionDigits\"\r\n [currency]=\"numberData.currency\"\r\n [useGrouping]=\"numberData.useGrouping\"\r\n [allowEmpty]=\"numberData.allowEmpty\"\r\n [showClear]=\"numberData.showClear\"\r\n [showButtons]=\"numberData.showButtons\"\r\n [prefix]=\"numberData.prefix\"\r\n [suffix]=\"numberData.suffix\">\r\n </p-inputNumber>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT SWITCH -->\r\n <ng-container *ngSwitchCase=\"editableTypes.switch\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputSwitch [formControl]=\"$any(control)\"></p-inputSwitch>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT AREA -->\r\n <ng-container *ngSwitchCase=\"editableTypes.area\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <textarea pInputTextarea type=\"text\" [formControl]=\"$any(control)\" [rows]=\"$any(col.editable.data).rows\" required style=\"width: 100%;\"></textarea>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT DROPDOWN -->\r\n <ng-container *ngSwitchCase=\"editableTypes.dropdown\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-select appendTo=\"body\" [formControl]=\"$any(control)\" styleClass=\"w-full\" [options]=\"col.editable.data | editableSource\" optionLabel=\"name\" dataKey=\"id\" [placeholder]=\"$any(col.editable.data).placeholder\" [showClear]=\"!col.editable.validatorsPreset?.isRequired\" [filter]=\"true\"></p-select>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT CALENDAR -->\r\n <ng-container *ngSwitchCase=\"editableTypes.calendar\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-datepicker [formControl]=\"$any(control)\" appendTo=\"body\" styleClass=\"w-full\" [ngClass]=\"{ 'pl-5': !control.valid }\"></p-datepicker>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- CELULAR COM CONTE\u00DADO -->\r\n <ng-template pTemplate=\"output\">\r\n <smz-table-content\r\n [col]=\"col\"\r\n [pTooltip]=\"col.content.tooltip != null ? col.content.tooltip(item) : null\"\r\n tooltipPosition=\"left\"\r\n [ngClass]=\"col.content.contentStyleClass\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\">\r\n </smz-table-content>\r\n </ng-template>\r\n </p-cellEditor>\r\n\r\n </td>\r\n\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable\">\r\n\r\n <td [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n\r\n <div class=\"grid grid-nogutter items-center justify-center\">\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else menuTemplate\">\r\n <div class=\"w-full\">\r\n <p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #menuTemplate>\r\n\r\n <!-- SEM EDITAR -->\r\n <ng-container *ngIf=\"!editing\">\r\n <button *ngIf=\"context.state.editable.update.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-pencil\" (click)=\"editableService.onRowEditInit(item)\" class=\"p-button-rounded p-button-text mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.update.isButtonDisabled || (!context.state.editable.update.condition(item))\" pInitEditableRow></button>\r\n <button *ngIf=\"context.state.editable.remove.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-trash\" (click)=\"editableService.onRowRemove($event, table, item)\" class=\"p-button-rounded p-button-text p-button-secondary mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.remove.isButtonDisabled || (!context.state.editable.remove.condition(item))\"></button>\r\n </ng-container>\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"editing\">\r\n\r\n <ng-container *ngIf=\"editableService.context[item.id] as editableContext\">\r\n <!-- COM LOADING -->\r\n <ng-container *ngIf=\"editableContext.isLoading\">\r\n <button pButton type=\"button\" icon=\"fa-solid fa-rotate fa-spin\" [disabled]=\"true\" class=\"p-button-rounded p-button-text p-button-info mr-2\"></button>\r\n </ng-container>\r\n\r\n <!-- SEM LOADING -->\r\n <ng-container *ngIf=\"!editableContext.isLoading\">\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"!editableContext.hasErrors\">\r\n\r\n <!-- CRIANDO -->\r\n <ng-container *ngIf=\"item._context?.isCreating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowCreateSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n <!-- ATUALIZANDO -->\r\n <ng-container *ngIf=\"item._context?.isUpdating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowEditSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- COM ERRORS -->\r\n <ng-container *ngIf=\"editableContext.hasErrors\">\r\n <p-overlayPanel #errorsOverlay appendTo=\"body\" [style]=\"{ width: '450px' }\">\r\n <ng-template pTemplate>\r\n <div [innerHtml]=\"editableContext.errors | contentErrors\"></div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n <button pButton type=\"button\" icon=\"fas fa-exclamation-triangle\" [disabled]=\"false\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger mr-2\" (click)=\"errorsOverlay.toggle($event)\"></button>\r\n\r\n <!-- CRIANDO -->\r\n <button *ngIf=\"item._context?.isCreating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n <!-- ATUALIZANDO -->\r\n <button *ngIf=\"item._context?.isUpdating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <!-- CUSTOM MENU -->\r\n <ng-container *ngIf=\"context.state.actions.customActions.isVisible && !editing\">\r\n <ng-container *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- MENU -->\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible && !editing\">\r\n <smz-menu [callback]=\"context.state.actions.menu.callback\" [items]=\"context.state.actions.menu.items\" [data]=\"item\" [behavior]=\"context.state.actions.menu.behavior\" [ngClass]=\"{ 'ml-2': context.state.actions.customActions.isVisible }\" [icon]=\"context.state.actions.menu.styles.icon\" [styleClass]=\"context.state.actions.menu.styles.styleClass\" [buttonClass]=\"context.state.actions.menu.styles.buttonClass\"></smz-menu>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n\r\n </ng-container>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"item?._isExpanded\">\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"rowContentTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\" [ngStyle]=\"{ 'text-align': 'center' }\">\r\n <div [innerHtml]=\"context.state.emptyFeedback.message\"></div>\r\n <ng-container *ngIf=\"context.state.caption.clearFilters.isButtonVisible && hasFilters()\">\r\n <button pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined mt-3\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\"></button>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-template>\r\n\r\n</ng-container>\r\n\r\n<ng-template #noStateTemplate>\r\n <ng-container *ngIf=\"emptyStateTemplate != null\">\r\n <ng-container *ngTemplateOutlet=\"emptyStateTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-container>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i8$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8$1.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i8$1.ResizableColumn, selector: "[pResizableColumn]", inputs: ["pResizableColumnDisabled"] }, { kind: "component", type: i8$1.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i8$1.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i8$1.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i8$1.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i8$1.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i8$1.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i4$2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "component", type: i4$6.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i3$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i2$1.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TableItemActionsDirective, selector: "[tableItemAction]", inputs: ["isClickable", "item", "callback", "expandRowOnClick"] }, { kind: "directive", type: ClickStopPropagationDirective, selector: "[clickStopPropagation]" }, { kind: "component", type: SmzDataInfoComponent, selector: "smz-data-info", inputs: ["image", "message", "actions", "callbackInfo", "callbackLabel"], outputs: ["clicked"] }, { kind: "directive", type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i19.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i4$5.OverlayPanel, selector: "p-overlayPanel, p-overlaypanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i21.InputSwitch, selector: "p-inputSwitch, p-inputswitch", inputs: ["style", "styleClass", "tabindex", "inputId", "name", "disabled", "readonly", "trueValue", "falseValue", "ariaLabel", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "component", type: i4$3.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: SmzMenuComponent, selector: "smz-menu", inputs: ["items", "callback", "data", "buttonClass", "styleClass", "icon", "behavior"] }, { kind: "component", type: i24.ToggleButton, selector: "p-toggleButton, p-togglebutton, p-toggle-button", inputs: ["onLabel", "offLabel", "onIcon", "offIcon", "ariaLabel", "ariaLabelledBy", "disabled", "style", "styleClass", "inputId", "tabindex", "size", "iconPos", "autofocus", "allowEmpty"], outputs: ["onChange"] }, { kind: "directive", type: NgVar, selector: "[ngVar]", inputs: ["ngVar"] }, { kind: "component", type: i26.IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "component", type: i27.InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "component", type: SmzColumnFilterComponent, selector: "smz-column-filter", inputs: ["currency", "display", "field", "matchMode", "showAddButton", "showMatchModes", "showOperator", "type", "showTime"] }, { kind: "component", type: SmzTableValidationMessagesComponent, selector: "smz-table-validation-messages", inputs: ["errors", "messages", "isFormInvalid", "isFormDirty"] }, { kind: "component", type: SmzTableContentComponent, selector: "smz-table-content", inputs: ["col", "contentTypes", "item", "rowIndex", "contentTemplate"] }, { kind: "component", type: SmzTableCaptionButtonsComponent, selector: "smz-table-caption-buttons", inputs: ["buttons"] }, { kind: "component", type: SmzTableHeaderActionsComponent, selector: "smz-table-header-actions", inputs: ["col"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: UniqueFilterPipe, name: "uniqueFilter" }, { kind: "pipe", type: SmzTableContextPipe, name: "tableContext" }, { kind: "pipe", type: SmzFilterObjectPipe, name: "filterObject" }, { kind: "pipe", type: SmzCloneTableItemsPipe, name: "cloneTableItems" }, { kind: "pipe", type: SmzEditableSourcePipe, name: "editableSource" }, { kind: "pipe", type: SmzContentErrorsPipe, name: "contentErrors" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
16710
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: SmzTableComponent, isStandalone: false, selector: "smz-ui-table", inputs: { state: "state", items: "items", loading: "loading" }, outputs: { selectionChange: "selectionChange", filterChange: "filterChange", columnVisibilityChange: "columnVisibilityChange", create: "create", update: "update", delete: "delete" }, providers: [TableEditableService, TableFormsService], queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "table", first: true, predicate: ["dt"], descendants: true }, { propertyName: "columnMultiselect", first: true, predicate: ["columnMultiselect"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state | tableContext as context; else noStateTemplate\">\r\n\r\n <ng-container *ngIf=\"(context.state.emptyFeedback != null && (context.state.emptyFeedback.extraInfo || context.state.emptyFeedback.image || context.state.emptyFeedback.actionButtons)) && (items != null && items.length === 0) && context.state.emptyFeedback.isFeatured; else tableTemplate\">\r\n <smz-data-info\r\n [image]=\"context.state.emptyFeedback.image\"\r\n [message]=\"context.state.emptyFeedback.message\"\r\n [callbackInfo]=\"context.state.emptyFeedback.extraInfo\"\r\n [actions]=\"context.state.emptyFeedback.actionButtons\">\r\n\r\n <ng-template pTemplate=\"actions\">\r\n <ng-container *ngTemplateOutlet=\"emptyActionsTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-template>\r\n\r\n </smz-data-info>\r\n </ng-container>\r\n\r\n <ng-template #tableTemplate>\r\n\r\n <ng-container *ngVar=\"state.source?.items$ != null ? (state.source.items$ | async) : null as source\">\r\n\r\n <ng-container *ngIf=\"(source ?? items | cloneTableItems : context: tableKey: context.state.rowExpansion.sincronize) as clonedData\">\r\n <p-table #dt\r\n dataKey=\"id\"\r\n editMode=\"row\"\r\n [stripedRows]=\"context.state.styles.striped\"\r\n [value]=\"clonedData.items\"\r\n [(selection)]=\"selectedItems\"\r\n [tableStyleClass]=\"context.state.styles.tableStyleClass\"\r\n [styleClass]=\"'p-datatable-smz-ui-table' + (context.state.styles.showGrid ? ' p-datatable-gridlines' : '') + (context.state.styles.size === 'extra-small' ? ' p-datatable-xs' : '') + (context.state.styles.size === 'small' ? ' p-datatable-sm' : '') + (context.state.styles.size === 'large' ? ' p-datatable-lg' : '')\"\r\n [rowHover]=\"context.state.actions.rowBehavior.hoverable\"\r\n [rows]=\"context.state.pagination.rows\"\r\n [showCurrentPageReport]=\"context.state.pagination.pageReport.isVisible\"\r\n [rowsPerPageOptions]=\"context.state.pagination.rowsPerPageOptions\"\r\n [loading]=\"loading\"\r\n [paginator]=\"context.state.pagination.isVisible\"\r\n paginatorDropdownAppendTo=\"body\"\r\n [currentPageReportTemplate]=\"context.state.locale.paginator.template\"\r\n [sortField]=\"context.state.sort.field\"\r\n [sortMode]=\"context.state.sort.mode\"\r\n [sortOrder]=\"context.state.sort.order\"\r\n [multiSortMeta]=\"context.state.sort.multiSortMeta\"\r\n\r\n [scrollable]=\"context.state.viewport.scrollable\"\r\n [scrollHeight]=\"context.state.viewport.scrollHeight\"\r\n [scrollDirection]=\"context.state.viewport.scrollDirection\"\r\n\r\n [filterDelay]=\"0\"\r\n [globalFilterFields]=\"context.globalFilter\"\r\n\r\n [columns]=\"context.visibleColumns\"\r\n [frozenColumns]=\"context.frozenColumns\"\r\n [frozenWidth]=\"context.state.frozen.isEnabled ? context.state.frozen.width : null\"\r\n [resizableColumns]=\"context.state.viewport.resizableColumns\"\r\n [columnResizeMode]=\"context.state.viewport.columnResizeMode\"\r\n\r\n (onPage)=\"onPage($event)\"\r\n (onFilter)=\"onFilter($event)\"\r\n (selectionChange)=\"emitSelection($event)\"\r\n >\r\n\r\n <ng-template pTemplate=\"caption\" *ngIf=\"context.state.caption.isVisible\">\r\n\r\n <div class=\"grid grid-nogutter items-center gap-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <div *ngIf=\"context.state.caption.title != null\" class=\"col database-title\" [innerHTML]=\"context.state.caption.title\"></div>\r\n <ng-container *ngTemplateOutlet=\"captionTemplate; context: { $implicit: dt }\"></ng-container>\r\n\r\n <smz-table-caption-buttons [buttons]=\"context.state.caption.buttons\"></smz-table-caption-buttons>\r\n\r\n <button *ngIf=\"context.state.caption.exportToPdf.isButtonVisible\" pButton [label]=\"context.state.locale.exportToPdf.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-pdf\" (click)=\"exportToPdf(context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.exportToExcel.isButtonVisible\" pButton [label]=\"context.state.locale.exportToExcel.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-excel\" (click)=\"exportToExcel(table, context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.editable.creation.isButtonVisible\" pButton [label]=\"context.state.editable.creation.buttonLabel\" class=\"p-button-outlined\" icon=\"fa-solid fa-plus\" (click)=\"editableService.onRowCreateInit(table, context.columns)\" [disabled]=\"clonedData.showSkeleton || editableService.isEditing || editableService.isCreating || context.state.editable.creation.isButtonDisabled\"></button>\r\n <button *ngIf=\"context.state.caption.rowSelection.isButtonVisible\" pButton [label]=\"context.state.locale.rowSelection.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-check-double\" (click)=\"onRowSelection(context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.clearFilters.isButtonVisible\" pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n\r\n <p-multiSelect\r\n #columnMultiselect\r\n *ngIf=\"context.state.caption.columnVisibility.showDropdownSelector\"\r\n class=\"ml-2 col-12 md:col-2\"\r\n styleClass=\"w-full\"\r\n [options]=\"context.hideableColumns\"\r\n [(ngModel)]=\"selectedColumns\"\r\n [placeholder]=\"context.state.locale.columnVisibility.placeholder\"\r\n [selectedItemsLabel]=\"context.state.locale.columnVisibility.selectedItemsLabel\"\r\n optionLabel=\"name\"\r\n dataKey=\"field\"\r\n optionLabel=\"header\"\r\n [filter]=\"true\"\r\n (onPanelHide)=\"updateColumnsVisibility(true)\"\r\n [pTooltip]=\"context.state.locale.columnVisibility.pTooltip\">\r\n </p-multiSelect>\r\n\r\n <p-iconfield *ngIf=\"context.state.caption.globalFilter.isVisible\" class=\"col-12\" [ngClass]=\"{ 'md:col-2': !context.state.caption.globalFilter.expanded }\">\r\n <p-inputicon styleClass=\"pi pi-search\" />\r\n <input #inputGlobal [(ngModel)]=\"globalSearchInput\" pInputText type=\"text\" styleClass=\"database-global-search\" (input)=\"updateGlobalFilter(inputGlobal.value)\" [disabled]=\"clonedData.showSkeleton\" [placeholder]=\"context.state.locale.globalFilter.placeholder\" />\r\n </p-iconfield>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"toolbarTemplate != null\" class=\"grid grid-nogutter items-center mt-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <ng-container *ngTemplateOutlet=\"toolbarTemplate; context: { $implicit: dt }\"></ng-container>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr [ngClass]=\"{ 'invisible-header': !context.state.header.isVisible }\">\r\n\r\n <th *ngIf=\"context.state.caption.rowSelection.isEnabled\" [ngStyle]=\"context.state.caption.rowSelection.ngStyle\">\r\n <ng-container *ngIf=\"!context.state.actions.batchActions.isVisible\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </ng-container>\r\n </th>\r\n\r\n <th *ngIf=\"context.state.rowExpansion.isEnabled\" [ngStyle]=\"context.state.rowExpansion.ngStyle\"></th>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"context.state.viewport.resizableColumns; else nonResizable\">\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #nonResizable>\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #headerContent>\r\n <div class=\"flex justify-start items-center\">\r\n <span class=\"mr-1\">{{ col.header }}</span>\r\n\r\n <smz-table-header-actions clickStopPropagation class=\"ml-1 mt-1\" *ngIf=\"col.showHeaderActions\" [col]=\"col\"></smz-table-header-actions>\r\n\r\n <p-sortIcon [field]=\"col.sortField\" *ngIf=\"!clonedData.showSkeleton && col.isOrderable\"></p-sortIcon>\r\n\r\n <ng-container *ngIf=\"!clonedData.showSkeleton\">\r\n <ng-container [ngSwitch]=\"col.filter.type\">\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.currency\">\r\n <smz-column-filter type=\"numeric\" currency=\"BRL\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.numeric\">\r\n <smz-column-filter type=\"numeric\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.date\">\r\n <smz-column-filter type=\"date\" [field]=\"col.filterField\" [showTime]=\"col.filter.showTime\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.text\">\r\n <smz-column-filter type=\"text\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.boolean\">\r\n <smz-column-filter type=\"boolean\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.dropdown\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField + '.id'\" matchMode=\"dropdown\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-select appendTo=\"body\" [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-select>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"in\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_array\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"array-some\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : true\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_string\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"multiselectByString\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField : filterField : null : true : false : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button *ngIf=\"context.state.caption.columnVisibility.showColumnHideButton\" pButton type=\"button\" icon=\"fa-solid fa-eye-slash\" class=\"p-button-rounded p-button-text p-button-plain\" (click)=\"hideColumn(col, context)\"></button>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <th *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible|| context.state.editable.isEditable\" [ngStyle]=\"context.state.editable.isEditable ? context.state.editable.ngStyle : context.state.actions.customActions.ngStyle\"></th>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"context.state.actions.batchActions.isVisible\">\r\n <th [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\"\r\n [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n <div class=\"grid grid-nogutter items-center justify-start\">\r\n <p-tableHeaderCheckbox class=\"mr-4\"></p-tableHeaderCheckbox>\r\n <ng-container *ngIf=\"selectedItems?.length > 0\">\r\n <ng-container *ngFor=\"let batchItem of context.state.actions.batchActions.items\">\r\n <button *ngIf=\"batchItem.visible\" pButton [label]=\"batchItem.label\" class=\"p-button-rounded p-button-text p-button-plain animate__animated animate__fadeIn\" [ngClass]=\"batchItem.styleClass\" [icon]=\"batchItem.icon\" (click)=\"batchItem.command(selectedItems); selectedItems = [];\" [disabled]=\"batchItem.disabled\" [pTooltip]=\"batchItem.tooltip\"></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-item let-editing=\"editing\" let-rowIndex=\"rowIndex\" let-columns=\"columns\">\r\n <tr #editableRowElement\r\n [pEditableRow]=\"item\"\r\n tableItemAction\r\n [isClickable]=\"context.state.actions.rowBehavior.isClickable\"\r\n [callback]=\"context.state.actions.rowBehavior.clickCallback\"\r\n [expandRowOnClick]=\"context.state.actions.rowBehavior.expandRowOnClick\"\r\n [item]=\"item\"\r\n class=\"p-selectable-row\"\r\n [ngClass]=\"{ 'highlight-row': item?.id === state.actions.rowBehavior.highlights, 'preserve-in-small': state.actions.rowBehavior.preserveLayoutInSmallDevices }\"\r\n >\r\n\r\n <td *ngIf=\"context.state.caption.rowSelection.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\"\r\n [ngStyle]=\"context.state.caption.rowSelection.ngStyle\"\r\n >\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n\r\n <td *ngIf=\"context.state.rowExpansion.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading, 'grid grid-nogutter justify-start items-center gap-2': context.state.rowExpansion.highlightNewItems && item._isNew }\"\r\n [ngStyle]=\"context.state.rowExpansion.ngStyle\"\r\n >\r\n <p-toggleButton [(ngModel)]=\"item._isExpanded\" [onIcon]=\"'fa-solid fa-chevron-down'\" [offIcon]=\"'fa-solid fa-chevron-right'\" (onChange)=\"item._isNew = false\"></p-toggleButton>\r\n <div *ngIf=\"context.state.rowExpansion.highlightNewItems && item._isNew\" class=\"rounded bg-cyan-400 text-sm text-white px-2 py-0 smz-table-new-tag\" (click)=\"item._isNew = false\">{{ context.state.rowExpansion.highlightLabel }}</div>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else dataTemplate\">\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngStyle]=\"col.content.ngStyle\"><p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton></td>\r\n </ng-container>\r\n\r\n <ng-template #dataTemplate>\r\n\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\" [ngStyle]=\"col.content.ngStyle\">\r\n <span class=\"p-column-title\">{{ col.header }}</span>\r\n\r\n <p-cellEditor>\r\n\r\n <!-- CELULAR COM EDITOR -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.editable.type\">\r\n <ng-container *ngSwitchCase=\"editableTypes.none\">\r\n <smz-table-content class=\"cursor-default\" [ngClass]=\"col.content.contentStyleClass\" [col]=\"col\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\"></smz-table-content>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"editableTypes.custom\">\r\n <ng-container *ngTemplateOutlet=\"editableTemplate; context: { $implicit: item, col: col }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT -->\r\n <ng-container *ngSwitchCase=\"editableTypes.text\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <input pInputText type=\"text\" [formControl]=\"$any(control)\" style=\"width: 100%;\">\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT NUMBER -->\r\n <ng-container *ngSwitchCase=\"editableTypes.number\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputNumber\r\n *ngVar=\"col.editable.data as numberData\"\r\n [formControl]=\"$any(control)\"\r\n [mode]=\"numberData.mode\"\r\n [minFractionDigits]=\"numberData.minFractionDigits\"\r\n [maxFractionDigits]=\"numberData.maxFractionDigits\"\r\n [currency]=\"numberData.currency\"\r\n [useGrouping]=\"numberData.useGrouping\"\r\n [allowEmpty]=\"numberData.allowEmpty\"\r\n [showClear]=\"numberData.showClear\"\r\n [showButtons]=\"numberData.showButtons\"\r\n [prefix]=\"numberData.prefix\"\r\n [suffix]=\"numberData.suffix\">\r\n </p-inputNumber>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT SWITCH -->\r\n <ng-container *ngSwitchCase=\"editableTypes.switch\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputSwitch [formControl]=\"$any(control)\"></p-inputSwitch>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT AREA -->\r\n <ng-container *ngSwitchCase=\"editableTypes.area\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <textarea pInputTextarea type=\"text\" [formControl]=\"$any(control)\" [rows]=\"$any(col.editable.data).rows\" required style=\"width: 100%;\"></textarea>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT DROPDOWN -->\r\n <ng-container *ngSwitchCase=\"editableTypes.dropdown\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-select appendTo=\"body\" [formControl]=\"$any(control)\" styleClass=\"w-full\" [options]=\"col.editable.data | editableSource\" optionLabel=\"name\" dataKey=\"id\" [placeholder]=\"$any(col.editable.data).placeholder\" [showClear]=\"!col.editable.validatorsPreset?.isRequired\" [filter]=\"true\"></p-select>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT CALENDAR -->\r\n <ng-container *ngSwitchCase=\"editableTypes.calendar\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-datepicker [formControl]=\"$any(control)\" appendTo=\"body\" styleClass=\"w-full\" [ngClass]=\"{ 'pl-5': !control.valid }\"></p-datepicker>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- CELULAR COM CONTE\u00DADO -->\r\n <ng-template pTemplate=\"output\">\r\n <smz-table-content\r\n [col]=\"col\"\r\n [pTooltip]=\"col.content.tooltip != null ? col.content.tooltip(item) : null\"\r\n tooltipPosition=\"left\"\r\n [ngClass]=\"col.content.contentStyleClass\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\">\r\n </smz-table-content>\r\n </ng-template>\r\n </p-cellEditor>\r\n\r\n </td>\r\n\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable\">\r\n\r\n <td [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n\r\n <div class=\"grid grid-nogutter items-center justify-center\">\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else menuTemplate\">\r\n <div class=\"w-full\">\r\n <p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #menuTemplate>\r\n\r\n <!-- SEM EDITAR -->\r\n <ng-container *ngIf=\"!editing\">\r\n <button *ngIf=\"context.state.editable.update.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-pencil\" (click)=\"editableService.onRowEditInit(item)\" class=\"p-button-rounded p-button-text mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.update.isButtonDisabled || (!context.state.editable.update.condition(item))\" pInitEditableRow></button>\r\n <button *ngIf=\"context.state.editable.remove.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-trash\" (click)=\"editableService.onRowRemove($event, table, item)\" class=\"p-button-rounded p-button-text p-button-secondary mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.remove.isButtonDisabled || (!context.state.editable.remove.condition(item))\"></button>\r\n </ng-container>\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"editing\">\r\n\r\n <ng-container *ngIf=\"editableService.context[item.id] as editableContext\">\r\n <!-- COM LOADING -->\r\n <ng-container *ngIf=\"editableContext.isLoading\">\r\n <button pButton type=\"button\" icon=\"fa-solid fa-rotate fa-spin\" [disabled]=\"true\" class=\"p-button-rounded p-button-text p-button-info mr-2\"></button>\r\n </ng-container>\r\n\r\n <!-- SEM LOADING -->\r\n <ng-container *ngIf=\"!editableContext.isLoading\">\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"!editableContext.hasErrors\">\r\n\r\n <!-- CRIANDO -->\r\n <ng-container *ngIf=\"item._context?.isCreating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowCreateSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n <!-- ATUALIZANDO -->\r\n <ng-container *ngIf=\"item._context?.isUpdating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowEditSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- COM ERRORS -->\r\n <ng-container *ngIf=\"editableContext.hasErrors\">\r\n <p-overlayPanel #errorsOverlay appendTo=\"body\" [style]=\"{ width: '450px' }\">\r\n <ng-template pTemplate>\r\n <div [innerHtml]=\"editableContext.errors | contentErrors\"></div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n <button pButton type=\"button\" icon=\"fas fa-exclamation-triangle\" [disabled]=\"false\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger mr-2\" (click)=\"errorsOverlay.toggle($event)\"></button>\r\n\r\n <!-- CRIANDO -->\r\n <button *ngIf=\"item._context?.isCreating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n <!-- ATUALIZANDO -->\r\n <button *ngIf=\"item._context?.isUpdating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <!-- CUSTOM MENU -->\r\n <ng-container *ngIf=\"context.state.actions.customActions.isVisible && !editing\">\r\n <ng-container *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- MENU -->\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible && !editing\">\r\n <smz-menu [callback]=\"context.state.actions.menu.callback\" [items]=\"context.state.actions.menu.items\" [data]=\"item\" [behavior]=\"context.state.actions.menu.behavior\" [ngClass]=\"{ 'ml-2': context.state.actions.customActions.isVisible }\" [icon]=\"context.state.actions.menu.styles.icon\" [styleClass]=\"context.state.actions.menu.styles.styleClass\" [buttonClass]=\"context.state.actions.menu.styles.buttonClass\"></smz-menu>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n\r\n </ng-container>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"item?._isExpanded\">\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"rowContentTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\" [ngStyle]=\"{ 'text-align': 'center' }\">\r\n <div [innerHtml]=\"context.state.emptyFeedback.message\"></div>\r\n <ng-container *ngIf=\"context.state.caption.clearFilters.isButtonVisible && hasFilters()\">\r\n <button pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined mt-3\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\"></button>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-template>\r\n\r\n</ng-container>\r\n\r\n<ng-template #noStateTemplate>\r\n <ng-container *ngIf=\"emptyStateTemplate != null\">\r\n <ng-container *ngTemplateOutlet=\"emptyStateTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-container>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i8$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "virtualRowHeight", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8$1.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i8$1.ResizableColumn, selector: "[pResizableColumn]", inputs: ["pResizableColumnDisabled"] }, { kind: "component", type: i8$1.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i8$1.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i8$1.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i8$1.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i8$1.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i8$1.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i4$2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant", "fluid", "pSize"] }, { kind: "component", type: i4$6.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i3$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i2$1.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i2$2.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: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TableItemActionsDirective, selector: "[tableItemAction]", inputs: ["isClickable", "item", "callback", "expandRowOnClick"] }, { kind: "directive", type: ClickStopPropagationDirective, selector: "[clickStopPropagation]" }, { kind: "component", type: SmzDataInfoComponent, selector: "smz-data-info", inputs: ["image", "message", "actions", "callbackInfo", "callbackLabel"], outputs: ["clicked"] }, { kind: "directive", type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i19.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i4$5.OverlayPanel, selector: "p-overlayPanel, p-overlaypanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i21.InputSwitch, selector: "p-inputSwitch, p-inputswitch", inputs: ["style", "styleClass", "tabindex", "inputId", "name", "disabled", "readonly", "trueValue", "falseValue", "ariaLabel", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "component", type: i4$3.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled", "fluid"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "component", type: SmzMenuComponent, selector: "smz-menu", inputs: ["items", "callback", "data", "buttonClass", "styleClass", "icon", "behavior"] }, { kind: "component", type: i24.ToggleButton, selector: "p-toggleButton, p-togglebutton, p-toggle-button", inputs: ["onLabel", "offLabel", "onIcon", "offIcon", "ariaLabel", "ariaLabelledBy", "disabled", "style", "styleClass", "inputId", "tabindex", "size", "iconPos", "autofocus", "allowEmpty"], outputs: ["onChange"] }, { kind: "directive", type: NgVar, selector: "[ngVar]", inputs: ["ngVar"] }, { kind: "component", type: i26.IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "component", type: i27.InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "component", type: SmzColumnFilterComponent, selector: "smz-column-filter", inputs: ["currency", "display", "field", "matchMode", "showAddButton", "showMatchModes", "showOperator", "type", "showTime"] }, { kind: "component", type: SmzTableValidationMessagesComponent, selector: "smz-table-validation-messages", inputs: ["errors", "messages", "isFormInvalid", "isFormDirty"] }, { kind: "component", type: SmzTableContentComponent, selector: "smz-table-content", inputs: ["col", "contentTypes", "item", "rowIndex", "contentTemplate"] }, { kind: "component", type: SmzTableCaptionButtonsComponent, selector: "smz-table-caption-buttons", inputs: ["buttons"] }, { kind: "component", type: SmzTableHeaderActionsComponent, selector: "smz-table-header-actions", inputs: ["col"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: UniqueFilterPipe, name: "uniqueFilter" }, { kind: "pipe", type: SmzTableContextPipe, name: "tableContext" }, { kind: "pipe", type: SmzFilterObjectPipe, name: "filterObject" }, { kind: "pipe", type: SmzCloneTableItemsPipe, name: "cloneTableItems" }, { kind: "pipe", type: SmzEditableSourcePipe, name: "editableSource" }, { kind: "pipe", type: SmzContentErrorsPipe, name: "contentErrors" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
16712
16711
|
}
|
|
16713
16712
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: SmzTableComponent, decorators: [{
|
|
16714
16713
|
type: Component,
|
|
16715
|
-
args: [{ selector: 'smz-ui-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableEditableService, TableFormsService], standalone: false, template: "<ng-container *ngIf=\"state | tableContext as context; else noStateTemplate\">\r\n\r\n <ng-container *ngIf=\"(context.state.emptyFeedback != null && (context.state.emptyFeedback.extraInfo || context.state.emptyFeedback.image || context.state.emptyFeedback.actionButtons)) && (items != null && items.length === 0) && context.state.emptyFeedback.isFeatured; else tableTemplate\">\r\n <smz-data-info\r\n [image]=\"context.state.emptyFeedback.image\"\r\n [message]=\"context.state.emptyFeedback.message\"\r\n [callbackInfo]=\"context.state.emptyFeedback.extraInfo\"\r\n [actions]=\"context.state.emptyFeedback.actionButtons\">\r\n\r\n <ng-template pTemplate=\"actions\">\r\n <ng-container *ngTemplateOutlet=\"emptyActionsTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-template>\r\n\r\n </smz-data-info>\r\n </ng-container>\r\n\r\n <ng-template #tableTemplate>\r\n\r\n <ng-container *ngVar=\"state.source?.items$ != null ? (state.source.items$ | async) : null as source\">\r\n\r\n <ng-container *ngIf=\"(source ?? items | cloneTableItems : context: tableKey: context.state.rowExpansion.sincronize) as clonedData\">\r\n <p-table #dt\r\n dataKey=\"id\"\r\n editMode=\"row\"\r\n [stripedRows]=\"context.state.styles.striped\"\r\n [value]=\"clonedData.items\"\r\n [(selection)]=\"selectedItems\"\r\n [tableStyleClass]=\"context.state.styles.tableStyleClass\"\r\n [styleClass]=\"'p-datatable-smz-ui-table' + (context.state.styles.showGrid ? ' p-datatable-gridlines' : '') + (context.state.styles.size === 'extra-small' ? ' p-datatable-xs' : '') + (context.state.styles.size === 'small' ? ' p-datatable-sm' : '') + (context.state.styles.size === 'large' ? ' p-datatable-lg' : '')\"\r\n [rowHover]=\"context.state.actions.rowBehavior.hoverable\"\r\n [rows]=\"context.state.pagination.rows\"\r\n [showCurrentPageReport]=\"context.state.pagination.pageReport.isVisible\"\r\n [rowsPerPageOptions]=\"context.state.pagination.rowsPerPageOptions\"\r\n [loading]=\"loading\"\r\n [paginator]=\"context.state.pagination.isVisible\"\r\n [currentPageReportTemplate]=\"context.state.locale.paginator.template\"\r\n [sortField]=\"context.state.sort.field\"\r\n [sortMode]=\"context.state.sort.mode\"\r\n [sortOrder]=\"context.state.sort.order\"\r\n [multiSortMeta]=\"context.state.sort.multiSortMeta\"\r\n\r\n [scrollable]=\"context.state.viewport.scrollable\"\r\n [scrollHeight]=\"context.state.viewport.scrollHeight\"\r\n [scrollDirection]=\"context.state.viewport.scrollDirection\"\r\n\r\n [filterDelay]=\"0\"\r\n [globalFilterFields]=\"context.globalFilter\"\r\n\r\n [columns]=\"context.visibleColumns\"\r\n [frozenColumns]=\"context.frozenColumns\"\r\n [frozenWidth]=\"context.state.frozen.isEnabled ? context.state.frozen.width : null\"\r\n [resizableColumns]=\"context.state.viewport.resizableColumns\"\r\n [columnResizeMode]=\"context.state.viewport.columnResizeMode\"\r\n\r\n (onPage)=\"onPage($event)\"\r\n (onFilter)=\"onFilter($event)\"\r\n (selectionChange)=\"emitSelection($event)\"\r\n >\r\n\r\n <ng-template pTemplate=\"caption\" *ngIf=\"context.state.caption.isVisible\">\r\n\r\n <div class=\"grid grid-nogutter items-center gap-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <div *ngIf=\"context.state.caption.title != null\" class=\"col database-title\" [innerHTML]=\"context.state.caption.title\"></div>\r\n <ng-container *ngTemplateOutlet=\"captionTemplate; context: { $implicit: dt }\"></ng-container>\r\n\r\n <smz-table-caption-buttons [buttons]=\"context.state.caption.buttons\"></smz-table-caption-buttons>\r\n\r\n <button *ngIf=\"context.state.caption.exportToPdf.isButtonVisible\" pButton [label]=\"context.state.locale.exportToPdf.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-pdf\" (click)=\"exportToPdf(context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.exportToExcel.isButtonVisible\" pButton [label]=\"context.state.locale.exportToExcel.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-excel\" (click)=\"exportToExcel(table, context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.editable.creation.isButtonVisible\" pButton [label]=\"context.state.editable.creation.buttonLabel\" class=\"p-button-outlined\" icon=\"fa-solid fa-plus\" (click)=\"editableService.onRowCreateInit(table, context.columns)\" [disabled]=\"clonedData.showSkeleton || editableService.isEditing || editableService.isCreating || context.state.editable.creation.isButtonDisabled\"></button>\r\n <button *ngIf=\"context.state.caption.rowSelection.isButtonVisible\" pButton [label]=\"context.state.locale.rowSelection.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-check-double\" (click)=\"onRowSelection(context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.clearFilters.isButtonVisible\" pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n\r\n <p-multiSelect\r\n #columnMultiselect\r\n *ngIf=\"context.state.caption.columnVisibility.showDropdownSelector\"\r\n class=\"ml-2 col-12 md:col-2\"\r\n styleClass=\"w-full\"\r\n [options]=\"context.hideableColumns\"\r\n [(ngModel)]=\"selectedColumns\"\r\n [placeholder]=\"context.state.locale.columnVisibility.placeholder\"\r\n [selectedItemsLabel]=\"context.state.locale.columnVisibility.selectedItemsLabel\"\r\n optionLabel=\"name\"\r\n dataKey=\"field\"\r\n optionLabel=\"header\"\r\n [filter]=\"true\"\r\n (onPanelHide)=\"updateColumnsVisibility(true)\"\r\n [pTooltip]=\"context.state.locale.columnVisibility.pTooltip\">\r\n </p-multiSelect>\r\n\r\n <p-iconfield *ngIf=\"context.state.caption.globalFilter.isVisible\" class=\"col-12\" [ngClass]=\"{ 'md:col-2': !context.state.caption.globalFilter.expanded }\">\r\n <p-inputicon styleClass=\"pi pi-search\" />\r\n <input #inputGlobal [(ngModel)]=\"globalSearchInput\" pInputText type=\"text\" styleClass=\"database-global-search\" (input)=\"updateGlobalFilter(inputGlobal.value)\" [disabled]=\"clonedData.showSkeleton\" [placeholder]=\"context.state.locale.globalFilter.placeholder\" />\r\n </p-iconfield>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"toolbarTemplate != null\" class=\"grid grid-nogutter items-center mt-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <ng-container *ngTemplateOutlet=\"toolbarTemplate; context: { $implicit: dt }\"></ng-container>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr [ngClass]=\"{ 'invisible-header': !context.state.header.isVisible }\">\r\n\r\n <th *ngIf=\"context.state.caption.rowSelection.isEnabled\" [ngStyle]=\"context.state.caption.rowSelection.ngStyle\">\r\n <ng-container *ngIf=\"!context.state.actions.batchActions.isVisible\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </ng-container>\r\n </th>\r\n\r\n <th *ngIf=\"context.state.rowExpansion.isEnabled\" [ngStyle]=\"context.state.rowExpansion.ngStyle\"></th>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"context.state.viewport.resizableColumns; else nonResizable\">\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #nonResizable>\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #headerContent>\r\n <div class=\"flex justify-start items-center\">\r\n <span class=\"mr-1\">{{ col.header }}</span>\r\n\r\n <smz-table-header-actions clickStopPropagation class=\"ml-1 mt-1\" *ngIf=\"col.showHeaderActions\" [col]=\"col\"></smz-table-header-actions>\r\n\r\n <p-sortIcon [field]=\"col.sortField\" *ngIf=\"!clonedData.showSkeleton && col.isOrderable\"></p-sortIcon>\r\n\r\n <ng-container *ngIf=\"!clonedData.showSkeleton\">\r\n <ng-container [ngSwitch]=\"col.filter.type\">\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.currency\">\r\n <smz-column-filter type=\"numeric\" currency=\"BRL\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.numeric\">\r\n <smz-column-filter type=\"numeric\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.date\">\r\n <smz-column-filter type=\"date\" [field]=\"col.filterField\" [showTime]=\"col.filter.showTime\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.text\">\r\n <smz-column-filter type=\"text\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.boolean\">\r\n <smz-column-filter type=\"boolean\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.dropdown\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField + '.id'\" matchMode=\"dropdown\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-select appendTo=\"body\" [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-select>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"in\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_array\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"array-some\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : true\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_string\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"multiselectByString\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField : filterField : null : true : false : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button *ngIf=\"context.state.caption.columnVisibility.showColumnHideButton\" pButton type=\"button\" icon=\"fa-solid fa-eye-slash\" class=\"p-button-rounded p-button-text p-button-plain\" (click)=\"hideColumn(col, context)\"></button>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <th *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible|| context.state.editable.isEditable\" [ngStyle]=\"context.state.editable.isEditable ? context.state.editable.ngStyle : context.state.actions.customActions.ngStyle\"></th>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"context.state.actions.batchActions.isVisible\">\r\n <th [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\"\r\n [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n <div class=\"grid grid-nogutter items-center justify-start\">\r\n <p-tableHeaderCheckbox class=\"mr-4\"></p-tableHeaderCheckbox>\r\n <ng-container *ngIf=\"selectedItems?.length > 0\">\r\n <ng-container *ngFor=\"let batchItem of context.state.actions.batchActions.items\">\r\n <button *ngIf=\"batchItem.visible\" pButton [label]=\"batchItem.label\" class=\"p-button-rounded p-button-text p-button-plain animate__animated animate__fadeIn\" [ngClass]=\"batchItem.styleClass\" [icon]=\"batchItem.icon\" (click)=\"batchItem.command(selectedItems); selectedItems = [];\" [disabled]=\"batchItem.disabled\" [pTooltip]=\"batchItem.tooltip\"></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-item let-editing=\"editing\" let-rowIndex=\"rowIndex\" let-columns=\"columns\">\r\n <tr #editableRowElement\r\n [pEditableRow]=\"item\"\r\n tableItemAction\r\n [isClickable]=\"context.state.actions.rowBehavior.isClickable\"\r\n [callback]=\"context.state.actions.rowBehavior.clickCallback\"\r\n [expandRowOnClick]=\"context.state.actions.rowBehavior.expandRowOnClick\"\r\n [item]=\"item\"\r\n class=\"p-selectable-row\"\r\n [ngClass]=\"{ 'highlight-row': item?.id === state.actions.rowBehavior.highlights, 'preserve-in-small': state.actions.rowBehavior.preserveLayoutInSmallDevices }\"\r\n >\r\n\r\n <td *ngIf=\"context.state.caption.rowSelection.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\"\r\n [ngStyle]=\"context.state.caption.rowSelection.ngStyle\"\r\n >\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n\r\n <td *ngIf=\"context.state.rowExpansion.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading, 'grid grid-nogutter justify-start items-center gap-2': context.state.rowExpansion.highlightNewItems && item._isNew }\"\r\n [ngStyle]=\"context.state.rowExpansion.ngStyle\"\r\n >\r\n <p-toggleButton [(ngModel)]=\"item._isExpanded\" [onIcon]=\"'fa-solid fa-chevron-down'\" [offIcon]=\"'fa-solid fa-chevron-right'\" (onChange)=\"item._isNew = false\"></p-toggleButton>\r\n <div *ngIf=\"context.state.rowExpansion.highlightNewItems && item._isNew\" class=\"rounded bg-cyan-400 text-sm text-white px-2 py-0 smz-table-new-tag\" (click)=\"item._isNew = false\">{{ context.state.rowExpansion.highlightLabel }}</div>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else dataTemplate\">\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngStyle]=\"col.content.ngStyle\"><p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton></td>\r\n </ng-container>\r\n\r\n <ng-template #dataTemplate>\r\n\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\" [ngStyle]=\"col.content.ngStyle\">\r\n <span class=\"p-column-title\">{{ col.header }}</span>\r\n\r\n <p-cellEditor>\r\n\r\n <!-- CELULAR COM EDITOR -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.editable.type\">\r\n <ng-container *ngSwitchCase=\"editableTypes.none\">\r\n <smz-table-content class=\"cursor-default\" [ngClass]=\"col.content.contentStyleClass\" [col]=\"col\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\"></smz-table-content>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"editableTypes.custom\">\r\n <ng-container *ngTemplateOutlet=\"editableTemplate; context: { $implicit: item, col: col }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT -->\r\n <ng-container *ngSwitchCase=\"editableTypes.text\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <input pInputText type=\"text\" [formControl]=\"$any(control)\" style=\"width: 100%;\">\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT NUMBER -->\r\n <ng-container *ngSwitchCase=\"editableTypes.number\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputNumber\r\n *ngVar=\"col.editable.data as numberData\"\r\n [formControl]=\"$any(control)\"\r\n [mode]=\"numberData.mode\"\r\n [minFractionDigits]=\"numberData.minFractionDigits\"\r\n [maxFractionDigits]=\"numberData.maxFractionDigits\"\r\n [currency]=\"numberData.currency\"\r\n [useGrouping]=\"numberData.useGrouping\"\r\n [allowEmpty]=\"numberData.allowEmpty\"\r\n [showClear]=\"numberData.showClear\"\r\n [showButtons]=\"numberData.showButtons\"\r\n [prefix]=\"numberData.prefix\"\r\n [suffix]=\"numberData.suffix\">\r\n </p-inputNumber>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT SWITCH -->\r\n <ng-container *ngSwitchCase=\"editableTypes.switch\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputSwitch [formControl]=\"$any(control)\"></p-inputSwitch>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT AREA -->\r\n <ng-container *ngSwitchCase=\"editableTypes.area\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <textarea pInputTextarea type=\"text\" [formControl]=\"$any(control)\" [rows]=\"$any(col.editable.data).rows\" required style=\"width: 100%;\"></textarea>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT DROPDOWN -->\r\n <ng-container *ngSwitchCase=\"editableTypes.dropdown\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-select appendTo=\"body\" [formControl]=\"$any(control)\" styleClass=\"w-full\" [options]=\"col.editable.data | editableSource\" optionLabel=\"name\" dataKey=\"id\" [placeholder]=\"$any(col.editable.data).placeholder\" [showClear]=\"!col.editable.validatorsPreset?.isRequired\" [filter]=\"true\"></p-select>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT CALENDAR -->\r\n <ng-container *ngSwitchCase=\"editableTypes.calendar\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-datepicker [formControl]=\"$any(control)\" appendTo=\"body\" styleClass=\"w-full\" [ngClass]=\"{ 'pl-5': !control.valid }\"></p-datepicker>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- CELULAR COM CONTE\u00DADO -->\r\n <ng-template pTemplate=\"output\">\r\n <smz-table-content\r\n [col]=\"col\"\r\n [pTooltip]=\"col.content.tooltip != null ? col.content.tooltip(item) : null\"\r\n tooltipPosition=\"left\"\r\n [ngClass]=\"col.content.contentStyleClass\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\">\r\n </smz-table-content>\r\n </ng-template>\r\n </p-cellEditor>\r\n\r\n </td>\r\n\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable\">\r\n\r\n <td [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n\r\n <div class=\"grid grid-nogutter items-center justify-center\">\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else menuTemplate\">\r\n <div class=\"w-full\">\r\n <p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #menuTemplate>\r\n\r\n <!-- SEM EDITAR -->\r\n <ng-container *ngIf=\"!editing\">\r\n <button *ngIf=\"context.state.editable.update.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-pencil\" (click)=\"editableService.onRowEditInit(item)\" class=\"p-button-rounded p-button-text mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.update.isButtonDisabled || (!context.state.editable.update.condition(item))\" pInitEditableRow></button>\r\n <button *ngIf=\"context.state.editable.remove.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-trash\" (click)=\"editableService.onRowRemove($event, table, item)\" class=\"p-button-rounded p-button-text p-button-secondary mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.remove.isButtonDisabled || (!context.state.editable.remove.condition(item))\"></button>\r\n </ng-container>\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"editing\">\r\n\r\n <ng-container *ngIf=\"editableService.context[item.id] as editableContext\">\r\n <!-- COM LOADING -->\r\n <ng-container *ngIf=\"editableContext.isLoading\">\r\n <button pButton type=\"button\" icon=\"fa-solid fa-rotate fa-spin\" [disabled]=\"true\" class=\"p-button-rounded p-button-text p-button-info mr-2\"></button>\r\n </ng-container>\r\n\r\n <!-- SEM LOADING -->\r\n <ng-container *ngIf=\"!editableContext.isLoading\">\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"!editableContext.hasErrors\">\r\n\r\n <!-- CRIANDO -->\r\n <ng-container *ngIf=\"item._context?.isCreating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowCreateSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n <!-- ATUALIZANDO -->\r\n <ng-container *ngIf=\"item._context?.isUpdating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowEditSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- COM ERRORS -->\r\n <ng-container *ngIf=\"editableContext.hasErrors\">\r\n <p-overlayPanel #errorsOverlay appendTo=\"body\" [style]=\"{ width: '450px' }\">\r\n <ng-template pTemplate>\r\n <div [innerHtml]=\"editableContext.errors | contentErrors\"></div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n <button pButton type=\"button\" icon=\"fas fa-exclamation-triangle\" [disabled]=\"false\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger mr-2\" (click)=\"errorsOverlay.toggle($event)\"></button>\r\n\r\n <!-- CRIANDO -->\r\n <button *ngIf=\"item._context?.isCreating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n <!-- ATUALIZANDO -->\r\n <button *ngIf=\"item._context?.isUpdating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <!-- CUSTOM MENU -->\r\n <ng-container *ngIf=\"context.state.actions.customActions.isVisible && !editing\">\r\n <ng-container *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- MENU -->\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible && !editing\">\r\n <smz-menu [callback]=\"context.state.actions.menu.callback\" [items]=\"context.state.actions.menu.items\" [data]=\"item\" [behavior]=\"context.state.actions.menu.behavior\" [ngClass]=\"{ 'ml-2': context.state.actions.customActions.isVisible }\" [icon]=\"context.state.actions.menu.styles.icon\" [styleClass]=\"context.state.actions.menu.styles.styleClass\" [buttonClass]=\"context.state.actions.menu.styles.buttonClass\"></smz-menu>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n\r\n </ng-container>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"item?._isExpanded\">\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"rowContentTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\" [ngStyle]=\"{ 'text-align': 'center' }\">\r\n <div [innerHtml]=\"context.state.emptyFeedback.message\"></div>\r\n <ng-container *ngIf=\"context.state.caption.clearFilters.isButtonVisible && hasFilters()\">\r\n <button pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined mt-3\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\"></button>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-template>\r\n\r\n</ng-container>\r\n\r\n<ng-template #noStateTemplate>\r\n <ng-container *ngIf=\"emptyStateTemplate != null\">\r\n <ng-container *ngTemplateOutlet=\"emptyStateTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-container>\r\n</ng-template>" }]
|
|
16714
|
+
args: [{ selector: 'smz-ui-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableEditableService, TableFormsService], standalone: false, template: "<ng-container *ngIf=\"state | tableContext as context; else noStateTemplate\">\r\n\r\n <ng-container *ngIf=\"(context.state.emptyFeedback != null && (context.state.emptyFeedback.extraInfo || context.state.emptyFeedback.image || context.state.emptyFeedback.actionButtons)) && (items != null && items.length === 0) && context.state.emptyFeedback.isFeatured; else tableTemplate\">\r\n <smz-data-info\r\n [image]=\"context.state.emptyFeedback.image\"\r\n [message]=\"context.state.emptyFeedback.message\"\r\n [callbackInfo]=\"context.state.emptyFeedback.extraInfo\"\r\n [actions]=\"context.state.emptyFeedback.actionButtons\">\r\n\r\n <ng-template pTemplate=\"actions\">\r\n <ng-container *ngTemplateOutlet=\"emptyActionsTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-template>\r\n\r\n </smz-data-info>\r\n </ng-container>\r\n\r\n <ng-template #tableTemplate>\r\n\r\n <ng-container *ngVar=\"state.source?.items$ != null ? (state.source.items$ | async) : null as source\">\r\n\r\n <ng-container *ngIf=\"(source ?? items | cloneTableItems : context: tableKey: context.state.rowExpansion.sincronize) as clonedData\">\r\n <p-table #dt\r\n dataKey=\"id\"\r\n editMode=\"row\"\r\n [stripedRows]=\"context.state.styles.striped\"\r\n [value]=\"clonedData.items\"\r\n [(selection)]=\"selectedItems\"\r\n [tableStyleClass]=\"context.state.styles.tableStyleClass\"\r\n [styleClass]=\"'p-datatable-smz-ui-table' + (context.state.styles.showGrid ? ' p-datatable-gridlines' : '') + (context.state.styles.size === 'extra-small' ? ' p-datatable-xs' : '') + (context.state.styles.size === 'small' ? ' p-datatable-sm' : '') + (context.state.styles.size === 'large' ? ' p-datatable-lg' : '')\"\r\n [rowHover]=\"context.state.actions.rowBehavior.hoverable\"\r\n [rows]=\"context.state.pagination.rows\"\r\n [showCurrentPageReport]=\"context.state.pagination.pageReport.isVisible\"\r\n [rowsPerPageOptions]=\"context.state.pagination.rowsPerPageOptions\"\r\n [loading]=\"loading\"\r\n [paginator]=\"context.state.pagination.isVisible\"\r\n paginatorDropdownAppendTo=\"body\"\r\n [currentPageReportTemplate]=\"context.state.locale.paginator.template\"\r\n [sortField]=\"context.state.sort.field\"\r\n [sortMode]=\"context.state.sort.mode\"\r\n [sortOrder]=\"context.state.sort.order\"\r\n [multiSortMeta]=\"context.state.sort.multiSortMeta\"\r\n\r\n [scrollable]=\"context.state.viewport.scrollable\"\r\n [scrollHeight]=\"context.state.viewport.scrollHeight\"\r\n [scrollDirection]=\"context.state.viewport.scrollDirection\"\r\n\r\n [filterDelay]=\"0\"\r\n [globalFilterFields]=\"context.globalFilter\"\r\n\r\n [columns]=\"context.visibleColumns\"\r\n [frozenColumns]=\"context.frozenColumns\"\r\n [frozenWidth]=\"context.state.frozen.isEnabled ? context.state.frozen.width : null\"\r\n [resizableColumns]=\"context.state.viewport.resizableColumns\"\r\n [columnResizeMode]=\"context.state.viewport.columnResizeMode\"\r\n\r\n (onPage)=\"onPage($event)\"\r\n (onFilter)=\"onFilter($event)\"\r\n (selectionChange)=\"emitSelection($event)\"\r\n >\r\n\r\n <ng-template pTemplate=\"caption\" *ngIf=\"context.state.caption.isVisible\">\r\n\r\n <div class=\"grid grid-nogutter items-center gap-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <div *ngIf=\"context.state.caption.title != null\" class=\"col database-title\" [innerHTML]=\"context.state.caption.title\"></div>\r\n <ng-container *ngTemplateOutlet=\"captionTemplate; context: { $implicit: dt }\"></ng-container>\r\n\r\n <smz-table-caption-buttons [buttons]=\"context.state.caption.buttons\"></smz-table-caption-buttons>\r\n\r\n <button *ngIf=\"context.state.caption.exportToPdf.isButtonVisible\" pButton [label]=\"context.state.locale.exportToPdf.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-pdf\" (click)=\"exportToPdf(context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.exportToExcel.isButtonVisible\" pButton [label]=\"context.state.locale.exportToExcel.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-file-excel\" (click)=\"exportToExcel(table, context, clonedData.items)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.editable.creation.isButtonVisible\" pButton [label]=\"context.state.editable.creation.buttonLabel\" class=\"p-button-outlined\" icon=\"fa-solid fa-plus\" (click)=\"editableService.onRowCreateInit(table, context.columns)\" [disabled]=\"clonedData.showSkeleton || editableService.isEditing || editableService.isCreating || context.state.editable.creation.isButtonDisabled\"></button>\r\n <button *ngIf=\"context.state.caption.rowSelection.isButtonVisible\" pButton [label]=\"context.state.locale.rowSelection.label\" class=\"p-button-outlined\" icon=\"fa-solid fa-check-double\" (click)=\"onRowSelection(context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n <button *ngIf=\"context.state.caption.clearFilters.isButtonVisible\" pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\" [disabled]=\"clonedData.showSkeleton\"></button>\r\n\r\n <p-multiSelect\r\n #columnMultiselect\r\n *ngIf=\"context.state.caption.columnVisibility.showDropdownSelector\"\r\n class=\"ml-2 col-12 md:col-2\"\r\n styleClass=\"w-full\"\r\n [options]=\"context.hideableColumns\"\r\n [(ngModel)]=\"selectedColumns\"\r\n [placeholder]=\"context.state.locale.columnVisibility.placeholder\"\r\n [selectedItemsLabel]=\"context.state.locale.columnVisibility.selectedItemsLabel\"\r\n optionLabel=\"name\"\r\n dataKey=\"field\"\r\n optionLabel=\"header\"\r\n [filter]=\"true\"\r\n (onPanelHide)=\"updateColumnsVisibility(true)\"\r\n [pTooltip]=\"context.state.locale.columnVisibility.pTooltip\">\r\n </p-multiSelect>\r\n\r\n <p-iconfield *ngIf=\"context.state.caption.globalFilter.isVisible\" class=\"col-12\" [ngClass]=\"{ 'md:col-2': !context.state.caption.globalFilter.expanded }\">\r\n <p-inputicon styleClass=\"pi pi-search\" />\r\n <input #inputGlobal [(ngModel)]=\"globalSearchInput\" pInputText type=\"text\" styleClass=\"database-global-search\" (input)=\"updateGlobalFilter(inputGlobal.value)\" [disabled]=\"clonedData.showSkeleton\" [placeholder]=\"context.state.locale.globalFilter.placeholder\" />\r\n </p-iconfield>\r\n\r\n </div>\r\n\r\n <div *ngIf=\"toolbarTemplate != null\" class=\"grid grid-nogutter items-center mt-2\" [ngClass]=\"'justify-' + context.state.caption.toolbarAlignment\">\r\n <ng-container *ngTemplateOutlet=\"toolbarTemplate; context: { $implicit: dt }\"></ng-container>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr [ngClass]=\"{ 'invisible-header': !context.state.header.isVisible }\">\r\n\r\n <th *ngIf=\"context.state.caption.rowSelection.isEnabled\" [ngStyle]=\"context.state.caption.rowSelection.ngStyle\">\r\n <ng-container *ngIf=\"!context.state.actions.batchActions.isVisible\">\r\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\r\n </ng-container>\r\n </th>\r\n\r\n <th *ngIf=\"context.state.rowExpansion.isEnabled\" [ngStyle]=\"context.state.rowExpansion.ngStyle\"></th>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"context.state.viewport.resizableColumns; else nonResizable\">\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th pResizableColumn [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #nonResizable>\r\n <ng-container *ngIf=\"col.isOrderable\">\r\n <th [pSortableColumn]=\"col.sortField\" [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col.isOrderable\">\r\n <th [ngStyle]=\"col.content.ngStyle\" [ngClass]=\"col.headerStyleClass\">\r\n <ng-container *ngTemplateOutlet=\"headerContent\"></ng-container>\r\n </th>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #headerContent>\r\n <div class=\"flex justify-start items-center\">\r\n <span class=\"mr-1\">{{ col.header }}</span>\r\n\r\n <smz-table-header-actions clickStopPropagation class=\"ml-1 mt-1\" *ngIf=\"col.showHeaderActions\" [col]=\"col\"></smz-table-header-actions>\r\n\r\n <p-sortIcon [field]=\"col.sortField\" *ngIf=\"!clonedData.showSkeleton && col.isOrderable\"></p-sortIcon>\r\n\r\n <ng-container *ngIf=\"!clonedData.showSkeleton\">\r\n <ng-container [ngSwitch]=\"col.filter.type\">\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.currency\">\r\n <smz-column-filter type=\"numeric\" currency=\"BRL\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.numeric\">\r\n <smz-column-filter type=\"numeric\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.date\">\r\n <smz-column-filter type=\"date\" [field]=\"col.filterField\" [showTime]=\"col.filter.showTime\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.text\">\r\n <smz-column-filter type=\"text\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.boolean\">\r\n <smz-column-filter type=\"boolean\" [field]=\"col.filterField\"></smz-column-filter>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.dropdown\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField + '.id'\" matchMode=\"dropdown\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-select appendTo=\"body\" [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-select>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"in\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_array\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"array-some\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField + '.id' : filterField : null : 'name' : true\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" optionLabel=\"name\" dataKey=\"id\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"filterTypes.multiselect_string\">\r\n <ng-container *ngIf=\"col.filterField | filterObject as filterField\">\r\n <smz-column-filter [field]=\"filterField\" matchMode=\"multiselectByString\" [showMatchModes]=\"false\" [showOperator]=\"false\" [showAddButton]=\"false\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"px-3 pt-3 pb-0\">\r\n <span class=\"p-text-bold\">{{ col.header }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filter\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"(clonedData.items != null ? clonedData.items : []) | uniqueFilter : filterField : filterField : null : true : false : false\" [placeholder]=\"context.state.locale.dropdownFilter.placeholder\" (onChange)=\"filter($event.value)\" [maxSelectedLabels]=\"2\" [selectedItemsLabel]=\"'{0}'\"></p-multiSelect>\r\n </ng-template>\r\n </smz-column-filter>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <button *ngIf=\"context.state.caption.columnVisibility.showColumnHideButton\" pButton type=\"button\" icon=\"fa-solid fa-eye-slash\" class=\"p-button-rounded p-button-text p-button-plain\" (click)=\"hideColumn(col, context)\"></button>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <th *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible|| context.state.editable.isEditable\" [ngStyle]=\"context.state.editable.isEditable ? context.state.editable.ngStyle : context.state.actions.customActions.ngStyle\"></th>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"context.state.actions.batchActions.isVisible\">\r\n <th [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\"\r\n [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n <div class=\"grid grid-nogutter items-center justify-start\">\r\n <p-tableHeaderCheckbox class=\"mr-4\"></p-tableHeaderCheckbox>\r\n <ng-container *ngIf=\"selectedItems?.length > 0\">\r\n <ng-container *ngFor=\"let batchItem of context.state.actions.batchActions.items\">\r\n <button *ngIf=\"batchItem.visible\" pButton [label]=\"batchItem.label\" class=\"p-button-rounded p-button-text p-button-plain animate__animated animate__fadeIn\" [ngClass]=\"batchItem.styleClass\" [icon]=\"batchItem.icon\" (click)=\"batchItem.command(selectedItems); selectedItems = [];\" [disabled]=\"batchItem.disabled\" [pTooltip]=\"batchItem.tooltip\"></button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-item let-editing=\"editing\" let-rowIndex=\"rowIndex\" let-columns=\"columns\">\r\n <tr #editableRowElement\r\n [pEditableRow]=\"item\"\r\n tableItemAction\r\n [isClickable]=\"context.state.actions.rowBehavior.isClickable\"\r\n [callback]=\"context.state.actions.rowBehavior.clickCallback\"\r\n [expandRowOnClick]=\"context.state.actions.rowBehavior.expandRowOnClick\"\r\n [item]=\"item\"\r\n class=\"p-selectable-row\"\r\n [ngClass]=\"{ 'highlight-row': item?.id === state.actions.rowBehavior.highlights, 'preserve-in-small': state.actions.rowBehavior.preserveLayoutInSmallDevices }\"\r\n >\r\n\r\n <td *ngIf=\"context.state.caption.rowSelection.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\"\r\n [ngStyle]=\"context.state.caption.rowSelection.ngStyle\"\r\n >\r\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\r\n </td>\r\n\r\n <td *ngIf=\"context.state.rowExpansion.isEnabled && !clonedData.showSkeleton\"\r\n clickStopPropagation\r\n class=\"{{ state.actions.rowBehavior.cellStyleClass }}\"\r\n [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading, 'grid grid-nogutter justify-start items-center gap-2': context.state.rowExpansion.highlightNewItems && item._isNew }\"\r\n [ngStyle]=\"context.state.rowExpansion.ngStyle\"\r\n >\r\n <p-toggleButton [(ngModel)]=\"item._isExpanded\" [onIcon]=\"'fa-solid fa-chevron-down'\" [offIcon]=\"'fa-solid fa-chevron-right'\" (onChange)=\"item._isNew = false\"></p-toggleButton>\r\n <div *ngIf=\"context.state.rowExpansion.highlightNewItems && item._isNew\" class=\"rounded bg-cyan-400 text-sm text-white px-2 py-0 smz-table-new-tag\" (click)=\"item._isNew = false\">{{ context.state.rowExpansion.highlightLabel }}</div>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else dataTemplate\">\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngStyle]=\"col.content.ngStyle\"><p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton></td>\r\n </ng-container>\r\n\r\n <ng-template #dataTemplate>\r\n\r\n <td class=\"{{ state.actions.rowBehavior.cellStyleClass }}\" [ngClass]=\"{ 'opacity-50 pointer-events-none': editableService.context[item.id]?.hasErrors || editableService.context[item.id]?.isLoading }\" [ngStyle]=\"col.content.ngStyle\">\r\n <span class=\"p-column-title\">{{ col.header }}</span>\r\n\r\n <p-cellEditor>\r\n\r\n <!-- CELULAR COM EDITOR -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.editable.type\">\r\n <ng-container *ngSwitchCase=\"editableTypes.none\">\r\n <smz-table-content class=\"cursor-default\" [ngClass]=\"col.content.contentStyleClass\" [col]=\"col\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\"></smz-table-content>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"editableTypes.custom\">\r\n <ng-container *ngTemplateOutlet=\"editableTemplate; context: { $implicit: item, col: col }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT -->\r\n <ng-container *ngSwitchCase=\"editableTypes.text\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <input pInputText type=\"text\" [formControl]=\"$any(control)\" style=\"width: 100%;\">\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT NUMBER -->\r\n <ng-container *ngSwitchCase=\"editableTypes.number\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputNumber\r\n *ngVar=\"col.editable.data as numberData\"\r\n [formControl]=\"$any(control)\"\r\n [mode]=\"numberData.mode\"\r\n [minFractionDigits]=\"numberData.minFractionDigits\"\r\n [maxFractionDigits]=\"numberData.maxFractionDigits\"\r\n [currency]=\"numberData.currency\"\r\n [useGrouping]=\"numberData.useGrouping\"\r\n [allowEmpty]=\"numberData.allowEmpty\"\r\n [showClear]=\"numberData.showClear\"\r\n [showButtons]=\"numberData.showButtons\"\r\n [prefix]=\"numberData.prefix\"\r\n [suffix]=\"numberData.suffix\">\r\n </p-inputNumber>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT SWITCH -->\r\n <ng-container *ngSwitchCase=\"editableTypes.switch\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-inputSwitch [formControl]=\"$any(control)\"></p-inputSwitch>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT TEXT AREA -->\r\n <ng-container *ngSwitchCase=\"editableTypes.area\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <textarea pInputTextarea type=\"text\" [formControl]=\"$any(control)\" [rows]=\"$any(col.editable.data).rows\" required style=\"width: 100%;\"></textarea>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT DROPDOWN -->\r\n <ng-container *ngSwitchCase=\"editableTypes.dropdown\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-select appendTo=\"body\" [formControl]=\"$any(control)\" styleClass=\"w-full\" [options]=\"col.editable.data | editableSource\" optionLabel=\"name\" dataKey=\"id\" [placeholder]=\"$any(col.editable.data).placeholder\" [showClear]=\"!col.editable.validatorsPreset?.isRequired\" [filter]=\"true\"></p-select>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- INPUT CALENDAR -->\r\n <ng-container *ngSwitchCase=\"editableTypes.calendar\">\r\n <ng-container *ngIf=\"editableService.context[item.id]?.form as form\">\r\n <ng-container *ngIf=\"form.controls[col.editable.property] as control\">\r\n <div class=\"relative w-full\">\r\n <p-datepicker [formControl]=\"$any(control)\" appendTo=\"body\" styleClass=\"w-full\" [ngClass]=\"{ 'pl-5': !control.valid }\"></p-datepicker>\r\n <smz-table-validation-messages [errors]=\"control.errors\" [messages]=\"uiConfig.dialogs.forms.validationMessages\" [isFormInvalid]=\"form.invalid\" [isFormDirty]=\"form.dirty\"></smz-table-validation-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- CELULAR COM CONTE\u00DADO -->\r\n <ng-template pTemplate=\"output\">\r\n <smz-table-content\r\n [col]=\"col\"\r\n [pTooltip]=\"col.content.tooltip != null ? col.content.tooltip(item) : null\"\r\n tooltipPosition=\"left\"\r\n [ngClass]=\"col.content.contentStyleClass\" [contentTypes]=\"contentTypes\" [item]=\"item\" [rowIndex]=\"rowIndex\" [contentTemplate]=\"contentTemplate\">\r\n </smz-table-content>\r\n </ng-template>\r\n </p-cellEditor>\r\n\r\n </td>\r\n\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable\">\r\n\r\n <td [ngStyle]=\"context.state.actions.customActions.ngStyle\" class=\"px-0\">\r\n\r\n <div class=\"grid grid-nogutter items-center justify-center\">\r\n <ng-container *ngIf=\"clonedData.showSkeleton; else menuTemplate\">\r\n <div class=\"w-full\">\r\n <p-skeleton width=\"100%\" height=\"1rem\"></p-skeleton>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #menuTemplate>\r\n\r\n <!-- SEM EDITAR -->\r\n <ng-container *ngIf=\"!editing\">\r\n <button *ngIf=\"context.state.editable.update.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-pencil\" (click)=\"editableService.onRowEditInit(item)\" class=\"p-button-rounded p-button-text mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.update.isButtonDisabled || (!context.state.editable.update.condition(item))\" pInitEditableRow></button>\r\n <button *ngIf=\"context.state.editable.remove.isButtonVisible\" pButton type=\"button\" icon=\"pi pi-trash\" (click)=\"editableService.onRowRemove($event, table, item)\" class=\"p-button-rounded p-button-text p-button-secondary mx-1\" [disabled]=\"editableService.isEditing || editableService.isCreating || context.state.editable.remove.isButtonDisabled || (!context.state.editable.remove.condition(item))\"></button>\r\n </ng-container>\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"editing\">\r\n\r\n <ng-container *ngIf=\"editableService.context[item.id] as editableContext\">\r\n <!-- COM LOADING -->\r\n <ng-container *ngIf=\"editableContext.isLoading\">\r\n <button pButton type=\"button\" icon=\"fa-solid fa-rotate fa-spin\" [disabled]=\"true\" class=\"p-button-rounded p-button-text p-button-info mr-2\"></button>\r\n </ng-container>\r\n\r\n <!-- SEM LOADING -->\r\n <ng-container *ngIf=\"!editableContext.isLoading\">\r\n\r\n <!-- EDITANDO -->\r\n <ng-container *ngIf=\"!editableContext.hasErrors\">\r\n\r\n <!-- CRIANDO -->\r\n <ng-container *ngIf=\"item._context?.isCreating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowCreateSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n <!-- ATUALIZANDO -->\r\n <ng-container *ngIf=\"item._context?.isUpdating\">\r\n <button pButton type=\"button\" icon=\"pi pi-check\" (click)=\"editableService.onRowEditSave($event, table, editableRowElement, item)\" [disabled]=\"!editableContext.hasChanged || !editableService.context[item.id]?.form.valid\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- COM ERRORS -->\r\n <ng-container *ngIf=\"editableContext.hasErrors\">\r\n <p-overlayPanel #errorsOverlay appendTo=\"body\" [style]=\"{ width: '450px' }\">\r\n <ng-template pTemplate>\r\n <div [innerHtml]=\"editableContext.errors | contentErrors\"></div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n <button pButton type=\"button\" icon=\"fas fa-exclamation-triangle\" [disabled]=\"false\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger mr-2\" (click)=\"errorsOverlay.toggle($event)\"></button>\r\n\r\n <!-- CRIANDO -->\r\n <button *ngIf=\"item._context?.isCreating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowCreateCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n <!-- ATUALIZANDO -->\r\n <button *ngIf=\"item._context?.isUpdating\" pButton type=\"button\" icon=\"pi pi-times\" (click)=\"editableService.onRowEditCancel($event, table, item)\" class=\"p-button-sm p-button-rounded p-button-text p-button-danger\"></button>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <!-- CUSTOM MENU -->\r\n <ng-container *ngIf=\"context.state.actions.customActions.isVisible && !editing\">\r\n <ng-container *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: item }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- MENU -->\r\n <ng-container *ngIf=\"context.state.actions.menu.isVisible && !editing\">\r\n <smz-menu [callback]=\"context.state.actions.menu.callback\" [items]=\"context.state.actions.menu.items\" [data]=\"item\" [behavior]=\"context.state.actions.menu.behavior\" [ngClass]=\"{ 'ml-2': context.state.actions.customActions.isVisible }\" [icon]=\"context.state.actions.menu.styles.icon\" [styleClass]=\"context.state.actions.menu.styles.styleClass\" [buttonClass]=\"context.state.actions.menu.styles.buttonClass\"></smz-menu>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n\r\n </ng-container>\r\n\r\n </tr>\r\n\r\n <tr *ngIf=\"item?._isExpanded\">\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"rowContentTemplate; context: { $implicit: item }\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + ((context.state.actions.menu.isVisible || context.state.actions.customActions.isVisible || context.state.editable.isEditable) ? 1 : 0) + (context.state.caption.rowSelection.isEnabled ? 1 : 0) + (context.state.rowExpansion.isEnabled ? 1 : 0)\" [ngStyle]=\"{ 'text-align': 'center' }\">\r\n <div [innerHtml]=\"context.state.emptyFeedback.message\"></div>\r\n <ng-container *ngIf=\"context.state.caption.clearFilters.isButtonVisible && hasFilters()\">\r\n <button pButton [label]=\"context.state.locale.clearFilters.label\" class=\"p-button-outlined mt-3\" icon=\"pi pi-filter-slash\" (click)=\"clear(table, context)\"></button>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-template>\r\n\r\n</ng-container>\r\n\r\n<ng-template #noStateTemplate>\r\n <ng-container *ngIf=\"emptyStateTemplate != null\">\r\n <ng-container *ngTemplateOutlet=\"emptyStateTemplate; context: { $implicit: {} }\"></ng-container>\r\n </ng-container>\r\n</ng-template>" }]
|
|
16716
16715
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: TableEditableService }, { type: TableFormsService }, { type: TableHelperService }, { type: i1$2.Store }, { type: SmzExcelService }], propDecorators: { templates: [{
|
|
16717
16716
|
type: ContentChildren,
|
|
16718
16717
|
args: [PrimeTemplate]
|
|
@@ -30213,7 +30212,6 @@ class NgxSmzDialogsModule {
|
|
|
30213
30212
|
ToolbarModule,
|
|
30214
30213
|
SmzTemplatesPipeModule,
|
|
30215
30214
|
TooltipModule,
|
|
30216
|
-
MessagesModule,
|
|
30217
30215
|
ProgressBarModule,
|
|
30218
30216
|
SafeContentPipeModule,
|
|
30219
30217
|
NgxSmzTablesModule,
|
|
@@ -30236,7 +30234,6 @@ class NgxSmzDialogsModule {
|
|
|
30236
30234
|
ToolbarModule,
|
|
30237
30235
|
SmzTemplatesPipeModule,
|
|
30238
30236
|
TooltipModule,
|
|
30239
|
-
MessagesModule,
|
|
30240
30237
|
ProgressBarModule,
|
|
30241
30238
|
SafeContentPipeModule,
|
|
30242
30239
|
NgxSmzTablesModule,
|
|
@@ -30276,7 +30273,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
30276
30273
|
ToolbarModule,
|
|
30277
30274
|
SmzTemplatesPipeModule,
|
|
30278
30275
|
TooltipModule,
|
|
30279
|
-
MessagesModule,
|
|
30280
30276
|
ProgressBarModule,
|
|
30281
30277
|
SafeContentPipeModule,
|
|
30282
30278
|
NgxSmzTablesModule,
|
|
@@ -55880,7 +55876,154 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
55880
55876
|
type: Injectable
|
|
55881
55877
|
}], ctorParameters: () => [{ type: ExcelsService }], propDecorators: { onCreate$: [], onCreateSuccess: [] } });
|
|
55882
55878
|
|
|
55883
|
-
const
|
|
55879
|
+
const getDialogsInitialState = () => ({});
|
|
55880
|
+
// @dynamic
|
|
55881
|
+
let DialogsState = class DialogsState {
|
|
55882
|
+
dialogs;
|
|
55883
|
+
dialogService;
|
|
55884
|
+
dialogCrudService;
|
|
55885
|
+
constructor(dialogs, dialogService, dialogCrudService) {
|
|
55886
|
+
this.dialogs = dialogs;
|
|
55887
|
+
this.dialogService = dialogService;
|
|
55888
|
+
this.dialogCrudService = dialogCrudService;
|
|
55889
|
+
}
|
|
55890
|
+
onMessage(ctx, action) {
|
|
55891
|
+
const dialog = {
|
|
55892
|
+
title: action.title,
|
|
55893
|
+
features: [
|
|
55894
|
+
{ type: 'message', data: action.messages },
|
|
55895
|
+
],
|
|
55896
|
+
behaviors: {
|
|
55897
|
+
showCancelButton: false,
|
|
55898
|
+
useAdvancedResponse: false,
|
|
55899
|
+
showConfirmButton: false,
|
|
55900
|
+
closeOnEscape: true,
|
|
55901
|
+
showCloseButton: false,
|
|
55902
|
+
showFooter: true,
|
|
55903
|
+
showHeader: true,
|
|
55904
|
+
showOkButton: true,
|
|
55905
|
+
},
|
|
55906
|
+
builtInButtons: {
|
|
55907
|
+
confirmDependsOnValidation: false,
|
|
55908
|
+
okName: 'OK'
|
|
55909
|
+
},
|
|
55910
|
+
};
|
|
55911
|
+
this.dialogs.open(dialog);
|
|
55912
|
+
}
|
|
55913
|
+
onConfirmation(ctx, action) {
|
|
55914
|
+
const dialog = {
|
|
55915
|
+
title: action.title,
|
|
55916
|
+
features: [
|
|
55917
|
+
{ type: 'message', data: action.messages },
|
|
55918
|
+
],
|
|
55919
|
+
behaviors: {
|
|
55920
|
+
showCancelButton: false,
|
|
55921
|
+
useAdvancedResponse: false,
|
|
55922
|
+
showConfirmButton: false,
|
|
55923
|
+
closeOnEscape: true,
|
|
55924
|
+
showCloseButton: false,
|
|
55925
|
+
showFooter: true,
|
|
55926
|
+
showHeader: true,
|
|
55927
|
+
showOkButton: true,
|
|
55928
|
+
},
|
|
55929
|
+
builtInButtons: {
|
|
55930
|
+
confirmDependsOnValidation: false,
|
|
55931
|
+
okName: 'OK'
|
|
55932
|
+
},
|
|
55933
|
+
callbacks: {
|
|
55934
|
+
onConfirm: () => {
|
|
55935
|
+
ctx.dispatch(new DialogsActions.ConfirmationSuccess());
|
|
55936
|
+
},
|
|
55937
|
+
onCancel: () => {
|
|
55938
|
+
ctx.dispatch(new DialogsActions.ConfirmationFailure());
|
|
55939
|
+
},
|
|
55940
|
+
onClose: () => {
|
|
55941
|
+
ctx.dispatch(new DialogsActions.ConfirmationFailure());
|
|
55942
|
+
}
|
|
55943
|
+
},
|
|
55944
|
+
presetId: action.isCritical ? SmzPresets.CriticalConfirmation : SmzPresets.Confirmation,
|
|
55945
|
+
};
|
|
55946
|
+
this.dialogs.open(dialog);
|
|
55947
|
+
}
|
|
55948
|
+
onConfirmOnEnter(ctx, action) {
|
|
55949
|
+
const topDialogId = this.dialogs.dialogRefs[this.dialogs.dialogRefs.length - 1].id;
|
|
55950
|
+
if (topDialogId === action.dialogId) {
|
|
55951
|
+
// console.log('me', this.dialogId);
|
|
55952
|
+
if (action.delayConfirmationRate != null) {
|
|
55953
|
+
setTimeout(() => {
|
|
55954
|
+
action.element.nativeElement.dispatchEvent(new Event(action.targetEventClick));
|
|
55955
|
+
}, action.delayConfirmationRate);
|
|
55956
|
+
}
|
|
55957
|
+
else {
|
|
55958
|
+
action.element.nativeElement.dispatchEvent(new Event(action.targetEventClick));
|
|
55959
|
+
}
|
|
55960
|
+
}
|
|
55961
|
+
}
|
|
55962
|
+
onShowInputListCreationCrudDialog(ctx, action) {
|
|
55963
|
+
const ref = this.dialogService.open(InputListDialogCrudComponent, {
|
|
55964
|
+
header: action.title,
|
|
55965
|
+
width: '50%',
|
|
55966
|
+
contentStyle: { "max-height": "500px", "overflow": "auto" },
|
|
55967
|
+
baseZIndex: 10000,
|
|
55968
|
+
data: { input: action.input, value: action.value }
|
|
55969
|
+
});
|
|
55970
|
+
this.dialogCrudService.ref = ref;
|
|
55971
|
+
ref.onClose.subscribe((event) => {
|
|
55972
|
+
if (event) {
|
|
55973
|
+
ctx.dispatch(new DialogsActions.ShowInputListCreationCrudDialogSuccess(true, action.value, event.data.name));
|
|
55974
|
+
}
|
|
55975
|
+
else {
|
|
55976
|
+
ctx.dispatch(new DialogsActions.ShowInputListCreationCrudDialogSuccess(false));
|
|
55977
|
+
}
|
|
55978
|
+
});
|
|
55979
|
+
}
|
|
55980
|
+
onShowInputListBatchCreationCrudDialog(ctx, action) {
|
|
55981
|
+
const ref = this.dialogService.open(InputListBatchCrudComponent, {
|
|
55982
|
+
header: action.title,
|
|
55983
|
+
width: '50%',
|
|
55984
|
+
contentStyle: { "max-height": "500px", "overflow": "auto" },
|
|
55985
|
+
baseZIndex: 10000,
|
|
55986
|
+
data: { input: action.input, value: '' }
|
|
55987
|
+
});
|
|
55988
|
+
this.dialogCrudService.ref = ref;
|
|
55989
|
+
ref.onClose.subscribe((event) => {
|
|
55990
|
+
if (event) {
|
|
55991
|
+
ctx.dispatch(new DialogsActions.ShowInputListBatchCreationCrudDialogSuccess(true, event.names));
|
|
55992
|
+
}
|
|
55993
|
+
else {
|
|
55994
|
+
ctx.dispatch(new DialogsActions.ShowInputListBatchCreationCrudDialogSuccess(false));
|
|
55995
|
+
}
|
|
55996
|
+
});
|
|
55997
|
+
}
|
|
55998
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogsState, deps: [{ token: SmzDialogsService }, { token: i2$4.DialogService }, { token: DialogCrudStateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
55999
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogsState });
|
|
56000
|
+
};
|
|
56001
|
+
__decorate([
|
|
56002
|
+
Action(DialogsActions.Message)
|
|
56003
|
+
], DialogsState.prototype, "onMessage", null);
|
|
56004
|
+
__decorate([
|
|
56005
|
+
Action(DialogsActions.Confirmation)
|
|
56006
|
+
], DialogsState.prototype, "onConfirmation", null);
|
|
56007
|
+
__decorate([
|
|
56008
|
+
Action(DialogsActions.ConfirmOnEnter)
|
|
56009
|
+
], DialogsState.prototype, "onConfirmOnEnter", null);
|
|
56010
|
+
__decorate([
|
|
56011
|
+
Action(DialogsActions.ShowInputListCreationCrudDialog)
|
|
56012
|
+
], DialogsState.prototype, "onShowInputListCreationCrudDialog", null);
|
|
56013
|
+
__decorate([
|
|
56014
|
+
Action(DialogsActions.ShowInputListBatchCreationCrudDialog)
|
|
56015
|
+
], DialogsState.prototype, "onShowInputListBatchCreationCrudDialog", null);
|
|
56016
|
+
DialogsState = __decorate([
|
|
56017
|
+
State({
|
|
56018
|
+
name: 'dialogs',
|
|
56019
|
+
defaults: getDialogsInitialState()
|
|
56020
|
+
})
|
|
56021
|
+
], DialogsState);
|
|
56022
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogsState, decorators: [{
|
|
56023
|
+
type: Injectable
|
|
56024
|
+
}], ctorParameters: () => [{ type: SmzDialogsService }, { type: i2$4.DialogService }, { type: DialogCrudStateService }], propDecorators: { onMessage: [], onConfirmation: [], onConfirmOnEnter: [], onShowInputListCreationCrudDialog: [], onShowInputListBatchCreationCrudDialog: [] } });
|
|
56025
|
+
|
|
56026
|
+
const UI_STATES = [LayoutUiState, NotificationsUiState, RouterParamsState, CommentsUiState, ExcelsUiState, DialogsState];
|
|
55884
56027
|
const UI_REQUIRED_ACTIONS = [];
|
|
55885
56028
|
let UiState = class UiState {
|
|
55886
56029
|
constructor() { }
|