@acorex-platform/module-report-management-client 0.0.15

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/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@acorex-platform/module-report-management-client",
3
+ "version": "0.0.15",
4
+ "sideEffects": false,
5
+ "peerDependencies": {
6
+ "@angular/common": "^21.0.0",
7
+ "@angular/core": "^21.0.0"
8
+ },
9
+ "dependencies": {
10
+ "tslib": "^2.3.0"
11
+ },
12
+ "module": "fesm2022/acorex-platform-module-report-management-client.mjs",
13
+ "typings": "types/acorex-platform-module-report-management-client.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./types/acorex-platform-module-report-management-client.d.ts",
20
+ "default": "./fesm2022/acorex-platform-module-report-management-client.mjs"
21
+ },
22
+ "./contracts": {
23
+ "types": "./types/acorex-platform-module-report-management-client-contracts.d.ts",
24
+ "default": "./fesm2022/acorex-platform-module-report-management-client-contracts.mjs"
25
+ }
26
+ },
27
+ "type": "module"
28
+ }
@@ -0,0 +1,554 @@
1
+ import { AXPWidgetColumnNode } from '@acorex-platform/framework-shared/widget-core';
2
+ import { AXPCommand } from '@acorex-platform/framework-shared/runtime';
3
+ import { AXPQuerySort, AXPEntity } from '@acorex-platform/framework-shared/entity';
4
+ import { AXPFilterClause, AXPActionMenuItem, AXPSystemActionType, AXPCategoryEntity, AXPWidgetNode, AXPExportOptions } from '@acorex-platform/framework-shared/core';
5
+
6
+ declare const AXPReportManagementFeatureKeys: {
7
+ readonly ReportBuilder: "ReportManagement:Feature:ReportBuilder";
8
+ readonly SavedReports: "ReportManagement:Feature:SavedReports";
9
+ readonly ScheduledReports: "ReportManagement:Feature:ScheduledReports";
10
+ readonly BackgroundReports: "ReportManagement:Feature:BackgroundReports";
11
+ };
12
+
13
+ declare const AXPReportManagementMenuKeys: {
14
+ readonly Root: "report-management:menu";
15
+ readonly Reports: "report-management:menu:reports";
16
+ readonly Categories: "report-management:menu:categories";
17
+ readonly DataSets: "report-management:menu:data-sets";
18
+ };
19
+
20
+ declare const AXMPermissionsKeys: {
21
+ ReportManagement: {
22
+ Management: string;
23
+ Report: {
24
+ Management: string;
25
+ View: string;
26
+ Create: string;
27
+ Update: string;
28
+ Delete: string;
29
+ };
30
+ Category: {
31
+ Management: string;
32
+ View: string;
33
+ Create: string;
34
+ Update: string;
35
+ Delete: string;
36
+ };
37
+ };
38
+ };
39
+
40
+ declare const RootConfig: {
41
+ readonly config: {
42
+ i18n: string;
43
+ module: string;
44
+ };
45
+ readonly module: {
46
+ readonly route: "report-management";
47
+ readonly name: string;
48
+ readonly title: `@${string}:module.title`;
49
+ readonly icon: "fa-light fa-chart-bar";
50
+ };
51
+ readonly entities: {
52
+ readonly dataSet: {
53
+ readonly name: "DataSet";
54
+ readonly title: `t("dataSet", { scope: "${string}" })`;
55
+ readonly titlePlural: `t("dataSetPlural", { scope: "${string}" })`;
56
+ readonly icon: "fa-light fa-default";
57
+ };
58
+ readonly category: {
59
+ readonly name: "Category";
60
+ readonly fullName: `${string}.Category`;
61
+ readonly title: `@${string}:reports.entities.category.title`;
62
+ readonly titlePlural: `@${string}:reports.entities.category.plural`;
63
+ readonly icon: "fa-light fa-folder";
64
+ };
65
+ readonly report: {
66
+ readonly name: "Report";
67
+ readonly fullName: `${string}.Report`;
68
+ readonly title: `@${string}:reports.entities.report.title`;
69
+ readonly titlePlural: `@${string}:reports.entities.report.plural`;
70
+ readonly icon: "fa-light fa-file-chart-pie";
71
+ };
72
+ };
73
+ };
74
+
75
+ type AXPReportLayoutType = 'table' | 'chart' | 'cards' | 'custom' | 'pdf';
76
+ /**
77
+ * Report Category - Extends AXPCategoryEntity for consistency and performance
78
+ *
79
+ * Inherited properties from AXPCategoryEntity:
80
+ * - id: string - Unique identifier
81
+ * - title: string - Display name
82
+ * - description?: string - Category description
83
+ * - parentId?: string - Parent category ID
84
+ * - childrenCount: number - Direct child categories count (enables lazy loading)
85
+ * - itemsCount?: number - Direct reports count (replaces hasReport boolean)
86
+ * - totalChildrenCount?: number - Total nested categories (optional, for analytics)
87
+ * - totalItemsCount?: number - Total reports in tree (optional, for analytics)
88
+ *
89
+ * Performance benefits:
90
+ * - Lazy loading support (childrenCount > 0 shows expand icon)
91
+ * - Report count display (itemsCount shows "5 reports" badge)
92
+ * - Efficient queries (no need to query to know if expandable)
93
+ */
94
+ interface AXPReportCategory extends AXPCategoryEntity {
95
+ }
96
+ interface AXPReportDefinition {
97
+ id: string;
98
+ title: string;
99
+ description?: string;
100
+ categoryIds: string[];
101
+ parameterGroups: AXPReportParameterGroup[];
102
+ permissions?: string[];
103
+ layouts: AXPReportLayoutDefinition[];
104
+ defaultLayoutId: string;
105
+ }
106
+ type AXPReportLayoutAction = AXPActionMenuItem & {
107
+ priority: 'primary' | 'secondary';
108
+ };
109
+ /**
110
+ * Layout Definition - Associates a layout with metadata
111
+ */
112
+ interface AXPReportLayoutDefinition {
113
+ id: string;
114
+ title: string;
115
+ description?: string;
116
+ icon?: string;
117
+ layout: AXPReportLayout;
118
+ dataSource?: AXPReportDataSource;
119
+ isDefault?: boolean;
120
+ actions?: AXPReportLayoutAction[];
121
+ export?: AXPExportOptions;
122
+ }
123
+ interface AXPReportParameterGroup {
124
+ name: string;
125
+ title: string;
126
+ description?: string;
127
+ parameters: AXPReportParameter[];
128
+ }
129
+ interface AXPReportParameter {
130
+ path: string;
131
+ title: string;
132
+ description?: string;
133
+ widget: AXPWidgetNode;
134
+ }
135
+ type AXPReportDataSource = AXPQueryDataSource | AXPCustomDataSource | AXPAggregatedDataSource | AXPTransformedDataSource;
136
+ /**
137
+ * Query Data Source - Used for executing predefined queries (AXPQuery)
138
+ */
139
+ interface AXPQueryDataSource {
140
+ type: 'query';
141
+ name: string;
142
+ description?: string;
143
+ inputs?: AXPReportParameterBinding[];
144
+ sortFields?: AXPQuerySort[];
145
+ pagination?: boolean;
146
+ }
147
+ /**
148
+ * Custom Data Source - Used for fetching data from custom providers like REST APIs or external services
149
+ */
150
+ interface AXPCustomDataSource {
151
+ type: 'custom';
152
+ provider: string;
153
+ description?: string;
154
+ inputs?: AXPReportParameterBinding[];
155
+ options?: {
156
+ [key: string]: any;
157
+ };
158
+ }
159
+ /**
160
+ * Parameter Binding - Maps report-level parameters to actual query/command input structure
161
+ */
162
+ interface AXPReportParameterBinding {
163
+ parameterKey: string;
164
+ bindTo: string;
165
+ }
166
+ /**
167
+ * Aggregated Data Source - Used for pre-aggregated data optimized for charts
168
+ */
169
+ interface AXPAggregatedDataSource {
170
+ type: 'aggregated';
171
+ baseQuery: string;
172
+ description?: string;
173
+ groupBy: string[];
174
+ aggregations: AXPAggregation[];
175
+ inputs?: AXPReportParameterBinding[];
176
+ }
177
+ /**
178
+ * Transformed Data Source - Applies transformations to existing data sources
179
+ */
180
+ interface AXPTransformedDataSource {
181
+ type: 'transformed';
182
+ baseDataSource: AXPReportDataSource;
183
+ description?: string;
184
+ transformations: AXPDataTransformation[];
185
+ inputs?: AXPReportParameterBinding[];
186
+ }
187
+ /**
188
+ * Aggregation operation for aggregated data sources
189
+ */
190
+ interface AXPAggregation {
191
+ field: string;
192
+ operation: 'sum' | 'avg' | 'count' | 'min' | 'max' | 'distinct';
193
+ alias?: string;
194
+ }
195
+ /**
196
+ * Data transformation operation
197
+ */
198
+ interface AXPDataTransformation {
199
+ type: 'filter' | 'sort' | 'group' | 'pivot' | 'format';
200
+ config: Record<string, any>;
201
+ }
202
+ /**
203
+ * Drill-down target for a grouped report row.
204
+ * When reportId is omitted, the current report is used.
205
+ */
206
+ interface AXPReportDrillDownConfig {
207
+ reportId?: string;
208
+ layoutId?: string;
209
+ title?: string;
210
+ parameters?: Record<string, string>;
211
+ }
212
+ /**
213
+ * Declares how a summary report is grouped and which detail view opens on drill-down.
214
+ * Multiple definitions allow alternative drill paths (e.g. by brand vs by category).
215
+ */
216
+ interface AXPReportGroupByDefinition {
217
+ fields: string[];
218
+ displayField?: string;
219
+ /** When true (default), `displayField` renders as a link instead of a row command column. */
220
+ linkDisplay?: boolean;
221
+ title?: string;
222
+ default?: boolean;
223
+ priority?: 'primary' | 'secondary';
224
+ drillDown: AXPReportDrillDownConfig;
225
+ }
226
+ type AXPReportLayout = AXPReportTableLayout | AXPReportChartLayout | AXPReportPdfLayout;
227
+ /**
228
+ * Table Layout - Displays data in tabular format
229
+ */
230
+ interface AXPReportTableLayoutRowAction extends AXPActionMenuItem {
231
+ priority: 'primary' | 'secondary';
232
+ type: AXPSystemActionType | string;
233
+ default?: boolean;
234
+ }
235
+ interface AXPReportTableLayout {
236
+ type: 'table';
237
+ columns: AXPReportColumn[];
238
+ actions?: AXPReportTableLayoutRowAction[];
239
+ options?: AXPTableOptions;
240
+ groupBy?: AXPReportGroupByDefinition[];
241
+ conditionalFormatting?: AXPConditionalFormatRule[];
242
+ summary?: AXPReportSummaryOptions[];
243
+ header?: AXPReportHeaderFooter;
244
+ footer?: AXPReportHeaderFooter;
245
+ }
246
+ interface AXPTableOptions {
247
+ pagination?: boolean;
248
+ stickyHeader?: boolean;
249
+ stripedRows?: boolean;
250
+ sorting?: AXPQuerySort[];
251
+ selectable?: {
252
+ mode: 'single' | 'multiple' | 'none';
253
+ };
254
+ }
255
+ /**
256
+ * Chart Layout - Displays data in various chart formats
257
+ */
258
+ interface AXPReportChartLayout {
259
+ type: 'chart';
260
+ options: AXPReportChartOptions;
261
+ header?: AXPReportHeaderFooter;
262
+ footer?: AXPReportHeaderFooter;
263
+ }
264
+ interface AXPReportChartOptions {
265
+ chartType: 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'radar' | 'mixed';
266
+ dataMapping: AXPChartDataMapping;
267
+ styling?: AXPChartStyling;
268
+ interactivity?: AXPChartInteractivity;
269
+ }
270
+ /**
271
+ * Chart Data Mapping Configuration
272
+ */
273
+ interface AXPChartDataMapping {
274
+ xField: string;
275
+ yFields: string | string[];
276
+ groupBy?: string;
277
+ seriesField?: string;
278
+ sizeField?: string;
279
+ colorField?: string;
280
+ labelField?: string;
281
+ aggregation?: {
282
+ method: 'sum' | 'avg' | 'count' | 'min' | 'max';
283
+ field: string;
284
+ };
285
+ }
286
+ /**
287
+ * Chart Visual Styling Configuration
288
+ */
289
+ interface AXPChartStyling {
290
+ colorScheme?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'custom';
291
+ customColors?: string[];
292
+ gridLines?: boolean;
293
+ legend?: {
294
+ show: boolean;
295
+ position: 'top' | 'bottom' | 'left' | 'right';
296
+ };
297
+ xAxis?: AXPChartAxisConfig;
298
+ yAxis?: AXPChartAxisConfig;
299
+ animation?: {
300
+ enabled: boolean;
301
+ duration?: number;
302
+ };
303
+ chartSpecific?: {
304
+ bar?: {
305
+ orientation: 'vertical' | 'horizontal';
306
+ mode: 'grouped' | 'stacked';
307
+ barWidth?: number;
308
+ };
309
+ line?: {
310
+ style: 'straight' | 'curved' | 'stepped';
311
+ showPoints?: boolean;
312
+ tension?: number;
313
+ };
314
+ area?: {
315
+ mode: 'normal' | 'stacked' | 'percentage';
316
+ opacity?: number;
317
+ };
318
+ pie?: {
319
+ startAngle?: number;
320
+ innerRadius?: number;
321
+ showLabels?: boolean;
322
+ };
323
+ };
324
+ }
325
+ /**
326
+ * Chart Axis Configuration
327
+ */
328
+ interface AXPChartAxisConfig {
329
+ title?: string;
330
+ show?: boolean;
331
+ type?: 'linear' | 'logarithmic' | 'datetime' | 'category';
332
+ min?: number | string;
333
+ max?: number | string;
334
+ format?: string;
335
+ gridLines?: boolean;
336
+ tickInterval?: number;
337
+ }
338
+ /**
339
+ * Chart Interactivity Configuration
340
+ */
341
+ interface AXPChartInteractivity {
342
+ zoom?: {
343
+ enabled: boolean;
344
+ mode?: 'x' | 'y' | 'xy';
345
+ };
346
+ tooltips?: {
347
+ enabled: boolean;
348
+ format?: string;
349
+ showOnHover?: boolean;
350
+ };
351
+ onClick?: {
352
+ enabled: boolean;
353
+ action?: 'drill-down' | 'filter' | 'custom';
354
+ };
355
+ selection?: {
356
+ enabled: boolean;
357
+ mode?: 'single' | 'multiple';
358
+ };
359
+ export?: {
360
+ enabled: boolean;
361
+ formats?: ('png' | 'jpg' | 'pdf' | 'svg')[];
362
+ };
363
+ }
364
+ /**
365
+ * PDF Layout - Displays PDF documents
366
+ */
367
+ interface AXPReportPdfLayout {
368
+ type: 'pdf';
369
+ options?: AXPReportPdfOptions;
370
+ header?: AXPReportHeaderFooter;
371
+ footer?: AXPReportHeaderFooter;
372
+ }
373
+ /**
374
+ * PDF Layout Options
375
+ */
376
+ interface AXPReportPdfOptions {
377
+ showDownloadButton?: boolean;
378
+ showPrintButton?: boolean;
379
+ showZoomControls?: boolean;
380
+ showFullscreenButton?: boolean;
381
+ defaultZoom?: number;
382
+ height?: string;
383
+ }
384
+ interface AXPReportColumn {
385
+ field: string;
386
+ title?: string;
387
+ visible?: boolean;
388
+ width?: number | 'auto';
389
+ align?: 'left' | 'center' | 'right';
390
+ /** When true, column header supports interactive sort (opt-in). */
391
+ sortable?: boolean;
392
+ /** Pin column to the start or end of the table (definition-only). */
393
+ pin?: 'start' | 'end';
394
+ widget?: AXPWidgetColumnNode;
395
+ /**
396
+ * Optional cell interactivity. When omitted, group-by `displayField` columns
397
+ * can still render as drill links automatically in report table view.
398
+ */
399
+ interactivity?: AXPReportColumnInteractivity;
400
+ }
401
+ /**
402
+ * Column cell interaction — link triggers a command with the current row as context.
403
+ * Platform widgets may mirror this via column `options.displayAs: 'link'` in the future.
404
+ */
405
+ interface AXPReportColumnInteractivity {
406
+ type: 'link';
407
+ command: {
408
+ name: string;
409
+ options?: Record<string, unknown>;
410
+ };
411
+ }
412
+ /** Server-computed report footer totals keyed by column field. */
413
+ type AXPReportTableSummaryResult = Record<string, number | null>;
414
+ interface AXPReportSummaryOptions {
415
+ field: string;
416
+ operation: 'sum' | 'avg' | 'count' | 'min' | 'max';
417
+ displayIn: 'groupFooter' | 'reportFooter';
418
+ }
419
+ interface AXPConditionalFormatRule {
420
+ field: string;
421
+ condition: '>' | '<' | '=' | '!=' | 'contains';
422
+ value: any;
423
+ style: {
424
+ color?: string;
425
+ backgroundColor?: string;
426
+ fontWeight?: 'normal' | 'bold';
427
+ };
428
+ }
429
+ interface AXPReportHeaderFooter {
430
+ title?: string;
431
+ logoUrl?: string;
432
+ showDate?: boolean;
433
+ showParameters?: boolean;
434
+ customHtml?: string;
435
+ }
436
+ /**
437
+ * Layout switcher options for UI components
438
+ */
439
+ interface AXPLayoutSwitcherOption {
440
+ id: string;
441
+ title: string;
442
+ icon?: string;
443
+ type: AXPReportLayoutType;
444
+ }
445
+ /**
446
+ * Runtime layout selection state
447
+ */
448
+ interface AXPReportLayoutState {
449
+ reportId: string;
450
+ activeLayoutId: string;
451
+ availableLayouts: AXPLayoutSwitcherOption[];
452
+ }
453
+ /**
454
+ * Layout validation result
455
+ */
456
+ interface AXPLayoutValidationResult {
457
+ isValid: boolean;
458
+ errors: string[];
459
+ layoutId: string;
460
+ }
461
+ /**
462
+ * Data source resolution result for a specific layout
463
+ */
464
+ interface AXPLayoutDataSourceResolution {
465
+ layoutId: string;
466
+ dataSource: AXPReportDataSource;
467
+ source: 'layout' | 'report' | 'none';
468
+ }
469
+ /**
470
+ * Layout execution context with resolved data source
471
+ */
472
+ interface AXPLayoutExecutionContext {
473
+ reportId: string;
474
+ layoutId: string;
475
+ dataSource: AXPReportDataSource;
476
+ filters: AXPFilterClause;
477
+ skip?: number;
478
+ take?: number;
479
+ /** Runtime/user sort — platform shape `{ name, dir }`. */
480
+ sort?: AXPQuerySort[];
481
+ }
482
+ type AXPExecutionReportResult = {
483
+ type: 'table';
484
+ items: Record<string, unknown>[];
485
+ total: number;
486
+ summary?: AXPReportTableSummaryResult;
487
+ } | {
488
+ type: 'chart';
489
+ data: Record<string, unknown>;
490
+ } | {
491
+ type: 'cards';
492
+ items: Record<string, unknown>[];
493
+ } | {
494
+ type: 'custom';
495
+ data: unknown;
496
+ } | {
497
+ type: 'pdf';
498
+ url?: string;
499
+ base64?: string;
500
+ blob?: Blob;
501
+ filename?: string;
502
+ };
503
+ type AXPExecutionReportCommandResult = AXPReportLayout & {
504
+ data: AXPExecutionReportResult;
505
+ };
506
+ interface AXPExecutionReportCommand extends AXPCommand<AXPLayoutExecutionContext, AXPExecutionReportCommandResult> {
507
+ }
508
+ /**
509
+ * Report execution status and metadata
510
+ */
511
+ interface AXPReportExecutionStatus {
512
+ reportId: string;
513
+ layoutId: string;
514
+ status: 'pending' | 'executing' | 'completed' | 'failed' | 'cancelled';
515
+ startTime: Date;
516
+ endTime?: Date;
517
+ duration?: number;
518
+ recordCount?: number;
519
+ error?: AXPReportExecutionError;
520
+ }
521
+ /**
522
+ * Detailed error information for report execution
523
+ */
524
+ interface AXPReportExecutionError {
525
+ code: string;
526
+ message: string;
527
+ details?: Record<string, unknown>;
528
+ stack?: string;
529
+ }
530
+ /**
531
+ * Report execution request with options
532
+ */
533
+ interface AXPReportExecutionRequest {
534
+ reportId: string;
535
+ layoutId: string;
536
+ parameters: Record<string, unknown>;
537
+ options?: AXPReportExecutionOptions;
538
+ }
539
+ /**
540
+ * Options for report execution
541
+ */
542
+ interface AXPReportExecutionOptions {
543
+ timeout?: number;
544
+ priority?: 'low' | 'normal' | 'high';
545
+ cache?: boolean;
546
+ cacheTimeout?: number;
547
+ }
548
+
549
+ declare function reportEntityFactory(): Promise<AXPEntity | null>;
550
+
551
+ declare function reportCategoryEntityFactory(): Promise<AXPEntity | null>;
552
+
553
+ export { AXMPermissionsKeys, AXPReportManagementFeatureKeys, AXPReportManagementMenuKeys, RootConfig, reportCategoryEntityFactory, reportEntityFactory };
554
+ export type { AXPAggregatedDataSource, AXPAggregation, AXPChartAxisConfig, AXPChartDataMapping, AXPChartInteractivity, AXPChartStyling, AXPConditionalFormatRule, AXPCustomDataSource, AXPDataTransformation, AXPExecutionReportCommand, AXPExecutionReportCommandResult, AXPExecutionReportResult, AXPLayoutDataSourceResolution, AXPLayoutExecutionContext, AXPLayoutSwitcherOption, AXPLayoutValidationResult, AXPQueryDataSource, AXPReportCategory, AXPReportChartLayout, AXPReportChartOptions, AXPReportColumn, AXPReportColumnInteractivity, AXPReportDataSource, AXPReportDefinition, AXPReportDrillDownConfig, AXPReportExecutionError, AXPReportExecutionOptions, AXPReportExecutionRequest, AXPReportExecutionStatus, AXPReportGroupByDefinition, AXPReportHeaderFooter, AXPReportLayout, AXPReportLayoutAction, AXPReportLayoutDefinition, AXPReportLayoutState, AXPReportLayoutType, AXPReportParameter, AXPReportParameterBinding, AXPReportParameterGroup, AXPReportPdfLayout, AXPReportPdfOptions, AXPReportSummaryOptions, AXPReportTableLayout, AXPReportTableLayoutRowAction, AXPReportTableSummaryResult, AXPTableOptions, AXPTransformedDataSource };