@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.
@@ -0,0 +1,221 @@
1
+ import { createAllQueryView, entityMasterCrudActions } from '@acorex-platform/framework-shared/entity';
2
+ import { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
3
+
4
+ const AXPReportManagementFeatureKeys = {
5
+ ReportBuilder: 'ReportManagement:Feature:ReportBuilder',
6
+ SavedReports: 'ReportManagement:Feature:SavedReports',
7
+ ScheduledReports: 'ReportManagement:Feature:ScheduledReports',
8
+ BackgroundReports: 'ReportManagement:Feature:BackgroundReports',
9
+ };
10
+
11
+ const AXPReportManagementMenuKeys = {
12
+ Root: 'report-management:menu',
13
+ Reports: 'report-management:menu:reports',
14
+ Categories: 'report-management:menu:categories',
15
+ DataSets: 'report-management:menu:data-sets',
16
+ };
17
+
18
+ const AXMPermissionsKeys = {
19
+ ReportManagement: {
20
+ Management: 'ReportManagement:Permission:Management',
21
+ Report: {
22
+ Management: 'ReportManagement:Permission:Report.Management',
23
+ View: 'ReportManagement:Permission:Report.View',
24
+ Create: 'ReportManagement:Permission:Report.Create',
25
+ Update: 'ReportManagement:Permission:Report.Update',
26
+ Delete: 'ReportManagement:Permission:Report.Delete',
27
+ },
28
+ Category: {
29
+ Management: 'ReportManagement:Permission:Category.Management',
30
+ View: 'ReportManagement:Permission:Category.View',
31
+ Create: 'ReportManagement:Permission:Category.Create',
32
+ Update: 'ReportManagement:Permission:Category.Update',
33
+ Delete: 'ReportManagement:Permission:Category.Delete',
34
+ },
35
+ },
36
+ };
37
+
38
+ const config = {
39
+ i18n: 'report-management',
40
+ module: 'ReportManagement',
41
+ };
42
+ const RootConfig = {
43
+ config,
44
+ module: {
45
+ route: 'report-management',
46
+ name: config.module,
47
+ title: `@${config.i18n}:module.title`,
48
+ icon: 'fa-light fa-chart-bar',
49
+ },
50
+ entities: {
51
+ dataSet: {
52
+ name: 'DataSet',
53
+ title: `t("dataSet", { scope: "${config.i18n}" })`,
54
+ titlePlural: `t("dataSetPlural", { scope: "${config.i18n}" })`,
55
+ icon: 'fa-light fa-default',
56
+ },
57
+ category: {
58
+ name: 'Category',
59
+ fullName: `${config.module}.Category`,
60
+ title: `@${config.i18n}:reports.entities.category.title`,
61
+ titlePlural: `@${config.i18n}:reports.entities.category.plural`,
62
+ icon: 'fa-light fa-folder',
63
+ },
64
+ report: {
65
+ name: 'Report',
66
+ fullName: `${config.module}.Report`,
67
+ title: `@${config.i18n}:reports.entities.report.title`,
68
+ titlePlural: `@${config.i18n}:reports.entities.report.plural`,
69
+ icon: 'fa-light fa-file-chart-pie',
70
+ },
71
+ },
72
+ };
73
+
74
+ //#region ---- Imports ----
75
+ //#endregion
76
+
77
+ //#region ---- Report definition entity factory ----
78
+ async function reportEntityFactory() {
79
+ return {
80
+ module: RootConfig.module.name,
81
+ name: RootConfig.entities.report.name,
82
+ title: RootConfig.entities.report.title,
83
+ icon: RootConfig.entities.report.icon,
84
+ formats: {
85
+ individual: RootConfig.entities.report.title,
86
+ plural: RootConfig.entities.report.titlePlural,
87
+ searchResult: {
88
+ title: '{{ title }}',
89
+ description: '{{ description }}',
90
+ },
91
+ },
92
+ groups: [{ id: 'basic-info', title: '@general:terms.interface.basic-info' }],
93
+ properties: [
94
+ {
95
+ name: 'title',
96
+ title: '@general:terms.common.title',
97
+ groupId: 'basic-info',
98
+ schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },
99
+ validations: [{ rule: 'required' }],
100
+ },
101
+ {
102
+ name: 'description',
103
+ title: '@general:terms.common.description',
104
+ groupId: 'basic-info',
105
+ schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.largeText } },
106
+ },
107
+ {
108
+ name: 'categoryIds',
109
+ title: '@general:terms.classification.categories',
110
+ groupId: 'basic-info',
111
+ schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },
112
+ },
113
+ {
114
+ name: 'parameterGroups',
115
+ title: '@report-management:reports.entities.report.fields.parameter-groups',
116
+ groupId: 'basic-info',
117
+ schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },
118
+ },
119
+ {
120
+ name: 'layouts',
121
+ title: '@report-management:reports.entities.report.fields.layouts',
122
+ groupId: 'basic-info',
123
+ schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },
124
+ },
125
+ {
126
+ name: 'defaultLayoutId',
127
+ title: '@report-management:reports.entities.report.fields.default-layout-id',
128
+ groupId: 'basic-info',
129
+ schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },
130
+ },
131
+ {
132
+ name: 'permissions',
133
+ title: '@general:terms.security.permissions',
134
+ groupId: 'basic-info',
135
+ schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },
136
+ },
137
+ ],
138
+ columns: [{ name: 'title' }, { name: 'description' }],
139
+ interfaces: {
140
+ master: {
141
+ list: {
142
+ actions: [...entityMasterCrudActions()],
143
+ views: [createAllQueryView({ sorts: [{ name: 'title', dir: 'asc' }] })],
144
+ },
145
+ },
146
+ },
147
+ };
148
+ }
149
+ //#endregion
150
+
151
+ //#region ---- Report category entity factory ----
152
+ async function reportCategoryEntityFactory() {
153
+ return {
154
+ module: RootConfig.module.name,
155
+ name: `${RootConfig.entities.report.name}Category`,
156
+ parentKey: 'parentId',
157
+ title: RootConfig.entities.category.title,
158
+ icon: RootConfig.entities.category.icon,
159
+ formats: {
160
+ individual: RootConfig.entities.category.title,
161
+ plural: RootConfig.entities.category.titlePlural,
162
+ searchResult: {
163
+ title: '{{ title }}',
164
+ description: RootConfig.module.title,
165
+ },
166
+ },
167
+ groups: [{ id: 'basic-info', title: '@general:terms.interface.basic-info' }],
168
+ properties: [
169
+ {
170
+ name: 'title',
171
+ title: '@general:terms.common.title',
172
+ groupId: 'basic-info',
173
+ schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },
174
+ validations: [{ rule: 'required' }],
175
+ },
176
+ {
177
+ name: 'description',
178
+ title: '@general:terms.common.description',
179
+ groupId: 'basic-info',
180
+ schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.largeText } },
181
+ },
182
+ {
183
+ name: 'parentId',
184
+ title: '@general:terms.classification.parent',
185
+ groupId: 'basic-info',
186
+ schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },
187
+ },
188
+ {
189
+ name: 'childrenCount',
190
+ title: '@general:terms.common.children-count',
191
+ groupId: 'basic-info',
192
+ schema: { dataType: 'number', interface: { type: AXPWidgetsCatalog.number } },
193
+ },
194
+ {
195
+ name: 'itemsCount',
196
+ title: '@general:terms.common.items-count',
197
+ groupId: 'basic-info',
198
+ schema: { dataType: 'number', interface: { type: AXPWidgetsCatalog.number } },
199
+ },
200
+ ],
201
+ columns: [{ name: 'title' }, { name: 'description' }],
202
+ interfaces: {
203
+ master: {
204
+ list: {
205
+ actions: [...entityMasterCrudActions()],
206
+ views: [createAllQueryView({ sorts: [{ name: 'title', dir: 'asc' }] })],
207
+ },
208
+ },
209
+ },
210
+ };
211
+ }
212
+ //#endregion
213
+
214
+ //#region ---- Contracts barrel ----
215
+
216
+ /**
217
+ * Generated bundle index. Do not edit.
218
+ */
219
+
220
+ export { AXMPermissionsKeys, AXPReportManagementFeatureKeys, AXPReportManagementMenuKeys, RootConfig, reportCategoryEntityFactory, reportEntityFactory };
221
+ //# sourceMappingURL=acorex-platform-module-report-management-client-contracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-report-management-client-contracts.mjs","sources":["../../../../libs/modules/report-management/contracts/src/features.keys.ts","../../../../libs/modules/report-management/contracts/src/menu.keys.ts","../../../../libs/modules/report-management/contracts/src/permission.keys.ts","../../../../libs/modules/report-management/contracts/src/root-config.ts","../../../../libs/modules/report-management/contracts/src/report.types.ts","../../../../libs/modules/report-management/contracts/src/entities/report/report.entity.ts","../../../../libs/modules/report-management/contracts/src/entities/report-category/report-category.entity.ts","../../../../libs/modules/report-management/contracts/src/index.ts","../../../../libs/modules/report-management/contracts/src/acorex-platform-module-report-management-client-contracts.ts"],"sourcesContent":["export const AXPReportManagementFeatureKeys = {\n ReportBuilder: 'ReportManagement:Feature:ReportBuilder',\n SavedReports: 'ReportManagement:Feature:SavedReports',\n ScheduledReports: 'ReportManagement:Feature:ScheduledReports',\n BackgroundReports: 'ReportManagement:Feature:BackgroundReports',\n} as const;\n\n","export const AXPReportManagementMenuKeys = {\n Root: 'report-management:menu',\n Reports: 'report-management:menu:reports',\n Categories: 'report-management:menu:categories',\n DataSets: 'report-management:menu:data-sets',\n} as const;\n\n","export const AXMPermissionsKeys = {\n ReportManagement: {\n Management: 'ReportManagement:Permission:Management',\n Report: {\n Management: 'ReportManagement:Permission:Report.Management',\n View: 'ReportManagement:Permission:Report.View',\n Create: 'ReportManagement:Permission:Report.Create',\n Update: 'ReportManagement:Permission:Report.Update',\n Delete: 'ReportManagement:Permission:Report.Delete',\n },\n Category: {\n Management: 'ReportManagement:Permission:Category.Management',\n View: 'ReportManagement:Permission:Category.View',\n Create: 'ReportManagement:Permission:Category.Create',\n Update: 'ReportManagement:Permission:Category.Update',\n Delete: 'ReportManagement:Permission:Category.Delete',\n },\n },\n};\n","const config = {\n i18n: 'report-management',\n module: 'ReportManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'report-management',\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-chart-bar',\n },\n entities: {\n dataSet: {\n name: 'DataSet',\n title: `t(\"dataSet\", { scope: \"${config.i18n}\" })`,\n titlePlural: `t(\"dataSetPlural\", { scope: \"${config.i18n}\" })`,\n icon: 'fa-light fa-default',\n },\n category: {\n name: 'Category',\n fullName: `${config.module}.Category`,\n title: `@${config.i18n}:reports.entities.category.title`,\n titlePlural: `@${config.i18n}:reports.entities.category.plural`,\n icon: 'fa-light fa-folder',\n },\n report: {\n name: 'Report',\n fullName: `${config.module}.Report`,\n title: `@${config.i18n}:reports.entities.report.title`,\n titlePlural: `@${config.i18n}:reports.entities.report.plural`,\n icon: 'fa-light fa-file-chart-pie',\n },\n },\n} as const;\n","//#region ---- Imports ----\n\nimport { AXPWidgetColumnNode } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPCommand } from '@acorex-platform/framework-shared/runtime';\nimport { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\nimport { AXPActionMenuItem, AXPCategoryEntity, AXPExportOptions, AXPFilterClause, AXPSystemActionType, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Core Report Types and Interfaces ----\n\nexport type AXPReportLayoutType = 'table' | 'chart' | 'cards' | 'custom' | 'pdf';\n\n/**\n * Report Category - Extends AXPCategoryEntity for consistency and performance\n *\n * Inherited properties from AXPCategoryEntity:\n * - id: string - Unique identifier\n * - title: string - Display name\n * - description?: string - Category description\n * - parentId?: string - Parent category ID\n * - childrenCount: number - Direct child categories count (enables lazy loading)\n * - itemsCount?: number - Direct reports count (replaces hasReport boolean)\n * - totalChildrenCount?: number - Total nested categories (optional, for analytics)\n * - totalItemsCount?: number - Total reports in tree (optional, for analytics)\n *\n * Performance benefits:\n * - Lazy loading support (childrenCount > 0 shows expand icon)\n * - Report count display (itemsCount shows \"5 reports\" badge)\n * - Efficient queries (no need to query to know if expandable)\n */\nexport interface AXPReportCategory extends AXPCategoryEntity {\n // No additional properties needed - all inherited from AXPCategoryEntity\n // Use: childrenCount instead of hasChild\n // Use: itemsCount instead of hasReport\n}\n\nexport interface AXPReportDefinition {\n id: string;\n title: string;\n description?: string;\n categoryIds: string[];\n parameterGroups: AXPReportParameterGroup[];\n permissions?: string[];\n layouts: AXPReportLayoutDefinition[]; // Changed to support multiple layouts\n defaultLayoutId: string; // Which layout to show by default\n}\n\nexport type AXPReportLayoutAction = AXPActionMenuItem & {\n priority: 'primary' | 'secondary';\n};\n\n/**\n * Layout Definition - Associates a layout with metadata\n */\nexport interface AXPReportLayoutDefinition {\n id: string; // Unique identifier for this layout\n title: string; // Display name (e.g., \"Table View\", \"Chart View\")\n description?: string; // Optional description\n icon?: string; // Icon for layout switcher UI\n layout: AXPReportLayout; // The actual layout configuration\n dataSource?: AXPReportDataSource; // Optional layout-specific dataSource (overrides report-level)\n isDefault?: boolean; // Alternative to defaultLayoutId\n actions?: AXPReportLayoutAction[];\n export?: AXPExportOptions;\n}\n\nexport interface AXPReportParameterGroup {\n name: string;\n title: string;\n description?: string;\n parameters: AXPReportParameter[];\n}\n\nexport interface AXPReportParameter {\n path: string;\n title: string;\n description?: string;\n widget: AXPWidgetNode;\n}\n\n//#endregion\n\n//#region ---- Data Source Types ----\n\nexport type AXPReportDataSource =\n | AXPQueryDataSource\n | AXPCustomDataSource\n | AXPAggregatedDataSource\n | AXPTransformedDataSource;\n\n/**\n * Query Data Source - Used for executing predefined queries (AXPQuery)\n */\nexport interface AXPQueryDataSource {\n type: 'query';\n name: string; // The registered query name, e.g., 'getEmployeeList'\n description?: string;\n\n inputs?: AXPReportParameterBinding[]; // Maps report parameters to query inputs\n sortFields?: AXPQuerySort[]; // Default sorting applied by the backend\n pagination?: boolean; // Enables paging in result set\n}\n\n/**\n * Custom Data Source - Used for fetching data from custom providers like REST APIs or external services\n */\nexport interface AXPCustomDataSource {\n type: 'custom';\n provider: string; // Example: 'http://api/report' or 'custom:MyHandler'\n description?: string;\n\n inputs?: AXPReportParameterBinding[]; // Maps report parameters to payload\n options?: { [key: string]: any }; // Additional options for the custom handler\n}\n\n/**\n * Parameter Binding - Maps report-level parameters to actual query/command input structure\n */\nexport interface AXPReportParameterBinding {\n parameterKey: string; // Report parameter key, e.g., 'startDate'\n bindTo: string; // Input key in the query/command payload, e.g., 'filters.from'\n}\n\n/**\n * Aggregated Data Source - Used for pre-aggregated data optimized for charts\n */\nexport interface AXPAggregatedDataSource {\n type: 'aggregated';\n baseQuery: string; // Base query to aggregate from\n description?: string;\n\n groupBy: string[]; // Fields to group by\n aggregations: AXPAggregation[]; // Aggregation operations\n inputs?: AXPReportParameterBinding[];\n}\n\n/**\n * Transformed Data Source - Applies transformations to existing data sources\n */\nexport interface AXPTransformedDataSource {\n type: 'transformed';\n baseDataSource: AXPReportDataSource; // Source to transform\n description?: string;\n\n transformations: AXPDataTransformation[]; // List of transformations\n inputs?: AXPReportParameterBinding[];\n}\n\n/**\n * Aggregation operation for aggregated data sources\n */\nexport interface AXPAggregation {\n field: string;\n operation: 'sum' | 'avg' | 'count' | 'min' | 'max' | 'distinct';\n alias?: string; // Output field name\n}\n\n/**\n * Data transformation operation\n */\nexport interface AXPDataTransformation {\n type: 'filter' | 'sort' | 'group' | 'pivot' | 'format';\n config: Record<string, any>; // Transformation-specific configuration\n}\n\n//#endregion\n\n//#region ---- Group By & Drill Down ----\n\n/**\n * Drill-down target for a grouped report row.\n * When reportId is omitted, the current report is used.\n */\nexport interface AXPReportDrillDownConfig {\n reportId?: string;\n layoutId?: string;\n title?: string;\n parameters?: Record<string, string>;\n}\n\n/**\n * Declares how a summary report is grouped and which detail view opens on drill-down.\n * Multiple definitions allow alternative drill paths (e.g. by brand vs by category).\n */\nexport interface AXPReportGroupByDefinition {\n fields: string[];\n displayField?: string;\n /** When true (default), `displayField` renders as a link instead of a row command column. */\n linkDisplay?: boolean;\n title?: string;\n default?: boolean;\n priority?: 'primary' | 'secondary';\n drillDown: AXPReportDrillDownConfig;\n}\n\n//#endregion\n\n//#region ---- Layout Types ----\n\nexport type AXPReportLayout = AXPReportTableLayout | AXPReportChartLayout | AXPReportPdfLayout;\n\n/**\n * Table Layout - Displays data in tabular format\n */\n\nexport interface AXPReportTableLayoutRowAction extends AXPActionMenuItem {\n priority: 'primary' | 'secondary';\n type: AXPSystemActionType | string;\n default?: boolean;\n}\n\nexport interface AXPReportTableLayout {\n type: 'table';\n columns: AXPReportColumn[];\n actions?: AXPReportTableLayoutRowAction[];\n options?: AXPTableOptions;\n groupBy?: AXPReportGroupByDefinition[];\n conditionalFormatting?: AXPConditionalFormatRule[];\n summary?: AXPReportSummaryOptions[];\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\nexport interface AXPTableOptions {\n pagination?: boolean;\n stickyHeader?: boolean;\n stripedRows?: boolean;\n sorting?: AXPQuerySort[];\n selectable?: {\n mode: 'single' | 'multiple' | 'none';\n };\n}\n\n/**\n * Chart Layout - Displays data in various chart formats\n */\nexport interface AXPReportChartLayout {\n type: 'chart';\n options: AXPReportChartOptions;\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\nexport interface AXPReportChartOptions {\n chartType: 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'radar' | 'mixed';\n dataMapping: AXPChartDataMapping;\n styling?: AXPChartStyling;\n interactivity?: AXPChartInteractivity;\n}\n\n/**\n * Chart Data Mapping Configuration\n */\nexport interface AXPChartDataMapping {\n // Core fields\n xField: string; // X-axis data field\n yFields: string | string[]; // Y-axis data field(s) for multiple series\n\n // Grouping and categorization\n groupBy?: string; // Group data by this field\n seriesField?: string; // Field to create multiple series\n\n // Special fields for specific chart types\n sizeField?: string; // For bubble charts\n colorField?: string; // For gradient/conditional coloring\n labelField?: string; // Custom label field\n\n // Data aggregation\n aggregation?: {\n method: 'sum' | 'avg' | 'count' | 'min' | 'max';\n field: string;\n };\n}\n\n/**\n * Chart Visual Styling Configuration\n */\nexport interface AXPChartStyling {\n // Theme and colors\n colorScheme?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'custom';\n customColors?: string[];\n\n // Chart appearance\n gridLines?: boolean;\n legend?: {\n show: boolean;\n position: 'top' | 'bottom' | 'left' | 'right';\n };\n\n // Axes configuration\n xAxis?: AXPChartAxisConfig;\n yAxis?: AXPChartAxisConfig;\n\n // Animation\n animation?: {\n enabled: boolean;\n duration?: number;\n };\n\n // Chart-specific styling\n chartSpecific?: {\n // Bar chart options\n bar?: {\n orientation: 'vertical' | 'horizontal';\n mode: 'grouped' | 'stacked';\n barWidth?: number;\n };\n\n // Line chart options\n line?: {\n style: 'straight' | 'curved' | 'stepped';\n showPoints?: boolean;\n tension?: number;\n };\n\n // Area chart options\n area?: {\n mode: 'normal' | 'stacked' | 'percentage';\n opacity?: number;\n };\n\n // Pie/Doughnut options\n pie?: {\n startAngle?: number;\n innerRadius?: number; // For doughnut charts\n showLabels?: boolean;\n };\n };\n}\n\n/**\n * Chart Axis Configuration\n */\nexport interface AXPChartAxisConfig {\n title?: string;\n show?: boolean;\n type?: 'linear' | 'logarithmic' | 'datetime' | 'category';\n min?: number | string;\n max?: number | string;\n format?: string;\n gridLines?: boolean;\n tickInterval?: number;\n}\n\n/**\n * Chart Interactivity Configuration\n */\nexport interface AXPChartInteractivity {\n // Zoom and pan\n zoom?: {\n enabled: boolean;\n mode?: 'x' | 'y' | 'xy';\n };\n\n // Tooltips\n tooltips?: {\n enabled: boolean;\n format?: string;\n showOnHover?: boolean;\n };\n\n // Click events\n onClick?: {\n enabled: boolean;\n action?: 'drill-down' | 'filter' | 'custom';\n };\n\n // Selection\n selection?: {\n enabled: boolean;\n mode?: 'single' | 'multiple';\n };\n\n // Export\n export?: {\n enabled: boolean;\n formats?: ('png' | 'jpg' | 'pdf' | 'svg')[];\n };\n}\n\n/**\n * PDF Layout - Displays PDF documents\n */\nexport interface AXPReportPdfLayout {\n type: 'pdf';\n options?: AXPReportPdfOptions;\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\n/**\n * PDF Layout Options\n */\nexport interface AXPReportPdfOptions {\n showDownloadButton?: boolean;\n showPrintButton?: boolean;\n showZoomControls?: boolean;\n showFullscreenButton?: boolean;\n defaultZoom?: number; // Percentage (e.g., 100, 150, 200)\n height?: string; // CSS height (e.g., '100%', '600px')\n}\n\n//#region ---- Shared Models ----\n\nexport interface AXPReportColumn {\n field: string;\n title?: string;\n visible?: boolean;\n width?: number | 'auto';\n align?: 'left' | 'center' | 'right';\n /** When true, column header supports interactive sort (opt-in). */\n sortable?: boolean;\n /** Pin column to the start or end of the table (definition-only). */\n pin?: 'start' | 'end';\n widget?: AXPWidgetColumnNode;\n /**\n * Optional cell interactivity. When omitted, group-by `displayField` columns\n * can still render as drill links automatically in report table view.\n */\n interactivity?: AXPReportColumnInteractivity;\n}\n\n/**\n * Column cell interaction — link triggers a command with the current row as context.\n * Platform widgets may mirror this via column `options.displayAs: 'link'` in the future.\n */\nexport interface AXPReportColumnInteractivity {\n type: 'link';\n command: {\n name: string;\n options?: Record<string, unknown>;\n };\n}\n\n/** Server-computed report footer totals keyed by column field. */\nexport type AXPReportTableSummaryResult = Record<string, number | null>;\n\nexport interface AXPReportSummaryOptions {\n field: string;\n operation: 'sum' | 'avg' | 'count' | 'min' | 'max';\n displayIn: 'groupFooter' | 'reportFooter';\n}\n\nexport interface AXPConditionalFormatRule {\n field: string;\n condition: '>' | '<' | '=' | '!=' | 'contains';\n value: any;\n style: {\n color?: string;\n backgroundColor?: string;\n fontWeight?: 'normal' | 'bold';\n };\n}\n\nexport interface AXPReportHeaderFooter {\n title?: string;\n logoUrl?: string;\n showDate?: boolean;\n showParameters?: boolean;\n customHtml?: string;\n}\n\n/**\n * Layout switcher options for UI components\n */\nexport interface AXPLayoutSwitcherOption {\n id: string;\n title: string;\n icon?: string;\n type: AXPReportLayoutType;\n}\n\n/**\n * Runtime layout selection state\n */\nexport interface AXPReportLayoutState {\n reportId: string;\n activeLayoutId: string;\n availableLayouts: AXPLayoutSwitcherOption[];\n}\n\n/**\n * Layout validation result\n */\nexport interface AXPLayoutValidationResult {\n isValid: boolean;\n errors: string[];\n layoutId: string;\n}\n\n/**\n * Data source resolution result for a specific layout\n */\nexport interface AXPLayoutDataSourceResolution {\n layoutId: string;\n dataSource: AXPReportDataSource;\n source: 'layout' | 'report' | 'none'; // Where the dataSource came from\n}\n\n/**\n * Layout execution context with resolved data source\n */\nexport interface AXPLayoutExecutionContext {\n reportId: string;\n layoutId: string;\n dataSource: AXPReportDataSource;\n filters: AXPFilterClause;\n skip?: number;\n take?: number;\n /** Runtime/user sort — platform shape `{ name, dir }`. */\n sort?: AXPQuerySort[];\n}\n\nexport type AXPExecutionReportResult =\n | { type: 'table'; items: Record<string, unknown>[]; total: number; summary?: AXPReportTableSummaryResult }\n | { type: 'chart'; data: Record<string, unknown> }\n | { type: 'cards'; items: Record<string, unknown>[] }\n | { type: 'custom'; data: unknown }\n | { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n\nexport type AXPExecutionReportCommandResult = AXPReportLayout & { data: AXPExecutionReportResult };\n\nexport interface AXPExecutionReportCommand extends AXPCommand<\n AXPLayoutExecutionContext,\n AXPExecutionReportCommandResult\n> {}\n\n/**\n * Report execution status and metadata\n */\nexport interface AXPReportExecutionStatus {\n reportId: string;\n layoutId: string;\n status: 'pending' | 'executing' | 'completed' | 'failed' | 'cancelled';\n startTime: Date;\n endTime?: Date;\n duration?: number; // milliseconds\n recordCount?: number;\n error?: AXPReportExecutionError;\n}\n\n/**\n * Detailed error information for report execution\n */\nexport interface AXPReportExecutionError {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n stack?: string;\n}\n\n/**\n * Report execution request with options\n */\nexport interface AXPReportExecutionRequest {\n reportId: string;\n layoutId: string;\n parameters: Record<string, unknown>;\n options?: AXPReportExecutionOptions;\n}\n\n/**\n * Options for report execution\n */\nexport interface AXPReportExecutionOptions {\n timeout?: number; // milliseconds\n priority?: 'low' | 'normal' | 'high';\n cache?: boolean;\n cacheTimeout?: number; // seconds\n}\n\n//#endregion\n","import {AXPEntity, createAllQueryView, entityMasterCrudActions} from '@acorex-platform/framework-shared/entity';\nimport {AXPWidgetsCatalog} from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from '../../root-config';\n\n//#region ---- Report definition entity factory ----\n\nexport async function reportEntityFactory(): Promise<AXPEntity | null> {\n return {\n module: RootConfig.module.name,\n name: RootConfig.entities.report.name,\n title: RootConfig.entities.report.title,\n icon: RootConfig.entities.report.icon,\n formats: {\n individual: RootConfig.entities.report.title,\n plural: RootConfig.entities.report.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: '{{ description }}',\n },\n },\n groups: [{ id: 'basic-info', title: '@general:terms.interface.basic-info' }],\n properties: [\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'basic-info',\n schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'description',\n title: '@general:terms.common.description',\n groupId: 'basic-info',\n schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.largeText } },\n },\n {\n name: 'categoryIds',\n title: '@general:terms.classification.categories',\n groupId: 'basic-info',\n schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },\n },\n {\n name: 'parameterGroups',\n title: '@report-management:reports.entities.report.fields.parameter-groups',\n groupId: 'basic-info',\n schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },\n },\n {\n name: 'layouts',\n title: '@report-management:reports.entities.report.fields.layouts',\n groupId: 'basic-info',\n schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },\n },\n {\n name: 'defaultLayoutId',\n title: '@report-management:reports.entities.report.fields.default-layout-id',\n groupId: 'basic-info',\n schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },\n },\n {\n name: 'permissions',\n title: '@general:terms.security.permissions',\n groupId: 'basic-info',\n schema: { dataType: 'object', interface: { type: AXPWidgetsCatalog.text } },\n },\n ],\n columns: [{ name: 'title' }, { name: 'description' }],\n interfaces: {\n master: {\n list: {\n actions: [...entityMasterCrudActions()],\n views: [createAllQueryView({ sorts: [{ name: 'title', dir: 'asc' }] })],\n },\n },\n },\n };\n}\n\n//#endregion\n","import {AXPEntity, createAllQueryView, entityMasterCrudActions} from '@acorex-platform/framework-shared/entity';\nimport {AXPWidgetsCatalog} from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from '../../root-config';\n\n//#region ---- Report category entity factory ----\n\nexport async function reportCategoryEntityFactory(): Promise<AXPEntity | null> {\n return {\n module: RootConfig.module.name,\n name: `${RootConfig.entities.report.name}Category`,\n parentKey: 'parentId',\n title: RootConfig.entities.category.title,\n icon: RootConfig.entities.category.icon,\n formats: {\n individual: RootConfig.entities.category.title,\n plural: RootConfig.entities.category.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n groups: [{ id: 'basic-info', title: '@general:terms.interface.basic-info' }],\n properties: [\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'basic-info',\n schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'description',\n title: '@general:terms.common.description',\n groupId: 'basic-info',\n schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.largeText } },\n },\n {\n name: 'parentId',\n title: '@general:terms.classification.parent',\n groupId: 'basic-info',\n schema: { dataType: 'string', interface: { type: AXPWidgetsCatalog.text } },\n },\n {\n name: 'childrenCount',\n title: '@general:terms.common.children-count',\n groupId: 'basic-info',\n schema: { dataType: 'number', interface: { type: AXPWidgetsCatalog.number } },\n },\n {\n name: 'itemsCount',\n title: '@general:terms.common.items-count',\n groupId: 'basic-info',\n schema: { dataType: 'number', interface: { type: AXPWidgetsCatalog.number } },\n },\n ],\n columns: [{ name: 'title' }, { name: 'description' }],\n interfaces: {\n master: {\n list: {\n actions: [...entityMasterCrudActions()],\n views: [createAllQueryView({ sorts: [{ name: 'title', dir: 'asc' }] })],\n },\n },\n },\n };\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\n\nexport * from './root-config';\nexport * from './report.types';\n\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import * as i2 from '@acorex/components/button';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import { AXBasePageComponent } from '@acorex/components/page';
4
+ import * as i3 from '@acorex/components/decorators';
5
+ import { AXDecoratorModule } from '@acorex/components/decorators';
6
+ import { AXLoadingModule } from '@acorex/components/loading';
7
+ import * as i1$1 from '@acorex/core/translation';
8
+ import { AXTranslationModule } from '@acorex/core/translation';
9
+ import { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';
10
+ import * as i1 from '@angular/common';
11
+ import { CommonModule } from '@angular/common';
12
+ import * as i0 from '@angular/core';
13
+ import { inject, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
14
+ import { AXPReportViewerViewModel, AXPReportTableViewComponent } from './acorex-platform-module-report-management-client.mjs';
15
+
16
+ //#region ---- Report Drill Popup ----
17
+ class AXPReportDrillPopupComponent extends AXBasePageComponent {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.parameters = {};
21
+ this.hideColumnFields = [];
22
+ //#endregion
23
+ //#region ---- Services & Dependencies ----
24
+ this.vm = inject(AXPReportViewerViewModel);
25
+ }
26
+ //#endregion
27
+ //#region ---- Lifecycle ----
28
+ async ngOnInit() {
29
+ await super.ngOnInit();
30
+ await this.vm.loadReport(this.reportId);
31
+ if (this.layoutId) {
32
+ this.vm.switchLayout(this.layoutId);
33
+ }
34
+ if (this.hideColumnFields.length > 0) {
35
+ this.vm.applyDrillView({ hideColumnFields: this.hideColumnFields });
36
+ }
37
+ if (this.parameters && Object.keys(this.parameters).length > 0) {
38
+ this.vm.updateFilterContext(this.parameters);
39
+ }
40
+ await this.vm.executeReport();
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPReportDrillPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPReportDrillPopupComponent, isStandalone: true, selector: "axp-report-drill-popup", providers: [AXPReportViewerViewModel], usesInheritance: true, ngImport: i0, template: "<ax-content>\n <div class=\"__drill-content\">\n @if (vm.hasError()) {\n <axp-state-message\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\"\n >\n </axp-state-message>\n } @else if (vm.isTableLayout()) {\n <axp-report-table-view class=\"__drill-view\"></axp-report-table-view>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-drill-popup.unsupported-layout.title'\"\n [description]=\"'@report-management:report-viewer.components.report-drill-popup.unsupported-layout.description'\"\n >\n </axp-state-message>\n }\n </div>\n</ax-content>\n<ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.close.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"close()\"\n >\n </ax-button>\n </ax-suffix>\n</ax-footer>\n", styles: [":host{display:flex;height:100%;min-height:0;flex-direction:column}.__drill-content{display:flex;height:100%;min-height:60vh;flex:1;flex-direction:column;overflow:hidden}.__drill-view{display:flex;height:100%;min-height:0;width:100%;flex:1;flex-direction:column}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.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: i3.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: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "component", type: AXPReportTableViewComponent, selector: "axp-report-table-view" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPReportDrillPopupComponent, decorators: [{
46
+ type: Component,
47
+ args: [{ selector: 'axp-report-drill-popup', imports: [
48
+ CommonModule,
49
+ AXButtonModule,
50
+ AXDecoratorModule,
51
+ AXLoadingModule,
52
+ AXTranslationModule,
53
+ AXPStateMessageComponent,
54
+ AXPReportTableViewComponent,
55
+ ], providers: [AXPReportViewerViewModel], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ax-content>\n <div class=\"__drill-content\">\n @if (vm.hasError()) {\n <axp-state-message\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\"\n >\n </axp-state-message>\n } @else if (vm.isTableLayout()) {\n <axp-report-table-view class=\"__drill-view\"></axp-report-table-view>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-drill-popup.unsupported-layout.title'\"\n [description]=\"'@report-management:report-viewer.components.report-drill-popup.unsupported-layout.description'\"\n >\n </axp-state-message>\n }\n </div>\n</ax-content>\n<ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.close.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"close()\"\n >\n </ax-button>\n </ax-suffix>\n</ax-footer>\n", styles: [":host{display:flex;height:100%;min-height:0;flex-direction:column}.__drill-content{display:flex;height:100%;min-height:60vh;flex:1;flex-direction:column;overflow:hidden}.__drill-view{display:flex;height:100%;min-height:0;width:100%;flex:1;flex-direction:column}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
56
+ }] });
57
+
58
+ export { AXPReportDrillPopupComponent };
59
+ //# sourceMappingURL=acorex-platform-module-report-management-client-report-drill-popup.component-CvfwhlEp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-report-management-client-report-drill-popup.component-CvfwhlEp.mjs","sources":["../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-drill-popup/report-drill-popup.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-drill-popup/report-drill-popup.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\n\n//#region ---- Report Drill Popup ----\n\n@Component({\n selector: 'axp-report-drill-popup',\n templateUrl: './report-drill-popup.component.html',\n styleUrl: './report-drill-popup.component.css',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPReportTableViewComponent,\n ],\n providers: [AXPReportViewerViewModel],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportDrillPopupComponent extends AXBasePageComponent {\n //#region ---- Popup Data ----\n\n reportId!: string;\n layoutId?: string;\n parameters: Record<string, unknown> = {};\n hideColumnFields: string[] = [];\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n await this.vm.loadReport(this.reportId);\n\n if (this.layoutId) {\n this.vm.switchLayout(this.layoutId);\n }\n\n if (this.hideColumnFields.length > 0) {\n this.vm.applyDrillView({ hideColumnFields: this.hideColumnFields });\n }\n\n if (this.parameters && Object.keys(this.parameters).length > 0) {\n this.vm.updateFilterContext(this.parameters);\n }\n\n await this.vm.executeReport();\n }\n\n //#endregion\n}\n\n//#endregion\n","<ax-content>\n <div class=\"__drill-content\">\n @if (vm.hasError()) {\n <axp-state-message\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\"\n >\n </axp-state-message>\n } @else if (vm.isTableLayout()) {\n <axp-report-table-view class=\"__drill-view\"></axp-report-table-view>\n } @else {\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-drill-popup.unsupported-layout.title'\"\n [description]=\"'@report-management:report-viewer.components.report-drill-popup.unsupported-layout.description'\"\n >\n </axp-state-message>\n }\n </div>\n</ax-content>\n<ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button\n [text]=\"'@general:actions.close.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"close()\"\n >\n </ax-button>\n </ax-suffix>\n</ax-footer>\n"],"names":["i1","i3","i4"],"mappings":"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"}