@acorex-platform/module-task-management-client 2.0.0-next.2 → 2.0.0-next.21

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 (10) hide show
  1. package/fesm2022/{acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-5zHpZCXa.mjs → acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-INIEvacu.mjs} +6 -6
  2. package/fesm2022/{acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-5zHpZCXa.mjs.map → acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-INIEvacu.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-task-management-client-list-task-board-assignees.query-m6EMYMGX.mjs → acorex-platform-module-task-management-client-list-task-board-assignees.query-CENurmLO.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-task-management-client-list-task-board-assignees.query-m6EMYMGX.mjs.map → acorex-platform-module-task-management-client-list-task-board-assignees.query-CENurmLO.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-task-management-client-list-task-types.query-aSPzB4oy.mjs → acorex-platform-module-task-management-client-list-task-types.query-DQ2MnsAK.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-task-management-client-list-task-types.query-aSPzB4oy.mjs.map → acorex-platform-module-task-management-client-list-task-types.query-DQ2MnsAK.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-task-management-client-task-board.page-1Qq2hK0A.mjs → acorex-platform-module-task-management-client-task-board.page-xzDabJXk.mjs} +3 -3
  8. package/fesm2022/{acorex-platform-module-task-management-client-task-board.page-1Qq2hK0A.mjs.map → acorex-platform-module-task-management-client-task-board.page-xzDabJXk.mjs.map} +1 -1
  9. package/fesm2022/acorex-platform-module-task-management-client.mjs +1 -1
  10. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-task-management-client-task-board.page-1Qq2hK0A.mjs","sources":["../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-calendar-view/task-board-scheduler-layout.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.page.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.page.html"],"sourcesContent":["import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n@Component({\n selector: 'axm-task-board-content-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXSkeletonModule],\n templateUrl: './task-board-content-skeleton.component.html',\n styleUrl: './task-board-content-skeleton.component.css',\n host: {\n class: 'axm-task-board-content-skeleton',\n 'aria-busy': 'true',\n 'aria-live': 'polite',\n },\n})\nexport class AXMTaskBoardContentSkeletonComponent {\n //#region ---- Constants ----\n\n private static readonly DAY_HEADER_COUNT = 7;\n\n private static readonly GRID_ROW_COUNT = 6;\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Weekday header placeholders (Sun–Sat). */\n protected readonly dayHeaderPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n /** Calendar-style grid row placeholders. */\n protected readonly gridRowPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.GRID_ROW_COUNT }, (_, index) => index),\n );\n\n /** Column placeholders per grid row. */\n protected readonly gridColumnPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n //#endregion\n}\n","<!-- Weekday header row -->\n<div class=\"axm-task-board-content-skeleton__header\">\n @for (index of dayHeaderPlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__day-header\"></ax-skeleton>\n }\n</div>\n\n<!-- Generic board grid (calendar / kanban / table placeholder) -->\n<div class=\"axm-task-board-content-skeleton__grid\">\n @for (row of gridRowPlaceholders(); track row) {\n <div class=\"axm-task-board-content-skeleton__row\">\n @for (col of gridColumnPlaceholders(); track col) {\n <div class=\"axm-task-board-content-skeleton__cell\">\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__cell-date\"></ax-skeleton>\n </div>\n }\n </div>\n }\n</div>\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXPExtraField } from '../task-board.types';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-detail-panel',\n templateUrl: './task-board-detail-panel.component.html',\n styleUrls: ['./task-board-detail-panel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXTranslatorPipe,\n AXButtonComponent,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXDecoratorIconComponent,\n ],\n})\nexport class AXMTaskBoardDetailPanel {\n protected readonly rootConfig = RootConfig;\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected statusName = signal<string>('');\n protected extraFields = signal<AXPExtraField[]>([]);\n\n #selectedTaskChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const key = selectedTask?.status.id;\n const provider = selectedTask?.provider;\n if (!provider) return;\n const name = await this.vm.getStatusName(key, provider);\n if (name) this.statusName.set(name);\n });\n\n #selectedTaskTypeChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const selectedTaskType = this.taskBoardService.getProvider(selectedTask?.provider);\n const extraFields = await selectedTaskType?.getExtraFields();\n if (!extraFields) {\n this.extraFields.set([]);\n return;\n }\n this.extraFields.set(extraFields);\n });\n\n protected capitalizeFirstLetter(text: string) {\n return String(text).charAt(0).toUpperCase() + String(text).slice(1);\n }\n}\n","@if (vm.isTaskSelected()) {\n @let nodeInfo = vm.selectedTask();\n <div class=\"__header\">\n <div class=\"__title\">\n <span>{{ nodeInfo?.title }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content\">\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n @if (nodeInfo?.description) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.description }}</div>\n </div>\n }\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n {{\n $safeNavigationMigration(nodeInfo?.startDate)\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{\n $safeNavigationMigration(nodeInfo?.endDate)\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{ nodeInfo?.reporter?.fullName }}\n </div>\n </div>\n @if (nodeInfo?.assignee) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.assignee?.fullName }}</div>\n </div>\n }\n @if (statusName()) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ statusName() }}</div>\n </div>\n }\n @if (nodeInfo?.priority) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\n </div>\n }\n @if (extraFields() && extraFields().length) {\n <div class=\"__row\">\n <axp-widgets-container [context]=\"nodeInfo\">\n @for (extraField of extraFields(); track extraField) {\n <div class=\"__title\">\n <span>\n {{ extraField.title | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n <ng-container axp-widget-renderer [node]=\"extraField.widget\" [mode]=\"'view'\"> </ng-container>\n </div>\n }\n </axp-widgets-container>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__header\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\n </span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content flex items-center justify-center\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@task-management:task-board.detail-panel.no-task-selected.title'\"\n [description]=\"'@task-management:task-board.detail-panel.no-task-selected.description'\"\n >\n </axp-state-message>\n </div>\n}\n","import { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\n\nexport const TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS = [\n AXPRegionalSetting.LocaleProfile,\n AXPRegionalSetting.Calendar,\n AXPRegionalSetting.FirstDayOfWeek,\n AXPRegionalSetting.WeekendDays,\n] as const;\n\nexport function buildTaskBoardRegionalProfileKey(parts: {\n profileCode: string;\n calendarSystem: string;\n weekStartsOn: number;\n weekendDays: readonly number[];\n}): string {\n return [parts.profileCode, parts.calendarSystem, parts.weekStartsOn, parts.weekendDays.join('-')].join('|');\n}\n","import {\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerService,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport {\n afterNextRender,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction } from '../../task-board.types';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from '../../task-board.viewmodel';\nimport {\n buildTaskBoardRegionalProfileKey,\n TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS,\n} from './task-board-scheduler-layout.utils';\n\n@Component({\n selector: 'axm-task-board-calendar-view',\n templateUrl: './task-board-calendar-view.component.html',\n styleUrls: ['./task-board-calendar-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerComponent],\n})\nexport class AXMTaskBoardCalendarViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n protected readonly schedulerService = inject(AXSchedulerService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly localeService = inject(AXLocaleService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n schedulerComponent = viewChild(AXSchedulerComponent);\n\n resources = input<AXPResource[]>([]);\n refreshNonce = input<number>(0);\n startingDate = input<Date>(new Date());\n selectedView = input<AXPTaskBoardViewMode>('month');\n dataSource = input.required<AXSchedulerAppointmentDataSource>();\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n /** Gates ax-scheduler in the template so we can destroy and recreate it cleanly on regional changes. */\n protected readonly schedulerMounted = signal(true);\n\n private readonly regionalSettingsRevision = signal(0);\n private previousRegionalProfileKey: string | null = null;\n\n /**\n * Bumped whenever the global holiday list is reloaded. The scheduler merges the\n * app-wide `AXCalendarService.holidays` (non-reactive) with our reactive callback\n * result, so we re-run the callback to force the merged holidays to reflect the\n * latest global reload after a calendar selection change.\n */\n private readonly holidaysRevision = signal(0);\n\n /** Active calendar system (e.g. solar-hijri for fa-IR). Required for correct week/today rendering. */\n protected schedulerCalendar = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n /** Detects locale profile and week-layout changes that require a fresh ax-scheduler instance. */\n private readonly regionalProfileKey = computed(() => {\n this.regionalSettingsRevision();\n this.activeCalendar()?.weekdays;\n\n const profile = this.localeService.activeProfile();\n return buildTaskBoardRegionalProfileKey({\n profileCode: profile.localeInfo?.code ?? '',\n calendarSystem: this.schedulerCalendar(),\n weekStartsOn: profile.calendar.week?.startsOn ?? 0,\n weekendDays: profile.calendar.week?.weekends ?? [],\n });\n });\n\n /** Align week/month views to regional week boundaries before passing to ax-scheduler. */\n protected schedulerStartingDate = computed(() => {\n const date = this.startingDate();\n const calendar = this.schedulerCalendar();\n const axDate = this.calendarService.create(date, calendar);\n\n switch (this.currentSchedulerView()) {\n case 'week':\n return axDate.startOf('week').date;\n case 'month':\n case 'timeline-month':\n return axDate.startOf('month').date;\n default:\n return axDate.startOf('day').date;\n }\n });\n\n protected currentSchedulerView = computed<AXSchedulerView>(() =>\n this.selectedView() === 'kanban' || this.selectedView() === 'grid'\n ? 'month'\n : (this.selectedView() as AXSchedulerView),\n );\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n onMonthSlotDblClicked = output<Date>();\n onActionClick = output<AXPTaskAction>();\n component = output<AXSchedulerComponent>();\n onTaskRightClick = output<AXPTaskAction>();\n onRangeChanged = output<AXSchedulerDateRange>();\n\n constructor() {\n this.settingService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event.keys.some((key) => (TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS as readonly string[]).includes(key))) {\n this.regionalSettingsRevision.update((value) => value + 1);\n }\n });\n\n this.calendarService.onHolidaysChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.holidaysRevision.update((value) => value + 1);\n });\n }\n\n private readonly regionalRemountEffect = effect(() => {\n const profileKey = this.regionalProfileKey();\n\n untracked(() => {\n if (this.previousRegionalProfileKey === null) {\n this.previousRegionalProfileKey = profileKey;\n return;\n }\n\n if (profileKey === this.previousRegionalProfileKey) {\n return;\n }\n\n this.previousRegionalProfileKey = profileKey;\n this.remountScheduler();\n });\n });\n\n /** Re-binds parent scheduler ref whenever ax-scheduler remounts after a regional layout change. */\n private readonly schedulerInstanceEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n afterNextRender(\n () => {\n const currentScheduler = this.schedulerComponent();\n if (!currentScheduler || !this.schedulerMounted()) {\n return;\n }\n\n this.component.emit(currentScheduler);\n this.syncSchedulerCurrentDateFromToolbar({ force: true });\n void currentScheduler.refresh();\n },\n { injector: this.injector },\n );\n });\n\n private readonly refreshNonceEffect = effect(() => {\n this.refreshNonce();\n if (!this.schedulerMounted()) {\n return;\n }\n void this.schedulerComponent()?.refresh();\n });\n\n private readonly schedulerStateSyncEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n this.startingDate();\n this.schedulerStartingDate();\n this.schedulerCalendar();\n this.localeService.activeProfile().localeInfo?.code;\n this.currentSchedulerView();\n this.vm.daysCount();\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.refreshNonce();\n\n queueMicrotask(() => {\n this.syncSchedulerCurrentDateFromToolbar();\n void this.schedulerComponent()?.refresh();\n });\n });\n\n protected holidays = (range: AXSchedulerDateRange): Promise<AXHolidayDate[]> => {\n // Track the revision so the scheduler's #holidayEffect re-runs after a global reload.\n this.holidaysRevision();\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n return this.taskBoardService.getEvents(range, selectedEventTypeIds);\n };\n\n /**\n * ax-scheduler only consumes `[startingDate]` on first mount; afterward its internal\n * `currentDate` must be updated explicitly when the external toolbar navigator changes.\n */\n private syncSchedulerCurrentDateFromToolbar(options?: { force?: boolean }): void {\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n const view = this.currentSchedulerView();\n let targetDate = this.calendarService.create(this.schedulerStartingDate(), this.schedulerCalendar());\n\n if (view === 'week' || view === 'timeline-weekly') {\n targetDate = this.schedulerService.alignToWeekStart(targetDate, {});\n }\n\n if (!options?.force && targetDate.equal(scheduler.currentDate())) {\n return;\n }\n\n scheduler.currentDate.set(targetDate);\n }\n\n private remountScheduler(): void {\n this.schedulerMounted.set(false);\n\n afterNextRender(\n () => {\n this.schedulerMounted.set(true);\n },\n { injector: this.injector },\n );\n }\n\n async ngAfterViewInit(): Promise<void> {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n protected onTaskDrop(event: AXSchedulerSlotDropEvent): void {\n if (event.slot.view === 'agenda' && event.isSameSlotDrop) {\n return;\n }\n\n const dropResult = this.schedulerService.calculateAppointmentDropResult(event);\n if (dropResult.isSameSlotDrop) {\n return;\n }\n\n const originalTask = event.appointment as AXPTask;\n this.schedulerService.applyDropResult(\n originalTask as unknown as AXSchedulerAppointment,\n dropResult,\n );\n\n this.taskBoardService\n .updateTaskDateRange(originalTask, {\n from: dropResult.startDate,\n end: dropResult.endDate,\n })\n .then((persistedTask) => {\n this.onTaskChanged.emit(persistedTask);\n void this.schedulerComponent()?.refresh();\n })\n .catch((error) => {\n console.error('[TaskBoardCalendar] Failed to update task date range:', error);\n void this.schedulerComponent()?.refresh();\n });\n }\n\n protected onTaskRightClickHandler(event: AXSchedulerAppointmentMouseEvent): void {\n this.onTaskRightClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected onSlotDblClicked(event: AXSchedulerSlotMouseEvent): void {\n if (event.sender.selectedView() === 'month') {\n this.onMonthSlotDblClicked.emit(event.slot.startDate.date);\n }\n }\n\n protected async handleRangeChanged(event: AXSchedulerDateRange): Promise<void> {\n this.onRangeChanged.emit(event);\n }\n\n protected handleActionClick(event: AXSchedulerAppointmentMouseEvent): void {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected async onTaskClickHandler(event: AXSchedulerAppointmentMouseEvent): Promise<void> {\n const task = event.appointment as AXPTask;\n const anchor = this.resolveAppointmentAnchor(event);\n\n if (anchor) {\n await this.taskPopoverOverlay.open({\n task,\n anchor,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTask = result.items.find((t) => t.id === active.id);\n if (updatedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedTask, provider: active.provider });\n }\n void this.schedulerComponent()?.refresh();\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n\n protected async openTaskDetails(): Promise<void> {\n const task = this.taskPopoverOverlay.getActiveTask();\n if (!task) {\n return;\n }\n\n try {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n data: { id: task.id },\n });\n this.taskPopoverOverlay.close();\n } catch (error) {\n console.error('Failed to open task details:', error);\n }\n }\n\n private resolveAppointmentAnchor(event: AXSchedulerAppointmentMouseEvent): HTMLElement | undefined {\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isAppointment =\n element.classList?.contains('dx-scheduler-appointment') ||\n element.classList?.contains('ax-scheduler-appointment') ||\n element.hasAttribute('data-appointment-id');\n\n if (isAppointment) {\n targetElement = element;\n break;\n }\n\n const parent = element.parentElement;\n if (parent) {\n const isParentAppointment =\n parent.classList?.contains('dx-scheduler-appointment') ||\n parent.classList?.contains('ax-scheduler-appointment');\n\n if (isParentAppointment) {\n targetElement = parent;\n break;\n }\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n return targetElement;\n }\n}\n","@if (schedulerMounted()) {\n <ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [calendar]=\"schedulerCalendar()\"\n [startingDate]=\"schedulerStartingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n [showCurrentTimeIndicator]=\"true\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n ></ax-scheduler>\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService, AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-grid-view',\n templateUrl: './task-board-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n private fetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected gridRemountKeys = computed(() => [this.refreshNonce()]);\n\n protected tasksDataSource = computed(() => {\n const parentDataSource = this.dataSource();\n void this.refreshNonce();\n\n return new AXDataSource<any>({\n load: async (e) => {\n const result = await parentDataSource({ skip: e.skip, take: e.take });\n this.fetchedTasks.set(result.items);\n const unassignedLabel = await this.translationService.translateAsync(\n '@task-management:task-board.filter.unassigned',\n );\n const mappedItems = await Promise.all(\n result.items.map(async (task) => {\n const provider = this.taskBoardService.getProvider(task.provider);\n return {\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n statusTitle: task.status.title,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? unassignedLabel,\n type: provider ? await provider.getTitle() : undefined,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n };\n }),\n );\n return { items: mappedItems, total: result.total };\n },\n pageSize: 10,\n key: 'id',\n byKey: async (key: unknown) => {\n return this.fetchedTasks().find((task) => task.id === key);\n },\n });\n });\n\n constructor() {\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #gridManualFetchEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n const grid = this.grid();\n if (!grid) {\n return;\n }\n\n queueMicrotask(() => {\n untracked(() => {\n grid.refresh({ reset: true });\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.columns.set([]);\n return;\n }\n\n taskType.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n });\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (event.data) {\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const originalTask = mappedItem._originalTask || this.fetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.fetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import {\n AXKanbanBeforeDropEvent,\n AXKanbanComponent,\n AXKanbanItem,\n AXKanbanMouseEvent,\n AXKanbanSortEvent,\n AXKanbanStatus,\n} from '@acorex/components/kanban';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPTask, AXPTaskAction, AXPTaskActionMenuItem } from '../../task-board.types';\nimport { isCancelledTaskBoardCommandResult } from '../../task-board-command-result.util';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-kanban-view',\n templateUrl: './task-board-kanban-view.component.html',\n styleUrls: ['./task-board-kanban-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXKanbanComponent],\n})\nexport class AXMTaskBoardKanbanViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n kanbanComponent = viewChild(AXKanbanComponent);\n\n tasks = model.required<AXPTask[]>();\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n component = output<AXKanbanComponent>();\n onActionClick = output<AXPTaskAction>();\n\n statuses = signal<AXKanbanStatus[]>([]);\n\n stableTasks = computed(() => this.tasks(), { equal: isEqual });\n protected kanbanTasks = computed<AXKanbanItem[]>(() => {\n return this.stableTasks().map((task) => ({\n id: task.id,\n title: task.title,\n index: task.index,\n cssClass: task.cssClass,\n statusKey: task.status.id,\n description: task.description,\n }));\n });\n\n ngAfterViewInit(): void {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n\n if (this.kanbanComponent()) {\n this.component.emit(this.kanbanComponent()!);\n }\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.statuses.set([]);\n return;\n }\n taskType.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n //#region ---- Drag & Drop Handling ----\n\n /**\n * Handles the onBeforeDrop event from the kanban component.\n * Uses event.wait() to register async operations that the kanban will await.\n * If action is cancelled/failed, we set event.canceled = true to prevent the drop.\n */\n protected onBeforeDrop(event: AXKanbanBeforeDropEvent): void {\n // If no status change, allow the drop (just reordering)\n if (event.previousStatusKey === event.currentStatusKey) {\n return;\n }\n\n // Find the task being moved\n const task = this.stableTasks().find((t) => t.id === event.item?.id);\n if (!task || !task.provider) {\n // Allow drop if task not found or no provider\n return;\n }\n\n // Get the provider\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n return;\n }\n\n // Register the async operation using event.wait()\n // The kanban component will await this promise before proceeding\n event.wait(this.executeDropAction(event, task, provider));\n }\n\n /**\n * Executes the action for a drop operation.\n * Sets event.canceled = true if action fails or is cancelled.\n * IMPORTANT: Do NOT update the task status in dataSource here - let the kanban handle the move.\n * The kanban will update the status in onSortChanged, and we'll sync with backend there.\n */\n private async executeDropAction(\n event: AXKanbanBeforeDropEvent,\n task: AXPTask,\n provider: ReturnType<typeof this.taskBoardService.getProvider>,\n ): Promise<void> {\n if (!provider) {\n return;\n }\n\n try {\n // Get available actions for the task\n const actions = await provider.getActions(task);\n if (!actions || actions.length === 0) {\n // No actions available, allow the drop\n return;\n }\n\n // Find action that matches the new status\n const matchingAction = this.findActionForStatus(actions, event.currentStatusKey);\n if (!matchingAction || !matchingAction.command) {\n // No matching action found, allow the drop\n return;\n }\n\n // Execute the action and check result\n const result = await this.taskBoardService.executeCommand(matchingAction.command, task.provider!);\n\n // Check if action was successful (not cancelled or failed)\n if (result?.success === false || result === null || isCancelledTaskBoardCommandResult(result)) {\n // Action was cancelled or failed - prevent the drop\n event.canceled = true;\n return;\n }\n\n // Action succeeded - allow the drop to proceed\n // The kanban will handle the visual move, and onSortChanged will sync with backend\n } catch (error) {\n console.error('[KanbanDrop] Failed to execute action during drop:', error);\n // On error, prevent the drop to be safe\n event.canceled = true;\n }\n }\n\n /**\n * Finds an action that corresponds to the target status.\n * Matches actions by name patterns (e.g., \"approve\" action for \"approved\" status).\n */\n private findActionForStatus(\n actions: AXPTaskActionMenuItem[],\n targetStatus: string | number,\n ): AXPTaskActionMenuItem | null {\n const targetStatusStr = String(targetStatus).toLowerCase();\n\n // Common status-to-action mappings\n const statusActionMap: Record<string, string[]> = {\n approved: ['approve'],\n rejected: ['reject'],\n cancelled: ['cancel'],\n completed: ['complete', 'finish'],\n done: ['complete', 'finish'],\n inprogress: ['start', 'begin'],\n 'in-progress': ['start', 'begin'],\n blocked: ['block'],\n unblocked: ['unblock'],\n };\n\n // Check direct mappings first\n const possibleActionNames = statusActionMap[targetStatusStr] || [];\n for (const actionName of possibleActionNames) {\n const action = actions.find((a) => a.name?.toLowerCase().includes(actionName));\n if (action) {\n return action;\n }\n }\n\n // Try to find action by name containing status keywords\n const statusKeywords = targetStatusStr.split(/[-_\\s]+/);\n for (const keyword of statusKeywords) {\n if (keyword.length < 3) continue; // Skip very short keywords\n\n const action = actions.find((a) => {\n const actionName = a.name?.toLowerCase() || '';\n return actionName.includes(keyword) || keyword.includes(actionName);\n });\n\n if (action) {\n return action;\n }\n }\n\n // Try exact match with action name\n const exactMatch = actions.find((a) => a.name?.toLowerCase() === targetStatusStr);\n if (exactMatch) {\n return exactMatch;\n }\n\n // Try partial match (status contains action name or vice versa)\n for (const action of actions) {\n const actionName = action.name?.toLowerCase() || '';\n if (targetStatusStr.includes(actionName) || actionName.includes(targetStatusStr)) {\n return action;\n }\n }\n\n return null;\n }\n\n //#endregion\n\n protected onSortChanged(event: AXKanbanSortEvent) {\n const tasks = this.tasks().map((item) => {\n const task: AXKanbanItem | undefined = event.allItems.find((t) => t.id === item.id);\n if (!task) {\n return item;\n }\n\n const status = this.statuses().find((s) => String(s.key) === String(task.statusKey));\n if (!status) {\n return { ...item, index: task.index ?? item.index };\n }\n\n return {\n ...item,\n index: task.index ?? item.index,\n status: { id: status.key, title: status.title },\n };\n });\n\n this.taskBoardService\n .updateTasks(tasks)\n .then((updatedTasks) => {\n this.tasks.set(updatedTasks);\n })\n .catch((error) => {\n console.error('[KanbanSort] Failed to update tasks:', error);\n const provider = tasks[0]?.provider;\n if (provider) {\n this.taskBoardService.requestRefresh(provider);\n }\n });\n }\n\n protected async handleItemClick(event: AXKanbanMouseEvent): Promise<void> {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (!task) return;\n\n // Find the kanban item container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the kanban item container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isKanbanItem =\n element.classList?.contains('dx-kanban-item') ||\n element.classList?.contains('ax-kanban-item') ||\n element.hasAttribute('data-item-id');\n\n if (isKanbanItem) {\n targetElement = element;\n break;\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n if (targetElement) {\n await this.taskPopoverOverlay.open({\n task,\n anchor: targetElement,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n protected handleActionClick(event: AXKanbanMouseEvent) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (task) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: task });\n }\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: active.provider }));\n const updatedMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const currentTasks = this.tasks();\n const mergedTasks = currentTasks.map((t) => updatedMap.get(t.id) ?? t);\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id));\n this.tasks.set([...mergedTasks, ...newTasks]);\n\n const updatedSelectedTask = updatedMap.get(active.id);\n if (updatedSelectedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedSelectedTask, provider: active.provider });\n }\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n}\n","<ax-kanban\n [statuses]=\"statuses()\"\n [dataSource]=\"kanbanTasks()\"\n (onItemClick)=\"handleItemClick($event)\"\n (onBeforeDrop)=\"onBeforeDrop($event)\"\n (onSortChanged)=\"onSortChanged($event)\"\n></ax-kanban>\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXKanbanStatus } from '@acorex/components/kanban';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService, AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter, AXPWorkflowTaskProvider } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\ninterface StatusTaskGroup {\n statusInfo: AXKanbanStatus;\n tasks: AXDataSource<any>;\n}\n\nfunction statusGroupTrackKey(nonce: number, group: StatusTaskGroup): string {\n return `${nonce}:${String(group.statusInfo.key)}`;\n}\n\nfunction taskMatchesStatus(task: AXPTask, status: AXKanbanStatus): boolean {\n return String(task.status.id) === String(status.key);\n}\n\n@Component({\n selector: 'axm-task-board-status-grouped-grid-view',\n templateUrl: './task-board-status-grouped-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardStatusGroupedGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n\n provider = input<AXPWorkflowTaskProvider>();\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n groupedTasks = signal<StatusTaskGroup[]>([]);\n private allFetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected statuses = signal<AXKanbanStatus[]>([]);\n protected grids = viewChildren<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected trackStatusGroup = (_index: number, group: StatusTaskGroup) =>\n statusGroupTrackKey(this.refreshNonce(), group);\n\n protected groupedViewRemountKeys = computed(() => [this.refreshNonce()]);\n\n constructor() {\n afterNextRender(() => {\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 200);\n });\n });\n\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #dataChanged = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n const allStatuses = this.statuses();\n\n const parentDataSource = this.dataSource();\n if (!parentDataSource || allStatuses.length === 0) {\n this.groupedTasks.set([]);\n this.allFetchedTasks.set([]);\n return;\n }\n\n void parentDataSource().then((result) => {\n this.allFetchedTasks.set(result.items);\n const allTasks = result.items;\n\n const statusGroups = allStatuses.map((status) => {\n const tasksForStatus = allTasks.filter((task) => taskMatchesStatus(task, status));\n return {\n statusInfo: status,\n tasks: this.createTaskDataSourceForGroup(tasksForStatus),\n };\n });\n\n this.groupedTasks.set(statusGroups);\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 0);\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const provider = this.vm.selectedTaskTypes()[0];\n provider?.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n provider?.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n #gridsChanged = effect(() => {\n const groups = this.groupedTasks();\n untracked(() => {\n setTimeout(() => {\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 100);\n });\n });\n\n private createTaskDataSourceForGroup(tasks: AXPTask[]): AXDataSource<any> {\n return new AXDataSource<any>({\n load: async (e) => {\n const unassignedLabel = await this.translationService.translateAsync(\n '@task-management:task-board.filter.unassigned',\n );\n const items = tasks.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? unassignedLabel,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n }));\n return {\n items: items.slice(e.skip, e.skip + e.take),\n total: items.length,\n };\n },\n pageSize: 5,\n key: 'id',\n byKey: async (key: unknown) => {\n return tasks.find((task) => task.id === key);\n },\n });\n }\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (!event.data) {\n return;\n }\n const mappedItem = event.data as { id?: string | number; _originalTask?: AXPTask };\n const originalTask = mappedItem._originalTask ?? this.allFetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.allFetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of groupedViewRemountKeys(); track remountKey) {\n @for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"text-xl font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n }\n}\n","\nimport {\n AXPActionMenuItem,\n AXPBreadcrumbItem,\n AXPExecuteCommand,\n AXPFilterDefinition,\n AXPFilterQuery,\n AXPKeyboardShortcutPriority,\n AXPQueryRequest,\n collectQueryFilterLeaves,\n runtimeQueryCollectionData,\n} from '@acorex-platform/framework-shared/core';\nimport { AXStyleColorType, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCalendarComponent, AXCalendarSlotClick } from '@acorex/components/calendar';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport {\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerComponent,\n} from '@acorex/components/scheduler';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\nimport { AXPDeviceService, AXPKeyboardShortcutRegistry } from '@acorex-platform/framework-client/core';\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n AXPQueryFiltersComponent,\n AXPThemeLayoutBlockComponent,\n type AXPLayoutSideDetailPanelHeader,\n type AXPLayoutSideDetailPanelSection,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n HostListener,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, ParamMap, Params, RouterModule } from '@angular/router';\nimport { isEqual, sortBy } from 'lodash';\nimport { filter } from 'rxjs';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXMTaskManagementQueryKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPDueStatusProviderService } from './due-status';\nimport {\n canViewAllTaskAssignees,\n normalizeTaskBoardAssigneeIds,\n} from './task-board-assignee-access';\nimport { AXMTaskBoardContentSkeletonComponent } from './task-board-content-skeleton/task-board-content-skeleton.component';\nimport { AXMTaskBoardDetailPanel } from './task-board-detail-panel/task-board-detail-panel.component';\nimport { normalizeTaskTypeFilterNames } from './task-board-filter.utils';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport { filterTasksOverlappingRange } from './task-board-range.utils';\nimport { enrichTaskBoardTasks, resolveTaskBoardSchedulerLabels } from './task-board-task-enrichment.utils';\nimport {\n applyTaskBoardDateRangeToViewModel,\n deriveTaskBoardDateRangeFromNavigator,\n getTaskBoardLayoutOptions,\n isTaskBoardRangeFilterCategory,\n resolveTaskBoardCategoryLayoutFromQuery,\n usesTaskBoardToolbarNavigator,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction, AXPTaskBoardColorBy, AXPTaskFilter } from './task-board.types';\nimport { isCancelledTaskBoardCommandResult } from './task-board-command-result.util';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from './task-board.viewmodel';\nimport { AXMTaskBoardCalendarViewComponent } from './views/task-board-calendar-view/task-board-calendar-view.component';\nimport { AXMTaskBoardGridViewComponent } from './views/task-board-grid-view/task-board-grid-view.component';\nimport { AXMTaskBoardKanbanViewComponent } from './views/task-board-kanban-view/task-board-kanban-view.component';\nimport { AXMTaskBoardStatusGroupedGridViewComponent } from './views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component';\n\nexport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\n\n@Component({\n templateUrl: './task-board.page.html',\n styleUrls: ['./task-board.page.css'],\n imports: [\n FormsModule,\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXPQueryFiltersComponent,\n AXMTaskBoardContentSkeletonComponent,\n AXMTaskBoardCalendarViewComponent,\n AXMTaskBoardKanbanViewComponent,\n AXMTaskBoardGridViewComponent,\n AXMTaskBoardStatusGroupedGridViewComponent,\n AXMTaskBoardDetailPanel,\n AXPopoverModule,\n AXCalendarComponent,\n AXSelectionListModule,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ],\n})\nexport class AXMTaskBoardPage extends AXPPageLayoutBaseComponent implements OnInit {\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n protected readonly vm = inject(AXMTaskBoardViewModel);\n private readonly unsubscribe = inject(AXUnsubscriber);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly localeService = inject(AXLocaleService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dueStatusProviderService = inject(AXPDueStatusProviderService);\n private readonly queryService = inject(AXPQueryService);\n private readonly translationService = inject(AXTranslationService);\n\n private readonly sessionUser = toSignal(this.sessionService.user$, { initialValue: null });\n private readonly sessionPermissions = toSignal(this.sessionService.permissions$, { initialValue: [] as string[] });\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n private readonly profileChanged = toSignal(this.localeService.profileChanged$, {\n initialValue: this.localeService.activeProfile(),\n });\n\n private navigatorTimeTextVersion = 0;\n\n protected readonly colorByItems: { key: AXPTaskBoardColorBy; titleKey: string }[] = [\n { key: 'dueDate', titleKey: '@task-management:task-board.color-by.due-date' },\n { key: 'priority', titleKey: '@task-management:task-board.color-by.priority' },\n { key: 'status', titleKey: '@task-management:task-board.color-by.status' },\n ];\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n protected calendar = viewChild<AXCalendarComponent>('calendar');\n\n protected isReady = signal(false);\n protected isSettingsPanelOpen = signal(false);\n protected readonly settingsPanelCopy = signal({\n title: '',\n colorBy: '',\n calendars: '',\n });\n protected filtersReady = signal(false);\n protected calendarEventTypes = signal<Array<{ id: string; title: string; color?: string; icon?: string }>>([]);\n protected resources = signal<AXPResource[]>([]);\n protected isQueryParam = signal<boolean>(false);\n protected refreshNonce = signal(0);\n protected navigatorTimeText = signal('');\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n private currentTask = signal<AXPTask | null>(null);\n protected schedulerComponent = signal<AXSchedulerComponent | null>(null);\n private boardTasksLoadVersion = 0;\n private filtersPanelInitialized = false;\n private lastLocaleProfileCode: string | null = null;\n\n /** Ctrl enables range selection in kanban/table navigator popover calendars. */\n protected readonly navigatorRangeSelectActive = signal(false);\n\n /** True after a plain (non-Ctrl) single-day click in the navigator calendar. */\n private navigatorPlainSingleDaySelected = false;\n\n private readonly modifierRangeBasedViews: AXPTaskBoardViewMode[] = ['grid', 'kanban', 'status-grouped-grid'];\n\n private readonly alwaysRangeBasedViews: AXPTaskBoardViewMode[] = ['agenda', 'timeline-weekly'];\n\n private dayDataCache = signal<Map<string, number>>(new Map());\n\n /** Tasks loaded for the widest navigator + view range (single fetch). */\n private boardTasksRaw = signal<AXPTask[]>([]);\n\n /** Tasks visible in the active view range (derived from {@link boardTasksRaw}). */\n protected boardTasks = signal<AXPTask[]>([]);\n\n protected readonly showToolbarNavigator = computed(() => usesTaskBoardToolbarNavigator(this.vm.currentViewMode()));\n\n protected readonly showViewLayoutSwitcher = computed(\n () => getTaskBoardLayoutOptions(this.vm.currentViewCategory()).length > 0,\n );\n\n protected readonly viewLayoutItems = computed(() => getTaskBoardLayoutOptions(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayout = computed(() => this.vm.getLayoutForCategory(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayoutTitleKey = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item ? this.viewLayoutTranslationKey(item.text) : '';\n });\n\n protected readonly selectedViewLayoutIcon = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item?.icon ?? 'fa-light fa-sliders';\n });\n\n protected readonly effectiveColorBy = computed(() => this.vm.effectiveColorBy());\n\n protected readonly settingsPanelHeader = computed(\n (): AXPLayoutSideDetailPanelHeader => ({\n primaryTitle: this.settingsPanelCopy().title,\n icon: {\n iconClass: 'fa-fw fa-lg fa-light fa-gear',\n },\n }),\n );\n\n protected readonly settingsPanelSections = computed((): AXPLayoutSideDetailPanelSection[] => {\n const copy = this.settingsPanelCopy();\n const sections: AXPLayoutSideDetailPanelSection[] = [{ title: copy.colorBy, projectionKey: 'colorBy' }];\n\n if (this.showCalendarEventButton()) {\n sections.push({ title: copy.calendars, projectionKey: 'calendars' });\n }\n\n return sections;\n });\n\n private readonly settingsPanelI18nEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadSettingsPanelCopy();\n });\n\n /** Resolves navigator date label asynchronously so month names react to locale/profile changes. */\n private readonly navigatorTimeTextEffect = effect(() => {\n this.profileChanged();\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarType();\n this.refreshNonce();\n\n const version = ++this.navigatorTimeTextVersion;\n\n untracked(() => {\n void this.resolveNavigatorTimeText().then((text) => {\n if (version === this.navigatorTimeTextVersion) {\n this.navigatorTimeText.set(text);\n }\n });\n });\n });\n\n /** Re-render navigator calendar when regional week layout changes. */\n private readonly navigatorCalendarLayoutEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarService.getActiveCalendar()?.weekdays;\n this.calendarType();\n\n untracked(() => {\n queueMicrotask(() => {\n this.calendar()?.render();\n });\n });\n });\n\n private readonly canFilterByAllAssignees = computed(() => {\n this.sessionUser();\n this.sessionPermissions();\n return canViewAllTaskAssignees(this.sessionService);\n });\n\n protected readonly calendarEventTypeItems = computed(() =>\n this.calendarEventTypes().map((eventType) => ({\n id: eventType.id,\n text: eventType.title,\n icon: eventType.icon,\n })),\n );\n\n protected readonly showCalendarEventButton = computed(\n () => !this.isNonCalendarView() && this.calendarEventTypeItems().length > 0,\n );\n\n protected readonly selectedCalendarEventTypeCount = computed(() => this.vm.selectedCalendarEventTypeIds().length);\n\n protected readonly filterDefinitions = computed<AXPFilterDefinition[]>(() => {\n const canFilterByAll = this.canFilterByAllAssignees();\n const assigneeScopeKey = `${this.sessionUser()?.id ?? ''}:${canFilterByAll}`;\n const isMultiTaskType = this.isMultiSelectTaskTypeEnabled();\n\n const definitions: AXPFilterDefinition[] = [\n {\n field: 'type',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.task-type',\n icon: 'fa-light fa-list',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: AXMTaskManagementQueryKeys.ListTaskTypes,\n valueField: 'name',\n textField: 'title',\n multiple: isMultiTaskType,\n allowClear: isMultiTaskType,\n },\n },\n filterType: { advance: true, inline: false },\n },\n ];\n\n // Without ViewAllTasks, assignee is always the current user — hide the filter entirely.\n if (canFilterByAll) {\n definitions.push({\n field: 'assignee',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.assignee',\n icon: 'fa-light fa-user',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: true,\n allowClear: true,\n readonly: false,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n assigneeScopeKey,\n },\n },\n filterType: { advance: true, inline: false },\n });\n }\n\n definitions.push({\n field: 'reporter',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.reporter',\n icon: 'fa-light fa-user-pen',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: true,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardReporters,\n },\n },\n filterType: { advance: true, inline: false },\n });\n\n return definitions;\n });\n\n private lastCanFilterByAllAssignees: boolean | null = null;\n\n /** Re-scope assignee filter when user or permissions change; refresh chips when ViewAllTasks changes. */\n private readonly assigneeScopeEffect = effect(() => {\n this.sessionUser();\n this.sessionPermissions();\n const canFilterByAll = this.canFilterByAllAssignees();\n const permissionChanged = this.lastCanFilterByAllAssignees !== canFilterByAll;\n this.lastCanFilterByAllAssignees = canFilterByAll;\n\n if (this.vm.isLoading()) {\n return;\n }\n\n const currentIds = this.vm.selectedAssigneeIds();\n const scopedIds = normalizeTaskBoardAssigneeIds(this.sessionService, currentIds);\n const assigneeIdsChanged = !isEqual(sortBy(currentIds.map(String)), sortBy(scopedIds.map(String)));\n if (assigneeIdsChanged) {\n this.vm.setSelectedAssigneeIds(scopedIds, this.isQueryParam(), false);\n }\n\n if (this.filtersPanelInitialized && (assigneeIdsChanged || permissionChanged)) {\n untracked(() => void this.syncPanelInitialFilters());\n }\n });\n\n protected calendarType = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n protected todayButtonTextKey = computed(() => {\n switch (this.vm.currentViewMode()) {\n case 'week':\n return '@task-management:task-board.navigator.current-week';\n case 'month':\n case 'timeline-month':\n return '@task-management:task-board.navigator.current-month';\n case 'timeline-year':\n return '@task-management:task-board.navigator.current-year';\n default:\n return '@task-management:task-board.navigator.today';\n }\n });\n protected calendarDepth = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n return 'day';\n }\n return this.schedulerComponent()?.calendarDepth() || 'day';\n });\n\n protected currentDateForCalendar = computed(() => {\n const pendingRangeStart = this.vm.rangeStartDate();\n if (pendingRangeStart && this.isModifierRangeNavigatorView()) {\n return pendingRangeStart;\n }\n const date = this.vm.currentDate();\n return date || new Date();\n });\n protected filter = computed<AXPTaskFilter>(() => {\n const taskTypeNames = this.vm.selectedTaskTypeNames();\n const assigneeIds = this.vm.selectedAssigneeIds();\n const reporterIds = this.vm.selectedReporterIds();\n\n const currentDate = this.vm.currentDate() || new Date();\n let from: AXDateTime = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n let end: AXDateTime;\n\n const currentView = this.vm.currentViewMode();\n\n if (currentView === 'grid') {\n // List/grid is always scoped to the current month, regardless of any day-range\n // selected from the navigator in other views.\n from = from.startOf('month');\n end = from.endOf('month');\n } else if (\n currentView === 'kanban' ||\n currentView === 'agenda' ||\n currentView === 'timeline-weekly' ||\n currentView === 'status-grouped-grid'\n ) {\n end = from.add('day', this.vm.daysCount() - 1);\n } else if (currentView === 'month' || currentView === 'timeline-month') {\n from = from.startOf('month');\n end = from.endOf('month');\n } else {\n end = from.endOf('day');\n }\n\n return {\n // Empty filter means \"all items\" for task type/provider.\n ...(taskTypeNames.length > 0 && { types: taskTypeNames }),\n ...(assigneeIds.length > 0 && { assigneeIds }),\n ...(reporterIds.length > 0 && { reporterIds }),\n range: { from: from.date, end: end.date },\n };\n });\n\n private enrichTasks(tasks: AXPTask[]): AXPTask[] {\n return enrichTaskBoardTasks(tasks, this.vm.effectiveColorBy(), this.dueStatusProviderService);\n }\n\n private async enrichTasksForViews(tasks: AXPTask[]): Promise<AXPTask[]> {\n const labeled = await resolveTaskBoardSchedulerLabels(\n tasks,\n this.translateService,\n this.formatService,\n this.settingsService,\n );\n return this.enrichTasks(labeled);\n }\n\n private contextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n\n override async ngOnInit() {\n await super.ngOnInit();\n\n this.taskBoardService.refresh$.subscribe(async () => {\n await this.reloadTaskBoardData();\n });\n\n await this.vm.initialize();\n\n const calendars = await this.loadCalendarFilterOptions();\n\n await this.loadFromRoute();\n\n if (this.activatedRoute.snapshot.queryParamMap.has('calendarEvent')) {\n void this.router.navigate([], {\n queryParams: { calendarEvent: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n if (this.vm.selectedCalendarEventTypeIds().length === 0 && calendars.length > 0) {\n this.vm.setSelectedCalendarEventTypeIds(calendars.map((calendar) => calendar.id));\n }\n\n this.filtersReady.set(true);\n this.isReady.set(true);\n this.registerKeyboardShortcuts();\n await this.getResources();\n\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.loadFromRoute();\n });\n\n this.taskBoardService.openTask$.subscribe(async ({ task, provider, instanceId, activityId }) => {\n let match = task;\n if (!match && instanceId && activityId) {\n match = this.boardTasksRaw().find((t) => {\n const data = t.data as { instanceId?: string; activityId?: string } | undefined;\n return data?.instanceId === instanceId && data?.activityId === activityId;\n });\n }\n if (!match) {\n return;\n }\n this.vm.selectTask({\n ...match,\n provider: match.provider ?? provider,\n });\n });\n }\n override async getPageTitle(): Promise<string> {\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n return await this.translateService.translateAsync(this.viewPageTitleTranslationKey(category, layout));\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] {\n const currentCategory = this.vm.currentViewCategory();\n return this.vm.visibleViewCategories().map((category) => ({\n title: this.viewCategoryTranslationKey(category),\n icon: currentCategory === category ? 'fa-check' : '',\n command: {\n name: 'task-board-category',\n metadata: { category, isSelected: currentCategory === category, hideSelectionCheckSuffix: true },\n },\n }));\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@task-management:task-board.page-title'),\n },\n ];\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n // {\n // ...getActionButton('refresh'),\n // command: { name: 'refresh' },\n // },\n ];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.name === 'task-board-category') {\n const category = command.metadata?.['category'] as AXPTaskBoardViewCategory | undefined;\n if (category) {\n this.applyViewCategory(category);\n }\n return;\n }\n // if (command.name === 'refresh') {\n // this.taskBoardService.requestRefresh();\n // }\n }\n\n protected schedulerDataSource: AXSchedulerAppointmentDataSource = (schedulerFilter) => {\n const pageFilter = this.filter();\n const visibleRange = schedulerFilter?.range ?? pageFilter.range;\n if (!visibleRange) {\n return Promise.resolve([]);\n }\n\n const items = filterTasksOverlappingRange(this.boardTasksRaw(), visibleRange);\n this.validateSelectedTask(items);\n return Promise.resolve(items as AXSchedulerAppointment[]);\n };\n\n protected gridDataSource = (filter?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> => {\n const items = this.boardTasks();\n const skip = filter?.skip ?? 0;\n const take = filter?.take ?? 10;\n this.validateSelectedTask(items);\n return Promise.resolve({\n items: items.slice(skip, skip + take),\n total: items.length,\n });\n };\n\n resolvedTasks = signal<AXPTask[]>([]);\n\n\n schedulerComponentChanged(component: AXSchedulerComponent) {\n this.schedulerComponent.set(component);\n }\n\n /** Single board task loader — one API fan-out per filter change. */\n private readonly boardTasksLoadEffect = effect(() => {\n if (!this.isReady()) {\n return;\n }\n\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.localeService.activeProfile().localeInfo?.code;\n\n const version = ++this.boardTasksLoadVersion;\n void this.loadBoardTasks(version);\n });\n\n private async reloadTaskBoardData(): Promise<void> {\n this.taskBoardService.invalidateTaskCache();\n await this.vm.reloadTaskTypes();\n if (this.filtersPanelInitialized) {\n await this.syncPanelInitialFilters();\n }\n await this.getResources();\n const version = ++this.boardTasksLoadVersion;\n await this.loadBoardTasks(version);\n }\n\n private async loadBoardTasks(expectedVersion: number): Promise<void> {\n const filter = this.buildBoardFetchFilter();\n const result = await this.taskBoardService.getTasks(filter);\n if (expectedVersion !== this.boardTasksLoadVersion) {\n return;\n }\n\n const enriched = await this.enrichTasksForViews(result.items);\n if (expectedVersion !== this.boardTasksLoadVersion) {\n return;\n }\n\n this.boardTasksRaw.set(enriched);\n this.applyBoardTasksForCurrentView(enriched);\n this.rebuildDayDataCacheFromTasks(enriched);\n this.refreshNonce.update((value) => value + 1);\n }\n\n private buildBoardFetchFilter(): AXPTaskFilter {\n const pageFilter = this.filter();\n const navigatorRange = this.getNavigatorDataRange();\n const pageRange = pageFilter.range;\n\n if (!pageRange) {\n return { ...pageFilter, range: navigatorRange };\n }\n\n return {\n ...pageFilter,\n range: {\n from: pageRange.from < navigatorRange.from ? pageRange.from : navigatorRange.from,\n end: pageRange.end > navigatorRange.end ? pageRange.end : navigatorRange.end,\n },\n };\n }\n\n private getNavigatorDataRange(): { from: Date; end: Date } {\n const currentDate = this.vm.currentDate();\n const depth = this.calendarDepth();\n\n if (depth === 'month') {\n return {\n from: this.calendarService.create(currentDate).startOf('year').date,\n end: this.calendarService.create(currentDate).endOf('year').date,\n };\n }\n\n return {\n from: this.calendarService.create(currentDate).startOf('month').date,\n end: this.calendarService.create(currentDate).endOf('month').date,\n };\n }\n\n private applyBoardTasksForCurrentView(tasks: AXPTask[]): void {\n const viewRange = this.filter().range;\n const visible = viewRange ? filterTasksOverlappingRange(tasks, viewRange) : tasks;\n this.boardTasks.set(visible);\n this.validateSelectedTask(visible);\n\n const viewMode = this.vm.currentViewMode();\n if (viewMode === 'kanban' || viewMode === 'status-grouped-grid') {\n this.resolvedTasks.set(visible);\n }\n }\n\n private reEnrichBoardTasksFromRaw(): void {\n const raw = this.boardTasksRaw();\n if (raw.length === 0) {\n return;\n }\n\n const reEnriched = this.enrichTasks(raw);\n this.boardTasksRaw.set(reEnriched);\n this.applyBoardTasksForCurrentView(reEnriched);\n this.rebuildDayDataCacheFromTasks(reEnriched);\n }\n\n protected async handleContextMenuOnOpening(event: AXContextMenuOpeningEvent) {\n const currentTask = this.currentTask();\n if (!currentTask) return;\n const providerName = currentTask.provider;\n if (!providerName) return;\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) return;\n const actions = await provider.getActions(currentTask);\n for (const item of actions) {\n const t = item.title;\n const text =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n event.items.push({\n text,\n icon: item.icon,\n color: item.color as AXStyleColorType,\n break: item.break,\n data: {\n command: item.command,\n },\n });\n }\n }\n\n protected handleContextMenu(event: AXPTaskAction) {\n this.currentTask.set(event.task);\n const x = event.nativeEvent.clientX;\n const y = event.nativeEvent.clientY;\n const element = event.nativeEvent.target as HTMLElement;\n this.contextMenu()?.showAt({ x, y }, element);\n }\n\n protected handleMonthSlotDblClicked(date: Date) {\n this.vm.setCurrentDate(date);\n this.vm.setViewLayout('calendar', 'daily');\n }\n\n private viewCategoryTranslationKey(category: AXPTaskBoardViewCategory): string {\n return `@task-management:task-board.${category}`;\n }\n\n private viewPageTitleTranslationKey(\n category: AXPTaskBoardViewCategory,\n layout: ReturnType<typeof this.vm.getLayoutForCategory>,\n ): string {\n if (category === 'kanban') {\n return '@task-management:task-board.view-page-title.kanban';\n }\n if (layout) {\n return `@task-management:task-board.view-page-title.${category}.${layout}`;\n }\n return this.viewCategoryTranslationKey(category);\n }\n\n protected viewLayoutTranslationKey(layoutText: string): string {\n return `@task-management:task-board.view.${layoutText}`;\n }\n\n protected isViewLayoutSelected(layout: AXPTaskBoardViewLayout): boolean {\n return this.selectedViewLayout() === layout;\n }\n\n protected handleViewLayoutChange(layout: AXPTaskBoardViewLayout): void {\n this.vm.setViewLayout(this.vm.currentViewCategory(), layout);\n void this.navigateViewState();\n this.recompute();\n }\n\n private applyViewCategory(category: AXPTaskBoardViewCategory): void {\n const previousCategory = this.vm.currentViewCategory();\n const previousMode = this.vm.currentViewMode();\n\n if (isTaskBoardRangeFilterCategory(category) && !isTaskBoardRangeFilterCategory(previousCategory)) {\n this.applySmartDateRangeFromNavigator(previousMode);\n }\n\n this.vm.setViewCategory(category);\n void this.navigateViewState();\n this.popover()?.close();\n this.recompute();\n }\n\n private applySmartDateRangeFromNavigator(sourceViewMode: AXPTaskBoardViewMode): void {\n const range = deriveTaskBoardDateRangeFromNavigator(\n this.calendarService,\n sourceViewMode,\n this.vm.currentDate(),\n this.vm.daysCount(),\n );\n applyTaskBoardDateRangeToViewModel(\n range,\n (date) => this.vm.setCurrentDate(date),\n (days) => this.vm.setDaysCount(days),\n );\n }\n\n private navigateViewState(): void {\n const queryParams = this.buildFilterQueryParams();\n if (areTaskBoardQueryParamsEquivalent(this.activatedRoute.snapshot.queryParamMap, queryParams)) {\n return;\n }\n\n void this.router.navigate([], {\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n\n protected toggleSettingsPanel(): void {\n this.isSettingsPanelOpen.update((open) => !open);\n }\n\n protected closeSettingsPanel(): void {\n this.isSettingsPanelOpen.set(false);\n }\n\n private async loadSettingsPanelCopy(): Promise<void> {\n const [title, colorBy, calendars] = await Promise.all([\n this.translationService.translateAsync('@task-management:task-board.settings.title'),\n this.translationService.translateAsync('@task-management:task-board.settings.color-by'),\n this.translationService.translateAsync('@task-management:task-board.filter.calendars'),\n ]);\n\n this.settingsPanelCopy.set({\n title: title ?? '',\n colorBy: colorBy ?? '',\n calendars: calendars ?? '',\n });\n }\n\n protected handleCalendarEventTypesSelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const next = Array.isArray(event.value)\n ? event.value.map(String)\n : event.value != null\n ? [String(event.value)]\n : [];\n\n this.vm.setSelectedCalendarEventTypeIds(next);\n }\n\n protected handleFiltersChanged(incoming: AXPFilterQuery[]): void {\n if (!this.filtersPanelInitialized) {\n return;\n }\n\n // User-driven filter changes should persist and override URL-seeded state.\n this.isQueryParam.set(false);\n\n const filters = collectQueryFilterLeaves(incoming);\n const typeFilter = filters.find((f) => f.field === 'type');\n const assigneeFilter = filters.find((f) => f.field === 'assignee');\n const reporterFilter = filters.find((f) => f.field === 'reporter');\n\n this.syncTaskTypesToViewModel(typeFilter?.value);\n if (this.canFilterByAllAssignees()) {\n this.syncAssigneesToViewModel(assigneeFilter?.value);\n }\n this.syncReportersToViewModel(reporterFilter?.value);\n\n void this.navigateViewState();\n }\n\n private async syncPanelInitialFilters(): Promise<void> {\n this.panelInitialFilters.set(await this.buildInitialFiltersFromViewModel());\n }\n\n private async buildInitialFiltersFromViewModel(): Promise<AXPFilterQuery[]> {\n const filters: AXPFilterQuery[] = [];\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n\n if (types.length > 0) {\n const typeValue = this.isMultiSelectTaskTypeEnabled() ? types : types[0];\n filters.push({\n field: 'type',\n operator: { type: 'equal' },\n value: typeValue,\n displayText: await this.resolveSelectFilterDisplayText(\n AXMTaskManagementQueryKeys.ListTaskTypes,\n 'name',\n 'title',\n typeValue,\n ),\n });\n }\n if (this.canFilterByAllAssignees() && assignees.length > 0) {\n filters.push({\n field: 'assignee',\n operator: { type: 'equal' },\n value: assignees,\n displayText: await this.resolveSelectFilterDisplayText(\n AXMTaskManagementQueryKeys.TaskBoardAssignees,\n 'id',\n 'displayName',\n assignees,\n ),\n });\n }\n if (reporters.length > 0) {\n filters.push({\n field: 'reporter',\n operator: { type: 'equal' },\n value: reporters,\n displayText: await this.resolveSelectFilterDisplayText(\n AXMTaskManagementQueryKeys.TaskBoardReporters,\n 'id',\n 'displayName',\n reporters,\n ),\n });\n }\n\n return filters;\n }\n\n private async resolveSelectFilterDisplayText(\n dataSourceName: string,\n valueField: string,\n textField: string,\n values: unknown,\n ): Promise<string> {\n const ids = Array.isArray(values) ? values : values != null && values !== '' ? [values] : [];\n if (ids.length === 0) {\n return '';\n }\n\n if (!this.queryService.exists(dataSourceName)) {\n return ids.map((id) => String(this.unwrapFilterValue(id))).join(', ');\n }\n\n const labels = await Promise.all(\n ids.map(async (id) => {\n const rawId = this.unwrapFilterValue(id);\n const result = await this.queryService.fetch<AXPQueryRequest, Record<string, unknown>>(\n dataSourceName,\n {\n skip: 0,\n take: 1,\n filter: {\n field: valueField,\n operator: { type: 'equal' },\n value: rawId,\n },\n },\n );\n const page = runtimeQueryCollectionData(result);\n const item = page?.items?.[0];\n if (item && typeof item === 'object') {\n const label = item[textField];\n if (label != null && label !== '') {\n return String(label);\n }\n }\n return String(rawId);\n }),\n );\n return labels.join(', ');\n }\n\n private buildFilterQueryParams(): Params {\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n const canFilterByAll = this.canFilterByAllAssignees();\n\n return {\n view: category,\n layout: layout ?? null,\n type: types.length > 0 ? types : null,\n assignee: canFilterByAll && assignees.length > 0 ? assignees.map(String) : null,\n reporter: reporters.length > 0 ? reporters.map(String) : null,\n calendarEvent: null,\n };\n }\n\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeStringArrayFilterValue(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'name' in item) {\n return String((item as { name: string }).name);\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'name' in v) {\n return [String((v as { name: string }).name)];\n }\n return [String(v)];\n }\n\n private normalizeIdArrayFilterValue(value: unknown): (string | number)[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string' || typeof item === 'number') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'id' in item) {\n return (item as { id: string | number }).id;\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'id' in v) {\n return [(v as { id: string | number }).id];\n }\n if (typeof v === 'string' || typeof v === 'number') {\n return [v];\n }\n return [String(v)];\n }\n\n private syncTaskTypesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newNames = normalizeTaskTypeFilterNames(raw, this.vm.taskTypeOptions());\n const currentNames = this.vm.selectedTaskTypeNames();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedTaskTypeNames(newNames, this.isQueryParam());\n }\n }\n\n private syncAssigneesToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedAssigneeIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n // Always persist an explicit UI change (including clearing to \"all assignees\").\n this.vm.setSelectedAssigneeIds(newIds, false, true);\n }\n }\n\n private syncReportersToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedReporterIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n this.vm.setSelectedReporterIds(newIds, this.isQueryParam());\n }\n }\n\n protected handleColorBySelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n this.handleColorByChange(event.value as AXPTaskBoardColorBy);\n }\n\n protected handleColorByChange(key: AXPTaskBoardColorBy): void {\n this.vm.setColorBy(key);\n this.reEnrichBoardTasksFromRaw();\n this.refreshNonce.update((value) => value + 1);\n }\n\n private isMultiSelectTaskTypeEnabled(): boolean {\n const viewMode = this.vm.currentViewMode();\n return viewMode !== 'kanban' && viewMode !== 'status-grouped-grid';\n }\n\n /** Re-normalizes filter keys when locale/profile changes (titles must not drive filtering). */\n private readonly localeFilterRefreshEffect = effect(() => {\n const profileCode = this.localeService.activeProfile().localeInfo?.code ?? '';\n if (!profileCode || this.vm.isLoading() || !this.filtersPanelInitialized) {\n return;\n }\n\n const previousCode = this.lastLocaleProfileCode;\n this.lastLocaleProfileCode = profileCode;\n if (previousCode == null || previousCode === profileCode) {\n return;\n }\n\n untracked(() => {\n const taskTypeOptions = this.vm.taskTypeOptions();\n const normalizedTypes = normalizeTaskTypeFilterNames(this.vm.selectedTaskTypeNames(), taskTypeOptions);\n if (!isEqual(sortBy(normalizedTypes), sortBy(this.vm.selectedTaskTypeNames()))) {\n this.vm.setSelectedTaskTypeNames(normalizedTypes);\n }\n\n void this.vm.reloadTaskTypes({ force: true }).then(() => {\n void this.syncPanelInitialFilters();\n this.refreshNonce.update((value) => value + 1);\n });\n });\n });\n\n private readonly refreshEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.effectiveColorBy();\n this.vm.currentDate();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.refreshNonce();\n\n void this.getResources();\n });\n\n private readonly calendarEventTypeRefreshEffect = effect(() => {\n this.vm.selectedCalendarEventTypeIds();\n this.localeService.activeProfile().localeInfo?.code;\n });\n\n private readonly calendarLocalizationEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadCalendarFilterOptions();\n });\n\n private async loadCalendarFilterOptions(): Promise<Array<{ id: string; title: string }>> {\n const calendars = await this.taskBoardService.getCalendarEventTypes();\n this.calendarEventTypes.set(\n calendars.map((calendar) => ({\n id: calendar.id,\n title: calendar.title,\n })),\n );\n return calendars;\n }\n\n private rebuildDayDataCacheFromTasks(tasks: AXPTask[]): void {\n const navigatorRange = this.getNavigatorDataRange();\n const tasksInNavigatorRange = filterTasksOverlappingRange(tasks, navigatorRange);\n const dayCountMap = new Map<string, number>();\n\n tasksInNavigatorRange.forEach((task) => {\n const taskStart = new Date(task.startDate);\n const taskEnd = new Date(task.endDate);\n const startDay = this.calendarService.create(taskStart).startOf('day');\n const endDay = this.calendarService.create(taskEnd).startOf('day');\n\n let currentDay = startDay;\n while (currentDay.compare(endDay, 'day') <= 0) {\n const dayKey = currentDay.format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n currentDay = currentDay.add('day', 1);\n }\n });\n\n this.dayDataCache.set(dayCountMap);\n this.calendar()?.render();\n }\n\n private async resolveNavigatorTimeText(): Promise<string> {\n const formatted = this.formatNavigatorDateText();\n return this.resolveFormattedDateTimeLabels(formatted);\n }\n\n /** Resolves leftover `dateTime.*` tokens via translateAsync (translateSync may run before acorex scope loads). */\n private async resolveFormattedDateTimeLabels(formatted: string): Promise<string> {\n const keyPattern = /(?:@acorex:)?dateTime\\.[A-Za-z0-9._-]+/g;\n const matches = [...new Set(formatted.match(keyPattern) ?? [])];\n\n if (matches.length === 0) {\n return formatted;\n }\n\n let result = formatted;\n for (const match of matches) {\n const key = match.startsWith('@') ? match : `@acorex:${match}`;\n const translated = await this.translateService.translateAsync(key);\n result = result.replaceAll(match, translated);\n }\n\n return result;\n }\n\n /**\n * Builds toolbar navigator date text with calendar-aware AXDateTime tokens.\n * Month/weekday tokens may remain as i18n keys until {@link resolveFormattedDateTimeLabels} runs.\n */\n private formatNavigatorDateText(): string {\n const currentDate = this.vm.currentDate();\n if (!currentDate) {\n return '';\n }\n\n const calendarSystem = this.calendarType();\n const formatOptions = { locale: calendarSystem };\n const axDate = this.calendarService.create(currentDate, calendarSystem);\n const viewMode = this.vm.currentViewMode();\n\n if (viewMode === 'grid') {\n // List/grid is locked to the current month, so the navigator shows the month label.\n return axDate.format('MMMM yyyy', formatOptions);\n }\n\n if (viewMode === 'kanban' || viewMode === 'status-grouped-grid') {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n if (this.vm.daysCount() <= 1) {\n return startText;\n }\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n\n switch (viewMode) {\n case 'day':\n case 'timeline-day':\n return axDate.format('DD MMMM yyyy', formatOptions);\n case 'week': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('week', 1).add('day', -1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'agenda':\n case 'timeline-weekly': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'month':\n case 'timeline-month':\n return axDate.format('MMMM yyyy', formatOptions);\n case 'timeline-year':\n return axDate.format('yyyy', formatOptions);\n default:\n return '';\n }\n }\n\n /** Normalizes ax-calendar slot labels (e.g. `dateTime.months.*`) for the translate pipe. */\n protected toAcorexTranslationKey(text: string | number | null | undefined): string {\n if (text == null || text === '') {\n return '';\n }\n\n const value = String(text);\n if (value.startsWith('@')) {\n return value;\n }\n if (value.startsWith('dateTime.')) {\n return `@acorex:${value}`;\n }\n\n return value;\n }\n\n protected isDateTimeTranslationKey(text: string | number | null | undefined): boolean {\n if (text == null) {\n return false;\n }\n\n const value = String(text);\n return value.startsWith('@') || value.startsWith('dateTime.');\n }\n\n protected getDayDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n // Get the native Date object from AXDateTime\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n // Create a new AXDateTime from the date object for consistent formatting\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const dayKey = axDate.format('YYYY-MM-DD');\n return this.dayDataCache().get(dayKey) || 0;\n } catch (error) {\n console.warn('Error getting day data count:', error);\n return 0;\n }\n }\n\n /**\n * Aggregates the day-level data counts for an entire month.\n * Used by the monthCellTemplate to show badges when the sidebar calendar depth is 'month'.\n */\n protected getMonthDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const monthStart = axDate.startOf('month');\n const monthEnd = axDate.endOf('month');\n\n let total = 0;\n let current = monthStart;\n while (current.compare(monthEnd, 'day') <= 0) {\n const dayKey = current.format('YYYY-MM-DD');\n total += this.dayDataCache().get(dayKey) || 0;\n current = current.add('day', 1);\n }\n return total;\n } catch (error) {\n console.warn('Error getting month data count:', error);\n return 0;\n }\n }\n\n protected async handleContextMenuItemClick(event: AXContextMenuItemsClickEvent) {\n const command = event.item.data?.command;\n const provider = this.currentTask()?.provider ?? '';\n try {\n if (!command) {\n return;\n }\n const result = await this.taskBoardService.executeCommand(command, provider);\n if (isCancelledTaskBoardCommandResult(result)) {\n return;\n }\n this.taskBoardService.requestRefresh(provider || undefined);\n } catch (error) {\n console.error('[TaskBoard] Context menu command failed:', error);\n }\n }\n\n @HostListener('document:keydown.control')\n protected handleNavigatorRangeModifierDown(): void {\n this.navigatorRangeSelectActive.set(true);\n }\n\n @HostListener('document:keyup.control')\n protected handleNavigatorRangeModifierUp(): void {\n this.navigatorRangeSelectActive.set(false);\n }\n\n /**\n * Registers page keyboard shortcuts with the platform shortcut registry.\n */\n private registerKeyboardShortcuts(): void {\n this.registerTaskBoardNavigatorShortcuts();\n this.registerTaskBoardPanelShortcuts();\n this.registerTaskBoardViewCategoryShortcuts();\n this.registerTaskBoardViewLayoutShortcuts();\n }\n\n private registerTaskBoardNavigatorShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-navigator',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@general:keyboard-shortcuts.groups.navigation',\n when: () => this.isReady() && this.showToolbarNavigator(),\n shortcuts: [\n {\n keys: ['arrowleft'],\n title: '@task-management:task-board.navigator.previous-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(false),\n },\n {\n keys: ['arrowright'],\n title: '@task-management:task-board.navigator.next-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(true),\n },\n {\n keys: ['alt+t'],\n title: '@task-management:task-board.shortcuts.go-to-today',\n allowInEditableFields: true,\n handler: () => this.handleTodayClick(),\n },\n ],\n });\n }\n\n private registerTaskBoardPanelShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-settings',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady(),\n shortcuts: [\n {\n keys: ['ctrl+,'],\n title: '@task-management:task-board.shortcuts.toggle-settings',\n allowInEditableFields: true,\n handler: () => this.toggleSettingsPanel(),\n },\n ],\n });\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-dismiss',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady() && this.hasKeyboardDismissTarget(),\n shortcuts: [\n {\n keys: ['escape'],\n title: '@task-management:task-board.shortcuts.dismiss-overlays',\n handler: () => this.handleKeyboardDismiss(),\n },\n ],\n });\n }\n\n private registerTaskBoardViewCategoryShortcuts(): void {\n const categories: AXPTaskBoardViewCategory[] = ['calendar', 'timeline', 'table', 'kanban'];\n const titleKeys: Record<AXPTaskBoardViewCategory, string> = {\n calendar: '@task-management:task-board.shortcuts.switch-to-calendar',\n timeline: '@task-management:task-board.shortcuts.switch-to-timeline',\n table: '@task-management:task-board.shortcuts.switch-to-table',\n kanban: '@task-management:task-board.shortcuts.switch-to-kanban',\n };\n\n for (let index = 0; index < categories.length; index++) {\n for (const category of categories) {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: `task-board-view-category-${category}-slot-${index + 1}`,\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.getVisibleViewCategoryByShortcutIndex(index) === category,\n shortcuts: [\n {\n keys: [`alt+${index + 1}`],\n title: titleKeys[category],\n handler: () => this.switchToViewCategory(category),\n },\n ],\n });\n }\n }\n }\n\n private registerTaskBoardViewLayoutShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-view-layout',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.canCycleViewLayout(),\n shortcuts: [\n {\n keys: ['['],\n title: '@task-management:task-board.shortcuts.previous-layout',\n handler: () => this.cycleViewLayout(false),\n },\n {\n keys: [']'],\n title: '@task-management:task-board.shortcuts.next-layout',\n handler: () => this.cycleViewLayout(true),\n },\n ],\n });\n }\n\n private getVisibleViewCategoryByShortcutIndex(index: number): AXPTaskBoardViewCategory | null {\n return this.vm.visibleViewCategories()[index] ?? null;\n }\n\n private switchToViewCategory(category: AXPTaskBoardViewCategory): void {\n if (!this.vm.visibleViewCategories().includes(category)) {\n return;\n }\n\n if (this.vm.currentViewCategory() !== category) {\n this.applyViewCategory(category);\n }\n }\n\n private canCycleViewLayout(): boolean {\n return this.showViewLayoutSwitcher() && this.viewLayoutItems().length > 1;\n }\n\n private cycleViewLayout(forward: boolean): void {\n const items = this.viewLayoutItems();\n if (items.length <= 1) {\n return;\n }\n\n const currentLayout = this.selectedViewLayout();\n const currentIndex = items.findIndex((item) => item.key === currentLayout);\n const safeIndex = currentIndex >= 0 ? currentIndex : 0;\n const offset = forward ? 1 : -1;\n const nextIndex = (safeIndex + offset + items.length) % items.length;\n\n this.handleViewLayoutChange(items[nextIndex].key);\n }\n\n private hasKeyboardDismissTarget(): boolean {\n return (\n this.isSettingsPanelOpen() ||\n this.popover()?.isOpen === true ||\n this.vm.isDetailPanelOpen() ||\n this.vm.isTaskSelected()\n );\n }\n\n private handleKeyboardDismiss(): void {\n if (this.isSettingsPanelOpen()) {\n this.closeSettingsPanel();\n return;\n }\n\n if (this.popover()?.isOpen) {\n this.popover()?.close();\n return;\n }\n\n if (this.vm.isDetailPanelOpen()) {\n this.vm.closeDetailPanel();\n return;\n }\n\n if (this.vm.isTaskSelected()) {\n this.vm.clearSelectedTask();\n }\n }\n\n private isModifierRangeNavigatorView(): boolean {\n return this.modifierRangeBasedViews.includes(this.vm.currentViewMode());\n }\n\n private usesNavigatorRangeSelection(view: AXPTaskBoardViewMode): boolean {\n if (this.alwaysRangeBasedViews.includes(view)) {\n return true;\n }\n if (this.modifierRangeBasedViews.includes(view)) {\n return this.vm.rangeStartDate() != null || this.vm.daysCount() > 1;\n }\n return false;\n }\n\n private isNavigatorRangeModifierActive(event?: AXCalendarSlotClick): boolean {\n const nativeEvent = event?.nativeEvent;\n if (nativeEvent instanceof MouseEvent) {\n return nativeEvent.ctrlKey || nativeEvent.metaKey;\n }\n return this.navigatorRangeSelectActive();\n }\n\n private normalizeNavigatorDay(date: Date): Date {\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n return this.calendarService.create(date, calendarSystem).startOf('day').date;\n }\n\n private applyNavigatorDateRange(start: Date, end: Date): void {\n const startTime = start.getTime();\n const endTime = end.getTime();\n const newStartDate = new Date(Math.min(startTime, endTime));\n const newEndDate = new Date(Math.max(startTime, endTime));\n const differenceInDays = this.calculateDifferenceInDays(newStartDate, newEndDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setCurrentDate(newStartDate);\n this.vm.setDaysCount(differenceInDays);\n this.calendar()?.render();\n }\n\n private handleNavigatorRangeSlotClick(clickedDate: Date): void {\n const clickedDay = this.normalizeNavigatorDay(clickedDate);\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (selectionStartDate) {\n this.applyNavigatorDateRange(selectionStartDate, clickedDay);\n return;\n }\n\n if (this.navigatorPlainSingleDaySelected && this.vm.daysCount() === 1) {\n const selectedDay = this.normalizeNavigatorDay(this.vm.currentDate());\n this.applyNavigatorDateRange(selectedDay, clickedDay);\n return;\n }\n\n this.vm.setRangeStartDate(clickedDay);\n this.navigatorPlainSingleDaySelected = false;\n this.calendar()?.render();\n }\n\n private handleNavigatorSingleDaySlotClick(clickedDate: Date): void {\n const dateToSet = this.normalizeNavigatorDay(clickedDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = true;\n this.vm.setCurrentDate(dateToSet);\n this.vm.setDaysCount(1);\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n changeDate(forward: boolean) {\n this.navigatorPlainSingleDaySelected = false;\n const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'timeline-day':\n this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);\n break;\n\n case 'week':\n this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);\n break;\n\n case 'agenda':\n case 'kanban':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n this.vm.setCurrentDate(date.add('day', forward ? this.vm.daysCount() : -this.vm.daysCount()).date);\n break;\n\n case 'grid':\n case 'month':\n case 'timeline-month':\n this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);\n break;\n\n case 'timeline-year':\n this.vm.setCurrentDate(date.add('year', forward ? 1 : -1).date);\n break;\n }\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n protected handleCalendarSlotClick(event: AXCalendarSlotClick) {\n if (event.component.activeView !== event.component.depth) return;\n\n const clickedDate: Date = event.item;\n const currentView = this.vm.currentViewMode();\n\n if (this.modifierRangeBasedViews.includes(currentView)) {\n if (this.isNavigatorRangeModifierActive(event)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n } else {\n this.handleNavigatorSingleDaySlotClick(clickedDate);\n }\n return;\n }\n\n if (this.alwaysRangeBasedViews.includes(currentView)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n return;\n }\n\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n let dateToSet = this.calendarService.create(clickedDate, calendarSystem).startOf('day').date;\n\n if (currentView === 'week') {\n const weekDate = this.calendarService.create(dateToSet, calendarSystem);\n dateToSet = weekDate.startOf('week').date;\n }\n\n this.vm.setCurrentDate(dateToSet);\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n getCellClass = (date: AXDateTime): string | null => {\n const currentView = this.vm.currentViewMode();\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (!this.usesNavigatorRangeSelection(currentView)) {\n const currentDay = this.calendarService.create(this.vm.currentDate());\n if (date.equal(currentDay, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n if (this.modifierRangeBasedViews.includes(currentView) || this.alwaysRangeBasedViews.includes(currentView)) {\n if (selectionStartDate) {\n const axSelectionStartDate = this.calendarService.create(selectionStartDate);\n if (date.equal(axSelectionStartDate, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n const fromRange = this.calendarService.create(this.vm.currentDate());\n const endRange = fromRange.add('day', this.vm.daysCount() - 1);\n\n const isStart = date.equal(fromRange, 'day');\n const isEnd = date.equal(endRange, 'day');\n\n if (isStart && isEnd) return 'ax-range-start ax-range-end';\n if (isStart) return 'ax-range-start';\n if (isEnd) return 'ax-range-end';\n if (date.compare(fromRange, 'day') > 0 && date.compare(endRange, 'day') < 0) {\n return 'ax-range-between';\n }\n\n return null;\n }\n\n if (currentView === 'week') {\n const from = this.calendarService.create(this.vm.currentDate());\n const end = from.add('day', 6);\n\n if (date.equal(from, 'day')) return 'ax-range-start';\n if (date.equal(end, 'day')) return 'ax-range-end';\n if (date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {\n return 'ax-range-between';\n }\n }\n\n return null;\n };\n\n /**\n * Helper function to calculate the difference in whole days between two dates.\n * The result is inclusive (e.g., May 5 to May 6 is a 2-day range).\n */\n private calculateDifferenceInDays(start: Date, end: Date): number {\n if (!start || !end) {\n return 1;\n }\n const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\n const timeDifference = endDate.getTime() - startDate.getTime();\n const daysDifference = Math.round(timeDifference / (1000 * 3600 * 24));\n\n return daysDifference + 1;\n }\n\n handleTodayClick() {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n let currentDate: Date;\n if (this.vm.currentViewMode() === 'week') {\n currentDate = this.calendarService\n .create(new Date(), this.localeService.activeProfile().calendar.system)\n .startOf('week').date;\n } else {\n currentDate = new Date();\n }\n this.vm.setCurrentDate(currentDate);\n if (this.isModifierRangeNavigatorView()) {\n this.vm.setDaysCount(1);\n }\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n protected isNonCalendarView = computed(() => {\n const mode = this.vm.currentViewMode();\n return mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid';\n });\n\n private async loadFromRoute(): Promise<void> {\n const snapshot = this.activatedRoute.snapshot.queryParamMap;\n const viewParam = snapshot.get('view');\n const layoutParam = snapshot.get('layout');\n const allowedCategories = new Set(this.vm.visibleViewCategories());\n\n const viewBefore = this.vm.currentViewCategory();\n const layoutBefore = this.vm.getLayoutForCategory(viewBefore);\n if (viewParam && allowedCategories.has(viewParam as AXPTaskBoardViewCategory)) {\n const category = viewParam as AXPTaskBoardViewCategory;\n const layout = resolveTaskBoardCategoryLayoutFromQuery(category, layoutParam);\n if (layout) {\n this.vm.setViewLayout(category, layout);\n }\n this.vm.setViewCategory(category);\n }\n const layoutAfter = this.vm.getLayoutForCategory(this.vm.currentViewCategory());\n if (viewBefore !== this.vm.currentViewCategory() || layoutBefore !== layoutAfter) {\n this.recompute();\n }\n\n const type = snapshot.getAll('type') as string[];\n const assignee = snapshot.getAll('assignee') as string[];\n const reporter = snapshot.getAll('reporter') as string[];\n if (type.length || assignee.length || reporter.length) {\n this.isQueryParam.set(true);\n this.vm.setSelectedTaskTypeNames(normalizeTaskTypeFilterNames(type, this.vm.taskTypeOptions()), true);\n this.vm.setSelectedAssigneeIds(assignee, true);\n this.vm.setSelectedReporterIds(reporter, true);\n } else if (this.isQueryParam()) {\n this.isQueryParam.set(false);\n await this.vm.restoreQueryFiltersFromSettings();\n }\n\n const dateRange = snapshot.get('dateRange') as string;\n if (dateRange) {\n const range = this.taskBoardService.rangeCalculator(dateRange);\n if (range) {\n this.vm.setCurrentDate(range.from);\n this.vm.setDaysCount(this.calculateDifferenceInDays(range.from, range.end));\n }\n } else if (!this.filtersPanelInitialized && this.isModifierRangeNavigatorView()) {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setDaysCount(1);\n }\n\n await this.syncPanelInitialFilters();\n this.filtersPanelInitialized = true;\n }\n\n /**\n * Checks if the currently selected task is still present in the list of visible tasks.\n * If not, it clears the selection to prevent showing details for a hidden task.\n * @param visibleTasks The new array of tasks that will be displayed.\n */\n private validateSelectedTask(visibleTasks: AXPTask[]): void {\n const currentSelectedTask = this.vm.selectedTask();\n // Proceed only if a task is actually selected\n if (currentSelectedTask) {\n // Check if any task in the new list has the same ID as the selected one\n const isSelectedTaskVisible = visibleTasks.some((task) => task.id === currentSelectedTask.id);\n\n // If the selected task is NOT in the new list, clear the selection.\n if (!isSelectedTaskVisible) {\n this.vm.selectTask(null);\n }\n }\n }\n\n protected async getResources(): Promise<void> {\n if (this.vm.selectedTaskTypeNames().length !== 1) {\n this.resources.set([]);\n return;\n }\n const resources = await this.taskBoardService.getResources(this.vm.selectedTaskTypeNames()[0] ?? '');\n this.resources.set(resources);\n }\n}\n\n//#region ----- Query Param Helpers -----\n\nfunction areTaskBoardQueryParamsEquivalent(current: ParamMap, next: Params): boolean {\n const keys = ['view', 'layout', 'type', 'assignee', 'reporter', 'calendarEvent'] as const;\n\n for (const key of keys) {\n const nextValue = next[key];\n if (nextValue == null) {\n if (current.has(key)) {\n return false;\n }\n continue;\n }\n\n if (Array.isArray(nextValue)) {\n const currentValues = current.getAll(key);\n if (\n currentValues.length !== nextValue.length ||\n currentValues.some((value, index) => value !== String(nextValue[index]))\n ) {\n return false;\n }\n continue;\n }\n\n if (current.get(key) !== String(nextValue)) {\n return false;\n }\n }\n\n return true;\n}\n\n//#endregion\n","<!-- Task board page shell -->\n<axp-page-layout *translate=\"let t\">\n <!-- Toolbar: date navigator, filters, view layout, and settings -->\n <axp-page-toolbar class=\"axm-task-board-toolbar\"\n [class.axm-task-board-toolbar--stack-filters]=\"!deviceService.isLarge()\">\n <div class=\"axm-task-board-toolbar__primary-row\">\n <axp-layout-prefix class=\"flex min-w-0 flex-nowrap items-center gap-2\"\n [class.flex-1]=\"deviceService.isLarge()\">\n <!-- Date navigator with calendar popover -->\n @if (showToolbarNavigator()) {\n <div class=\"scheduler-header shrink-0 w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"navigatorTimeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- TODO(acorex-ui): Do not wrap ax-calendar in @for/@if here — ax-popover requires a direct projected child.\n Week layout comes from AXCalendarService (AXPRegionalCalendarService); navigatorCalendarLayoutEffect re-renders on profile/calendar changes.\n Remove manual render() when ax-calendar reacts to calendar service week layout changes.\n See README.md in this folder. -->\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <ax-calendar #calendar [type]=\"calendarType()\" [depth]=\"calendarDepth()\" [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\" [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"single-range-calendar border rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\">\n <ax-footer>\n <ax-button look=\"link\" color=\"primary\" [text]=\"(todayButtonTextKey() | translate | async)!\"\n (onClick)=\"handleTodayClick()\"></ax-button>\n </ax-footer>\n </ax-calendar>\n </ax-popover>\n </div>\n }\n\n <!-- Inline query filters (large screens only) -->\n @if (deviceService.isLarge() && filtersReady()) {\n <axp-query-filters class=\"axm-task-board-toolbar__filters-inline\" [filtersDefinitions]=\"filterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\" (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n }\n </axp-layout-prefix>\n\n <axp-layout-suffix class=\"flex shrink-0 gap-2\">\n <!-- View layout switcher (kanban, grid, calendar, etc.) -->\n @if (showViewLayoutSwitcher()) {\n <ax-button class=\"axm-task-board-toolbar__view-layout-dropdown\" look=\"outline\"\n [text]=\"(selectedViewLayoutTitleKey() | translate | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"selectedViewLayoutIcon()\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewLayoutItems(); track item.key) {\n <ax-button-item [text]=\"(viewLayoutTranslationKey(item.text) | translate | async)!\"\n (onClick)=\"handleViewLayoutChange(item.key)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-check\" class=\"axm-task-board-toolbar__dropdown-menu-check\"\n [class.--placeholder]=\"!isViewLayoutSelected(item.key)\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n <!-- Settings panel toggle with active calendar-type badge -->\n <div class=\"axm-task-board-toolbar__settings-slot\">\n <ax-button class=\"axm-task-board-toolbar__settings-button\" look=\"outline\" [iconOnly]=\"true\"\n [title]=\"('@task-management:task-board.settings.title' | translate | async)!\"\n (onClick)=\"toggleSettingsPanel()\">\n <ax-prefix>\n <ax-icon [icon]=\"isSettingsPanelOpen() ? 'fa-solid fa-gear' : 'fa-light fa-gear'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n @if (selectedCalendarEventTypeCount() > 0) {\n <div class=\"axm-task-board-toolbar__settings-badge\" [class.--xs]=\"selectedCalendarEventTypeCount() > 9\">\n <ax-badge color=\"primary\" [text]=\"selectedCalendarEventTypeCount().toString()\"></ax-badge>\n </div>\n }\n </div>\n </axp-layout-suffix>\n </div>\n\n <!-- Stacked query filters (small screens) -->\n @if (!deviceService.isLarge() && filtersReady()) {\n <div class=\"axm-task-board-toolbar__filters-row\">\n <axp-query-filters [filtersDefinitions]=\"filterDefinitions()\" [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n </div>\n }\n </axp-page-toolbar>\n\n <axp-page-content class=\"flex flex-row gap-2 min-h-0\">\n <div class=\"axm-task-board-main flex flex-row gap-4 flex-1 min-w-0 min-h-0 relative\">\n <div class=\"axm-task-board-main__content flex flex-row gap-2 flex-1 min-w-0 min-h-0\">\n @if (isReady()) {\n <!-- Active view: kanban, grid, status-grouped grid, or calendar/scheduler -->\n @switch (vm.currentViewMode()) {\n @case ('kanban') {\n <axm-task-board-kanban-view class=\"axp-kanban-container h-full w-full min-w-0\" [(tasks)]=\"resolvedTasks\"\n (onTaskClick)=\"vm.selectTask($event)\" (onActionClick)=\"handleContextMenu($event)\"></axm-task-board-kanban-view>\n }\n @case ('grid') {\n <axm-task-board-grid-view class=\"h-full w-full min-w-0\" [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-grid-view>\n }\n @case ('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view class=\"flex flex-col gap-2 w-full min-w-0\"\n [dataSource]=\"gridDataSource\" [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-status-grouped-grid-view>\n }\n @default {\n <axm-task-board-calendar-view class=\"axp-scheduler-container h-full w-full min-w-0\"\n [resources]=\"resources()\" [startingDate]=\"vm.currentDate()\" [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\" [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\" (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"></axm-task-board-calendar-view>\n }\n }\n\n <!-- Shared task context menu -->\n <ax-context-menu #rootContextMenu [closeOn]=\"'leave'\" [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\" (onItemClick)=\"handleContextMenuItemClick($event)\">\n </ax-context-menu>\n\n <!-- Task detail side panel (large screens only) -->\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n }\n } @else {\n <!-- Initial bootstrap loading state -->\n <axm-task-board-content-skeleton class=\"flex-1 min-h-0 w-full self-stretch\"></axm-task-board-content-skeleton>\n }\n </div>\n\n <!-- Board settings side panel -->\n @if (isSettingsPanelOpen()) {\n @if (!deviceService.isLarge()) {\n <button type=\"button\" class=\"axm-task-board-settings-backdrop\" (click)=\"closeSettingsPanel()\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)!\"></button>\n }\n <axp-layout-side-detail-panel class=\"sticky top-0 z-10 max-h-full flex-none\"\n [class.axm-task-board-settings-panel--overlay]=\"!deviceService.isLarge()\" [header]=\"settingsPanelHeader()\"\n [sections]=\"settingsPanelSections()\" (panelClose)=\"closeSettingsPanel()\">\n <!-- Color-by dimension selector -->\n <ng-template axpLayoutSideDetailPanelSection=\"colorBy\">\n <ax-selection-list class=\"w-full\" valueField=\"key\" textField=\"titleKey\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"false\" [items]=\"colorByItems\" [ngModel]=\"effectiveColorBy()\"\n [customTemplate]=\"colorByItemTemplate\" (onValueChanged)=\"handleColorBySelectionChange($event)\">\n <ng-template #colorByItemTemplate let-item>\n {{ (item.data.titleKey | translate | async)! }}\n </ng-template>\n </ax-selection-list>\n </ng-template>\n\n <!-- Calendar event type visibility (calendar views only) -->\n @if (showCalendarEventButton()) {\n <ng-template axpLayoutSideDetailPanelSection=\"calendars\">\n <ax-selection-list class=\"w-full\" valueField=\"id\" textField=\"text\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"true\" [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"vm.selectedCalendarEventTypeIds()\"\n (onValueChanged)=\"handleCalendarEventTypesSelectionChange($event)\"></ax-selection-list>\n </ng-template>\n }\n </axp-layout-side-detail-panel>\n }\n </div>\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Calendar popover: day cell template with task-count badge -->\n<ng-template #dayCellTemplate let-slot>\n <div class=\"flex flex-col items-center justify-between w-full gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"flex-1 text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? slot.slot.date?.day ?? '' }}\n }\n </span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<!-- Calendar popover: month cell template with task-count badge -->\n<ng-template #monthCellTemplate let-slot>\n <div class=\"flex flex-col items-center justify-between w-full gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"flex-1 text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? '' }}\n }\n </span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n"],"names":["i1","i2","i3","i4","i6","i10"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-task-management-client-task-board.page-xzDabJXk.mjs","sources":["../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-calendar-view/task-board-scheduler-layout.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.html","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.page.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.page.html"],"sourcesContent":["import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n@Component({\n selector: 'axm-task-board-content-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXSkeletonModule],\n templateUrl: './task-board-content-skeleton.component.html',\n styleUrl: './task-board-content-skeleton.component.css',\n host: {\n class: 'axm-task-board-content-skeleton',\n 'aria-busy': 'true',\n 'aria-live': 'polite',\n },\n})\nexport class AXMTaskBoardContentSkeletonComponent {\n //#region ---- Constants ----\n\n private static readonly DAY_HEADER_COUNT = 7;\n\n private static readonly GRID_ROW_COUNT = 6;\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Weekday header placeholders (Sun–Sat). */\n protected readonly dayHeaderPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n /** Calendar-style grid row placeholders. */\n protected readonly gridRowPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.GRID_ROW_COUNT }, (_, index) => index),\n );\n\n /** Column placeholders per grid row. */\n protected readonly gridColumnPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n //#endregion\n}\n","<!-- Weekday header row -->\n<div class=\"axm-task-board-content-skeleton__header\">\n @for (index of dayHeaderPlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__day-header\"></ax-skeleton>\n }\n</div>\n\n<!-- Generic board grid (calendar / kanban / table placeholder) -->\n<div class=\"axm-task-board-content-skeleton__grid\">\n @for (row of gridRowPlaceholders(); track row) {\n <div class=\"axm-task-board-content-skeleton__row\">\n @for (col of gridColumnPlaceholders(); track col) {\n <div class=\"axm-task-board-content-skeleton__cell\">\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__cell-date\"></ax-skeleton>\n </div>\n }\n </div>\n }\n</div>\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXPExtraField } from '../task-board.types';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-detail-panel',\n templateUrl: './task-board-detail-panel.component.html',\n styleUrls: ['./task-board-detail-panel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXTranslatorPipe,\n AXButtonComponent,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXDecoratorIconComponent,\n ],\n})\nexport class AXMTaskBoardDetailPanel {\n protected readonly rootConfig = RootConfig;\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected statusName = signal<string>('');\n protected extraFields = signal<AXPExtraField[]>([]);\n\n #selectedTaskChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const key = selectedTask?.status.id;\n const provider = selectedTask?.provider;\n if (!provider) return;\n const name = await this.vm.getStatusName(key, provider);\n if (name) this.statusName.set(name);\n });\n\n #selectedTaskTypeChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const selectedTaskType = this.taskBoardService.getProvider(selectedTask?.provider);\n const extraFields = await selectedTaskType?.getExtraFields();\n if (!extraFields) {\n this.extraFields.set([]);\n return;\n }\n this.extraFields.set(extraFields);\n });\n\n protected capitalizeFirstLetter(text: string) {\n return String(text).charAt(0).toUpperCase() + String(text).slice(1);\n }\n}\n","@if (vm.isTaskSelected()) {\n @let nodeInfo = vm.selectedTask();\n <div class=\"__header\">\n <div class=\"__title\">\n <span>{{ nodeInfo?.title }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content\">\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n @if (nodeInfo?.description) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.description }}</div>\n </div>\n }\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n {{\n $safeNavigationMigration(nodeInfo?.startDate)\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{\n $safeNavigationMigration(nodeInfo?.endDate)\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{ nodeInfo?.reporter?.fullName }}\n </div>\n </div>\n @if (nodeInfo?.assignee) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.assignee?.fullName }}</div>\n </div>\n }\n @if (statusName()) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ statusName() }}</div>\n </div>\n }\n @if (nodeInfo?.priority) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\n </div>\n }\n @if (extraFields() && extraFields().length) {\n <div class=\"__row\">\n <axp-widgets-container [context]=\"nodeInfo\">\n @for (extraField of extraFields(); track extraField) {\n <div class=\"__title\">\n <span>\n {{ extraField.title | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n <ng-container axp-widget-renderer [node]=\"extraField.widget\" [mode]=\"'view'\"> </ng-container>\n </div>\n }\n </axp-widgets-container>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__header\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\n </span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content flex items-center justify-center\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@task-management:task-board.detail-panel.no-task-selected.title'\"\n [description]=\"'@task-management:task-board.detail-panel.no-task-selected.description'\"\n >\n </axp-state-message>\n </div>\n}\n","import { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\n\nexport const TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS = [\n AXPRegionalSetting.LocaleProfile,\n AXPRegionalSetting.Calendar,\n AXPRegionalSetting.FirstDayOfWeek,\n AXPRegionalSetting.WeekendDays,\n] as const;\n\nexport function buildTaskBoardRegionalProfileKey(parts: {\n profileCode: string;\n calendarSystem: string;\n weekStartsOn: number;\n weekendDays: readonly number[];\n}): string {\n return [parts.profileCode, parts.calendarSystem, parts.weekStartsOn, parts.weekendDays.join('-')].join('|');\n}\n","import {\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerService,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport {\n afterNextRender,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction } from '../../task-board.types';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from '../../task-board.viewmodel';\nimport {\n buildTaskBoardRegionalProfileKey,\n TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS,\n} from './task-board-scheduler-layout.utils';\n\n@Component({\n selector: 'axm-task-board-calendar-view',\n templateUrl: './task-board-calendar-view.component.html',\n styleUrls: ['./task-board-calendar-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerComponent],\n})\nexport class AXMTaskBoardCalendarViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n protected readonly schedulerService = inject(AXSchedulerService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly localeService = inject(AXLocaleService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n schedulerComponent = viewChild(AXSchedulerComponent);\n\n resources = input<AXPResource[]>([]);\n refreshNonce = input<number>(0);\n startingDate = input<Date>(new Date());\n selectedView = input<AXPTaskBoardViewMode>('month');\n dataSource = input.required<AXSchedulerAppointmentDataSource>();\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n /** Gates ax-scheduler in the template so we can destroy and recreate it cleanly on regional changes. */\n protected readonly schedulerMounted = signal(true);\n\n private readonly regionalSettingsRevision = signal(0);\n private previousRegionalProfileKey: string | null = null;\n\n /**\n * Bumped whenever the global holiday list is reloaded. The scheduler merges the\n * app-wide `AXCalendarService.holidays` (non-reactive) with our reactive callback\n * result, so we re-run the callback to force the merged holidays to reflect the\n * latest global reload after a calendar selection change.\n */\n private readonly holidaysRevision = signal(0);\n\n /** Active calendar system (e.g. solar-hijri for fa-IR). Required for correct week/today rendering. */\n protected schedulerCalendar = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n /** Detects locale profile and week-layout changes that require a fresh ax-scheduler instance. */\n private readonly regionalProfileKey = computed(() => {\n this.regionalSettingsRevision();\n this.activeCalendar()?.weekdays;\n\n const profile = this.localeService.activeProfile();\n return buildTaskBoardRegionalProfileKey({\n profileCode: profile.localeInfo?.code ?? '',\n calendarSystem: this.schedulerCalendar(),\n weekStartsOn: profile.calendar.week?.startsOn ?? 0,\n weekendDays: profile.calendar.week?.weekends ?? [],\n });\n });\n\n /** Align week/month views to regional week boundaries before passing to ax-scheduler. */\n protected schedulerStartingDate = computed(() => {\n const date = this.startingDate();\n const calendar = this.schedulerCalendar();\n const axDate = this.calendarService.create(date, calendar);\n\n switch (this.currentSchedulerView()) {\n case 'week':\n return axDate.startOf('week').date;\n case 'month':\n case 'timeline-month':\n return axDate.startOf('month').date;\n default:\n return axDate.startOf('day').date;\n }\n });\n\n protected currentSchedulerView = computed<AXSchedulerView>(() =>\n this.selectedView() === 'kanban' || this.selectedView() === 'grid'\n ? 'month'\n : (this.selectedView() as AXSchedulerView),\n );\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n onMonthSlotDblClicked = output<Date>();\n onActionClick = output<AXPTaskAction>();\n component = output<AXSchedulerComponent>();\n onTaskRightClick = output<AXPTaskAction>();\n onRangeChanged = output<AXSchedulerDateRange>();\n\n constructor() {\n this.settingService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event.keys.some((key) => (TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS as readonly string[]).includes(key))) {\n this.regionalSettingsRevision.update((value) => value + 1);\n }\n });\n\n this.calendarService.onHolidaysChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.holidaysRevision.update((value) => value + 1);\n });\n }\n\n private readonly regionalRemountEffect = effect(() => {\n const profileKey = this.regionalProfileKey();\n\n untracked(() => {\n if (this.previousRegionalProfileKey === null) {\n this.previousRegionalProfileKey = profileKey;\n return;\n }\n\n if (profileKey === this.previousRegionalProfileKey) {\n return;\n }\n\n this.previousRegionalProfileKey = profileKey;\n this.remountScheduler();\n });\n });\n\n /** Re-binds parent scheduler ref whenever ax-scheduler remounts after a regional layout change. */\n private readonly schedulerInstanceEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n afterNextRender(\n () => {\n const currentScheduler = this.schedulerComponent();\n if (!currentScheduler || !this.schedulerMounted()) {\n return;\n }\n\n this.component.emit(currentScheduler);\n this.syncSchedulerCurrentDateFromToolbar({ force: true });\n void currentScheduler.refresh();\n },\n { injector: this.injector },\n );\n });\n\n private readonly refreshNonceEffect = effect(() => {\n this.refreshNonce();\n if (!this.schedulerMounted()) {\n return;\n }\n void this.schedulerComponent()?.refresh();\n });\n\n private readonly schedulerStateSyncEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n this.startingDate();\n this.schedulerStartingDate();\n this.schedulerCalendar();\n this.localeService.activeProfile().localeInfo?.code;\n this.currentSchedulerView();\n this.vm.daysCount();\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.refreshNonce();\n\n queueMicrotask(() => {\n this.syncSchedulerCurrentDateFromToolbar();\n void this.schedulerComponent()?.refresh();\n });\n });\n\n protected holidays = (range: AXSchedulerDateRange): Promise<AXHolidayDate[]> => {\n // Track the revision so the scheduler's #holidayEffect re-runs after a global reload.\n this.holidaysRevision();\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n return this.taskBoardService.getEvents(range, selectedEventTypeIds);\n };\n\n /**\n * ax-scheduler only consumes `[startingDate]` on first mount; afterward its internal\n * `currentDate` must be updated explicitly when the external toolbar navigator changes.\n */\n private syncSchedulerCurrentDateFromToolbar(options?: { force?: boolean }): void {\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n const view = this.currentSchedulerView();\n let targetDate = this.calendarService.create(this.schedulerStartingDate(), this.schedulerCalendar());\n\n if (view === 'week' || view === 'timeline-weekly') {\n targetDate = this.schedulerService.alignToWeekStart(targetDate, {});\n }\n\n if (!options?.force && targetDate.equal(scheduler.currentDate())) {\n return;\n }\n\n scheduler.currentDate.set(targetDate);\n }\n\n private remountScheduler(): void {\n this.schedulerMounted.set(false);\n\n afterNextRender(\n () => {\n this.schedulerMounted.set(true);\n },\n { injector: this.injector },\n );\n }\n\n async ngAfterViewInit(): Promise<void> {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n protected onTaskDrop(event: AXSchedulerSlotDropEvent): void {\n if (event.slot.view === 'agenda' && event.isSameSlotDrop) {\n return;\n }\n\n const dropResult = this.schedulerService.calculateAppointmentDropResult(event);\n if (dropResult.isSameSlotDrop) {\n return;\n }\n\n const originalTask = event.appointment as AXPTask;\n this.schedulerService.applyDropResult(\n originalTask as unknown as AXSchedulerAppointment,\n dropResult,\n );\n\n this.taskBoardService\n .updateTaskDateRange(originalTask, {\n from: dropResult.startDate,\n end: dropResult.endDate,\n })\n .then((persistedTask) => {\n this.onTaskChanged.emit(persistedTask);\n void this.schedulerComponent()?.refresh();\n })\n .catch((error) => {\n console.error('[TaskBoardCalendar] Failed to update task date range:', error);\n void this.schedulerComponent()?.refresh();\n });\n }\n\n protected onTaskRightClickHandler(event: AXSchedulerAppointmentMouseEvent): void {\n this.onTaskRightClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected onSlotDblClicked(event: AXSchedulerSlotMouseEvent): void {\n if (event.sender.selectedView() === 'month') {\n this.onMonthSlotDblClicked.emit(event.slot.startDate.date);\n }\n }\n\n protected async handleRangeChanged(event: AXSchedulerDateRange): Promise<void> {\n this.onRangeChanged.emit(event);\n }\n\n protected handleActionClick(event: AXSchedulerAppointmentMouseEvent): void {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected async onTaskClickHandler(event: AXSchedulerAppointmentMouseEvent): Promise<void> {\n const task = event.appointment as AXPTask;\n const anchor = this.resolveAppointmentAnchor(event);\n\n if (anchor) {\n await this.taskPopoverOverlay.open({\n task,\n anchor,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTask = result.items.find((t) => t.id === active.id);\n if (updatedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedTask, provider: active.provider });\n }\n void this.schedulerComponent()?.refresh();\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n\n protected async openTaskDetails(): Promise<void> {\n const task = this.taskPopoverOverlay.getActiveTask();\n if (!task) {\n return;\n }\n\n try {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n data: { id: task.id },\n });\n this.taskPopoverOverlay.close();\n } catch (error) {\n console.error('Failed to open task details:', error);\n }\n }\n\n private resolveAppointmentAnchor(event: AXSchedulerAppointmentMouseEvent): HTMLElement | undefined {\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isAppointment =\n element.classList?.contains('dx-scheduler-appointment') ||\n element.classList?.contains('ax-scheduler-appointment') ||\n element.hasAttribute('data-appointment-id');\n\n if (isAppointment) {\n targetElement = element;\n break;\n }\n\n const parent = element.parentElement;\n if (parent) {\n const isParentAppointment =\n parent.classList?.contains('dx-scheduler-appointment') ||\n parent.classList?.contains('ax-scheduler-appointment');\n\n if (isParentAppointment) {\n targetElement = parent;\n break;\n }\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n return targetElement;\n }\n}\n","@if (schedulerMounted()) {\n <ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [calendar]=\"schedulerCalendar()\"\n [startingDate]=\"schedulerStartingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n [showCurrentTimeIndicator]=\"true\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n ></ax-scheduler>\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService, AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-grid-view',\n templateUrl: './task-board-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n private fetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected gridRemountKeys = computed(() => [this.refreshNonce()]);\n\n protected tasksDataSource = computed(() => {\n const parentDataSource = this.dataSource();\n void this.refreshNonce();\n\n return new AXDataSource<any>({\n load: async (e) => {\n const result = await parentDataSource({ skip: e.skip, take: e.take });\n this.fetchedTasks.set(result.items);\n const unassignedLabel = await this.translationService.translateAsync(\n '@task-management:task-board.filter.unassigned',\n );\n const mappedItems = await Promise.all(\n result.items.map(async (task) => {\n const provider = this.taskBoardService.getProvider(task.provider);\n return {\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n statusTitle: task.status.title,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? unassignedLabel,\n type: provider ? await provider.getTitle() : undefined,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n };\n }),\n );\n return { items: mappedItems, total: result.total };\n },\n pageSize: 10,\n key: 'id',\n byKey: async (key: unknown) => {\n return this.fetchedTasks().find((task) => task.id === key);\n },\n });\n });\n\n constructor() {\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #gridManualFetchEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n const grid = this.grid();\n if (!grid) {\n return;\n }\n\n queueMicrotask(() => {\n untracked(() => {\n grid.refresh({ reset: true });\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.columns.set([]);\n return;\n }\n\n taskType.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n });\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (event.data) {\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const originalTask = mappedItem._originalTask || this.fetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.fetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import {\n AXKanbanBeforeDropEvent,\n AXKanbanComponent,\n AXKanbanItem,\n AXKanbanMouseEvent,\n AXKanbanSortEvent,\n AXKanbanStatus,\n} from '@acorex/components/kanban';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPTask, AXPTaskAction, AXPTaskActionMenuItem } from '../../task-board.types';\nimport { isCancelledTaskBoardCommandResult } from '../../task-board-command-result.util';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-kanban-view',\n templateUrl: './task-board-kanban-view.component.html',\n styleUrls: ['./task-board-kanban-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXKanbanComponent],\n})\nexport class AXMTaskBoardKanbanViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n kanbanComponent = viewChild(AXKanbanComponent);\n\n tasks = model.required<AXPTask[]>();\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n component = output<AXKanbanComponent>();\n onActionClick = output<AXPTaskAction>();\n\n statuses = signal<AXKanbanStatus[]>([]);\n\n stableTasks = computed(() => this.tasks(), { equal: isEqual });\n protected kanbanTasks = computed<AXKanbanItem[]>(() => {\n return this.stableTasks().map((task) => ({\n id: task.id,\n title: task.title,\n index: task.index,\n cssClass: task.cssClass,\n statusKey: task.status.id,\n description: task.description,\n }));\n });\n\n ngAfterViewInit(): void {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n\n if (this.kanbanComponent()) {\n this.component.emit(this.kanbanComponent()!);\n }\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.statuses.set([]);\n return;\n }\n taskType.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n //#region ---- Drag & Drop Handling ----\n\n /**\n * Handles the onBeforeDrop event from the kanban component.\n * Uses event.wait() to register async operations that the kanban will await.\n * If action is cancelled/failed, we set event.canceled = true to prevent the drop.\n */\n protected onBeforeDrop(event: AXKanbanBeforeDropEvent): void {\n // If no status change, allow the drop (just reordering)\n if (event.previousStatusKey === event.currentStatusKey) {\n return;\n }\n\n // Find the task being moved\n const task = this.stableTasks().find((t) => t.id === event.item?.id);\n if (!task || !task.provider) {\n // Allow drop if task not found or no provider\n return;\n }\n\n // Get the provider\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n return;\n }\n\n // Register the async operation using event.wait()\n // The kanban component will await this promise before proceeding\n event.wait(this.executeDropAction(event, task, provider));\n }\n\n /**\n * Executes the action for a drop operation.\n * Sets event.canceled = true if action fails or is cancelled.\n * IMPORTANT: Do NOT update the task status in dataSource here - let the kanban handle the move.\n * The kanban will update the status in onSortChanged, and we'll sync with backend there.\n */\n private async executeDropAction(\n event: AXKanbanBeforeDropEvent,\n task: AXPTask,\n provider: ReturnType<typeof this.taskBoardService.getProvider>,\n ): Promise<void> {\n if (!provider) {\n return;\n }\n\n try {\n // Get available actions for the task\n const actions = await provider.getActions(task);\n if (!actions || actions.length === 0) {\n // No actions available, allow the drop\n return;\n }\n\n // Find action that matches the new status\n const matchingAction = this.findActionForStatus(actions, event.currentStatusKey);\n if (!matchingAction || !matchingAction.command) {\n // No matching action found, allow the drop\n return;\n }\n\n // Execute the action and check result\n const result = await this.taskBoardService.executeCommand(matchingAction.command, task.provider!);\n\n // Check if action was successful (not cancelled or failed)\n if (result?.success === false || result === null || isCancelledTaskBoardCommandResult(result)) {\n // Action was cancelled or failed - prevent the drop\n event.canceled = true;\n return;\n }\n\n // Action succeeded - allow the drop to proceed\n // The kanban will handle the visual move, and onSortChanged will sync with backend\n } catch (error) {\n console.error('[KanbanDrop] Failed to execute action during drop:', error);\n // On error, prevent the drop to be safe\n event.canceled = true;\n }\n }\n\n /**\n * Finds an action that corresponds to the target status.\n * Matches actions by name patterns (e.g., \"approve\" action for \"approved\" status).\n */\n private findActionForStatus(\n actions: AXPTaskActionMenuItem[],\n targetStatus: string | number,\n ): AXPTaskActionMenuItem | null {\n const targetStatusStr = String(targetStatus).toLowerCase();\n\n // Common status-to-action mappings\n const statusActionMap: Record<string, string[]> = {\n approved: ['approve'],\n rejected: ['reject'],\n cancelled: ['cancel'],\n completed: ['complete', 'finish'],\n done: ['complete', 'finish'],\n inprogress: ['start', 'begin'],\n 'in-progress': ['start', 'begin'],\n blocked: ['block'],\n unblocked: ['unblock'],\n };\n\n // Check direct mappings first\n const possibleActionNames = statusActionMap[targetStatusStr] || [];\n for (const actionName of possibleActionNames) {\n const action = actions.find((a) => a.name?.toLowerCase().includes(actionName));\n if (action) {\n return action;\n }\n }\n\n // Try to find action by name containing status keywords\n const statusKeywords = targetStatusStr.split(/[-_\\s]+/);\n for (const keyword of statusKeywords) {\n if (keyword.length < 3) continue; // Skip very short keywords\n\n const action = actions.find((a) => {\n const actionName = a.name?.toLowerCase() || '';\n return actionName.includes(keyword) || keyword.includes(actionName);\n });\n\n if (action) {\n return action;\n }\n }\n\n // Try exact match with action name\n const exactMatch = actions.find((a) => a.name?.toLowerCase() === targetStatusStr);\n if (exactMatch) {\n return exactMatch;\n }\n\n // Try partial match (status contains action name or vice versa)\n for (const action of actions) {\n const actionName = action.name?.toLowerCase() || '';\n if (targetStatusStr.includes(actionName) || actionName.includes(targetStatusStr)) {\n return action;\n }\n }\n\n return null;\n }\n\n //#endregion\n\n protected onSortChanged(event: AXKanbanSortEvent) {\n const tasks = this.tasks().map((item) => {\n const task: AXKanbanItem | undefined = event.allItems.find((t) => t.id === item.id);\n if (!task) {\n return item;\n }\n\n const status = this.statuses().find((s) => String(s.key) === String(task.statusKey));\n if (!status) {\n return { ...item, index: task.index ?? item.index };\n }\n\n return {\n ...item,\n index: task.index ?? item.index,\n status: { id: status.key, title: status.title },\n };\n });\n\n this.taskBoardService\n .updateTasks(tasks)\n .then((updatedTasks) => {\n this.tasks.set(updatedTasks);\n })\n .catch((error) => {\n console.error('[KanbanSort] Failed to update tasks:', error);\n const provider = tasks[0]?.provider;\n if (provider) {\n this.taskBoardService.requestRefresh(provider);\n }\n });\n }\n\n protected async handleItemClick(event: AXKanbanMouseEvent): Promise<void> {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (!task) return;\n\n // Find the kanban item container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the kanban item container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isKanbanItem =\n element.classList?.contains('dx-kanban-item') ||\n element.classList?.contains('ax-kanban-item') ||\n element.hasAttribute('data-item-id');\n\n if (isKanbanItem) {\n targetElement = element;\n break;\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n if (targetElement) {\n await this.taskPopoverOverlay.open({\n task,\n anchor: targetElement,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n protected handleActionClick(event: AXKanbanMouseEvent) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (task) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: task });\n }\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: active.provider }));\n const updatedMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const currentTasks = this.tasks();\n const mergedTasks = currentTasks.map((t) => updatedMap.get(t.id) ?? t);\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id));\n this.tasks.set([...mergedTasks, ...newTasks]);\n\n const updatedSelectedTask = updatedMap.get(active.id);\n if (updatedSelectedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedSelectedTask, provider: active.provider });\n }\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n}\n","<ax-kanban\n [statuses]=\"statuses()\"\n [dataSource]=\"kanbanTasks()\"\n (onItemClick)=\"handleItemClick($event)\"\n (onBeforeDrop)=\"onBeforeDrop($event)\"\n (onSortChanged)=\"onSortChanged($event)\"\n></ax-kanban>\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXKanbanStatus } from '@acorex/components/kanban';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService, AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter, AXPWorkflowTaskProvider } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\ninterface StatusTaskGroup {\n statusInfo: AXKanbanStatus;\n tasks: AXDataSource<any>;\n}\n\nfunction statusGroupTrackKey(nonce: number, group: StatusTaskGroup): string {\n return `${nonce}:${String(group.statusInfo.key)}`;\n}\n\nfunction taskMatchesStatus(task: AXPTask, status: AXKanbanStatus): boolean {\n return String(task.status.id) === String(status.key);\n}\n\n@Component({\n selector: 'axm-task-board-status-grouped-grid-view',\n templateUrl: './task-board-status-grouped-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardStatusGroupedGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n\n provider = input<AXPWorkflowTaskProvider>();\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n groupedTasks = signal<StatusTaskGroup[]>([]);\n private allFetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected statuses = signal<AXKanbanStatus[]>([]);\n protected grids = viewChildren<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected trackStatusGroup = (_index: number, group: StatusTaskGroup) =>\n statusGroupTrackKey(this.refreshNonce(), group);\n\n protected groupedViewRemountKeys = computed(() => [this.refreshNonce()]);\n\n constructor() {\n afterNextRender(() => {\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 200);\n });\n });\n\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #dataChanged = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n const allStatuses = this.statuses();\n\n const parentDataSource = this.dataSource();\n if (!parentDataSource || allStatuses.length === 0) {\n this.groupedTasks.set([]);\n this.allFetchedTasks.set([]);\n return;\n }\n\n void parentDataSource().then((result) => {\n this.allFetchedTasks.set(result.items);\n const allTasks = result.items;\n\n const statusGroups = allStatuses.map((status) => {\n const tasksForStatus = allTasks.filter((task) => taskMatchesStatus(task, status));\n return {\n statusInfo: status,\n tasks: this.createTaskDataSourceForGroup(tasksForStatus),\n };\n });\n\n this.groupedTasks.set(statusGroups);\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 0);\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const provider = this.vm.selectedTaskTypes()[0];\n provider?.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n provider?.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n #gridsChanged = effect(() => {\n const groups = this.groupedTasks();\n untracked(() => {\n setTimeout(() => {\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 100);\n });\n });\n\n private createTaskDataSourceForGroup(tasks: AXPTask[]): AXDataSource<any> {\n return new AXDataSource<any>({\n load: async (e) => {\n const unassignedLabel = await this.translationService.translateAsync(\n '@task-management:task-board.filter.unassigned',\n );\n const items = tasks.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? unassignedLabel,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n }));\n return {\n items: items.slice(e.skip, e.skip + e.take),\n total: items.length,\n };\n },\n pageSize: 5,\n key: 'id',\n byKey: async (key: unknown) => {\n return tasks.find((task) => task.id === key);\n },\n });\n }\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (!event.data) {\n return;\n }\n const mappedItem = event.data as { id?: string | number; _originalTask?: AXPTask };\n const originalTask = mappedItem._originalTask ?? this.allFetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.allFetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of groupedViewRemountKeys(); track remountKey) {\n @for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"text-xl font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n }\n}\n","\nimport {\n AXPActionMenuItem,\n AXPBreadcrumbItem,\n AXPExecuteCommand,\n AXPFilterDefinition,\n AXPFilterQuery,\n AXPKeyboardShortcutPriority,\n AXPQueryRequest,\n collectQueryFilterLeaves,\n runtimeQueryCollectionData,\n} from '@acorex-platform/framework-shared/core';\nimport { AXStyleColorType, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCalendarComponent, AXCalendarSlotClick } from '@acorex/components/calendar';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport {\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerComponent,\n} from '@acorex/components/scheduler';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\nimport { AXPDeviceService, AXPKeyboardShortcutRegistry } from '@acorex-platform/framework-client/core';\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n AXPQueryFiltersComponent,\n AXPThemeLayoutBlockComponent,\n type AXPLayoutSideDetailPanelHeader,\n type AXPLayoutSideDetailPanelSection,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n HostListener,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, ParamMap, Params, RouterModule } from '@angular/router';\nimport { isEqual, sortBy } from 'lodash';\nimport { filter } from 'rxjs';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXMTaskManagementQueryKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPDueStatusProviderService } from './due-status';\nimport {\n canViewAllTaskAssignees,\n normalizeTaskBoardAssigneeIds,\n} from './task-board-assignee-access';\nimport { AXMTaskBoardContentSkeletonComponent } from './task-board-content-skeleton/task-board-content-skeleton.component';\nimport { AXMTaskBoardDetailPanel } from './task-board-detail-panel/task-board-detail-panel.component';\nimport { normalizeTaskTypeFilterNames } from './task-board-filter.utils';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport { filterTasksOverlappingRange } from './task-board-range.utils';\nimport { enrichTaskBoardTasks, resolveTaskBoardSchedulerLabels } from './task-board-task-enrichment.utils';\nimport {\n applyTaskBoardDateRangeToViewModel,\n deriveTaskBoardDateRangeFromNavigator,\n getTaskBoardLayoutOptions,\n isTaskBoardRangeFilterCategory,\n resolveTaskBoardCategoryLayoutFromQuery,\n usesTaskBoardToolbarNavigator,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction, AXPTaskBoardColorBy, AXPTaskFilter } from './task-board.types';\nimport { isCancelledTaskBoardCommandResult } from './task-board-command-result.util';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from './task-board.viewmodel';\nimport { AXMTaskBoardCalendarViewComponent } from './views/task-board-calendar-view/task-board-calendar-view.component';\nimport { AXMTaskBoardGridViewComponent } from './views/task-board-grid-view/task-board-grid-view.component';\nimport { AXMTaskBoardKanbanViewComponent } from './views/task-board-kanban-view/task-board-kanban-view.component';\nimport { AXMTaskBoardStatusGroupedGridViewComponent } from './views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component';\n\nexport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\n\n@Component({\n templateUrl: './task-board.page.html',\n styleUrls: ['./task-board.page.css'],\n imports: [\n FormsModule,\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXPQueryFiltersComponent,\n AXMTaskBoardContentSkeletonComponent,\n AXMTaskBoardCalendarViewComponent,\n AXMTaskBoardKanbanViewComponent,\n AXMTaskBoardGridViewComponent,\n AXMTaskBoardStatusGroupedGridViewComponent,\n AXMTaskBoardDetailPanel,\n AXPopoverModule,\n AXCalendarComponent,\n AXSelectionListModule,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ],\n})\nexport class AXMTaskBoardPage extends AXPPageLayoutBaseComponent implements OnInit {\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n protected readonly vm = inject(AXMTaskBoardViewModel);\n private readonly unsubscribe = inject(AXUnsubscriber);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly localeService = inject(AXLocaleService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dueStatusProviderService = inject(AXPDueStatusProviderService);\n private readonly queryService = inject(AXPQueryService);\n private readonly translationService = inject(AXTranslationService);\n\n private readonly sessionUser = toSignal(this.sessionService.user$, { initialValue: null });\n private readonly sessionPermissions = toSignal(this.sessionService.permissions$, { initialValue: [] as string[] });\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n private readonly profileChanged = toSignal(this.localeService.profileChanged$, {\n initialValue: this.localeService.activeProfile(),\n });\n\n private navigatorTimeTextVersion = 0;\n\n protected readonly colorByItems: { key: AXPTaskBoardColorBy; titleKey: string }[] = [\n { key: 'dueDate', titleKey: '@task-management:task-board.color-by.due-date' },\n { key: 'priority', titleKey: '@task-management:task-board.color-by.priority' },\n { key: 'status', titleKey: '@task-management:task-board.color-by.status' },\n ];\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n protected calendar = viewChild<AXCalendarComponent>('calendar');\n\n protected isReady = signal(false);\n protected isSettingsPanelOpen = signal(false);\n protected readonly settingsPanelCopy = signal({\n title: '',\n colorBy: '',\n calendars: '',\n });\n protected filtersReady = signal(false);\n protected calendarEventTypes = signal<Array<{ id: string; title: string; color?: string; icon?: string }>>([]);\n protected resources = signal<AXPResource[]>([]);\n protected isQueryParam = signal<boolean>(false);\n protected refreshNonce = signal(0);\n protected navigatorTimeText = signal('');\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n private currentTask = signal<AXPTask | null>(null);\n protected schedulerComponent = signal<AXSchedulerComponent | null>(null);\n private boardTasksLoadVersion = 0;\n private filtersPanelInitialized = false;\n private lastLocaleProfileCode: string | null = null;\n\n /** Ctrl enables range selection in kanban/table navigator popover calendars. */\n protected readonly navigatorRangeSelectActive = signal(false);\n\n /** True after a plain (non-Ctrl) single-day click in the navigator calendar. */\n private navigatorPlainSingleDaySelected = false;\n\n private readonly modifierRangeBasedViews: AXPTaskBoardViewMode[] = ['grid', 'kanban', 'status-grouped-grid'];\n\n private readonly alwaysRangeBasedViews: AXPTaskBoardViewMode[] = ['agenda', 'timeline-weekly'];\n\n private dayDataCache = signal<Map<string, number>>(new Map());\n\n /** Tasks loaded for the widest navigator + view range (single fetch). */\n private boardTasksRaw = signal<AXPTask[]>([]);\n\n /** Tasks visible in the active view range (derived from {@link boardTasksRaw}). */\n protected boardTasks = signal<AXPTask[]>([]);\n\n protected readonly showToolbarNavigator = computed(() => usesTaskBoardToolbarNavigator(this.vm.currentViewMode()));\n\n protected readonly showViewLayoutSwitcher = computed(\n () => getTaskBoardLayoutOptions(this.vm.currentViewCategory()).length > 0,\n );\n\n protected readonly viewLayoutItems = computed(() => getTaskBoardLayoutOptions(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayout = computed(() => this.vm.getLayoutForCategory(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayoutTitleKey = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item ? this.viewLayoutTranslationKey(item.text) : '';\n });\n\n protected readonly selectedViewLayoutIcon = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item?.icon ?? 'fa-light fa-sliders';\n });\n\n protected readonly effectiveColorBy = computed(() => this.vm.effectiveColorBy());\n\n protected readonly settingsPanelHeader = computed(\n (): AXPLayoutSideDetailPanelHeader => ({\n primaryTitle: this.settingsPanelCopy().title,\n icon: {\n iconClass: 'fa-fw fa-lg fa-light fa-gear',\n },\n }),\n );\n\n protected readonly settingsPanelSections = computed((): AXPLayoutSideDetailPanelSection[] => {\n const copy = this.settingsPanelCopy();\n const sections: AXPLayoutSideDetailPanelSection[] = [{ title: copy.colorBy, projectionKey: 'colorBy' }];\n\n if (this.showCalendarEventButton()) {\n sections.push({ title: copy.calendars, projectionKey: 'calendars' });\n }\n\n return sections;\n });\n\n private readonly settingsPanelI18nEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadSettingsPanelCopy();\n });\n\n /** Resolves navigator date label asynchronously so month names react to locale/profile changes. */\n private readonly navigatorTimeTextEffect = effect(() => {\n this.profileChanged();\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarType();\n this.refreshNonce();\n\n const version = ++this.navigatorTimeTextVersion;\n\n untracked(() => {\n void this.resolveNavigatorTimeText().then((text) => {\n if (version === this.navigatorTimeTextVersion) {\n this.navigatorTimeText.set(text);\n }\n });\n });\n });\n\n /** Re-render navigator calendar when regional week layout changes. */\n private readonly navigatorCalendarLayoutEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarService.getActiveCalendar()?.weekdays;\n this.calendarType();\n\n untracked(() => {\n queueMicrotask(() => {\n this.calendar()?.render();\n });\n });\n });\n\n private readonly canFilterByAllAssignees = computed(() => {\n this.sessionUser();\n this.sessionPermissions();\n return canViewAllTaskAssignees(this.sessionService);\n });\n\n protected readonly calendarEventTypeItems = computed(() =>\n this.calendarEventTypes().map((eventType) => ({\n id: eventType.id,\n text: eventType.title,\n icon: eventType.icon,\n })),\n );\n\n protected readonly showCalendarEventButton = computed(\n () => !this.isNonCalendarView() && this.calendarEventTypeItems().length > 0,\n );\n\n protected readonly selectedCalendarEventTypeCount = computed(() => this.vm.selectedCalendarEventTypeIds().length);\n\n protected readonly filterDefinitions = computed<AXPFilterDefinition[]>(() => {\n const canFilterByAll = this.canFilterByAllAssignees();\n const assigneeScopeKey = `${this.sessionUser()?.id ?? ''}:${canFilterByAll}`;\n const isMultiTaskType = this.isMultiSelectTaskTypeEnabled();\n\n const definitions: AXPFilterDefinition[] = [\n {\n field: 'type',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.task-type',\n icon: 'fa-light fa-list',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: AXMTaskManagementQueryKeys.ListTaskTypes,\n valueField: 'name',\n textField: 'title',\n multiple: isMultiTaskType,\n allowClear: isMultiTaskType,\n },\n },\n filterType: { advance: true, inline: false },\n },\n ];\n\n // Without ViewAllTasks, assignee is always the current user — hide the filter entirely.\n if (canFilterByAll) {\n definitions.push({\n field: 'assignee',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.assignee',\n icon: 'fa-light fa-user',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: true,\n allowClear: true,\n readonly: false,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n assigneeScopeKey,\n },\n },\n filterType: { advance: true, inline: false },\n });\n }\n\n definitions.push({\n field: 'reporter',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.reporter',\n icon: 'fa-light fa-user-pen',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: true,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardReporters,\n },\n },\n filterType: { advance: true, inline: false },\n });\n\n return definitions;\n });\n\n private lastCanFilterByAllAssignees: boolean | null = null;\n\n /** Re-scope assignee filter when user or permissions change; refresh chips when ViewAllTasks changes. */\n private readonly assigneeScopeEffect = effect(() => {\n this.sessionUser();\n this.sessionPermissions();\n const canFilterByAll = this.canFilterByAllAssignees();\n const permissionChanged = this.lastCanFilterByAllAssignees !== canFilterByAll;\n this.lastCanFilterByAllAssignees = canFilterByAll;\n\n if (this.vm.isLoading()) {\n return;\n }\n\n const currentIds = this.vm.selectedAssigneeIds();\n const scopedIds = normalizeTaskBoardAssigneeIds(this.sessionService, currentIds);\n const assigneeIdsChanged = !isEqual(sortBy(currentIds.map(String)), sortBy(scopedIds.map(String)));\n if (assigneeIdsChanged) {\n this.vm.setSelectedAssigneeIds(scopedIds, this.isQueryParam(), false);\n }\n\n if (this.filtersPanelInitialized && (assigneeIdsChanged || permissionChanged)) {\n untracked(() => void this.syncPanelInitialFilters());\n }\n });\n\n protected calendarType = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n protected todayButtonTextKey = computed(() => {\n switch (this.vm.currentViewMode()) {\n case 'week':\n return '@task-management:task-board.navigator.current-week';\n case 'month':\n case 'timeline-month':\n return '@task-management:task-board.navigator.current-month';\n case 'timeline-year':\n return '@task-management:task-board.navigator.current-year';\n default:\n return '@task-management:task-board.navigator.today';\n }\n });\n protected calendarDepth = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n return 'day';\n }\n return this.schedulerComponent()?.calendarDepth() || 'day';\n });\n\n protected currentDateForCalendar = computed(() => {\n const pendingRangeStart = this.vm.rangeStartDate();\n if (pendingRangeStart && this.isModifierRangeNavigatorView()) {\n return pendingRangeStart;\n }\n const date = this.vm.currentDate();\n return date || new Date();\n });\n protected filter = computed<AXPTaskFilter>(() => {\n const taskTypeNames = this.vm.selectedTaskTypeNames();\n const assigneeIds = this.vm.selectedAssigneeIds();\n const reporterIds = this.vm.selectedReporterIds();\n\n const currentDate = this.vm.currentDate() || new Date();\n let from: AXDateTime = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n let end: AXDateTime;\n\n const currentView = this.vm.currentViewMode();\n\n if (currentView === 'grid') {\n // List/grid is always scoped to the current month, regardless of any day-range\n // selected from the navigator in other views.\n from = from.startOf('month');\n end = from.endOf('month');\n } else if (\n currentView === 'kanban' ||\n currentView === 'agenda' ||\n currentView === 'timeline-weekly' ||\n currentView === 'status-grouped-grid'\n ) {\n end = from.add('day', this.vm.daysCount() - 1);\n } else if (currentView === 'month' || currentView === 'timeline-month') {\n from = from.startOf('month');\n end = from.endOf('month');\n } else {\n end = from.endOf('day');\n }\n\n return {\n // Empty filter means \"all items\" for task type/provider.\n ...(taskTypeNames.length > 0 && { types: taskTypeNames }),\n ...(assigneeIds.length > 0 && { assigneeIds }),\n ...(reporterIds.length > 0 && { reporterIds }),\n range: { from: from.date, end: end.date },\n };\n });\n\n private enrichTasks(tasks: AXPTask[]): AXPTask[] {\n return enrichTaskBoardTasks(tasks, this.vm.effectiveColorBy(), this.dueStatusProviderService);\n }\n\n private async enrichTasksForViews(tasks: AXPTask[]): Promise<AXPTask[]> {\n const labeled = await resolveTaskBoardSchedulerLabels(\n tasks,\n this.translateService,\n this.formatService,\n this.settingsService,\n );\n return this.enrichTasks(labeled);\n }\n\n private contextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n\n override async ngOnInit() {\n await super.ngOnInit();\n\n this.taskBoardService.refresh$.subscribe(async () => {\n await this.reloadTaskBoardData();\n });\n\n await this.vm.initialize();\n\n const calendars = await this.loadCalendarFilterOptions();\n\n await this.loadFromRoute();\n\n if (this.activatedRoute.snapshot.queryParamMap.has('calendarEvent')) {\n void this.router.navigate([], {\n queryParams: { calendarEvent: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n if (this.vm.selectedCalendarEventTypeIds().length === 0 && calendars.length > 0) {\n this.vm.setSelectedCalendarEventTypeIds(calendars.map((calendar) => calendar.id));\n }\n\n this.filtersReady.set(true);\n this.isReady.set(true);\n this.registerKeyboardShortcuts();\n await this.getResources();\n\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.loadFromRoute();\n });\n\n this.taskBoardService.openTask$.subscribe(async ({ task, provider, instanceId, activityId }) => {\n let match = task;\n if (!match && instanceId && activityId) {\n match = this.boardTasksRaw().find((t) => {\n const data = t.data as { instanceId?: string; activityId?: string } | undefined;\n return data?.instanceId === instanceId && data?.activityId === activityId;\n });\n }\n if (!match) {\n return;\n }\n this.vm.selectTask({\n ...match,\n provider: match.provider ?? provider,\n });\n });\n }\n override async getPageTitle(): Promise<string> {\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n return await this.translateService.translateAsync(this.viewPageTitleTranslationKey(category, layout));\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] {\n const currentCategory = this.vm.currentViewCategory();\n return this.vm.visibleViewCategories().map((category) => ({\n title: this.viewCategoryTranslationKey(category),\n icon: currentCategory === category ? 'fa-check' : '',\n command: {\n name: 'task-board-category',\n metadata: { category, isSelected: currentCategory === category, hideSelectionCheckSuffix: true },\n },\n }));\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@task-management:task-board.page-title'),\n },\n ];\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n // {\n // ...getActionButton('refresh'),\n // command: { name: 'refresh' },\n // },\n ];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.name === 'task-board-category') {\n const category = command.metadata?.['category'] as AXPTaskBoardViewCategory | undefined;\n if (category) {\n this.applyViewCategory(category);\n }\n return;\n }\n // if (command.name === 'refresh') {\n // this.taskBoardService.requestRefresh();\n // }\n }\n\n protected schedulerDataSource: AXSchedulerAppointmentDataSource = (schedulerFilter) => {\n const pageFilter = this.filter();\n const visibleRange = schedulerFilter?.range ?? pageFilter.range;\n if (!visibleRange) {\n return Promise.resolve([]);\n }\n\n const items = filterTasksOverlappingRange(this.boardTasksRaw(), visibleRange);\n this.validateSelectedTask(items);\n return Promise.resolve(items as AXSchedulerAppointment[]);\n };\n\n protected gridDataSource = (filter?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> => {\n const items = this.boardTasks();\n const skip = filter?.skip ?? 0;\n const take = filter?.take ?? 10;\n this.validateSelectedTask(items);\n return Promise.resolve({\n items: items.slice(skip, skip + take),\n total: items.length,\n });\n };\n\n resolvedTasks = signal<AXPTask[]>([]);\n\n\n schedulerComponentChanged(component: AXSchedulerComponent) {\n this.schedulerComponent.set(component);\n }\n\n /** Single board task loader — one API fan-out per filter change. */\n private readonly boardTasksLoadEffect = effect(() => {\n if (!this.isReady()) {\n return;\n }\n\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.localeService.activeProfile().localeInfo?.code;\n\n const version = ++this.boardTasksLoadVersion;\n void this.loadBoardTasks(version);\n });\n\n private async reloadTaskBoardData(): Promise<void> {\n this.taskBoardService.invalidateTaskCache();\n await this.vm.reloadTaskTypes();\n if (this.filtersPanelInitialized) {\n await this.syncPanelInitialFilters();\n }\n await this.getResources();\n const version = ++this.boardTasksLoadVersion;\n await this.loadBoardTasks(version);\n }\n\n private async loadBoardTasks(expectedVersion: number): Promise<void> {\n const filter = this.buildBoardFetchFilter();\n const result = await this.taskBoardService.getTasks(filter);\n if (expectedVersion !== this.boardTasksLoadVersion) {\n return;\n }\n\n const enriched = await this.enrichTasksForViews(result.items);\n if (expectedVersion !== this.boardTasksLoadVersion) {\n return;\n }\n\n this.boardTasksRaw.set(enriched);\n this.applyBoardTasksForCurrentView(enriched);\n this.rebuildDayDataCacheFromTasks(enriched);\n this.refreshNonce.update((value) => value + 1);\n }\n\n private buildBoardFetchFilter(): AXPTaskFilter {\n const pageFilter = this.filter();\n const navigatorRange = this.getNavigatorDataRange();\n const pageRange = pageFilter.range;\n\n if (!pageRange) {\n return { ...pageFilter, range: navigatorRange };\n }\n\n return {\n ...pageFilter,\n range: {\n from: pageRange.from < navigatorRange.from ? pageRange.from : navigatorRange.from,\n end: pageRange.end > navigatorRange.end ? pageRange.end : navigatorRange.end,\n },\n };\n }\n\n private getNavigatorDataRange(): { from: Date; end: Date } {\n const currentDate = this.vm.currentDate();\n const depth = this.calendarDepth();\n\n if (depth === 'month') {\n return {\n from: this.calendarService.create(currentDate).startOf('year').date,\n end: this.calendarService.create(currentDate).endOf('year').date,\n };\n }\n\n return {\n from: this.calendarService.create(currentDate).startOf('month').date,\n end: this.calendarService.create(currentDate).endOf('month').date,\n };\n }\n\n private applyBoardTasksForCurrentView(tasks: AXPTask[]): void {\n const viewRange = this.filter().range;\n const visible = viewRange ? filterTasksOverlappingRange(tasks, viewRange) : tasks;\n this.boardTasks.set(visible);\n this.validateSelectedTask(visible);\n\n const viewMode = this.vm.currentViewMode();\n if (viewMode === 'kanban' || viewMode === 'status-grouped-grid') {\n this.resolvedTasks.set(visible);\n }\n }\n\n private reEnrichBoardTasksFromRaw(): void {\n const raw = this.boardTasksRaw();\n if (raw.length === 0) {\n return;\n }\n\n const reEnriched = this.enrichTasks(raw);\n this.boardTasksRaw.set(reEnriched);\n this.applyBoardTasksForCurrentView(reEnriched);\n this.rebuildDayDataCacheFromTasks(reEnriched);\n }\n\n protected async handleContextMenuOnOpening(event: AXContextMenuOpeningEvent) {\n const currentTask = this.currentTask();\n if (!currentTask) return;\n const providerName = currentTask.provider;\n if (!providerName) return;\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) return;\n const actions = await provider.getActions(currentTask);\n for (const item of actions) {\n const t = item.title;\n const text =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n event.items.push({\n text,\n icon: item.icon,\n color: item.color as AXStyleColorType,\n break: item.break,\n data: {\n command: item.command,\n },\n });\n }\n }\n\n protected handleContextMenu(event: AXPTaskAction) {\n this.currentTask.set(event.task);\n const x = event.nativeEvent.clientX;\n const y = event.nativeEvent.clientY;\n const element = event.nativeEvent.target as HTMLElement;\n this.contextMenu()?.showAt({ x, y }, element);\n }\n\n protected handleMonthSlotDblClicked(date: Date) {\n this.vm.setCurrentDate(date);\n this.vm.setViewLayout('calendar', 'daily');\n }\n\n private viewCategoryTranslationKey(category: AXPTaskBoardViewCategory): string {\n return `@task-management:task-board.${category}`;\n }\n\n private viewPageTitleTranslationKey(\n category: AXPTaskBoardViewCategory,\n layout: ReturnType<typeof this.vm.getLayoutForCategory>,\n ): string {\n if (category === 'kanban') {\n return '@task-management:task-board.view-page-title.kanban';\n }\n if (layout) {\n return `@task-management:task-board.view-page-title.${category}.${layout}`;\n }\n return this.viewCategoryTranslationKey(category);\n }\n\n protected viewLayoutTranslationKey(layoutText: string): string {\n return `@task-management:task-board.view.${layoutText}`;\n }\n\n protected isViewLayoutSelected(layout: AXPTaskBoardViewLayout): boolean {\n return this.selectedViewLayout() === layout;\n }\n\n protected handleViewLayoutChange(layout: AXPTaskBoardViewLayout): void {\n this.vm.setViewLayout(this.vm.currentViewCategory(), layout);\n void this.navigateViewState();\n this.recompute();\n }\n\n private applyViewCategory(category: AXPTaskBoardViewCategory): void {\n const previousCategory = this.vm.currentViewCategory();\n const previousMode = this.vm.currentViewMode();\n\n if (isTaskBoardRangeFilterCategory(category) && !isTaskBoardRangeFilterCategory(previousCategory)) {\n this.applySmartDateRangeFromNavigator(previousMode);\n }\n\n this.vm.setViewCategory(category);\n void this.navigateViewState();\n this.popover()?.close();\n this.recompute();\n }\n\n private applySmartDateRangeFromNavigator(sourceViewMode: AXPTaskBoardViewMode): void {\n const range = deriveTaskBoardDateRangeFromNavigator(\n this.calendarService,\n sourceViewMode,\n this.vm.currentDate(),\n this.vm.daysCount(),\n );\n applyTaskBoardDateRangeToViewModel(\n range,\n (date) => this.vm.setCurrentDate(date),\n (days) => this.vm.setDaysCount(days),\n );\n }\n\n private navigateViewState(): void {\n const queryParams = this.buildFilterQueryParams();\n if (areTaskBoardQueryParamsEquivalent(this.activatedRoute.snapshot.queryParamMap, queryParams)) {\n return;\n }\n\n void this.router.navigate([], {\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n\n protected toggleSettingsPanel(): void {\n this.isSettingsPanelOpen.update((open) => !open);\n }\n\n protected closeSettingsPanel(): void {\n this.isSettingsPanelOpen.set(false);\n }\n\n private async loadSettingsPanelCopy(): Promise<void> {\n const [title, colorBy, calendars] = await Promise.all([\n this.translationService.translateAsync('@task-management:task-board.settings.title'),\n this.translationService.translateAsync('@task-management:task-board.settings.color-by'),\n this.translationService.translateAsync('@task-management:task-board.filter.calendars'),\n ]);\n\n this.settingsPanelCopy.set({\n title: title ?? '',\n colorBy: colorBy ?? '',\n calendars: calendars ?? '',\n });\n }\n\n protected handleCalendarEventTypesSelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const next = Array.isArray(event.value)\n ? event.value.map(String)\n : event.value != null\n ? [String(event.value)]\n : [];\n\n this.vm.setSelectedCalendarEventTypeIds(next);\n }\n\n protected handleFiltersChanged(incoming: AXPFilterQuery[]): void {\n if (!this.filtersPanelInitialized) {\n return;\n }\n\n // User-driven filter changes should persist and override URL-seeded state.\n this.isQueryParam.set(false);\n\n const filters = collectQueryFilterLeaves(incoming);\n const typeFilter = filters.find((f) => f.field === 'type');\n const assigneeFilter = filters.find((f) => f.field === 'assignee');\n const reporterFilter = filters.find((f) => f.field === 'reporter');\n\n this.syncTaskTypesToViewModel(typeFilter?.value);\n if (this.canFilterByAllAssignees()) {\n this.syncAssigneesToViewModel(assigneeFilter?.value);\n }\n this.syncReportersToViewModel(reporterFilter?.value);\n\n void this.navigateViewState();\n }\n\n private async syncPanelInitialFilters(): Promise<void> {\n this.panelInitialFilters.set(await this.buildInitialFiltersFromViewModel());\n }\n\n private async buildInitialFiltersFromViewModel(): Promise<AXPFilterQuery[]> {\n const filters: AXPFilterQuery[] = [];\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n\n if (types.length > 0) {\n const typeValue = this.isMultiSelectTaskTypeEnabled() ? types : types[0];\n filters.push({\n field: 'type',\n operator: { type: 'equal' },\n value: typeValue,\n displayText: await this.resolveSelectFilterDisplayText(\n AXMTaskManagementQueryKeys.ListTaskTypes,\n 'name',\n 'title',\n typeValue,\n ),\n });\n }\n if (this.canFilterByAllAssignees() && assignees.length > 0) {\n filters.push({\n field: 'assignee',\n operator: { type: 'equal' },\n value: assignees,\n displayText: await this.resolveSelectFilterDisplayText(\n AXMTaskManagementQueryKeys.TaskBoardAssignees,\n 'id',\n 'displayName',\n assignees,\n ),\n });\n }\n if (reporters.length > 0) {\n filters.push({\n field: 'reporter',\n operator: { type: 'equal' },\n value: reporters,\n displayText: await this.resolveSelectFilterDisplayText(\n AXMTaskManagementQueryKeys.TaskBoardReporters,\n 'id',\n 'displayName',\n reporters,\n ),\n });\n }\n\n return filters;\n }\n\n private async resolveSelectFilterDisplayText(\n dataSourceName: string,\n valueField: string,\n textField: string,\n values: unknown,\n ): Promise<string> {\n const ids = Array.isArray(values) ? values : values != null && values !== '' ? [values] : [];\n if (ids.length === 0) {\n return '';\n }\n\n if (!this.queryService.exists(dataSourceName)) {\n return ids.map((id) => String(this.unwrapFilterValue(id))).join(', ');\n }\n\n const labels = await Promise.all(\n ids.map(async (id) => {\n const rawId = this.unwrapFilterValue(id);\n const result = await this.queryService.fetch<AXPQueryRequest, Record<string, unknown>>(\n dataSourceName,\n {\n skip: 0,\n take: 1,\n filter: {\n field: valueField,\n operator: { type: 'equal' },\n value: rawId,\n },\n },\n );\n const page = runtimeQueryCollectionData(result);\n const item = page?.items?.[0];\n if (item && typeof item === 'object') {\n const label = item[textField];\n if (label != null && label !== '') {\n return String(label);\n }\n }\n return String(rawId);\n }),\n );\n return labels.join(', ');\n }\n\n private buildFilterQueryParams(): Params {\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n const canFilterByAll = this.canFilterByAllAssignees();\n\n return {\n view: category,\n layout: layout ?? null,\n type: types.length > 0 ? types : null,\n assignee: canFilterByAll && assignees.length > 0 ? assignees.map(String) : null,\n reporter: reporters.length > 0 ? reporters.map(String) : null,\n calendarEvent: null,\n };\n }\n\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeStringArrayFilterValue(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'name' in item) {\n return String((item as { name: string }).name);\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'name' in v) {\n return [String((v as { name: string }).name)];\n }\n return [String(v)];\n }\n\n private normalizeIdArrayFilterValue(value: unknown): (string | number)[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string' || typeof item === 'number') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'id' in item) {\n return (item as { id: string | number }).id;\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'id' in v) {\n return [(v as { id: string | number }).id];\n }\n if (typeof v === 'string' || typeof v === 'number') {\n return [v];\n }\n return [String(v)];\n }\n\n private syncTaskTypesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newNames = normalizeTaskTypeFilterNames(raw, this.vm.taskTypeOptions());\n const currentNames = this.vm.selectedTaskTypeNames();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedTaskTypeNames(newNames, this.isQueryParam());\n }\n }\n\n private syncAssigneesToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedAssigneeIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n // Always persist an explicit UI change (including clearing to \"all assignees\").\n this.vm.setSelectedAssigneeIds(newIds, false, true);\n }\n }\n\n private syncReportersToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedReporterIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n this.vm.setSelectedReporterIds(newIds, this.isQueryParam());\n }\n }\n\n protected handleColorBySelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n this.handleColorByChange(event.value as AXPTaskBoardColorBy);\n }\n\n protected handleColorByChange(key: AXPTaskBoardColorBy): void {\n this.vm.setColorBy(key);\n this.reEnrichBoardTasksFromRaw();\n this.refreshNonce.update((value) => value + 1);\n }\n\n private isMultiSelectTaskTypeEnabled(): boolean {\n const viewMode = this.vm.currentViewMode();\n return viewMode !== 'kanban' && viewMode !== 'status-grouped-grid';\n }\n\n /** Re-normalizes filter keys when locale/profile changes (titles must not drive filtering). */\n private readonly localeFilterRefreshEffect = effect(() => {\n const profileCode = this.localeService.activeProfile().localeInfo?.code ?? '';\n if (!profileCode || this.vm.isLoading() || !this.filtersPanelInitialized) {\n return;\n }\n\n const previousCode = this.lastLocaleProfileCode;\n this.lastLocaleProfileCode = profileCode;\n if (previousCode == null || previousCode === profileCode) {\n return;\n }\n\n untracked(() => {\n const taskTypeOptions = this.vm.taskTypeOptions();\n const normalizedTypes = normalizeTaskTypeFilterNames(this.vm.selectedTaskTypeNames(), taskTypeOptions);\n if (!isEqual(sortBy(normalizedTypes), sortBy(this.vm.selectedTaskTypeNames()))) {\n this.vm.setSelectedTaskTypeNames(normalizedTypes);\n }\n\n void this.vm.reloadTaskTypes({ force: true }).then(() => {\n void this.syncPanelInitialFilters();\n this.refreshNonce.update((value) => value + 1);\n });\n });\n });\n\n private readonly refreshEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.effectiveColorBy();\n this.vm.currentDate();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.refreshNonce();\n\n void this.getResources();\n });\n\n private readonly calendarEventTypeRefreshEffect = effect(() => {\n this.vm.selectedCalendarEventTypeIds();\n this.localeService.activeProfile().localeInfo?.code;\n });\n\n private readonly calendarLocalizationEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadCalendarFilterOptions();\n });\n\n private async loadCalendarFilterOptions(): Promise<Array<{ id: string; title: string }>> {\n const calendars = await this.taskBoardService.getCalendarEventTypes();\n this.calendarEventTypes.set(\n calendars.map((calendar) => ({\n id: calendar.id,\n title: calendar.title,\n })),\n );\n return calendars;\n }\n\n private rebuildDayDataCacheFromTasks(tasks: AXPTask[]): void {\n const navigatorRange = this.getNavigatorDataRange();\n const tasksInNavigatorRange = filterTasksOverlappingRange(tasks, navigatorRange);\n const dayCountMap = new Map<string, number>();\n\n tasksInNavigatorRange.forEach((task) => {\n const taskStart = new Date(task.startDate);\n const taskEnd = new Date(task.endDate);\n const startDay = this.calendarService.create(taskStart).startOf('day');\n const endDay = this.calendarService.create(taskEnd).startOf('day');\n\n let currentDay = startDay;\n while (currentDay.compare(endDay, 'day') <= 0) {\n const dayKey = currentDay.format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n currentDay = currentDay.add('day', 1);\n }\n });\n\n this.dayDataCache.set(dayCountMap);\n this.calendar()?.render();\n }\n\n private async resolveNavigatorTimeText(): Promise<string> {\n const formatted = this.formatNavigatorDateText();\n return this.resolveFormattedDateTimeLabels(formatted);\n }\n\n /** Resolves leftover `dateTime.*` tokens via translateAsync (translateSync may run before acorex scope loads). */\n private async resolveFormattedDateTimeLabels(formatted: string): Promise<string> {\n const keyPattern = /(?:@acorex:)?dateTime\\.[A-Za-z0-9._-]+/g;\n const matches = [...new Set(formatted.match(keyPattern) ?? [])];\n\n if (matches.length === 0) {\n return formatted;\n }\n\n let result = formatted;\n for (const match of matches) {\n const key = match.startsWith('@') ? match : `@acorex:${match}`;\n const translated = await this.translateService.translateAsync(key);\n result = result.replaceAll(match, translated);\n }\n\n return result;\n }\n\n /**\n * Builds toolbar navigator date text with calendar-aware AXDateTime tokens.\n * Month/weekday tokens may remain as i18n keys until {@link resolveFormattedDateTimeLabels} runs.\n */\n private formatNavigatorDateText(): string {\n const currentDate = this.vm.currentDate();\n if (!currentDate) {\n return '';\n }\n\n const calendarSystem = this.calendarType();\n const formatOptions = { locale: calendarSystem };\n const axDate = this.calendarService.create(currentDate, calendarSystem);\n const viewMode = this.vm.currentViewMode();\n\n if (viewMode === 'grid') {\n // List/grid is locked to the current month, so the navigator shows the month label.\n return axDate.format('MMMM yyyy', formatOptions);\n }\n\n if (viewMode === 'kanban' || viewMode === 'status-grouped-grid') {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n if (this.vm.daysCount() <= 1) {\n return startText;\n }\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n\n switch (viewMode) {\n case 'day':\n case 'timeline-day':\n return axDate.format('DD MMMM yyyy', formatOptions);\n case 'week': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('week', 1).add('day', -1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'agenda':\n case 'timeline-weekly': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'month':\n case 'timeline-month':\n return axDate.format('MMMM yyyy', formatOptions);\n case 'timeline-year':\n return axDate.format('yyyy', formatOptions);\n default:\n return '';\n }\n }\n\n /** Normalizes ax-calendar slot labels (e.g. `dateTime.months.*`) for the translate pipe. */\n protected toAcorexTranslationKey(text: string | number | null | undefined): string {\n if (text == null || text === '') {\n return '';\n }\n\n const value = String(text);\n if (value.startsWith('@')) {\n return value;\n }\n if (value.startsWith('dateTime.')) {\n return `@acorex:${value}`;\n }\n\n return value;\n }\n\n protected isDateTimeTranslationKey(text: string | number | null | undefined): boolean {\n if (text == null) {\n return false;\n }\n\n const value = String(text);\n return value.startsWith('@') || value.startsWith('dateTime.');\n }\n\n protected getDayDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n // Get the native Date object from AXDateTime\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n // Create a new AXDateTime from the date object for consistent formatting\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const dayKey = axDate.format('YYYY-MM-DD');\n return this.dayDataCache().get(dayKey) || 0;\n } catch (error) {\n console.warn('Error getting day data count:', error);\n return 0;\n }\n }\n\n /**\n * Aggregates the day-level data counts for an entire month.\n * Used by the monthCellTemplate to show badges when the sidebar calendar depth is 'month'.\n */\n protected getMonthDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const monthStart = axDate.startOf('month');\n const monthEnd = axDate.endOf('month');\n\n let total = 0;\n let current = monthStart;\n while (current.compare(monthEnd, 'day') <= 0) {\n const dayKey = current.format('YYYY-MM-DD');\n total += this.dayDataCache().get(dayKey) || 0;\n current = current.add('day', 1);\n }\n return total;\n } catch (error) {\n console.warn('Error getting month data count:', error);\n return 0;\n }\n }\n\n protected async handleContextMenuItemClick(event: AXContextMenuItemsClickEvent) {\n const command = event.item.data?.command;\n const provider = this.currentTask()?.provider ?? '';\n try {\n if (!command) {\n return;\n }\n const result = await this.taskBoardService.executeCommand(command, provider);\n if (isCancelledTaskBoardCommandResult(result)) {\n return;\n }\n this.taskBoardService.requestRefresh(provider || undefined);\n } catch (error) {\n console.error('[TaskBoard] Context menu command failed:', error);\n }\n }\n\n @HostListener('document:keydown.control')\n protected handleNavigatorRangeModifierDown(): void {\n this.navigatorRangeSelectActive.set(true);\n }\n\n @HostListener('document:keyup.control')\n protected handleNavigatorRangeModifierUp(): void {\n this.navigatorRangeSelectActive.set(false);\n }\n\n /**\n * Registers page keyboard shortcuts with the platform shortcut registry.\n */\n private registerKeyboardShortcuts(): void {\n this.registerTaskBoardNavigatorShortcuts();\n this.registerTaskBoardPanelShortcuts();\n this.registerTaskBoardViewCategoryShortcuts();\n this.registerTaskBoardViewLayoutShortcuts();\n }\n\n private registerTaskBoardNavigatorShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-navigator',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@general:keyboard-shortcuts.groups.navigation',\n when: () => this.isReady() && this.showToolbarNavigator(),\n shortcuts: [\n {\n keys: ['arrowleft'],\n title: '@task-management:task-board.navigator.previous-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(false),\n },\n {\n keys: ['arrowright'],\n title: '@task-management:task-board.navigator.next-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(true),\n },\n {\n keys: ['alt+t'],\n title: '@task-management:task-board.shortcuts.go-to-today',\n allowInEditableFields: true,\n handler: () => this.handleTodayClick(),\n },\n ],\n });\n }\n\n private registerTaskBoardPanelShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-settings',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady(),\n shortcuts: [\n {\n keys: ['ctrl+,'],\n title: '@task-management:task-board.shortcuts.toggle-settings',\n allowInEditableFields: true,\n handler: () => this.toggleSettingsPanel(),\n },\n ],\n });\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-dismiss',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady() && this.hasKeyboardDismissTarget(),\n shortcuts: [\n {\n keys: ['escape'],\n title: '@task-management:task-board.shortcuts.dismiss-overlays',\n handler: () => this.handleKeyboardDismiss(),\n },\n ],\n });\n }\n\n private registerTaskBoardViewCategoryShortcuts(): void {\n const categories: AXPTaskBoardViewCategory[] = ['calendar', 'timeline', 'table', 'kanban'];\n const titleKeys: Record<AXPTaskBoardViewCategory, string> = {\n calendar: '@task-management:task-board.shortcuts.switch-to-calendar',\n timeline: '@task-management:task-board.shortcuts.switch-to-timeline',\n table: '@task-management:task-board.shortcuts.switch-to-table',\n kanban: '@task-management:task-board.shortcuts.switch-to-kanban',\n };\n\n for (let index = 0; index < categories.length; index++) {\n for (const category of categories) {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: `task-board-view-category-${category}-slot-${index + 1}`,\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.getVisibleViewCategoryByShortcutIndex(index) === category,\n shortcuts: [\n {\n keys: [`alt+${index + 1}`],\n title: titleKeys[category],\n handler: () => this.switchToViewCategory(category),\n },\n ],\n });\n }\n }\n }\n\n private registerTaskBoardViewLayoutShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-view-layout',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.canCycleViewLayout(),\n shortcuts: [\n {\n keys: ['['],\n title: '@task-management:task-board.shortcuts.previous-layout',\n handler: () => this.cycleViewLayout(false),\n },\n {\n keys: [']'],\n title: '@task-management:task-board.shortcuts.next-layout',\n handler: () => this.cycleViewLayout(true),\n },\n ],\n });\n }\n\n private getVisibleViewCategoryByShortcutIndex(index: number): AXPTaskBoardViewCategory | null {\n return this.vm.visibleViewCategories()[index] ?? null;\n }\n\n private switchToViewCategory(category: AXPTaskBoardViewCategory): void {\n if (!this.vm.visibleViewCategories().includes(category)) {\n return;\n }\n\n if (this.vm.currentViewCategory() !== category) {\n this.applyViewCategory(category);\n }\n }\n\n private canCycleViewLayout(): boolean {\n return this.showViewLayoutSwitcher() && this.viewLayoutItems().length > 1;\n }\n\n private cycleViewLayout(forward: boolean): void {\n const items = this.viewLayoutItems();\n if (items.length <= 1) {\n return;\n }\n\n const currentLayout = this.selectedViewLayout();\n const currentIndex = items.findIndex((item) => item.key === currentLayout);\n const safeIndex = currentIndex >= 0 ? currentIndex : 0;\n const offset = forward ? 1 : -1;\n const nextIndex = (safeIndex + offset + items.length) % items.length;\n\n this.handleViewLayoutChange(items[nextIndex].key);\n }\n\n private hasKeyboardDismissTarget(): boolean {\n return (\n this.isSettingsPanelOpen() ||\n this.popover()?.isOpen === true ||\n this.vm.isDetailPanelOpen() ||\n this.vm.isTaskSelected()\n );\n }\n\n private handleKeyboardDismiss(): void {\n if (this.isSettingsPanelOpen()) {\n this.closeSettingsPanel();\n return;\n }\n\n if (this.popover()?.isOpen) {\n this.popover()?.close();\n return;\n }\n\n if (this.vm.isDetailPanelOpen()) {\n this.vm.closeDetailPanel();\n return;\n }\n\n if (this.vm.isTaskSelected()) {\n this.vm.clearSelectedTask();\n }\n }\n\n private isModifierRangeNavigatorView(): boolean {\n return this.modifierRangeBasedViews.includes(this.vm.currentViewMode());\n }\n\n private usesNavigatorRangeSelection(view: AXPTaskBoardViewMode): boolean {\n if (this.alwaysRangeBasedViews.includes(view)) {\n return true;\n }\n if (this.modifierRangeBasedViews.includes(view)) {\n return this.vm.rangeStartDate() != null || this.vm.daysCount() > 1;\n }\n return false;\n }\n\n private isNavigatorRangeModifierActive(event?: AXCalendarSlotClick): boolean {\n const nativeEvent = event?.nativeEvent;\n if (nativeEvent instanceof MouseEvent) {\n return nativeEvent.ctrlKey || nativeEvent.metaKey;\n }\n return this.navigatorRangeSelectActive();\n }\n\n private normalizeNavigatorDay(date: Date): Date {\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n return this.calendarService.create(date, calendarSystem).startOf('day').date;\n }\n\n private applyNavigatorDateRange(start: Date, end: Date): void {\n const startTime = start.getTime();\n const endTime = end.getTime();\n const newStartDate = new Date(Math.min(startTime, endTime));\n const newEndDate = new Date(Math.max(startTime, endTime));\n const differenceInDays = this.calculateDifferenceInDays(newStartDate, newEndDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setCurrentDate(newStartDate);\n this.vm.setDaysCount(differenceInDays);\n this.calendar()?.render();\n }\n\n private handleNavigatorRangeSlotClick(clickedDate: Date): void {\n const clickedDay = this.normalizeNavigatorDay(clickedDate);\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (selectionStartDate) {\n this.applyNavigatorDateRange(selectionStartDate, clickedDay);\n return;\n }\n\n if (this.navigatorPlainSingleDaySelected && this.vm.daysCount() === 1) {\n const selectedDay = this.normalizeNavigatorDay(this.vm.currentDate());\n this.applyNavigatorDateRange(selectedDay, clickedDay);\n return;\n }\n\n this.vm.setRangeStartDate(clickedDay);\n this.navigatorPlainSingleDaySelected = false;\n this.calendar()?.render();\n }\n\n private handleNavigatorSingleDaySlotClick(clickedDate: Date): void {\n const dateToSet = this.normalizeNavigatorDay(clickedDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = true;\n this.vm.setCurrentDate(dateToSet);\n this.vm.setDaysCount(1);\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n changeDate(forward: boolean) {\n this.navigatorPlainSingleDaySelected = false;\n const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'timeline-day':\n this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);\n break;\n\n case 'week':\n this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);\n break;\n\n case 'agenda':\n case 'kanban':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n this.vm.setCurrentDate(date.add('day', forward ? this.vm.daysCount() : -this.vm.daysCount()).date);\n break;\n\n case 'grid':\n case 'month':\n case 'timeline-month':\n this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);\n break;\n\n case 'timeline-year':\n this.vm.setCurrentDate(date.add('year', forward ? 1 : -1).date);\n break;\n }\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n protected handleCalendarSlotClick(event: AXCalendarSlotClick) {\n if (event.component.activeView !== event.component.depth) return;\n\n const clickedDate: Date = event.item;\n const currentView = this.vm.currentViewMode();\n\n if (this.modifierRangeBasedViews.includes(currentView)) {\n if (this.isNavigatorRangeModifierActive(event)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n } else {\n this.handleNavigatorSingleDaySlotClick(clickedDate);\n }\n return;\n }\n\n if (this.alwaysRangeBasedViews.includes(currentView)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n return;\n }\n\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n let dateToSet = this.calendarService.create(clickedDate, calendarSystem).startOf('day').date;\n\n if (currentView === 'week') {\n const weekDate = this.calendarService.create(dateToSet, calendarSystem);\n dateToSet = weekDate.startOf('week').date;\n }\n\n this.vm.setCurrentDate(dateToSet);\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n getCellClass = (date: AXDateTime): string | null => {\n const currentView = this.vm.currentViewMode();\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (!this.usesNavigatorRangeSelection(currentView)) {\n const currentDay = this.calendarService.create(this.vm.currentDate());\n if (date.equal(currentDay, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n if (this.modifierRangeBasedViews.includes(currentView) || this.alwaysRangeBasedViews.includes(currentView)) {\n if (selectionStartDate) {\n const axSelectionStartDate = this.calendarService.create(selectionStartDate);\n if (date.equal(axSelectionStartDate, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n const fromRange = this.calendarService.create(this.vm.currentDate());\n const endRange = fromRange.add('day', this.vm.daysCount() - 1);\n\n const isStart = date.equal(fromRange, 'day');\n const isEnd = date.equal(endRange, 'day');\n\n if (isStart && isEnd) return 'ax-range-start ax-range-end';\n if (isStart) return 'ax-range-start';\n if (isEnd) return 'ax-range-end';\n if (date.compare(fromRange, 'day') > 0 && date.compare(endRange, 'day') < 0) {\n return 'ax-range-between';\n }\n\n return null;\n }\n\n if (currentView === 'week') {\n const from = this.calendarService.create(this.vm.currentDate());\n const end = from.add('day', 6);\n\n if (date.equal(from, 'day')) return 'ax-range-start';\n if (date.equal(end, 'day')) return 'ax-range-end';\n if (date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {\n return 'ax-range-between';\n }\n }\n\n return null;\n };\n\n /**\n * Helper function to calculate the difference in whole days between two dates.\n * The result is inclusive (e.g., May 5 to May 6 is a 2-day range).\n */\n private calculateDifferenceInDays(start: Date, end: Date): number {\n if (!start || !end) {\n return 1;\n }\n const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\n const timeDifference = endDate.getTime() - startDate.getTime();\n const daysDifference = Math.round(timeDifference / (1000 * 3600 * 24));\n\n return daysDifference + 1;\n }\n\n handleTodayClick() {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n let currentDate: Date;\n if (this.vm.currentViewMode() === 'week') {\n currentDate = this.calendarService\n .create(new Date(), this.localeService.activeProfile().calendar.system)\n .startOf('week').date;\n } else {\n currentDate = new Date();\n }\n this.vm.setCurrentDate(currentDate);\n if (this.isModifierRangeNavigatorView()) {\n this.vm.setDaysCount(1);\n }\n this.popover()?.close();\n this.calendar()?.render();\n }\n\n protected isNonCalendarView = computed(() => {\n const mode = this.vm.currentViewMode();\n return mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid';\n });\n\n private async loadFromRoute(): Promise<void> {\n const snapshot = this.activatedRoute.snapshot.queryParamMap;\n const viewParam = snapshot.get('view');\n const layoutParam = snapshot.get('layout');\n const allowedCategories = new Set(this.vm.visibleViewCategories());\n\n const viewBefore = this.vm.currentViewCategory();\n const layoutBefore = this.vm.getLayoutForCategory(viewBefore);\n if (viewParam && allowedCategories.has(viewParam as AXPTaskBoardViewCategory)) {\n const category = viewParam as AXPTaskBoardViewCategory;\n const layout = resolveTaskBoardCategoryLayoutFromQuery(category, layoutParam);\n if (layout) {\n this.vm.setViewLayout(category, layout);\n }\n this.vm.setViewCategory(category);\n }\n const layoutAfter = this.vm.getLayoutForCategory(this.vm.currentViewCategory());\n if (viewBefore !== this.vm.currentViewCategory() || layoutBefore !== layoutAfter) {\n this.recompute();\n }\n\n const type = snapshot.getAll('type') as string[];\n const assignee = snapshot.getAll('assignee') as string[];\n const reporter = snapshot.getAll('reporter') as string[];\n if (type.length || assignee.length || reporter.length) {\n this.isQueryParam.set(true);\n this.vm.setSelectedTaskTypeNames(normalizeTaskTypeFilterNames(type, this.vm.taskTypeOptions()), true);\n this.vm.setSelectedAssigneeIds(assignee, true);\n this.vm.setSelectedReporterIds(reporter, true);\n } else if (this.isQueryParam()) {\n this.isQueryParam.set(false);\n await this.vm.restoreQueryFiltersFromSettings();\n }\n\n const dateRange = snapshot.get('dateRange') as string;\n if (dateRange) {\n const range = this.taskBoardService.rangeCalculator(dateRange);\n if (range) {\n this.vm.setCurrentDate(range.from);\n this.vm.setDaysCount(this.calculateDifferenceInDays(range.from, range.end));\n }\n } else if (!this.filtersPanelInitialized && this.isModifierRangeNavigatorView()) {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setDaysCount(1);\n }\n\n await this.syncPanelInitialFilters();\n this.filtersPanelInitialized = true;\n }\n\n /**\n * Checks if the currently selected task is still present in the list of visible tasks.\n * If not, it clears the selection to prevent showing details for a hidden task.\n * @param visibleTasks The new array of tasks that will be displayed.\n */\n private validateSelectedTask(visibleTasks: AXPTask[]): void {\n const currentSelectedTask = this.vm.selectedTask();\n // Proceed only if a task is actually selected\n if (currentSelectedTask) {\n // Check if any task in the new list has the same ID as the selected one\n const isSelectedTaskVisible = visibleTasks.some((task) => task.id === currentSelectedTask.id);\n\n // If the selected task is NOT in the new list, clear the selection.\n if (!isSelectedTaskVisible) {\n this.vm.selectTask(null);\n }\n }\n }\n\n protected async getResources(): Promise<void> {\n if (this.vm.selectedTaskTypeNames().length !== 1) {\n this.resources.set([]);\n return;\n }\n const resources = await this.taskBoardService.getResources(this.vm.selectedTaskTypeNames()[0] ?? '');\n this.resources.set(resources);\n }\n}\n\n//#region ----- Query Param Helpers -----\n\nfunction areTaskBoardQueryParamsEquivalent(current: ParamMap, next: Params): boolean {\n const keys = ['view', 'layout', 'type', 'assignee', 'reporter', 'calendarEvent'] as const;\n\n for (const key of keys) {\n const nextValue = next[key];\n if (nextValue == null) {\n if (current.has(key)) {\n return false;\n }\n continue;\n }\n\n if (Array.isArray(nextValue)) {\n const currentValues = current.getAll(key);\n if (\n currentValues.length !== nextValue.length ||\n currentValues.some((value, index) => value !== String(nextValue[index]))\n ) {\n return false;\n }\n continue;\n }\n\n if (current.get(key) !== String(nextValue)) {\n return false;\n }\n }\n\n return true;\n}\n\n//#endregion\n","<!-- Task board page shell -->\n<axp-page-layout *translate=\"let t\">\n <!-- Toolbar: date navigator, filters, view layout, and settings -->\n <axp-page-toolbar class=\"axm-task-board-toolbar\"\n [class.axm-task-board-toolbar--stack-filters]=\"!deviceService.isLarge()\">\n <div class=\"axm-task-board-toolbar__primary-row\">\n <axp-layout-prefix class=\"flex min-w-0 flex-nowrap items-center gap-2\"\n [class.flex-1]=\"deviceService.isLarge()\">\n <!-- Date navigator with calendar popover -->\n @if (showToolbarNavigator()) {\n <div class=\"scheduler-header shrink-0 w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"navigatorTimeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- TODO(acorex-ui): Do not wrap ax-calendar in @for/@if here — ax-popover requires a direct projected child.\n Week layout comes from AXCalendarService (AXPRegionalCalendarService); navigatorCalendarLayoutEffect re-renders on profile/calendar changes.\n Remove manual render() when ax-calendar reacts to calendar service week layout changes.\n See README.md in this folder. -->\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <ax-calendar #calendar [type]=\"calendarType()\" [depth]=\"calendarDepth()\" [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\" [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"single-range-calendar border rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\">\n <ax-footer>\n <ax-button look=\"link\" color=\"primary\" [text]=\"(todayButtonTextKey() | translate | async)!\"\n (onClick)=\"handleTodayClick()\"></ax-button>\n </ax-footer>\n </ax-calendar>\n </ax-popover>\n </div>\n }\n\n <!-- Inline query filters (large screens only) -->\n @if (deviceService.isLarge() && filtersReady()) {\n <axp-query-filters class=\"axm-task-board-toolbar__filters-inline\" [filtersDefinitions]=\"filterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\" (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n }\n </axp-layout-prefix>\n\n <axp-layout-suffix class=\"flex shrink-0 gap-2\">\n <!-- View layout switcher (kanban, grid, calendar, etc.) -->\n @if (showViewLayoutSwitcher()) {\n <ax-button class=\"axm-task-board-toolbar__view-layout-dropdown\" look=\"outline\"\n [text]=\"(selectedViewLayoutTitleKey() | translate | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"selectedViewLayoutIcon()\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewLayoutItems(); track item.key) {\n <ax-button-item [text]=\"(viewLayoutTranslationKey(item.text) | translate | async)!\"\n (onClick)=\"handleViewLayoutChange(item.key)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-check\" class=\"axm-task-board-toolbar__dropdown-menu-check\"\n [class.--placeholder]=\"!isViewLayoutSelected(item.key)\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n <!-- Settings panel toggle with active calendar-type badge -->\n <div class=\"axm-task-board-toolbar__settings-slot\">\n <ax-button class=\"axm-task-board-toolbar__settings-button\" look=\"outline\" [iconOnly]=\"true\"\n [title]=\"('@task-management:task-board.settings.title' | translate | async)!\"\n (onClick)=\"toggleSettingsPanel()\">\n <ax-prefix>\n <ax-icon [icon]=\"isSettingsPanelOpen() ? 'fa-solid fa-gear' : 'fa-light fa-gear'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n @if (selectedCalendarEventTypeCount() > 0) {\n <div class=\"axm-task-board-toolbar__settings-badge\" [class.--xs]=\"selectedCalendarEventTypeCount() > 9\">\n <ax-badge color=\"primary\" [text]=\"selectedCalendarEventTypeCount().toString()\"></ax-badge>\n </div>\n }\n </div>\n </axp-layout-suffix>\n </div>\n\n <!-- Stacked query filters (small screens) -->\n @if (!deviceService.isLarge() && filtersReady()) {\n <div class=\"axm-task-board-toolbar__filters-row\">\n <axp-query-filters [filtersDefinitions]=\"filterDefinitions()\" [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n </div>\n }\n </axp-page-toolbar>\n\n <axp-page-content class=\"flex flex-row gap-2 min-h-0\">\n <div class=\"axm-task-board-main flex flex-row gap-4 flex-1 min-w-0 min-h-0 relative\">\n <div class=\"axm-task-board-main__content flex flex-row gap-2 flex-1 min-w-0 min-h-0\">\n @if (isReady()) {\n <!-- Active view: kanban, grid, status-grouped grid, or calendar/scheduler -->\n @switch (vm.currentViewMode()) {\n @case ('kanban') {\n <axm-task-board-kanban-view class=\"axp-kanban-container h-full w-full min-w-0\" [(tasks)]=\"resolvedTasks\"\n (onTaskClick)=\"vm.selectTask($event)\" (onActionClick)=\"handleContextMenu($event)\"></axm-task-board-kanban-view>\n }\n @case ('grid') {\n <axm-task-board-grid-view class=\"h-full w-full min-w-0\" [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-grid-view>\n }\n @case ('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view class=\"flex flex-col gap-2 w-full min-w-0\"\n [dataSource]=\"gridDataSource\" [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-status-grouped-grid-view>\n }\n @default {\n <axm-task-board-calendar-view class=\"axp-scheduler-container h-full w-full min-w-0\"\n [resources]=\"resources()\" [startingDate]=\"vm.currentDate()\" [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\" [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\" (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"></axm-task-board-calendar-view>\n }\n }\n\n <!-- Shared task context menu -->\n <ax-context-menu #rootContextMenu [closeOn]=\"'leave'\" [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\" (onItemClick)=\"handleContextMenuItemClick($event)\">\n </ax-context-menu>\n\n <!-- Task detail side panel (large screens only) -->\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n }\n } @else {\n <!-- Initial bootstrap loading state -->\n <axm-task-board-content-skeleton class=\"flex-1 min-h-0 w-full self-stretch\"></axm-task-board-content-skeleton>\n }\n </div>\n\n <!-- Board settings side panel -->\n @if (isSettingsPanelOpen()) {\n @if (!deviceService.isLarge()) {\n <button type=\"button\" class=\"axm-task-board-settings-backdrop\" (click)=\"closeSettingsPanel()\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)!\"></button>\n }\n <axp-layout-side-detail-panel class=\"sticky top-0 z-10 max-h-full flex-none\"\n [class.axm-task-board-settings-panel--overlay]=\"!deviceService.isLarge()\" [header]=\"settingsPanelHeader()\"\n [sections]=\"settingsPanelSections()\" (panelClose)=\"closeSettingsPanel()\">\n <!-- Color-by dimension selector -->\n <ng-template axpLayoutSideDetailPanelSection=\"colorBy\">\n <ax-selection-list class=\"w-full\" valueField=\"key\" textField=\"titleKey\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"false\" [items]=\"colorByItems\" [ngModel]=\"effectiveColorBy()\"\n [customTemplate]=\"colorByItemTemplate\" (onValueChanged)=\"handleColorBySelectionChange($event)\">\n <ng-template #colorByItemTemplate let-item>\n {{ (item.data.titleKey | translate | async)! }}\n </ng-template>\n </ax-selection-list>\n </ng-template>\n\n <!-- Calendar event type visibility (calendar views only) -->\n @if (showCalendarEventButton()) {\n <ng-template axpLayoutSideDetailPanelSection=\"calendars\">\n <ax-selection-list class=\"w-full\" valueField=\"id\" textField=\"text\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"true\" [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"vm.selectedCalendarEventTypeIds()\"\n (onValueChanged)=\"handleCalendarEventTypesSelectionChange($event)\"></ax-selection-list>\n </ng-template>\n }\n </axp-layout-side-detail-panel>\n }\n </div>\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Calendar popover: day cell template with task-count badge -->\n<ng-template #dayCellTemplate let-slot>\n <div class=\"flex flex-col items-center justify-between w-full gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"flex-1 text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? slot.slot.date?.day ?? '' }}\n }\n </span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<!-- Calendar popover: month cell template with task-count badge -->\n<ng-template #monthCellTemplate let-slot>\n <div class=\"flex flex-col items-center justify-between w-full gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"flex-1 text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? '' }}\n }\n </span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n"],"names":["i1","i2","i3","i4","i6","i10"],"mappings":"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"}