@senior-gestao-relacionamento/angular-components 2.4.0 → 2.5.0-feat-crmdev-12601-455c876e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/export-data/entities/export-data.interface.mjs +2 -0
- package/esm2022/lib/components/export-data/enums/export-data.enums.mjs +25 -0
- package/esm2022/lib/components/export-data/export-data.component.mjs +163 -0
- package/esm2022/lib/components/export-data/services/export-data.service.mjs +35 -0
- package/esm2022/lib/i18n/en-US.json +16 -1
- package/esm2022/lib/i18n/es-ES.json +16 -1
- package/esm2022/lib/i18n/pt-BR.json +16 -1
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/senior-gestao-relacionamento-angular-components.mjs +256 -6
- package/fesm2022/senior-gestao-relacionamento-angular-components.mjs.map +1 -1
- package/lib/components/export-data/entities/export-data.interface.d.ts +82 -0
- package/lib/components/export-data/enums/export-data.enums.d.ts +20 -0
- package/lib/components/export-data/export-data.component.d.ts +72 -0
- package/lib/components/export-data/services/export-data.service.d.ts +23 -0
- package/package.json +2 -2
- package/public-api.d.ts +4 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9lbnRpdGllcy9leHBvcnQtZGF0YS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4cG9ydENvbHVtblR5cGUsIEV4cG9ydEZpbGVGb3JtYXQsIEV4cG9ydEZpbGVUeXBlLCBFeHBvcnRPcmllbnRhdGlvbiB9IGZyb20gJy4uL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zJztcblxuLyoqXG4gKiBDb25maWd1cmHDp8OjbyBkZSB1bWEgY29sdW5hIHBhcmEgZXhwb3J0YcOnw6NvLlxuICogRXNwZWxoYSBvIGBjb2x1bW5zUmVjb3JkYCBkbyBiYWNrZW5kIChtYWluLnNkbCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0Q29sdW1uIHtcbiAgLyoqIE5vbWUgZG8gY2FtcG8gbm8gcmVnaXN0cm8gKHN1cG9ydGEgcGF0aHMgYW5pbmhhZG9zOiBcImFkZHJlc3MuY2l0eVwiKSAqL1xuICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gIC8qKiBDaGF2ZSBkZSB0cmFkdcOnw6NvIG91IGxhYmVsIGV4aWJpZG8gbm8gY2FiZcOnYWxobyAqL1xuICB0cmFuc2xhdGVLZXk6IHN0cmluZztcbiAgLyoqIFRpcG8gZG8gZGFkbyDigJQgZGVmaW5lIGEgbcOhc2NhcmEgYXBsaWNhZGEgcGVsbyBiYWNrZW5kICovXG4gIGNvbHVtblR5cGU6IEV4cG9ydENvbHVtblR5cGU7XG4gIC8qKiBQcmVmaXhvIGRhIGNoYXZlIGRlIHRyYWR1w6fDo28gZG8gZW51bSAoZXg6IFwic3RhdHVzZW51bVwiKSAqL1xuICB0cmFuc2xhdGlvbktleVByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb2x1bmEgbm8gZm9ybWF0byBzaW1wbGlmaWNhZG8gKGNvbXBhdMOtdmVsIGNvbSBDb2x1bW5Db25maWcgZG8gcHJvamV0bykuXG4gKiBPIGNvbXBvbmVudGUgY29udmVydGUgYXV0b21hdGljYW1lbnRlIHBhcmEgRXhwb3J0Q29sdW1uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvbHVtbklucHV0IHtcbiAgLyoqIE5vbWUgZG8gY2FtcG8gKGV4OiBcIm5hbWVcIiwgXCJzdGFnZS5uYW1lXCIpICovXG4gIGZpZWxkOiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBleGliaWRvIG5vIGNhYmXDp2FsaG8gKi9cbiAgaGVhZGVyOiBzdHJpbmc7XG4gIC8qKiBUaXBvIHBhcmEgZXhwb3J0YcOnw6NvOiBURVhULCBOVU1CRVIsIEVOVU0sIERBVEUsIERBVEVUSU1FLCBDVVJSRU5DWSAqL1xuICBleHBvcnRUeXBlPzogc3RyaW5nO1xuICAvKiogUHJlZml4byBkYSBjaGF2ZSBkZSB0cmFkdcOnw6NvIGRvIGVudW0gKi9cbiAgdHJhbnNsYXRpb25LZXlQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBRdWFscXVlciBvdXRyYSBwcm9wcmllZGFkZSAoc29ydGFibGUsIHdpZHRoLCB0eXBlLCBldGMpIMOpIGlnbm9yYWRhICovXG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogRGF0YXNvdXJjZSBxdWUgaWRlbnRpZmljYSBkZSBvbmRlIGJ1c2NhciBvcyBkYWRvcyBubyBiYWNrZW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydERhdGFzb3VyY2Uge1xuICBuYW1lRG9tYWluOiBzdHJpbmc7XG4gIG5hbWVTZXJ2aWNlOiBzdHJpbmc7XG4gIHByaW1pdGl2ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZW52aWFkbyBhbyBzaWduYWwgYGV4cG9ydFNlbGVjdGVkUmVjb3Jkc1NpZ25hbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0U2VsZWN0ZWRQYXlsb2FkIHtcbiAgZmlsZVR5cGU6IEV4cG9ydEZpbGVUeXBlO1xuICBkYXRhc291cmNlOiBFeHBvcnREYXRhc291cmNlO1xuICBmaWVsZHM6IEV4cG9ydENvbHVtbltdO1xuICBzZWxlY3RlZElkczogc3RyaW5nW107XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgb3JpZW50YXRpb24/OiBFeHBvcnRPcmllbnRhdGlvbjtcbiAgZmlsZUZvcm1hdD86IEV4cG9ydEZpbGVGb3JtYXQ7XG59XG5cbi8qKlxuICogUGF5bG9hZCBlbnZpYWRvIGFvIHNpZ25hbCBgZXhwb3J0QWxsUmVjb3Jkc1NpZ25hbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0QWxsUGF5bG9hZCB7XG4gIGZpbGVUeXBlOiBFeHBvcnRGaWxlVHlwZTtcbiAgZGF0YXNvdXJjZTogRXhwb3J0RGF0YXNvdXJjZTtcbiAgZmllbGRzOiBFeHBvcnRDb2x1bW5bXTtcbiAgZmlsdGVyOiBzdHJpbmc7XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgb3JpZW50YXRpb24/OiBFeHBvcnRPcmllbnRhdGlvbjtcbiAgZmlsZUZvcm1hdD86IEV4cG9ydEZpbGVGb3JtYXQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhw6fDo28gcGFzc2FkYSBhbyBjb21wb25lbnRlIGRlIGV4cG9ydGHDp8Ojby5cbiAqXG4gKiBBY2VpdGEgY29sdW5hcyBlbSBkb2lzIGZvcm1hdG9zOlxuICogLSBgRXhwb3J0Q29sdW1uW11gIChmb3JtYXRvIGNvbXBsZXRvIGNvbSBjb2x1bW5OYW1lL3RyYW5zbGF0ZUtleS9jb2x1bW5UeXBlKVxuICogLSBgRXhwb3J0Q29sdW1uSW5wdXRbXWAgKGZvcm1hdG8gc2ltcGxpZmljYWRvIGNvbSBmaWVsZC9oZWFkZXIvZXhwb3J0VHlwZSDigJQgY29tcGF0w612ZWwgY29tIENvbHVtbkNvbmZpZylcbiAqXG4gKiBPIGNvbXBvbmVudGUgbm9ybWFsaXphIGludGVybmFtZW50ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnREYXRhQ29uZmlnIHtcbiAgLyoqIE5vbWUgZGEgZW50aWRhZGUgZXhpYmlkbyBubyB0w610dWxvIGRvIGFycXVpdm8gKi9cbiAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAvKiogRGF0YXNvdXJjZTogZG9tw61uaW8sIHNlcnZpw6dvIGUgcHJpbWl0aXZhIGRlIGxpc3RhZ2VtICovXG4gIGRhdGFzb3VyY2U6IEV4cG9ydERhdGFzb3VyY2U7XG4gIC8qKiBDb2x1bmFzIGRpc3BvbsOtdmVpcyBwYXJhIGV4cG9ydGHDp8OjbyAqL1xuICBjb2x1bW5zOiAoRXhwb3J0Q29sdW1uIHwgRXhwb3J0Q29sdW1uSW5wdXQpW107XG4gIC8qKiBGaWx0cm8gYXRpdm8gbmEgbGlzdGFnZW0gKHVzYWRvIHF1YW5kbyBleHBvcnRhIHRvZG9zKSAqL1xuICBhY3RpdmVGaWx0ZXI/OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export var ExportFileType;
|
|
2
|
+
(function (ExportFileType) {
|
|
3
|
+
ExportFileType["Excel"] = "EXCEL";
|
|
4
|
+
ExportFileType["Pdf"] = "PDF";
|
|
5
|
+
})(ExportFileType || (ExportFileType = {}));
|
|
6
|
+
export var ExportOrientation;
|
|
7
|
+
(function (ExportOrientation) {
|
|
8
|
+
ExportOrientation["Portrait"] = "PORTRAIT";
|
|
9
|
+
ExportOrientation["Landscape"] = "LANDSCAPE";
|
|
10
|
+
})(ExportOrientation || (ExportOrientation = {}));
|
|
11
|
+
export var ExportFileFormat;
|
|
12
|
+
(function (ExportFileFormat) {
|
|
13
|
+
ExportFileFormat["A3"] = "A3";
|
|
14
|
+
ExportFileFormat["A4"] = "A4";
|
|
15
|
+
})(ExportFileFormat || (ExportFileFormat = {}));
|
|
16
|
+
export var ExportColumnType;
|
|
17
|
+
(function (ExportColumnType) {
|
|
18
|
+
ExportColumnType["Text"] = "TEXT";
|
|
19
|
+
ExportColumnType["Enum"] = "ENUM";
|
|
20
|
+
ExportColumnType["Date"] = "DATE";
|
|
21
|
+
ExportColumnType["Datetime"] = "DATETIME";
|
|
22
|
+
ExportColumnType["Currency"] = "CURRENCY";
|
|
23
|
+
ExportColumnType["Number"] = "NUMBER";
|
|
24
|
+
})(ExportColumnType || (ExportColumnType = {}));
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsaUNBQWUsQ0FBQTtJQUNmLDZCQUFXLENBQUE7QUFDYixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQzNCLDBDQUFxQixDQUFBO0lBQ3JCLDRDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBRzVCO0FBRUQsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQiw2QkFBUyxDQUFBO0lBQ1QsNkJBQVMsQ0FBQTtBQUNYLENBQUMsRUFIVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRzNCO0FBRUQsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQixpQ0FBYSxDQUFBO0lBQ2IsaUNBQWEsQ0FBQTtJQUNiLGlDQUFhLENBQUE7SUFDYix5Q0FBcUIsQ0FBQTtJQUNyQix5Q0FBcUIsQ0FBQTtJQUNyQixxQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEV4cG9ydEZpbGVUeXBlIHtcbiAgRXhjZWwgPSAnRVhDRUwnLFxuICBQZGYgPSAnUERGJ1xufVxuXG5leHBvcnQgZW51bSBFeHBvcnRPcmllbnRhdGlvbiB7XG4gIFBvcnRyYWl0ID0gJ1BPUlRSQUlUJyxcbiAgTGFuZHNjYXBlID0gJ0xBTkRTQ0FQRSdcbn1cblxuZXhwb3J0IGVudW0gRXhwb3J0RmlsZUZvcm1hdCB7XG4gIEEzID0gJ0EzJyxcbiAgQTQgPSAnQTQnXG59XG5cbmV4cG9ydCBlbnVtIEV4cG9ydENvbHVtblR5cGUge1xuICBUZXh0ID0gJ1RFWFQnLFxuICBFbnVtID0gJ0VOVU0nLFxuICBEYXRlID0gJ0RBVEUnLFxuICBEYXRldGltZSA9ICdEQVRFVElNRScsXG4gIEN1cnJlbmN5ID0gJ0NVUlJFTkNZJyxcbiAgTnVtYmVyID0gJ05VTUJFUidcbn1cbiJdfQ==
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Component, computed, inject, input, output, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { DialogModule } from 'primeng/dialog';
|
|
5
|
+
import { ButtonModule } from 'primeng/button';
|
|
6
|
+
import { RadioButtonModule } from 'primeng/radiobutton';
|
|
7
|
+
import { CheckboxModule } from 'primeng/checkbox';
|
|
8
|
+
import { ExportDataService } from './services/export-data.service';
|
|
9
|
+
import { ExportFileType, ExportOrientation, ExportFileFormat, ExportColumnType } from './enums/export-data.enums';
|
|
10
|
+
import { TranslatePipe } from '@seniorsistemas/components-ai';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common";
|
|
13
|
+
import * as i2 from "@angular/forms";
|
|
14
|
+
import * as i3 from "primeng/dialog";
|
|
15
|
+
import * as i4 from "primeng/api";
|
|
16
|
+
import * as i5 from "primeng/button";
|
|
17
|
+
import * as i6 from "primeng/radiobutton";
|
|
18
|
+
import * as i7 from "primeng/checkbox";
|
|
19
|
+
/**
|
|
20
|
+
* Componente de exportação de dados (s-export-data).
|
|
21
|
+
* Permite ao usuário escolher o formato do arquivo (Excel ou PDF), a orientação da página,
|
|
22
|
+
* o formato da folha, o escopo (todos os registros ou apenas os selecionados) e
|
|
23
|
+
* as colunas a serem exportadas.
|
|
24
|
+
*
|
|
25
|
+
* Comunica-se com o `crmx-data-export-backend` via HTTP (fire-and-forget).
|
|
26
|
+
*/
|
|
27
|
+
export class ExportDataComponent {
|
|
28
|
+
exportService = inject(ExportDataService);
|
|
29
|
+
visible = input(false);
|
|
30
|
+
visibleChange = output();
|
|
31
|
+
config = input.required();
|
|
32
|
+
selectedIds = input([]);
|
|
33
|
+
exported = output();
|
|
34
|
+
exportError = output();
|
|
35
|
+
selectedFileType = signal(ExportFileType.Excel);
|
|
36
|
+
selectedOrientation = signal(ExportOrientation.Landscape);
|
|
37
|
+
selectedFileFormat = signal(ExportFileFormat.A4);
|
|
38
|
+
exportScope = signal('all');
|
|
39
|
+
exporting = signal(false);
|
|
40
|
+
columnSelections = signal([]);
|
|
41
|
+
get selectedFileTypeModel() { return this.selectedFileType(); }
|
|
42
|
+
set selectedFileTypeModel(v) { this.selectedFileType.set(v); }
|
|
43
|
+
get selectedOrientationModel() { return this.selectedOrientation(); }
|
|
44
|
+
set selectedOrientationModel(v) { this.selectedOrientation.set(v); }
|
|
45
|
+
get selectedFileFormatModel() { return this.selectedFileFormat(); }
|
|
46
|
+
set selectedFileFormatModel(v) { this.selectedFileFormat.set(v); }
|
|
47
|
+
get exportScopeModel() { return this.exportScope(); }
|
|
48
|
+
set exportScopeModel(v) { this.exportScope.set(v); }
|
|
49
|
+
selectedColumnsCount = computed(() => this.columnSelections().filter(c => c.selected).length);
|
|
50
|
+
hasSelectedIds = computed(() => this.selectedIds().length > 0);
|
|
51
|
+
canExport = computed(() => this.selectedColumnsCount() > 0 && !this.exporting());
|
|
52
|
+
fileTypes = [
|
|
53
|
+
{ value: ExportFileType.Excel, label: 'Excel', icon: 'pi-file-excel', description: 'Planilha com colunas ajustáveis' },
|
|
54
|
+
{ value: ExportFileType.Pdf, label: 'PDF', icon: 'pi-file-pdf', description: 'Documento formatado para impressão' }
|
|
55
|
+
];
|
|
56
|
+
orientations = [
|
|
57
|
+
{ value: ExportOrientation.Landscape, label: 'Paisagem (Horizontal)', icon: 'pi-arrows-h' },
|
|
58
|
+
{ value: ExportOrientation.Portrait, label: 'Retrato (Vertical)', icon: 'pi-arrows-v' }
|
|
59
|
+
];
|
|
60
|
+
fileFormats = [
|
|
61
|
+
{ value: ExportFileFormat.A4, label: 'A4', description: 'Padrão (210×297mm)' },
|
|
62
|
+
{ value: ExportFileFormat.A3, label: 'A3', description: 'Grande (297×420mm)' }
|
|
63
|
+
];
|
|
64
|
+
ngOnChanges() {
|
|
65
|
+
let cfg;
|
|
66
|
+
try {
|
|
67
|
+
cfg = this.config();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return; // config ainda não foi setado (required input)
|
|
71
|
+
}
|
|
72
|
+
if (cfg?.columns) {
|
|
73
|
+
this.columnSelections.set(cfg.columns.map(col => ({ column: this.normalizeColumn(col), selected: true })));
|
|
74
|
+
}
|
|
75
|
+
// Sincroniza escopo com presença de IDs
|
|
76
|
+
this.exportScope.set(this.selectedIds().length > 0 ? 'selected' : 'all');
|
|
77
|
+
}
|
|
78
|
+
isExportColumn(col) {
|
|
79
|
+
return 'columnName' in col && 'translateKey' in col && 'columnType' in col;
|
|
80
|
+
}
|
|
81
|
+
normalizeColumn(col) {
|
|
82
|
+
if (this.isExportColumn(col)) {
|
|
83
|
+
return col;
|
|
84
|
+
}
|
|
85
|
+
const input = col;
|
|
86
|
+
const typeMap = {
|
|
87
|
+
'TEXT': ExportColumnType.Text, 'NUMBER': ExportColumnType.Number,
|
|
88
|
+
'ENUM': ExportColumnType.Enum, 'DATE': ExportColumnType.Date,
|
|
89
|
+
'DATETIME': ExportColumnType.Datetime, 'CURRENCY': ExportColumnType.Currency,
|
|
90
|
+
'status': ExportColumnType.Enum, 'number': ExportColumnType.Number, 'text': ExportColumnType.Text
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
columnName: input.field,
|
|
94
|
+
translateKey: input.header,
|
|
95
|
+
columnType: typeMap[input.exportType ?? 'TEXT'] ?? ExportColumnType.Text,
|
|
96
|
+
translationKeyPrefix: input.translationKeyPrefix
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
selectAllColumns() {
|
|
100
|
+
this.columnSelections.update(cols => cols.map(c => ({ ...c, selected: true })));
|
|
101
|
+
}
|
|
102
|
+
deselectAllColumns() {
|
|
103
|
+
this.columnSelections.update(cols => cols.map(c => ({ ...c, selected: false })));
|
|
104
|
+
}
|
|
105
|
+
toggleColumn(col) {
|
|
106
|
+
col.selected = !col.selected;
|
|
107
|
+
this.refreshColumns();
|
|
108
|
+
}
|
|
109
|
+
refreshColumns() {
|
|
110
|
+
this.columnSelections.update(cols => [...cols]);
|
|
111
|
+
}
|
|
112
|
+
onDialogHide() {
|
|
113
|
+
this.visibleChange.emit(false);
|
|
114
|
+
}
|
|
115
|
+
async doExport() {
|
|
116
|
+
this.exporting.set(true);
|
|
117
|
+
const cfg = this.config();
|
|
118
|
+
const selectedCols = this.columnSelections().filter(c => c.selected).map(c => c.column);
|
|
119
|
+
try {
|
|
120
|
+
await this.exportViaBackend(cfg, selectedCols);
|
|
121
|
+
this.exported.emit();
|
|
122
|
+
this.visibleChange.emit(false);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
this.exportError.emit(cfg.entityName);
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
this.exporting.set(false);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async exportViaBackend(cfg, columns) {
|
|
132
|
+
const fileType = this.selectedFileType();
|
|
133
|
+
const orientation = this.selectedOrientation();
|
|
134
|
+
const fileFormat = this.selectedFileFormat();
|
|
135
|
+
if (this.hasSelectedIds() && this.exportScope() === 'selected') {
|
|
136
|
+
await this.exportService.exportSelectedRecords({
|
|
137
|
+
datasource: cfg.datasource, fields: columns,
|
|
138
|
+
selectedIds: this.selectedIds(), entityName: cfg.entityName, fileType, orientation, fileFormat
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
await this.exportService.exportAllRecords({
|
|
143
|
+
datasource: cfg.datasource, fields: columns,
|
|
144
|
+
filter: cfg.activeFilter ?? '', entityName: cfg.entityName, fileType, orientation, fileFormat
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ExportDataComponent, isStandalone: true, selector: "s-export-data", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, selectedIds: { classPropertyName: "selectedIds", publicName: "selectedIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange", exported: "exported", exportError: "exportError" }, usesOnChanges: true, ngImport: i0, template: "<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"visibleChange.emit($event)\"\n (onHide)=\"onDialogHide()\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n styleClass=\"s-export-dialog s-export-dialog-width\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"custom-header\">\n <i class=\"pi pi-download header-icon\"></i>\n <span>{{ 'crmx.components.export_title' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"export-content\">\n\n <!-- Formato de Exporta\u00E7\u00E3o -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-file\"></i></div>\n <h3>{{ 'crmx.components.export_file_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let fmt of fileTypes\"\n class=\"format-card\"\n [class.selected]=\"selectedFileType() === fmt.value\"\n [for]=\"'fmt_' + fmt.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"fmt.value\"\n [(ngModel)]=\"selectedFileTypeModel\"\n [inputId]=\"'fmt_' + fmt.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\" [class.excel]=\"fmt.value === 'EXCEL'\" [class.pdf]=\"fmt.value === 'PDF'\">\n <i class=\"pi\" [ngClass]=\"fmt.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ fmt.label }}</span>\n <span class=\"card-description\">{{ fmt.description }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Orienta\u00E7\u00E3o + Formato da folha (apenas PDF) -->\n @if (selectedFileType() === 'PDF') {\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-arrows-alt\"></i></div>\n <h3>{{ 'crmx.components.export_orientation' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let o of orientations\"\n class=\"format-card\"\n [class.selected]=\"selectedOrientation() === o.value\"\n [for]=\"'orient_' + o.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"o.value\"\n [(ngModel)]=\"selectedOrientationModel\"\n [inputId]=\"'orient_' + o.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi\" [ngClass]=\"o.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ o.label }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-stop\"></i></div>\n <h3>{{ 'crmx.components.export_sheet_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let f of fileFormats\"\n class=\"format-card\"\n [class.selected]=\"selectedFileFormat() === f.value\"\n [for]=\"'format_' + f.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"f.value\"\n [(ngModel)]=\"selectedFileFormatModel\"\n [inputId]=\"'format_' + f.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ f.label }}</span>\n <span class=\"card-description\">{{ f.description }}</span>\n </div>\n </label>\n </div>\n </div>\n }\n\n <!-- Escopo -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-filter\"></i></div>\n <h3>{{ 'crmx.components.export_scope' | translate }}</h3>\n </div>\n <div class=\"scope-options\" role=\"radiogroup\">\n <label\n class=\"scope-card\"\n [class.selected]=\"!hasSelectedIds()\"\n for=\"scope_all\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"all\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_all\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-list\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_all' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_all_desc' | translate }}</span>\n </div>\n </label>\n <label\n class=\"scope-card\"\n [class.selected]=\"hasSelectedIds()\"\n [class.disabled]=\"!hasSelectedIds()\"\n for=\"scope_selected\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"selected\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_selected\"\n [disabled]=\"!hasSelectedIds()\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-check-square\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_selected' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_selected_desc' | translate }}</span>\n <span class=\"card-count\">\n <i class=\"pi pi-circle-fill\"></i>\n {{ 'crmx.components.export_records_selected' | translate:{ count: selectedIds().length } }}\n </span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Sele\u00E7\u00E3o de Colunas -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-table\"></i></div>\n <h3>{{ 'crmx.components.export_columns' | translate }}</h3>\n <div class=\"column-actions\">\n <button type=\"button\" class=\"action-link\" (click)=\"selectAllColumns()\">\n {{ 'crmx.components.export_columns_all' | translate }}\n </button>\n <span class=\"separator\">|</span>\n <button type=\"button\" class=\"action-link\" (click)=\"deselectAllColumns()\">\n {{ 'crmx.components.export_columns_none' | translate }}\n </button>\n </div>\n </div>\n <div class=\"columns-grid\">\n <label\n *ngFor=\"let col of columnSelections()\"\n class=\"column-item\"\n [class.selected]=\"col.selected\"\n [for]=\"'col_' + col.column.columnName\"\n >\n <p-checkbox\n [(ngModel)]=\"col.selected\"\n [binary]=\"true\"\n [inputId]=\"'col_' + col.column.columnName\"\n (onChange)=\"refreshColumns()\"\n ></p-checkbox>\n <span class=\"column-label\">{{ col.column.translateKey }}</span>\n </label>\n </div>\n <div class=\"columns-summary\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{\n 'crmx.components.export_columns_summary'\n | translate:{ selected: selectedColumnsCount(), total: columnSelections().length }\n }}\n </span>\n </div>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onDialogHide()\"\n />\n <p-button\n [label]=\"'crmx.components.export_button' | translate\"\n icon=\"pi pi-download\"\n [disabled]=\"!canExport()\"\n [loading]=\"exporting()\"\n (onClick)=\"doExport()\"\n />\n </ng-template>\n</p-dialog>\n", styles: ["::ng-deep .s-export-dialog .p-dialog{border-radius:16px;overflow:hidden;box-shadow:0 20px 60px #0000004d}::ng-deep .s-export-dialog-width .p-dialog{width:700px}::ng-deep .s-export-dialog .p-dialog-content{padding:0;background:#fff;max-height:70vh;overflow-y:auto}::ng-deep .s-export-dialog .p-dialog-footer{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 32px}.custom-header{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:600}.custom-header .header-icon{font-size:22px;color:var(--p-primary-500)}.export-content{padding:28px 32px}.export-section{margin-bottom:32px}.export-section:last-child{margin-bottom:0}.section-header{display:flex;align-items:center;gap:12px;margin-bottom:20px}.section-icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.1),rgba(var(--p-primary-rgb),.15));border-radius:10px}.section-icon i{font-size:18px;color:var(--p-primary-500)}.section-header h3{margin:0;font-size:17px;font-weight:700;color:var(--neutral-color-800, #1f2937);flex:1}.column-actions{display:flex;align-items:center;gap:10px;font-size:13px}.action-link{background:none;border:none;color:var(--p-primary-500);cursor:pointer;font-weight:600;padding:0;transition:all .2s;font-size:13px}.separator{color:var(--neutral-color-300, #d1d5db)}.format-options{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.format-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.format-card:before{content:\"\";position:absolute;inset:0;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.03),rgba(var(--p-primary-rgb),.06));opacity:0;transition:opacity .3s}.format-card:hover{border-color:var(--p-primary-500);transform:translateY(-2px);box-shadow:0 8px 24px rgba(var(--p-primary-rgb),.15)}.format-card:hover:before{opacity:1}.format-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:12px;transition:all .3s;position:relative;z-index:1;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon i{font-size:22px;color:var(--p-primary-500)}.card-count i{font-size:6px}.columns-summary i{color:var(--p-primary-500);font-size:18px}.card-icon.excel{background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon.excel i{color:#107c41;font-size:26px}.card-icon.pdf{background:linear-gradient(135deg,#fee8e8,#fdd4d4)}.card-icon.pdf i{color:#dc2626;font-size:26px}.format-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.format-card.selected .card-icon i{color:#fff}.card-info{flex:1;display:flex;flex-direction:column;gap:4px;position:relative;z-index:1}.card-label{font-size:16px;font-weight:700;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0}.card-description{font-size:13px;color:var(--neutral-color-600, #4b5563);line-height:1.4}.scope-options{display:flex;flex-direction:column;gap:14px}.scope-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.scope-card:hover:not(.disabled){border-color:var(--p-primary-500);box-shadow:0 4px 16px rgba(var(--p-primary-rgb),.12)}.scope-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-count{font-size:13px;font-weight:600;color:var(--p-primary-500);margin-top:6px;display:inline-flex;align-items:center;gap:6px}.scope-card.disabled{opacity:.5;cursor:not-allowed;background:#f9fafb}.scope-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.scope-card.selected .card-icon i{color:#fff}.columns-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.column-item{display:flex;align-items:center;gap:12px;padding:16px;border:2px solid #e5e7eb;border-radius:10px;transition:all .2s;background:#fff;cursor:pointer}.column-item:hover{border-color:var(--p-primary-500);background:rgba(var(--p-primary-rgb),.03)}.column-item.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08))}.column-label{font-size:14px;font-weight:600;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0;-webkit-user-select:none;user-select:none}.columns-summary{display:flex;align-items:center;gap:10px;padding:14px 18px;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%);border-radius:10px;font-size:14px;color:var(--neutral-color-700, #374151);font-weight:600}@media (max-width: 768px){::ng-deep .s-export-dialog .p-dialog{width:95vw!important;margin:0}.export-content{padding:24px}.format-options,.columns-grid{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i5.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: "ngmodule", type: RadioButtonModule }, { kind: "component", type: i6.RadioButton, selector: "p-radioButton, p-radiobutton, p-radio-button", inputs: ["value", "formControlName", "name", "disabled", "variant", "size", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "autofocus", "binary"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i7.Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "name", "disabled", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "inputStyle", "styleClass", "inputClass", "indeterminate", "size", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataComponent, decorators: [{
|
|
152
|
+
type: Component,
|
|
153
|
+
args: [{ selector: 's-export-data', standalone: true, imports: [
|
|
154
|
+
CommonModule,
|
|
155
|
+
FormsModule,
|
|
156
|
+
DialogModule,
|
|
157
|
+
ButtonModule,
|
|
158
|
+
RadioButtonModule,
|
|
159
|
+
CheckboxModule,
|
|
160
|
+
TranslatePipe
|
|
161
|
+
], template: "<p-dialog\n [visible]=\"visible()\"\n (visibleChange)=\"visibleChange.emit($event)\"\n (onHide)=\"onDialogHide()\"\n [modal]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n styleClass=\"s-export-dialog s-export-dialog-width\"\n>\n <ng-template pTemplate=\"header\">\n <div class=\"custom-header\">\n <i class=\"pi pi-download header-icon\"></i>\n <span>{{ 'crmx.components.export_title' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"export-content\">\n\n <!-- Formato de Exporta\u00E7\u00E3o -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-file\"></i></div>\n <h3>{{ 'crmx.components.export_file_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let fmt of fileTypes\"\n class=\"format-card\"\n [class.selected]=\"selectedFileType() === fmt.value\"\n [for]=\"'fmt_' + fmt.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"fmt.value\"\n [(ngModel)]=\"selectedFileTypeModel\"\n [inputId]=\"'fmt_' + fmt.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\" [class.excel]=\"fmt.value === 'EXCEL'\" [class.pdf]=\"fmt.value === 'PDF'\">\n <i class=\"pi\" [ngClass]=\"fmt.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ fmt.label }}</span>\n <span class=\"card-description\">{{ fmt.description }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Orienta\u00E7\u00E3o + Formato da folha (apenas PDF) -->\n @if (selectedFileType() === 'PDF') {\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-arrows-alt\"></i></div>\n <h3>{{ 'crmx.components.export_orientation' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let o of orientations\"\n class=\"format-card\"\n [class.selected]=\"selectedOrientation() === o.value\"\n [for]=\"'orient_' + o.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"o.value\"\n [(ngModel)]=\"selectedOrientationModel\"\n [inputId]=\"'orient_' + o.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi\" [ngClass]=\"o.icon\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ o.label }}</span>\n </div>\n </label>\n </div>\n </div>\n\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-stop\"></i></div>\n <h3>{{ 'crmx.components.export_sheet_format' | translate }}</h3>\n </div>\n <div class=\"format-options\" role=\"radiogroup\">\n <label\n *ngFor=\"let f of fileFormats\"\n class=\"format-card\"\n [class.selected]=\"selectedFileFormat() === f.value\"\n [for]=\"'format_' + f.value\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n [value]=\"f.value\"\n [(ngModel)]=\"selectedFileFormatModel\"\n [inputId]=\"'format_' + f.value\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ f.label }}</span>\n <span class=\"card-description\">{{ f.description }}</span>\n </div>\n </label>\n </div>\n </div>\n }\n\n <!-- Escopo -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-filter\"></i></div>\n <h3>{{ 'crmx.components.export_scope' | translate }}</h3>\n </div>\n <div class=\"scope-options\" role=\"radiogroup\">\n <label\n class=\"scope-card\"\n [class.selected]=\"!hasSelectedIds()\"\n for=\"scope_all\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"all\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_all\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-list\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_all' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_all_desc' | translate }}</span>\n </div>\n </label>\n <label\n class=\"scope-card\"\n [class.selected]=\"hasSelectedIds()\"\n [class.disabled]=\"!hasSelectedIds()\"\n for=\"scope_selected\"\n >\n <div class=\"card-radio\">\n <p-radioButton\n value=\"selected\"\n [(ngModel)]=\"exportScopeModel\"\n inputId=\"scope_selected\"\n [disabled]=\"!hasSelectedIds()\"\n ></p-radioButton>\n </div>\n <div class=\"card-icon\"><i class=\"pi pi-check-square\"></i></div>\n <div class=\"card-info\">\n <span class=\"card-label\">{{ 'crmx.components.export_scope_selected' | translate }}</span>\n <span class=\"card-description\">{{ 'crmx.components.export_scope_selected_desc' | translate }}</span>\n <span class=\"card-count\">\n <i class=\"pi pi-circle-fill\"></i>\n {{ 'crmx.components.export_records_selected' | translate:{ count: selectedIds().length } }}\n </span>\n </div>\n </label>\n </div>\n </div>\n\n <!-- Sele\u00E7\u00E3o de Colunas -->\n <div class=\"export-section\">\n <div class=\"section-header\">\n <div class=\"section-icon\"><i class=\"pi pi-table\"></i></div>\n <h3>{{ 'crmx.components.export_columns' | translate }}</h3>\n <div class=\"column-actions\">\n <button type=\"button\" class=\"action-link\" (click)=\"selectAllColumns()\">\n {{ 'crmx.components.export_columns_all' | translate }}\n </button>\n <span class=\"separator\">|</span>\n <button type=\"button\" class=\"action-link\" (click)=\"deselectAllColumns()\">\n {{ 'crmx.components.export_columns_none' | translate }}\n </button>\n </div>\n </div>\n <div class=\"columns-grid\">\n <label\n *ngFor=\"let col of columnSelections()\"\n class=\"column-item\"\n [class.selected]=\"col.selected\"\n [for]=\"'col_' + col.column.columnName\"\n >\n <p-checkbox\n [(ngModel)]=\"col.selected\"\n [binary]=\"true\"\n [inputId]=\"'col_' + col.column.columnName\"\n (onChange)=\"refreshColumns()\"\n ></p-checkbox>\n <span class=\"column-label\">{{ col.column.translateKey }}</span>\n </label>\n </div>\n <div class=\"columns-summary\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{\n 'crmx.components.export_columns_summary'\n | translate:{ selected: selectedColumnsCount(), total: columnSelections().length }\n }}\n </span>\n </div>\n </div>\n\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onDialogHide()\"\n />\n <p-button\n [label]=\"'crmx.components.export_button' | translate\"\n icon=\"pi pi-download\"\n [disabled]=\"!canExport()\"\n [loading]=\"exporting()\"\n (onClick)=\"doExport()\"\n />\n </ng-template>\n</p-dialog>\n", styles: ["::ng-deep .s-export-dialog .p-dialog{border-radius:16px;overflow:hidden;box-shadow:0 20px 60px #0000004d}::ng-deep .s-export-dialog-width .p-dialog{width:700px}::ng-deep .s-export-dialog .p-dialog-content{padding:0;background:#fff;max-height:70vh;overflow-y:auto}::ng-deep .s-export-dialog .p-dialog-footer{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding:16px 32px}.custom-header{display:flex;align-items:center;gap:12px;font-size:18px;font-weight:600}.custom-header .header-icon{font-size:22px;color:var(--p-primary-500)}.export-content{padding:28px 32px}.export-section{margin-bottom:32px}.export-section:last-child{margin-bottom:0}.section-header{display:flex;align-items:center;gap:12px;margin-bottom:20px}.section-icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.1),rgba(var(--p-primary-rgb),.15));border-radius:10px}.section-icon i{font-size:18px;color:var(--p-primary-500)}.section-header h3{margin:0;font-size:17px;font-weight:700;color:var(--neutral-color-800, #1f2937);flex:1}.column-actions{display:flex;align-items:center;gap:10px;font-size:13px}.action-link{background:none;border:none;color:var(--p-primary-500);cursor:pointer;font-weight:600;padding:0;transition:all .2s;font-size:13px}.separator{color:var(--neutral-color-300, #d1d5db)}.format-options{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.format-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.format-card:before{content:\"\";position:absolute;inset:0;background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.03),rgba(var(--p-primary-rgb),.06));opacity:0;transition:opacity .3s}.format-card:hover{border-color:var(--p-primary-500);transform:translateY(-2px);box-shadow:0 8px 24px rgba(var(--p-primary-rgb),.15)}.format-card:hover:before{opacity:1}.format-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-icon{width:52px;height:52px;display:flex;align-items:center;justify-content:center;border-radius:12px;transition:all .3s;position:relative;z-index:1;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon i{font-size:22px;color:var(--p-primary-500)}.card-count i{font-size:6px}.columns-summary i{color:var(--p-primary-500);font-size:18px}.card-icon.excel{background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%)}.card-icon.excel i{color:#107c41;font-size:26px}.card-icon.pdf{background:linear-gradient(135deg,#fee8e8,#fdd4d4)}.card-icon.pdf i{color:#dc2626;font-size:26px}.format-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.format-card.selected .card-icon i{color:#fff}.card-info{flex:1;display:flex;flex-direction:column;gap:4px;position:relative;z-index:1}.card-label{font-size:16px;font-weight:700;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0}.card-description{font-size:13px;color:var(--neutral-color-600, #4b5563);line-height:1.4}.scope-options{display:flex;flex-direction:column;gap:14px}.scope-card{display:flex;align-items:center;gap:16px;padding:20px;border:2px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);background:#fff;position:relative;overflow:hidden}.scope-card:hover:not(.disabled){border-color:var(--p-primary-500);box-shadow:0 4px 16px rgba(var(--p-primary-rgb),.12)}.scope-card.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08));box-shadow:0 0 0 4px rgba(var(--p-primary-rgb),.1)}.card-count{font-size:13px;font-weight:600;color:var(--p-primary-500);margin-top:6px;display:inline-flex;align-items:center;gap:6px}.scope-card.disabled{opacity:.5;cursor:not-allowed;background:#f9fafb}.scope-card.selected .card-icon{background:linear-gradient(135deg,var(--p-primary-500) 0%,var(--p-primary-500) 100%);transform:scale(1.05)}.scope-card.selected .card-icon i{color:#fff}.columns-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:16px}.column-item{display:flex;align-items:center;gap:12px;padding:16px;border:2px solid #e5e7eb;border-radius:10px;transition:all .2s;background:#fff;cursor:pointer}.column-item:hover{border-color:var(--p-primary-500);background:rgba(var(--p-primary-rgb),.03)}.column-item.selected{border-color:var(--p-primary-500);background:linear-gradient(135deg,rgba(var(--p-primary-rgb),.05),rgba(var(--p-primary-rgb),.08))}.column-label{font-size:14px;font-weight:600;color:var(--neutral-color-800, #1f2937);cursor:pointer;margin:0;-webkit-user-select:none;user-select:none}.columns-summary{display:flex;align-items:center;gap:10px;padding:14px 18px;background:linear-gradient(135deg,var(--p-primary-50, #f0fdf4) 0%,var(--p-primary-100, #dcfce7) 100%);border-radius:10px;font-size:14px;color:var(--neutral-color-700, #374151);font-weight:600}@media (max-width: 768px){::ng-deep .s-export-dialog .p-dialog{width:95vw!important;margin:0}.export-content{padding:24px}.format-options,.columns-grid{grid-template-columns:1fr}}\n"] }]
|
|
162
|
+
}] });
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9leHBvcnQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2V4cG9ydC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7OztBQUU5RDs7Ozs7OztHQU9HO0FBZ0JILE1BQU0sT0FBTyxtQkFBbUI7SUFDYixhQUFhLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixD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SUFDSCxDQUFDO3dHQTNJVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwya0JDNUNoQyw4cFFBZ09BLGs1S0QvTEksWUFBWSx5UEFDWixXQUFXLDhWQUNYLFlBQVksMGdDQUNaLFlBQVksaWJBQ1osaUJBQWlCLGlXQUNqQixjQUFjLDhiQUNkLGFBQWE7OzRGQUtKLG1CQUFtQjtrQkFmL0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGFBQWE7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgT25DaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcbmltcG9ydCB7IENoZWNrYm94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XG5cbmltcG9ydCB7IEV4cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9leHBvcnQtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydERhdGFDb25maWcsIEV4cG9ydENvbHVtbiwgRXhwb3J0Q29sdW1uSW5wdXQgfSBmcm9tICcuL2VudGl0aWVzL2V4cG9ydC1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHBvcnRGaWxlVHlwZSwgRXhwb3J0T3JpZW50YXRpb24sIEV4cG9ydEZpbGVGb3JtYXQsIEV4cG9ydENvbHVtblR5cGUgfSBmcm9tICcuL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvY29tcG9uZW50cy1haSc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBleHBvcnRhw6fDo28gZGUgZGFkb3MgKHMtZXhwb3J0LWRhdGEpLlxuICogUGVybWl0ZSBhbyB1c3XDoXJpbyBlc2NvbGhlciBvIGZvcm1hdG8gZG8gYXJxdWl2byAoRXhjZWwgb3UgUERGKSwgYSBvcmllbnRhw6fDo28gZGEgcMOhZ2luYSxcbiAqIG8gZm9ybWF0byBkYSBmb2xoYSwgbyBlc2NvcG8gKHRvZG9zIG9zIHJlZ2lzdHJvcyBvdSBhcGVuYXMgb3Mgc2VsZWNpb25hZG9zKSBlXG4gKiBhcyBjb2x1bmFzIGEgc2VyZW0gZXhwb3J0YWRhcy5cbiAqXG4gKiBDb211bmljYS1zZSBjb20gbyBgY3JteC1kYXRhLWV4cG9ydC1iYWNrZW5kYCB2aWEgSFRUUCAoZmlyZS1hbmQtZm9yZ2V0KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1leHBvcnQtZGF0YScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBSYWRpb0J1dHRvbk1vZHVsZSxcbiAgICBDaGVja2JveE1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBvcnQtZGF0YS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9leHBvcnQtZGF0YS5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0RGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwb3J0U2VydmljZSA9IGluamVjdChFeHBvcnREYXRhU2VydmljZSk7XG5cbiAgdmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdmlzaWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuICBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxFeHBvcnREYXRhQ29uZmlnPigpO1xuICBzZWxlY3RlZElkcyA9IGlucHV0PHN0cmluZ1tdPihbXSk7XG4gIGV4cG9ydGVkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIGV4cG9ydEVycm9yID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVUeXBlID0gc2lnbmFsPEV4cG9ydEZpbGVUeXBlPihFeHBvcnRGaWxlVHlwZS5FeGNlbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkT3JpZW50YXRpb24gPSBzaWduYWw8RXhwb3J0T3JpZW50YXRpb24+KEV4cG9ydE9yaWVudGF0aW9uLkxhbmRzY2FwZSk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkRmlsZUZvcm1hdCA9IHNpZ25hbDxFeHBvcnRGaWxlRm9ybWF0PihFeHBvcnRGaWxlRm9ybWF0LkE0KTtcbiAgcmVhZG9ubHkgZXhwb3J0U2NvcGUgPSBzaWduYWw8J2FsbCcgfCAnc2VsZWN0ZWQnPignYWxsJyk7XG4gIHJlYWRvbmx5IGV4cG9ydGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNvbHVtblNlbGVjdGlvbnMgPSBzaWduYWw8eyBjb2x1bW46IEV4cG9ydENvbHVtbjsgc2VsZWN0ZWQ6IGJvb2xlYW4gfVtdPihbXSk7XG5cbiAgZ2V0IHNlbGVjdGVkRmlsZVR5cGVNb2RlbCgpOiBFeHBvcnRGaWxlVHlwZSB7IHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZVR5cGUoKTsgfVxuICBzZXQgc2VsZWN0ZWRGaWxlVHlwZU1vZGVsKHY6IEV4cG9ydEZpbGVUeXBlKSB7IHRoaXMuc2VsZWN0ZWRGaWxlVHlwZS5zZXQodik7IH1cblxuICBnZXQgc2VsZWN0ZWRPcmllbnRhdGlvbk1vZGVsKCk6IEV4cG9ydE9yaWVudGF0aW9uIHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcmllbnRhdGlvbigpOyB9XG4gIHNldCBzZWxlY3RlZE9yaWVudGF0aW9uTW9kZWwodjogRXhwb3J0T3JpZW50YXRpb24pIHsgdGhpcy5zZWxlY3RlZE9yaWVudGF0aW9uLnNldCh2KTsgfVxuXG4gIGdldCBzZWxlY3RlZEZpbGVGb3JtYXRNb2RlbCgpOiBFeHBvcnRGaWxlRm9ybWF0IHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWxlRm9ybWF0KCk7IH1cbiAgc2V0IHNlbGVjdGVkRmlsZUZvcm1hdE1vZGVsKHY6IEV4cG9ydEZpbGVGb3JtYXQpIHsgdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQuc2V0KHYpOyB9XG5cbiAgZ2V0IGV4cG9ydFNjb3BlTW9kZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXhwb3J0U2NvcGUoKTsgfVxuICBzZXQgZXhwb3J0U2NvcGVNb2RlbCh2OiBzdHJpbmcpIHsgdGhpcy5leHBvcnRTY29wZS5zZXQodiBhcyAnYWxsJyB8ICdzZWxlY3RlZCcpOyB9XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb2x1bW5zQ291bnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucygpLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpLmxlbmd0aFxuICApO1xuICByZWFkb25seSBoYXNTZWxlY3RlZElkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJZHMoKS5sZW5ndGggPiAwKTtcbiAgcmVhZG9ubHkgY2FuRXhwb3J0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZENvbHVtbnNDb3VudCgpID4gMCAmJiAhdGhpcy5leHBvcnRpbmcoKSk7XG5cbiAgcmVhZG9ubHkgZmlsZVR5cGVzID0gW1xuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLkV4Y2VsLCBsYWJlbDogJ0V4Y2VsJywgaWNvbjogJ3BpLWZpbGUtZXhjZWwnLCBkZXNjcmlwdGlvbjogJ1BsYW5pbGhhIGNvbSBjb2x1bmFzIGFqdXN0w6F2ZWlzJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydEZpbGVUeXBlLlBkZiwgICBsYWJlbDogJ1BERicsICAgaWNvbjogJ3BpLWZpbGUtcGRmJywgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50byBmb3JtYXRhZG8gcGFyYSBpbXByZXNzw6NvJyB9XG4gIF07XG4gIHJlYWRvbmx5IG9yaWVudGF0aW9ucyA9IFtcbiAgICB7IHZhbHVlOiBFeHBvcnRPcmllbnRhdGlvbi5MYW5kc2NhcGUsIGxhYmVsOiAnUGFpc2FnZW0gKEhvcml6b250YWwpJywgaWNvbjogJ3BpLWFycm93cy1oJyB9LFxuICAgIHsgdmFsdWU6IEV4cG9ydE9yaWVudGF0aW9uLlBvcnRyYWl0LCAgbGFiZWw6ICdSZXRyYXRvIChWZXJ0aWNhbCknLCAgICBpY29uOiAncGktYXJyb3dzLXYnIH1cbiAgXTtcbiAgcmVhZG9ubHkgZmlsZUZvcm1hdHMgPSBbXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BNCwgbGFiZWw6ICdBNCcsIGRlc2NyaXB0aW9uOiAnUGFkcsOjbyAoMjEww5cyOTdtbSknIH0sXG4gICAgeyB2YWx1ZTogRXhwb3J0RmlsZUZvcm1hdC5BMywgbGFiZWw6ICdBMycsIGRlc2NyaXB0aW9uOiAnR3JhbmRlICgyOTfDlzQyMG1tKScgfVxuICBdO1xuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGxldCBjZmc6IEV4cG9ydERhdGFDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNmZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47IC8vIGNvbmZpZyBhaW5kYSBuw6NvIGZvaSBzZXRhZG8gKHJlcXVpcmVkIGlucHV0KVxuICAgIH1cbiAgICBpZiAoY2ZnPy5jb2x1bW5zKSB7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMuc2V0KFxuICAgICAgICBjZmcuY29sdW1ucy5tYXAoY29sID0+ICh7IGNvbHVtbjogdGhpcy5ub3JtYWxpemVDb2x1bW4oY29sKSwgc2VsZWN0ZWQ6IHRydWUgfSkpXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBTaW5jcm9uaXphIGVzY29wbyBjb20gcHJlc2Vuw6dhIGRlIElEc1xuICAgIHRoaXMuZXhwb3J0U2NvcGUuc2V0KHRoaXMuc2VsZWN0ZWRJZHMoKS5sZW5ndGggPiAwID8gJ3NlbGVjdGVkJyA6ICdhbGwnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFeHBvcnRDb2x1bW4oY29sOiBFeHBvcnRDb2x1bW4gfCBFeHBvcnRDb2x1bW5JbnB1dCk6IGNvbCBpcyBFeHBvcnRDb2x1bW4ge1xuICAgIHJldHVybiAnY29sdW1uTmFtZScgaW4gY29sICYmICd0cmFuc2xhdGVLZXknIGluIGNvbCAmJiAnY29sdW1uVHlwZScgaW4gY29sO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW4oY29sOiBFeHBvcnRDb2x1bW4gfCBFeHBvcnRDb2x1bW5JbnB1dCk6IEV4cG9ydENvbHVtbiB7XG4gICAgaWYgKHRoaXMuaXNFeHBvcnRDb2x1bW4oY29sKSkge1xuICAgICAgcmV0dXJuIGNvbDtcbiAgICB9XG4gICAgY29uc3QgaW5wdXQgPSBjb2wgYXMgRXhwb3J0Q29sdW1uSW5wdXQ7XG4gICAgY29uc3QgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgRXhwb3J0Q29sdW1uVHlwZT4gPSB7XG4gICAgICAnVEVYVCc6IEV4cG9ydENvbHVtblR5cGUuVGV4dCwgJ05VTUJFUic6IEV4cG9ydENvbHVtblR5cGUuTnVtYmVyLFxuICAgICAgJ0VOVU0nOiBFeHBvcnRDb2x1bW5UeXBlLkVudW0sICdEQVRFJzogRXhwb3J0Q29sdW1uVHlwZS5EYXRlLFxuICAgICAgJ0RBVEVUSU1FJzogRXhwb3J0Q29sdW1uVHlwZS5EYXRldGltZSwgJ0NVUlJFTkNZJzogRXhwb3J0Q29sdW1uVHlwZS5DdXJyZW5jeSxcbiAgICAgICdzdGF0dXMnOiBFeHBvcnRDb2x1bW5UeXBlLkVudW0sICdudW1iZXInOiBFeHBvcnRDb2x1bW5UeXBlLk51bWJlciwgJ3RleHQnOiBFeHBvcnRDb2x1bW5UeXBlLlRleHRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb2x1bW5OYW1lOiBpbnB1dC5maWVsZCxcbiAgICAgIHRyYW5zbGF0ZUtleTogaW5wdXQuaGVhZGVyLFxuICAgICAgY29sdW1uVHlwZTogdHlwZU1hcFtpbnB1dC5leHBvcnRUeXBlID8/ICdURVhUJ10gPz8gRXhwb3J0Q29sdW1uVHlwZS5UZXh0LFxuICAgICAgdHJhbnNsYXRpb25LZXlQcmVmaXg6IGlucHV0LnRyYW5zbGF0aW9uS2V5UHJlZml4XG4gICAgfTtcbiAgfVxuXG4gIHNlbGVjdEFsbENvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5TZWxlY3Rpb25zLnVwZGF0ZShjb2xzID0+IGNvbHMubWFwKGMgPT4gKHsgLi4uYywgc2VsZWN0ZWQ6IHRydWUgfSkpKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtblNlbGVjdGlvbnMudXBkYXRlKGNvbHMgPT4gY29scy5tYXAoYyA9PiAoeyAuLi5jLCBzZWxlY3RlZDogZmFsc2UgfSkpKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbHVtbihjb2w6IHsgY29sdW1uOiBFeHBvcnRDb2x1bW47IHNlbGVjdGVkOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb2wuc2VsZWN0ZWQgPSAhY29sLnNlbGVjdGVkO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnMoKTtcbiAgfVxuXG4gIHJlZnJlc2hDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuY29sdW1uU2VsZWN0aW9ucy51cGRhdGUoY29scyA9PiBbLi4uY29sc10pO1xuICB9XG5cbiAgb25EaWFsb2dIaWRlKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGRvRXhwb3J0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXhwb3J0aW5nLnNldCh0cnVlKTtcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGNvbnN0IHNlbGVjdGVkQ29scyA9IHRoaXMuY29sdW1uU2VsZWN0aW9ucygpLmZpbHRlcihjID0+IGMuc2VsZWN0ZWQpLm1hcChjID0+IGMuY29sdW1uKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5leHBvcnRWaWFCYWNrZW5kKGNmZywgc2VsZWN0ZWRDb2xzKTtcbiAgICAgIHRoaXMuZXhwb3J0ZWQuZW1pdCgpO1xuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5leHBvcnRFcnJvci5lbWl0KGNmZy5lbnRpdHlOYW1lKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5leHBvcnRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4cG9ydFZpYUJhY2tlbmQoY2ZnOiBFeHBvcnREYXRhQ29uZmlnLCBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5zZWxlY3RlZEZpbGVUeXBlKCk7XG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSB0aGlzLnNlbGVjdGVkT3JpZW50YXRpb24oKTtcbiAgICBjb25zdCBmaWxlRm9ybWF0ID0gdGhpcy5zZWxlY3RlZEZpbGVGb3JtYXQoKTtcblxuICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkSWRzKCkgJiYgdGhpcy5leHBvcnRTY29wZSgpID09PSAnc2VsZWN0ZWQnKSB7XG4gICAgICBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0U2VsZWN0ZWRSZWNvcmRzKHtcbiAgICAgICAgZGF0YXNvdXJjZTogY2ZnLmRhdGFzb3VyY2UsIGZpZWxkczogY29sdW1ucyxcbiAgICAgICAgc2VsZWN0ZWRJZHM6IHRoaXMuc2VsZWN0ZWRJZHMoKSwgZW50aXR5TmFtZTogY2ZnLmVudGl0eU5hbWUsIGZpbGVUeXBlLCBvcmllbnRhdGlvbiwgZmlsZUZvcm1hdFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRBbGxSZWNvcmRzKHtcbiAgICAgICAgZGF0YXNvdXJjZTogY2ZnLmRhdGFzb3VyY2UsIGZpZWxkczogY29sdW1ucyxcbiAgICAgICAgZmlsdGVyOiBjZmcuYWN0aXZlRmlsdGVyID8/ICcnLCBlbnRpdHlOYW1lOiBjZmcuZW50aXR5TmFtZSwgZmlsZVR5cGUsIG9yaWVudGF0aW9uLCBmaWxlRm9ybWF0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxwLWRpYWxvZ1xuICBbdmlzaWJsZV09XCJ2aXNpYmxlKClcIlxuICAodmlzaWJsZUNoYW5nZSk9XCJ2aXNpYmxlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gIChvbkhpZGUpPVwib25EaWFsb2dIaWRlKClcIlxuICBbbW9kYWxdPVwidHJ1ZVwiXG4gIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICBbcmVzaXphYmxlXT1cImZhbHNlXCJcbiAgc3R5bGVDbGFzcz1cInMtZXhwb3J0LWRpYWxvZyBzLWV4cG9ydC1kaWFsb2ctd2lkdGhcIlxuPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImN1c3RvbS1oZWFkZXJcIj5cbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZG93bmxvYWQgaGVhZGVyLWljb25cIj48L2k+XG4gICAgICA8c3Bhbj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF90aXRsZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiBjbGFzcz1cImV4cG9ydC1jb250ZW50XCI+XG5cbiAgICA8IS0tIEZvcm1hdG8gZGUgRXhwb3J0YcOnw6NvIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWZpbGVcIj48L2k+PC9kaXY+XG4gICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9maWxlX2Zvcm1hdCcgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybWF0LW9wdGlvbnNcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZm10IG9mIGZpbGVUeXBlc1wiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtYXQtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkRmlsZVR5cGUoKSA9PT0gZm10LnZhbHVlXCJcbiAgICAgICAgICBbZm9yXT1cIidmbXRfJyArIGZtdC52YWx1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1yYWRpb1wiPlxuICAgICAgICAgICAgPHAtcmFkaW9CdXR0b25cbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImZtdC52YWx1ZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGaWxlVHlwZU1vZGVsXCJcbiAgICAgICAgICAgICAgW2lucHV0SWRdPVwiJ2ZtdF8nICsgZm10LnZhbHVlXCJcbiAgICAgICAgICAgID48L3AtcmFkaW9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiIFtjbGFzcy5leGNlbF09XCJmbXQudmFsdWUgPT09ICdFWENFTCdcIiBbY2xhc3MucGRmXT1cImZtdC52YWx1ZSA9PT0gJ1BERidcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJmbXQuaWNvblwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbmZvXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57eyBmbXQubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyBmbXQuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gT3JpZW50YcOnw6NvICsgRm9ybWF0byBkYSBmb2xoYSAoYXBlbmFzIFBERikgLS0+XG4gICAgQGlmIChzZWxlY3RlZEZpbGVUeXBlKCkgPT09ICdQREYnKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktYXJyb3dzLWFsdFwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8aDM+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfb3JpZW50YXRpb24nIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtYXQtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbyBvZiBvcmllbnRhdGlvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtY2FyZFwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRPcmllbnRhdGlvbigpID09PSBvLnZhbHVlXCJcbiAgICAgICAgICAgIFtmb3JdPVwiJ29yaWVudF8nICsgby52YWx1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgICAgPHAtcmFkaW9CdXR0b25cbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiby52YWx1ZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE9yaWVudGF0aW9uTW9kZWxcIlxuICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cIidvcmllbnRfJyArIG8udmFsdWVcIlxuICAgICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbbmdDbGFzc109XCJvLmljb25cIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWluZm9cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgby5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1zdG9wXCI+PC9pPjwvZGl2PlxuICAgICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zaGVldF9mb3JtYXQnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtYXQtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZiBvZiBmaWxlRm9ybWF0c1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm1hdC1jYXJkXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3RlZEZpbGVGb3JtYXQoKSA9PT0gZi52YWx1ZVwiXG4gICAgICAgICAgICBbZm9yXT1cIidmb3JtYXRfJyArIGYudmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhZGlvXCI+XG4gICAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImYudmFsdWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGaWxlRm9ybWF0TW9kZWxcIlxuICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cIidmb3JtYXRfJyArIGYudmFsdWVcIlxuICAgICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pY29uXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZmlsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57eyBmLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyBmLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIEVzY29wbyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1pY29uXCI+PGkgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIj48L2k+PC9kaXY+XG4gICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZScgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2NvcGUtb3B0aW9uc1wiIHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwic2NvcGUtY2FyZFwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIiFoYXNTZWxlY3RlZElkcygpXCJcbiAgICAgICAgICBmb3I9XCJzY29wZV9hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtcmFkaW9cIj5cbiAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uXG4gICAgICAgICAgICAgIHZhbHVlPVwiYWxsXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleHBvcnRTY29wZU1vZGVsXCJcbiAgICAgICAgICAgICAgaW5wdXRJZD1cInNjb3BlX2FsbFwiXG4gICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWxpc3RcIj48L2k+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfc2NvcGVfYWxsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1kZXNjcmlwdGlvblwiPnt7ICdjcm14LmNvbXBvbmVudHMuZXhwb3J0X3Njb3BlX2FsbF9kZXNjJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJzY29wZS1jYXJkXCJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaGFzU2VsZWN0ZWRJZHMoKVwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFoYXNTZWxlY3RlZElkcygpXCJcbiAgICAgICAgICBmb3I9XCJzY29wZV9zZWxlY3RlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1yYWRpb1wiPlxuICAgICAgICAgICAgPHAtcmFkaW9CdXR0b25cbiAgICAgICAgICAgICAgdmFsdWU9XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhwb3J0U2NvcGVNb2RlbFwiXG4gICAgICAgICAgICAgIGlucHV0SWQ9XCJzY29wZV9zZWxlY3RlZFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRJZHMoKVwiXG4gICAgICAgICAgICA+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWljb25cIj48aSBjbGFzcz1cInBpIHBpLWNoZWNrLXNxdWFyZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbmZvXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWxcIj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZV9zZWxlY3RlZCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb25cIj57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9zY29wZV9zZWxlY3RlZF9kZXNjJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1jb3VudFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNpcmNsZS1maWxsXCI+PC9pPlxuICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9yZWNvcmRzX3NlbGVjdGVkJyB8IHRyYW5zbGF0ZTp7IGNvdW50OiBzZWxlY3RlZElkcygpLmxlbmd0aCB9IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VsZcOnw6NvIGRlIENvbHVuYXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImV4cG9ydC1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taWNvblwiPjxpIGNsYXNzPVwicGkgcGktdGFibGVcIj48L2k+PC9kaXY+XG4gICAgICAgIDxoMz57eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9jb2x1bW5zJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWN0aW9uLWxpbmtcIiAoY2xpY2spPVwic2VsZWN0QWxsQ29sdW1ucygpXCI+XG4gICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLmV4cG9ydF9jb2x1bW5zX2FsbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPnw8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb24tbGlua1wiIChjbGljayk9XCJkZXNlbGVjdEFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1uc19ub25lJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnMtZ3JpZFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtblNlbGVjdGlvbnMoKVwiXG4gICAgICAgICAgY2xhc3M9XCJjb2x1bW4taXRlbVwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImNvbC5zZWxlY3RlZFwiXG4gICAgICAgICAgW2Zvcl09XCInY29sXycgKyBjb2wuY29sdW1uLmNvbHVtbk5hbWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAtY2hlY2tib3hcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLnNlbGVjdGVkXCJcbiAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaW5wdXRJZF09XCInY29sXycgKyBjb2wuY29sdW1uLmNvbHVtbk5hbWVcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInJlZnJlc2hDb2x1bW5zKClcIlxuICAgICAgICAgID48L3AtY2hlY2tib3g+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4tbGFiZWxcIj57eyBjb2wuY29sdW1uLnRyYW5zbGF0ZUtleSB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnMtc3VtbWFyeVwiPlxuICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5leHBvcnRfY29sdW1uc19zdW1tYXJ5J1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTp7IHNlbGVjdGVkOiBzZWxlY3RlZENvbHVtbnNDb3VudCgpLCB0b3RhbDogY29sdW1uU2VsZWN0aW9ucygpLmxlbmd0aCB9XG4gICAgICAgICAgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxwLWJ1dHRvblxuICAgICAgW2xhYmVsXT1cIidjcm14LmNvbXBvbmVudHMuY2FuY2VsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBpY29uPVwicGkgcGktdGltZXNcIlxuICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAob25DbGljayk9XCJvbkRpYWxvZ0hpZGUoKVwiXG4gICAgLz5cbiAgICA8cC1idXR0b25cbiAgICAgIFtsYWJlbF09XCInY3JteC5jb21wb25lbnRzLmV4cG9ydF9idXR0b24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIGljb249XCJwaSBwaS1kb3dubG9hZFwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWNhbkV4cG9ydCgpXCJcbiAgICAgIFtsb2FkaW5nXT1cImV4cG9ydGluZygpXCJcbiAgICAgIChvbkNsaWNrKT1cImRvRXhwb3J0KClcIlxuICAgIC8+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { firstValueFrom } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
/**
|
|
6
|
+
* Serviço que dispara os signals de exportação no `crmx-data-export-backend`.
|
|
7
|
+
*
|
|
8
|
+
* Os signals são fire-and-forget: o backend processa e gera o arquivo de forma assíncrona.
|
|
9
|
+
*/
|
|
10
|
+
export class ExportDataService {
|
|
11
|
+
http;
|
|
12
|
+
signalsUrl = '/crmx/data_export/signals';
|
|
13
|
+
constructor(http) {
|
|
14
|
+
this.http = http;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Dispara `exportSelectedRecordsSignal` — exporta apenas os IDs informados.
|
|
18
|
+
*/
|
|
19
|
+
async exportSelectedRecords(payload) {
|
|
20
|
+
await firstValueFrom(this.http.post(`${this.signalsUrl}/exportSelectedRecordsSignal`, payload));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Dispara `exportAllRecordsSignal` — exporta todos os registros com filtro.
|
|
24
|
+
*/
|
|
25
|
+
async exportAllRecords(payload) {
|
|
26
|
+
await firstValueFrom(this.http.post(`${this.signalsUrl}/exportAllRecordsSignal`, payload));
|
|
27
|
+
}
|
|
28
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
29
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, providedIn: 'root' });
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportDataService, decorators: [{
|
|
32
|
+
type: Injectable,
|
|
33
|
+
args: [{ providedIn: 'root' }]
|
|
34
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0LWRhdGEvc2VydmljZXMvZXhwb3J0LWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUd0Qzs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQUdDO0lBRlosVUFBVSxHQUFHLDJCQUEyQixDQUFDO0lBRTFELFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRWpEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQThCO1FBQ3hELE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyxDQUNoRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQXlCO1FBQzlDLE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUMzRSxDQUFDO0lBQ0osQ0FBQzt3R0FyQlUsaUJBQWlCOzRHQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXhwb3J0QWxsUGF5bG9hZCwgRXhwb3J0U2VsZWN0ZWRQYXlsb2FkIH0gZnJvbSAnLi4vZW50aXRpZXMvZXhwb3J0LWRhdGEuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBTZXJ2acOnbyBxdWUgZGlzcGFyYSBvcyBzaWduYWxzIGRlIGV4cG9ydGHDp8OjbyBubyBgY3JteC1kYXRhLWV4cG9ydC1iYWNrZW5kYC5cbiAqXG4gKiBPcyBzaWduYWxzIHPDo28gZmlyZS1hbmQtZm9yZ2V0OiBvIGJhY2tlbmQgcHJvY2Vzc2EgZSBnZXJhIG8gYXJxdWl2byBkZSBmb3JtYSBhc3PDrW5jcm9uYS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBFeHBvcnREYXRhU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2lnbmFsc1VybCA9ICcvY3JteC9kYXRhX2V4cG9ydC9zaWduYWxzJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQpIHt9XG5cbiAgLyoqXG4gICAqIERpc3BhcmEgYGV4cG9ydFNlbGVjdGVkUmVjb3Jkc1NpZ25hbGAg4oCUIGV4cG9ydGEgYXBlbmFzIG9zIElEcyBpbmZvcm1hZG9zLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0U2VsZWN0ZWRSZWNvcmRzKHBheWxvYWQ6IEV4cG9ydFNlbGVjdGVkUGF5bG9hZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5odHRwLnBvc3Q8dm9pZD4oYCR7dGhpcy5zaWduYWxzVXJsfS9leHBvcnRTZWxlY3RlZFJlY29yZHNTaWduYWxgLCBwYXlsb2FkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGFyYSBgZXhwb3J0QWxsUmVjb3Jkc1NpZ25hbGAg4oCUIGV4cG9ydGEgdG9kb3Mgb3MgcmVnaXN0cm9zIGNvbSBmaWx0cm8uXG4gICAqL1xuICBhc3luYyBleHBvcnRBbGxSZWNvcmRzKHBheWxvYWQ6IEV4cG9ydEFsbFBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuaHR0cC5wb3N0PHZvaWQ+KGAke3RoaXMuc2lnbmFsc1VybH0vZXhwb3J0QWxsUmVjb3Jkc1NpZ25hbGAsIHBheWxvYWQpXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -106,5 +106,20 @@
|
|
|
106
106
|
"crmx.components.chatbot_typing_2": "Analyzing your question...",
|
|
107
107
|
"crmx.components.chatbot_typing_3": "Gathering information...",
|
|
108
108
|
"crmx.components.chatbot_typing_4": "Almost there!",
|
|
109
|
-
"crmx.components.chatbot_typing_5": "Wrapping up the answer..."
|
|
109
|
+
"crmx.components.chatbot_typing_5": "Wrapping up the answer...",
|
|
110
|
+
"crmx.components.export_title": "Export Data",
|
|
111
|
+
"crmx.components.export_file_format": "File format",
|
|
112
|
+
"crmx.components.export_orientation": "Page orientation",
|
|
113
|
+
"crmx.components.export_sheet_format": "Sheet format",
|
|
114
|
+
"crmx.components.export_scope": "Export scope",
|
|
115
|
+
"crmx.components.export_scope_all": "All records",
|
|
116
|
+
"crmx.components.export_scope_all_desc": "Exports all records with the active filter",
|
|
117
|
+
"crmx.components.export_scope_selected": "Selected records",
|
|
118
|
+
"crmx.components.export_scope_selected_desc": "Exports only the checked items",
|
|
119
|
+
"crmx.components.export_records_selected": "{{count}} record(s) selected",
|
|
120
|
+
"crmx.components.export_columns": "Columns",
|
|
121
|
+
"crmx.components.export_columns_all": "All",
|
|
122
|
+
"crmx.components.export_columns_none": "None",
|
|
123
|
+
"crmx.components.export_columns_summary": "{{selected}} of {{total}} columns selected",
|
|
124
|
+
"crmx.components.export_button": "Export"
|
|
110
125
|
}
|
|
@@ -106,5 +106,20 @@
|
|
|
106
106
|
"crmx.components.chatbot_typing_2": "Analizando tu pregunta...",
|
|
107
107
|
"crmx.components.chatbot_typing_3": "Reuniendo información...",
|
|
108
108
|
"crmx.components.chatbot_typing_4": "¡Casi listo!",
|
|
109
|
-
"crmx.components.chatbot_typing_5": "Finalizando la respuesta..."
|
|
109
|
+
"crmx.components.chatbot_typing_5": "Finalizando la respuesta...",
|
|
110
|
+
"crmx.components.export_title": "Exportar Datos",
|
|
111
|
+
"crmx.components.export_file_format": "Formato de archivo",
|
|
112
|
+
"crmx.components.export_orientation": "Orientación de página",
|
|
113
|
+
"crmx.components.export_sheet_format": "Formato de hoja",
|
|
114
|
+
"crmx.components.export_scope": "Alcance de exportación",
|
|
115
|
+
"crmx.components.export_scope_all": "Todos los registros",
|
|
116
|
+
"crmx.components.export_scope_all_desc": "Exporta todos con el filtro activo",
|
|
117
|
+
"crmx.components.export_scope_selected": "Registros seleccionados",
|
|
118
|
+
"crmx.components.export_scope_selected_desc": "Exporta solo los elementos marcados",
|
|
119
|
+
"crmx.components.export_records_selected": "{{count}} registro(s) seleccionado(s)",
|
|
120
|
+
"crmx.components.export_columns": "Columnas",
|
|
121
|
+
"crmx.components.export_columns_all": "Todas",
|
|
122
|
+
"crmx.components.export_columns_none": "Ninguna",
|
|
123
|
+
"crmx.components.export_columns_summary": "{{selected}} de {{total}} columnas seleccionadas",
|
|
124
|
+
"crmx.components.export_button": "Exportar"
|
|
110
125
|
}
|
|
@@ -106,5 +106,20 @@
|
|
|
106
106
|
"crmx.components.chatbot_typing_2": "Analisando sua pergunta...",
|
|
107
107
|
"crmx.components.chatbot_typing_3": "Reunindo informações...",
|
|
108
108
|
"crmx.components.chatbot_typing_4": "Quase pronto!",
|
|
109
|
-
"crmx.components.chatbot_typing_5": "Finalizando a resposta..."
|
|
109
|
+
"crmx.components.chatbot_typing_5": "Finalizando a resposta...",
|
|
110
|
+
"crmx.components.export_title": "Exportar Dados",
|
|
111
|
+
"crmx.components.export_file_format": "Formato do arquivo",
|
|
112
|
+
"crmx.components.export_orientation": "Orientação da página",
|
|
113
|
+
"crmx.components.export_sheet_format": "Formato da folha",
|
|
114
|
+
"crmx.components.export_scope": "Escopo da exportação",
|
|
115
|
+
"crmx.components.export_scope_all": "Todos os registros",
|
|
116
|
+
"crmx.components.export_scope_all_desc": "Exporta todos com o filtro ativo",
|
|
117
|
+
"crmx.components.export_scope_selected": "Registros selecionados",
|
|
118
|
+
"crmx.components.export_scope_selected_desc": "Exporta apenas os itens marcados",
|
|
119
|
+
"crmx.components.export_records_selected": "{{count}} registro(s) selecionado(s)",
|
|
120
|
+
"crmx.components.export_columns": "Colunas",
|
|
121
|
+
"crmx.components.export_columns_all": "Todas",
|
|
122
|
+
"crmx.components.export_columns_none": "Nenhuma",
|
|
123
|
+
"crmx.components.export_columns_summary": "{{selected}} de {{total}} colunas selecionadas",
|
|
124
|
+
"crmx.components.export_button": "Exportar"
|
|
110
125
|
}
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -15,4 +15,8 @@ export { ScheduleDetailComponent } from './lib/components/schedule/schedule-deta
|
|
|
15
15
|
export { ScheduleService } from './lib/components/schedule/services/schedule.service';
|
|
16
16
|
export { ScheduleTypeService } from './lib/components/schedule/services/schedule-type.service';
|
|
17
17
|
export { SchedulePriority, ScheduleRecurrence, WeekDay, Month, RepeatWhen, OrdinalWeekDay, ParticipantConfirmation, Status } from './lib/components/schedule/enums/schedule.enums';
|
|
18
|
-
|
|
18
|
+
// Export Data
|
|
19
|
+
export { ExportDataComponent } from './lib/components/export-data/export-data.component';
|
|
20
|
+
export { ExportDataService } from './lib/components/export-data/services/export-data.service';
|
|
21
|
+
export { ExportFileType, ExportOrientation, ExportFileFormat, ExportColumnType } from './lib/components/export-data/enums/export-data.enums';
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFLFdBQVc7QUFDWCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFOUcsU0FBUztBQUNULE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBWTVHLFVBQVU7QUFDVixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUc5RSxXQUFXO0FBQ1gsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDeEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDOUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBSS9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFbkwsY0FBYztBQUNkLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQHNlbmlvci1nZXN0YW8tcmVsYWNpb25hbWVudG8vYW5ndWxhci1jb21wb25lbnRzXG4gKi9cblxuZXhwb3J0IHsgQW5ndWxhckNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICcuL2xpYi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlJztcblxuLy8gU2VydmljZXNcbmV4cG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvc3RvcmFnZS9zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0IHsgQ3VycmVudENvbGxhYm9yYXRvclNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jdXJyZW50LWNvbGxhYm9yYXRvci9jdXJyZW50LWNvbGxhYm9yYXRvci5zZXJ2aWNlJztcblxuLy8gQ29uZmlnXG5leHBvcnQgeyBwcm92aWRlQW5ndWxhckNvbXBvbmVudHNUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi9jb25maWcvcHJvdmlkZS1hbmd1bGFyLWNvbXBvbmVudHMtdHJhbnNsYXRpb25zJztcblxuLy8gTW9kZWxzXG5leHBvcnQgdHlwZSB7XG4gIENvbGxhYm9yYXRvcixcbiAgQ29sbGFib3JhdG9yTGVhZGVyLFxuICBDb2xsYWJvcmF0b3JCcmFuY2gsXG4gIEJyYW5jaCxcbiAgQ29tcGFueSxcbiAgSm9iVGl0bGVcbn0gZnJvbSAnLi9saWIvc2VydmljZXMvY3VycmVudC1jb2xsYWJvcmF0b3IvbW9kZWxzL2NvbGxhYm9yYXRvci5tb2RlbCc7XG5cbi8vIENoYXRib3RcbmV4cG9ydCB7IENoYXRib3RDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NoYXRib3QvY2hhdGJvdC5jb21wb25lbnQnO1xuZXhwb3J0IHR5cGUgeyBDaGF0Ym90TWVzc2FnZSB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2hhdGJvdC9jaGF0Ym90LmNvbXBvbmVudCc7XG5cbi8vIFNjaGVkdWxlXG5leHBvcnQgeyBTY2hlZHVsZUZvcm1Db21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2NoZWR1bGVEZXRhaWxDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWRldGFpbC9zY2hlZHVsZS1kZXRhaWwuY29tcG9uZW50JztcbmV4cG9ydCB7IFNjaGVkdWxlU2VydmljZSB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2NoZWR1bGUvc2VydmljZXMvc2NoZWR1bGUuc2VydmljZSc7XG5leHBvcnQgeyBTY2hlZHVsZVR5cGVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9zZXJ2aWNlcy9zY2hlZHVsZS10eXBlLnNlcnZpY2UnO1xuZXhwb3J0IHR5cGUgeyBTY2hlZHVsZSwgU2NoZWR1bGVSZWN1cnJlbmNlSXRlbSwgUmVjdXJyZW5jZURhdGVzUmVjb3JkLCBTY2hlZHVsZVBhcnRpY2lwYW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zY2hlZHVsZS9lbnRpdGllcy9zY2hlZHVsZS5pbnRlcmZhY2UnO1xuZXhwb3J0IHR5cGUgeyBTY2hlZHVsZVR5cGUgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL2VudGl0aWVzL3NjaGVkdWxlLXR5cGUuaW50ZXJmYWNlJztcbmV4cG9ydCB0eXBlIHsgUGFydGljaXBhbnRMb29rdXAsIFBhcnRpY2lwYW50T3JpZ2luLCBTY2hlZHVsZVN1bW1hcnlCeURhdGUgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL2VudGl0aWVzL3BhcnRpY2lwYW50LWxvb2t1cC5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgU2NoZWR1bGVQcmlvcml0eSwgU2NoZWR1bGVSZWN1cnJlbmNlLCBXZWVrRGF5LCBNb250aCwgUmVwZWF0V2hlbiwgT3JkaW5hbFdlZWtEYXksIFBhcnRpY2lwYW50Q29uZmlybWF0aW9uLCBTdGF0dXMgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL2VudW1zL3NjaGVkdWxlLmVudW1zJztcblxuLy8gRXhwb3J0IERhdGFcbmV4cG9ydCB7IEV4cG9ydERhdGFDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2V4cG9ydC1kYXRhLmNvbXBvbmVudCc7XG5leHBvcnQgeyBFeHBvcnREYXRhU2VydmljZSB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXhwb3J0LWRhdGEvc2VydmljZXMvZXhwb3J0LWRhdGEuc2VydmljZSc7XG5leHBvcnQgeyBFeHBvcnRGaWxlVHlwZSwgRXhwb3J0T3JpZW50YXRpb24sIEV4cG9ydEZpbGVGb3JtYXQsIEV4cG9ydENvbHVtblR5cGUgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2V4cG9ydC1kYXRhL2VudW1zL2V4cG9ydC1kYXRhLmVudW1zJztcbmV4cG9ydCB0eXBlIHsgRXhwb3J0Q29sdW1uLCBFeHBvcnRDb2x1bW5JbnB1dCwgRXhwb3J0RGF0YXNvdXJjZSwgRXhwb3J0RGF0YUNvbmZpZywgRXhwb3J0U2VsZWN0ZWRQYXlsb2FkLCBFeHBvcnRBbGxQYXlsb2FkIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnQtZGF0YS9lbnRpdGllcy9leHBvcnQtZGF0YS5pbnRlcmZhY2UnO1xuIl19
|