@acorex/modules 20.0.9 → 20.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/common/index.d.ts +1 -0
  2. package/conversation/index.d.ts +4 -1
  3. package/data-management/README.md +3 -0
  4. package/data-management/index.d.ts +101 -0
  5. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BXc_ogZY.mjs → acorex-modules-auth-acorex-modules-auth-DqsEqXec.mjs} +11 -11
  6. package/fesm2022/acorex-modules-auth-acorex-modules-auth-DqsEqXec.mjs.map +1 -0
  7. package/fesm2022/{acorex-modules-auth-app-chooser.component-BS8kyO4q.mjs → acorex-modules-auth-app-chooser.component-D0pKNUts.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-auth-app-chooser.component-BS8kyO4q.mjs.map → acorex-modules-auth-app-chooser.component-D0pKNUts.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-auth-login.module-DGE_lE3s.mjs → acorex-modules-auth-login.module-Dky49ylL.mjs} +4 -4
  10. package/fesm2022/{acorex-modules-auth-login.module-DGE_lE3s.mjs.map → acorex-modules-auth-login.module-Dky49ylL.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-auth-master.layout-BsgOcazS.mjs → acorex-modules-auth-master.layout-DXfRjCLL.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-auth-master.layout-BsgOcazS.mjs.map → acorex-modules-auth-master.layout-DXfRjCLL.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-auth-password.component-BjpLB-GX.mjs → acorex-modules-auth-password.component-BbsQWpEh.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-auth-password.component-BjpLB-GX.mjs.map → acorex-modules-auth-password.component-BbsQWpEh.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-auth-password.component-DwQwyJv_.mjs → acorex-modules-auth-password.component-oH5OFHqQ.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-auth-password.component-DwQwyJv_.mjs.map → acorex-modules-auth-password.component-oH5OFHqQ.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-auth-routes-j9Ujy-xB.mjs → acorex-modules-auth-routes-DAiaTm4Y.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-auth-routes-j9Ujy-xB.mjs.map → acorex-modules-auth-routes-DAiaTm4Y.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-auth-two-factor.module-EN4l_a4V.mjs → acorex-modules-auth-two-factor.module-Coe4NNUW.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-auth-two-factor.module-EN4l_a4V.mjs.map → acorex-modules-auth-two-factor.module-Coe4NNUW.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-auth-user-sessions.component-D9D-vWic.mjs → acorex-modules-auth-user-sessions.component-CtTrstZT.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-auth-user-sessions.component-D9D-vWic.mjs.map → acorex-modules-auth-user-sessions.component-CtTrstZT.mjs.map} +1 -1
  23. package/fesm2022/acorex-modules-auth.mjs +1 -1
  24. package/fesm2022/acorex-modules-common.mjs +1 -0
  25. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  26. package/fesm2022/acorex-modules-content-management.mjs +1 -1
  27. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  28. package/fesm2022/acorex-modules-conversation.mjs +6 -6
  29. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  30. package/fesm2022/acorex-modules-data-management.mjs +2328 -0
  31. package/fesm2022/acorex-modules-data-management.mjs.map +1 -0
  32. package/fesm2022/acorex-modules-notification-management.mjs +1 -1
  33. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  34. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-sI0yzJ4s.mjs → acorex-modules-report-management-report-runner-root-page.component-CAxcD_pe.mjs} +16 -16
  35. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-CAxcD_pe.mjs.map +1 -0
  36. package/fesm2022/acorex-modules-report-management.mjs +170 -11
  37. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  38. package/fesm2022/acorex-modules-workflow-management-task-board.page-Dp7SJ3NA.mjs +876 -0
  39. package/fesm2022/acorex-modules-workflow-management-task-board.page-Dp7SJ3NA.mjs.map +1 -0
  40. package/fesm2022/acorex-modules-workflow-management.mjs +8 -1
  41. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  42. package/package.json +5 -1
  43. package/workflow-management/index.d.ts +1 -0
  44. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BXc_ogZY.mjs.map +0 -1
  45. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-sI0yzJ4s.mjs.map +0 -1
  46. package/fesm2022/acorex-modules-workflow-management-task-board.page-Dh9nI9dz.mjs +0 -762
  47. package/fesm2022/acorex-modules-workflow-management-task-board.page-Dh9nI9dz.mjs.map +0 -1
@@ -1,762 +0,0 @@
1
- import { AXBadgeModule } from '@acorex/components/badge';
2
- import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
3
- import * as i4 from '@acorex/components/button';
4
- import { AXButtonModule } from '@acorex/components/button';
5
- import { AXCalendarComponent } from '@acorex/components/calendar';
6
- import * as i6 from '@acorex/components/decorators';
7
- import { AXDecoratorModule } from '@acorex/components/decorators';
8
- import { AXDropdownPanelComponent } from '@acorex/components/dropdown';
9
- import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
10
- import { AXLoadingModule } from '@acorex/components/loading';
11
- import * as i3 from '@acorex/components/menu';
12
- import { AXMenuModule } from '@acorex/components/menu';
13
- import * as i7 from '@acorex/components/popover';
14
- import { AXPopoverModule } from '@acorex/components/popover';
15
- import { AXCalendarService } from '@acorex/core/date-time';
16
- import { AXLocaleService } from '@acorex/core/locale';
17
- import * as i5 from '@acorex/core/translation';
18
- import { AXTranslationModule } from '@acorex/core/translation';
19
- import { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
20
- import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
21
- import * as i2 from '@angular/common';
22
- import { CommonModule } from '@angular/common';
23
- import * as i0 from '@angular/core';
24
- import { computed, inject, viewChild, input, output, ViewEncapsulation, ChangeDetectionStrategy, Component, signal, effect, viewChildren, untracked } from '@angular/core';
25
- import * as i1$1 from '@angular/forms';
26
- import { FormsModule } from '@angular/forms';
27
- import { RouterModule } from '@angular/router';
28
- import { AXPTaskBoardService } from './acorex-modules-workflow-management.mjs';
29
- import { AXPSettingService } from '@acorex/platform/common';
30
- import { AXPPlatformScope } from '@acorex/platform/core';
31
- import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
32
- import { AXSchedulerComponent } from '@acorex/components/scheduler';
33
- import { AXDataSource } from '@acorex/cdk/common';
34
- import * as i1 from '@acorex/components/data-table';
35
- import { AXDataTableModule, AXDataTableComponent } from '@acorex/components/data-table';
36
- import { AXKanbanComponent } from '@acorex/components/kanban';
37
-
38
- const config = {
39
- i18n: 'workflow-management',
40
- };
41
- const RootConfig = {
42
- config,
43
- module: {
44
- module: 'WorkflowManagement',
45
- name: 'WorkflowManagement',
46
- title: `t('module-name', {scope:"${config.i18n}"})`,
47
- icon: 'fa-light fa-clipboard-list-check',
48
- },
49
- };
50
-
51
- var AXMTaskBoardSettings;
52
- (function (AXMTaskBoardSettings) {
53
- AXMTaskBoardSettings["CalendarViewMode"] = "taskboard.calendar.viewMode";
54
- AXMTaskBoardSettings["CurrentDate"] = "taskboard.calendar.currentDate";
55
- AXMTaskBoardSettings["SelectedTaskTypeFilter"] = "taskboard.filter.selectedTaskType";
56
- })(AXMTaskBoardSettings || (AXMTaskBoardSettings = {}));
57
-
58
- const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
59
- isLoading: true, // Start with loading true until initialized
60
- currentViewMode: 'month', // Default value
61
- currentDate: new Date(), // Default to today
62
- selectedTaskTypeName: null, // Store the name/ID of the task type for persistence
63
- taskTypes: [],
64
- })), withComputed((store) => ({
65
- // Computed property to get the actual AXPWorkflowTaskProvider object
66
- selectedTaskType: computed(() => {
67
- const name = store.selectedTaskTypeName();
68
- if (!name) {
69
- return null;
70
- }
71
- return store.taskTypes().find((tt) => tt.name === name) || null;
72
- }),
73
- // Example computed (you can add more as needed):
74
- // isMonthView: computed(() => store.calendarViewMode() === 'month'),
75
- })), withMethods((store, settingService = inject(AXPSettingService), // Inject the main service
76
- taskBoardService = inject(AXPTaskBoardService)) => ({
77
- async initialize() {
78
- patchState(store, { isLoading: true });
79
- const userScopedSettings = settingService.scope(AXPPlatformScope.User); // Get user scope once
80
- try {
81
- // 1. Load Task Types first
82
- const taskTypes = await taskBoardService.getTaskTypes();
83
- patchState(store, { taskTypes });
84
- // 2. Load Persisted Settings individually
85
- const [savedViewMode, savedDateString, savedTaskTypeName] = await Promise.all([
86
- userScopedSettings.get(AXMTaskBoardSettings.CalendarViewMode),
87
- userScopedSettings.get(AXMTaskBoardSettings.CurrentDate),
88
- userScopedSettings.get(AXMTaskBoardSettings.SelectedTaskTypeFilter),
89
- ]);
90
- patchState(store, {
91
- currentViewMode: savedViewMode || 'month', // Fallback to default
92
- currentDate: savedDateString ? new Date(savedDateString) : new Date(), // Parse stored date string
93
- selectedTaskTypeName: savedTaskTypeName || null, // Load persisted task type name
94
- isLoading: false,
95
- });
96
- }
97
- catch (error) {
98
- console.error('Error initializing TaskBoard ViewModel:', error);
99
- // Fallback to defaults on error to ensure the app is usable
100
- patchState(store, {
101
- currentViewMode: 'month',
102
- currentDate: new Date(),
103
- selectedTaskTypeName: null,
104
- taskTypes: store.taskTypes(), // Retain loaded task types if any, or empty if error was before taskTypes load
105
- isLoading: false,
106
- });
107
- }
108
- },
109
- setCalendarViewMode(mode) {
110
- if ((mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid' || mode === 'time-grouped-grid') &&
111
- store.selectedTaskTypeName() === null) {
112
- const taskTypeName = store.taskTypes()[0].name;
113
- patchState(store, { selectedTaskTypeName: taskTypeName });
114
- settingService
115
- .scope(AXPPlatformScope.User)
116
- .set(AXMTaskBoardSettings.SelectedTaskTypeFilter, taskTypeName)
117
- .catch((error) => console.error('Error saving selected task type filter:', error));
118
- }
119
- patchState(store, { currentViewMode: mode });
120
- settingService
121
- .scope(AXPPlatformScope.User)
122
- .set(AXMTaskBoardSettings.CalendarViewMode, mode)
123
- .catch((error) => console.error('Error saving calendar view mode:', error));
124
- },
125
- setCurrentDate(date) {
126
- patchState(store, { currentDate: new Date(date) });
127
- settingService
128
- .scope(AXPPlatformScope.User)
129
- .set(AXMTaskBoardSettings.CurrentDate, date.toISOString())
130
- .catch((error) => console.error('Error saving current date:', error));
131
- },
132
- setSelectedTaskTypeProvider(taskType) {
133
- const taskTypeName = taskType ? taskType.name : null;
134
- patchState(store, { selectedTaskTypeName: taskTypeName });
135
- settingService
136
- .scope(AXPPlatformScope.User)
137
- .set(AXMTaskBoardSettings.SelectedTaskTypeFilter, taskTypeName)
138
- .catch((error) => console.error('Error saving selected task type filter:', error));
139
- },
140
- })));
141
-
142
- class AXMTaskBoardCalendarViewComponent {
143
- constructor() {
144
- this.taskBoardService = inject(AXPTaskBoardService);
145
- this.schedulerComponent = viewChild(AXSchedulerComponent);
146
- this.startingDate = input(new Date());
147
- this.selectedView = input('month');
148
- this.dataSource = input.required();
149
- this.currentSchedulerView = computed(() => this.selectedView() === 'kanban' || this.selectedView() === 'grid'
150
- ? 'month'
151
- : this.selectedView());
152
- this.onTaskChanged = output();
153
- this.onMonthSlotDblClicked = output();
154
- this.component = output();
155
- this.onRangeChanged = output();
156
- this.onTaskRightClick = output();
157
- }
158
- ngAfterViewInit() {
159
- if (this.schedulerComponent()) {
160
- this.component.emit(this.schedulerComponent());
161
- }
162
- }
163
- onTaskDrop(event) {
164
- this.taskBoardService
165
- .updateTaskDateRange(event.appointment, {
166
- from: event.slot.startDate.date,
167
- end: event.slot.endDate.date,
168
- })
169
- .then((task) => {
170
- this.onTaskChanged.emit(task);
171
- this.schedulerComponent()?.refresh([task]);
172
- });
173
- }
174
- onTaskRightClickHandler(event) {
175
- this.onTaskRightClick.emit(event);
176
- }
177
- onSlotDblClicked(event) {
178
- if (event.sender.selectedView() === 'month') {
179
- this.onMonthSlotDblClicked.emit(event.slot.startDate.date);
180
- }
181
- }
182
- handleRangeChanged(event) {
183
- this.onRangeChanged.emit(event);
184
- }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.7", type: AXMTaskBoardCalendarViewComponent, isStandalone: true, selector: "axm-task-board-calendar-view", inputs: { startingDate: { classPropertyName: "startingDate", publicName: "startingDate", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: "selectedView", publicName: "selectedView", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskChanged: "onTaskChanged", onMonthSlotDblClicked: "onMonthSlotDblClicked", component: "component", onRangeChanged: "onRangeChanged", onTaskRightClick: "onTaskRightClick" }, viewQueries: [{ propertyName: "schedulerComponent", first: true, predicate: AXSchedulerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-scheduler\n [hasHeader]=\"false\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentRightClick)=\"onTaskRightClickHandler($event)\"\n></ax-scheduler>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}\n"], dependencies: [{ kind: "component", type: AXSchedulerComponent, selector: "ax-scheduler", inputs: ["calendar", "startingDate", "endDayHour", "startDayHour", "hasHeader", "readonly", "draggable", "hasActions", "dragStartDelay", "allowFullScreen", "multiDayViewDaysCount", "tooltipTemplate", "dataSource", "firstDayOfWeek", "views", "selectedView"], outputs: ["selectedViewChange", "onDataLoaded", "onRangeChanged", "onSlotClicked", "onSlotDblClicked", "onSlotRightClick", "onAppointmentDrop", "onActionClick", "onAppointmentClicked", "onAppointmentDblClicked", "onAppointmentRightClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
187
- }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, decorators: [{
189
- type: Component,
190
- args: [{ selector: 'axm-task-board-calendar-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXSchedulerComponent], template: "<ax-scheduler\n [hasHeader]=\"false\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentRightClick)=\"onTaskRightClickHandler($event)\"\n></ax-scheduler>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}\n"] }]
191
- }] });
192
-
193
- class AXMTaskBoardGridViewComponent {
194
- constructor() {
195
- this.localeService = inject(AXLocaleService);
196
- this.calendarService = inject(AXCalendarService);
197
- this.taskBoardService = inject(AXPTaskBoardService);
198
- this.grid = viewChild('grid');
199
- this.statuses = input.required();
200
- this.dataSource = input.required();
201
- this.onTaskChanged = output();
202
- this.tasks = signal([]);
203
- this.tasksDataSource = computed(() => {
204
- return new AXDataSource({
205
- load: async (e) => {
206
- const items = this.tasks().map((task) => ({
207
- id: task.id,
208
- title: task.title,
209
- priority: task.priority,
210
- description: task.description,
211
- endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {
212
- locale: this.localeService.activeProfile().calendar.system,
213
- }),
214
- startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {
215
- locale: this.localeService.activeProfile().calendar.system,
216
- }),
217
- statusTitle: this.statuses().find((status) => status.key === task.statusKey)?.title,
218
- }));
219
- return {
220
- items: items.slice(e.skip, e.skip + e.take),
221
- total: items.length,
222
- };
223
- },
224
- pageSize: 10,
225
- key: 'id',
226
- byKey: async (key) => {
227
- return this.tasks().find((task) => task.id === key);
228
- },
229
- });
230
- });
231
- this.#filterChange = effect(() => {
232
- this.dataSource().then((tasks) => {
233
- this.tasks.set(tasks);
234
- this.grid()?.refresh();
235
- });
236
- });
237
- }
238
- #filterChange;
239
- onSortChanged(event) {
240
- const tasks = this.tasks().map((item) => {
241
- const task = event.allItems.find((t) => t.id === item.id);
242
- if (task) {
243
- return { ...item, index: task.index, statusKey: task.statusKey };
244
- }
245
- return item;
246
- });
247
- this.taskBoardService.updateMultipleTasks(tasks).then((tasks) => {
248
- this.tasks.set(tasks);
249
- });
250
- }
251
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
252
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.7", type: AXMTaskBoardGridViewComponent, isStandalone: true, selector: "axm-task-board-grid-view", inputs: { statuses: { classPropertyName: "statuses", publicName: "statuses", isSignal: true, isRequired: true, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskChanged: "onTaskChanged" }, viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n [loading]=\"{ enabled: true, animation: true }\"\n>\n <ax-text-column dataField=\"title\" caption=\"title\" [width]=\"'350px'\"></ax-text-column>\n <ax-text-column dataField=\"description\" caption=\"description\" [width]=\"'100%'\"></ax-text-column>\n <ax-text-column dataField=\"startDate\" caption=\"Start Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"endDate\" caption=\"Due Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"priority\" caption=\"priority\" [width]=\"'125px'\"></ax-text-column>\n <ax-text-column dataField=\"statusTitle\" caption=\"status\" [width]=\"'125px'\"></ax-text-column>\n</ax-data-table>\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "parentField", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
253
- }
254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardGridViewComponent, decorators: [{
255
- type: Component,
256
- args: [{ selector: 'axm-task-board-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule], template: "<ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n [loading]=\"{ enabled: true, animation: true }\"\n>\n <ax-text-column dataField=\"title\" caption=\"title\" [width]=\"'350px'\"></ax-text-column>\n <ax-text-column dataField=\"description\" caption=\"description\" [width]=\"'100%'\"></ax-text-column>\n <ax-text-column dataField=\"startDate\" caption=\"Start Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"endDate\" caption=\"Due Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"priority\" caption=\"priority\" [width]=\"'125px'\"></ax-text-column>\n <ax-text-column dataField=\"statusTitle\" caption=\"status\" [width]=\"'125px'\"></ax-text-column>\n</ax-data-table>\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"] }]
257
- }] });
258
-
259
- class AXMTaskBoardKanbanViewComponent {
260
- constructor() {
261
- this.taskBoardService = inject(AXPTaskBoardService);
262
- this.kanbanComponent = viewChild(AXKanbanComponent);
263
- this.statuses = input.required();
264
- this.dataSource = input.required();
265
- this.onTaskChanged = output();
266
- this.component = output();
267
- this.tasks = signal([]);
268
- this.kanbanTasks = computed(() => {
269
- return this.tasks().map((task) => ({
270
- id: task.id,
271
- title: task.title,
272
- index: task.index,
273
- cssClass: task.cssClass,
274
- priority: task.priority,
275
- statusKey: task.statusKey,
276
- description: task.description,
277
- }));
278
- });
279
- this.#filterChange = effect(() => {
280
- this.dataSource().then((tasks) => {
281
- this.tasks.set(tasks);
282
- });
283
- });
284
- }
285
- #filterChange;
286
- ngAfterViewInit() {
287
- if (this.kanbanComponent()) {
288
- this.component.emit(this.kanbanComponent());
289
- }
290
- }
291
- onSortChanged(event) {
292
- const tasks = this.tasks().map((item) => {
293
- const task = event.allItems.find((t) => t.id === item.id);
294
- if (task) {
295
- return { ...item, index: task.index, statusKey: task.statusKey };
296
- }
297
- return item;
298
- });
299
- this.taskBoardService.updateMultipleTasks(tasks).then((tasks) => {
300
- this.tasks.set(tasks);
301
- });
302
- }
303
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardKanbanViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
304
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.7", type: AXMTaskBoardKanbanViewComponent, isStandalone: true, selector: "axm-task-board-kanban-view", inputs: { statuses: { classPropertyName: "statuses", publicName: "statuses", isSignal: true, isRequired: true, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskChanged: "onTaskChanged", component: "component" }, viewQueries: [{ propertyName: "kanbanComponent", first: true, predicate: AXKanbanComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-kanban [dataSource]=\"kanbanTasks()\" [statuses]=\"statuses()\" (onSortChanged)=\"onSortChanged($event)\"></ax-kanban>\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"], dependencies: [{ kind: "component", type: AXKanbanComponent, selector: "ax-kanban", inputs: ["hasActions", "dragStartDelay", "statuses", "itemTemplate", "dataSource", "keyField", "indexField", "titleField", "cssClassField", "priorityField", "statusKeyField", "descriptionField", "emptyTemplate", "headerTemplate", "footerTemplate", "contentFooterTemplate", "tooltipTemplate"], outputs: ["onSortChanged", "onActionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
305
- }
306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardKanbanViewComponent, decorators: [{
307
- type: Component,
308
- args: [{ selector: 'axm-task-board-kanban-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXKanbanComponent], template: "<ax-kanban [dataSource]=\"kanbanTasks()\" [statuses]=\"statuses()\" (onSortChanged)=\"onSortChanged($event)\"></ax-kanban>\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"] }]
309
- }] });
310
-
311
- class AXMTaskBoardStatusGroupedGridViewComponent {
312
- constructor() {
313
- this.localeService = inject(AXLocaleService);
314
- this.calendarService = inject(AXCalendarService);
315
- this.taskBoardService = inject(AXPTaskBoardService);
316
- this.tables = viewChildren(AXDataTableComponent);
317
- this.statuses = input.required();
318
- this.dataSource = input.required();
319
- this.onTaskChanged = output();
320
- this.tasks = signal([]);
321
- this.groupedTasks = computed(() => {
322
- const allTasks = this.tasks();
323
- const allStatuses = this.statuses();
324
- if (!allTasks.length || !allStatuses.length) {
325
- return [];
326
- }
327
- const map = allStatuses.map((status) => ({
328
- statusInfo: status,
329
- tasks: this.createTaskDataSource(allTasks.filter((task) => task.statusKey === status.key)),
330
- }));
331
- return map;
332
- });
333
- this.#filterChange = effect(() => {
334
- this.dataSource().then((tasks) => {
335
- this.tasks.set(tasks);
336
- untracked(() => {
337
- this.tables()?.forEach((table) => {
338
- table.refresh();
339
- });
340
- });
341
- });
342
- });
343
- }
344
- createTaskDataSource(tasks) {
345
- return new AXDataSource({
346
- load: async (e) => {
347
- const items = tasks.map((task) => ({
348
- id: task.id,
349
- title: task.title,
350
- priority: task.priority,
351
- description: task.description,
352
- endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {
353
- locale: this.localeService.activeProfile().calendar.system,
354
- }),
355
- startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {
356
- locale: this.localeService.activeProfile().calendar.system,
357
- }),
358
- statusTitle: this.statuses().find((status) => status.key === task.statusKey)?.title,
359
- }));
360
- return {
361
- items: items.slice(e.skip, e.skip + e.take),
362
- total: items.length,
363
- };
364
- },
365
- pageSize: 10,
366
- key: 'id',
367
- byKey: async (key) => {
368
- return tasks.find((task) => task.id === key);
369
- },
370
- });
371
- }
372
- #filterChange;
373
- onSortChanged(event) {
374
- const tasks = this.tasks().map((item) => {
375
- const task = event.allItems.find((t) => t.id === item.id);
376
- if (task) {
377
- return { ...item, index: task.index, statusKey: task.statusKey };
378
- }
379
- return item;
380
- });
381
- this.taskBoardService.updateMultipleTasks(tasks).then((tasks) => {
382
- this.tasks.set(tasks);
383
- });
384
- }
385
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardStatusGroupedGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
386
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXMTaskBoardStatusGroupedGridViewComponent, isStandalone: true, selector: "axm-task-board-status-grouped-grid-view", inputs: { statuses: { classPropertyName: "statuses", publicName: "statuses", isSignal: true, isRequired: true, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskChanged: "onTaskChanged" }, viewQueries: [{ propertyName: "tables", predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@for(group of groupedTasks(); track group.statusInfo.key){\n<h1 class=\"ax-text-xl ax-font-bold\">{{group.statusInfo.title}}</h1>\n<ax-data-table\n class=\"ax-h-[291px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n>\n <ax-text-column dataField=\"title\" caption=\"title\" [width]=\"'350px'\"></ax-text-column>\n <ax-text-column dataField=\"description\" caption=\"description\" [width]=\"'100%'\"></ax-text-column>\n <ax-text-column dataField=\"startDate\" caption=\"Start Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"endDate\" caption=\"Due Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"priority\" caption=\"priority\" [width]=\"'125px'\"></ax-text-column>\n</ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "parentField", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
387
- }
388
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardStatusGroupedGridViewComponent, decorators: [{
389
- type: Component,
390
- args: [{ selector: 'axm-task-board-status-grouped-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule], template: "@for(group of groupedTasks(); track group.statusInfo.key){\n<h1 class=\"ax-text-xl ax-font-bold\">{{group.statusInfo.title}}</h1>\n<ax-data-table\n class=\"ax-h-[291px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n>\n <ax-text-column dataField=\"title\" caption=\"title\" [width]=\"'350px'\"></ax-text-column>\n <ax-text-column dataField=\"description\" caption=\"description\" [width]=\"'100%'\"></ax-text-column>\n <ax-text-column dataField=\"startDate\" caption=\"Start Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"endDate\" caption=\"Due Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"priority\" caption=\"priority\" [width]=\"'125px'\"></ax-text-column>\n</ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"] }]
391
- }] });
392
-
393
- class AXMTaskBoardTimeGroupedGridViewComponent {
394
- constructor() {
395
- this.localeService = inject(AXLocaleService);
396
- this.calendarService = inject(AXCalendarService);
397
- this.taskBoardService = inject(AXPTaskBoardService);
398
- this.tables = viewChildren(AXDataTableComponent);
399
- this.statuses = input.required();
400
- this.dataSource = input.required();
401
- this.onTaskChanged = output();
402
- this.tasks = signal([]);
403
- this.groupedTasks = computed(() => {
404
- const allTasks = this.tasks();
405
- const allStatuses = this.statuses();
406
- if (!allTasks.length || !allStatuses.length) {
407
- return [];
408
- }
409
- const map = allStatuses.map((status) => ({
410
- statusInfo: status,
411
- tasks: this.createTaskDataSource(allTasks.filter((task) => task.statusKey === status.key)),
412
- }));
413
- return map;
414
- });
415
- this.#filterChange = effect(() => {
416
- this.dataSource().then((tasks) => {
417
- this.tasks.set(tasks);
418
- untracked(() => {
419
- this.tables()?.forEach((table) => {
420
- table.refresh();
421
- });
422
- });
423
- });
424
- });
425
- }
426
- createTaskDataSource(tasks) {
427
- return new AXDataSource({
428
- load: async (e) => {
429
- const items = tasks.map((task) => ({
430
- id: task.id,
431
- title: task.title,
432
- priority: task.priority,
433
- description: task.description,
434
- endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {
435
- locale: this.localeService.activeProfile().calendar.system,
436
- }),
437
- startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {
438
- locale: this.localeService.activeProfile().calendar.system,
439
- }),
440
- statusTitle: this.statuses().find((status) => status.key === task.statusKey)?.title,
441
- }));
442
- return {
443
- items: items.slice(e.skip, e.skip + e.take),
444
- total: items.length,
445
- };
446
- },
447
- pageSize: 10,
448
- key: 'id',
449
- byKey: async (key) => {
450
- return tasks.find((task) => task.id === key);
451
- },
452
- });
453
- }
454
- #filterChange;
455
- onSortChanged(event) {
456
- const tasks = this.tasks().map((item) => {
457
- const task = event.allItems.find((t) => t.id === item.id);
458
- if (task) {
459
- return { ...item, index: task.index, statusKey: task.statusKey };
460
- }
461
- return item;
462
- });
463
- this.taskBoardService.updateMultipleTasks(tasks).then((tasks) => {
464
- this.tasks.set(tasks);
465
- });
466
- }
467
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardTimeGroupedGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
468
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXMTaskBoardTimeGroupedGridViewComponent, isStandalone: true, selector: "axm-task-board-time-grouped-grid-view", inputs: { statuses: { classPropertyName: "statuses", publicName: "statuses", isSignal: true, isRequired: true, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskChanged: "onTaskChanged" }, viewQueries: [{ propertyName: "tables", predicate: AXDataTableComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@for(group of groupedTasks(); track group.statusInfo.key){\n<h1 class=\"ax-text-xl ax-font-bold\">{{group.statusInfo.title}}</h1>\n<ax-data-table\n class=\"ax-h-[291px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n>\n <ax-text-column dataField=\"title\" caption=\"title\" [width]=\"'300px'\"></ax-text-column>\n <ax-text-column dataField=\"description\" caption=\"description\"></ax-text-column>\n <ax-text-column dataField=\"startDate\" caption=\"Start Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"endDate\" caption=\"Due Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"priority\" caption=\"priority\" [width]=\"'125px'\"></ax-text-column>\n <ax-text-column dataField=\"statusTitle\" caption=\"status\" [width]=\"'125px'\"></ax-text-column>\n</ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "parentField", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
469
- }
470
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardTimeGroupedGridViewComponent, decorators: [{
471
- type: Component,
472
- args: [{ selector: 'axm-task-board-time-grouped-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule], template: "@for(group of groupedTasks(); track group.statusInfo.key){\n<h1 class=\"ax-text-xl ax-font-bold\">{{group.statusInfo.title}}</h1>\n<ax-data-table\n class=\"ax-h-[291px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n>\n <ax-text-column dataField=\"title\" caption=\"title\" [width]=\"'300px'\"></ax-text-column>\n <ax-text-column dataField=\"description\" caption=\"description\"></ax-text-column>\n <ax-text-column dataField=\"startDate\" caption=\"Start Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"endDate\" caption=\"Due Date\" [width]=\"'150px'\"></ax-text-column>\n <ax-text-column dataField=\"priority\" caption=\"priority\" [width]=\"'125px'\"></ax-text-column>\n <ax-text-column dataField=\"statusTitle\" caption=\"status\" [width]=\"'125px'\"></ax-text-column>\n</ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"] }]
473
- }] });
474
-
475
- class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
476
- constructor() {
477
- super(...arguments);
478
- this.MULTI_DAYS_COUNT = 7;
479
- this.rootConfig = RootConfig;
480
- this.vm = inject(AXMTaskBoardViewModel);
481
- this.localeService = inject(AXLocaleService);
482
- this.calendarService = inject(AXCalendarService);
483
- this.taskBoardService = inject(AXPTaskBoardService);
484
- this.popover = viewChild('popover');
485
- this.calendar = viewChild('calendar');
486
- this.currentTask = signal(null);
487
- this.currentViewMode = signal('scheduler');
488
- this.schedulerComponent = signal(null);
489
- this.viewsItems = signal([
490
- { key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day', title: 'Calendar' },
491
- { key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },
492
- { key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },
493
- { key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range', break: true },
494
- { key: 'grid', text: 'grid', icon: 'fa-light fa-table', title: 'Table' },
495
- // { key: 'time-grouped-grid', text: 'time-grouped-grid', icon: 'fa-light fa-table' },
496
- { key: 'status-grouped-grid', text: 'status-grouped-grid', icon: 'fa-light fa-table', break: true },
497
- { key: 'kanban', text: 'kanban', icon: 'fa-light fa-chart-kanban' },
498
- ]);
499
- this.calendarType = computed(() => this.localeService.activeProfile().calendar.system);
500
- this.todayButtonText = computed(() => {
501
- switch (this.vm.currentViewMode()) {
502
- case 'day':
503
- case 'agenda':
504
- case 'kanban':
505
- case 'timeline-day':
506
- case 'timeline-multi-day':
507
- return 'Today';
508
- case 'week':
509
- return 'Current week';
510
- case 'grid':
511
- case 'month':
512
- case 'timeline-month':
513
- case 'time-grouped-grid':
514
- case 'status-grouped-grid':
515
- return 'Current month';
516
- }
517
- });
518
- this.timeText = computed(() => {
519
- if (this.vm.currentViewMode() === 'kanban') {
520
- const start = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);
521
- const end = start.add('day', this.MULTI_DAYS_COUNT - 1);
522
- const startText = start.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });
523
- const endText = end.format('DD MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });
524
- return `${startText} - ${endText}`;
525
- }
526
- if (this.vm.currentViewMode() === 'grid' ||
527
- this.vm.currentViewMode() === 'time-grouped-grid' ||
528
- this.vm.currentViewMode() === 'status-grouped-grid') {
529
- const start = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);
530
- const startText = start.format('MMMM yyyy', { locale: this.localeService.activeProfile().calendar.system });
531
- return startText;
532
- }
533
- return this.schedulerComponent()?.currentDateText();
534
- });
535
- this.calendarDepth = computed(() => {
536
- if (this.vm.currentViewMode() === 'kanban') {
537
- return 'day';
538
- }
539
- if (this.vm.currentViewMode() === 'grid' ||
540
- this.vm.currentViewMode() === 'time-grouped-grid' ||
541
- this.vm.currentViewMode() === 'status-grouped-grid') {
542
- return 'month';
543
- }
544
- return this.schedulerComponent()?.calendarDepth();
545
- });
546
- this.selectedViewMode = computed(() => this.viewsItems().find((item) => item.key === this.vm.currentViewMode()) || this.viewsItems()[0]);
547
- this.filter = computed(() => {
548
- const taskTypeProvider = this.vm.selectedTaskType();
549
- const types = taskTypeProvider ? [taskTypeProvider.name] : undefined;
550
- let from = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);
551
- let end;
552
- if (this.vm.currentViewMode() === 'kanban') {
553
- end = from.add('day', this.MULTI_DAYS_COUNT - 1);
554
- }
555
- else if (this.vm.currentViewMode() === 'grid' ||
556
- this.vm.currentViewMode() === 'time-grouped-grid' ||
557
- this.vm.currentViewMode() === 'status-grouped-grid') {
558
- from = from.startOf('month');
559
- end = from.endOf('month');
560
- }
561
- else {
562
- end = from.endOf('day');
563
- }
564
- return {
565
- ...(types && { types }),
566
- range: { from: from.date, end: end.date },
567
- };
568
- });
569
- this.contextMenu = viewChild('rootContextMenu');
570
- this.dataSource = (filter) => {
571
- const taskTypeProvider = this.vm.selectedTaskType();
572
- const types = taskTypeProvider ? [taskTypeProvider.name] : undefined;
573
- return this.taskBoardService.getTasks({ ...filter, types });
574
- };
575
- this.statuses = computed(() => {
576
- return this.vm.selectedTaskType()?.statuses || [];
577
- });
578
- this.getCellClass = (date) => {
579
- // check from value
580
- const rangedDates = [
581
- 'week',
582
- 'grid',
583
- 'kanban',
584
- 'agenda',
585
- 'time-grouped-grid',
586
- 'status-grouped-grid',
587
- 'timeline-multi-day',
588
- ];
589
- if (!rangedDates.includes(this.vm.currentViewMode())) {
590
- return null;
591
- }
592
- const from = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);
593
- const end = from.add('day', this.MULTI_DAYS_COUNT - 1);
594
- if (from && date.equal(from, 'day')) {
595
- return 'ax-range-start';
596
- }
597
- if (end && date.equal(end, 'day')) {
598
- return 'ax-range-end';
599
- }
600
- if (from && end && date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {
601
- return 'ax-range-between';
602
- }
603
- return null;
604
- };
605
- }
606
- async ngOnInit() {
607
- await super.ngOnInit();
608
- await this.vm.initialize();
609
- }
610
- async getPageTitle() {
611
- return await this.translateService.translateAsync('task-board.page-title', { scope: this.rootConfig.config.i18n });
612
- }
613
- async getPageBreadcrumbs() {
614
- return [
615
- {
616
- title: await this.translateService.translateAsync('root-menu', { scope: this.rootConfig.config.i18n }),
617
- },
618
- ];
619
- }
620
- schedulerComponentChanged(component) {
621
- this.schedulerComponent.set(component);
622
- }
623
- handleContextMenuOnOpening(event) {
624
- for (const item of this.currentTask()?.data?.actions || []) {
625
- event.items.push({
626
- text: item.title,
627
- icon: item.icon,
628
- data: {
629
- command: item.command,
630
- },
631
- });
632
- }
633
- }
634
- handleTaskRightClick(event) {
635
- this.currentTask.set(event.appointment);
636
- const x = event.nativeEvent.clientX;
637
- const y = event.nativeEvent.clientY;
638
- const element = event.sender.nativeElement;
639
- this.contextMenu()?.showAt({ x, y }, element);
640
- }
641
- handleMonthSlotDblClicked(date) {
642
- this.vm.setCurrentDate(date);
643
- this.vm.setCalendarViewMode('day');
644
- }
645
- handleCalendarViewChange(view) {
646
- this.vm.setCalendarViewMode(view);
647
- const schedulerComponent = this.schedulerComponent();
648
- if (schedulerComponent) {
649
- setTimeout(() => {
650
- this.vm.setCurrentDate(schedulerComponent.currentDate().date);
651
- this.popover()?.close();
652
- this.calendar()?.render();
653
- });
654
- }
655
- }
656
- handleSelectedTaskTypeChange(taskType) {
657
- this.vm.setSelectedTaskTypeProvider(taskType);
658
- this.schedulerComponent()?.refresh();
659
- }
660
- handleSchedulerDateChanged(event) {
661
- if (this.vm.isLoading()) {
662
- return;
663
- }
664
- const newDate = event.value;
665
- const currentDateInVm = this.vm.currentDate();
666
- let dateToSet = newDate || new Date();
667
- if (!currentDateInVm || currentDateInVm.getTime() !== dateToSet.getTime()) {
668
- if (this.vm.currentViewMode() === 'week') {
669
- const day = dateToSet.getDay();
670
- const weekStart = this.localeService.activeProfile().calendar.week.startsOn;
671
- let daysToSubtract = day - weekStart;
672
- if (daysToSubtract < 0) {
673
- daysToSubtract += 7;
674
- }
675
- dateToSet = new Date(dateToSet);
676
- dateToSet.setDate(dateToSet.getDate() - daysToSubtract);
677
- }
678
- this.vm.setCurrentDate(dateToSet);
679
- this.popover()?.close();
680
- this.calendar()?.render();
681
- }
682
- }
683
- handleContextMenuItemClick(event) {
684
- this.taskBoardService.executeCommand(event.item.data?.command, this.currentTask()?.data?.provider ?? '');
685
- }
686
- changeDate(forward) {
687
- const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);
688
- switch (this.vm.currentViewMode()) {
689
- case 'day':
690
- case 'timeline-day':
691
- this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);
692
- break;
693
- case 'week':
694
- this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);
695
- break;
696
- case 'agenda':
697
- case 'kanban':
698
- case 'timeline-multi-day':
699
- this.vm.setCurrentDate(date.add('day', forward ? this.MULTI_DAYS_COUNT - 1 : 1 - this.MULTI_DAYS_COUNT).date);
700
- break;
701
- case 'grid':
702
- case 'month':
703
- case 'timeline-month':
704
- case 'time-grouped-grid':
705
- case 'status-grouped-grid':
706
- this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);
707
- break;
708
- }
709
- this.popover()?.close();
710
- this.calendar()?.render();
711
- }
712
- handleTodayClick() {
713
- this.handleSchedulerDateChanged({ value: new Date(), component: this.schedulerComponent() });
714
- }
715
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
716
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXMTaskBoardPage, isStandalone: true, selector: "ng-component", providers: [
717
- {
718
- provide: AXPPageLayoutBase,
719
- useExisting: AXMTaskBoardPage,
720
- },
721
- ], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true, isSignal: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, isSignal: true }, { propertyName: "contextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <ax-button\n [text]=\"t(vm.selectedTaskType()?.title || 'task-board.all', { scope: rootConfig.config.i18n }) | async\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{vm.selectedTaskType()?.icon || 'fa-tasks'}}\"></ax-icon></ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n @if(vm.currentViewMode()!=='kanban' && vm.currentViewMode()!=='grid' &&\n vm.currentViewMode()!=='status-grouped-grid' && vm.currentViewMode()!=='time-grouped-grid') {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(null)\"\n [text]=\"(t('task-board.all', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light fa-tasks\"></ax-icon></ax-prefix>\n </ax-button-item>\n } @for(item of vm.taskTypes(); track item.name) {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(item)\"\n [text]=\"(t(item.title, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon></ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <div class=\"ax-scheduler-header\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover>\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n [depth]=\"calendarDepth()\"\n (onValueChanged)=\"handleSchedulerDateChanged($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover>\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(item of viewsItems(); track item.key) { @if(item.title) {\n <ax-title>{{ item.title }}</ax-title>\n }\n <ax-button-item\n [text]=\"(t('task-board.view.' + item.text, { scope: 'workflow-management' }) | async)!\"\n [selected]=\"vm.currentViewMode() === item.key\"\n (onClick)=\"handleCalendarViewChange(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if(item.break) {\n <ax-divider></ax-divider>\n } }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content>\n @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n [statuses]=\"statuses()\"\n class=\"axp-kanban-container ax-h-full\"\n [dataSource]=\"dataSource(filter())\"\n ></axm-task-board-kanban-view>\n }@case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full\"\n [statuses]=\"statuses()\"\n [dataSource]=\"dataSource(filter())\"\n ></axm-task-board-grid-view>\n }@case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n [statuses]=\"statuses()\"\n [dataSource]=\"dataSource(filter())\"\n class=\"ax-flex ax-flex-col ax-gap-2\"\n ></axm-task-board-status-grouped-grid-view>\n }@case('time-grouped-grid') {\n <axm-task-board-time-grouped-grid-view\n [statuses]=\"statuses()\"\n [dataSource]=\"dataSource(filter())\"\n class=\"ax-flex ax-flex-col ax-gap-2\"\n ></axm-task-board-time-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full\"\n [dataSource]=\"dataSource\"\n [startingDate]=\"vm.currentDate()\"\n [selectedView]=\"vm.currentViewMode()\"\n (component)=\"schedulerComponentChanged($event)\"\n (onTaskRightClick)=\"handleTaskRightClick($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n } }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\n"], dependencies: [{ 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: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
722
- //
723
- AXMenuModule }, { kind: "component", type: i3.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.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: "component", type: i4.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i4.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i6.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type:
724
- //
725
- 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: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXMTaskBoardCalendarViewComponent, selector: "axm-task-board-calendar-view", inputs: ["startingDate", "selectedView", "dataSource"], outputs: ["onTaskChanged", "onMonthSlotDblClicked", "component", "onRangeChanged", "onTaskRightClick"] }, { kind: "component", type: AXMTaskBoardKanbanViewComponent, selector: "axm-task-board-kanban-view", inputs: ["statuses", "dataSource"], outputs: ["onTaskChanged", "component"] }, { kind: "component", type: AXMTaskBoardGridViewComponent, selector: "axm-task-board-grid-view", inputs: ["statuses", "dataSource"], outputs: ["onTaskChanged"] }, { kind: "component", type: AXMTaskBoardTimeGroupedGridViewComponent, selector: "axm-task-board-time-grouped-grid-view", inputs: ["statuses", "dataSource"], outputs: ["onTaskChanged"] }, { kind: "component", type: AXMTaskBoardStatusGroupedGridViewComponent, selector: "axm-task-board-status-grouped-grid-view", inputs: ["statuses", "dataSource"], outputs: ["onTaskChanged"] }, { kind: "component", type: AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i7.AXPopoverComponent, selector: "ax-popover", inputs: ["disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXCalendarComponent, selector: "ax-calendar", inputs: ["rtl", "readonly", "value", "name", "disabled", "depth", "activeView", "minValue", "maxValue", "disabledDates", "holidayDates", "type", "cellTemplate", "cellClass", "showNavigation", "count", "id"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
726
- }
727
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXMTaskBoardPage, decorators: [{
728
- type: Component,
729
- args: [{ imports: [
730
- FormsModule,
731
- CommonModule,
732
- RouterModule,
733
- //
734
- AXMenuModule,
735
- AXButtonModule,
736
- AXDropdownButtonModule,
737
- AXTranslationModule,
738
- AXDecoratorModule,
739
- AXLoadingModule,
740
- AXBreadcrumbsModule,
741
- AXBadgeModule,
742
- //
743
- AXPThemeLayoutBlockComponent,
744
- AXPPageLayoutComponent,
745
- AXMTaskBoardCalendarViewComponent,
746
- AXMTaskBoardKanbanViewComponent,
747
- AXMTaskBoardGridViewComponent,
748
- AXMTaskBoardTimeGroupedGridViewComponent,
749
- AXMTaskBoardStatusGroupedGridViewComponent,
750
- AXDropdownPanelComponent,
751
- AXPopoverModule,
752
- AXCalendarComponent,
753
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
754
- {
755
- provide: AXPPageLayoutBase,
756
- useExisting: AXMTaskBoardPage,
757
- },
758
- ], template: "<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <axp-layout-prefix>\n <ax-button\n [text]=\"t(vm.selectedTaskType()?.title || 'task-board.all', { scope: rootConfig.config.i18n }) | async\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{vm.selectedTaskType()?.icon || 'fa-tasks'}}\"></ax-icon></ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n @if(vm.currentViewMode()!=='kanban' && vm.currentViewMode()!=='grid' &&\n vm.currentViewMode()!=='status-grouped-grid' && vm.currentViewMode()!=='time-grouped-grid') {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(null)\"\n [text]=\"(t('task-board.all', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light fa-tasks\"></ax-icon></ax-prefix>\n </ax-button-item>\n } @for(item of vm.taskTypes(); track item.name) {\n <ax-button-item\n (onClick)=\"handleSelectedTaskTypeChange(item)\"\n [text]=\"(t(item.title, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix><ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon></ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <div class=\"ax-scheduler-header\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover>\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n [depth]=\"calendarDepth()\"\n (onValueChanged)=\"handleSchedulerDateChanged($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover>\n </div>\n </axp-layout-prefix>\n <axp-layout-suffix>\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for(item of viewsItems(); track item.key) { @if(item.title) {\n <ax-title>{{ item.title }}</ax-title>\n }\n <ax-button-item\n [text]=\"(t('task-board.view.' + item.text, { scope: 'workflow-management' }) | async)!\"\n [selected]=\"vm.currentViewMode() === item.key\"\n (onClick)=\"handleCalendarViewChange(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if(item.break) {\n <ax-divider></ax-divider>\n } }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content>\n @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n [statuses]=\"statuses()\"\n class=\"axp-kanban-container ax-h-full\"\n [dataSource]=\"dataSource(filter())\"\n ></axm-task-board-kanban-view>\n }@case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full\"\n [statuses]=\"statuses()\"\n [dataSource]=\"dataSource(filter())\"\n ></axm-task-board-grid-view>\n }@case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n [statuses]=\"statuses()\"\n [dataSource]=\"dataSource(filter())\"\n class=\"ax-flex ax-flex-col ax-gap-2\"\n ></axm-task-board-status-grouped-grid-view>\n }@case('time-grouped-grid') {\n <axm-task-board-time-grouped-grid-view\n [statuses]=\"statuses()\"\n [dataSource]=\"dataSource(filter())\"\n class=\"ax-flex ax-flex-col ax-gap-2\"\n ></axm-task-board-time-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full\"\n [dataSource]=\"dataSource\"\n [startingDate]=\"vm.currentDate()\"\n [selectedView]=\"vm.currentViewMode()\"\n (component)=\"schedulerComponentChanged($event)\"\n (onTaskRightClick)=\"handleTaskRightClick($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n } }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\n"] }]
759
- }] });
760
-
761
- export { AXMTaskBoardPage };
762
- //# sourceMappingURL=acorex-modules-workflow-management-task-board.page-Dh9nI9dz.mjs.map