@es.framework/ng.ui.core 2.0.66 → 2.0.67
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/README.md +3 -3
- package/attachments/README.md +3 -3
- package/base-crud/README.md +3 -3
- package/breadcrumb/README.md +3 -3
- package/checkbox/README.md +3 -3
- package/collapsible/README.md +3 -3
- package/color-picker/README.md +3 -3
- package/column-settings-popover/README.md +3 -3
- package/custom-switch/README.md +3 -3
- package/datepicker/README.md +3 -3
- package/deactivation-reason/README.md +3 -3
- package/excel-import/README.md +3 -3
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-attachments.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-base-crud.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs +110 -109
- package/fesm2022/es.framework-ng.ui.core-breadcrumb.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs +54 -54
- package/fesm2022/es.framework-ng.ui.core-checkbox.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-collapsible.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs +44 -44
- package/fesm2022/es.framework-ng.ui.core-color-picker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-column-settings-popover.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-custom-switch.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs +178 -178
- package/fesm2022/es.framework-ng.ui.core-datepicker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs +46 -46
- package/fesm2022/es.framework-ng.ui.core-deactivation-reason.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-excel-import.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs +624 -624
- package/fesm2022/es.framework-ng.ui.core-filter-templates.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-form-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs +80 -80
- package/fesm2022/es.framework-ng.ui.core-form-field.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-form-template.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-image.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs +44 -44
- package/fesm2022/es.framework-ng.ui.core-formly-avatar-label.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs +92 -92
- package/fesm2022/es.framework-ng.ui.core-formly-button-selector.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs +24 -24
- package/fesm2022/es.framework-ng.ui.core-formly-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-presets.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs +366 -366
- package/fesm2022/es.framework-ng.ui.core-formly-prime-icon-picker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs +16 -16
- package/fesm2022/es.framework-ng.ui.core-formly-split-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-ui-all.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-ui.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs +16 -16
- package/fesm2022/es.framework-ng.ui.core-formly-username-with-domain.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-assets.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs +38 -38
- package/fesm2022/es.framework-ng.ui.core-generic-autocomplete.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-button.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-card.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs +12 -5
- package/fesm2022/es.framework-ng.ui.core-generic-crud-table.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-dialog.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-errormessage.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-formly-fields.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-listbox.mjs +64 -64
- package/fesm2022/es.framework-ng.ui.core-generic-listbox.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-loadingspinner.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs +68 -68
- package/fesm2022/es.framework-ng.ui.core-generic-report-tabs.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs +4 -2
- package/fesm2022/es.framework-ng.ui.core-generic-report.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs +518 -495
- package/fesm2022/es.framework-ng.ui.core-generic-search-advanced.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-search.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-selector.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs +4 -4
- package/fesm2022/es.framework-ng.ui.core-generic-table.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-generic-view.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-header-wrapper.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs +106 -106
- package/fesm2022/es.framework-ng.ui.core-icon-picker.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs +58 -58
- package/fesm2022/es.framework-ng.ui.core-input-switch.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs +26 -26
- package/fesm2022/es.framework-ng.ui.core-input-with-icon.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-input.mjs +64 -64
- package/fesm2022/es.framework-ng.ui.core-input.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs +16 -16
- package/fesm2022/es.framework-ng.ui.core-label-type.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs +22 -22
- package/fesm2022/es.framework-ng.ui.core-loading-skeletons.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-odata-query-builder.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs +14 -14
- package/fesm2022/es.framework-ng.ui.core-query-type.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-radio.mjs +30 -30
- package/fesm2022/es.framework-ng.ui.core-radio.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs +354 -354
- package/fesm2022/es.framework-ng.ui.core-repeat.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-select.mjs +84 -84
- package/fesm2022/es.framework-ng.ui.core-select.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-sidebar-cards.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core-sidebar-toggles.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs +14 -14
- package/fesm2022/es.framework-ng.ui.core-tabs.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs +80 -80
- package/fesm2022/es.framework-ng.ui.core-tag-type.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-text-editor.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-textarea.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs +118 -118
- package/fesm2022/es.framework-ng.ui.core-wrappers.mjs.map +1 -1
- package/fesm2022/es.framework-ng.ui.core.mjs +2 -2
- package/fesm2022/es.framework-ng.ui.core.mjs.map +1 -1
- package/filter-templates/README.md +3 -3
- package/form-button/README.md +3 -3
- package/form-field/README.md +3 -3
- package/form-template/README.md +3 -3
- package/formly-avatar-image/README.md +3 -3
- package/formly-avatar-label/README.md +3 -3
- package/formly-button/README.md +3 -3
- package/formly-button-selector/README.md +3 -3
- package/formly-presets/README.md +3 -3
- package/formly-prime-icon-picker/README.md +3 -3
- package/formly-split-button/README.md +3 -3
- package/formly-ui/README.md +3 -3
- package/formly-ui-all/README.md +3 -3
- package/formly-username-with-domain/README.md +3 -3
- package/generic-assets/README.md +3 -3
- package/generic-autocomplete/README.md +3 -3
- package/generic-button/README.md +3 -3
- package/generic-card/README.md +3 -3
- package/generic-crud-table/README.md +3 -3
- package/generic-dialog/README.md +3 -3
- package/generic-errormessage/README.md +3 -3
- package/generic-formly-fields/README.md +3 -3
- package/generic-loadingspinner/README.md +3 -3
- package/generic-report/README.md +3 -3
- package/generic-search/README.md +3 -3
- package/generic-search-advanced/README.md +3 -3
- package/generic-selector/README.md +3 -3
- package/generic-table/README.md +3 -3
- package/generic-view/README.md +3 -3
- package/header-wrapper/README.md +3 -3
- package/icon-picker/README.md +3 -3
- package/input/README.md +3 -3
- package/input-switch/README.md +3 -3
- package/input-with-icon/README.md +3 -3
- package/label-type/README.md +3 -3
- package/loading-skeletons/README.md +3 -3
- package/odata-query-builder/README.md +3 -3
- package/package.json +1 -1
- package/query-type/README.md +3 -3
- package/radio/README.md +3 -3
- package/repeat/README.md +3 -3
- package/select/README.md +3 -3
- package/sidebar-cards/README.md +3 -3
- package/sidebar-toggles/README.md +3 -3
- package/styles.css +0 -0
- package/tabs/README.md +3 -3
- package/tag-type/README.md +3 -3
- package/text-editor/README.md +3 -3
- package/textarea/README.md +3 -3
- package/types/es.framework-ng.ui.core-generic-crud-table.d.ts +1 -0
- package/types/es.framework-ng.ui.core-generic-search-advanced.d.ts +5 -2
- package/wrappers/README.md +3 -3
|
@@ -217,6 +217,7 @@ class GenericReportComponent {
|
|
|
217
217
|
initializeComponent() {
|
|
218
218
|
this.apiName = this.config.data?.apiName || '';
|
|
219
219
|
this.moduleName = this.config.data?.moduleName || '';
|
|
220
|
+
this.queryString = this.config.data?.queryString || '';
|
|
220
221
|
this.initializeFilterFields();
|
|
221
222
|
this.onExport();
|
|
222
223
|
}
|
|
@@ -288,6 +289,7 @@ class GenericReportComponent {
|
|
|
288
289
|
onReset() {
|
|
289
290
|
this.exportType = ExportType.PDF;
|
|
290
291
|
this.fileName = `export_${new Date().toISOString().split('T')[0]}`;
|
|
292
|
+
this.queryString = '';
|
|
291
293
|
this.form.reset();
|
|
292
294
|
this.model = {};
|
|
293
295
|
this.generatePreview();
|
|
@@ -526,7 +528,7 @@ class GenericReportComponent {
|
|
|
526
528
|
.trim();
|
|
527
529
|
}
|
|
528
530
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericReportComponent, deps: [{ token: i1$1.DynamicDialogRef }, { token: i1$1.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component });
|
|
529
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericReportComponent, isStandalone: true, selector: "app-generic-report", inputs: { filterFields: "filterFields", enableQueryBuilder: "enableQueryBuilder", localExport: "localExport", queryString: "queryString", apiName: "apiName", moduleName: "moduleName", model: "model" }, providers: [DialogService, RestService], viewQueries: [{ propertyName: "previewContainer", first: true, predicate: ["previewContainer"], descendants: true }], ngImport: i0, template: "<!-- class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\" -->\r\n<div >\r\n <!-- Content -->\r\n <div class=\"flex-1 overflow-hidden p-2\">\r\n\r\n <!-- Preview Actions -->\r\n <div class=\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\">\r\n <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n {{ 'REPORT' | translate }}\r\n </h3>\r\n <div class=\"flex gap-2\">\r\n <!-- Filters Button -->\r\n <button\r\n type=\"button\"\r\n (click)=\"showFilters = !showFilters\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\r\n [pTooltip]=\"'SEARCH_FILTERS' | translate\">\r\n <i class=\"pi pi-filter\"></i>\r\n @if (filterCount > 0) {\r\n <span class=\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\">\r\n {{ filterCount }}\r\n </span>\r\n }\r\n </button>\r\n\r\n <!-- Refresh Preview -->\r\n <button\r\n (click)=\"generatePreview()\"\r\n [disabled]=\"loading\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\"\r\n [pTooltip]=\"'REFRESH' | translate\">\r\n <i class=\"pi pi-refresh mr-2 ml-2\" [class.animate-spin]=\"loading\"></i>\r\n {{ 'REFRESH' | translate }}\r\n </button>\r\n\r\n <!-- Print Button -->\r\n @if (exportType === 4 || exportType === 1 || exportType === 2) {\r\n <button\r\n (click)=\"print()\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\r\n [pTooltip]=\"'PRINT' | translate\">\r\n <i class=\"pi pi-print mr-2 ml-2\"></i>\r\n {{ 'PRINT' | translate }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Preview Content -->\r\n <div #previewContainer class=\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\">\r\n <!-- HTML Export Preview (Iframe) -->\r\n @if (showHtmlInIframe && htmlExportContent || showPdfModal) {\r\n <div class=\"html-export-preview\">\r\n <iframe\r\n id=\"reportIframe\"\r\n class=\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\"\r\n [style.height]=\"'600px'\"\r\n title=\"HTML Export Preview\"\r\n [src]=\"currentPdfUrl\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n frameborder=\"0\"\r\n allowfullscreen\r\n >\r\n <!-- allowfullscreen -->\r\n </iframe>\r\n </div>\r\n }\r\n <!-- <app-pdf-modal\r\n *ngIf=\"showPdfModal\"\r\n [pdfUrl]=\"currentPdfUrl\"\r\n [fileName]=\"currentFileName\"\r\n (closed)=\"onPdfModalClose()\"\r\n (downloadRequested)=\"onPdfDownload()\">\r\n </app-pdf-modal> -->\r\n\r\n <!-- Regular Preview Table -->\r\n <!-- <div *ngIf=\"!showHtmlInIframe\" class=\"p-4\">\r\n <p-table\r\n [value]=\"previewData\"\r\n [columns]=\"previewColumns\"\r\n [paginator]=\"true\"\r\n [rows]=\"10\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"Showing {first} to {last} of {totalRecords} entries\"\r\n styleClass=\"p-datatable-sm\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of previewColumns\" class=\"text-left\">\r\n {{ col.header }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <td *ngFor=\"let col of previewColumns\" class=\"text-left\">\r\n {{ rowData[col.field] }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"previewColumns.length\" class=\"text-center py-4\">\r\n <div class=\"text-center py-8\">\r\n <i class=\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\"></i>\r\n <p class=\"text-gray-500 dark:text-gray-400\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div> -->\r\n</div>\r\n\r\n<!-- <div class=\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\">\r\n<p class=\"text-sm text-green-700 dark:text-green-300\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'PREVIEW_INFO' | translate }}\r\n</p>\r\n</div> -->\r\n</div>\r\n\r\n<!-- Footer -->\r\n<div class=\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\">\r\n <div class=\"flex justify-between items-center\">\r\n <button\r\n type=\"button\"\r\n (click)=\"onReset()\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\r\n [disabled]=\"loading\">\r\n <i class=\"pi pi-refresh mr-2\"></i>\r\n {{ 'RESET' | translate }}\r\n </button>\r\n\r\n <div class=\"flex gap-2\">\r\n <button\r\n type=\"button\"\r\n (click)=\"ref?.close()\"\r\n class=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\r\n [disabled]=\"loading\">\r\n {{ 'CANCEL' | translate }}\r\n </button>\r\n\r\n <!-- SplitButton for Export -->\r\n <!-- || previewData.length === 0 -->\r\n <p-splitButton\r\n [label]=\"getExportButtonText()\"\r\n [icon]=\"getCurrentExportTypeIcon()\"\r\n [model]=\"exportMenuItems\"\r\n (onClick)=\"onExport()\"\r\n [disabled]=\"loading\"\r\n styleClass=\"p-button-primary\">\r\n </p-splitButton>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Filters Drawer -->\r\n@if(showFilters){\r\n <p-drawer\r\n [(visible)]=\"showFilters\"\r\n position=\"right\"\r\n [styleClass]=\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \"\r\n [modal]=\"true\"\r\n [dismissible]=\"true\"\r\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit(); showFilters=false\" class=\"flex flex-col flex-1\">\r\n <div class=\"flex-1 overflow-auto\">\r\n <formly-form\r\n [form]=\"form\"\r\n [fields]=\"fields_\"\r\n [model]=\"model\"\r\n [options]=\"options\">\r\n </formly-form>\r\n </div>\r\n </form>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\r\n <button\r\n type=\"submit\"\r\n pButton size=\"small\"\r\n (click)=\" onSubmit(); showFilters=false\"\r\n label=\"{{ 'SEARCH' | translate }}\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n size=\"small\"\r\n class=\"p-button-text\"\r\n (click)=\"onReset(); showFilters=false\">\r\n {{ 'CLEAR' | translate }}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n}\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "ngmodule", type: DrawerModule }, { kind: "component", type: i5.Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: TableModule }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i6.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
531
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: GenericReportComponent, isStandalone: true, selector: "app-generic-report", inputs: { filterFields: "filterFields", enableQueryBuilder: "enableQueryBuilder", localExport: "localExport", queryString: "queryString", apiName: "apiName", moduleName: "moduleName", model: "model" }, providers: [DialogService, RestService], viewQueries: [{ propertyName: "previewContainer", first: true, predicate: ["previewContainer"], descendants: true }], ngImport: i0, template: "<!-- class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\" -->\n<div >\n <!-- Content -->\n <div class=\"flex-1 overflow-hidden p-2\">\n\n <!-- Preview Actions -->\n <div class=\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\">\n <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {{ 'REPORT' | translate }}\n </h3>\n <div class=\"flex gap-2\">\n <!-- Filters Button -->\n <button\n type=\"button\"\n (click)=\"showFilters = !showFilters\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [pTooltip]=\"'SEARCH_FILTERS' | translate\">\n <i class=\"pi pi-filter\"></i>\n @if (filterCount > 0) {\n <span class=\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\">\n {{ filterCount }}\n </span>\n }\n </button>\n\n <!-- Refresh Preview -->\n <button\n (click)=\"generatePreview()\"\n [disabled]=\"loading\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\"\n [pTooltip]=\"'REFRESH' | translate\">\n <i class=\"pi pi-refresh mr-2 ml-2\" [class.animate-spin]=\"loading\"></i>\n {{ 'REFRESH' | translate }}\n </button>\n\n <!-- Print Button -->\n @if (exportType === 4 || exportType === 1 || exportType === 2) {\n <button\n (click)=\"print()\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [pTooltip]=\"'PRINT' | translate\">\n <i class=\"pi pi-print mr-2 ml-2\"></i>\n {{ 'PRINT' | translate }}\n </button>\n }\n </div>\n </div>\n\n <!-- Preview Content -->\n <div #previewContainer class=\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\">\n <!-- HTML Export Preview (Iframe) -->\n @if (showHtmlInIframe && htmlExportContent || showPdfModal) {\n <div class=\"html-export-preview\">\n <iframe\n id=\"reportIframe\"\n class=\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\"\n [style.height]=\"'600px'\"\n title=\"HTML Export Preview\"\n [src]=\"currentPdfUrl\"\n width=\"100%\"\n height=\"100%\"\n frameborder=\"0\"\n allowfullscreen\n >\n <!-- allowfullscreen -->\n </iframe>\n </div>\n }\n <!-- <app-pdf-modal\n *ngIf=\"showPdfModal\"\n [pdfUrl]=\"currentPdfUrl\"\n [fileName]=\"currentFileName\"\n (closed)=\"onPdfModalClose()\"\n (downloadRequested)=\"onPdfDownload()\">\n </app-pdf-modal> -->\n\n <!-- Regular Preview Table -->\n <!-- <div *ngIf=\"!showHtmlInIframe\" class=\"p-4\">\n <p-table\n [value]=\"previewData\"\n [columns]=\"previewColumns\"\n [paginator]=\"true\"\n [rows]=\"10\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"Showing {first} to {last} of {totalRecords} entries\"\n styleClass=\"p-datatable-sm\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of previewColumns\" class=\"text-left\">\n {{ col.header }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData>\n <tr>\n <td *ngFor=\"let col of previewColumns\" class=\"text-left\">\n {{ rowData[col.field] }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"previewColumns.length\" class=\"text-center py-4\">\n <div class=\"text-center py-8\">\n <i class=\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\"></i>\n <p class=\"text-gray-500 dark:text-gray-400\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div> -->\n</div>\n\n<!-- <div class=\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\">\n<p class=\"text-sm text-green-700 dark:text-green-300\">\n <i class=\"pi pi-info-circle mr-2\"></i>\n {{ 'PREVIEW_INFO' | translate }}\n</p>\n</div> -->\n</div>\n\n<!-- Footer -->\n<div class=\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\">\n <div class=\"flex justify-between items-center\">\n <button\n type=\"button\"\n (click)=\"onReset()\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n [disabled]=\"loading\">\n <i class=\"pi pi-refresh mr-2\"></i>\n {{ 'RESET' | translate }}\n </button>\n\n <div class=\"flex gap-2\">\n <button\n type=\"button\"\n (click)=\"ref?.close()\"\n class=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [disabled]=\"loading\">\n {{ 'CANCEL' | translate }}\n </button>\n\n <!-- SplitButton for Export -->\n <!-- || previewData.length === 0 -->\n <p-splitButton\n [label]=\"getExportButtonText()\"\n [icon]=\"getCurrentExportTypeIcon()\"\n [model]=\"exportMenuItems\"\n (onClick)=\"onExport()\"\n [disabled]=\"loading\"\n styleClass=\"p-button-primary\">\n </p-splitButton>\n </div>\n </div>\n</div>\n\n<!-- Filters Drawer -->\n@if(showFilters){\n <p-drawer\n [(visible)]=\"showFilters\"\n position=\"right\"\n [styleClass]=\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \"\n [modal]=\"true\"\n [dismissible]=\"true\"\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit(); showFilters=false\" class=\"flex flex-col flex-1\">\n <div class=\"flex-1 overflow-auto\">\n <formly-form\n [form]=\"form\"\n [fields]=\"fields_\"\n [model]=\"model\"\n [options]=\"options\">\n </formly-form>\n </div>\n </form>\n <ng-template pTemplate=\"footer\">\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\n <button\n type=\"submit\"\n pButton size=\"small\"\n (click)=\" onSubmit(); showFilters=false\"\n label=\"{{ 'SEARCH' | translate }}\">\n </button>\n <button\n type=\"button\"\n pButton\n size=\"small\"\n class=\"p-button-text\"\n (click)=\"onReset(); showFilters=false\">\n {{ 'CLEAR' | translate }}\n </button>\n </div>\n </ng-template>\n </p-drawer>\n}\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: RadioButtonModule }, { kind: "ngmodule", type: CheckboxModule }, { kind: "ngmodule", type: DrawerModule }, { kind: "component", type: i5.Drawer, selector: "p-drawer", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: TableModule }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i6.SplitButton, selector: "p-splitbutton, p-splitButton, p-split-button", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "styleClass", "menuStyle", "menuStyleClass", "dropdownIcon", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
530
532
|
}
|
|
531
533
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GenericReportComponent, decorators: [{
|
|
532
534
|
type: Component,
|
|
@@ -544,7 +546,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
544
546
|
TableModule,
|
|
545
547
|
SplitButtonModule,
|
|
546
548
|
TooltipModule
|
|
547
|
-
], providers: [DialogService, RestService], template: "<!-- class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\" -->\
|
|
549
|
+
], providers: [DialogService, RestService], template: "<!-- class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\" -->\n<div >\n <!-- Content -->\n <div class=\"flex-1 overflow-hidden p-2\">\n\n <!-- Preview Actions -->\n <div class=\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\">\n <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {{ 'REPORT' | translate }}\n </h3>\n <div class=\"flex gap-2\">\n <!-- Filters Button -->\n <button\n type=\"button\"\n (click)=\"showFilters = !showFilters\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [pTooltip]=\"'SEARCH_FILTERS' | translate\">\n <i class=\"pi pi-filter\"></i>\n @if (filterCount > 0) {\n <span class=\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\">\n {{ filterCount }}\n </span>\n }\n </button>\n\n <!-- Refresh Preview -->\n <button\n (click)=\"generatePreview()\"\n [disabled]=\"loading\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\"\n [pTooltip]=\"'REFRESH' | translate\">\n <i class=\"pi pi-refresh mr-2 ml-2\" [class.animate-spin]=\"loading\"></i>\n {{ 'REFRESH' | translate }}\n </button>\n\n <!-- Print Button -->\n @if (exportType === 4 || exportType === 1 || exportType === 2) {\n <button\n (click)=\"print()\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [pTooltip]=\"'PRINT' | translate\">\n <i class=\"pi pi-print mr-2 ml-2\"></i>\n {{ 'PRINT' | translate }}\n </button>\n }\n </div>\n </div>\n\n <!-- Preview Content -->\n <div #previewContainer class=\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\">\n <!-- HTML Export Preview (Iframe) -->\n @if (showHtmlInIframe && htmlExportContent || showPdfModal) {\n <div class=\"html-export-preview\">\n <iframe\n id=\"reportIframe\"\n class=\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\"\n [style.height]=\"'600px'\"\n title=\"HTML Export Preview\"\n [src]=\"currentPdfUrl\"\n width=\"100%\"\n height=\"100%\"\n frameborder=\"0\"\n allowfullscreen\n >\n <!-- allowfullscreen -->\n </iframe>\n </div>\n }\n <!-- <app-pdf-modal\n *ngIf=\"showPdfModal\"\n [pdfUrl]=\"currentPdfUrl\"\n [fileName]=\"currentFileName\"\n (closed)=\"onPdfModalClose()\"\n (downloadRequested)=\"onPdfDownload()\">\n </app-pdf-modal> -->\n\n <!-- Regular Preview Table -->\n <!-- <div *ngIf=\"!showHtmlInIframe\" class=\"p-4\">\n <p-table\n [value]=\"previewData\"\n [columns]=\"previewColumns\"\n [paginator]=\"true\"\n [rows]=\"10\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"Showing {first} to {last} of {totalRecords} entries\"\n styleClass=\"p-datatable-sm\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of previewColumns\" class=\"text-left\">\n {{ col.header }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData>\n <tr>\n <td *ngFor=\"let col of previewColumns\" class=\"text-left\">\n {{ rowData[col.field] }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"previewColumns.length\" class=\"text-center py-4\">\n <div class=\"text-center py-8\">\n <i class=\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\"></i>\n <p class=\"text-gray-500 dark:text-gray-400\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div> -->\n</div>\n\n<!-- <div class=\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\">\n<p class=\"text-sm text-green-700 dark:text-green-300\">\n <i class=\"pi pi-info-circle mr-2\"></i>\n {{ 'PREVIEW_INFO' | translate }}\n</p>\n</div> -->\n</div>\n\n<!-- Footer -->\n<div class=\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\">\n <div class=\"flex justify-between items-center\">\n <button\n type=\"button\"\n (click)=\"onReset()\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n [disabled]=\"loading\">\n <i class=\"pi pi-refresh mr-2\"></i>\n {{ 'RESET' | translate }}\n </button>\n\n <div class=\"flex gap-2\">\n <button\n type=\"button\"\n (click)=\"ref?.close()\"\n class=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [disabled]=\"loading\">\n {{ 'CANCEL' | translate }}\n </button>\n\n <!-- SplitButton for Export -->\n <!-- || previewData.length === 0 -->\n <p-splitButton\n [label]=\"getExportButtonText()\"\n [icon]=\"getCurrentExportTypeIcon()\"\n [model]=\"exportMenuItems\"\n (onClick)=\"onExport()\"\n [disabled]=\"loading\"\n styleClass=\"p-button-primary\">\n </p-splitButton>\n </div>\n </div>\n</div>\n\n<!-- Filters Drawer -->\n@if(showFilters){\n <p-drawer\n [(visible)]=\"showFilters\"\n position=\"right\"\n [styleClass]=\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \"\n [modal]=\"true\"\n [dismissible]=\"true\"\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit(); showFilters=false\" class=\"flex flex-col flex-1\">\n <div class=\"flex-1 overflow-auto\">\n <formly-form\n [form]=\"form\"\n [fields]=\"fields_\"\n [model]=\"model\"\n [options]=\"options\">\n </formly-form>\n </div>\n </form>\n <ng-template pTemplate=\"footer\">\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\n <button\n type=\"submit\"\n pButton size=\"small\"\n (click)=\" onSubmit(); showFilters=false\"\n label=\"{{ 'SEARCH' | translate }}\">\n </button>\n <button\n type=\"button\"\n pButton\n size=\"small\"\n class=\"p-button-text\"\n (click)=\"onReset(); showFilters=false\">\n {{ 'CLEAR' | translate }}\n </button>\n </div>\n </ng-template>\n </p-drawer>\n}\n</div>\n" }]
|
|
548
550
|
}], ctorParameters: () => [{ type: i1$1.DynamicDialogRef }, { type: i1$1.DynamicDialogConfig }], propDecorators: { previewContainer: [{
|
|
549
551
|
type: ViewChild,
|
|
550
552
|
args: ['previewContainer']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.framework-ng.ui.core-generic-report.mjs","sources":["../../../../libs/ng.ui.core/generic-report/src/lib/generic-report-module.ts","../../../../libs/ng.ui.core/generic-report/src/lib/report-name-dialog.component.ts","../../../../libs/ng.ui.core/generic-report/src/lib/generic-report.component.ts","../../../../libs/ng.ui.core/generic-report/src/lib/generic-report.component.html","../../../../libs/ng.ui.core/generic-report/src/es.framework-ng.ui.core-generic-report.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n})\r\nexport class GenericReportModule {}\r\n","// report-name-dialog.component.ts\r\nimport { Component, inject } from '@angular/core';\r\n\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { LocalizationService } from '@es.framework/ng.core/services';\r\n\r\n@Component({\r\n selector: 'app-report-name-dialog',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n TranslatePipe,\r\n ButtonModule,\r\n InputTextModule\r\n],\r\n template: `\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"fileName\" class=\"block text-sm font-medium mb-2\">\r\n {{ 'REPORT_NAME' | translate }}\r\n </label>\r\n <input\r\n id=\"fileName\"\r\n type=\"text\"\r\n [(ngModel)]=\"fileName\"\r\n pInputText\r\n class=\"w-full\"\r\n [placeholder]=\"'ENTER_REPORT_NAME' | translate\"\r\n autofocus>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2 mt-4\">\r\n <button\r\n type=\"button\"\r\n pButton\r\n class=\"p-button-text\"\r\n (click)=\"ref.close()\"\r\n [label]=\"'CANCEL' | translate\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n (click)=\"save()\"\r\n [label]=\"'SAVE' | translate\">\r\n </button>\r\n </div>\r\n `\r\n})\r\nexport class ReportNameDialogComponent {\r\n fileName: string = '';\r\n\r\n ref = inject(DynamicDialogRef);\r\n config = inject(DynamicDialogConfig);\r\n translate = inject(LocalizationService);\r\n\r\n ngOnInit() {\r\n this.fileName = this.config.data?.fileName || '';\r\n }\r\n\r\n save() {\r\n if (this.fileName?.trim()) {\r\n this.ref.close(this.fileName.trim());\r\n }\r\n }\r\n}\r\n","\r\nimport { Component, inject, OnInit, ViewChild, ElementRef, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyForm } from '@ngx-formly/core';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { DynamicDialogRef, DynamicDialogConfig, DialogService } from 'primeng/dynamicdialog';\r\nimport { LocalizationService, RestService } from '@es.framework/ng.core/services';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport { TableModule } from 'primeng/table';\r\nimport { SplitButtonModule } from 'primeng/splitbutton';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { ReportNameDialogComponent } from './report-name-dialog.component';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { QueryBuilderService } from '@es.framework/ng.ui.core/generic-search-advanced';\r\n\r\nexport interface ExportConfig {\r\n filters: any;\r\n exportType: ExportType;\r\n fileName?: string;\r\n}\r\n\r\nexport enum ExportType {\r\n LIST,\r\n HTML,\r\n PDF,\r\n EXCEL,\r\n PRINT\r\n}\r\n\r\n@Component({\r\n selector: 'app-generic-report',\r\n templateUrl: './generic-report.component.html',\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n TranslatePipe,\r\n ButtonModule,\r\n DialogModule,\r\n InputTextModule,\r\n RadioButtonModule,\r\n CheckboxModule,\r\n DrawerModule,\r\n FormlyForm,\r\n TableModule,\r\n SplitButtonModule,\r\n TooltipModule\r\n],\r\n providers:[DialogService,RestService]\r\n})\r\nexport class GenericReportComponent implements OnInit, OnDestroy {\r\n @ViewChild('previewContainer') previewContainer!: ElementRef;\r\n\r\n @Input() filterFields: FormlyFieldConfig[] = [];\r\n fields_: FormlyFieldConfig[] = [];\r\n exportType: ExportType = ExportType.PDF;\r\n fileName: string = '';\r\n showFilters: boolean = false;\r\n loading: boolean = false;\r\n currentDate: Date = new Date();\r\n previewData: any[] = [];\r\n htmlExportContent: string = '';\r\n showHtmlInIframe: boolean = false;\r\n previewColumns: any[] = [];\r\n\r\n options: FormlyFormOptions = {};\r\n @Input() enableQueryBuilder: boolean = true;\r\n @Input() localExport: boolean = false;\r\n @Input() queryString: string = '';\r\n @Input() apiName: string = '';\r\n @Input() moduleName: string = '';\r\n\r\n @Input() model: any = {};\r\n form = new FormGroup({});\r\n exportConfig!: ExportConfig;\r\n\r\n exportTypes = [\r\n { value: ExportType.EXCEL, label: 'EXCEL', icon: 'pi pi-file-excel' },\r\n { value: ExportType.PDF, label: 'PDF', icon: 'pi pi-file-pdf' },\r\n { value: ExportType.HTML, label: 'HTML', icon: 'pi pi-code' },\r\n { value: ExportType.PRINT, label: 'PRINT', icon: 'pi pi-print' }\r\n ];\r\n\r\n exportMenuItems: MenuItem[] = [];\r\n\r\n private destroy$ = new Subject<void>();\r\n private dialogService:DialogService = inject(DialogService);\r\n private translate = inject(LocalizationService);\r\n private restService: RestService = inject(RestService);\r\n private queryBuilder = inject(QueryBuilderService);\r\nprivate sanitizer: DomSanitizer = inject(DomSanitizer);\r\n constructor(\r\n public ref: DynamicDialogRef,\r\n public config: DynamicDialogConfig\r\n ) {}\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n\r\n if (this.ref) {\r\n try {\r\n this.ref.close();\r\n } catch (e) {\r\n // Ignore errors during cleanup\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.filterFields = this.config.data?.filterFields || [];\r\n this.buildQueryUIFields();\r\n this.initializeComponent();\r\n this.initializeExportConfig();\r\n this.initializeExportMenu();\r\n }\r\n get filterCount() {\r\n\r\n return this.queryBuilder.getAppliedFiltersCount(this.model).total;\r\n }\r\n private buildQueryUIFields() {\r\n if (this.enableQueryBuilder) {\r\n this.fields_ = this.queryBuilder.buildQueryUIFields(this.filterFields,true,true);\r\n } else {\r\n this.fields_ = this.filterFields;\r\n }\r\n }\r\n\r\n private initializeComponent() {\r\n this.apiName = this.config.data?.apiName || '';\r\n this.moduleName = this.config.data?.moduleName || '';\r\n this.initializeFilterFields();\r\n this.onExport();\r\n }\r\n\r\n private initializeFilterFields() {\r\n this.filterFields = this.config.data?.filterFields || this.getDefaultFilterFields();\r\n this.model = this.config.data?.model || {};\r\n this.fileName = this.config.data?.defaultFileName || `export_${new Date().toISOString().split('T')[0]}`;\r\n }\r\n\r\n private initializeExportConfig() {\r\n this.exportConfig = {\r\n filters: this.model,\r\n exportType: this.exportType,\r\n fileName: this.fileName\r\n };\r\n }\r\n\r\n private initializeExportMenu() {\r\n this.exportMenuItems = [\r\n // Edit Report Name menu item\r\n {\r\n label: this.translate.instant('EDIT_REPORT_NAME'),\r\n icon: 'pi pi-pencil',\r\n command: () => this.openReportNameDialog()\r\n },\r\n // Separator\r\n { separator: true },\r\n // Export type menu items\r\n ...this.exportTypes.map(type => ({\r\n label: this.translate.instant(type.label),\r\n icon: type.icon,\r\n command: () => this.onExportTypeChange(type.value)\r\n }))\r\n ];\r\n}\r\n\r\nprivate openReportNameDialog() {\r\n const ref = this.dialogService.open(ReportNameDialogComponent, {\r\n header: this.translate.instant('EDIT_REPORT_NAME'),\r\n width: '500px',\r\n data: {\r\n fileName: this.fileName\r\n }\r\n });\r\n\r\n ref?.onClose.subscribe((result: string) => {\r\n if (result) {\r\n this.fileName = result;\r\n }\r\n });\r\n}\r\n\r\n private getDefaultFilterFields(): FormlyFieldConfig[] {\r\n return [\r\n {\r\n key: 'search',\r\n type: 'input',\r\n props: {\r\n label: this.translate.instant('SEARCH'),\r\n placeholder: this.translate.instant('ENTER_SEARCH_TERM'),\r\n }\r\n }\r\n ];\r\n }\r\n\r\n // Query and Preview Methods\r\n generatePreview() {\r\n this.onExport();\r\n }\r\n\r\n onSubmit() {\r\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\r\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\r\n this.onExport();\r\n }\r\n\r\n onReset() {\r\n this.exportType = ExportType.PDF;\r\n this.fileName = `export_${new Date().toISOString().split('T')[0]}`;\r\n this.form.reset();\r\n this.model = {};\r\n this.generatePreview();\r\n }\r\n\r\n // Export Methods\r\n onExport() {\r\n this.loading = true;\r\n const exportConfig = this.createExportConfig();\r\n this.handleApiExport(exportConfig);\r\n }\r\n\r\n private createExportConfig(): any {\r\n return {\r\n filters: this.model,\r\n exportType: this.exportType,\r\n fileName: this.fileName\r\n };\r\n }\r\n\r\n private handleApiExport(config: any) {\r\n if (this.form.invalid) return;\r\n\r\n const requestOptions = this.createRequestOptions(config);\r\n\r\n this.restService.request<any, any>(\r\n requestOptions,\r\n { apiName: this.apiName , moduleName: this.moduleName }\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.handleExportResponse(response, config);\r\n },\r\n error: (error) => {\r\n console.error('Export failed:', error);\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n\r\n private createRequestOptions(config: any): any {\r\n // Default query\r\n if(!this.queryString || this.queryString == ''){\r\n\r\n // Use the new QueryBuilderService methods\r\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\r\n // this.odataSearch.emit(odataParams);\r\n\r\n // Generate query string using the unified method\r\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\r\n // console.log('OData Query String:', queryString);\r\n\r\n }\r\n const filters: Partial<any> = {\n fileName: config.fileName || '',\n query: this.queryString,\n exportType: this.getApiExportType(config.exportType),\n };\n\r\n\r\n\r\n const params = Object.keys(filters).reduce((acc: any, key) => {\r\n acc[key] = filters[key];\r\n return acc;\r\n }, {});\r\n\r\n const requestOptions: any = {\r\n method: 'GET',\r\n url: `/${this.apiName}/export`,\r\n params: params\r\n };\r\n\r\n if (config.exportType === ExportType.HTML) {\r\n requestOptions.responseType = 'text';\r\n }\r\n\r\n return requestOptions;\r\n }\r\n\r\n // private handleExportResponse(response: any, config: any) {\r\n // this.loading = false;\r\n\r\n // if (config.exportType === ExportType.HTML) {\r\n // this.showHtmlExport(response);\r\n // } else {\r\n // this.downloadBinaryExport(response, config);\r\n // }\r\n // }\r\n private handleExportResponse(response: any, config: any) {\r\n this.loading = false;\r\n\r\n if (config.exportType === ExportType.HTML) {\r\n this.showHtmlExport(response);\r\n // } else if (config.exportType === ExportType.PDF && this.isMobileDevice()) {\r\n } else if (config.exportType === ExportType.PDF) {\r\n this.showPdfInMobile(response, config);\r\n } else {\r\n this.downloadBinaryExport(response, config);\r\n }\r\n }\r\n // Platform detection methods\r\nprivate isMobileDevice(): boolean {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n}\r\n\r\nprivate isIOS(): boolean {\r\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\r\n}\r\n\r\nprivate isAndroid(): boolean {\r\n return /Android/.test(navigator.userAgent);\r\n}\r\n showPdfModal = false;\r\n currentPdfUrl?:SafeResourceUrl;\r\n currentFileName = '';\r\n private showPdfInMobile(base64Data: string, config: any): void {\r\n\r\n\r\n try {\r\n const blob = this.base64ToBlob(base64Data, this.getMimeType(ExportType.PDF));\r\n this.currentPdfUrl = this.sanitizeUrl(URL.createObjectURL(blob));\r\n this.currentFileName = `${config.fileName}.pdf`;\r\n this.showPdfModal = true;\r\n } catch (error) {\r\n var error = 'PDF is too large for mobile viewing. Please download instead.';\r\n } finally {\r\n // this.loading = false;\r\n }\r\n }\r\n\r\n\r\n private sanitizeUrl(url: string): SafeResourceUrl {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n\r\n // onPdfModalClose(): void {\r\n // this.showPdfModal = false;\r\n // if (this.currentPdfUrl) {\r\n // URL.revokeObjectURL(this.currentPdfUrl);\r\n // this.currentPdfUrl = '';\r\n // }\r\n // }\r\n\r\n onPdfDownload(): void {\r\n // Trigger download\r\n // const blob = this.base64ToBlob(this.getCurrentBase64(), this.getMimeType(ExportType.PDF));\r\n // this.downloadFile(blob, this.currentFileName);\r\n }\r\n private downloadBinaryExport(response: any, config: any) {\r\n const blob = this.base64ToBlob(\r\n response,\r\n this.getMimeType(config.exportType)\r\n );\r\n\r\n this.downloadFile(\r\n blob,\r\n `${config.fileName}.${this.getFileExtension(config.exportType)}`\r\n );\r\n }\r\n\r\n // HTML Export Methods\r\n private showHtmlExport(htmlContent: string): void {\r\n const cleanHtml = this.cleanHtmlContent(htmlContent);\r\n this.htmlExportContent = cleanHtml;\r\n this.showHtmlInIframe = true;\r\n\r\n setTimeout(() => {\r\n this.setIframeContent(cleanHtml);\r\n }, 100);\r\n }\r\n\r\n private setIframeContent(htmlContent: string): void {\r\n const iframe = document.getElementById('reportIframe') as HTMLIFrameElement;\r\n if (!iframe) {\r\n console.error('Iframe not found');\r\n return;\r\n }\r\n\r\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\r\n if (iframeDoc) {\r\n iframeDoc.open();\r\n iframeDoc.write(htmlContent);\r\n iframeDoc.close();\r\n }\r\n }\r\n\r\n print(): void {\r\n // const iframe = document.getElementById('reportIframe') as HTMLIFrameElement | null;\r\n // if (!iframe || !iframe.contentWindow) return;\r\n\r\n // const iframeWindow = iframe.contentWindow;\r\n // iframeWindow.focus();\r\n // iframeWindow.print();\r\n\r\n (document.getElementById('reportIframe') as any).contentWindow.print() ;\r\n }\r\n\r\n\r\n // Utility Methods\r\n getExportButtonText(): string {\r\n switch (this.exportType) {\r\n case ExportType.PRINT:\r\n return this.translate.instant('PRINT');\r\n case ExportType.HTML:\r\n return this.translate.instant('EXPORT');\r\n default:\r\n return this.translate.instant('EXPORT');\r\n }\r\n }\r\n\r\n onExportTypeChange(type: ExportType) {\r\n this.exportType = type;\r\n }\r\n\r\n getCurrentExportTypeIcon(): string {\r\n const currentType = this.exportTypes.find(type => type.value === this.exportType);\r\n return currentType?.icon || 'pi pi-download';\r\n }\r\n\r\n private base64ToBlob(base64: string, mime: string): Blob {\r\n const byteChars = atob(base64);\r\n const byteNums = Array.from(byteChars, c => c.charCodeAt(0));\r\n return new Blob([new Uint8Array(byteNums)], { type: mime });\r\n }\r\n\r\n private downloadFile(blob: Blob, fileName: string) {\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n private getFileExtension(exportType: ExportType): string {\r\n switch (exportType) {\r\n case ExportType.EXCEL:\r\n return 'xlsx';\r\n case ExportType.PDF:\r\n return 'pdf';\r\n case ExportType.HTML:\r\n return 'html';\r\n default:\r\n return 'pdf';\r\n }\r\n }\r\n\r\n private getMimeType(exportType: ExportType): string {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case ExportType.PDF:\n return 'application/pdf';\n default:\n return 'application/octet-stream';\n }\n }\n\n private getApiExportType(exportType: ExportType): string {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'Excel';\n case ExportType.PDF:\n return 'Pdf';\n case ExportType.LIST:\n return 'List';\n case ExportType.HTML:\n return 'Html';\n case ExportType.PRINT:\n return 'Print';\n default:\n return String(exportType);\n }\n }\n\n private cleanHtmlContent(html: string): string {\n return html\n .replace(/\\\\r\\\\n/g, '\\n')\r\n .replace(/\\\\\"/g, '\"')\r\n .replace(/\\\\t/g, ' ')\r\n .trim();\r\n }\r\n}\r\n","<!-- class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\" -->\r\n<div >\r\n <!-- Content -->\r\n <div class=\"flex-1 overflow-hidden p-2\">\r\n\r\n <!-- Preview Actions -->\r\n <div class=\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\">\r\n <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n {{ 'REPORT' | translate }}\r\n </h3>\r\n <div class=\"flex gap-2\">\r\n <!-- Filters Button -->\r\n <button\r\n type=\"button\"\r\n (click)=\"showFilters = !showFilters\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\r\n [pTooltip]=\"'SEARCH_FILTERS' | translate\">\r\n <i class=\"pi pi-filter\"></i>\r\n @if (filterCount > 0) {\r\n <span class=\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\">\r\n {{ filterCount }}\r\n </span>\r\n }\r\n </button>\r\n\r\n <!-- Refresh Preview -->\r\n <button\r\n (click)=\"generatePreview()\"\r\n [disabled]=\"loading\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\"\r\n [pTooltip]=\"'REFRESH' | translate\">\r\n <i class=\"pi pi-refresh mr-2 ml-2\" [class.animate-spin]=\"loading\"></i>\r\n {{ 'REFRESH' | translate }}\r\n </button>\r\n\r\n <!-- Print Button -->\r\n @if (exportType === 4 || exportType === 1 || exportType === 2) {\r\n <button\r\n (click)=\"print()\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\r\n [pTooltip]=\"'PRINT' | translate\">\r\n <i class=\"pi pi-print mr-2 ml-2\"></i>\r\n {{ 'PRINT' | translate }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Preview Content -->\r\n <div #previewContainer class=\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\">\r\n <!-- HTML Export Preview (Iframe) -->\r\n @if (showHtmlInIframe && htmlExportContent || showPdfModal) {\r\n <div class=\"html-export-preview\">\r\n <iframe\r\n id=\"reportIframe\"\r\n class=\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\"\r\n [style.height]=\"'600px'\"\r\n title=\"HTML Export Preview\"\r\n [src]=\"currentPdfUrl\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n frameborder=\"0\"\r\n allowfullscreen\r\n >\r\n <!-- allowfullscreen -->\r\n </iframe>\r\n </div>\r\n }\r\n <!-- <app-pdf-modal\r\n *ngIf=\"showPdfModal\"\r\n [pdfUrl]=\"currentPdfUrl\"\r\n [fileName]=\"currentFileName\"\r\n (closed)=\"onPdfModalClose()\"\r\n (downloadRequested)=\"onPdfDownload()\">\r\n </app-pdf-modal> -->\r\n\r\n <!-- Regular Preview Table -->\r\n <!-- <div *ngIf=\"!showHtmlInIframe\" class=\"p-4\">\r\n <p-table\r\n [value]=\"previewData\"\r\n [columns]=\"previewColumns\"\r\n [paginator]=\"true\"\r\n [rows]=\"10\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"Showing {first} to {last} of {totalRecords} entries\"\r\n styleClass=\"p-datatable-sm\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of previewColumns\" class=\"text-left\">\r\n {{ col.header }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <td *ngFor=\"let col of previewColumns\" class=\"text-left\">\r\n {{ rowData[col.field] }}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"previewColumns.length\" class=\"text-center py-4\">\r\n <div class=\"text-center py-8\">\r\n <i class=\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\"></i>\r\n <p class=\"text-gray-500 dark:text-gray-400\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div> -->\r\n</div>\r\n\r\n<!-- <div class=\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\">\r\n<p class=\"text-sm text-green-700 dark:text-green-300\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'PREVIEW_INFO' | translate }}\r\n</p>\r\n</div> -->\r\n</div>\r\n\r\n<!-- Footer -->\r\n<div class=\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\">\r\n <div class=\"flex justify-between items-center\">\r\n <button\r\n type=\"button\"\r\n (click)=\"onReset()\"\r\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\r\n [disabled]=\"loading\">\r\n <i class=\"pi pi-refresh mr-2\"></i>\r\n {{ 'RESET' | translate }}\r\n </button>\r\n\r\n <div class=\"flex gap-2\">\r\n <button\r\n type=\"button\"\r\n (click)=\"ref?.close()\"\r\n class=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\r\n [disabled]=\"loading\">\r\n {{ 'CANCEL' | translate }}\r\n </button>\r\n\r\n <!-- SplitButton for Export -->\r\n <!-- || previewData.length === 0 -->\r\n <p-splitButton\r\n [label]=\"getExportButtonText()\"\r\n [icon]=\"getCurrentExportTypeIcon()\"\r\n [model]=\"exportMenuItems\"\r\n (onClick)=\"onExport()\"\r\n [disabled]=\"loading\"\r\n styleClass=\"p-button-primary\">\r\n </p-splitButton>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Filters Drawer -->\r\n@if(showFilters){\r\n <p-drawer\r\n [(visible)]=\"showFilters\"\r\n position=\"right\"\r\n [styleClass]=\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \"\r\n [modal]=\"true\"\r\n [dismissible]=\"true\"\r\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit(); showFilters=false\" class=\"flex flex-col flex-1\">\r\n <div class=\"flex-1 overflow-auto\">\r\n <formly-form\r\n [form]=\"form\"\r\n [fields]=\"fields_\"\r\n [model]=\"model\"\r\n [options]=\"options\">\r\n </formly-form>\r\n </div>\r\n </form>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\r\n <button\r\n type=\"submit\"\r\n pButton size=\"small\"\r\n (click)=\" onSubmit(); showFilters=false\"\r\n label=\"{{ 'SEARCH' | translate }}\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n size=\"small\"\r\n class=\"p-button-text\"\r\n (click)=\"onReset(); showFilters=false\">\r\n {{ 'CLEAR' | translate }}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </p-drawer>\r\n}\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAMa,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAFpB,YAAY,CAAA,EAAA,CAAA;AAEX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAFpB,YAAY,CAAA,EAAA,CAAA;;2FAEX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACxB,iBAAA;;;ACLD;MAqDa,yBAAyB,CAAA;IACpC,QAAQ,GAAW,EAAE;AAErB,IAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpC,IAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEvC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE;IAClD;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC;IACF;uGAfW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlC1B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EArCC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,4KAFf,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAsCJ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA3CrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,aAAa;wBACb,YAAY;wBACZ;AACH,qBAAA;AACC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCT,EAAA;AACF,iBAAA;;;ICxBW;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,UAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACP,CAAC,EANW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;MA4BT,sBAAsB,CAAA;AA0CxB,IAAA,GAAA;AACA,IAAA,MAAA;AA1CsB,IAAA,gBAAgB;IAEtC,YAAY,GAAwB,EAAE;IAC/C,OAAO,GAAwB,EAAE;AACjC,IAAA,UAAU,GAAe,UAAU,CAAC,GAAG;IACvC,QAAQ,GAAW,EAAE;IACrB,WAAW,GAAY,KAAK;IAC5B,OAAO,GAAY,KAAK;AACxB,IAAA,WAAW,GAAS,IAAI,IAAI,EAAE;IAC9B,WAAW,GAAU,EAAE;IACvB,iBAAiB,GAAW,EAAE;IAC9B,gBAAgB,GAAY,KAAK;IACjC,cAAc,GAAU,EAAE;IAE1B,OAAO,GAAsB,EAAE;IACtB,kBAAkB,GAAY,IAAI;IAClC,WAAW,GAAY,KAAK;IAC5B,WAAW,GAAW,EAAE;IACxB,OAAO,GAAW,EAAE;IACpB,UAAU,GAAW,EAAE;IAEvB,KAAK,GAAQ,EAAE;AACxB,IAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;AACxB,IAAA,YAAY;AAEZ,IAAA,WAAW,GAAG;AACZ,QAAA,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE;AACrE,QAAA,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE;AAC/D,QAAA,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;AAC7D,QAAA,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa;KAC/D;IAED,eAAe,GAAe,EAAE;AAExB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAC9B,IAAA,aAAa,GAAiB,MAAM,CAAC,aAAa,CAAC;AACnD,IAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACvC,IAAA,WAAW,GAAgB,MAAM,CAAC,WAAW,CAAC;AAC9C,IAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC5C,IAAA,SAAS,GAAiB,MAAM,CAAC,YAAY,CAAC;IACpD,WAAA,CACS,GAAqB,EACrB,MAA2B,EAAA;QAD3B,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,MAAM,GAAN,MAAM;IACZ;IAEH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;YAClB;YAAE,OAAO,CAAC,EAAE;;YAEZ;QACF;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE;QACxD,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AACD,IAAA,IAAI,WAAW,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK;IACnE;IACQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAC,IAAI,EAAC,IAAI,CAAC;QAClF;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY;QAClC;IACF;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE;QACpD,IAAI,CAAC,sBAAsB,EAAE;QAC7B,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE;AACnF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,IAAI,CAAA,OAAA,EAAU,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;IACzG;IAEQ,sBAAsB,GAAA;QAC5B,IAAI,CAAC,YAAY,GAAG;YAClB,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC;SAChB;IACH;IAEO,oBAAoB,GAAA;QAC3B,IAAI,CAAC,eAAe,GAAG;;AAErB,YAAA;gBACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACjD,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,oBAAoB;AACzC,aAAA;;YAED,EAAE,SAAS,EAAE,IAAI,EAAE;;YAEnB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK;gBAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK;AAClD,aAAA,CAAC;SACH;IACH;IAEQ,oBAAoB,GAAA;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAC7D,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAClD,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC;AAChB;AACF,SAAA,CAAC;QAEF,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,MAAc,KAAI;YACxC,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;YACxB;AACF,QAAA,CAAC,CAAC;IACJ;IAEU,sBAAsB,GAAA;QAC5B,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE;oBACL,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACvC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACzD;AACF;SACF;IACH;;IAGA,eAAe,GAAA;QACb,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;QAC7F,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,WAAW,CAAC;QACpE,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AAClE,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,eAAe,EAAE;IACxB;;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;IACpC;IAEQ,kBAAkB,GAAA;QACxB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC;SAChB;IACH;AAEQ,IAAA,eAAe,CAAC,MAAW,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QAEvB,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAExD,IAAI,CAAC,WAAW,CAAC,OAAO,CACtB,cAAc,EACd,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAG,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAEtD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC7C,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACtB;AACD,SAAA,CAAC;IACN;AAEQ,IAAA,oBAAoB,CAAC,MAAW,EAAA;;QAEtC,IAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAC;;AAG/C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;;;YAI5F,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,WAAW,CAAC;;QAGvE;AACE,QAAA,MAAM,OAAO,GAAiB;AAC5B,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;YAC/B,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;SACrD;AAID,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAG,KAAI;YAC3D,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;AACvB,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,MAAM,cAAc,GAAQ;AAC1B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAA,OAAA,CAAS;AAC9B,YAAA,MAAM,EAAE;SACT;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE;AACzC,YAAA,cAAc,CAAC,YAAY,GAAG,MAAM;QACtC;AAEA,QAAA,OAAO,cAAc;IACvB;;;;;;;;;IAWS,oBAAoB,CAAC,QAAa,EAAE,MAAW,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QAEpB,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI,EAAE;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;;QAE/B;aAAO,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,EAAE;AAC/C,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxC;aAAO;AACL,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC7C;IACF;;IAEM,cAAc,GAAA;QACpB,OAAO,gEAAgE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IACnG;IAEQ,KAAK,GAAA;QACX,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IACrD;IAEQ,SAAS,GAAA;QACf,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC5C;IACE,YAAY,GAAG,KAAK;AACpB,IAAA,aAAa;IACb,eAAe,GAAG,EAAE;IACb,eAAe,CAAC,UAAkB,EAAE,MAAW,EAAA;AAGpD,QAAA,IAAI;AACL,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3E,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,CAAC,eAAe,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,MAAM;AAC/C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,GAAG,+DAA+D;QAC7E;gBAAU;;QAEV;IACA;AAGQ,IAAA,WAAW,CAAC,GAAW,EAAA;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC;IAC3D;;;;;;;;IAUA,aAAa,GAAA;;;;IAIb;IACQ,oBAAoB,CAAC,QAAa,EAAE,MAAW,EAAA;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,QAAQ,EACR,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CACpC;QAED,IAAI,CAAC,YAAY,CACf,IAAI,EACJ,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA,CAAE,CACjE;IACH;;AAGQ,IAAA,cAAc,CAAC,WAAmB,EAAA;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;QAE5B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAClC,CAAC,EAAE,GAAG,CAAC;IACT;AAEQ,IAAA,gBAAgB,CAAC,WAAmB,EAAA;QAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAsB;QAC3E,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;YACjC;QACF;QAEA,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,aAAa,EAAE,QAAQ;QAC1E,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,IAAI,EAAE;AAChB,YAAA,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;YAC5B,SAAS,CAAC,KAAK,EAAE;QACnB;IACF;IAEA,KAAK,GAAA;;;;;;QAQD,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAS,CAAC,aAAa,CAAC,KAAK,EAAE;IACzE;;IAIA,mBAAmB,GAAA;AACjB,QAAA,QAAQ,IAAI,CAAC,UAAU;YACrB,KAAK,UAAU,CAAC,KAAK;gBACnB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;YACxC,KAAK,UAAU,CAAC,IAAI;gBAClB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;AACzC,YAAA;gBACE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;;IAE7C;AAEA,IAAA,kBAAkB,CAAC,IAAgB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;IAEA,wBAAwB,GAAA;QACtB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC;AACjF,QAAA,OAAO,WAAW,EAAE,IAAI,IAAI,gBAAgB;IAC9C;IAEQ,YAAY,CAAC,MAAc,EAAE,IAAY,EAAA;AAC/C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5D,QAAA,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7D;IAEQ,YAAY,CAAC,IAAU,EAAE,QAAgB,EAAA;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;IACjC;AAEQ,IAAA,gBAAgB,CAAC,UAAsB,EAAA;QAC7C,QAAQ,UAAU;YAChB,KAAK,UAAU,CAAC,KAAK;AACnB,gBAAA,OAAO,MAAM;YACf,KAAK,UAAU,CAAC,GAAG;AACjB,gBAAA,OAAO,KAAK;YACd,KAAK,UAAU,CAAC,IAAI;AAClB,gBAAA,OAAO,MAAM;AACf,YAAA;AACE,gBAAA,OAAO,KAAK;;IAElB;AAEQ,IAAA,WAAW,CAAC,UAAsB,EAAA;QACxC,QAAQ,UAAU;YAChB,KAAK,UAAU,CAAC,KAAK;AACnB,gBAAA,OAAO,mEAAmE;YAC5E,KAAK,UAAU,CAAC,GAAG;AACjB,gBAAA,OAAO,iBAAiB;AAC1B,YAAA;AACE,gBAAA,OAAO,0BAA0B;;IAEvC;AAEQ,IAAA,gBAAgB,CAAC,UAAsB,EAAA;QAC7C,QAAQ,UAAU;YAChB,KAAK,UAAU,CAAC,KAAK;AACnB,gBAAA,OAAO,OAAO;YAChB,KAAK,UAAU,CAAC,GAAG;AACjB,gBAAA,OAAO,KAAK;YACd,KAAK,UAAU,CAAC,IAAI;AAClB,gBAAA,OAAO,MAAM;YACf,KAAK,UAAU,CAAC,IAAI;AAClB,gBAAA,OAAO,MAAM;YACf,KAAK,UAAU,CAAC,KAAK;AACnB,gBAAA,OAAO,OAAO;AAChB,YAAA;AACE,gBAAA,OAAO,MAAM,CAAC,UAAU,CAAC;;IAE/B;AAEQ,IAAA,gBAAgB,CAAC,IAAY,EAAA;AACnC,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,SAAS,EAAE,IAAI;AACvB,aAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,aAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,aAAA,IAAI,EAAE;IACX;uGA7bW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAFvB,CAAC,aAAa,EAAC,WAAW,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtDvC,+nPAqMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7JI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,cAAc,8BACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACV,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,aAAa,8XAVb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAcJ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EAErB;wBACP,mBAAmB;wBACnB,WAAW;wBACX,aAAa;wBACb,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,iBAAiB;wBACjB,cAAc;wBACd,YAAY;wBACZ,UAAU;wBACV,WAAW;wBACX,iBAAiB;wBACjB;AACH,qBAAA,EAAA,SAAA,EACW,CAAC,aAAa,EAAC,WAAW,CAAC,EAAA,QAAA,EAAA,+nPAAA,EAAA;;sBAGpC,SAAS;uBAAC,kBAAkB;;sBAE5B;;sBAaA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;AE9EH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"es.framework-ng.ui.core-generic-report.mjs","sources":["../../../../libs/ng.ui.core/generic-report/src/lib/generic-report-module.ts","../../../../libs/ng.ui.core/generic-report/src/lib/report-name-dialog.component.ts","../../../../libs/ng.ui.core/generic-report/src/lib/generic-report.component.ts","../../../../libs/ng.ui.core/generic-report/src/lib/generic-report.component.html","../../../../libs/ng.ui.core/generic-report/src/es.framework-ng.ui.core-generic-report.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule],\n})\nexport class GenericReportModule {}\n","// report-name-dialog.component.ts\r\nimport { Component, inject } from '@angular/core';\r\n\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { LocalizationService } from '@es.framework/ng.core/services';\r\n\r\n@Component({\r\n selector: 'app-report-name-dialog',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n TranslatePipe,\r\n ButtonModule,\r\n InputTextModule\r\n],\r\n template: `\r\n <div class=\"p-fluid\">\r\n <div class=\"field\">\r\n <label for=\"fileName\" class=\"block text-sm font-medium mb-2\">\r\n {{ 'REPORT_NAME' | translate }}\r\n </label>\r\n <input\r\n id=\"fileName\"\r\n type=\"text\"\r\n [(ngModel)]=\"fileName\"\r\n pInputText\r\n class=\"w-full\"\r\n [placeholder]=\"'ENTER_REPORT_NAME' | translate\"\r\n autofocus>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2 mt-4\">\r\n <button\r\n type=\"button\"\r\n pButton\r\n class=\"p-button-text\"\r\n (click)=\"ref.close()\"\r\n [label]=\"'CANCEL' | translate\">\r\n </button>\r\n <button\r\n type=\"button\"\r\n pButton\r\n (click)=\"save()\"\r\n [label]=\"'SAVE' | translate\">\r\n </button>\r\n </div>\r\n `\r\n})\r\nexport class ReportNameDialogComponent {\r\n fileName: string = '';\r\n\r\n ref = inject(DynamicDialogRef);\r\n config = inject(DynamicDialogConfig);\r\n translate = inject(LocalizationService);\r\n\r\n ngOnInit() {\r\n this.fileName = this.config.data?.fileName || '';\r\n }\r\n\r\n save() {\r\n if (this.fileName?.trim()) {\r\n this.ref.close(this.fileName.trim());\r\n }\r\n }\r\n}\r\n","\r\nimport { Component, inject, OnInit, ViewChild, ElementRef, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyForm } from '@ngx-formly/core';\r\nimport { TranslatePipe } from '@es.framework/ng.core/pipes';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { DynamicDialogRef, DynamicDialogConfig, DialogService } from 'primeng/dynamicdialog';\r\nimport { LocalizationService, RestService } from '@es.framework/ng.core/services';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport { TableModule } from 'primeng/table';\r\nimport { SplitButtonModule } from 'primeng/splitbutton';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { ReportNameDialogComponent } from './report-name-dialog.component';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { QueryBuilderService } from '@es.framework/ng.ui.core/generic-search-advanced';\r\n\r\nexport interface ExportConfig {\r\n filters: any;\r\n exportType: ExportType;\r\n fileName?: string;\r\n}\r\n\r\nexport enum ExportType {\r\n LIST,\r\n HTML,\r\n PDF,\r\n EXCEL,\r\n PRINT\r\n}\r\n\r\n@Component({\r\n selector: 'app-generic-report',\r\n templateUrl: './generic-report.component.html',\r\n imports: [\r\n ReactiveFormsModule,\r\n FormsModule,\r\n TranslatePipe,\r\n ButtonModule,\r\n DialogModule,\r\n InputTextModule,\r\n RadioButtonModule,\r\n CheckboxModule,\r\n DrawerModule,\r\n FormlyForm,\r\n TableModule,\r\n SplitButtonModule,\r\n TooltipModule\r\n],\r\n providers:[DialogService,RestService]\r\n})\r\nexport class GenericReportComponent implements OnInit, OnDestroy {\r\n @ViewChild('previewContainer') previewContainer!: ElementRef;\r\n\r\n @Input() filterFields: FormlyFieldConfig[] = [];\r\n fields_: FormlyFieldConfig[] = [];\r\n exportType: ExportType = ExportType.PDF;\r\n fileName: string = '';\r\n showFilters: boolean = false;\r\n loading: boolean = false;\r\n currentDate: Date = new Date();\r\n previewData: any[] = [];\r\n htmlExportContent: string = '';\r\n showHtmlInIframe: boolean = false;\r\n previewColumns: any[] = [];\r\n\r\n options: FormlyFormOptions = {};\r\n @Input() enableQueryBuilder: boolean = true;\r\n @Input() localExport: boolean = false;\r\n @Input() queryString: string = '';\r\n @Input() apiName: string = '';\r\n @Input() moduleName: string = '';\r\n\r\n @Input() model: any = {};\r\n form = new FormGroup({});\r\n exportConfig!: ExportConfig;\r\n\r\n exportTypes = [\r\n { value: ExportType.EXCEL, label: 'EXCEL', icon: 'pi pi-file-excel' },\r\n { value: ExportType.PDF, label: 'PDF', icon: 'pi pi-file-pdf' },\r\n { value: ExportType.HTML, label: 'HTML', icon: 'pi pi-code' },\r\n { value: ExportType.PRINT, label: 'PRINT', icon: 'pi pi-print' }\r\n ];\r\n\r\n exportMenuItems: MenuItem[] = [];\r\n\r\n private destroy$ = new Subject<void>();\r\n private dialogService:DialogService = inject(DialogService);\r\n private translate = inject(LocalizationService);\r\n private restService: RestService = inject(RestService);\r\n private queryBuilder = inject(QueryBuilderService);\r\nprivate sanitizer: DomSanitizer = inject(DomSanitizer);\r\n constructor(\r\n public ref: DynamicDialogRef,\r\n public config: DynamicDialogConfig\r\n ) {}\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n\r\n if (this.ref) {\r\n try {\r\n this.ref.close();\r\n } catch (e) {\r\n // Ignore errors during cleanup\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.filterFields = this.config.data?.filterFields || [];\r\n this.buildQueryUIFields();\r\n this.initializeComponent();\r\n this.initializeExportConfig();\r\n this.initializeExportMenu();\r\n }\r\n get filterCount() {\r\n\r\n return this.queryBuilder.getAppliedFiltersCount(this.model).total;\r\n }\r\n private buildQueryUIFields() {\r\n if (this.enableQueryBuilder) {\r\n this.fields_ = this.queryBuilder.buildQueryUIFields(this.filterFields,true,true);\r\n } else {\r\n this.fields_ = this.filterFields;\r\n }\r\n }\r\n\r\n private initializeComponent() {\n this.apiName = this.config.data?.apiName || '';\n this.moduleName = this.config.data?.moduleName || '';\n this.queryString = this.config.data?.queryString || '';\n this.initializeFilterFields();\n this.onExport();\n }\n\r\n private initializeFilterFields() {\r\n this.filterFields = this.config.data?.filterFields || this.getDefaultFilterFields();\r\n this.model = this.config.data?.model || {};\r\n this.fileName = this.config.data?.defaultFileName || `export_${new Date().toISOString().split('T')[0]}`;\r\n }\r\n\r\n private initializeExportConfig() {\r\n this.exportConfig = {\r\n filters: this.model,\r\n exportType: this.exportType,\r\n fileName: this.fileName\r\n };\r\n }\r\n\r\n private initializeExportMenu() {\r\n this.exportMenuItems = [\r\n // Edit Report Name menu item\r\n {\r\n label: this.translate.instant('EDIT_REPORT_NAME'),\r\n icon: 'pi pi-pencil',\r\n command: () => this.openReportNameDialog()\r\n },\r\n // Separator\r\n { separator: true },\r\n // Export type menu items\r\n ...this.exportTypes.map(type => ({\r\n label: this.translate.instant(type.label),\r\n icon: type.icon,\r\n command: () => this.onExportTypeChange(type.value)\r\n }))\r\n ];\r\n}\r\n\r\nprivate openReportNameDialog() {\r\n const ref = this.dialogService.open(ReportNameDialogComponent, {\r\n header: this.translate.instant('EDIT_REPORT_NAME'),\r\n width: '500px',\r\n data: {\r\n fileName: this.fileName\r\n }\r\n });\r\n\r\n ref?.onClose.subscribe((result: string) => {\r\n if (result) {\r\n this.fileName = result;\r\n }\r\n });\r\n}\r\n\r\n private getDefaultFilterFields(): FormlyFieldConfig[] {\r\n return [\r\n {\r\n key: 'search',\r\n type: 'input',\r\n props: {\r\n label: this.translate.instant('SEARCH'),\r\n placeholder: this.translate.instant('ENTER_SEARCH_TERM'),\r\n }\r\n }\r\n ];\r\n }\r\n\r\n // Query and Preview Methods\r\n generatePreview() {\r\n this.onExport();\r\n }\r\n\r\n onSubmit() {\r\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\r\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\r\n this.onExport();\r\n }\r\n\r\n onReset() {\n this.exportType = ExportType.PDF;\n this.fileName = `export_${new Date().toISOString().split('T')[0]}`;\n this.queryString = '';\n this.form.reset();\n this.model = {};\n this.generatePreview();\n }\r\n\r\n // Export Methods\r\n onExport() {\r\n this.loading = true;\r\n const exportConfig = this.createExportConfig();\r\n this.handleApiExport(exportConfig);\r\n }\r\n\r\n private createExportConfig(): any {\r\n return {\r\n filters: this.model,\r\n exportType: this.exportType,\r\n fileName: this.fileName\r\n };\r\n }\r\n\r\n private handleApiExport(config: any) {\r\n if (this.form.invalid) return;\r\n\r\n const requestOptions = this.createRequestOptions(config);\r\n\r\n this.restService.request<any, any>(\r\n requestOptions,\r\n { apiName: this.apiName , moduleName: this.moduleName }\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response) => {\r\n this.handleExportResponse(response, config);\r\n },\r\n error: (error) => {\r\n console.error('Export failed:', error);\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n\r\n private createRequestOptions(config: any): any {\r\n // Default query\r\n if(!this.queryString || this.queryString == ''){\r\n\r\n // Use the new QueryBuilderService methods\r\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.filterFields);\r\n // this.odataSearch.emit(odataParams);\r\n\r\n // Generate query string using the unified method\r\n this.queryString = this.queryBuilder.toODataQueryString(odataParams);\r\n // console.log('OData Query String:', queryString);\r\n\r\n }\r\n const filters: Partial<any> = {\n fileName: config.fileName || '',\n query: this.queryString,\n exportType: this.getApiExportType(config.exportType),\n };\n\r\n\r\n\r\n const params = Object.keys(filters).reduce((acc: any, key) => {\r\n acc[key] = filters[key];\r\n return acc;\r\n }, {});\r\n\r\n const requestOptions: any = {\r\n method: 'GET',\r\n url: `/${this.apiName}/export`,\r\n params: params\r\n };\r\n\r\n if (config.exportType === ExportType.HTML) {\r\n requestOptions.responseType = 'text';\r\n }\r\n\r\n return requestOptions;\r\n }\r\n\r\n // private handleExportResponse(response: any, config: any) {\r\n // this.loading = false;\r\n\r\n // if (config.exportType === ExportType.HTML) {\r\n // this.showHtmlExport(response);\r\n // } else {\r\n // this.downloadBinaryExport(response, config);\r\n // }\r\n // }\r\n private handleExportResponse(response: any, config: any) {\r\n this.loading = false;\r\n\r\n if (config.exportType === ExportType.HTML) {\r\n this.showHtmlExport(response);\r\n // } else if (config.exportType === ExportType.PDF && this.isMobileDevice()) {\r\n } else if (config.exportType === ExportType.PDF) {\r\n this.showPdfInMobile(response, config);\r\n } else {\r\n this.downloadBinaryExport(response, config);\r\n }\r\n }\r\n // Platform detection methods\r\nprivate isMobileDevice(): boolean {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n}\r\n\r\nprivate isIOS(): boolean {\r\n return /iPad|iPhone|iPod/.test(navigator.userAgent);\r\n}\r\n\r\nprivate isAndroid(): boolean {\r\n return /Android/.test(navigator.userAgent);\r\n}\r\n showPdfModal = false;\r\n currentPdfUrl?:SafeResourceUrl;\r\n currentFileName = '';\r\n private showPdfInMobile(base64Data: string, config: any): void {\r\n\r\n\r\n try {\r\n const blob = this.base64ToBlob(base64Data, this.getMimeType(ExportType.PDF));\r\n this.currentPdfUrl = this.sanitizeUrl(URL.createObjectURL(blob));\r\n this.currentFileName = `${config.fileName}.pdf`;\r\n this.showPdfModal = true;\r\n } catch (error) {\r\n var error = 'PDF is too large for mobile viewing. Please download instead.';\r\n } finally {\r\n // this.loading = false;\r\n }\r\n }\r\n\r\n\r\n private sanitizeUrl(url: string): SafeResourceUrl {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n\r\n // onPdfModalClose(): void {\r\n // this.showPdfModal = false;\r\n // if (this.currentPdfUrl) {\r\n // URL.revokeObjectURL(this.currentPdfUrl);\r\n // this.currentPdfUrl = '';\r\n // }\r\n // }\r\n\r\n onPdfDownload(): void {\r\n // Trigger download\r\n // const blob = this.base64ToBlob(this.getCurrentBase64(), this.getMimeType(ExportType.PDF));\r\n // this.downloadFile(blob, this.currentFileName);\r\n }\r\n private downloadBinaryExport(response: any, config: any) {\r\n const blob = this.base64ToBlob(\r\n response,\r\n this.getMimeType(config.exportType)\r\n );\r\n\r\n this.downloadFile(\r\n blob,\r\n `${config.fileName}.${this.getFileExtension(config.exportType)}`\r\n );\r\n }\r\n\r\n // HTML Export Methods\r\n private showHtmlExport(htmlContent: string): void {\r\n const cleanHtml = this.cleanHtmlContent(htmlContent);\r\n this.htmlExportContent = cleanHtml;\r\n this.showHtmlInIframe = true;\r\n\r\n setTimeout(() => {\r\n this.setIframeContent(cleanHtml);\r\n }, 100);\r\n }\r\n\r\n private setIframeContent(htmlContent: string): void {\r\n const iframe = document.getElementById('reportIframe') as HTMLIFrameElement;\r\n if (!iframe) {\r\n console.error('Iframe not found');\r\n return;\r\n }\r\n\r\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\r\n if (iframeDoc) {\r\n iframeDoc.open();\r\n iframeDoc.write(htmlContent);\r\n iframeDoc.close();\r\n }\r\n }\r\n\r\n print(): void {\r\n // const iframe = document.getElementById('reportIframe') as HTMLIFrameElement | null;\r\n // if (!iframe || !iframe.contentWindow) return;\r\n\r\n // const iframeWindow = iframe.contentWindow;\r\n // iframeWindow.focus();\r\n // iframeWindow.print();\r\n\r\n (document.getElementById('reportIframe') as any).contentWindow.print() ;\r\n }\r\n\r\n\r\n // Utility Methods\r\n getExportButtonText(): string {\r\n switch (this.exportType) {\r\n case ExportType.PRINT:\r\n return this.translate.instant('PRINT');\r\n case ExportType.HTML:\r\n return this.translate.instant('EXPORT');\r\n default:\r\n return this.translate.instant('EXPORT');\r\n }\r\n }\r\n\r\n onExportTypeChange(type: ExportType) {\r\n this.exportType = type;\r\n }\r\n\r\n getCurrentExportTypeIcon(): string {\r\n const currentType = this.exportTypes.find(type => type.value === this.exportType);\r\n return currentType?.icon || 'pi pi-download';\r\n }\r\n\r\n private base64ToBlob(base64: string, mime: string): Blob {\r\n const byteChars = atob(base64);\r\n const byteNums = Array.from(byteChars, c => c.charCodeAt(0));\r\n return new Blob([new Uint8Array(byteNums)], { type: mime });\r\n }\r\n\r\n private downloadFile(blob: Blob, fileName: string) {\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n private getFileExtension(exportType: ExportType): string {\r\n switch (exportType) {\r\n case ExportType.EXCEL:\r\n return 'xlsx';\r\n case ExportType.PDF:\r\n return 'pdf';\r\n case ExportType.HTML:\r\n return 'html';\r\n default:\r\n return 'pdf';\r\n }\r\n }\r\n\r\n private getMimeType(exportType: ExportType): string {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case ExportType.PDF:\n return 'application/pdf';\n default:\n return 'application/octet-stream';\n }\n }\n\n private getApiExportType(exportType: ExportType): string {\n switch (exportType) {\n case ExportType.EXCEL:\n return 'Excel';\n case ExportType.PDF:\n return 'Pdf';\n case ExportType.LIST:\n return 'List';\n case ExportType.HTML:\n return 'Html';\n case ExportType.PRINT:\n return 'Print';\n default:\n return String(exportType);\n }\n }\n\n private cleanHtmlContent(html: string): string {\n return html\n .replace(/\\\\r\\\\n/g, '\\n')\r\n .replace(/\\\\\"/g, '\"')\r\n .replace(/\\\\t/g, ' ')\r\n .trim();\r\n }\r\n}\r\n","<!-- class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg max-w-6xl mx-auto\" -->\n<div >\n <!-- Content -->\n <div class=\"flex-1 overflow-hidden p-2\">\n\n <!-- Preview Actions -->\n <div class=\"flex justify-between items-center mb-6 p-2 bg-white rounded-lg\">\n <h3 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {{ 'REPORT' | translate }}\n </h3>\n <div class=\"flex gap-2\">\n <!-- Filters Button -->\n <button\n type=\"button\"\n (click)=\"showFilters = !showFilters\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [pTooltip]=\"'SEARCH_FILTERS' | translate\">\n <i class=\"pi pi-filter\"></i>\n @if (filterCount > 0) {\n <span class=\"ml-2 bg-blue-500 text-white text-xs rounded-full h-5 w-5 flex items-center justify-center\">\n {{ filterCount }}\n </span>\n }\n </button>\n\n <!-- Refresh Preview -->\n <button\n (click)=\"generatePreview()\"\n [disabled]=\"loading\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 disabled:bg-gray-300 disabled:cursor-not-allowed transition-colors\"\n [pTooltip]=\"'REFRESH' | translate\">\n <i class=\"pi pi-refresh mr-2 ml-2\" [class.animate-spin]=\"loading\"></i>\n {{ 'REFRESH' | translate }}\n </button>\n\n <!-- Print Button -->\n @if (exportType === 4 || exportType === 1 || exportType === 2) {\n <button\n (click)=\"print()\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [pTooltip]=\"'PRINT' | translate\">\n <i class=\"pi pi-print mr-2 ml-2\"></i>\n {{ 'PRINT' | translate }}\n </button>\n }\n </div>\n </div>\n\n <!-- Preview Content -->\n <div #previewContainer class=\"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg\">\n <!-- HTML Export Preview (Iframe) -->\n @if (showHtmlInIframe && htmlExportContent || showPdfModal) {\n <div class=\"html-export-preview\">\n <iframe\n id=\"reportIframe\"\n class=\"w-full border border-gray-300 dark:border-gray-600 rounded-b-lg\"\n [style.height]=\"'600px'\"\n title=\"HTML Export Preview\"\n [src]=\"currentPdfUrl\"\n width=\"100%\"\n height=\"100%\"\n frameborder=\"0\"\n allowfullscreen\n >\n <!-- allowfullscreen -->\n </iframe>\n </div>\n }\n <!-- <app-pdf-modal\n *ngIf=\"showPdfModal\"\n [pdfUrl]=\"currentPdfUrl\"\n [fileName]=\"currentFileName\"\n (closed)=\"onPdfModalClose()\"\n (downloadRequested)=\"onPdfDownload()\">\n </app-pdf-modal> -->\n\n <!-- Regular Preview Table -->\n <!-- <div *ngIf=\"!showHtmlInIframe\" class=\"p-4\">\n <p-table\n [value]=\"previewData\"\n [columns]=\"previewColumns\"\n [paginator]=\"true\"\n [rows]=\"10\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"Showing {first} to {last} of {totalRecords} entries\"\n styleClass=\"p-datatable-sm\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of previewColumns\" class=\"text-left\">\n {{ col.header }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowData>\n <tr>\n <td *ngFor=\"let col of previewColumns\" class=\"text-left\">\n {{ rowData[col.field] }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"previewColumns.length\" class=\"text-center py-4\">\n <div class=\"text-center py-8\">\n <i class=\"pi pi-inbox text-4xl text-gray-400 dark:text-gray-500 mb-4\"></i>\n <p class=\"text-gray-500 dark:text-gray-400\">{{ 'NO_PREVIEW_DATA' | translate }}</p>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div> -->\n</div>\n\n<!-- <div class=\"mt-4 p-3 bg-green-50 dark:bg-green-900/20 rounded-lg\">\n<p class=\"text-sm text-green-700 dark:text-green-300\">\n <i class=\"pi pi-info-circle mr-2\"></i>\n {{ 'PREVIEW_INFO' | translate }}\n</p>\n</div> -->\n</div>\n\n<!-- Footer -->\n<div class=\"border-t border-gray-200 dark:border-gray-700 px-2 py-2 bg-gray-50 dark:bg-gray-800\">\n <div class=\"flex justify-between items-center\">\n <button\n type=\"button\"\n (click)=\"onReset()\"\n class=\"flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors\"\n [disabled]=\"loading\">\n <i class=\"pi pi-refresh mr-2\"></i>\n {{ 'RESET' | translate }}\n </button>\n\n <div class=\"flex gap-2\">\n <button\n type=\"button\"\n (click)=\"ref?.close()\"\n class=\"px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors\"\n [disabled]=\"loading\">\n {{ 'CANCEL' | translate }}\n </button>\n\n <!-- SplitButton for Export -->\n <!-- || previewData.length === 0 -->\n <p-splitButton\n [label]=\"getExportButtonText()\"\n [icon]=\"getCurrentExportTypeIcon()\"\n [model]=\"exportMenuItems\"\n (onClick)=\"onExport()\"\n [disabled]=\"loading\"\n styleClass=\"p-button-primary\">\n </p-splitButton>\n </div>\n </div>\n</div>\n\n<!-- Filters Drawer -->\n@if(showFilters){\n <p-drawer\n [(visible)]=\"showFilters\"\n position=\"right\"\n [styleClass]=\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \"\n [modal]=\"true\"\n [dismissible]=\"true\"\n styleClass=\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit(); showFilters=false\" class=\"flex flex-col flex-1\">\n <div class=\"flex-1 overflow-auto\">\n <formly-form\n [form]=\"form\"\n [fields]=\"fields_\"\n [model]=\"model\"\n [options]=\"options\">\n </formly-form>\n </div>\n </form>\n <ng-template pTemplate=\"footer\">\n <div class=\"flex justify-end mt-2 space-x-2 flex-none\">\n <button\n type=\"submit\"\n pButton size=\"small\"\n (click)=\" onSubmit(); showFilters=false\"\n label=\"{{ 'SEARCH' | translate }}\">\n </button>\n <button\n type=\"button\"\n pButton\n size=\"small\"\n class=\"p-button-text\"\n (click)=\"onReset(); showFilters=false\">\n {{ 'CLEAR' | translate }}\n </button>\n </div>\n </ng-template>\n </p-drawer>\n}\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|