@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.
- package/document-management/index.d.ts +3 -0
- package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-CJYBHKUf.mjs → acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs} +243 -51
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-Bte3VGKC.mjs.map +1 -0
- package/fesm2022/{acorex-modules-document-management-attachment-widget.component-Cc-hsCCX.mjs → acorex-modules-document-management-attachment-widget.component-Cc0anIMV.mjs} +2 -2
- 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
- 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
- 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
- package/fesm2022/{acorex-modules-document-management-details-view.component-CqK0rCnR.mjs → acorex-modules-document-management-details-view.component-BeN0NPcy.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-details-view.component-CqK0rCnR.mjs.map → acorex-modules-document-management-details-view.component-BeN0NPcy.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-r8KKbY1d.mjs → acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive-choose.component-r8KKbY1d.mjs.map → acorex-modules-document-management-drive-choose.component-B66wODCQ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-drive.component-0wxNHSJr.mjs → acorex-modules-document-management-drive.component-CUej0GjY.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-drive.component-0wxNHSJr.mjs.map → acorex-modules-document-management-drive.component-CUej0GjY.mjs.map} +1 -1
- 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
- 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
- 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
- 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
- package/fesm2022/{acorex-modules-document-management-list-view.component-DZKdXqAA.mjs → acorex-modules-document-management-list-view.component-1M2rIOGv.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-list-view.component-DZKdXqAA.mjs.map → acorex-modules-document-management-list-view.component-1M2rIOGv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-C31fYGZT.mjs → acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs} +2 -2
- package/fesm2022/{acorex-modules-document-management-permission-definition.provider-C31fYGZT.mjs.map → acorex-modules-document-management-permission-definition.provider-BEq3ySY3.mjs.map} +1 -1
- 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
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-modules-document-management.mjs +1 -1
- 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/fesm2022/{acorex-modules-workflow-management-task-board.page-Dp7SJ3NA.mjs → acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs} +207 -86
- package/fesm2022/acorex-modules-workflow-management-task-board.page-zaSchG-u.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +2 -2
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +1 -1
- package/report-management/index.d.ts +74 -36
- package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-CJYBHKUf.mjs.map +0 -1
- 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-workflow-management-task-board.page-Dp7SJ3NA.mjs.map +0 -1
package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs
ADDED
@@ -0,0 +1,478 @@
|
|
1
|
+
import { AXBadgeModule } from '@acorex/components/badge';
|
2
|
+
import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
|
3
|
+
import { AXButtonModule } from '@acorex/components/button';
|
4
|
+
import * as i4 from '@acorex/components/decorators';
|
5
|
+
import { AXDecoratorModule } from '@acorex/components/decorators';
|
6
|
+
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
7
|
+
import { AXLoadingModule } from '@acorex/components/loading';
|
8
|
+
import * as i3 from '@acorex/components/search-box';
|
9
|
+
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
10
|
+
import { AXTabsModule } from '@acorex/components/tabs';
|
11
|
+
import * as i5 from '@acorex/core/translation';
|
12
|
+
import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
|
13
|
+
import { AXUnsubscriber } from '@acorex/core/utils';
|
14
|
+
import { AXPReportDefinitionService } from '@acorex/platform/common';
|
15
|
+
import { AXPThemeLayoutBlockComponent, AXPThemeLayoutToolbarComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';
|
16
|
+
import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
|
17
|
+
import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
|
18
|
+
import * as i1 from '@angular/common';
|
19
|
+
import { CommonModule } from '@angular/common';
|
20
|
+
import * as i0 from '@angular/core';
|
21
|
+
import { computed, inject, output, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
22
|
+
import * as i1$1 from '@angular/forms';
|
23
|
+
import { FormsModule } from '@angular/forms';
|
24
|
+
import { ActivatedRoute, Router, NavigationEnd, RouterModule } from '@angular/router';
|
25
|
+
import { merge, filter, startWith, firstValueFrom } from 'rxjs';
|
26
|
+
import { AXPPageStatus } from '@acorex/platform/layout/builder';
|
27
|
+
import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
|
28
|
+
import { isNil, isEmpty } from 'lodash-es';
|
29
|
+
import { AXLocaleService } from '@acorex/core/locale';
|
30
|
+
import { RootConfig } from './acorex-modules-report-management.mjs';
|
31
|
+
import * as i2 from '@acorex/components/tree-view';
|
32
|
+
import { AXTreeViewModule } from '@acorex/components/tree-view';
|
33
|
+
import { AXPWorkflowService } from '@acorex/platform/workflow';
|
34
|
+
|
35
|
+
const AXPReportRunnerRootViewModel = signalStore(withState(() => ({
|
36
|
+
activeCategory: undefined,
|
37
|
+
categories: [],
|
38
|
+
reports: [],
|
39
|
+
activeCategoriesPath: [],
|
40
|
+
//
|
41
|
+
searchExpression: null,
|
42
|
+
//
|
43
|
+
status: AXPPageStatus.Processing,
|
44
|
+
})), withComputed((store, layout = inject(AXPLayoutThemeService)) => ({
|
45
|
+
searchResults: computed(() => []),
|
46
|
+
hasActiveCategory: computed(() => store.activeCategory() != null),
|
47
|
+
showSideMenu: computed(() => layout.isLarge()),
|
48
|
+
isSearching: computed(() => store.searchExpression() != null),
|
49
|
+
isBusy: computed(() => store.status() == AXPPageStatus.Processing),
|
50
|
+
isLoaded: computed(() => store.activeCategory() != null),
|
51
|
+
title: computed(() => store.activeCategory()?.title ?? `@${RootConfig.config.i18n}:features.report-runner.page-title`),
|
52
|
+
description: computed(() => store.activeCategory()?.description ?? `@${RootConfig.config.i18n}:features.report-runner.page-description`),
|
53
|
+
})), withMethods((store, reportDefinitionService = inject(AXPReportDefinitionService)) => ({
|
54
|
+
async loadRootCategories() {
|
55
|
+
patchState(store, {
|
56
|
+
activeCategory: undefined,
|
57
|
+
reports: [],
|
58
|
+
activeCategoriesPath: [],
|
59
|
+
});
|
60
|
+
//
|
61
|
+
patchState(store, {
|
62
|
+
status: AXPPageStatus.Processing,
|
63
|
+
});
|
64
|
+
patchState(store, {
|
65
|
+
categories: await reportDefinitionService.getCategories(),
|
66
|
+
});
|
67
|
+
patchState(store, {
|
68
|
+
status: AXPPageStatus.Idle,
|
69
|
+
});
|
70
|
+
},
|
71
|
+
async getCategories(parentId) {
|
72
|
+
patchState(store, {
|
73
|
+
status: AXPPageStatus.Processing,
|
74
|
+
});
|
75
|
+
//
|
76
|
+
const result = await reportDefinitionService.getCategories(parentId);
|
77
|
+
//
|
78
|
+
patchState(store, {
|
79
|
+
status: AXPPageStatus.Idle,
|
80
|
+
});
|
81
|
+
//
|
82
|
+
return result;
|
83
|
+
},
|
84
|
+
async getReports(categoryId) {
|
85
|
+
patchState(store, {
|
86
|
+
status: AXPPageStatus.Processing,
|
87
|
+
});
|
88
|
+
//
|
89
|
+
const result = await reportDefinitionService.getReportsByCategoryId(categoryId);
|
90
|
+
//
|
91
|
+
patchState(store, {
|
92
|
+
status: AXPPageStatus.Idle,
|
93
|
+
});
|
94
|
+
//
|
95
|
+
return result;
|
96
|
+
},
|
97
|
+
async setActiveCategory(category) {
|
98
|
+
//
|
99
|
+
patchState(store, {
|
100
|
+
status: AXPPageStatus.Processing,
|
101
|
+
});
|
102
|
+
//
|
103
|
+
patchState(store, {
|
104
|
+
activeCategory: category,
|
105
|
+
});
|
106
|
+
//
|
107
|
+
patchState(store, {
|
108
|
+
categories: await reportDefinitionService.getCategories(category.id),
|
109
|
+
reports: await reportDefinitionService.getReportsByCategoryId(category.id),
|
110
|
+
activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
|
111
|
+
});
|
112
|
+
//
|
113
|
+
patchState(store, {
|
114
|
+
status: AXPPageStatus.Idle,
|
115
|
+
});
|
116
|
+
},
|
117
|
+
async setActiveCategoryById(id) {
|
118
|
+
//
|
119
|
+
patchState(store, {
|
120
|
+
status: AXPPageStatus.Processing,
|
121
|
+
});
|
122
|
+
//
|
123
|
+
const category = await reportDefinitionService.getCategoryById(id);
|
124
|
+
if (category) {
|
125
|
+
patchState(store, {
|
126
|
+
activeCategory: category,
|
127
|
+
});
|
128
|
+
//
|
129
|
+
patchState(store, {
|
130
|
+
categories: await reportDefinitionService.getCategories(category.id),
|
131
|
+
reports: await reportDefinitionService.getReportsByCategoryId(category.id),
|
132
|
+
activeCategoriesPath: await reportDefinitionService.getCategoriesPathById(category.id),
|
133
|
+
});
|
134
|
+
}
|
135
|
+
//
|
136
|
+
patchState(store, {
|
137
|
+
status: AXPPageStatus.Idle,
|
138
|
+
});
|
139
|
+
},
|
140
|
+
//
|
141
|
+
async search(expression) {
|
142
|
+
if (!isNil(expression) && !isEmpty(expression)) {
|
143
|
+
patchState(store, {
|
144
|
+
searchExpression: expression,
|
145
|
+
});
|
146
|
+
}
|
147
|
+
else {
|
148
|
+
patchState(store, {
|
149
|
+
searchExpression: null,
|
150
|
+
});
|
151
|
+
}
|
152
|
+
},
|
153
|
+
clearSearch() {
|
154
|
+
patchState(store, {
|
155
|
+
searchExpression: null,
|
156
|
+
});
|
157
|
+
},
|
158
|
+
})), withHooks((store, translationService = inject(AXTranslationService), localeService = inject(AXLocaleService)) => ({
|
159
|
+
async onInit() {
|
160
|
+
merge(translationService.langChanges$, localeService.profileChanged$).subscribe(async () => {
|
161
|
+
});
|
162
|
+
//
|
163
|
+
await store.loadRootCategories();
|
164
|
+
},
|
165
|
+
onDestroy() { },
|
166
|
+
})));
|
167
|
+
|
168
|
+
//#region ---- Imports ----
|
169
|
+
//#endregion
|
170
|
+
class AXPReportCategoriesTreeComponent {
|
171
|
+
constructor() {
|
172
|
+
//#region ---- Services & Dependencies ----
|
173
|
+
this.reportDefinitionService = inject(AXPReportDefinitionService);
|
174
|
+
//#endregion
|
175
|
+
//#region ---- Output Events ----
|
176
|
+
/**
|
177
|
+
* Emitted when a category node is clicked
|
178
|
+
*/
|
179
|
+
this.categoryClick = output();
|
180
|
+
/**
|
181
|
+
* Emitted when a report node is clicked
|
182
|
+
*/
|
183
|
+
this.reportClick = output();
|
184
|
+
//#endregion
|
185
|
+
//#region ---- Data Loading Methods ----
|
186
|
+
/**
|
187
|
+
* Provide lazy loading tree data
|
188
|
+
*/
|
189
|
+
this.provideLazyTreeView = async (selectedItemId) => {
|
190
|
+
if (selectedItemId) {
|
191
|
+
const categories = (await this.reportDefinitionService.getCategories(selectedItemId)).map((item) => ({
|
192
|
+
id: item.id,
|
193
|
+
title: item.title,
|
194
|
+
hasChild: (item.hasChild || item.hasReport) ?? false,
|
195
|
+
item: item,
|
196
|
+
type: 'category',
|
197
|
+
expanded: isNil(item.parentId) ? true : false,
|
198
|
+
}));
|
199
|
+
const definitions = (await this.reportDefinitionService.getReportsByCategoryId(selectedItemId)).map((item) => ({
|
200
|
+
id: item.id,
|
201
|
+
title: item.title,
|
202
|
+
hasChild: false,
|
203
|
+
item: item,
|
204
|
+
type: 'definition',
|
205
|
+
expanded: false,
|
206
|
+
}));
|
207
|
+
return [...categories, ...definitions];
|
208
|
+
}
|
209
|
+
else {
|
210
|
+
const categories = await this.reportDefinitionService.getCategories();
|
211
|
+
const items = categories.map((item) => ({
|
212
|
+
id: item.id,
|
213
|
+
title: item.title,
|
214
|
+
hasChild: (item.hasChild || item.hasReport) ?? false,
|
215
|
+
item: item,
|
216
|
+
type: 'category',
|
217
|
+
expanded: false,
|
218
|
+
}));
|
219
|
+
return items;
|
220
|
+
}
|
221
|
+
};
|
222
|
+
}
|
223
|
+
//#endregion
|
224
|
+
//#region ---- Event Handlers ----
|
225
|
+
/**
|
226
|
+
* Handle tree node click events
|
227
|
+
*/
|
228
|
+
async handleNodeClick(event) {
|
229
|
+
const node = event.data;
|
230
|
+
if (node.type === 'category') {
|
231
|
+
this.categoryClick.emit(node.item);
|
232
|
+
}
|
233
|
+
else if (node.type === 'definition') {
|
234
|
+
this.reportClick.emit(node.item);
|
235
|
+
}
|
236
|
+
}
|
237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
238
|
+
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 }); }
|
239
|
+
}
|
240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPReportCategoriesTreeComponent, decorators: [{
|
241
|
+
type: Component,
|
242
|
+
args: [{ selector: 'axp-report-categories-tree', standalone: true, imports: [
|
243
|
+
CommonModule,
|
244
|
+
AXDecoratorModule,
|
245
|
+
AXTreeViewModule,
|
246
|
+
], 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"] }]
|
247
|
+
}] });
|
248
|
+
|
249
|
+
class AXMReportRunnerRootPageComponent extends AXPPageLayoutBaseComponent {
|
250
|
+
constructor() {
|
251
|
+
super(...arguments);
|
252
|
+
this.vm = inject(AXPReportRunnerRootViewModel);
|
253
|
+
this.layoutService = inject(AXPLayoutThemeService);
|
254
|
+
this.activatedRoute = inject(ActivatedRoute);
|
255
|
+
this.unsubscribe = inject(AXUnsubscriber);
|
256
|
+
this.reportDefinitionService = inject(AXPReportDefinitionService);
|
257
|
+
this.workflow = inject(AXPWorkflowService);
|
258
|
+
this.router = inject(Router);
|
259
|
+
this.baseRoutes = [this.sessionService.application?.name, 'report-management', 'reports'];
|
260
|
+
}
|
261
|
+
async ngOnInit() {
|
262
|
+
await super.ngOnInit();
|
263
|
+
//
|
264
|
+
this.router.events
|
265
|
+
.pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))
|
266
|
+
.subscribe(async () => {
|
267
|
+
await this.loadFromRoute();
|
268
|
+
});
|
269
|
+
}
|
270
|
+
async loadFromRoute() {
|
271
|
+
const snapshot = this.activatedRoute.snapshot;
|
272
|
+
const segments = await firstValueFrom(this.activatedRoute.url);
|
273
|
+
let categoryId = segments[segments.length - 1]?.path ?? null;
|
274
|
+
if (categoryId) {
|
275
|
+
await this.vm.setActiveCategoryById(categoryId);
|
276
|
+
}
|
277
|
+
else {
|
278
|
+
await this.vm.loadRootCategories();
|
279
|
+
return;
|
280
|
+
}
|
281
|
+
//
|
282
|
+
let reportId = snapshot.queryParamMap.get('report') ?? null;
|
283
|
+
if (reportId) {
|
284
|
+
// Navigate directly to viewer instead of showing parameters
|
285
|
+
await this.navigateToViewer(reportId);
|
286
|
+
}
|
287
|
+
}
|
288
|
+
//#region ---- Event Handlers ----
|
289
|
+
/**
|
290
|
+
* Handle category selection from tree
|
291
|
+
*/
|
292
|
+
async onCategoryClick(category) {
|
293
|
+
await this.navigateToCategory(category);
|
294
|
+
}
|
295
|
+
/**
|
296
|
+
* Handle report selection from tree
|
297
|
+
*/
|
298
|
+
async onReportClick(report) {
|
299
|
+
await this.navigateToReport(report);
|
300
|
+
}
|
301
|
+
/**
|
302
|
+
* Navigate directly to report viewer with the selected report
|
303
|
+
*/
|
304
|
+
async navigateToViewer(reportId) {
|
305
|
+
const baseViewerRoute = [this.sessionService.application?.name, 'report-management', 'viewer'];
|
306
|
+
await this.router.navigate(baseViewerRoute, {
|
307
|
+
queryParams: { reportId }
|
308
|
+
});
|
309
|
+
}
|
310
|
+
//#endregion
|
311
|
+
async navigateToCategory(category) {
|
312
|
+
// Find the path to this category
|
313
|
+
const path = await this.reportDefinitionService.getCategoriesPathById(category.id);
|
314
|
+
// Find the index of the target category in the path
|
315
|
+
let urlParts = [...this.baseRoutes];
|
316
|
+
for (const cat of path) {
|
317
|
+
urlParts.push(cat.id);
|
318
|
+
}
|
319
|
+
await this.router.navigate(urlParts);
|
320
|
+
}
|
321
|
+
async navigateToReport(report) {
|
322
|
+
// Navigate directly to viewer instead of showing parameters in runner
|
323
|
+
await this.navigateToViewer(report.id);
|
324
|
+
}
|
325
|
+
//#region ---- Page Configuration Overrides ----
|
326
|
+
async getPageBreadcrumbs() {
|
327
|
+
const path = this.vm.activeCategoriesPath();
|
328
|
+
const report = {
|
329
|
+
name: 'reports',
|
330
|
+
title: await this.translateService.translateAsync('@report-management:root-menu'),
|
331
|
+
command: {
|
332
|
+
name: 'navigate-to-reports-root',
|
333
|
+
},
|
334
|
+
};
|
335
|
+
if (!path || path.length === 0) {
|
336
|
+
return [report];
|
337
|
+
}
|
338
|
+
const breadcrumbs = [report];
|
339
|
+
let urlParts = [...this.baseRoutes];
|
340
|
+
for (const cat of path) {
|
341
|
+
urlParts = [...urlParts, cat.id];
|
342
|
+
breadcrumbs.push({
|
343
|
+
name: cat.id,
|
344
|
+
title: cat.title,
|
345
|
+
command: {
|
346
|
+
name: 'navigate-to-category',
|
347
|
+
options: {
|
348
|
+
category: cat,
|
349
|
+
},
|
350
|
+
},
|
351
|
+
});
|
352
|
+
}
|
353
|
+
return breadcrumbs;
|
354
|
+
}
|
355
|
+
async getSecondaryMenuItems() {
|
356
|
+
return [];
|
357
|
+
}
|
358
|
+
async getPageTitle() {
|
359
|
+
return this.vm.title();
|
360
|
+
}
|
361
|
+
async getPageDescription() {
|
362
|
+
return this.vm.description();
|
363
|
+
}
|
364
|
+
async getBackButton() {
|
365
|
+
const categoriesPath = this.vm.activeCategoriesPath();
|
366
|
+
if (!categoriesPath || categoriesPath.length === 0) {
|
367
|
+
// At root level, no back button
|
368
|
+
return null;
|
369
|
+
}
|
370
|
+
if (categoriesPath.length === 1) {
|
371
|
+
// At first level category, back to reports root
|
372
|
+
return {
|
373
|
+
title: await this.translateService.translateAsync('@report-management:root-menu'),
|
374
|
+
};
|
375
|
+
}
|
376
|
+
// At deeper level, back to parent category
|
377
|
+
const parentCategory = categoriesPath[categoriesPath.length - 2];
|
378
|
+
return {
|
379
|
+
title: parentCategory.title,
|
380
|
+
};
|
381
|
+
}
|
382
|
+
async onBackButtonClick() {
|
383
|
+
const categoriesPath = this.vm.activeCategoriesPath();
|
384
|
+
if (!categoriesPath || categoriesPath.length <= 1) {
|
385
|
+
// Navigate back to reports root
|
386
|
+
await this.router.navigate([...this.baseRoutes]);
|
387
|
+
}
|
388
|
+
else {
|
389
|
+
// Navigate to parent category
|
390
|
+
const parentCategoriesPath = categoriesPath.slice(0, -1);
|
391
|
+
let urlParts = [...this.baseRoutes];
|
392
|
+
for (const cat of parentCategoriesPath) {
|
393
|
+
urlParts.push(cat.id);
|
394
|
+
}
|
395
|
+
await this.router.navigate(urlParts);
|
396
|
+
}
|
397
|
+
}
|
398
|
+
async execute(command) {
|
399
|
+
switch (command.name) {
|
400
|
+
case 'navigate-to-category':
|
401
|
+
await this.navigateToCategory(command.options?.['category']);
|
402
|
+
break;
|
403
|
+
case 'navigate-to-reports-root':
|
404
|
+
await this.router.navigate([...this.baseRoutes]);
|
405
|
+
break;
|
406
|
+
case 'create-report':
|
407
|
+
await this.workflow.execute('report-create', {
|
408
|
+
data: {
|
409
|
+
categoryId: this.vm.activeCategory()?.id ?? null,
|
410
|
+
},
|
411
|
+
});
|
412
|
+
break;
|
413
|
+
}
|
414
|
+
}
|
415
|
+
async getPrimaryMenuItems() {
|
416
|
+
return [
|
417
|
+
{
|
418
|
+
title: 't("actions.create")',
|
419
|
+
icon: 'fa-light fa-plus',
|
420
|
+
color: 'primary',
|
421
|
+
command: {
|
422
|
+
name: 'create-report',
|
423
|
+
},
|
424
|
+
},
|
425
|
+
];
|
426
|
+
}
|
427
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
428
|
+
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: [
|
429
|
+
AXUnsubscriber,
|
430
|
+
AXPReportRunnerRootViewModel,
|
431
|
+
{
|
432
|
+
provide: AXPPageLayoutBase,
|
433
|
+
useExisting: AXMReportRunnerRootPageComponent,
|
434
|
+
},
|
435
|
+
], 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 <!-- Desktop and Mobile: Always show browser template -->\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content -->\n <ng-template #browser>\n <div class=\"__reports-browser\">\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</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:.75rem}@media (min-width: 1024px){.axp-report-runner-root-page .__reports-browser{padding:1.5rem}}.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 .__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:
|
436
|
+
//
|
437
|
+
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: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type:
|
438
|
+
//
|
439
|
+
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:
|
440
|
+
//
|
441
|
+
AXPReportCategoriesTreeComponent, selector: "axp-report-categories-tree", outputs: ["categoryClick", "reportClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
442
|
+
}
|
443
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMReportRunnerRootPageComponent, decorators: [{
|
444
|
+
type: Component,
|
445
|
+
args: [{ standalone: true, imports: [
|
446
|
+
CommonModule,
|
447
|
+
FormsModule,
|
448
|
+
RouterModule,
|
449
|
+
//
|
450
|
+
AXSearchBoxModule,
|
451
|
+
AXDecoratorModule,
|
452
|
+
AXBreadcrumbsModule,
|
453
|
+
AXTranslationModule,
|
454
|
+
AXButtonModule,
|
455
|
+
AXTabsModule,
|
456
|
+
AXBadgeModule,
|
457
|
+
AXLoadingModule,
|
458
|
+
AXDropdownButtonModule,
|
459
|
+
//
|
460
|
+
AXPPageLayoutComponent,
|
461
|
+
AXPThemeLayoutBlockComponent,
|
462
|
+
AXPThemeLayoutToolbarComponent,
|
463
|
+
AXPThemeLayoutHeaderComponent,
|
464
|
+
AXPThemeLayoutStartSideComponent,
|
465
|
+
//
|
466
|
+
AXPReportCategoriesTreeComponent,
|
467
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
468
|
+
AXUnsubscriber,
|
469
|
+
AXPReportRunnerRootViewModel,
|
470
|
+
{
|
471
|
+
provide: AXPPageLayoutBase,
|
472
|
+
useExisting: AXMReportRunnerRootPageComponent,
|
473
|
+
},
|
474
|
+
], 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 <!-- Desktop and Mobile: Always show browser template -->\n <ng-container *ngTemplateOutlet=\"browser\"> </ng-container>\n </axp-page-content>\n\n <!-- Desktop: Grid-based browser for main content -->\n <ng-template #browser>\n <div class=\"__reports-browser\">\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</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:.75rem}@media (min-width: 1024px){.axp-report-runner-root-page .__reports-browser{padding:1.5rem}}.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 .__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"] }]
|
475
|
+
}] });
|
476
|
+
|
477
|
+
export { AXMReportRunnerRootPageComponent };
|
478
|
+
//# sourceMappingURL=acorex-modules-report-management-report-runner-root-page.component-C3UP9Jsi.mjs.map
|