@acorex/modules 20.0.21 → 20.0.22
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/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs +478 -0
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs.map +1 -0
- package/fesm2022/acorex-modules-report-management.mjs +71 -125
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/package.json +1 -1
- package/report-management/index.d.ts +74 -36
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs +0 -634
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs.map +0 -1
- package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs +0 -20
- package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs.map +0 -1
@@ -1,11 +1,11 @@
|
|
1
1
|
import { AXPSessionService, AXPAuthGuard } from '@acorex/platform/auth';
|
2
2
|
import { AXP_REPORT_DEFINITION_PROVIDER, AXP_REPORT_CATEGORY_PROVIDER, createAllQueryView, AXPEntityCommandScope, AXPEntityQueryType, AXPLockService, AXP_MENU_PROVIDER, AXPReportDefinitionService } from '@acorex/platform/common';
|
3
3
|
import { AXPDomainModule, provideEntity } from '@acorex/platform/domain';
|
4
|
-
import { AXPQueryService, provideCommandSetups } from '@acorex/platform/runtime';
|
5
4
|
import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
|
6
5
|
import * as i0 from '@angular/core';
|
7
|
-
import { inject, Injectable, NgModule, computed,
|
6
|
+
import { inject, Injectable, NgModule, computed, output, ViewEncapsulation, ChangeDetectionStrategy, Component, input, viewChild } from '@angular/core';
|
8
7
|
import { ROUTES, ActivatedRoute, Router } from '@angular/router';
|
8
|
+
import { AXPQueryService, AXPCommandService } from '@acorex/platform/runtime';
|
9
9
|
import { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex/platform/core';
|
10
10
|
import * as i1 from '@acorex/platform/workflow';
|
11
11
|
import { AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
|
@@ -25,7 +25,7 @@ import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
25
25
|
import * as i3 from '@acorex/components/loading';
|
26
26
|
import { AXLoadingModule } from '@acorex/components/loading';
|
27
27
|
import { AXUnsubscriber } from '@acorex/core/utils';
|
28
|
-
import { AXPDynamicFormComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
|
28
|
+
import { AXPDynamicFormComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutFooterComponent } from '@acorex/platform/layout/components';
|
29
29
|
import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
|
30
30
|
import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
|
31
31
|
import * as i1$1 from '@angular/common';
|
@@ -1044,7 +1044,7 @@ function routesFacory() {
|
|
1044
1044
|
children: [
|
1045
1045
|
{
|
1046
1046
|
path: '**',
|
1047
|
-
loadComponent: () => import('./acorex-modules-report-management-report-runner-root-page.component-
|
1047
|
+
loadComponent: () => import('./acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs').then((c) => c.AXMReportRunnerRootPageComponent),
|
1048
1048
|
data: { reuse: true },
|
1049
1049
|
},
|
1050
1050
|
],
|
@@ -1082,16 +1082,6 @@ class AXMReportManagementModule {
|
|
1082
1082
|
multi: true,
|
1083
1083
|
useFactory: routesFacory,
|
1084
1084
|
},
|
1085
|
-
provideCommandSetups([
|
1086
|
-
{
|
1087
|
-
key: `${RootConfig.entities.report.fullName}:Run`,
|
1088
|
-
command: () => import('./acorex-modules-report-management-run.command-DHPmdkSZ.mjs').then((c) => c.AXMReportRunCommand),
|
1089
|
-
},
|
1090
|
-
{
|
1091
|
-
key: `${RootConfig.entities.report.fullName}:Execute`,
|
1092
|
-
command: () => Promise.resolve().then(function () { return execute_command; }).then((c) => c.AXMReportExecuteCommand),
|
1093
|
-
},
|
1094
|
-
]),
|
1095
1085
|
provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),
|
1096
1086
|
{
|
1097
1087
|
provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
|
@@ -1151,16 +1141,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImpor
|
|
1151
1141
|
multi: true,
|
1152
1142
|
useFactory: routesFacory,
|
1153
1143
|
},
|
1154
|
-
provideCommandSetups([
|
1155
|
-
{
|
1156
|
-
key: `${RootConfig.entities.report.fullName}:Run`,
|
1157
|
-
command: () => import('./acorex-modules-report-management-run.command-DHPmdkSZ.mjs').then((c) => c.AXMReportRunCommand),
|
1158
|
-
},
|
1159
|
-
{
|
1160
|
-
key: `${RootConfig.entities.report.fullName}:Execute`,
|
1161
|
-
command: () => Promise.resolve().then(function () { return execute_command; }).then((c) => c.AXMReportExecuteCommand),
|
1162
|
-
},
|
1163
|
-
]),
|
1164
1144
|
provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),
|
1165
1145
|
{
|
1166
1146
|
provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,
|
@@ -1171,57 +1151,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImpor
|
|
1171
1151
|
}]
|
1172
1152
|
}] });
|
1173
1153
|
|
1174
|
-
class AXMReportExecuteCommand {
|
1175
|
-
//#region ---- Command Implementation ----
|
1176
|
-
async execute(input) {
|
1177
|
-
try {
|
1178
|
-
// Simulate mock data for now
|
1179
|
-
const { parameters, page = 1, pageSize = 50 } = input;
|
1180
|
-
// Mock data generation based on parameters
|
1181
|
-
const mockData = this.generateMockData(parameters, pageSize);
|
1182
|
-
return {
|
1183
|
-
data: mockData,
|
1184
|
-
total: 150, // Mock total
|
1185
|
-
page,
|
1186
|
-
pageSize
|
1187
|
-
};
|
1188
|
-
}
|
1189
|
-
catch (error) {
|
1190
|
-
console.error('Error executing report:', error);
|
1191
|
-
throw new Error('Failed to execute report');
|
1192
|
-
}
|
1193
|
-
}
|
1194
|
-
//#endregion
|
1195
|
-
//#region ---- Mock Data Generation ----
|
1196
|
-
generateMockData(parameters, pageSize) {
|
1197
|
-
const data = [];
|
1198
|
-
for (let i = 0; i < pageSize; i++) {
|
1199
|
-
data.push({
|
1200
|
-
id: `report-item-${i + 1}`,
|
1201
|
-
title: `Report Item ${i + 1}`,
|
1202
|
-
category: parameters['category'] || 'General',
|
1203
|
-
createdDate: new Date(Date.now() - Math.random() * 30 * 24 * 60 * 60 * 1000),
|
1204
|
-
status: ['Active', 'Pending', 'Completed'][Math.floor(Math.random() * 3)],
|
1205
|
-
value: Math.floor(Math.random() * 1000),
|
1206
|
-
description: `This is a sample report item ${i + 1} with some description text.`,
|
1207
|
-
...(parameters['startDate'] && { filteredByDate: true }),
|
1208
|
-
...(parameters['category'] && { categoryFilter: parameters['category'] })
|
1209
|
-
});
|
1210
|
-
}
|
1211
|
-
return data;
|
1212
|
-
}
|
1213
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportExecuteCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
1214
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportExecuteCommand }); }
|
1215
|
-
}
|
1216
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportExecuteCommand, decorators: [{
|
1217
|
-
type: Injectable
|
1218
|
-
}] });
|
1219
|
-
|
1220
|
-
var execute_command = /*#__PURE__*/Object.freeze({
|
1221
|
-
__proto__: null,
|
1222
|
-
AXMReportExecuteCommand: AXMReportExecuteCommand
|
1223
|
-
});
|
1224
|
-
|
1225
1154
|
const AXPReportViewerViewModel = signalStore(withState(() => ({
|
1226
1155
|
reportDefinition: null,
|
1227
1156
|
reportData: [],
|
@@ -1231,8 +1160,9 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
|
|
1231
1160
|
status: AXPPageStatus.Idle,
|
1232
1161
|
totalRecords: 0,
|
1233
1162
|
currentPage: 1,
|
1234
|
-
pageSize:
|
1163
|
+
pageSize: 10,
|
1235
1164
|
error: null,
|
1165
|
+
showResults: false,
|
1236
1166
|
})), withComputed((store) => ({
|
1237
1167
|
//#region ---- Layout Type Detection ----
|
1238
1168
|
layoutType: computed(() => store.reportDefinition()?.layout?.type),
|
@@ -1274,6 +1204,7 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
|
|
1274
1204
|
//#region ---- Data Source ----
|
1275
1205
|
dataSource: computed(() => new AXDataSource({
|
1276
1206
|
load: async () => {
|
1207
|
+
debugger;
|
1277
1208
|
const data = store.reportData();
|
1278
1209
|
return {
|
1279
1210
|
items: data,
|
@@ -1307,7 +1238,7 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
|
|
1307
1238
|
}),
|
1308
1239
|
canExecute: computed(() => store.reportDefinition() !== null && !store.isLoading() && !store.isExecuting()),
|
1309
1240
|
//#endregion
|
1310
|
-
})), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService),
|
1241
|
+
})), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService), commandService = inject(AXPCommandService)) => ({
|
1311
1242
|
//#region ---- Report Loading ----
|
1312
1243
|
async loadReport(reportId) {
|
1313
1244
|
patchState(store, {
|
@@ -1359,13 +1290,14 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
|
|
1359
1290
|
error: null
|
1360
1291
|
});
|
1361
1292
|
try {
|
1362
|
-
const result = await
|
1293
|
+
const result = await commandService.execute('ReportManagement.Report:Execute', {
|
1363
1294
|
reportId: report.id,
|
1364
1295
|
parameters: store.filterContext(),
|
1365
1296
|
page: store.currentPage(),
|
1366
1297
|
pageSize: store.pageSize()
|
1367
1298
|
});
|
1368
1299
|
patchState(store, {
|
1300
|
+
showResults: true,
|
1369
1301
|
reportData: result.data || [],
|
1370
1302
|
totalRecords: result.total || 0,
|
1371
1303
|
previousFilterContext: { ...store.filterContext() }
|
@@ -1373,7 +1305,8 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
|
|
1373
1305
|
}
|
1374
1306
|
catch (error) {
|
1375
1307
|
patchState(store, {
|
1376
|
-
error: 'Failed to execute report'
|
1308
|
+
error: 'Failed to execute report',
|
1309
|
+
showResults: false,
|
1377
1310
|
});
|
1378
1311
|
console.error('Error executing report:', error);
|
1379
1312
|
}
|
@@ -1386,9 +1319,8 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
|
|
1386
1319
|
//#endregion
|
1387
1320
|
//#region ---- Filter Management ----
|
1388
1321
|
updateFilterContext(context) {
|
1389
|
-
// Replace context completely instead of merging to fix binding issues
|
1390
1322
|
patchState(store, {
|
1391
|
-
filterContext: { ...context }
|
1323
|
+
filterContext: { ...store.filterContext(), ...context },
|
1392
1324
|
});
|
1393
1325
|
},
|
1394
1326
|
clearFilters() {
|
@@ -1463,14 +1395,8 @@ const AXPReportViewerViewModel = signalStore(withState(() => ({
|
|
1463
1395
|
|
1464
1396
|
class AXPReportTableViewComponent {
|
1465
1397
|
constructor() {
|
1466
|
-
//#region ----
|
1467
|
-
this.
|
1468
|
-
this.columns = input.required();
|
1469
|
-
this.isLoading = input(false);
|
1470
|
-
this.hasError = input(false);
|
1471
|
-
this.errorMessage = input(null);
|
1472
|
-
this.hasData = input(false);
|
1473
|
-
this.paginationEnabled = input(true);
|
1398
|
+
//#region ---- Dependencies ----
|
1399
|
+
this.vm = inject(AXPReportViewerViewModel);
|
1474
1400
|
//#endregion
|
1475
1401
|
//#region ---- Outputs ----
|
1476
1402
|
this.rowClick = output();
|
@@ -1493,7 +1419,7 @@ class AXPReportTableViewComponent {
|
|
1493
1419
|
}
|
1494
1420
|
}
|
1495
1421
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportTableViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
1496
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPReportTableViewComponent, isStandalone: true, selector: "axp-report-table-view",
|
1422
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPReportTableViewComponent, isStandalone: true, selector: "axp-report-table-view", outputs: { rowClick: "rowClick", actionClick: "actionClick" }, host: { classAttribute: "axp-report-table-view" }, ngImport: i0, template: "<ng-container *translate=\"let t\">\n @if (vm.isLoading()) {\n <!-- Loading State -->\n <div class=\"__loading-state\">\n <ax-loading></ax-loading>\n <p class=\"__loading-text\">\n {{ t('@report-management:features.report-viewer.loading') | async }}\n </p>\n </div>\n } @else if (vm.hasError()) {\n <!-- Error State -->\n <div class=\"__error-state\">\n <div class=\"__error-content\">\n <div class=\"__error-icon\">\n <ax-icon class=\"fa-light fa-exclamation-triangle\"></ax-icon>\n </div>\n <div class=\"__error-message\">\n {{ vm.error() || (t('@report-management:features.report-viewer.error') | async) }}\n </div>\n </div>\n </div>\n } @else if (!vm.hasData()) {\n <!-- No Data State -->\n <div class=\"__no-data-state\">\n <div class=\"__no-data-content\">\n <div class=\"__no-data-icon\">\n <ax-icon class=\"fa-light fa-table\"></ax-icon>\n </div>\n <div class=\"__no-data-title\">\n {{ t('@report-management:features.report-viewer.no-data.title') | async }}\n </div>\n <div class=\"__no-data-description\">\n {{ t('@report-management:features.report-viewer.no-data.description') | async }}\n </div>\n </div>\n </div>\n } @else {\n <!-- Data Table -->\n <ax-data-table\n [dataSource]=\"vm.dataSource()\"\n [paging]=\"vm.paginationEnabled()\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n class=\"ax-flex-1\"\n >\n <!-- Dynamic columns based on configuration -->\n @for (column of vm.columns(); track column.field) {\n @if (column.visible) {\n <ax-text-column [dataField]=\"column.field\" [caption]=\"column.title\" [width]=\"column.width\"> </ax-text-column>\n }\n }\n </ax-data-table>\n }\n</ng-container>\n", styles: [".axp-report-table-view{display:flex;height:100%;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-report-table-view .__loading-state{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}.axp-report-table-view .__loading-state ax-loading{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-table-view .__loading-state .__loading-text{max-width:28rem;text-align:center;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-table-view .__error-state{display:flex;height:100%;align-items:center;justify-content:center;padding:2rem}.axp-report-table-view .__error-state .__error-content{display:flex;max-width:28rem;flex-direction:column;align-items:center;gap:1rem;text-align:center}.axp-report-table-view .__error-state .__error-content .__error-icon{margin-bottom:.5rem;font-size:3rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-danger-500),var(--tw-text-opacity, 1))}.axp-report-table-view .__error-state .__error-content .__error-message{font-weight:500;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-danger-500),var(--tw-text-opacity, 1))}.axp-report-table-view .__no-data-state{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-table-view .__no-data-state .__no-data-content{max-width:28rem}.axp-report-table-view .__no-data-state .__no-data-content .__no-data-icon{margin-bottom:1rem;font-size:3rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-secondary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-table-view .__no-data-state .__no-data-content .__no-data-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-table-view .__no-data-state .__no-data-content .__no-data-description{font-size:.875rem;line-height:1.25rem;opacity:.75}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "parentField", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i2.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i3.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXPLayoutBuilderModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
1497
1423
|
}
|
1498
1424
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportTableViewComponent, decorators: [{
|
1499
1425
|
type: Component,
|
@@ -1504,7 +1430,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImpor
|
|
1504
1430
|
AXDecoratorModule,
|
1505
1431
|
AXTranslationModule,
|
1506
1432
|
AXPLayoutBuilderModule
|
1507
|
-
], changeDetection: ChangeDetectionStrategy.OnPush,
|
1433
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
1434
|
+
class: 'axp-report-table-view'
|
1435
|
+
}, template: "<ng-container *translate=\"let t\">\n @if (vm.isLoading()) {\n <!-- Loading State -->\n <div class=\"__loading-state\">\n <ax-loading></ax-loading>\n <p class=\"__loading-text\">\n {{ t('@report-management:features.report-viewer.loading') | async }}\n </p>\n </div>\n } @else if (vm.hasError()) {\n <!-- Error State -->\n <div class=\"__error-state\">\n <div class=\"__error-content\">\n <div class=\"__error-icon\">\n <ax-icon class=\"fa-light fa-exclamation-triangle\"></ax-icon>\n </div>\n <div class=\"__error-message\">\n {{ vm.error() || (t('@report-management:features.report-viewer.error') | async) }}\n </div>\n </div>\n </div>\n } @else if (!vm.hasData()) {\n <!-- No Data State -->\n <div class=\"__no-data-state\">\n <div class=\"__no-data-content\">\n <div class=\"__no-data-icon\">\n <ax-icon class=\"fa-light fa-table\"></ax-icon>\n </div>\n <div class=\"__no-data-title\">\n {{ t('@report-management:features.report-viewer.no-data.title') | async }}\n </div>\n <div class=\"__no-data-description\">\n {{ t('@report-management:features.report-viewer.no-data.description') | async }}\n </div>\n </div>\n </div>\n } @else {\n <!-- Data Table -->\n <ax-data-table\n [dataSource]=\"vm.dataSource()\"\n [paging]=\"vm.paginationEnabled()\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n class=\"ax-flex-1\"\n >\n <!-- Dynamic columns based on configuration -->\n @for (column of vm.columns(); track column.field) {\n @if (column.visible) {\n <ax-text-column [dataField]=\"column.field\" [caption]=\"column.title\" [width]=\"column.width\"> </ax-text-column>\n }\n }\n </ax-data-table>\n }\n</ng-container>\n", styles: [".axp-report-table-view{display:flex;height:100%;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-report-table-view .__loading-state{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}.axp-report-table-view .__loading-state ax-loading{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-table-view .__loading-state .__loading-text{max-width:28rem;text-align:center;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-table-view .__error-state{display:flex;height:100%;align-items:center;justify-content:center;padding:2rem}.axp-report-table-view .__error-state .__error-content{display:flex;max-width:28rem;flex-direction:column;align-items:center;gap:1rem;text-align:center}.axp-report-table-view .__error-state .__error-content .__error-icon{margin-bottom:.5rem;font-size:3rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-danger-500),var(--tw-text-opacity, 1))}.axp-report-table-view .__error-state .__error-content .__error-message{font-weight:500;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-danger-500),var(--tw-text-opacity, 1))}.axp-report-table-view .__no-data-state{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-table-view .__no-data-state .__no-data-content{max-width:28rem}.axp-report-table-view .__no-data-state .__no-data-content .__no-data-icon{margin-bottom:1rem;font-size:3rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-secondary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-table-view .__no-data-state .__no-data-content .__no-data-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-table-view .__no-data-state .__no-data-content .__no-data-description{font-size:.875rem;line-height:1.25rem;opacity:.75}\n"] }]
|
1508
1436
|
}] });
|
1509
1437
|
|
1510
1438
|
class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
|
@@ -1521,15 +1449,11 @@ class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
|
|
1521
1449
|
this.reportId = input();
|
1522
1450
|
this.reportParameters = input({});
|
1523
1451
|
//#endregion
|
1524
|
-
//#region ---- Outputs ----
|
1525
|
-
this.reportExecuted = output();
|
1526
|
-
//#endregion
|
1527
1452
|
//#region ---- ViewChildren ----
|
1528
1453
|
this.filtersForm = viewChild('filtersForm');
|
1529
|
-
this.mobileFiltersForm = viewChild('mobileFiltersForm');
|
1530
1454
|
//#endregion
|
1531
1455
|
//#region ---- ViewModel ----
|
1532
|
-
this.vm =
|
1456
|
+
this.vm = inject(AXPReportViewerViewModel);
|
1533
1457
|
//#endregion
|
1534
1458
|
//#region ---- Computed Properties ----
|
1535
1459
|
this.showFiltersPanel = () => this.layoutService.isLarge();
|
@@ -1556,40 +1480,58 @@ class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
|
|
1556
1480
|
//#region ---- Lifecycle ----
|
1557
1481
|
async ngOnInit() {
|
1558
1482
|
await super.ngOnInit();
|
1559
|
-
//
|
1483
|
+
// Subscribe to route parameter changes for dynamic report loading
|
1484
|
+
this.unsubscriber.takeUntilDestroy(this.route.paramMap).subscribe(async (params) => {
|
1485
|
+
const reportId = params.get('reportId') ||
|
1486
|
+
this.route.snapshot.queryParamMap.get('reportId') ||
|
1487
|
+
this.reportId();
|
1488
|
+
if (reportId) {
|
1489
|
+
await this.loadReportAndRefresh(reportId);
|
1490
|
+
}
|
1491
|
+
});
|
1492
|
+
// Initial load if reportId is available
|
1560
1493
|
const reportId = this.route.snapshot.paramMap.get('reportId') ||
|
1561
1494
|
this.route.snapshot.queryParamMap.get('reportId') ||
|
1562
1495
|
this.reportId();
|
1563
1496
|
if (reportId) {
|
1564
|
-
await this.
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1497
|
+
await this.loadReportAndRefresh(reportId);
|
1498
|
+
}
|
1499
|
+
}
|
1500
|
+
//#endregion
|
1501
|
+
//#region ---- Helper Methods ----
|
1502
|
+
async loadReportAndRefresh(reportId) {
|
1503
|
+
await this.vm.loadReport(reportId);
|
1504
|
+
// Force refresh of page layout (breadcrumbs, title, etc.) after report loads
|
1505
|
+
this.recompute();
|
1506
|
+
// Handle initial parameters from query string
|
1507
|
+
const queryParams = this.route.snapshot.queryParams;
|
1508
|
+
const initialParams = { ...queryParams };
|
1509
|
+
delete initialParams['reportId']; // Remove reportId from parameters
|
1510
|
+
// Merge with component input parameters
|
1511
|
+
const allParams = { ...initialParams, ...this.reportParameters() };
|
1512
|
+
if (Object.keys(allParams).length > 0) {
|
1513
|
+
console.log('Applying initial parameters:', allParams);
|
1514
|
+
this.vm.updateFilterContext(allParams);
|
1515
|
+
// Auto-execute if parameters are provided
|
1516
|
+
setTimeout(async () => {
|
1517
|
+
await this.vm.executeReport();
|
1518
|
+
}, 500); // Small delay to ensure form is ready
|
1579
1519
|
}
|
1580
1520
|
}
|
1581
1521
|
//#endregion
|
1582
1522
|
//#region ---- Event Handlers ----
|
1583
1523
|
handleFiltersChange(event) {
|
1584
|
-
this.vm.updateFilterContext(event
|
1524
|
+
this.vm.updateFilterContext(event);
|
1585
1525
|
}
|
1586
1526
|
handleFiltersInitiated(event) {
|
1587
|
-
this.vm.updateFilterContext(event
|
1527
|
+
this.vm.updateFilterContext(event);
|
1588
1528
|
}
|
1589
1529
|
async handleExecuteReport() {
|
1590
|
-
|
1530
|
+
const isValid = await this.filtersForm()?.validate();
|
1531
|
+
if (!isValid) {
|
1532
|
+
return;
|
1533
|
+
}
|
1591
1534
|
await this.vm.executeReport();
|
1592
|
-
this.reportExecuted.emit(this.vm.reportData());
|
1593
1535
|
}
|
1594
1536
|
handleRefresh() {
|
1595
1537
|
this.vm.refresh();
|
@@ -1597,7 +1539,7 @@ class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
|
|
1597
1539
|
handleClearFilters() {
|
1598
1540
|
this.vm.clearFilters();
|
1599
1541
|
// Reset form if available
|
1600
|
-
const form = this.filtersForm()
|
1542
|
+
const form = this.filtersForm();
|
1601
1543
|
if (form) {
|
1602
1544
|
form.resetErrors();
|
1603
1545
|
}
|
@@ -1616,7 +1558,7 @@ class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
|
|
1616
1558
|
const breadcrumbs = [
|
1617
1559
|
{
|
1618
1560
|
name: 'reports',
|
1619
|
-
title: await this.translateService.translateAsync('@report-management:
|
1561
|
+
title: await this.translateService.translateAsync('@report-management:root-menu'),
|
1620
1562
|
command: {
|
1621
1563
|
name: 'navigate-to-reports',
|
1622
1564
|
},
|
@@ -1751,14 +1693,16 @@ class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
|
|
1751
1693
|
}
|
1752
1694
|
}
|
1753
1695
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportViewerPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
1754
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPReportViewerPageComponent, isStandalone: true, selector: "axp-report-viewer-page", inputs: { reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, reportParameters: { classPropertyName: "reportParameters", publicName: "reportParameters", isSignal: true, isRequired: false, transformFunction: null } },
|
1696
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPReportViewerPageComponent, isStandalone: true, selector: "axp-report-viewer-page", inputs: { reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, reportParameters: { classPropertyName: "reportParameters", publicName: "reportParameters", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "axp-report-viewer-page" }, providers: [
|
1755
1697
|
AXUnsubscriber,
|
1756
|
-
|
1698
|
+
AXPReportViewerViewModel,
|
1757
1699
|
{
|
1758
1700
|
provide: AXPPageLayoutBase,
|
1759
1701
|
useExisting: AXPReportViewerPageComponent,
|
1760
1702
|
},
|
1761
|
-
], viewQueries: [{ propertyName: "filtersForm", first: true, predicate: ["filtersForm"], descendants: true, isSignal: true }, { propertyName: "mobileFiltersForm", first: true, predicate: ["mobileFiltersForm"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:features.report-viewer.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <div class=\"__filters-container\">\n <axp-dynamic-form #filtersForm [formDefinition]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\"\n [layoutConfig]=\"defaultLayout()\" [layoutStyle]=\"'compact'\" (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-dynamic-form>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <!-- Main Content: Report Display -->\n <axp-page-content>\n <!-- Mobile Filters (Collapsed) -->\n @if (!showFiltersPanel() && vm.reportDefinition()) {\n <div class=\"__mobile-filters\">\n <axp-dynamic-form #mobileFiltersForm [formDefinition]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\"\n [layoutConfig]=\"compactLayout()\" [layoutStyle]=\"'compact'\" (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-dynamic-form>\n </div>\n }\n\n @if (!vm.reportDefinition()) {\n <!-- No Report Selected State -->\n <div class=\"__no-report\">\n <div class=\"__no-report-icon\">\n <ax-icon class=\"fa-light fa-chart-line\"></ax-icon>\n </div>\n <div class=\"__no-report-content\">\n <h3 class=\"__no-report-title\">\n {{ t('@report-management:features.report-viewer.no-report.title') | async }}\n </h3>\n <p class=\"__no-report-description\">\n {{ t('@report-management:features.report-viewer.no-report.description') | async }}\n </p>\n <div class=\"__no-report-actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:features.report-viewer.no-report.browse-reports') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n } @else {\n <!-- Report Display Area -->\n @if (vm.isTableLayout()) {\n <axp-report-table-view [dataSource]=\"vm.dataSource()\" [columns]=\"vm.columns()\" [isLoading]=\"vm.isLoading()\"\n [hasError]=\"vm.hasError()\" [errorMessage]=\"vm.error()\" [hasData]=\"vm.hasData()\"\n [paginationEnabled]=\"vm.paginationEnabled()\" (rowClick)=\"handleRowClick($event)\"\n (actionClick)=\"handleActionClick($event)\">\n </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <!-- Chart View Placeholder -->\n <div class=\"__chart-placeholder\">\n <div class=\"__placeholder-icon\">\n <ax-icon class=\"fa-light fa-chart-column\"></ax-icon>\n </div>\n <div class=\"__placeholder-content\">\n <h4 class=\"__placeholder-title\">Chart View</h4>\n <p class=\"__placeholder-description\">Chart visualization will be implemented here</p>\n </div>\n </div>\n } @else if (vm.isCardsLayout()) {\n <!-- Cards View Placeholder -->\n <div class=\"__cards-placeholder\">\n <div class=\"__placeholder-icon\">\n <ax-icon class=\"fa-light fa-table-cells\"></ax-icon>\n </div>\n <div class=\"__placeholder-content\">\n <h4 class=\"__placeholder-title\">Cards View</h4>\n <p class=\"__placeholder-description\">Card-based layout will be implemented here</p>\n </div>\n </div>\n } @else {\n <!-- Custom Layout Placeholder -->\n <div class=\"__custom-placeholder\">\n <div class=\"__placeholder-icon\">\n <ax-icon class=\"fa-light fa-layout-grid\"></ax-icon>\n </div>\n <div class=\"__placeholder-content\">\n <h4 class=\"__placeholder-title\">Custom Layout</h4>\n <p class=\"__placeholder-description\">Custom report layout will be implemented here</p>\n </div>\n </div>\n }\n }\n </axp-page-content>\n\n <!-- Footer: Execute Button -->\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button [class.ax-sm]=\"layoutService.isSmall()\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-footer>\n</axp-page-layout>", styles: [".axp-report-viewer-page{display:flex;height:100%;width:100%;flex-direction:column}.axp-report-viewer-page axp-layout-start-side{height:100%;width:20rem;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1920px){.axp-report-viewer-page axp-layout-start-side{width:24rem}}.axp-report-viewer-page axp-layout-start-side axp-layout-content{overflow-x:auto}.axp-report-viewer-page axp-layout-start-side .__filters-container{padding:1rem}.axp-report-viewer-page .__mobile-filters{flex-shrink:0;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-viewer-page axp-page-content{display:flex;height:100%;flex-direction:column}.axp-report-viewer-page .__no-report{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-viewer-page .__no-report .__no-report-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-viewer-page .__no-report .__no-report-content{max-width:28rem}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-title{margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-description{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-actions{display:flex;justify-content:center}.axp-report-viewer-page axp-report-table-view{flex:1 1 0%;overflow:hidden}.axp-report-viewer-page .__chart-placeholder,.axp-report-viewer-page .__cards-placeholder,.axp-report-viewer-page .__custom-placeholder{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;margin:1.5rem;border-radius:.5rem;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-viewer-page .__chart-placeholder .__placeholder-icon,.axp-report-viewer-page .__cards-placeholder .__placeholder-icon,.axp-report-viewer-page .__custom-placeholder .__placeholder-icon{margin-bottom:1rem;font-size:3rem;line-height:1;opacity:.5}.axp-report-viewer-page .__chart-placeholder .__placeholder-content,.axp-report-viewer-page .__cards-placeholder .__placeholder-content,.axp-report-viewer-page .__custom-placeholder .__placeholder-content{max-width:28rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-description{font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__chart-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-viewer-page .__cards-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-secondary-500),var(--tw-text-opacity, 1))}.axp-report-viewer-page .__custom-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-accent1-500),var(--tw-text-opacity, 1))}@media (max-width: 768px){.axp-report-viewer-page .__chart-placeholder,.axp-report-viewer-page .__cards-placeholder,.axp-report-viewer-page .__custom-placeholder{margin:1rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-title{font-size:1rem;line-height:1.5rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-description{font-size:.75rem;line-height:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "component", type: AXPDynamicFormComponent, selector: "axp-dynamic-form", inputs: ["formDefinition", "context", "layoutStyle", "layoutConfig"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPReportTableViewComponent, selector: "axp-report-table-view", inputs: ["dataSource", "columns", "isLoading", "hasError", "errorMessage", "hasData", "paginationEnabled"], outputs: ["rowClick", "actionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
1703
|
+
], viewQueries: [{ propertyName: "filtersForm", first: true, predicate: ["filtersForm"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:features.report-viewer.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <div class=\"__filters-container\">\n <axp-dynamic-form\n #filtersForm\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.filterContext()\"\n [layoutConfig]=\"defaultLayout()\"\n [layoutStyle]=\"'compact'\"\n (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\">\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n class=\"ax-w-full\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content>\n @if (!vm.reportDefinition()) {\n <ng-container *ngTemplateOutlet=\"noReport\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Report Display Area -->\n<ng-template #reportDisplay>\n @if (vm.isTableLayout()) {\n <axp-report-table-view (rowClick)=\"handleRowClick($event)\" (actionClick)=\"handleActionClick($event)\">\n </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <!-- Chart View Placeholder -->\n <div class=\"__chart-placeholder\">\n <div class=\"__placeholder-icon\">\n <ax-icon class=\"fa-light fa-chart-column\"></ax-icon>\n </div>\n <div class=\"__placeholder-content\">\n <h4 class=\"__placeholder-title\">Chart View</h4>\n <p class=\"__placeholder-description\">Chart visualization will be implemented here</p>\n </div>\n </div>\n } @else {\n <!-- Custom Layout Placeholder -->\n <div class=\"__custom-placeholder\">\n <div class=\"__placeholder-icon\">\n <ax-icon class=\"fa-light fa-layout-grid\"></ax-icon>\n </div>\n <div class=\"__placeholder-content\">\n <h4 class=\"__placeholder-title\">Custom Layout</h4>\n <p class=\"__placeholder-description\">Custom report layout will be implemented here</p>\n </div>\n </div>\n }\n</ng-template>\n\n<!-- No Report Selected State -->\n<ng-template #noReport>\n <div class=\"__no-report\" *translate=\"let t\">\n <div class=\"__no-report-icon\">\n <ax-icon class=\"fa-light fa-chart-line\"></ax-icon>\n </div>\n <div class=\"__no-report-content\">\n <h3 class=\"__no-report-title\">\n {{ t('@report-management:features.report-viewer.no-report.title') | async }}\n </h3>\n <p class=\"__no-report-description\">\n {{ t('@report-management:features.report-viewer.no-report.description') | async }}\n </p>\n <div class=\"__no-report-actions\">\n <ax-button\n look=\"outline\"\n color=\"primary\"\n [text]=\"t('@report-management:features.report-viewer.no-report.browse-reports') | async\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".axp-report-viewer-page{display:flex;height:100%;width:100%;flex-direction:column}.axp-report-viewer-page axp-layout-container{overflow:hidden}.axp-report-viewer-page axp-layout-start-side{height:100%;width:20rem;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1920px){.axp-report-viewer-page axp-layout-start-side{width:24rem}}.axp-report-viewer-page axp-layout-start-side>axp-layout-header{height:73px;border-bottom-width:1px}.axp-report-viewer-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding:.5rem}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections{gap:0px!important}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections axp-layout-section{border-style:none!important;padding:0!important;--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.axp-report-viewer-page .__mobile-filters{flex-shrink:0;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-viewer-page axp-page-content{display:flex;height:100%;flex-direction:column}.axp-report-viewer-page .__no-report{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-viewer-page .__no-report .__no-report-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-viewer-page .__no-report .__no-report-content{max-width:28rem}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-title{margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-description{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-actions{display:flex;justify-content:center}.axp-report-viewer-page axp-report-table-view{flex:1 1 0%;overflow:hidden}.axp-report-viewer-page .__chart-placeholder,.axp-report-viewer-page .__cards-placeholder,.axp-report-viewer-page .__custom-placeholder{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;margin:1.5rem;border-radius:.5rem;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-viewer-page .__chart-placeholder .__placeholder-icon,.axp-report-viewer-page .__cards-placeholder .__placeholder-icon,.axp-report-viewer-page .__custom-placeholder .__placeholder-icon{margin-bottom:1rem;font-size:3rem;line-height:1;opacity:.5}.axp-report-viewer-page .__chart-placeholder .__placeholder-content,.axp-report-viewer-page .__cards-placeholder .__placeholder-content,.axp-report-viewer-page .__custom-placeholder .__placeholder-content{max-width:28rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-description{font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__chart-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-viewer-page .__cards-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-secondary-500),var(--tw-text-opacity, 1))}.axp-report-viewer-page .__custom-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-accent1-500),var(--tw-text-opacity, 1))}@media (max-width: 768px){.axp-report-viewer-page .__chart-placeholder,.axp-report-viewer-page .__cards-placeholder,.axp-report-viewer-page .__custom-placeholder{margin:1rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-title{font-size:1rem;line-height:1.5rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-description{font-size:.75rem;line-height:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "component", type:
|
1704
|
+
//
|
1705
|
+
AXPDynamicFormComponent, selector: "axp-dynamic-form", inputs: ["formDefinition", "context", "layoutStyle", "layoutConfig"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPReportTableViewComponent, selector: "axp-report-table-view", outputs: ["rowClick", "actionClick"] }, { kind: "component", type: AXPThemeLayoutFooterComponent, selector: "axp-layout-footer, axp-layout-page-footer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
1762
1706
|
}
|
1763
1707
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportViewerPageComponent, decorators: [{
|
1764
1708
|
type: Component,
|
@@ -1768,20 +1712,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImpor
|
|
1768
1712
|
AXDecoratorModule,
|
1769
1713
|
AXLoadingModule,
|
1770
1714
|
AXTranslationModule,
|
1715
|
+
//
|
1771
1716
|
AXPDynamicFormComponent,
|
1772
1717
|
AXPPageLayoutComponent,
|
1773
1718
|
AXPThemeLayoutStartSideComponent,
|
1774
1719
|
AXPThemeLayoutHeaderComponent,
|
1775
1720
|
AXPThemeLayoutBlockComponent,
|
1776
|
-
AXPReportTableViewComponent
|
1721
|
+
AXPReportTableViewComponent,
|
1722
|
+
AXPThemeLayoutFooterComponent
|
1777
1723
|
], providers: [
|
1778
1724
|
AXUnsubscriber,
|
1779
|
-
|
1725
|
+
AXPReportViewerViewModel,
|
1780
1726
|
{
|
1781
1727
|
provide: AXPPageLayoutBase,
|
1782
1728
|
useExisting: AXPReportViewerPageComponent,
|
1783
1729
|
},
|
1784
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-viewer-page' }, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n
|
1730
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-viewer-page' }, template: "<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:features.report-viewer.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <div class=\"__filters-container\">\n <axp-dynamic-form\n #filtersForm\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.filterContext()\"\n [layoutConfig]=\"defaultLayout()\"\n [layoutStyle]=\"'compact'\"\n (contextChange)=\"handleFiltersChange($event)\"\n (contextInitiated)=\"handleFiltersInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\">\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n class=\"ax-w-full\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content>\n @if (!vm.reportDefinition()) {\n <ng-container *ngTemplateOutlet=\"noReport\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Report Display Area -->\n<ng-template #reportDisplay>\n @if (vm.isTableLayout()) {\n <axp-report-table-view (rowClick)=\"handleRowClick($event)\" (actionClick)=\"handleActionClick($event)\">\n </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <!-- Chart View Placeholder -->\n <div class=\"__chart-placeholder\">\n <div class=\"__placeholder-icon\">\n <ax-icon class=\"fa-light fa-chart-column\"></ax-icon>\n </div>\n <div class=\"__placeholder-content\">\n <h4 class=\"__placeholder-title\">Chart View</h4>\n <p class=\"__placeholder-description\">Chart visualization will be implemented here</p>\n </div>\n </div>\n } @else {\n <!-- Custom Layout Placeholder -->\n <div class=\"__custom-placeholder\">\n <div class=\"__placeholder-icon\">\n <ax-icon class=\"fa-light fa-layout-grid\"></ax-icon>\n </div>\n <div class=\"__placeholder-content\">\n <h4 class=\"__placeholder-title\">Custom Layout</h4>\n <p class=\"__placeholder-description\">Custom report layout will be implemented here</p>\n </div>\n </div>\n }\n</ng-template>\n\n<!-- No Report Selected State -->\n<ng-template #noReport>\n <div class=\"__no-report\" *translate=\"let t\">\n <div class=\"__no-report-icon\">\n <ax-icon class=\"fa-light fa-chart-line\"></ax-icon>\n </div>\n <div class=\"__no-report-content\">\n <h3 class=\"__no-report-title\">\n {{ t('@report-management:features.report-viewer.no-report.title') | async }}\n </h3>\n <p class=\"__no-report-description\">\n {{ t('@report-management:features.report-viewer.no-report.description') | async }}\n </p>\n <div class=\"__no-report-actions\">\n <ax-button\n look=\"outline\"\n color=\"primary\"\n [text]=\"t('@report-management:features.report-viewer.no-report.browse-reports') | async\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".axp-report-viewer-page{display:flex;height:100%;width:100%;flex-direction:column}.axp-report-viewer-page axp-layout-container{overflow:hidden}.axp-report-viewer-page axp-layout-start-side{height:100%;width:20rem;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}@media (min-width: 1920px){.axp-report-viewer-page axp-layout-start-side{width:24rem}}.axp-report-viewer-page axp-layout-start-side>axp-layout-header{height:73px;border-bottom-width:1px}.axp-report-viewer-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding:.5rem}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections{gap:0px!important}.axp-report-viewer-page axp-layout-start-side axp-layout-content .__filters-container axp-layout-sections axp-layout-section{border-style:none!important;padding:0!important;--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.axp-report-viewer-page .__mobile-filters{flex-shrink:0;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-viewer-page axp-page-content{display:flex;height:100%;flex-direction:column}.axp-report-viewer-page .__no-report{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center}.axp-report-viewer-page .__no-report .__no-report-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1));opacity:.5}.axp-report-viewer-page .__no-report .__no-report-content{max-width:28rem}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-title{margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-description{margin-bottom:1.5rem;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__no-report .__no-report-content .__no-report-actions{display:flex;justify-content:center}.axp-report-viewer-page axp-report-table-view{flex:1 1 0%;overflow:hidden}.axp-report-viewer-page .__chart-placeholder,.axp-report-viewer-page .__cards-placeholder,.axp-report-viewer-page .__custom-placeholder{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;margin:1.5rem;border-radius:.5rem;border-width:2px;border-style:dashed;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-report-viewer-page .__chart-placeholder .__placeholder-icon,.axp-report-viewer-page .__cards-placeholder .__placeholder-icon,.axp-report-viewer-page .__custom-placeholder .__placeholder-icon{margin-bottom:1rem;font-size:3rem;line-height:1;opacity:.5}.axp-report-viewer-page .__chart-placeholder .__placeholder-content,.axp-report-viewer-page .__cards-placeholder .__placeholder-content,.axp-report-viewer-page .__custom-placeholder .__placeholder-content{max-width:28rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-title{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-description{font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-viewer-page .__chart-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-viewer-page .__cards-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-secondary-500),var(--tw-text-opacity, 1))}.axp-report-viewer-page .__custom-placeholder .__placeholder-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-accent1-500),var(--tw-text-opacity, 1))}@media (max-width: 768px){.axp-report-viewer-page .__chart-placeholder,.axp-report-viewer-page .__cards-placeholder,.axp-report-viewer-page .__custom-placeholder{margin:1rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-title,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-title{font-size:1rem;line-height:1.5rem}.axp-report-viewer-page .__chart-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__cards-placeholder .__placeholder-content .__placeholder-description,.axp-report-viewer-page .__custom-placeholder .__placeholder-content .__placeholder-description{font-size:.75rem;line-height:1rem}}\n"] }]
|
1785
1731
|
}] });
|
1786
1732
|
|
1787
1733
|
var reportViewerPage_component = /*#__PURE__*/Object.freeze({
|
@@ -1793,5 +1739,5 @@ var reportViewerPage_component = /*#__PURE__*/Object.freeze({
|
|
1793
1739
|
* Generated bundle index. Do not edit.
|
1794
1740
|
*/
|
1795
1741
|
|
1796
|
-
export {
|
1742
|
+
export { AXMReportManagementModule, AXPReportTableViewComponent, AXPReportViewerPageComponent, AXPReportViewerViewModel, RootConfig };
|
1797
1743
|
//# sourceMappingURL=acorex-modules-report-management.mjs.map
|