@acorex/modules 20.0.20 → 20.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs +478 -0
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs.map +1 -0
- package/fesm2022/acorex-modules-report-management.mjs +71 -125
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/package.json +5 -5
- package/report-management/index.d.ts +74 -36
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs +0 -634
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs.map +0 -1
- package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs +0 -20
- package/fesm2022/acorex-modules-report-management-run.command-DHPmdkSZ.mjs.map +0 -1
package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-S8qyvs79.mjs
DELETED
@@ -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
|