@acorex/modules 20.0.21 → 20.0.23

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.
Files changed (44) hide show
  1. package/document-management/index.d.ts +3 -0
  2. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-CJYBHKUf.mjs → acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs} +243 -51
  3. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs.map +1 -0
  4. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Cc-hsCCX.mjs → acorex-modules-document-management-attachment-widget.component-Cc0anIMV.mjs} +2 -2
  5. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Cc-hsCCX.mjs.map → acorex-modules-document-management-attachment-widget.component-Cc0anIMV.mjs.map} +1 -1
  6. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CMhwz1-0.mjs → acorex-modules-document-management-create-folder-dialog.component-BNcu8bzT.mjs} +2 -2
  7. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-CMhwz1-0.mjs.map → acorex-modules-document-management-create-folder-dialog.component-BNcu8bzT.mjs.map} +1 -1
  8. package/fesm2022/{acorex-modules-document-management-details-view.component-CqK0rCnR.mjs → acorex-modules-document-management-details-view.component-BeN0NPcy.mjs} +2 -2
  9. package/fesm2022/{acorex-modules-document-management-details-view.component-CqK0rCnR.mjs.map → acorex-modules-document-management-details-view.component-BeN0NPcy.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-document-management-drive-choose.component-r8KKbY1d.mjs → acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-document-management-drive-choose.component-r8KKbY1d.mjs.map → acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs.map} +1 -1
  12. package/fesm2022/{acorex-modules-document-management-drive.component-0wxNHSJr.mjs → acorex-modules-document-management-drive.component-CUej0GjY.mjs} +2 -2
  13. package/fesm2022/{acorex-modules-document-management-drive.component-0wxNHSJr.mjs.map → acorex-modules-document-management-drive.component-CUej0GjY.mjs.map} +1 -1
  14. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-z-EQb_uG.mjs → acorex-modules-document-management-large-icons-view.component-BuwrkLhe.mjs} +2 -2
  15. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-z-EQb_uG.mjs.map → acorex-modules-document-management-large-icons-view.component-BuwrkLhe.mjs.map} +1 -1
  16. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-Ce9h5m2O.mjs → acorex-modules-document-management-large-tiles-view.component-Cs-mjiQX.mjs} +2 -2
  17. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-Ce9h5m2O.mjs.map → acorex-modules-document-management-large-tiles-view.component-Cs-mjiQX.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-document-management-list-view.component-DZKdXqAA.mjs → acorex-modules-document-management-list-view.component-1M2rIOGv.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-document-management-list-view.component-DZKdXqAA.mjs.map → acorex-modules-document-management-list-view.component-1M2rIOGv.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-C31fYGZT.mjs → acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-C31fYGZT.mjs.map → acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-CMmT_vVe.mjs → acorex-modules-document-management-rename-node-dialog.component-DWzD41AV.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-CMmT_vVe.mjs.map → acorex-modules-document-management-rename-node-dialog.component-DWzD41AV.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-DI7c4jHZ.mjs → acorex-modules-document-management-small-icons-view.component-Dh5Di_2Y.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-DI7c4jHZ.mjs.map → acorex-modules-document-management-small-icons-view.component-Dh5Di_2Y.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-BYJfNu6O.mjs → acorex-modules-document-management-small-tiles-view.component-mOjQbw-f.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-BYJfNu6O.mjs.map → acorex-modules-document-management-small-tiles-view.component-mOjQbw-f.mjs.map} +1 -1
  28. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  29. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs +478 -0
  30. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs.map +1 -0
  31. package/fesm2022/acorex-modules-report-management.mjs +71 -125
  32. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  33. package/fesm2022/{acorex-modules-workflow-management-task-board.page-Dp7SJ3NA.mjs → acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs} +207 -86
  34. package/fesm2022/acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs.map +1 -0
  35. package/fesm2022/acorex-modules-workflow-management.mjs +2 -2
  36. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  37. package/package.json +1 -1
  38. package/report-management/index.d.ts +74 -36
  39. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-CJYBHKUf.mjs.map +0 -1
  40. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs +0 -634
  41. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs.map +0 -1
  42. package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs +0 -20
  43. package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs.map +0 -1
  44. package/fesm2022/acorex-modules-workflow-management-task-board.page-Dp7SJ3NA.mjs.map +0 -1
@@ -1,634 +0,0 @@
1
- import { AXBadgeModule } from '@acorex/components/badge';
2
- import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
3
- import * as i2$1 from '@acorex/components/button';
4
- import { AXButtonModule } from '@acorex/components/button';
5
- import * as i4 from '@acorex/components/decorators';
6
- import { AXDecoratorModule } from '@acorex/components/decorators';
7
- import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
8
- import { AXLoadingModule } from '@acorex/components/loading';
9
- import * as i3 from '@acorex/components/search-box';
10
- import { AXSearchBoxModule } from '@acorex/components/search-box';
11
- import { AXTabsModule } from '@acorex/components/tabs';
12
- import * as i5 from '@acorex/core/translation';
13
- import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
14
- import { AXUnsubscriber } from '@acorex/core/utils';
15
- import { AXPReportDefinitionService } from '@acorex/platform/common';
16
- import { AXPDynamicFormComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutToolbarComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';
17
- import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
18
- import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
19
- import * as i1 from '@angular/common';
20
- import { CommonModule } from '@angular/common';
21
- import * as i0 from '@angular/core';
22
- import { computed, inject, output, ViewEncapsulation, ChangeDetectionStrategy, Component, viewChild } from '@angular/core';
23
- import * as i1$1 from '@angular/forms';
24
- import { FormsModule } from '@angular/forms';
25
- import { ActivatedRoute, Router, NavigationEnd, RouterModule } from '@angular/router';
26
- import { merge, filter, startWith, firstValueFrom } from 'rxjs';
27
- import { AXPPageStatus } from '@acorex/platform/layout/builder';
28
- import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
29
- import { isNil, isEmpty } from 'lodash-es';
30
- import { AXLocaleService } from '@acorex/core/locale';
31
- import { RootConfig } from './acorex-modules-report-management.mjs';
32
- import { AXPCommandService } from '@acorex/platform/runtime';
33
- import * as i2 from '@acorex/components/tree-view';
34
- import { AXTreeViewModule } from '@acorex/components/tree-view';
35
- import { AXPWorkflowService } from '@acorex/platform/workflow';
36
-
37
- const AXPReportRunnerRootViewModel = signalStore(withState(() => ({
38
- activeCategory: undefined,
39
- categories: [],
40
- activeReport: undefined,
41
- reports: [],
42
- activeCategoriesPath: [],
43
- //
44
- searchExpression: null,
45
- //
46
- previousContext: {},
47
- context: {},
48
- //
49
- status: AXPPageStatus.Processing,
50
- form: null,
51
- })), withComputed((store, layout = inject(AXPLayoutThemeService)) => ({
52
- searchResults: computed(() => []),
53
- hasActiveReport: computed(() => store.activeReport() != null),
54
- hasActiveCategory: computed(() => store.activeCategory() != null),
55
- showSideMenu: computed(() => layout.isLarge()),
56
- isSearching: computed(() => store.searchExpression() != null),
57
- isBusy: computed(() => store.status() == AXPPageStatus.Processing),
58
- isRunning: computed(() => store.status() == AXPPageStatus.Submitting),
59
- isLoaded: computed(() => store.activeCategory() != null),
60
- title: computed(() => store.activeReport() ?
61
- store.activeReport()?.title :
62
- store.activeCategory()?.title ?? `@${RootConfig.config.i18n}:features.report-runner.page-title`),
63
- description: computed(() => store.activeReport() ?
64
- store.activeReport()?.description :
65
- store.activeCategory()?.description ?? `@${RootConfig.config.i18n}:features.report-runner.page-description`),
66
- formDefinition: computed(() => {
67
- const report = store.activeReport();
68
- if (!report || !report.parameterGroups) {
69
- return { groups: [] };
70
- }
71
- return {
72
- groups: report.parameterGroups.map(group => ({
73
- name: group.name,
74
- title: group.title,
75
- description: group.description,
76
- parameters: group.parameters.map(param => ({
77
- path: param.path,
78
- title: param.title,
79
- description: param.description,
80
- widget: param.widget
81
- }))
82
- }))
83
- };
84
- }),
85
- })), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService), commandService = inject(AXPCommandService)) => ({
86
- async loadRootCategories() {
87
- patchState(store, {
88
- activeCategory: undefined,
89
- activeReport: undefined,
90
- reports: [],
91
- activeCategoriesPath: [],
92
- });
93
- //
94
- patchState(store, {
95
- status: AXPPageStatus.Processing,
96
- });
97
- patchState(store, {
98
- categories: await reportDefinitionService.getCategories(),
99
- });
100
- patchState(store, {
101
- status: AXPPageStatus.Idle,
102
- });
103
- },
104
- async getCategories(parentId) {
105
- patchState(store, {
106
- status: AXPPageStatus.Processing,
107
- });
108
- //
109
- const result = await reportDefinitionService.getCategories(parentId);
110
- //
111
- patchState(store, {
112
- status: AXPPageStatus.Idle,
113
- });
114
- //
115
- return result;
116
- },
117
- async getReports(categoryId) {
118
- patchState(store, {
119
- status: AXPPageStatus.Processing,
120
- });
121
- //
122
- const result = await reportDefinitionService.getReportsByCategoryId(categoryId);
123
- //
124
- patchState(store, {
125
- status: AXPPageStatus.Idle,
126
- });
127
- //
128
- return result;
129
- },
130
- registerForm(form) {
131
- patchState(store, {
132
- form: form,
133
- });
134
- },
135
- updateContext(context) {
136
- patchState(store, {
137
- context: { ...store.context(), ...context },
138
- });
139
- },
140
- updatePreviousContext(context) {
141
- patchState(store, {
142
- previousContext: { ...store.previousContext(), ...context },
143
- });
144
- },
145
- async setActiveCategory(category) {
146
- //
147
- patchState(store, {
148
- status: AXPPageStatus.Processing,
149
- });
150
- //
151
- patchState(store, {
152
- activeCategory: category,
153
- });
154
- //
155
- patchState(store, {
156
- categories: await reportDefinitionService.getCategories(category.id),
157
- reports: await reportDefinitionService.getReportsByCategoryId(category.id),
158
- activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
159
- });
160
- //
161
- patchState(store, {
162
- status: AXPPageStatus.Idle,
163
- });
164
- },
165
- async setActiveCategoryById(id) {
166
- //
167
- patchState(store, {
168
- status: AXPPageStatus.Processing,
169
- });
170
- //
171
- const category = await reportDefinitionService.getCategoryById(id);
172
- if (category) {
173
- patchState(store, {
174
- activeCategory: category,
175
- });
176
- //
177
- patchState(store, {
178
- categories: await reportDefinitionService.getCategories(category.id),
179
- reports: await reportDefinitionService.getReportsByCategoryId(category.id),
180
- activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
181
- });
182
- }
183
- //
184
- patchState(store, {
185
- status: AXPPageStatus.Idle,
186
- });
187
- },
188
- unsetActiveReport() {
189
- patchState(store, {
190
- activeReport: undefined,
191
- });
192
- },
193
- async setActivateReportById(id) {
194
- const report = await reportDefinitionService.getReportById(id);
195
- if (report) {
196
- report?.parameterGroups.forEach(group => {
197
- group.parameters.forEach(param => {
198
- param.widget.path = param.path;
199
- });
200
- });
201
- patchState(store, {
202
- activeReport: report,
203
- });
204
- }
205
- },
206
- //
207
- async search(expression) {
208
- if (!isNil(expression) && !isEmpty(expression)) {
209
- patchState(store, {
210
- searchExpression: expression,
211
- });
212
- }
213
- else {
214
- patchState(store, {
215
- searchExpression: null,
216
- });
217
- }
218
- },
219
- clearSearch() {
220
- patchState(store, {
221
- searchExpression: null,
222
- });
223
- },
224
- async run() {
225
- patchState(store, {
226
- status: AXPPageStatus.Submitting,
227
- });
228
- //
229
- try {
230
- await commandService.execute(`${RootConfig.entities.report.fullName}:Run`, {
231
- reportId: store.activeReport()?.id,
232
- context: store.context(),
233
- });
234
- }
235
- catch (error) {
236
- console.error(error);
237
- }
238
- finally {
239
- patchState(store, {
240
- status: AXPPageStatus.Idle,
241
- });
242
- }
243
- },
244
- async discard() {
245
- const form = store.form();
246
- form.resetErrors();
247
- //
248
- patchState(store, {
249
- status: AXPPageStatus.Idle,
250
- });
251
- patchState(store, {
252
- context: store.previousContext(),
253
- });
254
- },
255
- async resetToDefault() {
256
- },
257
- })), withHooks((store, translationService = inject(AXTranslationService), localeService = inject(AXLocaleService)) => ({
258
- async onInit() {
259
- merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {
260
- });
261
- //
262
- await store.loadRootCategories();
263
- },
264
- onDestroy() { },
265
- })));
266
-
267
- //#region ---- Imports ----
268
- //#endregion
269
- class AXPReportCategoriesTreeComponent {
270
- constructor() {
271
- //#region ---- Services & Dependencies ----
272
- this.reportDefinitionService = inject(AXPReportDefinitionService);
273
- //#endregion
274
- //#region ---- Output Events ----
275
- /**
276
- * Emitted when a category node is clicked
277
- */
278
- this.categoryClick = output();
279
- /**
280
- * Emitted when a report node is clicked
281
- */
282
- this.reportClick = output();
283
- //#endregion
284
- //#region ---- Data Loading Methods ----
285
- /**
286
- * Provide lazy loading tree data
287
- */
288
- this.provideLazyTreeView = async (selectedItemId) => {
289
- if (selectedItemId) {
290
- const categories = (await this.reportDefinitionService.getCategories(selectedItemId)).map((item) => ({
291
- id: item.id,
292
- title: item.title,
293
- hasChild: (item.hasChild || item.hasReport) ?? false,
294
- item: item,
295
- type: 'category',
296
- expanded: isNil(item.parentId) ? true : false,
297
- }));
298
- const definitions = (await this.reportDefinitionService.getReportsByCategoryId(selectedItemId)).map((item) => ({
299
- id: item.id,
300
- title: item.title,
301
- hasChild: false,
302
- item: item,
303
- type: 'definition',
304
- expanded: false,
305
- }));
306
- return [...categories, ...definitions];
307
- }
308
- else {
309
- const categories = await this.reportDefinitionService.getCategories();
310
- const items = categories.map((item) => ({
311
- id: item.id,
312
- title: item.title,
313
- hasChild: (item.hasChild || item.hasReport) ?? false,
314
- item: item,
315
- type: 'category',
316
- expanded: false,
317
- }));
318
- return items;
319
- }
320
- };
321
- }
322
- //#endregion
323
- //#region ---- Event Handlers ----
324
- /**
325
- * Handle tree node click events
326
- */
327
- async handleNodeClick(event) {
328
- const node = event.data;
329
- if (node.type === 'category') {
330
- this.categoryClick.emit(node.item);
331
- }
332
- else if (node.type === 'definition') {
333
- this.reportClick.emit(node.item);
334
- }
335
- }
336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
337
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPReportCategoriesTreeComponent, isStandalone: true, selector: "axp-report-categories-tree", outputs: { categoryClick: "categoryClick", reportClick: "reportClick" }, host: { classAttribute: "axp-report-categories-tree" }, ngImport: i0, template: "<ax-tree-view\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTreeViewModule }, { kind: "component", type: i2.AXTreeViewComponent, selector: "ax-tree-view", inputs: ["items", "showCheckbox", "hasCheckboxField", "selectionMode", "selectionBehavior", "selectionScope", "focusNodeEnabled", "valueField", "textField", "visibleField", "disableField", "hasChildField", "selectedField", "expandedField", "tooltipField", "childrenField", "activeField", "indeterminateField", "parentField", "iconField", "toggleIcons", "look", "showEmptyNodeMassage", "itemTemplate", "emptyTemplate", "expandOn"], outputs: ["onSelectionChanged", "onItemSelectedChanged", "onNodeClick", "onCollapsedChanged", "onNodedbClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
338
- }
339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, decorators: [{
340
- type: Component,
341
- args: [{ selector: 'axp-report-categories-tree', standalone: true, imports: [
342
- CommonModule,
343
- AXDecoratorModule,
344
- AXTreeViewModule,
345
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-report-categories-tree' }, template: "<ax-tree-view\n [showCheckbox]=\"false\"\n [itemTemplate]=\"itemTemplate\"\n [textField]=\"'title'\"\n [hasChildField]=\"'hasChild'\"\n [valueField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [items]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n>\n</ax-tree-view>\n\n<ng-template #itemTemplate let-item>\n @if (item.type === 'category') {\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n } @else {\n <ax-icon class=\"fas ax-text-accent1 fa-file-chart-column\"></ax-icon>\n }\n {{ item.title }}\n</ng-template>\n", styles: [".axp-report-categories-tree{height:100%;width:100%}.axp-report-categories-tree .__tree-view .__item{display:flex;align-items:center;gap:.5rem}.axp-report-categories-tree .__tree-view .__item .__icon{flex-shrink:0}.axp-report-categories-tree .__tree-view .__item .__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axp-report-categories-tree .__tree-view .__item:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}\n"] }]
346
- }] });
347
-
348
- class AXMReportRunnerRootPageComponent extends AXPPageLayoutBaseComponent {
349
- constructor() {
350
- super(...arguments);
351
- this.vm = inject(AXPReportRunnerRootViewModel);
352
- this.layoutService = inject(AXPLayoutThemeService);
353
- this.activatedRoute = inject(ActivatedRoute);
354
- this.unsubscribe = inject(AXUnsubscriber);
355
- this.reportDefinitionService = inject(AXPReportDefinitionService);
356
- this.dynamicForm = viewChild(AXPDynamicFormComponent);
357
- this.workflow = inject(AXPWorkflowService);
358
- this.router = inject(Router);
359
- this.baseRoutes = [this.sessionService.application?.name, 'report-management', 'reports'];
360
- this.defaultLayout = computed(() => {
361
- return {
362
- positions: {
363
- default: { colSpan: 12 },
364
- md: { colSpan: 8 },
365
- lg: { colSpan: 6 },
366
- xl: { colSpan: this.layoutService.isSideMenuOpen() ? 5 : 4 },
367
- xxl: { colSpan: 4 },
368
- },
369
- };
370
- });
371
- }
372
- async ngOnInit() {
373
- await super.ngOnInit();
374
- //
375
- this.router.events
376
- .pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))
377
- .subscribe(async () => {
378
- await this.loadFromRoute();
379
- });
380
- }
381
- ngAfterViewInit() {
382
- // Register the form from the dynamic form component when available
383
- const form = this.dynamicForm()?.getForm();
384
- if (form) {
385
- this.vm.registerForm(form);
386
- }
387
- }
388
- handleContextChanged(context) {
389
- this.vm.updateContext(context);
390
- }
391
- handleContextInitiated(context) {
392
- this.vm.updatePreviousContext(context);
393
- }
394
- async loadFromRoute() {
395
- const snapshot = this.activatedRoute.snapshot;
396
- const segments = await firstValueFrom(this.activatedRoute.url);
397
- let categoryId = segments[segments.length - 1]?.path ?? null;
398
- if (categoryId) {
399
- await this.vm.setActiveCategoryById(categoryId);
400
- }
401
- else {
402
- await this.vm.loadRootCategories();
403
- return;
404
- }
405
- //
406
- let reportId = snapshot.queryParamMap.get('report') ?? null;
407
- if (reportId) {
408
- await this.vm.setActivateReportById(reportId);
409
- }
410
- else {
411
- await this.vm.unsetActiveReport();
412
- }
413
- }
414
- //#region ---- Event Handlers ----
415
- /**
416
- * Handle category selection from tree
417
- */
418
- async onCategoryClick(category) {
419
- await this.navigateToCategory(category);
420
- }
421
- /**
422
- * Handle report selection from tree
423
- */
424
- async onReportClick(report) {
425
- await this.navigateToReport(report);
426
- }
427
- /**
428
- * Navigate to report viewer with current report and parameters
429
- */
430
- async navigateToViewer() {
431
- const activeReport = this.vm.activeReport();
432
- if (!activeReport) {
433
- return;
434
- }
435
- const parameters = this.vm.context();
436
- const baseViewerRoute = [this.sessionService.application?.name, 'report-management', 'viewer'];
437
- await this.router.navigate(baseViewerRoute, {
438
- queryParams: {
439
- reportId: activeReport.id,
440
- // Include current form parameters as query params for auto-execution
441
- ...parameters
442
- }
443
- });
444
- }
445
- //#endregion
446
- async navigateToCategory(category) {
447
- // Find the path to this category
448
- const path = await this.reportDefinitionService.getCategoriesPathById(category.id);
449
- // Find the index of the target category in the path
450
- let urlParts = [...this.baseRoutes];
451
- for (const cat of path) {
452
- urlParts.push(cat.id);
453
- }
454
- await this.router.navigate(urlParts);
455
- }
456
- async navigateToReport(report) {
457
- // Use the current category path for the URL
458
- const path = await this.reportDefinitionService.getCategoriesPathByReportId(report.id);
459
- let urlParts = [...this.baseRoutes];
460
- for (const cat of path) {
461
- urlParts.push(cat.id);
462
- }
463
- await this.router.navigate(urlParts, { queryParams: { report: report.id } });
464
- }
465
- //#region ---------------- Page Configuration Overrides ----------------
466
- async getPageBreadcrumbs() {
467
- const path = this.vm.activeCategoriesPath();
468
- const report = {
469
- name: 'reports',
470
- title: await this.translateService.translateAsync('@report-management:features.report-runner.menu-title'),
471
- command: {
472
- name: 'navigate-to-reports-root',
473
- },
474
- };
475
- if (!path || path.length === 0) {
476
- return [report];
477
- }
478
- const breadcrumbs = [report];
479
- let urlParts = [...this.baseRoutes];
480
- for (const cat of path) {
481
- urlParts = [...urlParts, cat.id];
482
- breadcrumbs.push({
483
- name: cat.id,
484
- title: cat.title,
485
- command: {
486
- name: 'navigate-to-category',
487
- options: {
488
- category: cat,
489
- },
490
- },
491
- });
492
- }
493
- return breadcrumbs;
494
- }
495
- async getSecondaryMenuItems() {
496
- if (this.vm.activeCategory()) {
497
- return [
498
- {
499
- title: await this.translateService.translateAsync('actions.restore-defaults.title', { scope: 'settings' }),
500
- icon: 'fa-light fa-rotate-left',
501
- color: 'danger',
502
- command: {
503
- name: 'restore-defaults',
504
- },
505
- },
506
- ];
507
- }
508
- return [];
509
- }
510
- async getPageTitle() {
511
- return this.vm.title();
512
- }
513
- async getPageDescription() {
514
- return this.vm.description();
515
- }
516
- async getBackButton() {
517
- const categoriesPath = this.vm.activeCategoriesPath();
518
- if (!categoriesPath || categoriesPath.length === 0) {
519
- // At root level, no back button
520
- return null;
521
- }
522
- if (categoriesPath.length === 1) {
523
- // At first level category, back to reports root
524
- return {
525
- title: await this.translateService.translateAsync('@report-management:features.report-runner.menu-title'),
526
- };
527
- }
528
- // At deeper level, back to parent category
529
- const parentCategory = categoriesPath[categoriesPath.length - 2];
530
- return {
531
- title: parentCategory.title,
532
- };
533
- }
534
- async onBackButtonClick() {
535
- const categoriesPath = this.vm.activeCategoriesPath();
536
- if (!categoriesPath || categoriesPath.length <= 1) {
537
- // Navigate back to reports root
538
- await this.router.navigate([...this.baseRoutes]);
539
- }
540
- else {
541
- // Navigate to parent category
542
- const parentCategoriesPath = categoriesPath.slice(0, -1);
543
- let urlParts = [...this.baseRoutes];
544
- for (const cat of parentCategoriesPath) {
545
- urlParts.push(cat.id);
546
- }
547
- await this.router.navigate(urlParts);
548
- }
549
- }
550
- async execute(command) {
551
- switch (command.name) {
552
- case 'restore-defaults':
553
- await this.vm.resetToDefault();
554
- break;
555
- case 'navigate-to-category':
556
- await this.navigateToCategory(command.options?.['category']);
557
- break;
558
- case 'navigate-to-reports-root':
559
- await this.router.navigate([...this.baseRoutes]);
560
- break;
561
- case 'create-report':
562
- await this.workflow.execute('report-create', {
563
- data: {
564
- categoryId: this.vm.activeCategory()?.id ?? null,
565
- },
566
- });
567
- break;
568
- }
569
- }
570
- async getPrimaryMenuItems() {
571
- return [
572
- {
573
- title: 't("actions.create")',
574
- icon: 'fa-light fa-plus',
575
- color: 'primary',
576
- command: {
577
- name: 'create-report',
578
- },
579
- },
580
- ];
581
- }
582
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
583
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXMReportRunnerRootPageComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "axp-report-runner-root-page" }, providers: [
584
- AXUnsubscriber,
585
- AXPReportRunnerRootViewModel,
586
- {
587
- provide: AXPPageLayoutBase,
588
- useExisting: AXMReportRunnerRootPageComponent,
589
- },
590
- ], viewQueries: [{ propertyName: "dynamicForm", first: true, predicate: AXPDynamicFormComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showSideMenu()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ t('@report-management:features.report-runner.menu-title') | async }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n [delayTime]=\"300\"\n [ngModel]=\"vm.searchExpression()\"\n (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"t('search.placeholder') | async\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <axp-report-categories-tree (categoryClick)=\"onCategoryClick($event)\" (reportClick)=\"onReportClick($event)\" />\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content>\n @if (vm.showSideMenu()) {\n <!-- Desktop: Show parameters view when report is selected, or grid browser when no report -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n } @else {\n <!-- Mobile: Show parameters view when report is selected, or mobile browser for navigation -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n }\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content when no report selected -->\n <ng-template #browser>\n <div class=\"__reports-browser __desktop\">\n @if (vm.categories().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Categories</h3>\n <div class=\"__items-grid\">\n @for (category of vm.categories(); track category.id) {\n <div class=\"__item __category\" (click)=\"navigateToCategory(category)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-folder\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ category.title }}</div>\n @if (category.description) {\n <div class=\"__item-description\">{{ category.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.reports().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Reports</h3>\n <div class=\"__items-grid\">\n @for (report of vm.reports(); track report.id) {\n <div class=\"__item __report\" (click)=\"navigateToReport(report)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-file-chart-column\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ report.title }}</div>\n @if (report.description) {\n <div class=\"__item-description\">{{ report.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.categories().length === 0 && vm.reports().length === 0) {\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </div>\n <div class=\"__empty-content\">\n <h4>No items found</h4>\n <p>There are no categories or reports available in this location.</p>\n </div>\n </div>\n }\n </div>\n </ng-template>\n\n @if (vm.hasActiveReport()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [disabled]=\"vm.isBusy()\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n (onClick)=\"navigateToViewer()\"\n [color]=\"'primary'\"\n >\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 }\n</axp-page-layout>\n", styles: [".axp-report-runner-root-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-runner-root-page axp-layout-start-side{width:24rem}}.axp-report-runner-root-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding-left:1rem;padding-right:1rem}.axp-report-runner-root-page .__reports-browser>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser{padding:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser.__mobile{padding:1rem}.axp-report-runner-root-page .__reports-browser .__section>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser .__section .__section-title{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-runner-root-page .__reports-browser .__section .__section-title ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1rem}@media (min-width: 768px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 2560px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{cursor:pointer;border-radius:.5rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;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-runner-root-page .__reports-browser .__section .__items-grid .__item:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{display:flex;align-items:flex-start;gap:.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-icon{display:flex;height:2.5rem;width:2.5rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.25rem;font-size:1.125rem;line-height:1.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content{min-width:0px;flex:1 1 0%}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-description{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon{background-color:rgba(var(--ax-sys-color-warning-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-warning-500),.05)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon{background-color:rgba(var(--ax-sys-color-primary-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-primary-500),.05)}.axp-report-runner-root-page .__reports-browser.__mobile .__mobile-search{margin-bottom:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid{grid-template-columns:repeat(1,minmax(0,1fr));gap:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item{padding:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-icon{height:2rem;width:2rem;font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-title{font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-description{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;font-size:.75rem;line-height:1rem}.axp-report-runner-root-page .__reports-browser .__empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:4rem;padding-bottom:4rem;text-align:center}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;opacity:.5}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content h4{margin-bottom:.5rem;font-size:1.5rem;font-weight:500;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content p{max-width:28rem;opacity:74%;display:block;font-size:1rem;font-weight:400;line-height:1.625rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
591
- //
592
- AXSearchBoxModule }, { kind: "component", type: i3.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", 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: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { 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: AXTabsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type:
593
- //
594
- AXPPageLayoutComponent, selector: "axp-page-layout" }, { 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: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type:
595
- //
596
- AXPDynamicFormComponent, selector: "axp-dynamic-form", inputs: ["formDefinition", "context", "layoutStyle", "layoutConfig"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "component", type: AXPReportCategoriesTreeComponent, selector: "axp-report-categories-tree", outputs: ["categoryClick", "reportClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
597
- }
598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, decorators: [{
599
- type: Component,
600
- args: [{ standalone: true, imports: [
601
- CommonModule,
602
- FormsModule,
603
- RouterModule,
604
- //
605
- AXSearchBoxModule,
606
- AXDecoratorModule,
607
- AXBreadcrumbsModule,
608
- AXTranslationModule,
609
- AXButtonModule,
610
- AXTabsModule,
611
- AXBadgeModule,
612
- AXLoadingModule,
613
- AXDropdownButtonModule,
614
- //
615
- AXPPageLayoutComponent,
616
- AXPThemeLayoutBlockComponent,
617
- AXPThemeLayoutToolbarComponent,
618
- AXPThemeLayoutHeaderComponent,
619
- AXPThemeLayoutStartSideComponent,
620
- //
621
- AXPDynamicFormComponent,
622
- AXPReportCategoriesTreeComponent,
623
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
624
- AXUnsubscriber,
625
- AXPReportRunnerRootViewModel,
626
- {
627
- provide: AXPPageLayoutBase,
628
- useExisting: AXMReportRunnerRootPageComponent,
629
- },
630
- ], host: { class: 'axp-report-runner-root-page' }, template: "<axp-page-layout *translate=\"let t\">\n @if (vm.showSideMenu()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ t('@report-management:features.report-runner.menu-title') | async }}</axp-layout-title>\n <axp-layout-toolbar>\n <ax-search-box\n [delayTime]=\"300\"\n [ngModel]=\"vm.searchExpression()\"\n (onValueChanged)=\"vm.search($event.value)\"\n [placeholder]=\"t('search.placeholder') | async\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </axp-layout-toolbar>\n </axp-layout-header>\n <axp-layout-content>\n <axp-report-categories-tree (categoryClick)=\"onCategoryClick($event)\" (reportClick)=\"onReportClick($event)\" />\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content>\n @if (vm.showSideMenu()) {\n <!-- Desktop: Show parameters view when report is selected, or grid browser when no report -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n } @else {\n <!-- Mobile: Show parameters view when report is selected, or mobile browser for navigation -->\n @if (vm.hasActiveReport()) {\n <div class=\"__parameters-view\">\n <axp-dynamic-form\n [formDefinition]=\"vm.formDefinition()\"\n [context]=\"vm.context()\"\n [layoutConfig]=\"defaultLayout()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-dynamic-form>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n }\n }\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content when no report selected -->\n <ng-template #browser>\n <div class=\"__reports-browser __desktop\">\n @if (vm.categories().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Categories</h3>\n <div class=\"__items-grid\">\n @for (category of vm.categories(); track category.id) {\n <div class=\"__item __category\" (click)=\"navigateToCategory(category)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-folder\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ category.title }}</div>\n @if (category.description) {\n <div class=\"__item-description\">{{ category.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.reports().length > 0) {\n <div class=\"__section\">\n <h3 class=\"__section-title\">Reports</h3>\n <div class=\"__items-grid\">\n @for (report of vm.reports(); track report.id) {\n <div class=\"__item __report\" (click)=\"navigateToReport(report)\">\n <div class=\"__item-icon\">\n <ax-icon class=\"fa-solid fa-file-chart-column\"></ax-icon>\n </div>\n <div class=\"__item-content\">\n <div class=\"__item-title\">{{ report.title }}</div>\n @if (report.description) {\n <div class=\"__item-description\">{{ report.description }}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n @if (vm.categories().length === 0 && vm.reports().length === 0) {\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </div>\n <div class=\"__empty-content\">\n <h4>No items found</h4>\n <p>There are no categories or reports available in this location.</p>\n </div>\n </div>\n }\n </div>\n </ng-template>\n\n @if (vm.hasActiveReport()) {\n <axp-page-footer class=\"--animated\">\n <axp-layout-suffix>\n <ax-button\n [class.ax-sm]=\"layoutService.isSmall()\"\n [disabled]=\"vm.isBusy()\"\n [text]=\"t('@report-management:features.report-viewer.actions.execute') | async\"\n (onClick)=\"navigateToViewer()\"\n [color]=\"'primary'\"\n >\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 }\n</axp-page-layout>\n", styles: [".axp-report-runner-root-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-runner-root-page axp-layout-start-side{width:24rem}}.axp-report-runner-root-page axp-layout-start-side axp-layout-content{overflow-x:auto;padding-left:1rem;padding-right:1rem}.axp-report-runner-root-page .__reports-browser>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser{padding:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser.__mobile{padding:1rem}.axp-report-runner-root-page .__reports-browser .__section>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.axp-report-runner-root-page .__reports-browser .__section .__section-title{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600}.axp-report-runner-root-page .__reports-browser .__section .__section-title ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1rem}@media (min-width: 768px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 2560px){.axp-report-runner-root-page .__reports-browser .__section .__items-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{cursor:pointer;border-radius:.5rem;border-width:1px;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;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-runner-root-page .__reports-browser .__section .__items-grid .__item:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item{display:flex;align-items:flex-start;gap:.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-icon{display:flex;height:2.5rem;width:2.5rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:.25rem;font-size:1.125rem;line-height:1.75rem}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content{min-width:0px;flex:1 1 0%}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item .__item-content .__item-description{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:.875rem;line-height:1.25rem;opacity:.75}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon{background-color:rgba(var(--ax-sys-color-warning-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-warning-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__category:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-warning-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-warning-500),.05)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon{background-color:rgba(var(--ax-sys-color-primary-500),.1)}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report .__item-icon ax-icon{--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axp-report-runner-root-page .__reports-browser .__section .__items-grid .__item.__report:hover{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1));background-color:rgba(var(--ax-sys-color-primary-500),.05)}.axp-report-runner-root-page .__reports-browser.__mobile .__mobile-search{margin-bottom:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid{grid-template-columns:repeat(1,minmax(0,1fr));gap:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item{padding:.75rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-icon{height:2rem;width:2rem;font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-title{font-size:1rem;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser.__mobile .__section .__items-grid .__item .__item-content .__item-description{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;font-size:.75rem;line-height:1rem}.axp-report-runner-root-page .__reports-browser .__empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:4rem;padding-bottom:4rem;text-align:center}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-icon{margin-bottom:1rem;font-size:3.75rem;line-height:1;opacity:.5}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content h4{margin-bottom:.5rem;font-size:1.5rem;font-weight:500;line-height:1.5rem}.axp-report-runner-root-page .__reports-browser .__empty-state .__empty-content p{max-width:28rem;opacity:74%;display:block;font-size:1rem;font-weight:400;line-height:1.625rem}\n"] }]
631
- }] });
632
-
633
- export { AXMReportRunnerRootPageComponent };
634
- //# sourceMappingURL=acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs.map