@acorex/modules 20.0.12 → 20.0.13
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/calendar-management/README.md +271 -0
- package/calendar-management/index.d.ts +156 -0
- package/contact-management/README.md +150 -0
- package/contact-management/index.d.ts +15 -4
- package/fesm2022/acorex-modules-calendar-management.mjs +1509 -0
- package/fesm2022/acorex-modules-calendar-management.mjs.map +1 -0
- package/fesm2022/acorex-modules-common-search-popup.component-B_bJ0ZRM.mjs +128 -0
- package/fesm2022/acorex-modules-common-search-popup.component-B_bJ0ZRM.mjs.map +1 -0
- package/fesm2022/acorex-modules-common.mjs +2 -2
- package/fesm2022/acorex-modules-contact-management-acorex-modules-contact-management-DVjMlS0K.mjs +2548 -0
- package/fesm2022/acorex-modules-contact-management-acorex-modules-contact-management-DVjMlS0K.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-management-address-type.entity-QMEODkhx.mjs → acorex-modules-contact-management-address-type.entity-CWIBwWfZ.mjs} +65 -38
- package/fesm2022/acorex-modules-contact-management-address-type.entity-CWIBwWfZ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-management-contact-address.entity-0f4Vaw_k.mjs → acorex-modules-contact-management-contact-address.entity-DO6GizbS.mjs} +49 -95
- package/fesm2022/acorex-modules-contact-management-contact-address.entity-DO6GizbS.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-management-contact-method.entity-ChEz1jW0.mjs → acorex-modules-contact-management-contact-method.entity-tEtMSV4f.mjs} +67 -69
- package/fesm2022/acorex-modules-contact-management-contact-method.entity-tEtMSV4f.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-management-contact-relationship.entity-DLfiEEfk.mjs → acorex-modules-contact-management-contact-relationship.entity-C-B5aOoq.mjs} +34 -63
- package/fesm2022/acorex-modules-contact-management-contact-relationship.entity-C-B5aOoq.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-management-contact-source.entity-hopVxiIT.mjs → acorex-modules-contact-management-contact-source.entity-Dw8jwcox.mjs} +67 -40
- package/fesm2022/acorex-modules-contact-management-contact-source.entity-Dw8jwcox.mjs.map +1 -0
- package/fesm2022/acorex-modules-contact-management-emergency-contact-category.entity-BJOOhcD1.mjs +680 -0
- package/fesm2022/acorex-modules-contact-management-emergency-contact-category.entity-BJOOhcD1.mjs.map +1 -0
- package/fesm2022/acorex-modules-contact-management-emergency-contact.entity-Cr7_5JKD.mjs +1062 -0
- package/fesm2022/acorex-modules-contact-management-emergency-contact.entity-Cr7_5JKD.mjs.map +1 -0
- package/fesm2022/acorex-modules-contact-management.mjs +1 -2331
- package/fesm2022/acorex-modules-contact-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-form-template-management-acorex-modules-form-template-management-EsaVgkdd.mjs.map +1 -1
- package/fesm2022/{acorex-modules-report-management-report-create-root.component-CcNJIUk2.mjs → acorex-modules-report-management-report-create-root.component-DqrLa6vh.mjs} +4 -4
- package/fesm2022/{acorex-modules-report-management-report-create-root.component-CcNJIUk2.mjs.map → acorex-modules-report-management-report-create-root.component-DqrLa6vh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-CAxcD_pe.mjs → acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs} +41 -24
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs.map +1 -0
- package/fesm2022/acorex-modules-report-management.mjs +670 -8
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +4 -2
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/package.json +9 -5
- package/report-management/index.d.ts +303 -5
- package/fesm2022/acorex-modules-common-search-popup.component-CNh7TFpe.mjs +0 -128
- package/fesm2022/acorex-modules-common-search-popup.component-CNh7TFpe.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-management-address-type.entity-QMEODkhx.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-management-contact-address.entity-0f4Vaw_k.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-management-contact-method.entity-ChEz1jW0.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-management-contact-relationship.entity-DLfiEEfk.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-management-contact-source.entity-hopVxiIT.mjs.map +0 -1
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-CAxcD_pe.mjs.map +0 -1
@@ -1,20 +1,37 @@
|
|
1
1
|
import { AXPSessionService, AXPAuthGuard } from '@acorex/platform/auth';
|
2
|
-
import { AXP_REPORT_DEFINITION_PROVIDER, AXP_REPORT_CATEGORY_PROVIDER, createAllQueryView, AXPEntityCommandScope, AXPEntityQueryType, AXPLockService, AXP_MENU_PROVIDER } from '@acorex/platform/common';
|
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
4
|
import { AXPQueryService, provideCommandSetups } from '@acorex/platform/runtime';
|
5
5
|
import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
|
6
6
|
import * as i0 from '@angular/core';
|
7
|
-
import { inject, Injectable, NgModule } from '@angular/core';
|
8
|
-
import { ROUTES } from '@angular/router';
|
7
|
+
import { inject, Injectable, NgModule, computed, input, output, ChangeDetectionStrategy, Component, viewChild, ViewEncapsulation } from '@angular/core';
|
8
|
+
import { ROUTES, ActivatedRoute, Router } from '@angular/router';
|
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';
|
12
|
-
import { AXPWidgetsCatalog } from '@acorex/platform/layout/builder';
|
12
|
+
import { AXPWidgetsCatalog, AXPPageStatus, AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';
|
13
13
|
import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';
|
14
|
-
import
|
14
|
+
import * as i5 from '@acorex/core/translation';
|
15
|
+
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
15
16
|
import { AXDataSource } from '@acorex/cdk/common';
|
16
17
|
import { AXMDataSourceService } from '@acorex/modules/platform-management';
|
17
18
|
import { AXPopupService } from '@acorex/components/popup';
|
19
|
+
import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
|
20
|
+
import { AXLocaleService } from '@acorex/core/locale';
|
21
|
+
import * as i2$1 from '@acorex/components/button';
|
22
|
+
import { AXButtonModule } from '@acorex/components/button';
|
23
|
+
import * as i4 from '@acorex/components/decorators';
|
24
|
+
import { AXDecoratorModule } from '@acorex/components/decorators';
|
25
|
+
import * as i3 from '@acorex/components/loading';
|
26
|
+
import { AXLoadingModule } from '@acorex/components/loading';
|
27
|
+
import { AXUnsubscriber } from '@acorex/core/utils';
|
28
|
+
import { AXPDynamicFormComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
|
29
|
+
import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
|
30
|
+
import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
|
31
|
+
import * as i1$1 from '@angular/common';
|
32
|
+
import { CommonModule } from '@angular/common';
|
33
|
+
import * as i2 from '@acorex/components/data-table';
|
34
|
+
import { AXDataTableModule } from '@acorex/components/data-table';
|
18
35
|
|
19
36
|
const config = {
|
20
37
|
i18n: 'report-management',
|
@@ -959,7 +976,7 @@ class AXMReportCreateRootWorkflowAction extends AXPWorkflowAction {
|
|
959
976
|
}
|
960
977
|
async execute(context) {
|
961
978
|
// const refId = context.getVariable<string>('options.refId');
|
962
|
-
const comp = await import('./acorex-modules-report-management-report-create-root.component-
|
979
|
+
const comp = await import('./acorex-modules-report-management-report-create-root.component-DqrLa6vh.mjs').then(m => m.AXPReportCreateRootComponent);
|
963
980
|
this.popupService.open(comp, await this.translationService.translateAsync('report.create.title', { scope: 'report-management' }));
|
964
981
|
}
|
965
982
|
}
|
@@ -999,6 +1016,25 @@ const AXMReportCreateWorkflow = {
|
|
999
1016
|
|
1000
1017
|
function routesFacory() {
|
1001
1018
|
let routes = [
|
1019
|
+
{
|
1020
|
+
path: `:app/${RootConfig.module.route}/viewer`,
|
1021
|
+
canActivate: [AXPAuthGuard],
|
1022
|
+
loadComponent: () => {
|
1023
|
+
return AXPRootLayoutComponent;
|
1024
|
+
},
|
1025
|
+
children: [
|
1026
|
+
{
|
1027
|
+
path: ':reportId',
|
1028
|
+
loadComponent: () => Promise.resolve().then(function () { return reportViewerPage_component; }).then((c) => c.AXPReportViewerPageComponent),
|
1029
|
+
data: { reuse: true },
|
1030
|
+
},
|
1031
|
+
{
|
1032
|
+
path: '',
|
1033
|
+
loadComponent: () => Promise.resolve().then(function () { return reportViewerPage_component; }).then((c) => c.AXPReportViewerPageComponent),
|
1034
|
+
data: { reuse: true },
|
1035
|
+
},
|
1036
|
+
],
|
1037
|
+
},
|
1002
1038
|
{
|
1003
1039
|
path: `:app/${RootConfig.module.route}/reports`,
|
1004
1040
|
canActivate: [AXPAuthGuard],
|
@@ -1008,7 +1044,7 @@ function routesFacory() {
|
|
1008
1044
|
children: [
|
1009
1045
|
{
|
1010
1046
|
path: '**',
|
1011
|
-
loadComponent: () => import('./acorex-modules-report-management-report-runner-root-page.component-
|
1047
|
+
loadComponent: () => import('./acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs').then((c) => c.AXMReportRunnerRootPageComponent),
|
1012
1048
|
data: { reuse: true },
|
1013
1049
|
},
|
1014
1050
|
],
|
@@ -1051,6 +1087,10 @@ class AXMReportManagementModule {
|
|
1051
1087
|
key: `${RootConfig.entities.report.fullName}:Run`,
|
1052
1088
|
command: () => import('./acorex-modules-report-management-run.command-DHPmdkSZ.mjs').then((c) => c.AXMReportRunCommand),
|
1053
1089
|
},
|
1090
|
+
{
|
1091
|
+
key: `${RootConfig.entities.report.fullName}:Execute`,
|
1092
|
+
command: () => Promise.resolve().then(function () { return execute_command; }).then((c) => c.AXMReportExecuteCommand),
|
1093
|
+
},
|
1054
1094
|
]),
|
1055
1095
|
provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),
|
1056
1096
|
{
|
@@ -1116,6 +1156,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImpor
|
|
1116
1156
|
key: `${RootConfig.entities.report.fullName}:Run`,
|
1117
1157
|
command: () => import('./acorex-modules-report-management-run.command-DHPmdkSZ.mjs').then((c) => c.AXMReportRunCommand),
|
1118
1158
|
},
|
1159
|
+
{
|
1160
|
+
key: `${RootConfig.entities.report.fullName}:Execute`,
|
1161
|
+
command: () => Promise.resolve().then(function () { return execute_command; }).then((c) => c.AXMReportExecuteCommand),
|
1162
|
+
},
|
1119
1163
|
]),
|
1120
1164
|
provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),
|
1121
1165
|
{
|
@@ -1127,9 +1171,627 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImpor
|
|
1127
1171
|
}]
|
1128
1172
|
}] });
|
1129
1173
|
|
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
|
+
const AXPReportViewerViewModel = signalStore(withState(() => ({
|
1226
|
+
reportDefinition: null,
|
1227
|
+
reportData: [],
|
1228
|
+
filterContext: {},
|
1229
|
+
previousFilterContext: {},
|
1230
|
+
categoriesPath: [],
|
1231
|
+
status: AXPPageStatus.Idle,
|
1232
|
+
totalRecords: 0,
|
1233
|
+
currentPage: 1,
|
1234
|
+
pageSize: 50,
|
1235
|
+
error: null,
|
1236
|
+
})), withComputed((store) => ({
|
1237
|
+
//#region ---- Layout Type Detection ----
|
1238
|
+
layoutType: computed(() => store.reportDefinition()?.layout?.type),
|
1239
|
+
//#endregion
|
1240
|
+
//#region ---- Table Layout Configuration ----
|
1241
|
+
tableLayoutConfig: computed(() => store.reportDefinition()?.layout?.type === 'table'
|
1242
|
+
? store.reportDefinition()?.layout
|
1243
|
+
: null),
|
1244
|
+
//#endregion
|
1245
|
+
//#region ---- State Indicators ----
|
1246
|
+
isLoading: computed(() => store.status() === AXPPageStatus.Processing),
|
1247
|
+
isExecuting: computed(() => store.status() === AXPPageStatus.Submitting),
|
1248
|
+
hasData: computed(() => store.reportData().length > 0),
|
1249
|
+
hasError: computed(() => store.error() !== null),
|
1250
|
+
title: computed(() => store.reportDefinition()?.title ?? 'Report Viewer'),
|
1251
|
+
description: computed(() => store.reportDefinition()?.description ?? null),
|
1252
|
+
//#endregion
|
1253
|
+
//#region ---- Form Configuration ----
|
1254
|
+
formDefinition: computed(() => {
|
1255
|
+
const report = store.reportDefinition();
|
1256
|
+
if (!report || !report.parameterGroups) {
|
1257
|
+
return { groups: [] };
|
1258
|
+
}
|
1259
|
+
return {
|
1260
|
+
groups: report.parameterGroups.map(group => ({
|
1261
|
+
name: group.name,
|
1262
|
+
title: group.title,
|
1263
|
+
description: group.description,
|
1264
|
+
parameters: group.parameters.map(param => ({
|
1265
|
+
path: param.path,
|
1266
|
+
title: param.title,
|
1267
|
+
description: param.description,
|
1268
|
+
widget: param.widget
|
1269
|
+
}))
|
1270
|
+
}))
|
1271
|
+
};
|
1272
|
+
}),
|
1273
|
+
//#endregion
|
1274
|
+
//#region ---- Data Source ----
|
1275
|
+
dataSource: computed(() => new AXDataSource({
|
1276
|
+
load: async () => {
|
1277
|
+
const data = store.reportData();
|
1278
|
+
return {
|
1279
|
+
items: data,
|
1280
|
+
total: store.totalRecords()
|
1281
|
+
};
|
1282
|
+
},
|
1283
|
+
pageSize: store.pageSize(),
|
1284
|
+
key: 'id'
|
1285
|
+
}))
|
1286
|
+
//#endregion
|
1287
|
+
})), withComputed((store) => ({
|
1288
|
+
//#region ---- Derived Layout Properties ----
|
1289
|
+
isTableLayout: computed(() => store.layoutType() === 'table'),
|
1290
|
+
isChartLayout: computed(() => store.layoutType() === 'chart'),
|
1291
|
+
isCardsLayout: computed(() => store.layoutType() === 'cards'),
|
1292
|
+
isCustomLayout: computed(() => store.layoutType() === 'custom'),
|
1293
|
+
columns: computed(() => {
|
1294
|
+
const layout = store.tableLayoutConfig();
|
1295
|
+
return layout?.columns?.map((col) => ({
|
1296
|
+
field: col.field,
|
1297
|
+
title: col.title || col.field,
|
1298
|
+
width: col.width || '150px',
|
1299
|
+
visible: col.visible !== false,
|
1300
|
+
align: col.align || 'left',
|
1301
|
+
widget: col.widget
|
1302
|
+
})) || [];
|
1303
|
+
}),
|
1304
|
+
paginationEnabled: computed(() => {
|
1305
|
+
const layout = store.tableLayoutConfig();
|
1306
|
+
return layout?.options?.pagination !== false;
|
1307
|
+
}),
|
1308
|
+
canExecute: computed(() => store.reportDefinition() !== null && !store.isLoading() && !store.isExecuting()),
|
1309
|
+
//#endregion
|
1310
|
+
})), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService), executeCommand = inject(AXMReportExecuteCommand)) => ({
|
1311
|
+
//#region ---- Report Loading ----
|
1312
|
+
async loadReport(reportId) {
|
1313
|
+
patchState(store, {
|
1314
|
+
status: AXPPageStatus.Processing,
|
1315
|
+
error: null
|
1316
|
+
});
|
1317
|
+
try {
|
1318
|
+
const report = await reportDefinitionService.getReportById(reportId);
|
1319
|
+
if (report) {
|
1320
|
+
// Configure parameter widgets with proper paths
|
1321
|
+
report.parameterGroups.forEach(group => {
|
1322
|
+
group.parameters.forEach(param => {
|
1323
|
+
param.widget.path = param.path;
|
1324
|
+
});
|
1325
|
+
});
|
1326
|
+
// Load categories path for breadcrumbs
|
1327
|
+
const categoriesPath = await reportDefinitionService.getCategoriesPathByReportId(reportId);
|
1328
|
+
patchState(store, {
|
1329
|
+
reportDefinition: report,
|
1330
|
+
categoriesPath: categoriesPath || [],
|
1331
|
+
reportData: [],
|
1332
|
+
totalRecords: 0,
|
1333
|
+
currentPage: 1,
|
1334
|
+
filterContext: {}, // Reset context when loading new report
|
1335
|
+
previousFilterContext: {}
|
1336
|
+
});
|
1337
|
+
}
|
1338
|
+
}
|
1339
|
+
catch (error) {
|
1340
|
+
patchState(store, {
|
1341
|
+
error: 'Failed to load report definition'
|
1342
|
+
});
|
1343
|
+
console.error('Error loading report:', error);
|
1344
|
+
}
|
1345
|
+
finally {
|
1346
|
+
patchState(store, {
|
1347
|
+
status: AXPPageStatus.Idle
|
1348
|
+
});
|
1349
|
+
}
|
1350
|
+
},
|
1351
|
+
//#endregion
|
1352
|
+
//#region ---- Data Execution ----
|
1353
|
+
async executeReport() {
|
1354
|
+
const report = store.reportDefinition();
|
1355
|
+
if (!report)
|
1356
|
+
return;
|
1357
|
+
patchState(store, {
|
1358
|
+
status: AXPPageStatus.Submitting,
|
1359
|
+
error: null
|
1360
|
+
});
|
1361
|
+
try {
|
1362
|
+
const result = await executeCommand.execute({
|
1363
|
+
reportId: report.id,
|
1364
|
+
parameters: store.filterContext(),
|
1365
|
+
page: store.currentPage(),
|
1366
|
+
pageSize: store.pageSize()
|
1367
|
+
});
|
1368
|
+
patchState(store, {
|
1369
|
+
reportData: result.data || [],
|
1370
|
+
totalRecords: result.total || 0,
|
1371
|
+
previousFilterContext: { ...store.filterContext() }
|
1372
|
+
});
|
1373
|
+
}
|
1374
|
+
catch (error) {
|
1375
|
+
patchState(store, {
|
1376
|
+
error: 'Failed to execute report'
|
1377
|
+
});
|
1378
|
+
console.error('Error executing report:', error);
|
1379
|
+
}
|
1380
|
+
finally {
|
1381
|
+
patchState(store, {
|
1382
|
+
status: AXPPageStatus.Idle
|
1383
|
+
});
|
1384
|
+
}
|
1385
|
+
},
|
1386
|
+
//#endregion
|
1387
|
+
//#region ---- Filter Management ----
|
1388
|
+
updateFilterContext(context) {
|
1389
|
+
// Replace context completely instead of merging to fix binding issues
|
1390
|
+
patchState(store, {
|
1391
|
+
filterContext: { ...context }
|
1392
|
+
});
|
1393
|
+
},
|
1394
|
+
clearFilters() {
|
1395
|
+
patchState(store, {
|
1396
|
+
filterContext: {},
|
1397
|
+
reportData: [],
|
1398
|
+
totalRecords: 0,
|
1399
|
+
currentPage: 1
|
1400
|
+
});
|
1401
|
+
},
|
1402
|
+
resetFilters() {
|
1403
|
+
patchState(store, {
|
1404
|
+
filterContext: { ...store.previousFilterContext() }
|
1405
|
+
});
|
1406
|
+
},
|
1407
|
+
//#endregion
|
1408
|
+
//#region ---- Pagination ----
|
1409
|
+
changePage(page) {
|
1410
|
+
patchState(store, {
|
1411
|
+
currentPage: page
|
1412
|
+
});
|
1413
|
+
// Call executeReport method
|
1414
|
+
this.executeReport();
|
1415
|
+
},
|
1416
|
+
changePageSize(pageSize) {
|
1417
|
+
patchState(store, {
|
1418
|
+
pageSize: pageSize,
|
1419
|
+
currentPage: 1
|
1420
|
+
});
|
1421
|
+
// Call executeReport method
|
1422
|
+
this.executeReport();
|
1423
|
+
},
|
1424
|
+
//#endregion
|
1425
|
+
//#region ---- Utility Methods ----
|
1426
|
+
refresh() {
|
1427
|
+
// Call executeReport method
|
1428
|
+
this.executeReport();
|
1429
|
+
},
|
1430
|
+
clearError() {
|
1431
|
+
patchState(store, {
|
1432
|
+
error: null
|
1433
|
+
});
|
1434
|
+
},
|
1435
|
+
reset() {
|
1436
|
+
patchState(store, {
|
1437
|
+
reportDefinition: null,
|
1438
|
+
reportData: [],
|
1439
|
+
filterContext: {},
|
1440
|
+
previousFilterContext: {},
|
1441
|
+
categoriesPath: [],
|
1442
|
+
status: AXPPageStatus.Idle,
|
1443
|
+
totalRecords: 0,
|
1444
|
+
currentPage: 1,
|
1445
|
+
error: null
|
1446
|
+
});
|
1447
|
+
}
|
1448
|
+
//#endregion
|
1449
|
+
})), withHooks((store, translationService = inject(AXTranslationService), localeService = inject(AXLocaleService)) => ({
|
1450
|
+
async onInit() {
|
1451
|
+
// Subscribe to language and locale changes
|
1452
|
+
translationService.langChanges$.subscribe(() => {
|
1453
|
+
// Handle language change if needed
|
1454
|
+
});
|
1455
|
+
localeService.profileChanged$.subscribe(() => {
|
1456
|
+
// Handle locale change if needed
|
1457
|
+
});
|
1458
|
+
},
|
1459
|
+
onDestroy() {
|
1460
|
+
// Cleanup if needed
|
1461
|
+
}
|
1462
|
+
})));
|
1463
|
+
|
1464
|
+
class AXPReportTableViewComponent {
|
1465
|
+
constructor() {
|
1466
|
+
//#region ---- Inputs ----
|
1467
|
+
this.dataSource = input.required();
|
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);
|
1474
|
+
//#endregion
|
1475
|
+
//#region ---- Outputs ----
|
1476
|
+
this.rowClick = output();
|
1477
|
+
this.actionClick = output();
|
1478
|
+
}
|
1479
|
+
//#endregion
|
1480
|
+
//#region ---- Event Handlers ----
|
1481
|
+
handleRowClick(event) {
|
1482
|
+
this.rowClick.emit(event);
|
1483
|
+
}
|
1484
|
+
//#endregion
|
1485
|
+
//#region ---- Utility Methods ----
|
1486
|
+
getStatusColor(status) {
|
1487
|
+
switch (status?.toLowerCase()) {
|
1488
|
+
case 'active': return 'success';
|
1489
|
+
case 'pending': return 'warning';
|
1490
|
+
case 'completed': return 'primary';
|
1491
|
+
case 'inactive': return 'danger';
|
1492
|
+
default: return 'secondary';
|
1493
|
+
}
|
1494
|
+
}
|
1495
|
+
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", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, hasData: { classPropertyName: "hasData", publicName: "hasData", isSignal: true, isRequired: false, transformFunction: null }, paginationEnabled: { classPropertyName: "paginationEnabled", publicName: "paginationEnabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowClick: "rowClick", actionClick: "actionClick" }, ngImport: i0, template: "<div class=\"axp-report-table-view\" *translate=\"let t\">\n @if (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 (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 {{ errorMessage() || (t('@report-management:features.report-viewer.error') | async) }}\n </div>\n </div>\n </div>\n } @else if (!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 <div class=\"__table-container\">\n <ax-data-table\n [dataSource]=\"dataSource()\"\n [paging]=\"paginationEnabled()\"\n [fetchDataMode]=\"'manual'\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n class=\"__data-table\"\n >\n <!-- Dynamic columns based on configuration -->\n @for (column of columns(); track column.field) {\n @if (column.visible) {\n <ax-text-column [dataField]=\"column.field\" [caption]=\"column.title\" [width]=\"column.width\">\n </ax-text-column>\n }\n }\n </ax-data-table>\n </div>\n }\n</div>\n", styles: [".axp-report-table-view{display:flex;height:100%;width:100%;flex-direction:column}.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}.axp-report-table-view .__table-container{display:flex;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-report-table-view .__table-container .__data-table{height:100%;width:100%}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table{display:flex;height:100%;flex-direction:column}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-data-table-container{flex:1 1 0%;overflow:auto}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-data-table-content{height:100%;overflow:auto}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-table{min-height:0px}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-table-body{overflow:auto}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table-footer{flex-shrink:0;border-top-width:1px}\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 }); }
|
1497
|
+
}
|
1498
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportTableViewComponent, decorators: [{
|
1499
|
+
type: Component,
|
1500
|
+
args: [{ selector: 'axp-report-table-view', standalone: true, imports: [
|
1501
|
+
CommonModule,
|
1502
|
+
AXDataTableModule,
|
1503
|
+
AXLoadingModule,
|
1504
|
+
AXDecoratorModule,
|
1505
|
+
AXTranslationModule,
|
1506
|
+
AXPLayoutBuilderModule
|
1507
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"axp-report-table-view\" *translate=\"let t\">\n @if (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 (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 {{ errorMessage() || (t('@report-management:features.report-viewer.error') | async) }}\n </div>\n </div>\n </div>\n } @else if (!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 <div class=\"__table-container\">\n <ax-data-table\n [dataSource]=\"dataSource()\"\n [paging]=\"paginationEnabled()\"\n [fetchDataMode]=\"'manual'\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n class=\"__data-table\"\n >\n <!-- Dynamic columns based on configuration -->\n @for (column of columns(); track column.field) {\n @if (column.visible) {\n <ax-text-column [dataField]=\"column.field\" [caption]=\"column.title\" [width]=\"column.width\">\n </ax-text-column>\n }\n }\n </ax-data-table>\n </div>\n }\n</div>\n", styles: [".axp-report-table-view{display:flex;height:100%;width:100%;flex-direction:column}.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}.axp-report-table-view .__table-container{display:flex;flex:1 1 0%;flex-direction:column;overflow:hidden}.axp-report-table-view .__table-container .__data-table{height:100%;width:100%}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table{display:flex;height:100%;flex-direction:column}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-data-table-container{flex:1 1 0%;overflow:auto}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-data-table-content{height:100%;overflow:auto}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-table{min-height:0px}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table .ax-table-body{overflow:auto}.axp-report-table-view .__table-container .__data-table ::ng-deep .ax-data-table-footer{flex-shrink:0;border-top-width:1px}\n"] }]
|
1508
|
+
}] });
|
1509
|
+
|
1510
|
+
class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {
|
1511
|
+
constructor() {
|
1512
|
+
super(...arguments);
|
1513
|
+
//#region ---- Dependencies ----
|
1514
|
+
this.layoutService = inject(AXPLayoutThemeService);
|
1515
|
+
this.route = inject(ActivatedRoute);
|
1516
|
+
this.router = inject(Router);
|
1517
|
+
this.reportDefinitionService = inject(AXPReportDefinitionService);
|
1518
|
+
this.unsubscriber = inject(AXUnsubscriber);
|
1519
|
+
//#endregion
|
1520
|
+
//#region ---- Inputs ----
|
1521
|
+
this.reportId = input();
|
1522
|
+
this.reportParameters = input({});
|
1523
|
+
//#endregion
|
1524
|
+
//#region ---- Outputs ----
|
1525
|
+
this.reportExecuted = output();
|
1526
|
+
//#endregion
|
1527
|
+
//#region ---- ViewChildren ----
|
1528
|
+
this.filtersForm = viewChild('filtersForm');
|
1529
|
+
this.mobileFiltersForm = viewChild('mobileFiltersForm');
|
1530
|
+
//#endregion
|
1531
|
+
//#region ---- ViewModel ----
|
1532
|
+
this.vm = new AXPReportViewerViewModel();
|
1533
|
+
//#endregion
|
1534
|
+
//#region ---- Computed Properties ----
|
1535
|
+
this.showFiltersPanel = () => this.layoutService.isLarge();
|
1536
|
+
this.baseRoutes = [this.sessionService.application?.name, 'report-management'];
|
1537
|
+
//#endregion
|
1538
|
+
//#region ---- Layout Configurations ----
|
1539
|
+
this.defaultLayout = () => ({
|
1540
|
+
positions: {
|
1541
|
+
default: { colSpan: 12 },
|
1542
|
+
md: { colSpan: 6 },
|
1543
|
+
lg: { colSpan: 12 }
|
1544
|
+
}
|
1545
|
+
});
|
1546
|
+
this.compactLayout = () => ({
|
1547
|
+
positions: {
|
1548
|
+
default: { colSpan: 12 },
|
1549
|
+
sm: { colSpan: 6 },
|
1550
|
+
md: { colSpan: 4 },
|
1551
|
+
lg: { colSpan: 3 }
|
1552
|
+
}
|
1553
|
+
});
|
1554
|
+
}
|
1555
|
+
//#endregion
|
1556
|
+
//#region ---- Lifecycle ----
|
1557
|
+
async ngOnInit() {
|
1558
|
+
await super.ngOnInit();
|
1559
|
+
// Load report from route parameter or input
|
1560
|
+
const reportId = this.route.snapshot.paramMap.get('reportId') ||
|
1561
|
+
this.route.snapshot.queryParamMap.get('reportId') ||
|
1562
|
+
this.reportId();
|
1563
|
+
if (reportId) {
|
1564
|
+
await this.vm.loadReport(reportId);
|
1565
|
+
// Extract all query parameters except reportId as initial parameters
|
1566
|
+
const queryParams = this.route.snapshot.queryParams;
|
1567
|
+
const initialParams = { ...queryParams };
|
1568
|
+
delete initialParams['reportId']; // Remove reportId from parameters
|
1569
|
+
// Merge with component input parameters
|
1570
|
+
const allParams = { ...initialParams, ...this.reportParameters() };
|
1571
|
+
if (Object.keys(allParams).length > 0) {
|
1572
|
+
console.log('Applying initial parameters:', allParams);
|
1573
|
+
this.vm.updateFilterContext(allParams);
|
1574
|
+
// Auto-execute if parameters are provided
|
1575
|
+
setTimeout(async () => {
|
1576
|
+
await this.vm.executeReport();
|
1577
|
+
}, 500); // Small delay to ensure form is ready
|
1578
|
+
}
|
1579
|
+
}
|
1580
|
+
}
|
1581
|
+
//#endregion
|
1582
|
+
//#region ---- Event Handlers ----
|
1583
|
+
handleFiltersChange(event) {
|
1584
|
+
this.vm.updateFilterContext(event.data);
|
1585
|
+
}
|
1586
|
+
handleFiltersInitiated(event) {
|
1587
|
+
this.vm.updateFilterContext(event.data);
|
1588
|
+
}
|
1589
|
+
async handleExecuteReport() {
|
1590
|
+
console.log('Executing report with context:', this.vm.filterContext());
|
1591
|
+
await this.vm.executeReport();
|
1592
|
+
this.reportExecuted.emit(this.vm.reportData());
|
1593
|
+
}
|
1594
|
+
handleRefresh() {
|
1595
|
+
this.vm.refresh();
|
1596
|
+
}
|
1597
|
+
handleClearFilters() {
|
1598
|
+
this.vm.clearFilters();
|
1599
|
+
// Reset form if available
|
1600
|
+
const form = this.filtersForm() || this.mobileFiltersForm();
|
1601
|
+
if (form) {
|
1602
|
+
form.resetErrors();
|
1603
|
+
}
|
1604
|
+
}
|
1605
|
+
handleRowClick(rowData) {
|
1606
|
+
// Handle row click - can be extended for row details
|
1607
|
+
console.log('Row clicked:', rowData);
|
1608
|
+
}
|
1609
|
+
handleActionClick(event) {
|
1610
|
+
// Handle action click - can be extended for row actions
|
1611
|
+
console.log('Action clicked:', event);
|
1612
|
+
}
|
1613
|
+
//#endregion
|
1614
|
+
//#region ---- Page Configuration Overrides ----
|
1615
|
+
async getPageBreadcrumbs() {
|
1616
|
+
const breadcrumbs = [
|
1617
|
+
{
|
1618
|
+
name: 'reports',
|
1619
|
+
title: await this.translateService.translateAsync('@report-management:features.report-runner.menu-title'),
|
1620
|
+
command: {
|
1621
|
+
name: 'navigate-to-reports',
|
1622
|
+
},
|
1623
|
+
}
|
1624
|
+
];
|
1625
|
+
// Add categories path
|
1626
|
+
const categoriesPath = this.vm.categoriesPath();
|
1627
|
+
if (categoriesPath && categoriesPath.length > 0) {
|
1628
|
+
let urlParts = [...this.baseRoutes, 'reports'];
|
1629
|
+
for (const category of categoriesPath) {
|
1630
|
+
urlParts.push(category.id);
|
1631
|
+
breadcrumbs.push({
|
1632
|
+
name: category.id,
|
1633
|
+
title: category.title,
|
1634
|
+
command: {
|
1635
|
+
name: 'navigate-to-category',
|
1636
|
+
options: {
|
1637
|
+
path: [...urlParts]
|
1638
|
+
},
|
1639
|
+
},
|
1640
|
+
});
|
1641
|
+
}
|
1642
|
+
}
|
1643
|
+
// Add report title as final breadcrumb
|
1644
|
+
const reportDefinition = this.vm.reportDefinition();
|
1645
|
+
if (reportDefinition) {
|
1646
|
+
breadcrumbs.push({
|
1647
|
+
name: 'report-viewer',
|
1648
|
+
title: reportDefinition.title,
|
1649
|
+
});
|
1650
|
+
}
|
1651
|
+
return breadcrumbs;
|
1652
|
+
}
|
1653
|
+
async getPageTitle() {
|
1654
|
+
const reportDefinition = this.vm.reportDefinition();
|
1655
|
+
if (reportDefinition) {
|
1656
|
+
return reportDefinition.title;
|
1657
|
+
}
|
1658
|
+
return await this.translateService.translateAsync('@report-management:features.report-viewer.title');
|
1659
|
+
}
|
1660
|
+
async getPageDescription() {
|
1661
|
+
const reportDefinition = this.vm.reportDefinition();
|
1662
|
+
return reportDefinition?.description || null;
|
1663
|
+
}
|
1664
|
+
async getBackButton() {
|
1665
|
+
const categoriesPath = this.vm.categoriesPath();
|
1666
|
+
if (!categoriesPath || categoriesPath.length === 0) {
|
1667
|
+
// If no categories path, go back to reports root
|
1668
|
+
return {
|
1669
|
+
title: await this.translateService.translateAsync('@report-management:features.report-runner.menu-title'),
|
1670
|
+
};
|
1671
|
+
}
|
1672
|
+
if (categoriesPath.length === 1) {
|
1673
|
+
// If only one category, go back to reports root
|
1674
|
+
return {
|
1675
|
+
title: await this.translateService.translateAsync('@report-management:features.report-runner.menu-title'),
|
1676
|
+
};
|
1677
|
+
}
|
1678
|
+
// Go back to parent category
|
1679
|
+
const parentCategory = categoriesPath[categoriesPath.length - 1];
|
1680
|
+
return {
|
1681
|
+
title: parentCategory.title,
|
1682
|
+
};
|
1683
|
+
}
|
1684
|
+
async onBackButtonClick() {
|
1685
|
+
const categoriesPath = this.vm.categoriesPath();
|
1686
|
+
if (!categoriesPath || categoriesPath.length <= 1) {
|
1687
|
+
// Navigate back to reports root
|
1688
|
+
await this.router.navigate([...this.baseRoutes, 'reports']);
|
1689
|
+
}
|
1690
|
+
else {
|
1691
|
+
// Navigate to parent category
|
1692
|
+
let urlParts = [...this.baseRoutes, 'reports'];
|
1693
|
+
for (const cat of categoriesPath) {
|
1694
|
+
urlParts.push(cat.id);
|
1695
|
+
}
|
1696
|
+
await this.router.navigate(urlParts);
|
1697
|
+
}
|
1698
|
+
}
|
1699
|
+
async getPrimaryMenuItems() {
|
1700
|
+
// No primary menu items since execute button is in footer
|
1701
|
+
return [];
|
1702
|
+
}
|
1703
|
+
async getSecondaryMenuItems() {
|
1704
|
+
const reportDefinition = this.vm.reportDefinition();
|
1705
|
+
if (!reportDefinition) {
|
1706
|
+
return [];
|
1707
|
+
}
|
1708
|
+
return [
|
1709
|
+
{
|
1710
|
+
title: await this.translateService.translateAsync('@report-management:features.report-viewer.actions.refresh'),
|
1711
|
+
icon: 'fa-light fa-refresh',
|
1712
|
+
color: 'secondary',
|
1713
|
+
disabled: this.vm.isLoading() || this.vm.isExecuting(),
|
1714
|
+
command: {
|
1715
|
+
name: 'refresh-report',
|
1716
|
+
},
|
1717
|
+
},
|
1718
|
+
{
|
1719
|
+
title: await this.translateService.translateAsync('@report-management:features.report-viewer.actions.clear-filters'),
|
1720
|
+
icon: 'fa-light fa-filter-slash',
|
1721
|
+
color: 'warning',
|
1722
|
+
command: {
|
1723
|
+
name: 'clear-filters',
|
1724
|
+
},
|
1725
|
+
},
|
1726
|
+
];
|
1727
|
+
}
|
1728
|
+
async execute(command) {
|
1729
|
+
switch (command.name) {
|
1730
|
+
case 'execute-report':
|
1731
|
+
await this.handleExecuteReport();
|
1732
|
+
break;
|
1733
|
+
case 'refresh-report':
|
1734
|
+
this.handleRefresh();
|
1735
|
+
break;
|
1736
|
+
case 'clear-filters':
|
1737
|
+
this.handleClearFilters();
|
1738
|
+
break;
|
1739
|
+
case 'navigate-to-reports':
|
1740
|
+
await this.router.navigate([...this.baseRoutes, 'reports']);
|
1741
|
+
break;
|
1742
|
+
case 'navigate-to-category':
|
1743
|
+
const path = command.options?.['path'];
|
1744
|
+
if (path) {
|
1745
|
+
await this.router.navigate(path);
|
1746
|
+
}
|
1747
|
+
break;
|
1748
|
+
default:
|
1749
|
+
console.warn(`Unknown command: ${command.name}`);
|
1750
|
+
break;
|
1751
|
+
}
|
1752
|
+
}
|
1753
|
+
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 } }, outputs: { reportExecuted: "reportExecuted" }, host: { classAttribute: "axp-report-viewer-page" }, providers: [
|
1755
|
+
AXUnsubscriber,
|
1756
|
+
AXMReportExecuteCommand,
|
1757
|
+
{
|
1758
|
+
provide: AXPPageLayoutBase,
|
1759
|
+
useExisting: AXPReportViewerPageComponent,
|
1760
|
+
},
|
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 }); }
|
1762
|
+
}
|
1763
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportViewerPageComponent, decorators: [{
|
1764
|
+
type: Component,
|
1765
|
+
args: [{ selector: 'axp-report-viewer-page', standalone: true, imports: [
|
1766
|
+
CommonModule,
|
1767
|
+
AXButtonModule,
|
1768
|
+
AXDecoratorModule,
|
1769
|
+
AXLoadingModule,
|
1770
|
+
AXTranslationModule,
|
1771
|
+
AXPDynamicFormComponent,
|
1772
|
+
AXPPageLayoutComponent,
|
1773
|
+
AXPThemeLayoutStartSideComponent,
|
1774
|
+
AXPThemeLayoutHeaderComponent,
|
1775
|
+
AXPThemeLayoutBlockComponent,
|
1776
|
+
AXPReportTableViewComponent
|
1777
|
+
], providers: [
|
1778
|
+
AXUnsubscriber,
|
1779
|
+
AXMReportExecuteCommand,
|
1780
|
+
{
|
1781
|
+
provide: AXPPageLayoutBase,
|
1782
|
+
useExisting: AXPReportViewerPageComponent,
|
1783
|
+
},
|
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 <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"] }]
|
1785
|
+
}] });
|
1786
|
+
|
1787
|
+
var reportViewerPage_component = /*#__PURE__*/Object.freeze({
|
1788
|
+
__proto__: null,
|
1789
|
+
AXPReportViewerPageComponent: AXPReportViewerPageComponent
|
1790
|
+
});
|
1791
|
+
|
1130
1792
|
/**
|
1131
1793
|
* Generated bundle index. Do not edit.
|
1132
1794
|
*/
|
1133
1795
|
|
1134
|
-
export { AXMReportManagementModule, RootConfig };
|
1796
|
+
export { AXMReportExecuteCommand, AXMReportManagementModule, AXPReportTableViewComponent, AXPReportViewerPageComponent, AXPReportViewerViewModel, RootConfig };
|
1135
1797
|
//# sourceMappingURL=acorex-modules-report-management.mjs.map
|