@acorex-platform/module-report-management-client 0.0.33 → 0.0.38

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 (23) hide show
  1. package/fesm2022/{acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DENcGULA.mjs → acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DUdUNlnp.mjs} +5 -5
  2. package/fesm2022/{acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DENcGULA.mjs.map → acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DUdUNlnp.mjs.map} +1 -1
  3. package/fesm2022/acorex-platform-module-report-management-client-contracts-entities-query-snapshot-policy.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-module-report-management-client-contracts-entities-query-snapshot.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-module-report-management-client-contracts-entities-report-category.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-module-report-management-client-contracts-entities-report-generation-request.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-module-report-management-client-contracts-entities-report.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-module-report-management-client-contracts-entity-catalog-acorex-platform-module-report-management-client-contracts-entity-catalog-CgrfJQLl.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-module-report-management-client-contracts-entity-catalog-query-snapshot-policy.entity-D50GUBH6.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-module-report-management-client-contracts-entity-catalog-query-snapshot.entity-DuR9ZuN2.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-module-report-management-client-contracts-entity-catalog-report-category.entity-Dc4uvjsG.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-module-report-management-client-contracts-entity-catalog-report-generation-request.entity-mJUQuk89.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-module-report-management-client-contracts-entity-catalog-report.entity-CMDFRHeK.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-module-report-management-client-contracts.mjs.map +1 -1
  15. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page-component.provider-B_i4p7tQ.mjs → acorex-platform-module-report-management-client-entity-reports-page-component.provider-B0dU2K_E.mjs} +3 -3
  16. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page-component.provider-B_i4p7tQ.mjs.map → acorex-platform-module-report-management-client-entity-reports-page-component.provider-B0dU2K_E.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page.component-D27Gtma6.mjs → acorex-platform-module-report-management-client-entity-reports-page.component-D4SAGGn-.mjs} +3 -3
  18. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page.component-D27Gtma6.mjs.map → acorex-platform-module-report-management-client-entity-reports-page.component-D4SAGGn-.mjs.map} +1 -1
  19. package/fesm2022/acorex-platform-module-report-management-client-local-entities.mjs.map +1 -1
  20. package/fesm2022/{acorex-platform-module-report-management-client-report-popup-viewer.component-B6aTfRp0.mjs → acorex-platform-module-report-management-client-report-popup-viewer.component-Dg3IxjGy.mjs} +3 -3
  21. package/fesm2022/{acorex-platform-module-report-management-client-report-popup-viewer.component-B6aTfRp0.mjs.map → acorex-platform-module-report-management-client-report-popup-viewer.component-Dg3IxjGy.mjs.map} +1 -1
  22. package/fesm2022/acorex-platform-module-report-management-client.mjs +1 -1
  23. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DENcGULA.mjs","sources":["../../../../libs/modules/report-management/client/src/lib/manifest.ts","../../../../libs/modules/report-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/report-management/client/src/lib/menu.provider.ts","../../../../libs/modules/report-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/report-management/client/src/lib/settings.provider.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-parameter.util.ts","../../../../libs/modules/report-management/client/src/lib/features/entity-reports/entity-reports.util.ts","../../../../libs/modules/report-management/client/src/lib/features/entity-reports/entity-reports.plugin.ts","../../../../libs/modules/report-management/client/src/lib/commands/open-report-viewer.command.ts","../../../../libs/modules/report-management/client/src/lib/features/background-operation/report-generation-background-operation.handler.ts","../../../../libs/modules/report-management/client/src/lib/features/report-generation/report-generation-inbox-toast.bridge.service.ts","../../../../libs/modules/report-management/client/src/lib/features/report-generation/report-generation-inbox-toast.providers.ts","../../../../libs/modules/report-management/client/src/lib/report-management.module.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-viewer-user-settings.types.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-viewer.service.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-mapper.ts","../../../../libs/modules/report-management/client/src/lib/commands/open-report-in-popup.command.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-user-settings.service.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-group-by-drill.util.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-table-columns.util.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer.viewmodel.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-layout-switcher.util.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.html","../../../../libs/modules/report-management/client/src/acorex-platform-module-report-management-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Report Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const ReportManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'data',\n required : true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPInsightsReportingPermissionKeys\n} from '@acorex-platform/module-report-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Permission Definition Provider -----\n\n/**\n * Registers report capabilities into the shared Insights & Reporting group.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPInsightsReportingPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:insights-reporting.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.InsightsReporting.Root, `${G}.insights-reporting.title`, `${G}.insights-reporting.description`, { order: 100 });\n\n context\n .addGroup(\n groups.InsightsReporting.Reports,\n `${G}.insights-reporting-reports.title`,\n `${G}.insights-reporting-reports.description`,\n { parent: groups.InsightsReporting.Root, order: 10 },\n )\n .addPermission(keys.Access, `${P}.access.title`, `${P}.access.description`)\n .endPermission()\n .addPermission(keys.MaintainReports, `${P}.maintain-reports.title`, `${P}.maintain-reports.description`)\n .endPermission()\n .addPermission(keys.Setup, `${P}.setup.title`, `${P}.setup.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport {\n AXPInsightsReportingPermissionKeys,\n AXPReportManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-report-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n context.addItems([\n {\n name: AXPReportManagementMenuKeys.Reports,\n text: RootConfig.entities.report.titlePlural,\n path: this.entityService.withEntity(module.name, RootConfig.entities.report.name).createPath(),\n icon: RootConfig.entities.report.icon,\n priority: 8300,\n policy: {\n features: [module.name],\n permissions: [AXPInsightsReportingPermissionKeys.MaintainReports],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { AXPReportManagementFeatureKeys } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Report Management Feature Definition Provider.\n * Provides feature definitions for the Report Management module.\n */\nexport class AXPReportManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Report Builder feature\n context.addFeature(AXPReportManagementFeatureKeys.ReportBuilder, {\n title: '@report-management:features.report-builder.title',\n description: '@report-management:features.report-builder.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Saved Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.SavedReports, {\n title: '@report-management:features.saved-reports.title',\n description: '@report-management:features.saved-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Scheduled Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.ScheduledReports, {\n title: '@report-management:features.scheduled-reports.title',\n description: '@report-management:features.scheduled-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Background Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.BackgroundReports, {\n title: '@report-management:features.background-reports.title',\n description: '@report-management:features.background-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXPReportManagementSettings,\n AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS,\n} from '@acorex-platform/module-report-management-client/contracts';\n\n//#region ----- Report management settings -----\n\nconst DEDUPE_POLICY_ITEMS = [\n {\n value: 'none',\n text: '@report-management:settings.generation.items.dedupe-policy.options.none',\n },\n {\n value: 'in-flight',\n text: '@report-management:settings.generation.items.dedupe-policy.options.in-flight',\n },\n {\n value: 'in-flight-or-cooldown',\n text: '@report-management:settings.generation.items.dedupe-policy.options.in-flight-or-cooldown',\n },\n];\n\nexport class AXMReportManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const cooldownPolicy = `{{ context.eval('${AXPReportManagementSettings.GenerationDedupePolicy}') === 'in-flight-or-cooldown' }}`;\n\n context\n .addGroup(\n 'report-management',\n '@report-management:settings.group.title',\n '@report-management:settings.group.description',\n 'fa-light fa-chart-line',\n undefined,\n 840,\n )\n .addSection(\n 'generation',\n '@report-management:settings.generation.title',\n '@report-management:settings.generation.description',\n )\n .addSetting({\n key: AXPReportManagementSettings.GenerationDedupePolicy,\n title: '@report-management:settings.generation.items.dedupe-policy.title',\n description: '@report-management:settings.generation.items.dedupe-policy.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS[\n AXPReportManagementSettings.GenerationDedupePolicy\n ],\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: DEDUPE_POLICY_ITEMS,\n },\n },\n validationRules: [{ rule: 'required' }],\n })\n .addSetting({\n key: AXPReportManagementSettings.GenerationDedupeCooldownMinutes,\n title: '@report-management:settings.generation.items.dedupe-cooldown-minutes.title',\n description: '@report-management:settings.generation.items.dedupe-cooldown-minutes.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS[\n AXPReportManagementSettings.GenerationDedupeCooldownMinutes\n ],\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: { minValue: 0, maxValue: 1440, visibility: cooldownPolicy },\n },\n validationRules: [{ rule: 'required' }],\n })\n .addSetting({\n key: AXPReportManagementSettings.GenerationMaxConcurrentPerUser,\n title: '@report-management:settings.generation.items.max-concurrent-per-user.title',\n description: '@report-management:settings.generation.items.max-concurrent-per-user.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS[\n AXPReportManagementSettings.GenerationMaxConcurrentPerUser\n ],\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: { minValue: 0, maxValue: 50 },\n },\n validationRules: [{ rule: 'required' }],\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ----- Types -----\n\nexport type AXPReportDateRangeValue = 'today' | { from: string; to: string };\n\nexport type AXPReportParameterValue = string | number | boolean | AXPReportDateRangeValue | Record<string, unknown>;\n\n//#endregion\n\n//#region ----- Date helpers -----\n\n/** Local calendar date as `yyyy-MM-dd` (session \"today\" for report ranges). */\nexport function formatReportDateOnly(date: Date = new Date()): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function resolveTodayDateRange(date: Date = new Date()): { from: string; to: string } {\n const day = formatReportDateOnly(date);\n return { from: day, to: day };\n}\n\nexport function isReportDateRangeObject(value: unknown): value is { from?: unknown; to?: unknown; start?: unknown; end?: unknown } {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const raw = value as Record<string, unknown>;\n const from = raw['from'] ?? raw['start'];\n const to = raw['to'] ?? raw['end'];\n return typeof from === 'string' && typeof to === 'string' && !!from.trim() && !!to.trim();\n}\n\nexport function toReportDateRangeFilterValue(\n range: { from: string; to: string },\n): { operation: { type: 'between' }; value: { from: string; to: string } } {\n return {\n operation: { type: 'between' },\n value: { from: range.from, to: range.to },\n };\n}\n\n/**\n * Converts report default / binding values into filter-form context shape.\n * - `'today'` and `{ from, to }` → `{ operation: between, value }`\n * - existing filter objects are left unchanged\n */\nexport function resolveReportFilterDefaultValue(value: unknown, now: Date = new Date()): unknown {\n if (value === 'today') {\n return toReportDateRangeFilterValue(resolveTodayDateRange(now));\n }\n if (isReportDateRangeObject(value)) {\n return toReportDateRangeFilterValue({\n from: String(value.from ?? value.start),\n to: String(value.to ?? value.end),\n });\n }\n return value;\n}\n\ntype ReportParameterDefaultSource = {\n path: string;\n widget?: {\n defaultValue?: unknown;\n options?: Record<string, unknown>;\n };\n};\n\ntype ReportParameterGroupDefaultSource = {\n parameters?: ReportParameterDefaultSource[];\n};\n\nexport function collectReportParameterDefaults(\n parameterGroups: ReportParameterGroupDefaultSource[] | undefined,\n now: Date = new Date(),\n): Record<string, unknown> {\n const defaults: Record<string, unknown> = {};\n for (const group of parameterGroups ?? []) {\n for (const param of group.parameters ?? []) {\n const rawDefault = param.widget?.defaultValue ?? param.widget?.options?.['defaultValue'];\n if (rawDefault === undefined) {\n continue;\n }\n defaults[param.path] = resolveReportFilterDefaultValue(rawDefault, now);\n }\n }\n return defaults;\n}\n\n//#endregion\n\n//#region ----- Parameter resolution -----\n\n/**\n * Resolves special parameter tokens after expression evaluation.\n * - `dateRange: 'today'` → `{ from, to }` for the local calendar day\n */\nexport function resolveReportParameterValues(\n parameters: Record<string, unknown> | undefined,\n now: Date = new Date(),\n): Record<string, unknown> {\n if (!parameters) {\n return {};\n }\n\n const resolved: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(parameters)) {\n if (value === 'today') {\n resolved[key] = resolveTodayDateRange(now);\n continue;\n }\n resolved[key] = value;\n }\n return resolved;\n}\n\n/**\n * Maps entity-binding parameter declarations into OpenInPopup command parameters.\n * Field paths become `context.eval` expressions; `today` and `{from,to}` stay literal.\n */\nexport function mapEntityBindingParameters(\n parameters: Record<string, AXPReportParameterValue> | undefined,\n): Record<string, unknown> | undefined {\n if (!parameters) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(parameters).map(([key, value]) => [key, toBindingParameterExpression(value)]),\n );\n}\n\nfunction toBindingParameterExpression(value: AXPReportParameterValue): unknown {\n if (value === 'today') {\n return 'today';\n }\n\n if (isReportDateRangeObject(value)) {\n return {\n from: String(value.from ?? value.start),\n to: String(value.to ?? value.end),\n };\n }\n\n if (typeof value !== 'string') {\n return value;\n }\n\n const trimmed = value.trim();\n if (!trimmed || trimmed.includes('{{') || trimmed.includes('context.eval')) {\n return value;\n }\n\n return `{{ context.eval('${trimmed}') }}`;\n}\n\n//#endregion\n\n//#region ----- Viewer query params -----\n\n/**\n * Flattens popup/filter parameters into report-viewer URL query params\n * (`field.operation.type` + `field.value` / nested `from`/`to`).\n */\nexport function flattenReportParametersToQueryParams(\n parameters: Record<string, unknown>,\n): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const [field, rawValue] of Object.entries(parameters)) {\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n continue;\n }\n\n if (isReportDateRangeObject(rawValue)) {\n const from = String(rawValue.from ?? rawValue.start);\n const to = String(rawValue.to ?? rawValue.end);\n result[`${field}.operation.type`] = 'between';\n result[`${field}.value.from`] = from;\n result[`${field}.value.to`] = to;\n continue;\n }\n\n if (typeof rawValue === 'object' && !Array.isArray(rawValue) && 'operation' in rawValue) {\n const filterObj = rawValue as { operation?: { type?: string }; value?: unknown };\n if (filterObj.operation?.type) {\n result[`${field}.operation.type`] = String(filterObj.operation.type);\n }\n if (isReportDateRangeObject(filterObj.value)) {\n result[`${field}.value.from`] = String(filterObj.value.from ?? filterObj.value.start);\n result[`${field}.value.to`] = String(filterObj.value.to ?? filterObj.value.end);\n } else if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n result[`${field}.value`] = Array.isArray(filterObj.value)\n ? filterObj.value.map(String).join(',')\n : String(filterObj.value);\n }\n continue;\n }\n\n result[`${field}.operation.type`] = Array.isArray(rawValue) ? 'in' : 'equal';\n result[`${field}.value`] = Array.isArray(rawValue) ? rawValue.map(String).join(',') : String(rawValue);\n }\n\n return result;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type {\n AXPReportDefinition,\n AXPReportEntityBinding,\n AXPReportEntityDisplay,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { mapEntityBindingParameters } from '../../reports/report-parameter.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXPEntityBoundReport {\n report: AXPReportDefinition;\n binding: AXPReportEntityBinding;\n}\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const OPEN_REPORT_IN_POPUP_COMMAND = 'ReportManagement.Report:OpenInPopup';\nexport const ENTITY_REPORTS_PAGE_COMPONENT_KEY = 'entity-reports-page';\n\n//#endregion\n\n//#region ----- Display helpers -----\n\nexport function normalizeReportEntityDisplays(\n display: AXPReportEntityBinding['display'],\n): Set<AXPReportEntityDisplay> {\n if (!display) {\n return new Set<AXPReportEntityDisplay>(['page']);\n }\n const list = Array.isArray(display) ? display : [display];\n return new Set(list);\n}\n\nexport function bindingShowsOnPage(binding: AXPReportEntityBinding): boolean {\n const displays = normalizeReportEntityDisplays(binding.display);\n // Default / empty → page. Explicit lists without `page` hide from the Reports page.\n return displays.has('page') || displays.size === 0;\n}\n\nexport function resolveBindingTitle(\n report: AXPReportDefinition,\n binding: AXPReportEntityBinding,\n): AXPMultiLanguageString {\n if (typeof binding.title === 'string' && binding.title.trim()) {\n return binding.title.trim();\n }\n return report.title;\n}\n\nexport function resolveBindingDescription(\n report: AXPReportDefinition,\n binding: AXPReportEntityBinding,\n): AXPMultiLanguageString | undefined {\n if (typeof binding.description === 'string' && binding.description.trim()) {\n return binding.description.trim();\n }\n if (typeof report.description === 'string') {\n const trimmed = report.description.trim();\n return trimmed || undefined;\n }\n return report.description;\n}\n\nexport function buildOpenInPopupCommandOptions(\n report: AXPReportDefinition,\n binding: AXPReportEntityBinding,\n): Record<string, unknown> {\n return {\n reportId: report.id,\n layoutId: binding.layoutId,\n title: resolveBindingTitle(report, binding),\n parameters: mapEntityBindingParameters(binding.parameters),\n };\n}\n\nexport function extractEntityBindings(\n report: AXPReportDefinition,\n entityType: string,\n): AXPReportEntityBinding[] {\n const bindings = report.entities ?? [];\n return bindings\n .filter((binding) => binding?.entity === entityType)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPEntityActionPlugin,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { Injector } from '@angular/core';\nimport { ENTITY_REPORTS_PAGE_COMPONENT_KEY } from './entity-reports.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type EntityReportsPluginOptions = {\n /** Title for the Reports detail page. */\n title?: string;\n /** Icon for the Reports detail page. */\n icon?: string;\n};\n\n//#endregion\n\n//#region ----- Plugin factory -----\n\n/**\n * Entity `reports` plugin — contributes a Reports detail page for definitions\n * bound via `entities[]`. Reports open from that page (not entity Actions).\n *\n * Takes {@link Injector} for factory signature parity with other entity plugins.\n */\nexport function createEntityReportsPlugin(_injector: Injector): AXPEntityActionPlugin {\n return {\n name: 'reports',\n order: 55,\n apply: async (ctx, options?: EntityReportsPluginOptions) => {\n const opts = options ?? {};\n const entityType = `${ctx.entity.module}.${ctx.entity.name}`;\n const pageTitle = opts.title?.trim() || '@report-management:entity-reports.page.title';\n\n //#region ----- Reports detail page -----\n\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some(\n (p: { componentKey?: string }) => p.componentKey === ENTITY_REPORTS_PAGE_COMPONENT_KEY,\n );\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'reports',\n {\n componentKey: ENTITY_REPORTS_PAGE_COMPONENT_KEY,\n skipPage: pageExists ? { componentKey: ENTITY_REPORTS_PAGE_COMPONENT_KEY } : undefined,\n },\n );\n const page = {\n componentKey: ENTITY_REPORTS_PAGE_COMPONENT_KEY,\n title: pageTitle,\n icon: opts.icon ?? 'fa-light fa-chart-mixed',\n layout: { order: pageOrder },\n options: { entityType },\n } as any;\n if (!pageExists) {\n ctx.entity.pages.push(page);\n } else {\n const pages = ctx.entity.pages as any[];\n const index = pages.findIndex((p) => p.componentKey === ENTITY_REPORTS_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...page };\n }\n }\n\n //#endregion\n\n (ctx.entity as any).extensions ??= {};\n (ctx.entity as any).extensions.reports = {\n entityType,\n };\n },\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPTabNavigationService } from '@acorex-platform/framework-client/common';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { buildReportGenerationNotificationCorrelationId } from '@acorex-platform/module-report-management-client/contracts';\nimport { get } from 'lodash-es';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ----- Command Input -----\n\nexport interface AXPOpenReportViewerCommandInput {\n reportId?: string;\n runId?: string;\n data?: Record<string, unknown>;\n options?: Partial<AXPOpenReportViewerCommandInput>;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Opens a report in the full-page report viewer. */\n@Injectable({ providedIn: 'root' })\nexport class AXPOpenReportViewerCommand\n implements AXPCommand<AXPOpenReportViewerCommandInput | Record<string, unknown>, void>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly tabNavigation = inject(AXPTabNavigationService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly translate = inject(AXTranslationService);\n private readonly inboxConnector = inject(AXPInAppInboxConnectorService, { optional: true });\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n async execute(\n input: AXPOpenReportViewerCommandInput | Record<string, unknown>,\n ): AXPCommandExecuteResultPromise<void> {\n const rowData = this.resolveRowData(input);\n const options = await this.resolveOptions(input, rowData);\n\n if (!options.reportId) {\n return {\n success: false,\n message: {\n text: await this.translate.translateAsync(\n '@report-management:report-viewer.messages.error.invalid-popup-target',\n ),\n },\n };\n }\n\n const runId = typeof options.runId === 'string' ? options.runId.trim() : '';\n if (runId) {\n await this.dismissReportGenerationInboxNotification(runId);\n }\n\n const appName = this.sessionService.application?.name;\n if (!appName) {\n return {\n success: false,\n message: {\n text: await this.translate.translateAsync(\n '@report-management:report-viewer.messages.error.invalid-popup-target',\n ),\n },\n };\n }\n\n // Put reportId in the path (not queryParams): tabular navigation drops NavigationExtras.\n const path = runId\n ? `${appName}/${RootConfig.module.route}/viewer/${options.reportId}?runId=${encodeURIComponent(runId)}`\n : `${appName}/${RootConfig.module.route}/viewer/${options.reportId}`;\n await this.tabNavigation.navigate(path);\n\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private async dismissReportGenerationInboxNotification(runId: string): Promise<void> {\n if (!this.inboxConnector) {\n return;\n }\n try {\n await this.inboxConnector.dismissByCorrelationId(\n buildReportGenerationNotificationCorrelationId(runId),\n );\n } catch {\n // Best-effort — navigation should still proceed.\n }\n }\n\n private resolveRowData(\n input: AXPOpenReportViewerCommandInput | Record<string, unknown>,\n ): Record<string, unknown> {\n const ctx = input as AXPOpenReportViewerCommandInput;\n if (ctx?.data && typeof ctx.data === 'object') {\n return ctx.data as Record<string, unknown>;\n }\n if (\n (input as Record<string, unknown>)['data'] &&\n typeof (input as Record<string, unknown>)['data'] === 'object'\n ) {\n return (input as Record<string, unknown>)['data'] as Record<string, unknown>;\n }\n return input as Record<string, unknown>;\n }\n\n private async resolveOptions(\n input: AXPOpenReportViewerCommandInput | Record<string, unknown>,\n rowData: Record<string, unknown>,\n ): Promise<AXPOpenReportViewerCommandInput> {\n const typedInput = input as AXPOpenReportViewerCommandInput;\n const rawOptions = {\n reportId: typedInput.reportId,\n runId: typedInput.runId,\n ...(typedInput.options ?? {}),\n };\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rowData, path),\n },\n };\n\n return (await this.expressionEvaluator.evaluate(rawOptions, scope)) as AXPOpenReportViewerCommandInput;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXP_BACKGROUND_OPERATION_HANDLERS,\n AXPBackgroundOperationHandler,\n type AXPBackgroundOperation,\n type AXPBackgroundOperationCta,\n} from '@acorex-platform/framework-client/common';\nimport { AXPExecuteCommand } from '@acorex-platform/framework-shared/core';\nimport { Injectable, Provider, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPOpenReportViewerCommand } from '../../commands/open-report-viewer.command';\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport { runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport {\n AXMReportManagementQueryKeys,\n type AXMReportGenerationRequest,\n} from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ----- Handler -----\n\n@Injectable()\nexport class AXMReportGenerationBackgroundOperationHandler extends AXPBackgroundOperationHandler {\n readonly providerKey = 'report-management';\n\n private readonly openViewer = inject(AXPOpenReportViewerCommand);\n private readonly queryService = inject(AXPQueryService);\n\n async execute(command: AXPExecuteCommand, operation: AXPBackgroundOperation): Promise<void> {\n if (command.name !== 'click') {\n return;\n }\n\n const reportRequestId =\n get(operation.data, 'reportRequestId') ??\n get(operation.data, 'payload.reportRequestId') ??\n get(operation.data, 'command.payload.reportRequestId');\n if (typeof reportRequestId !== 'string' || !reportRequestId.trim()) {\n return;\n }\n\n const result = await this.queryService.fetch<{ id: string }, AXMReportGenerationRequest>(\n AXMReportManagementQueryKeys.ReportGeneration.Get,\n { id: reportRequestId },\n );\n const request = runtimeQueryPayloadData(result);\n if (!request?.reportId) {\n return;\n }\n\n if (request.status === 'completed') {\n await this.openViewer.execute({ reportId: request.reportId, runId: request.id });\n return;\n }\n\n await this.openViewer.execute({ reportId: request.reportId });\n }\n\n override resolveCta(operation: AXPBackgroundOperation): AXPBackgroundOperationCta | null {\n if (operation.status === 'failed' && operation.capabilities.retryable) {\n return {\n text: '@general:background-operation.actions.retry',\n icon: 'fa-light fa-arrow-rotate-right',\n color: 'primary',\n look: 'solid',\n command: { name: 'retry' },\n };\n }\n\n if (operation.status === 'completed' && operation.capabilities.clickable) {\n return {\n text: '@report-management:report-generation.notifications.actions.open-viewer',\n icon: 'fa-light fa-file-chart-column',\n color: 'primary',\n look: 'solid',\n command: { name: 'click' },\n };\n }\n\n return null;\n }\n}\n\n//#endregion\n\n//#region ----- Providers -----\n\nexport const AXM_REPORT_GENERATION_BACKGROUND_OPERATION_HANDLERS: Provider[] = [\n {\n provide: AXP_BACKGROUND_OPERATION_HANDLERS,\n useExisting: AXMReportGenerationBackgroundOperationHandler,\n multi: true,\n },\n AXMReportGenerationBackgroundOperationHandler,\n];\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXP_USER_NOTIFICATION_SERVICE } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport type { AXPInAppInboxItem } from '@acorex-platform/module-communication-management-client';\nimport { REPORT_GENERATION_NOTIFICATION_DEFINITION_KEY } from '@acorex-platform/module-report-management-client/contracts';\nimport { DestroyRef, effect, inject, Injectable, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { distinctUntilChanged, map } from 'rxjs';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst TOASTED_KEYS_STORAGE = 'axp:report-generation-inbox-toast-keys';\n\n//#endregion\n\n//#region ----- Bridge -----\n\n/**\n * When a report-generation inbox row arrives (user was not watching inline),\n * mirrors it as a transient toast with an open action. Inbox persistence stays server-owned.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMReportGenerationInboxToastBridgeService {\n //#region ----- Dependencies -----\n\n private readonly inboxConnector = inject(AXPInAppInboxConnectorService, { optional: true });\n private readonly userNotificationService = inject(AXP_USER_NOTIFICATION_SERVICE);\n private readonly commandService = inject(AXPCommandService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ----- State -----\n\n private started = false;\n private inboxBaselined = false;\n private boundUserId: string | null = null;\n private readonly toastedKeys = new Set<string>();\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n start(): void {\n if (this.started || !this.inboxConnector) {\n return;\n }\n this.started = true;\n\n this.sessionService.isReadyForAppScopedApi$\n .pipe(\n map(() => this.sessionService.user?.id?.trim() || null),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((userId) => {\n this.bindSessionUser(userId);\n });\n\n this.bindSessionUser(this.sessionService.user?.id?.trim() || null);\n\n effect(\n () => {\n const userId = this.sessionService.user?.id?.trim();\n const inboxLoading = this.inboxConnector?.loading() ?? false;\n const items = this.readReportGenerationItems();\n\n if (!this.sessionService.isReadyForAppScopedApi || !userId) {\n return;\n }\n\n if (!this.inboxBaselined) {\n for (const item of items) {\n this.markToasted(this.toastKey(item));\n }\n if (!inboxLoading) {\n this.inboxBaselined = true;\n }\n return;\n }\n\n for (const item of items) {\n const key = this.toastKey(item);\n if (this.toastedKeys.has(key)) {\n continue;\n }\n this.markToasted(key);\n void this.showToastForInboxItem(item);\n }\n },\n { injector: this.injector },\n );\n }\n\n //#endregion\n\n //#region ----- Toast -----\n\n private async showToastForInboxItem(item: AXPInAppInboxItem): Promise<void> {\n const action = item.actions?.[0];\n const actionTitle = action?.title\n ? await this.translationService.translateAsync(action.title)\n : await this.translationService.translateAsync(\n '@report-management:report-generation.notifications.actions.open-viewer',\n );\n\n const toastActions = action?.command?.name\n ? [\n {\n text: actionTitle,\n color: 'primary' as const,\n onClick: () => this.executeInboxAction(item, action),\n },\n ]\n : undefined;\n\n await this.userNotificationService.notify({\n correlationId: item.correlationId?.trim() || item.id,\n title: await this.resolveText(item.title),\n body: await this.resolveText(item.body),\n icon: item.iconClass ?? this.resolveIcon(item),\n delivery: {\n toast: {\n color: this.resolveToastColor(item),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 8_000,\n timeOutProgress: true,\n showActions: !!toastActions?.length,\n },\n },\n toastActions,\n });\n }\n\n private async executeInboxAction(\n item: AXPInAppInboxItem,\n action: NonNullable<AXPInAppInboxItem['actions']>[number],\n ): Promise<void> {\n if (!action.command?.name) {\n return;\n }\n await this.commandService.execute(action.command.name, action.command.options ?? {});\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private readReportGenerationItems(): AXPInAppInboxItem[] {\n const userId = this.sessionService.user?.id?.trim();\n return (this.inboxConnector?.inboxList() ?? []).filter((item) => {\n if (item.definitionKey !== REPORT_GENERATION_NOTIFICATION_DEFINITION_KEY) {\n return false;\n }\n const recipientUserId = item.recipientUserId?.trim();\n return !recipientUserId || recipientUserId === userId;\n });\n }\n\n private toastKey(item: AXPInAppInboxItem): string {\n return item.correlationId?.trim() || item.id;\n }\n\n private bindSessionUser(userId: string | null): void {\n if (userId === this.boundUserId) {\n return;\n }\n this.boundUserId = userId;\n this.inboxBaselined = false;\n this.toastedKeys.clear();\n if (userId) {\n this.loadPersistedToastedKeys(userId);\n }\n }\n\n private markToasted(key: string): void {\n const normalized = key.trim();\n if (!normalized) {\n return;\n }\n this.toastedKeys.add(normalized);\n this.persistToastedKeys();\n }\n\n private toastedStorageKey(userId: string): string {\n return `${TOASTED_KEYS_STORAGE}:${userId}`;\n }\n\n private loadPersistedToastedKeys(userId: string): void {\n try {\n const raw = sessionStorage.getItem(this.toastedStorageKey(userId));\n if (!raw) {\n return;\n }\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) {\n return;\n }\n for (const entry of parsed) {\n if (typeof entry === 'string' && entry.trim()) {\n this.toastedKeys.add(entry.trim());\n }\n }\n } catch {\n // Ignore corrupt session storage.\n }\n }\n\n private persistToastedKeys(): void {\n const userId = this.boundUserId?.trim();\n if (!userId) {\n return;\n }\n try {\n sessionStorage.setItem(this.toastedStorageKey(userId), JSON.stringify([...this.toastedKeys]));\n } catch {\n // Ignore quota / privacy errors.\n }\n }\n\n private async resolveText(value: string): Promise<string> {\n const text = value?.trim();\n if (!text) {\n return '';\n }\n if (text.startsWith('@')) {\n return this.translationService.translateAsync(text);\n }\n return text;\n }\n\n private resolveToastColor(item: AXPInAppInboxItem): 'success' | 'danger' | 'warning' {\n switch (item.priority) {\n case 'Danger':\n return 'danger';\n case 'Warning':\n return 'warning';\n default:\n return 'success';\n }\n }\n\n private resolveIcon(item: AXPInAppInboxItem): string {\n if (item.priority === 'Danger') {\n return 'fa-light fa-circle-exclamation';\n }\n if (item.priority === 'Warning') {\n return 'fa-light fa-triangle-exclamation';\n }\n return 'fa-light fa-circle-check';\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { inject, type Provider } from '@angular/core';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { AXMReportGenerationInboxToastBridgeService } from './report-generation-inbox-toast.bridge.service';\n\n//#endregion\n\n//#region ----- Providers -----\n\nexport function provideReportGenerationInboxToastBridge(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const bridge = inject(AXMReportGenerationInboxToastBridgeService);\n const inbox = inject(AXPInAppInboxConnectorService, { optional: true });\n return {\n name: 'report-generation-inbox-toast-bridge',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeHandlers,\n run: async () => {\n if (inbox) {\n await inbox.ensureReady();\n await inbox.refresh();\n }\n bridge.start();\n },\n };\n }),\n ];\n}\n\n//#endregion\n","import { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';\nimport { ReportManagementManifest } from './manifest';\nimport { AXPDomainModule } from '@acorex-platform/framework-client/domain';\nimport { AXP_ENTITY_ACTION_PLUGIN, provideEntity } from '@acorex-platform/framework-client/layout/entity';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { inject, Injector, NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\nimport { AXP_MENU_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXPRuntimeModule, provideCommandSetups } from '@acorex-platform/framework-client/runtime';\n\n// Entity Modules\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\n\nimport { AXPReportManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMReportManagementSettingProvider } from './settings.provider';\nimport { createEntityReportsPlugin } from './features/entity-reports/entity-reports.plugin';\nimport { AXM_REPORT_GENERATION_BACKGROUND_OPERATION_HANDLERS } from './features/background-operation/report-generation-background-operation.handler';\nimport { provideReportGenerationInboxToastBridge } from './features/report-generation/report-generation-inbox-toast.providers';\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: `:app/${RootConfig.module.route}/viewer`,\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { tab: true, rootLayout: true },\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: ':reportId',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n {\n path: '',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [\n AXPDomainModule,\n AXPRuntimeModule,\n // Entity Modules\n ],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: ReportManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXPReportManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMReportManagementSettingProvider,\n multi: true,\n },\n ...AXM_REPORT_GENERATION_BACKGROUND_OPERATION_HANDLERS,\n ...provideReportGenerationInboxToastBridge(),\n provideCommandSetups([\n {\n key: 'ReportManagement.Report:OpenInPopup',\n command: () =>\n import('./commands/open-report-in-popup.command').then((c) => c.AXPOpenReportInPopupCommand),\n },\n {\n key: 'ReportManagement.Report:OpenViewer',\n command: () =>\n import('./commands/open-report-viewer.command').then((c) => c.AXPOpenReportViewerCommand),\n },\n ]),\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n multi: true,\n useFactory: () => createEntityReportsPlugin(inject(Injector)),\n },\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/entity-reports/entity-reports-page-component.provider').then(\n (m) => m.AXMEntityReportsPageComponentProvider,\n ),\n ),\n ],\n})\nexport class AXMReportManagementModule { }\n","import { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\n\n//#region ---- User Settings (per report + layout) ----\n\nexport interface AXPReportTableColumnUserState {\n field: string;\n width?: number;\n}\n\nexport interface AXPReportTableLayoutUserState {\n columns?: AXPReportTableColumnUserState[];\n sorts?: AXPQuerySort[];\n pageSize?: number;\n}\n\nexport interface AXPReportViewerUserSettings {\n activeLayoutId?: string;\n layouts?: Record<string, { table?: AXPReportTableLayoutUserState }>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport {\n AXPReportDefinition,\n AXPReportLayoutDefinition,\n AXPReportLayoutType,\n AXPReportLayoutAction,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\nimport {\n extractEntityBindings,\n type AXPEntityBoundReport,\n} from '../features/entity-reports/entity-reports.util';\n\n//#endregion\n\n/**\n * Report Viewer Service\n *\n * Handles report definition retrieval, caching, and layout actions.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPReportViewerService {\n //#region ---- Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly reportDefinitionService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.report.name)\n .data();\n\n //#endregion\n\n //#region ---- Cache Storage ----\n\n /** Cache for individual report definitions by id */\n private definitionsById = new Map<string, AXPReportDefinition>();\n\n /** Pending API requests to prevent duplicate calls */\n private pendingReportRequests = new Map<string, Promise<AXPReportDefinition | undefined>>();\n\n //#endregion\n\n //#region ---- Public API: Report Definitions ----\n\n /**\n * Reports bound to a host entity type via `entities[].entity`.\n * Falls back to an in-memory filter when the nested-array query returns nothing\n * (or is unsupported by the current query backend).\n */\n async getReportsByEntityType(entityType: string): Promise<AXPEntityBoundReport[]> {\n if (!entityType?.trim()) {\n return [];\n }\n\n let items: AXPReportDefinition[] = [];\n try {\n const result = await this.reportDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entities.entity',\n operator: { type: 'equal' },\n value: entityType,\n },\n ],\n },\n });\n items = (result.items ?? []) as AXPReportDefinition[];\n } catch {\n items = [];\n }\n\n if (items.length === 0) {\n try {\n const fallback = await this.reportDefinitionService.query({\n skip: 0,\n take: 1000,\n });\n items = ((fallback.items ?? []) as AXPReportDefinition[]).filter((report) =>\n (report.entities ?? []).some((binding) => binding?.entity === entityType),\n );\n } catch {\n items = [];\n }\n }\n\n const bound: AXPEntityBoundReport[] = [];\n for (const report of items) {\n this.definitionsById.set(report.id, report);\n for (const binding of extractEntityBindings(report, entityType)) {\n bound.push({ report, binding });\n }\n }\n\n return bound.sort(\n (a, b) =>\n (a.binding.order ?? 0) - (b.binding.order ?? 0) ||\n resolveMultiLanguageString(a.report.title, 'en-US').localeCompare(\n resolveMultiLanguageString(b.report.title, 'en-US'),\n ),\n );\n }\n\n /**\n * Get single report definition by ID with O(1) lookup\n */\n async getReportById(id: string): Promise<AXPReportDefinition | undefined> {\n if (this.definitionsById.has(id)) {\n return this.definitionsById.get(id);\n }\n\n if (this.pendingReportRequests.has(id)) {\n return this.pendingReportRequests.get(id)!;\n }\n\n const requestPromise = this.loadReport(id);\n this.pendingReportRequests.set(id, requestPromise);\n\n return requestPromise;\n }\n\n //#endregion\n\n //#region ---- Public API: Layout Actions ----\n\n /**\n * Get general actions list for a layout type.\n * Override in connectivity layer (mock/API) to provide general actions.\n */\n getGeneralActionsList(layoutType: AXPReportLayoutType): AXPReportLayoutAction[] {\n return [];\n }\n\n /**\n * Get merged actions for a layout definition.\n * Combines general actions with layout-specific actions.\n */\n getMergedActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n const generalActions = this.getGeneralActionsList(layoutDefinition.layout.type);\n const customActions = layoutDefinition.actions || [];\n\n const customActionsMap = new Map<string, AXPReportLayoutAction>();\n customActions.forEach((action) => {\n if (action.name) {\n customActionsMap.set(action.name, action);\n }\n });\n\n const merged: AXPReportLayoutAction[] = [];\n const usedNames = new Set<string>();\n\n generalActions.forEach((action) => {\n if (action.name && customActionsMap.has(action.name)) {\n merged.push(customActionsMap.get(action.name)!);\n usedNames.add(action.name);\n } else {\n merged.push(action);\n if (action.name) {\n usedNames.add(action.name);\n }\n }\n });\n\n customActions.forEach((action) => {\n if (action.name && !usedNames.has(action.name)) {\n merged.push(action);\n usedNames.add(action.name);\n } else if (!action.name) {\n merged.push(action);\n }\n });\n\n return merged;\n }\n\n getPrimaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter((action) => action.priority === 'primary');\n }\n\n getSecondaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter((action) => action.priority === 'secondary');\n }\n\n //#endregion\n\n //#region ---- Private: Data Loading ----\n\n /**\n * Load single report from entity service and cache result.\n * Can be overridden in extended services (e.g., API layer).\n */\n protected async loadReport(id: string): Promise<AXPReportDefinition | undefined> {\n try {\n const result = (await this.reportDefinitionService.byKey(id)) as AXPReportDefinition | undefined;\n\n if (result) {\n this.definitionsById.set(id, result);\n return result;\n }\n\n return undefined;\n } finally {\n this.pendingReportRequests.delete(id);\n }\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n protected isReportCached(reportId: string): boolean {\n return this.definitionsById.has(reportId) || this.pendingReportRequests.has(reportId);\n }\n\n clearAllCache(): void {\n this.definitionsById.clear();\n this.pendingReportRequests.clear();\n }\n\n clearReportsCache(): void {\n this.definitionsById.clear();\n this.pendingReportRequests.clear();\n }\n\n //#endregion\n\n //#region ---- Action Handlers (Override in Connectivity Layer) ----\n\n async executeAction(commandName: string, options?: Record<string, unknown>): Promise<void> {\n console.log(`Execute action: ${commandName} - should be implemented in connectivity layer`, options);\n }\n\n //#endregion\n}\n","import {\n AXPContextData,\n AXPFilterClause,\n type AXPRuntimeQueryResult,\n runtimeQueryCollectionData,\n runtimeQueryObjectData,\n runtimeQueryPayloadData,\n} from '@acorex-platform/framework-shared/core';\nimport { AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartValue } from '@acorex/charts/line-chart';\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { isReportDateRangeObject } from './report-parameter.util';\nimport type { AXPChartDataMapping } from '@acorex-platform/module-report-management-client/contracts';\n\nexport function AXPieChartReportMapper(data: Record<string, number>): AXDonutChartValue {\n return Object.entries(data)\n .map(([key, value]) => ({\n id: key,\n label: key,\n value: Number(value),\n }))\n .filter((item) => Number.isFinite(item.value) && item.value > 0);\n}\n\nexport function AXBarChartReportMapper(data: Record<string, number>): AXBarChartValue {\n return Object.entries(data)\n .map(([key, value]) => ({\n id: key,\n label: key,\n value: Number(value),\n }))\n .filter((item) => Number.isFinite(item.value));\n}\n\nexport function AXLineChartReportMapper(data: Record<string, number>): AXLineChartValue {\n const entries = Object.entries(data);\n if (entries.length === 0) {\n return [];\n }\n const dataPoints = entries.map(([key, value]) => ({\n x: key,\n y: value,\n }));\n\n return [\n {\n id: 'series-1',\n label: 'Data Series',\n tooltipLabel: 'Countries Info',\n lineColor: '#d81159',\n fillColor: '#d8115920',\n data: dataPoints,\n },\n ];\n}\n\n//#region ---- Helpers ----\n\n/**\n * Determines whether a filter value should be treated as empty.\n * This handles deep objects, arrays, and primitives so that\n * values like { from: null, to: null } are considered empty.\n */\nfunction isEmptyFilterValue(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0 || value.every((item) => isEmptyFilterValue(item));\n }\n\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n return true;\n }\n\n // Consider object empty if all nested values are empty\n return entries.every(([, v]) => isEmptyFilterValue(v));\n }\n\n return false;\n}\n\n//#endregion\n\n/**\n * Converts AXPContextData (filter context) to AXPFilterClause format\n *\n * Input format:\n * {\n * \"fieldName\": {\n * \"operation\": { \"type\": \"between\" },\n * \"value\": { \"from\": \"...\", \"to\": \"...\" }\n * }\n * }\n *\n * Output format:\n * {\n * logic: 'and',\n * filters: [\n * {\n * field: 'fieldName',\n * operator: { type: 'between' },\n * value: { from: \"...\", to: \"...\" }\n * }\n * ]\n * }\n */\nexport function convertContextDataToFilterClause(context: AXPContextData): AXPFilterClause {\n const filters: AXDataSourceFilterOption[] = [];\n\n // Iterate through all keys in context\n for (const [fieldName, fieldData] of Object.entries(context)) {\n if (fieldName.endsWith('EditorObj') || fieldName.startsWith('__')) {\n continue;\n }\n\n // Drill-down and URL shortcuts may pass plain parameter values (e.g. { brand: 'id' })\n if (fieldData === null || fieldData === undefined || typeof fieldData !== 'object' || Array.isArray(fieldData)) {\n if (!isEmptyFilterValue(fieldData)) {\n filters.push({\n field: fieldName,\n operator: {\n type: Array.isArray(fieldData) ? 'in' : 'equal',\n },\n value: fieldData,\n });\n }\n continue;\n }\n\n // Plain `{ from, to }` / `{ start, end }` objects (e.g. dateRange from OpenInPopup)\n if (isReportDateRangeObject(fieldData) && !('operation' in fieldData)) {\n // Date-range widgets use `between`; CDK operator union is narrower than runtime.\n filters.push({\n field: fieldName,\n operator: { type: 'between' as never },\n value: {\n from: String(fieldData.from ?? fieldData.start),\n to: String(fieldData.to ?? fieldData.end),\n },\n });\n continue;\n }\n\n // Skip structured filter objects without operation metadata\n if (!('operation' in fieldData)) {\n continue;\n }\n\n const operation = (fieldData as any).operation;\n const value = (fieldData as any).value;\n\n // Skip if operation type is missing\n if (!operation || !operation.type) {\n continue;\n }\n\n // Skip if value is effectively empty (null/undefined/empty string,\n // empty object/array, or deep object where all nested values are empty)\n if (isEmptyFilterValue(value)) {\n continue;\n }\n\n // Create filter clause\n const filter: AXDataSourceFilterOption = {\n field: fieldName,\n operator: {\n type: operation.type,\n },\n value: value,\n };\n\n filters.push(filter);\n }\n\n // Return filter clause with AND logic\n if (filters.length === 0) {\n return {\n logic: 'and',\n filters: [],\n };\n }\n\n return {\n logic: 'and',\n filters: filters,\n };\n}\n\n//#region ----- Query payload helpers -----\n\nexport type AXPReportPdfSource = {\n url?: string;\n base64?: string;\n blob?: Blob;\n filename?: string;\n};\n\nfunction asPdfSource(record: Record<string, unknown> | undefined): AXPReportPdfSource | null {\n if (!record) {\n return null;\n }\n const url = typeof record['url'] === 'string' ? record['url'] : undefined;\n const base64 = typeof record['base64'] === 'string' ? record['base64'] : undefined;\n const blob = record['blob'] instanceof Blob ? record['blob'] : undefined;\n const filename = typeof record['filename'] === 'string' ? record['filename'] : undefined;\n if (url == null && base64 == null && blob == null) {\n return null;\n }\n return { url, base64, blob, filename };\n}\n\nexport function queryResultToPdfSource(\n queryResult: AXPRuntimeQueryResult<unknown> | null | undefined,\n): AXPReportPdfSource | null {\n if (!queryResult?.success) {\n return null;\n }\n\n const fromObject = asPdfSource(\n (runtimeQueryPayloadData(queryResult) ?? runtimeQueryObjectData(queryResult)) as\n | Record<string, unknown>\n | undefined,\n );\n if (fromObject) {\n return fromObject;\n }\n\n const page = runtimeQueryCollectionData(queryResult);\n return asPdfSource(page?.items?.[0] as Record<string, unknown> | undefined);\n}\n\nexport function queryResultToChartSeries(\n queryResult: AXPRuntimeQueryResult<unknown> | null | undefined,\n mapping?: AXPChartDataMapping | null,\n): Record<string, number> {\n if (!queryResult?.success) {\n return {};\n }\n\n const objectData = runtimeQueryObjectData(queryResult) as Record<string, unknown> | undefined;\n if (objectData && !('items' in objectData)) {\n const series: Record<string, number> = {};\n for (const [key, value] of Object.entries(objectData)) {\n const n = Number(value);\n if (Number.isFinite(n)) {\n series[key] = n;\n }\n }\n if (Object.keys(series).length > 0) {\n return series;\n }\n }\n\n const page = runtimeQueryCollectionData(queryResult);\n const rows = (page?.items ?? []) as Record<string, unknown>[];\n if (rows.length === 0) {\n return {};\n }\n\n const firstRow = rows[0] ?? {};\n const keys = Object.keys(firstRow);\n const xField = mapping?.xField ?? keys[0] ?? 'x';\n const yFieldsRaw = mapping?.yFields;\n const yField = Array.isArray(yFieldsRaw)\n ? yFieldsRaw[0]\n : yFieldsRaw\n ? String(yFieldsRaw)\n : (keys[1] ?? 'value');\n\n const chartData: Record<string, number> = {};\n for (const row of rows) {\n const key = String(row[xField] ?? '');\n if (!key) {\n continue;\n }\n const value = Number(row[yField] ?? 0);\n if (Number.isFinite(value)) {\n chartData[key] = value;\n }\n }\n return chartData;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport {\n AXPExpressionEvaluatorScope,\n resolveMultiLanguageString,\n type AXPMultiLanguageString,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { buildReportGenerationNotificationCorrelationId } from '@acorex-platform/module-report-management-client/contracts';\nimport { get, isString } from 'lodash-es';\nimport { inject, Injectable } from '@angular/core';\nimport { resolveReportParameterValues } from '../reports/report-parameter.util';\nimport { AXPReportViewerService } from '../reports';\n\n//#endregion\n\n//#region ----- Command Input -----\n\nexport interface AXPOpenReportInPopupCommandInput {\n reportId?: string;\n layoutId?: string;\n runId?: string;\n title?: AXPMultiLanguageString;\n parameters?: Record<string, unknown>;\n hideColumnFields?: string[];\n data?: Record<string, unknown>;\n options?: Partial<AXPOpenReportInPopupCommandInput>;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Opens a report in a results-only popup. Pass `runId` to show a frozen generation run. */\n@Injectable({ providedIn: 'root' })\nexport class AXPOpenReportInPopupCommand\n implements AXPCommand<AXPOpenReportInPopupCommandInput | Record<string, unknown>, void>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly translate = inject(AXTranslationService);\n private readonly reportViewerService = inject(AXPReportViewerService);\n private readonly inboxConnector = inject(AXPInAppInboxConnectorService, { optional: true });\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n async execute(\n input: AXPOpenReportInPopupCommandInput | Record<string, unknown>,\n ): AXPCommandExecuteResultPromise<void> {\n const rowData = this.resolveRowData(input);\n const options = await this.resolveOptions(input, rowData);\n\n if (!options.reportId) {\n return {\n success: false,\n message: {\n text: await this.translate.translateAsync(\n '@report-management:report-viewer.messages.error.invalid-popup-target',\n ),\n },\n };\n }\n\n const runId = typeof options.runId === 'string' ? options.runId.trim() : '';\n if (runId) {\n await this.dismissReportGenerationInboxNotification(runId);\n }\n const popupTitle = await this.resolvePopupTitle(options, rowData, runId);\n const parameters = resolveReportParameterValues(options.parameters);\n\n const comp = (\n await import('../features/report-viewer/report-popup-viewer/report-popup-viewer.component')\n ).AXPReportPopupViewerComponent;\n\n this.popupService.open(comp, {\n title: popupTitle,\n size: 'lg',\n maximizable: true,\n data: {\n reportId: options.reportId,\n layoutId: options.layoutId,\n runId,\n parameters,\n hideColumnFields: options.hideColumnFields ?? [],\n },\n });\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { refresh: false },\n };\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private resolveRowData(\n input: AXPOpenReportInPopupCommandInput | Record<string, unknown>,\n ): Record<string, unknown> {\n const ctx = input as AXPOpenReportInPopupCommandInput;\n if (ctx?.data && typeof ctx.data === 'object') {\n return ctx.data as Record<string, unknown>;\n }\n if (\n (input as Record<string, unknown>)['data'] &&\n typeof (input as Record<string, unknown>)['data'] === 'object'\n ) {\n return (input as Record<string, unknown>)['data'] as Record<string, unknown>;\n }\n return input as Record<string, unknown>;\n }\n\n private async resolveOptions(\n input: AXPOpenReportInPopupCommandInput | Record<string, unknown>,\n rowData: Record<string, unknown>,\n ): Promise<AXPOpenReportInPopupCommandInput> {\n const typedInput = input as AXPOpenReportInPopupCommandInput;\n const rawOptions = {\n reportId: typedInput.reportId,\n layoutId: typedInput.layoutId,\n runId: typedInput.runId,\n title: typedInput.title,\n parameters: typedInput.parameters,\n hideColumnFields: typedInput.hideColumnFields,\n ...(typedInput.options ?? {}),\n };\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rowData, path),\n },\n };\n\n return (await this.expressionEvaluator.evaluate(rawOptions, scope)) as AXPOpenReportInPopupCommandInput;\n }\n\n private async resolvePopupTitle(\n options: AXPOpenReportInPopupCommandInput,\n rowData: Record<string, unknown>,\n runId: string,\n ): Promise<string> {\n let baseTitle = await this.resolveExplicitPopupTitle(options.title, rowData);\n\n if (!baseTitle && options.reportId) {\n const report = await this.reportViewerService.getReportById(options.reportId);\n if (report?.title) {\n baseTitle =\n this.translate.resolve(report.title) ||\n resolveMultiLanguageString(report.title, this.translate.getActiveLang() || 'en-US') ||\n '';\n }\n }\n\n if (!baseTitle) {\n baseTitle = await this.translate.translateAsync(\n '@report-management:report-viewer.components.report-popup-viewer.title',\n );\n }\n\n if (!runId) {\n return baseTitle;\n }\n\n return this.translate.translateAsync(\n '@report-management:report-viewer.components.report-popup-viewer.generated-title',\n { params: { title: baseTitle } },\n );\n }\n\n private async resolveExplicitPopupTitle(\n title: AXPMultiLanguageString | undefined,\n rowData: Record<string, unknown>,\n ): Promise<string> {\n if (title && typeof title === 'object') {\n const resolved = this.translate.resolve(title);\n if (resolved) {\n return resolved;\n }\n }\n\n if (!isString(title) || !title.trim()) {\n return '';\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rowData, path),\n },\n };\n\n const evaluated = await this.expressionEvaluator.evaluate(title, scope);\n return isString(evaluated) ? evaluated : title;\n }\n\n private async dismissReportGenerationInboxNotification(runId: string): Promise<void> {\n if (!this.inboxConnector) {\n return;\n }\n try {\n await this.inboxConnector.dismissByCorrelationId(\n buildReportGenerationNotificationCorrelationId(runId),\n );\n } catch {\n // Best-effort — opening the report should still proceed.\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { set } from 'lodash';\nimport {\n AXPReportTableColumnUserState,\n AXPReportTableLayoutUserState,\n AXPReportViewerUserSettings,\n} from '../../reports/report-viewer-user-settings.types';\n\n//#region ---- Report Viewer User Settings Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPReportViewerUserSettingsService {\n private readonly settingsService = inject(AXPSettingsService);\n\n getSettingKey(reportId: string): string {\n return `ReportManagement:Report:${reportId}`;\n }\n\n async load(reportId: string): Promise<AXPReportViewerUserSettings | null> {\n const stored = await this.settingsService.get<AXPReportViewerUserSettings>(this.getSettingKey(reportId));\n return stored ?? null;\n }\n\n getTableLayoutState(\n settings: AXPReportViewerUserSettings | null | undefined,\n layoutId: string,\n ): AXPReportTableLayoutUserState | undefined {\n return settings?.layouts?.[layoutId]?.table;\n }\n\n async saveActiveLayoutId(reportId: string, layoutId: string): Promise<void> {\n await this.patch(reportId, (prev) => ({\n ...prev,\n activeLayoutId: layoutId,\n }));\n }\n\n async saveTableColumnOrder(\n reportId: string,\n layoutId: string,\n columns: AXPReportTableColumnUserState[],\n ): Promise<void> {\n await this.patchTable(reportId, layoutId, (table) => ({\n ...table,\n columns,\n }));\n }\n\n async saveTableColumnWidth(\n reportId: string,\n layoutId: string,\n field: string,\n width: number,\n baseColumns: AXPReportTableColumnUserState[],\n ): Promise<void> {\n const columns = baseColumns.map((col) =>\n col.field === field ? { ...col, width } : col,\n );\n await this.saveTableColumnOrder(reportId, layoutId, columns);\n }\n\n async saveTableSorts(reportId: string, layoutId: string, sorts: AXPQuerySort[]): Promise<void> {\n await this.patchTable(reportId, layoutId, (table) => ({\n ...table,\n sorts,\n }));\n }\n\n async saveTablePageSize(reportId: string, layoutId: string, pageSize: number): Promise<void> {\n await this.patchTable(reportId, layoutId, (table) => ({\n ...table,\n pageSize,\n }));\n }\n\n private async patch(\n reportId: string,\n updateFn: (prev: AXPReportViewerUserSettings) => AXPReportViewerUserSettings,\n ): Promise<void> {\n await this.settingsService.scope(AXPPlatformScope.User).update(this.getSettingKey(reportId), (prev) => {\n const base = (prev && typeof prev === 'object' ? prev : {}) as AXPReportViewerUserSettings;\n return updateFn(base);\n });\n }\n\n private async patchTable(\n reportId: string,\n layoutId: string,\n updateFn: (table: AXPReportTableLayoutUserState) => AXPReportTableLayoutUserState,\n ): Promise<void> {\n await this.patch(reportId, (prev) => {\n const next = { ...prev };\n const currentTable = prev.layouts?.[layoutId]?.table ?? {};\n const updatedTable = updateFn(currentTable);\n set(next, `layouts.${layoutId}.table`, updatedTable);\n return next;\n });\n }\n}\n\n//#endregion\n","import {\n AXPReportGroupByDefinition,\n AXPReportTableLayoutRowAction,\n} from '../../reports';\n\n//#region ---- Constants ----\n\nconst OPEN_REPORT_IN_POPUP_COMMAND = 'ReportManagement.Report:OpenInPopup';\n\n//#endregion\n\n//#region ---- Row Action Builder ----\n\n/**\n * Builds table row actions from declarative group-by drill-down definitions.\n * Skips row commands when linked display columns are used.\n */\nexport function buildDrillRowActionsFromGroupBy(\n definitions: AXPReportGroupByDefinition[] | undefined,\n currentReportId: string | null | undefined,\n): AXPReportTableLayoutRowAction[] {\n if (!definitions?.length || !currentReportId || hasGroupByDrillLinks(definitions)) {\n return [];\n }\n\n const hasExplicitDefault = definitions.some((definition) => definition.default);\n\n return definitions.map((definition, index) => {\n const isDefault = definition.default ?? (!hasExplicitDefault && index === 0);\n\n return {\n title: definition.title ?? 'View',\n command: {\n name: OPEN_REPORT_IN_POPUP_COMMAND,\n options: buildDrillCommandOptions(definition, currentReportId),\n },\n type: 'view',\n priority: definition.priority ?? 'primary',\n default: isDefault,\n iconOnly: false,\n };\n });\n}\n\n//#endregion\n\n//#region ---- Drill Link Columns ----\n\n/**\n * Whether group-by definitions use linked display columns instead of row command actions.\n */\nexport function hasGroupByDrillLinks(definitions: AXPReportGroupByDefinition[] | undefined): boolean {\n return definitions?.some((definition) => isGroupByDrillLinkDefinition(definition)) ?? false;\n}\n\nexport function isGroupByDrillLinkDefinition(definition: AXPReportGroupByDefinition): boolean {\n return Boolean(definition.displayField) && definition.linkDisplay !== false;\n}\n\nexport function findGroupByDefinitionForDisplayField(\n definitions: AXPReportGroupByDefinition[] | undefined,\n field: string,\n): AXPReportGroupByDefinition | undefined {\n return definitions?.find(\n (definition) => definition.displayField === field && isGroupByDrillLinkDefinition(definition),\n );\n}\n\nexport function buildGroupByDrillCommandOptions(\n definition: AXPReportGroupByDefinition,\n currentReportId: string,\n): Record<string, unknown> {\n return buildDrillCommandOptions(definition, currentReportId);\n}\n\nexport function resolveGroupByDrillLinkFields(\n definitions: AXPReportGroupByDefinition[] | undefined,\n): string[] {\n if (!definitions?.length) {\n return [];\n }\n\n return definitions\n .filter((definition) => isGroupByDrillLinkDefinition(definition))\n .map((definition) => definition.displayField!)\n .filter(Boolean);\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction buildDrillCommandOptions(\n definition: AXPReportGroupByDefinition,\n currentReportId: string,\n): Record<string, unknown> {\n const drillDown = definition.drillDown;\n const reportId = drillDown.reportId ?? currentReportId;\n\n return {\n reportId,\n layoutId: drillDown.layoutId,\n title: resolveDrillTitle(definition, drillDown.title),\n parameters: mapDrillParameters(drillDown.parameters),\n hideColumnFields: resolveDrillHideColumnFields(definition),\n };\n}\n\nfunction resolveDrillHideColumnFields(definition: AXPReportGroupByDefinition): string[] {\n const fields = new Set<string>(definition.fields);\n\n if (definition.displayField) {\n fields.add(definition.displayField);\n }\n\n return [...fields];\n}\n\nfunction resolveDrillTitle(\n definition: AXPReportGroupByDefinition,\n explicitTitle?: string,\n): string | undefined {\n if (explicitTitle) {\n return explicitTitle;\n }\n\n if (definition.displayField) {\n return `{{ context.eval('${definition.displayField}') }}`;\n }\n\n return undefined;\n}\n\nfunction mapDrillParameters(\n parameters: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!parameters) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(parameters).map(([parameterKey, rowField]) => [\n parameterKey,\n toRowExpression(rowField),\n ]),\n );\n}\n\nfunction toRowExpression(value: string): string {\n const trimmed = value.trim();\n if (trimmed.includes('{{') || trimmed.includes('context.eval')) {\n return value;\n }\n\n return `{{ context.eval('${value}') }}`;\n}\n\n//#endregion\n","\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetColumnNode } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPReportColumn, AXPReportGroupByDefinition } from '../../reports';\nimport { AXPReportTableColumnUserState } from '../../reports/report-viewer-user-settings.types';\nimport { isGroupByDrillLinkDefinition } from './report-group-by-drill.util';\n\n/** Infers a column display widget when the report definition omits `widget.type`. */\nconst NUMERIC_COLUMN_FIELD_PATTERN =\n /(?:count|total|average|avg|min|max|price|value|amount|quantity|number|year|month|quarter|experience|rate|percent|score|age|duration|hours?|days?)$/i;\n\n//#region ---- Table Column View Model ----\n\nexport interface AXPReportTableColumnViewModel {\n field: string;\n title: string;\n width: number | 'auto';\n visible: boolean;\n align: 'left' | 'center' | 'right';\n sortable: boolean;\n pin?: 'start' | 'end';\n widget: AXPWidgetColumnNode;\n isGroupByDrillLink?: boolean;\n drillDisplayField?: string;\n}\n\nexport function buildReportTableColumns(\n definitionColumns: AXPReportColumn[] | undefined,\n savedColumns?: AXPReportTableColumnUserState[],\n): AXPReportTableColumnViewModel[] {\n const base =\n definitionColumns\n ?.filter((col) => col.visible !== false)\n .map((col) => mapDefinitionColumn(col)) ?? [];\n\n return applySavedColumnLayout(base, savedColumns);\n}\n\n/**\n * Builds columns and evaluates `visible` expressions (`permission.check` / `feature.check`).\n */\nexport async function buildReportTableColumnsAsync(\n definitionColumns: AXPReportColumn[] | undefined,\n savedColumns: AXPReportTableColumnUserState[] | undefined,\n expressionEvaluator: AXPExpressionEvaluatorService,\n): Promise<AXPReportTableColumnViewModel[]> {\n const visibleColumns: AXPReportColumn[] = [];\n for (const col of definitionColumns ?? []) {\n if (await isReportColumnVisible(col.visible, expressionEvaluator)) {\n visibleColumns.push(col);\n }\n }\n\n const base = visibleColumns.map((col) => mapDefinitionColumn(col));\n return applySavedColumnLayout(base, savedColumns);\n}\n\nasync function isReportColumnVisible(\n visible: boolean | string | undefined,\n expressionEvaluator: AXPExpressionEvaluatorService,\n): Promise<boolean> {\n if (visible === false) {\n return false;\n }\n if (visible === undefined || visible === true) {\n return true;\n }\n if (typeof visible === 'string' && expressionEvaluator.isExpression(visible)) {\n try {\n return Boolean(await expressionEvaluator.evaluate(visible));\n } catch {\n return true;\n }\n }\n return Boolean(visible);\n}\n\nfunction applySavedColumnLayout(\n base: AXPReportTableColumnViewModel[],\n savedColumns?: AXPReportTableColumnUserState[],\n): AXPReportTableColumnViewModel[] {\n if (!savedColumns?.length) {\n return base;\n }\n\n const widthMap = new Map(savedColumns.map((col) => [col.field, col.width]));\n const orderIndex = new Map(savedColumns.map((col, index) => [col.field, index]));\n\n return [...base]\n .map((col) => {\n const savedWidth = widthMap.get(col.field);\n const resolvedWidth =\n typeof savedWidth === 'number' ? savedWidth : parseColumnResizeWidth(savedWidth) ?? col.width;\n return {\n ...col,\n width: resolvedWidth,\n };\n })\n .sort((a, b) => {\n const aIndex = orderIndex.get(a.field) ?? Number.MAX_SAFE_INTEGER;\n const bIndex = orderIndex.get(b.field) ?? Number.MAX_SAFE_INTEGER;\n return aIndex - bIndex;\n });\n}\n\nexport function toColumnUserState(columns: AXPReportTableColumnViewModel[]): AXPReportTableColumnUserState[] {\n return columns.map((col) => ({\n field: col.field,\n width: typeof col.width === 'number' ? col.width : parseColumnResizeWidth(col.width) ?? undefined,\n }));\n}\n\nexport function inferReportColumnWidgetType(field: string): string {\n return NUMERIC_COLUMN_FIELD_PATTERN.test(field)\n ? AXPWidgetsList.Editors.NumberBox\n : AXPWidgetsList.Editors.TextBox;\n}\n\nfunction resolveColumnWidget(col: AXPReportColumn): AXPWidgetColumnNode {\n const path = col.widget?.path ?? col.field;\n\n if (col.widget?.type) {\n return { ...col.widget, path };\n }\n\n return {\n type: inferReportColumnWidgetType(col.field),\n path,\n };\n}\n\nfunction mapDefinitionColumn(col: AXPReportColumn): AXPReportTableColumnViewModel {\n return {\n field: col.field,\n title: col.title || col.field,\n width: col.width || 'auto',\n visible: col.visible !== false,\n align: col.align || 'left',\n sortable: col.sortable === true,\n pin: col.pin,\n widget: resolveColumnWidget(col),\n };\n}\n\nexport function parseColumnResizeWidth(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nexport function resolveColumnFieldFromDataField(dataField: string): string {\n if (dataField.startsWith('col-')) {\n return dataField.slice(4);\n }\n if (dataField.includes('-')) {\n return dataField.split('-').slice(1).join('-');\n }\n return dataField;\n}\n\nexport function applyGroupByDrillLinksToColumns(\n columns: AXPReportTableColumnViewModel[],\n groupByDefinitions: AXPReportGroupByDefinition[] | undefined,\n): AXPReportTableColumnViewModel[] {\n if (!groupByDefinitions?.length) {\n return columns;\n }\n\n const linkFields = new Set(\n groupByDefinitions\n .filter((definition) => isGroupByDrillLinkDefinition(definition))\n .map((definition) => definition.displayField!)\n .filter(Boolean),\n );\n\n if (linkFields.size === 0) {\n return columns;\n }\n\n return columns.map((column) => {\n if (!linkFields.has(column.field)) {\n return column;\n }\n\n return {\n ...column,\n isGroupByDrillLink: true,\n drillDisplayField: column.field,\n };\n });\n}\n\n//#endregion\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPCommonSettings,\n AXPSettingsService,\n AXP_USER_NOTIFICATION_SERVICE,\n commandMessageTextForError,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPContextData,\n runtimeCommandPayloadData,\n runtimeQueryCollectionData,\n runtimeQueryPayloadData,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPDynamicFormDefinition } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPWidgetRegistryService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPQueryService, AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { computed, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXDataSourceQuery } from '@acorex/cdk/common';\nimport {\n AXPLayoutSwitcherOption,\n AXPReportChartLayout,\n AXPReportDefinition,\n AXPReportViewerService,\n AXPReportLayoutDefinition,\n AXPReportParameter,\n AXPReportParameterGroup,\n AXPReportPdfLayout,\n AXPReportTableLayout,\n AXMReportManagementCommandKeys,\n AXMReportManagementQueryKeys,\n buildReportGenerationNotificationCorrelationId,\n type AXPReportGenerationCreateResult,\n type AXPReportViewerFreeze,\n type AXMReportGenerationRequest,\n} from '../../reports';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { convertContextDataToFilterClause } from '../../reports/report-mapper';\nimport {\n collectReportParameterDefaults,\n resolveReportFilterDefaultValue,\n} from '../../reports/report-parameter.util';\nimport { AXPReportViewerUserSettingsService } from './report-viewer-user-settings.service';\nimport { AXPReportViewerUserSettings } from '../../reports/report-viewer-user-settings.types';\nimport { toColumnUserState } from './report-table-columns.util';\nimport type { AXPReportTableColumnViewModel } from './report-table-columns.util';\n\nconst OPEN_REPORT_VIEWER_COMMAND = 'ReportManagement.Report:OpenViewer';\n\nexport const AXPReportViewerViewModel = signalStore(\n withState(() => ({\n reportDefinition: null as AXPReportDefinition | null,\n currentLayout: null as AXPReportLayoutDefinition | null,\n filterContext: {} as AXPContextData,\n allowFetchData: false,\n shouldExecuteReport: false,\n executionRequestId: 0,\n lastAppliedFilterContext: null as AXPContextData | null, // Track last applied filters\n hasBeenExecuted: false, // Track if report has been executed at least once\n status: AXPPageStatus.Idle,\n error: null as string | null,\n showRowIndexColumn: false,\n reportUserSettings: null as AXPReportViewerUserSettings | null,\n runId: null as string | null,\n frozen: false,\n freeze: null as AXPReportViewerFreeze | null,\n backgroundQueued: false,\n backgroundGenerationRequestId: null as string | null,\n /** When true, completion is delivered inline on the viewer (no server inbox toast). */\n inlineGenerationWatchActive: false,\n parametersReadonly: false,\n selectedLayoutIds: [] as string[],\n })),\n\n withComputed((store, widgetRegistryService = inject(AXPWidgetRegistryService)) => ({\n //#region ---- Layout Management ----\n\n availableLayouts: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts) return [];\n const freeze = store.freeze();\n const layouts =\n store.frozen() && freeze?.dataSources?.length\n ? report.layouts.filter((layout) => freeze.dataSources.some((source) => source.layoutId === layout.id))\n : report.layouts;\n\n return layouts.map(\n (layout: AXPReportLayoutDefinition) =>\n ({\n id: layout.id,\n title: layout.title,\n icon: layout.icon,\n type: layout.layout.type,\n }) as AXPLayoutSwitcherOption,\n );\n }),\n\n defaultLayout: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts?.length) return null;\n\n // Find layout marked as default, or use first layout\n return report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n }),\n\n activeLayoutId: computed(() => store.currentLayout()?.id || null),\n\n layoutType: computed(() => store.currentLayout()?.layout?.type || null),\n\n //#endregion\n\n //#region ---- Layout-Specific Configurations ----\n\n tableLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'table' ? (layout.layout as AXPReportTableLayout) : null;\n }),\n\n chartLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n }),\n\n pdfLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n }),\n\n //#endregion\n\n //#region ---- State Indicators ----\n\n isLoading: computed(() => store.status() === AXPPageStatus.Processing),\n isExecuting: computed(() => store.status() === AXPPageStatus.Submitting),\n hasError: computed(() => store.error() !== null),\n canExecute: computed(() => {\n // Always allow execution if there's an error (to enable retry)\n if (store.error() !== null) {\n return true;\n }\n\n if ((store.reportDefinition()?.generation?.mode ?? 'interactive') === 'background') {\n if (store.backgroundQueued() && !store.frozen()) {\n return false;\n }\n return store.selectedLayoutIds().length > 0;\n }\n\n // Allow execution if there are unapplied filters\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n if (hasBeenExecuted && JSON.stringify(currentContext) !== JSON.stringify(lastApplied)) {\n return true;\n }\n\n // Allow execution if report hasn't been executed yet\n if (!hasBeenExecuted) {\n return true;\n }\n\n // Otherwise, don't allow execution\n return false;\n }),\n hasMultipleLayouts: computed(() => {\n const report = store.reportDefinition();\n const freeze = store.freeze();\n if (store.frozen() && freeze?.dataSources?.length) {\n return freeze.dataSources.length > 1;\n }\n return (report?.layouts?.length ?? 0) > 1;\n }),\n\n title: computed(() => store.reportDefinition()?.title ?? '@report-management:report-viewer.components.report-viewer.title'),\n description: computed(() => store.reportDefinition()?.description ?? null),\n\n //#endregion\n\n //#region ---- Form Configuration ----\n\n formDefinition: computed<AXPDynamicFormDefinition>(() => {\n const report = store.reportDefinition();\n if (!report || !report.parameterGroups) {\n return { groups: [] } as AXPDynamicFormDefinition;\n }\n const formDefinition: AXPDynamicFormDefinition = {\n groups: report.parameterGroups.map((group: AXPReportParameterGroup) => ({\n name: group.name,\n title: group.title,\n description: group.description,\n parameters: group.parameters.map((param: AXPReportParameter) => {\n const editorType = param.widget.type ?? '';\n const widget = widgetRegistryService.getOptional(editorType);\n const filterType = widget?.defaultFilterWidgetName ?? editorType;\n // date-time / text filter aliases do not mount reliably in report filter forms;\n // keep the editor widget and enable filterMode instead.\n const useEditorFilter =\n editorType === 'date-time-editor' ||\n filterType === 'datetime-filter' ||\n editorType === 'text-editor' ||\n filterType === 'string-filter';\n const widgetType = useEditorFilter ? editorType || filterType : filterType;\n const rawDefault = param.widget.defaultValue ?? param.widget.options?.['defaultValue'];\n const resolvedDefault =\n rawDefault === undefined ? undefined : resolveReportFilterDefaultValue(rawDefault);\n return {\n path: param.path,\n title: param.title,\n description: param.description,\n visible: param.visible,\n badge: `{{ filter.getTitle(context.eval(\"${param.path}.operation.type\")) }}`,\n widget: {\n path: param.path,\n type: widgetType,\n ...(resolvedDefault !== undefined ? { defaultValue: resolvedDefault } : {}),\n options: {\n ...param.widget.options,\n clearButton: true,\n hasClearButton: true,\n ...(useEditorFilter ? { filterMode: true } : {}),\n },\n triggers: param.widget.triggers,\n\n }\n };\n }),\n })),\n };\n return formDefinition;\n }),\n\n //#endregion\n\n //#region ---- Layout Type Detection ----\n\n isTableLayout: computed(() => store.currentLayout()?.layout?.type === 'table'),\n isChartLayout: computed(() => store.currentLayout()?.layout?.type === 'chart'),\n isPdfLayout: computed(() => store.currentLayout()?.layout?.type === 'pdf'),\n\n //#endregion\n\n //#region ---- Filter States ----\n\n hasUnappliedFilters: computed(() => {\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n // If report has never been executed, don't show unapplied filters warning\n if (!hasBeenExecuted) {\n return false;\n }\n\n // If no filters have been applied yet, return true\n if (lastApplied === null) {\n return true;\n }\n\n // Check if current filters are different from last applied filters\n const currentKeys = Object.keys(currentContext);\n const lastKeys = Object.keys(lastApplied);\n\n if (currentKeys.length !== lastKeys.length) {\n return true;\n }\n\n // Check if any values are different\n for (const key of currentKeys) {\n if (currentContext[key] !== lastApplied[key]) {\n return true;\n }\n }\n\n return false;\n }),\n\n //#endregion\n\n //#region ---- Action States ----\n\n canSelectRows: computed(() => {\n const layout = store.currentLayout();\n return (\n layout?.layout?.type === 'table' &&\n layout.layout.options?.selectable?.mode &&\n layout.layout.options?.selectable?.mode !== 'none'\n );\n }),\n\n tableLayoutUserSettings: computed(() => {\n const settings = store.reportUserSettings();\n const layoutId = store.currentLayout()?.id;\n if (!settings || !layoutId) {\n return null;\n }\n return settings.layouts?.[layoutId]?.table ?? null;\n }),\n\n reportId: computed(() => store.reportDefinition()?.id ?? null),\n isFrozen: computed(() => store.frozen()),\n isBackgroundQueued: computed(() => store.backgroundQueued()),\n isBackgroundReportMode: computed(\n () => (store.reportDefinition()?.generation?.mode ?? 'interactive') === 'background',\n ),\n hasSelectedBackgroundLayouts: computed(() => store.selectedLayoutIds().length > 0),\n areParametersReadonly: computed(() => store.parametersReadonly() || store.frozen()),\n isBackgroundGenerateDisabled: computed(() => {\n if ((store.reportDefinition()?.generation?.mode ?? 'interactive') !== 'background') {\n return false;\n }\n return store.backgroundQueued() || store.selectedLayoutIds().length === 0;\n }),\n canSwitchLayout: computed(() => {\n if (store.frozen() && (store.freeze()?.dataSources?.length ?? 0) <= 1) {\n return false;\n }\n return (store.reportDefinition()?.layouts?.length ?? 0) > 1 && store.status() !== AXPPageStatus.Submitting;\n }),\n generationMode: computed(() => store.reportDefinition()?.generation?.mode ?? 'interactive'),\n\n //#endregion\n })),\n\n withMethods(\n (\n store,\n reportDefinitionService: AXPReportViewerService = inject(AXPReportViewerService),\n reportUserSettingsService: AXPReportViewerUserSettingsService = inject(AXPReportViewerUserSettingsService),\n queryService: AXPQueryService = inject(AXPQueryService),\n commandService: AXPCommandService = inject(AXPCommandService),\n userNotificationService = inject(AXP_USER_NOTIFICATION_SERVICE),\n translationService: AXTranslationService = inject(AXTranslationService),\n inboxConnector: AXPInAppInboxConnectorService | null = inject(AXPInAppInboxConnectorService, {\n optional: true,\n }),\n ) => {\n let activeFetchCount = 0;\n let activeGenerationWatchId: string | null = null;\n const BACKGROUND_GENERATION_POLL_MS = 3_000;\n\n const dismissReportGenerationInboxNotification = async (runId: string): Promise<void> => {\n const normalized = runId.trim();\n if (!normalized || !inboxConnector) {\n return;\n }\n try {\n await inboxConnector.dismissByCorrelationId(\n buildReportGenerationNotificationCorrelationId(normalized),\n );\n } catch {\n // Best-effort — the report viewer should still open.\n }\n };\n\n const openGeneratedReportFromNotification = async (runId: string): Promise<void> => {\n const report = store.reportDefinition();\n const normalizedRunId = runId.trim();\n if (!report?.id || !normalizedRunId) {\n return;\n }\n\n await dismissReportGenerationInboxNotification(normalizedRunId);\n\n await commandService.execute(OPEN_REPORT_VIEWER_COMMAND, {\n reportId: report.id,\n runId: normalizedRunId,\n });\n };\n\n const showGenerationNotification = async (options: {\n color: 'success' | 'danger' | 'warning';\n titleKey: string;\n bodyKey: string;\n icon: string;\n runId?: string;\n showOpenAction?: boolean;\n }): Promise<void> => {\n const runId = options.runId?.trim();\n const showOpenAction = options.showOpenAction === true && !!runId;\n const toastActions = showOpenAction\n ? [\n {\n text: await translationService.translateAsync(\n '@report-management:report-generation.notifications.actions.open-viewer',\n ),\n color: 'primary' as const,\n onClick: () => openGeneratedReportFromNotification(runId!),\n },\n ]\n : undefined;\n\n await userNotificationService.notify({\n correlationId: runId\n ? buildReportGenerationNotificationCorrelationId(runId)\n : `report-generation-ui:${options.titleKey}`,\n title: await translationService.translateAsync(options.titleKey),\n body: await translationService.translateAsync(options.bodyKey),\n icon: options.icon,\n delivery: {\n toast: {\n color: options.color,\n location: 'bottom-center',\n closeButton: true,\n timeOut: showOpenAction ? 8_000 : 3_000,\n timeOutProgress: true,\n showActions: showOpenAction,\n },\n },\n toastActions,\n });\n };\n\n const showGenerationReadyNotification = async (runId: string): Promise<void> => {\n await showGenerationNotification({\n color: 'success',\n icon: 'fa-light fa-circle-check',\n titleKey: '@report-management:report-generation.notifications.complete.title',\n bodyKey: '@report-management:report-generation.notifications.complete.body',\n runId,\n showOpenAction: false,\n });\n };\n\n const showGenerationFailedNotification = async (): Promise<void> => {\n await showGenerationNotification({\n color: 'danger',\n icon: 'fa-light fa-circle-exclamation',\n titleKey: '@report-management:report-generation.notifications.failed.title',\n bodyKey: '@report-management:report-generation.notifications.failed.body',\n });\n };\n\n const api = {\n loadFrozenRun: async (_runId: string): Promise<void> => {},\n startBackgroundGenerationWatch: async (_requestId: string): Promise<void> => {},\n };\n\n api.loadFrozenRun = async (runId: string): Promise<void> => {\n patchState(store, { status: AXPPageStatus.Processing, error: null });\n try {\n const result = await queryService.fetch<{ id: string }, AXPReportViewerFreeze>(\n AXMReportManagementQueryKeys.ReportGeneration.GetViewerFreeze,\n { id: runId },\n );\n const freeze = runtimeQueryPayloadData(result);\n if (!result?.success || !freeze) {\n patchState(store, {\n error:\n commandMessageTextForError(result?.message?.text) ||\n '@report-management:report-generation.errors.freeze-not-found',\n });\n return;\n }\n\n let report = store.reportDefinition();\n if (freeze.definition) {\n report = {\n id: freeze.reportId,\n title: freeze.definition.title,\n categoryIds: report?.categoryIds ?? [],\n parameterGroups: report?.parameterGroups ?? [],\n layouts: freeze.definition.layouts,\n defaultLayoutId: freeze.definition.defaultLayoutId,\n generation: report?.generation,\n };\n } else if (!report) {\n report = (await reportDefinitionService.getReportById(freeze.reportId)) ?? null;\n }\n if (!report) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-load',\n });\n return;\n }\n\n const defaultLayout =\n report.layouts.find((layout) => layout.id === freeze.definition?.defaultLayoutId) ||\n report.layouts.find((layout) => layout.id === freeze.dataSources[0]?.layoutId) ||\n report.layouts[0];\n\n patchState(store, {\n reportDefinition: report,\n currentLayout: defaultLayout,\n filterContext: freeze.parameters ?? {},\n lastAppliedFilterContext: freeze.parameters ?? {},\n allowFetchData: true,\n shouldExecuteReport: true,\n hasBeenExecuted: true,\n executionRequestId: store.executionRequestId() + 1,\n runId,\n frozen: true,\n freeze,\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n parametersReadonly: true,\n status: AXPPageStatus.Idle,\n });\n } catch (error) {\n patchState(store, {\n error:\n error instanceof Error\n ? error.message\n : '@report-management:report-generation.errors.freeze-not-found',\n });\n } finally {\n patchState(store, { status: AXPPageStatus.Idle });\n }\n };\n\n api.startBackgroundGenerationWatch = async (requestId: string): Promise<void> => {\n activeGenerationWatchId = requestId;\n while (activeGenerationWatchId === requestId) {\n if (!store.backgroundQueued() || store.backgroundGenerationRequestId() !== requestId) {\n return;\n }\n\n await new Promise((resolve) => setTimeout(resolve, BACKGROUND_GENERATION_POLL_MS));\n if (activeGenerationWatchId !== requestId) {\n return;\n }\n\n try {\n const result = await queryService.fetch<{ id: string }, AXMReportGenerationRequest>(\n AXMReportManagementQueryKeys.ReportGeneration.Get,\n { id: requestId },\n );\n const request = runtimeQueryPayloadData(result);\n if (!request || activeGenerationWatchId !== requestId) {\n continue;\n }\n\n if (request.status === 'completed') {\n activeGenerationWatchId = null;\n const inlineWatchActive = store.inlineGenerationWatchActive();\n patchState(store, {\n backgroundQueued: false,\n inlineGenerationWatchActive: false,\n ...(inlineWatchActive ? {} : { backgroundGenerationRequestId: null }),\n });\n if (!inlineWatchActive) {\n return;\n }\n await api.loadFrozenRun(requestId);\n if (!store.error()) {\n await showGenerationReadyNotification(requestId);\n }\n return;\n }\n\n if (request.status === 'failed' || request.status === 'cancelled') {\n activeGenerationWatchId = null;\n patchState(store, {\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n status: AXPPageStatus.Error,\n error: '@report-management:report-generation.notifications.failed.body',\n });\n await showGenerationFailedNotification();\n return;\n }\n } catch {\n // Keep polling while the run is still active.\n }\n }\n };\n\n const generateInBackground = async (): Promise<void> => {\n const report = store.reportDefinition();\n const isBackgroundMode = (report?.generation?.mode ?? 'interactive') === 'background';\n const layoutIds = isBackgroundMode\n ? store.selectedLayoutIds()\n : store.currentLayout()\n ? [store.currentLayout()!.id]\n : [];\n if (!report || layoutIds.length === 0) {\n patchState(store, {\n error:\n layoutIds.length === 0\n ? '@report-management:report-generation.errors.no-layouts-selected'\n : '@report-management:report-viewer.messages.error.report-or-layout-not-found',\n });\n return;\n }\n\n patchState(store, { status: AXPPageStatus.Submitting, error: null });\n if (store.frozen()) {\n patchState(store, {\n frozen: false,\n freeze: null,\n runId: null,\n hasBeenExecuted: false,\n allowFetchData: false,\n parametersReadonly: false,\n });\n }\n try {\n const result = await commandService.executeRemote<\n Record<string, unknown>,\n AXPReportGenerationCreateResult\n >(AXMReportManagementCommandKeys.ReportGeneration.Create, {\n reportId: report.id,\n layoutIds,\n layoutId: layoutIds[0],\n parameters: store.filterContext(),\n trigger: 'manual',\n suppressNotificationOnComplete: true,\n });\n if (!result?.success) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error:\n commandMessageTextForError(result?.message?.text) ||\n '@report-management:report-generation.errors.create-failed',\n });\n return;\n }\n const createResult = runtimeCommandPayloadData(result);\n const requestId = createResult?.id?.trim();\n if (!createResult || !requestId) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error: '@report-management:report-generation.errors.create-failed',\n });\n return;\n }\n\n if (createResult.status === 'completed') {\n patchState(store, { status: AXPPageStatus.Idle, error: null });\n await api.loadFrozenRun(requestId);\n if (!store.error()) {\n await showGenerationReadyNotification(requestId);\n }\n return;\n }\n\n patchState(store, {\n status: AXPPageStatus.Submitted,\n backgroundQueued: true,\n backgroundGenerationRequestId: requestId,\n inlineGenerationWatchActive: true,\n error: null,\n });\n\n if (createResult.deduplicated) {\n await showGenerationNotification({\n color: 'warning',\n icon: 'fa-light fa-triangle-exclamation',\n titleKey: '@report-management:report-generation.messages.deduplicated-title',\n bodyKey: '@report-management:report-generation.messages.deduplicated-body',\n });\n } else {\n await showGenerationNotification({\n color: 'success',\n icon: 'fa-light fa-clock',\n titleKey: '@report-management:report-generation.messages.queued-title',\n bodyKey: '@report-management:report-generation.messages.queued-body',\n });\n }\n\n void api.startBackgroundGenerationWatch(requestId);\n } catch (error) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error:\n error instanceof Error\n ? error.message\n : '@report-management:report-generation.errors.create-failed',\n });\n }\n };\n\n const releaseInlineNotificationWatch = async (): Promise<void> => {\n const requestId = store.backgroundGenerationRequestId()?.trim();\n activeGenerationWatchId = null;\n patchState(store, {\n inlineGenerationWatchActive: false,\n backgroundQueued: false,\n });\n if (!requestId) {\n return;\n }\n try {\n await commandService.executeRemote<{ id: string }, void>(\n AXMReportManagementCommandKeys.ReportGeneration.ReleaseInlineWatch,\n { id: requestId },\n );\n } catch {\n // Best-effort — completion notify re-reads the flag from storage.\n }\n };\n\n const executeReport = async (): Promise<void> => {\n try {\n if (\n store.status() === AXPPageStatus.Processing ||\n store.status() === AXPPageStatus.Submitting\n ) {\n return;\n }\n\n const report = store.reportDefinition();\n if ((report?.generation?.mode ?? 'interactive') === 'background') {\n await generateInBackground();\n return;\n }\n\n if (store.frozen()) {\n patchState(store, {\n allowFetchData: true,\n shouldExecuteReport: true,\n executionRequestId: store.executionRequestId() + 1,\n hasBeenExecuted: true,\n });\n return;\n }\n\n const layout = store.currentLayout();\n if (!report || !layout) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.report-or-layout-not-found',\n });\n return;\n }\n\n patchState(store, {\n status: AXPPageStatus.Submitting,\n error: null,\n allowFetchData: true,\n shouldExecuteReport: true,\n executionRequestId: store.executionRequestId() + 1,\n lastAppliedFilterContext: { ...store.filterContext() }, // Mark current filters as applied\n hasBeenExecuted: true, // Mark that report has been executed at least once\n });\n\n patchState(store, {\n status: AXPPageStatus.Submitted,\n error: null,\n });\n } catch (error) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error: error instanceof Error ? error.message : '@report-management:report-viewer.messages.error.unexpected-execution',\n });\n }\n };\n\n const buildSummaryFromLayout = (layoutDef: AXPReportLayoutDefinition): unknown[] | undefined => {\n const tableLayout = layoutDef.layout as AXPReportTableLayout | undefined;\n if (tableLayout?.type !== 'table' || !Array.isArray(tableLayout.summary)) {\n return undefined;\n }\n const footer = tableLayout.summary.filter((s) => s.displayIn === 'reportFooter');\n return footer.length > 0 ? footer : undefined;\n };\n\n const fetchData = async (query?: AXDataSourceQuery): Promise<AXPRuntimeQueryResult<unknown> | null> => {\n const report = store.reportDefinition();\n const layout = store.currentLayout();\n if (!report || !layout) {\n return null;\n }\n\n if (store.frozen()) {\n const freeze = store.freeze();\n const layoutId = layout.id;\n const source = freeze?.dataSources.find((item) => item.layoutId === layoutId) ?? freeze?.dataSources[0];\n if (!source?.result) {\n return null;\n }\n const collection = runtimeQueryCollectionData(source.result);\n if (!collection) {\n return source.result;\n }\n const skip = query?.skip ?? 0;\n const take = query?.take ?? collection.items.length;\n return {\n ...source.result,\n success: true,\n kind: 'collection',\n data: {\n ...collection,\n items: collection.items.slice(skip, skip + take),\n },\n } as AXPRuntimeQueryResult<unknown>;\n }\n\n if (activeFetchCount > 0) {\n return null;\n }\n\n activeFetchCount++;\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n let nextStatus: AXPPageStatus = AXPPageStatus.Idle;\n try {\n const dataSource = layout.dataSource;\n if (!dataSource || dataSource.type !== 'query' || !dataSource.name) {\n nextStatus = AXPPageStatus.Error;\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-execute',\n });\n return null;\n }\n\n const filterClause = convertContextDataToFilterClause(store.filterContext());\n\n const runtimeSort: AXPQuerySort[] | undefined = query?.sort?.length\n ? query.sort.map((s) => ({\n name: s.field,\n dir: s.dir as 'asc' | 'desc',\n }))\n : dataSource.sortFields;\n\n const summary = buildSummaryFromLayout(layout);\n const queryInput = {\n skip: query?.skip ?? 0,\n take: query?.take ?? null,\n filter: filterClause,\n ...(runtimeSort?.length\n ? {\n sort: runtimeSort.map((s) => ({\n field: s.name,\n dir: s.dir as 'asc' | 'desc',\n })),\n }\n : {}),\n ...(summary ? { summary } : {}),\n };\n\n const queryResult = await queryService.fetch(dataSource.name, queryInput);\n if (!queryResult?.success) {\n nextStatus = AXPPageStatus.Error;\n patchState(store, {\n error:\n commandMessageTextForError(queryResult?.message?.text) ||\n '@report-management:report-viewer.messages.error.failed-to-execute',\n });\n return null;\n }\n return queryResult;\n } catch (error) {\n nextStatus = AXPPageStatus.Error;\n const message =\n error instanceof Error && error.message\n ? error.message\n : '@report-management:report-viewer.messages.error.failed-to-execute';\n patchState(store, {\n error: message,\n });\n console.error('Error executing report:', error);\n return null;\n } finally {\n activeFetchCount--;\n patchState(store, {\n status: nextStatus,\n });\n }\n };\n\n return {\n //#region ---- Report Loading ----\n\n async loadReport(reportId: string): Promise<void> {\n await releaseInlineNotificationWatch();\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n try {\n const report = await reportDefinitionService.getReportById(reportId);\n if (report) {\n // Configure parameter widgets with proper paths\n report.parameterGroups.forEach((group) => {\n group.parameters.forEach((param) => {\n param.widget.path = param.path;\n });\n });\n\n const userSettings = await reportUserSettingsService.load(reportId);\n\n const defaultLayout =\n report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n\n const savedLayout = userSettings?.activeLayoutId\n ? report.layouts.find((l) => l.id === userSettings.activeLayoutId)\n : undefined;\n\n patchState(store, {\n reportDefinition: report,\n currentLayout: savedLayout ?? defaultLayout,\n filterContext: collectReportParameterDefaults(report.parameterGroups),\n allowFetchData: false,\n hasBeenExecuted: false,\n executionRequestId: 0,\n reportUserSettings: userSettings,\n runId: null,\n frozen: false,\n freeze: null,\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n parametersReadonly: false,\n selectedLayoutIds: report.layouts.map((layout) => layout.id),\n });\n }\n } catch (error) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-load',\n });\n console.error('Error loading report:', error);\n } finally {\n patchState(store, {\n status: AXPPageStatus.Idle,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Layout Management ----\n\n switchLayout(layoutId: string): void {\n const report = store.reportDefinition();\n if (!report) return;\n\n const layout = report.layouts.find((l: AXPReportLayoutDefinition) => l.id === layoutId);\n if (layout) {\n patchState(store, {\n currentLayout: layout,\n reportUserSettings: {\n ...(store.reportUserSettings() ?? {}),\n activeLayoutId: layoutId,\n },\n });\n void reportUserSettingsService.saveActiveLayoutId(report.id, layoutId);\n }\n },\n\n isBackgroundLayoutSelected(layoutId: string): boolean {\n return store.selectedLayoutIds().includes(layoutId);\n },\n\n setBackgroundLayoutSelected(layoutId: string, selected: boolean): void {\n const current = store.selectedLayoutIds();\n if (selected) {\n if (current.includes(layoutId)) {\n return;\n }\n patchState(store, { selectedLayoutIds: [...current, layoutId] });\n return;\n }\n patchState(store, {\n selectedLayoutIds: current.filter((id) => id !== layoutId),\n });\n },\n\n async saveTableColumnOrder(columns: AXPReportTableColumnViewModel[]): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n await reportUserSettingsService.saveTableColumnOrder(\n reportId,\n layoutId,\n toColumnUserState(columns),\n );\n patchState(store, {\n reportUserSettings: mergeTableColumnsIntoSettings(\n store.reportUserSettings(),\n layoutId,\n toColumnUserState(columns),\n ),\n });\n },\n\n async saveTableColumnWidth(\n field: string,\n width: number,\n columns: AXPReportTableColumnViewModel[],\n ): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n const columnState = toColumnUserState(columns);\n await reportUserSettingsService.saveTableColumnWidth(reportId, layoutId, field, width, columnState);\n patchState(store, {\n reportUserSettings: mergeTableColumnsIntoSettings(store.reportUserSettings(), layoutId, columnState),\n });\n },\n\n async saveTableSorts(sorts: AXPQuerySort[]): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n await reportUserSettingsService.saveTableSorts(reportId, layoutId, sorts);\n patchState(store, {\n reportUserSettings: mergeTableSortsIntoSettings(store.reportUserSettings(), layoutId, sorts),\n });\n },\n\n async saveTablePageSize(pageSize: number): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n await reportUserSettingsService.saveTablePageSize(reportId, layoutId, pageSize);\n patchState(store, {\n reportUserSettings: mergeTablePageSizeIntoSettings(store.reportUserSettings(), layoutId, pageSize),\n });\n },\n\n //#endregion\n\n //#region ---- Data Execution ----\n\n executeReport,\n fetchData,\n generateInBackground,\n releaseInlineNotificationWatch,\n nudgeFetch(): void {\n if (!store.allowFetchData()) {\n return;\n }\n patchState(store, { executionRequestId: store.executionRequestId() + 1 });\n },\n loadFrozenRun: api.loadFrozenRun,\n\n //#endregion\n\n //#region ---- Drill View ----\n\n /**\n * Applies the same layout in drill-down mode: hides group-by columns, keeps summary and data source.\n */\n applyDrillView(options: { hideColumnFields: string[] }): void {\n const layout = store.currentLayout();\n if (!layout || layout.layout.type !== 'table') {\n return;\n }\n\n const tableLayout = layout.layout as AXPReportTableLayout;\n const hiddenFields = new Set(options.hideColumnFields);\n\n const nextTableLayout: AXPReportTableLayout = {\n ...tableLayout,\n columns: tableLayout.columns.map((column) =>\n hiddenFields.has(column.field) ? { ...column, visible: false } : column,\n ),\n groupBy: undefined,\n actions: [],\n };\n\n patchState(store, {\n currentLayout: {\n ...layout,\n layout: nextTableLayout,\n },\n });\n },\n\n //#endregion\n\n //#region ---- Filter Management ----\n\n updateFilterContext(context: Record<string, any>): void {\n patchState(store, {\n filterContext: { ...store.filterContext(), ...context },\n shouldExecuteReport: false, // Reset execution flag when filters change\n });\n },\n\n clearFilters(): void {\n patchState(store, {\n allowFetchData: false,\n shouldExecuteReport: false,\n filterContext: collectReportParameterDefaults(store.reportDefinition()?.parameterGroups),\n lastAppliedFilterContext: null, // Reset applied filters when clearing\n hasBeenExecuted: false, // Reset execution state when clearing filters\n });\n },\n\n resetFilters(): void {\n patchState(store, {\n allowFetchData: false,\n });\n },\n\n //#endregion\n\n //#region ---- Export Management ----\n\n async exportReport(format: string): Promise<void> {\n const layout = store.currentLayout();\n if (!layout?.export) {\n console.warn('@report-management:report-viewer.messages.warnings.export-not-configured');\n return;\n }\n\n try {\n // Export logic would go here\n // This would typically call a different command for export\n console.log(`Exporting report in ${format} format`);\n } catch (error) {\n console.error('Error exporting report:', error);\n }\n },\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n refresh(): Promise<void> {\n return executeReport();\n },\n\n clearError(): void {\n patchState(store, {\n error: null,\n });\n },\n\n clearExecutionState(): void {\n patchState(store, {\n hasBeenExecuted: false,\n allowFetchData: false,\n shouldExecuteReport: false,\n executionRequestId: 0,\n });\n },\n\n cancel(): void {\n patchState(store, {\n status: AXPPageStatus.Idle,\n hasBeenExecuted: false,\n error: null,\n });\n //TODO: Cancel the report execution\n },\n\n reset(): void {\n patchState(store, {\n reportDefinition: null,\n currentLayout: null,\n filterContext: {},\n allowFetchData: false,\n shouldExecuteReport: false,\n executionRequestId: 0,\n lastAppliedFilterContext: null,\n hasBeenExecuted: false,\n status: AXPPageStatus.Idle,\n error: null,\n reportUserSettings: null,\n runId: null,\n frozen: false,\n freeze: null,\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n parametersReadonly: false,\n });\n },\n\n //#endregion\n };\n },\n ),\n\n withHooks(\n (\n store,\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n settingsService = inject(AXPSettingsService),\n ) => {\n const settingSubs = new Subscription();\n\n const syncShowRowIndexColumn = async (): Promise<void> => {\n try {\n const value = await settingsService.get<boolean>(AXPCommonSettings.ShowRowIndexColumn);\n patchState(store, { showRowIndexColumn: value ?? false });\n } catch {\n patchState(store, { showRowIndexColumn: false });\n }\n };\n\n return {\n async onInit() {\n translationService.langChanges$.subscribe(() => {\n // Handle language change if needed\n });\n\n localeService.profileChanged$.subscribe(() => {\n // Handle locale change if needed\n });\n\n void syncShowRowIndexColumn();\n settingSubs.add(settingsService.onLoaded.subscribe(() => void syncShowRowIndexColumn()));\n settingSubs.add(settingsService.onChanged.subscribe(() => void syncShowRowIndexColumn()));\n },\n onDestroy() {\n settingSubs.unsubscribe();\n },\n };\n },\n ),\n);\n\n//#region ---- Settings Merge Helpers ----\n\nfunction mergeTableColumnsIntoSettings(\n settings: AXPReportViewerUserSettings | null,\n layoutId: string,\n columns: { field: string; width?: number }[],\n): AXPReportViewerUserSettings {\n const base = settings ?? {};\n return {\n ...base,\n layouts: {\n ...base.layouts,\n [layoutId]: {\n ...base.layouts?.[layoutId],\n table: {\n ...base.layouts?.[layoutId]?.table,\n columns,\n },\n },\n },\n };\n}\n\nfunction mergeTableSortsIntoSettings(\n settings: AXPReportViewerUserSettings | null,\n layoutId: string,\n sorts: AXPQuerySort[],\n): AXPReportViewerUserSettings {\n const base = settings ?? {};\n return {\n ...base,\n layouts: {\n ...base.layouts,\n [layoutId]: {\n ...base.layouts?.[layoutId],\n table: {\n ...base.layouts?.[layoutId]?.table,\n sorts,\n },\n },\n },\n };\n}\n\nfunction mergeTablePageSizeIntoSettings(\n settings: AXPReportViewerUserSettings | null,\n layoutId: string,\n pageSize: number,\n): AXPReportViewerUserSettings {\n const base = settings ?? {};\n return {\n ...base,\n layouts: {\n ...base.layouts,\n [layoutId]: {\n ...base.layouts?.[layoutId],\n table: {\n ...base.layouts?.[layoutId]?.table,\n pageSize,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDonutChartComponent, AXDonutChartOption, AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartComponent, AXLineChartOption, AXLineChartValue } from '@acorex/charts/line-chart';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked } from '@angular/core';\nimport {\n AXBarChartReportMapper,\n AXLineChartReportMapper,\n AXPieChartReportMapper,\n queryResultToChartSeries,\n} from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '@acorex-platform/module-report-management-client/contracts';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-chart-view',\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXDonutChartComponent,\n AXLineChartComponent,\n AXChartLegendComponent,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-chart-view w-full h-full flex flex-col',\n },\n templateUrl: './report-chart-view.component.html',\n styleUrl: './report-chart-view.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPReportChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch chart data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n void untracked(() => this.vm.fetchData()).then((result) => {\n if (!result) {\n return;\n }\n const series = queryResultToChartSeries(result, this.dataMapping());\n const seriesColors = this.chartOptions()?.styling?.seriesColors;\n switch (this.chartType()) {\n case 'bar': {\n // Mapper returns flat bars for report series (not clustered).\n const bars = AXBarChartReportMapper(series) as Array<{\n id: string;\n label: string;\n value: number;\n color?: string;\n }>;\n this.barChartData.set(applySeriesColors(bars, seriesColors));\n break;\n }\n case 'doughnut': {\n this.donutChartData.set(applySeriesColors(AXPieChartReportMapper(series), seriesColors));\n break;\n }\n case 'line':\n default: {\n this.lineChartData.set(AXLineChartReportMapper(series));\n break;\n }\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n protected readonly legendOptions = signal<AXChartLegendOptions>({\n mode: 'vertical',\n showValues: true,\n showPercentage: true,\n interactive: true,\n });\n\n protected barChartData = signal<AXBarChartValue>([]);\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected donutChartData = signal<AXDonutChartValue>([]);\n\n protected readonly donutChartOptions = signal<AXDonutChartOption>({\n totalLabel: 'Total',\n showTooltip: true,\n showDataLabels: false,\n donutWidth: 28,\n cornerRadius: 4,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n });\n\n protected lineChartData = signal<AXLineChartValue>([]);\n protected lineChartOptions = signal<AXLineChartOption>({});\n\n /**\n * Check if bar chart data has items\n */\n protected readonly hasBarChartData = computed(() => {\n const data = this.barChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if donut chart data has items\n */\n protected readonly hasDonutChartData = computed(() => {\n const data = this.donutChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if line chart data has items\n */\n protected readonly hasLineChartData = computed(() => {\n const data = this.lineChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if chart has any data (for any chart type)\n */\n protected readonly hasChartData = computed(() => {\n return this.hasBarChartData() || this.hasDonutChartData() || this.hasLineChartData();\n });\n\n /**\n * Check if report has been executed and has no data\n */\n protected readonly showNoDataState = computed(() => {\n return this.vm.hasBeenExecuted() && !this.hasChartData();\n });\n\n //#endregion\n}\n\n//#region ----- Series color helpers -----\n\nfunction applySeriesColors<T extends { id: string; label?: string; color?: string }>(\n items: T[],\n seriesColors?: Record<string, string>,\n): T[] {\n if (!seriesColors || Object.keys(seriesColors).length === 0) {\n return items;\n }\n return items.map((item) => {\n const color = seriesColors[item.id] ?? (item.label ? seriesColors[item.label] : undefined);\n return color ? { ...item, color } : item;\n });\n}\n\n//#endregion\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading flex flex-col items-center justify-center h-full gap-6 p-8\">\n <div class=\"spinner spin w-10 h-10\"></div>\n <div class=\"__loading-text text-sm opacity-70\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\"\n >\n </axp-state-message>\n } @else if (isChartReady() && showNoDataState()) {\n <!-- No Data State -->\n <axp-state-message\n icon=\"fa-light fa-chart-pie\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.description'\"\n >\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <section\n class=\"__chart-container overflow-auto md:overflow-hidden rounded-2xl border h-full flex flex-col\"\n >\n @if (chartLayout()?.header) {\n <header\n class=\"__chart-header p-4 md:p-6 border-b flex flex-col sm:flex-row gap-2 sm:items-center sm:justify-between\"\n >\n <h3 class=\"__chart-title text-base md:text-lg font-semibold truncate\">\n {{ chartLayout()?.header?.title }}\n </h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date text-xs md:text-sm opacity-70 font-medium flex-shrink-0\">\n {{ '@general:common.date.today' | translate | async }}\n </div>\n }\n </header>\n }\n\n <div class=\"__chart-body flex min-h-0 flex-1 flex-col p-3 md:p-6\">\n @switch (chartType()) {\n @case ('bar') {\n <!-- ----- Bar chart with side legend ----- -->\n <div class=\"__chart-wrapper flex h-full min-h-0 w-full flex-col items-center gap-4 lg:flex-row lg:gap-6\">\n <div\n class=\"__chart-content flex h-full min-h-[250px] w-full flex-1 items-center justify-center overflow-hidden md:min-h-[300px]\"\n >\n <ax-bar-chart #barChart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n @if (hasBarChartData()) {\n <div class=\"__chart-legend w-fit flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"barChart\"></ax-chart-legend>\n </div>\n }\n </div>\n }\n @case ('doughnut') {\n <!-- ----- Donut in a square box; vertical legend on the right (same as bar) ----- -->\n <div class=\"__chart-wrapper flex h-full min-h-0 w-full flex-col items-center gap-4 lg:flex-row lg:gap-6\">\n <div\n class=\"__chart-content flex h-full min-h-[250px] w-full flex-1 items-center justify-center overflow-hidden md:min-h-[300px]\"\n >\n <div\n class=\"__chart-radial relative aspect-square h-full max-h-full w-auto max-w-full min-h-64 min-w-64 overflow-hidden\"\n >\n <ax-donut-chart\n #donutChart\n [data]=\"donutChartData()\"\n [options]=\"donutChartOptions()\"\n ></ax-donut-chart>\n </div>\n </div>\n @if (hasDonutChartData()) {\n <div class=\"__chart-legend w-fit flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"donutChart\"></ax-chart-legend>\n </div>\n }\n </div>\n }\n @default {\n <!-- ----- Line chart with side legend ----- -->\n <div class=\"__chart-wrapper flex h-full min-h-0 w-full flex-col items-center gap-4 lg:flex-row lg:gap-6\">\n <div\n class=\"__chart-content flex h-full min-h-[250px] w-full flex-1 items-center justify-center overflow-hidden md:min-h-[300px]\"\n >\n <ax-line-chart #lineChart [data]=\"lineChartData()\" [options]=\"lineChartOptions()\"></ax-line-chart>\n </div>\n @if (hasLineChartData()) {\n <div class=\"__chart-legend w-fit flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"lineChart\"></ax-chart-legend>\n </div>\n }\n </div>\n }\n }\n </div>\n\n @if (chartLayout()?.footer) {\n <footer class=\"__chart-footer p-4 md:p-6 border-t\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"$safeNavigationMigration(chartLayout()?.footer?.customHtml)\"></div>\n }\n </footer>\n }\n </section>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\"\n >\n </axp-state-message>\n }\n</ng-container>\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { AXPReportPdfLayout } from '@acorex-platform/module-report-management-client/contracts';\nimport { queryResultToPdfSource } from '../../../../reports/report-mapper';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-pdf-view',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-pdf-view w-full h-full flex flex-col',\n },\n templateUrl: './report-pdf-view.component.html',\n styleUrls: ['./report-pdf-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportPdfViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n private readonly sanitizer = inject(DomSanitizer);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current PDF layout configuration\n */\n protected readonly pdfLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n });\n\n /**\n * PDF layout options\n */\n protected readonly pdfOptions = computed(() => {\n const pdfLayout = this.pdfLayout();\n return pdfLayout?.options || {};\n });\n\n /**\n * PDF source URL (sanitized for embed)\n */\n protected readonly pdfSource = computed<SafeResourceUrl | null>(() => {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return null;\n }\n\n // Handle URL\n if (pdfData.url) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(pdfData.url);\n }\n\n // Handle base64\n if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n return this.sanitizer.bypassSecurityTrustResourceUrl(base64Data);\n }\n\n // Handle blob\n if (pdfData.blob) {\n const blobUrl = URL.createObjectURL(pdfData.blob);\n return this.sanitizer.bypassSecurityTrustResourceUrl(blobUrl);\n }\n\n return null;\n });\n\n /**\n * PDF filename for download\n */\n protected readonly pdfFilename = computed(() => {\n const pdfData = this.pdfData();\n return pdfData?.filename || 'report.pdf';\n });\n\n /**\n * PDF embed height\n */\n protected readonly embedHeight = computed(() => {\n const options = this.pdfOptions();\n return options.height || '100%';\n });\n\n /**\n * Check if PDF is ready to render\n */\n protected readonly isPdfReady = computed(() => {\n return !!this.pdfSource();\n });\n\n /**\n * Check if download button should be shown\n */\n protected readonly showDownloadButton = computed(() => {\n const options = this.pdfOptions();\n return options.showDownloadButton !== false; // Default to true\n });\n\n /**\n * Check if print button should be shown\n */\n protected readonly showPrintButton = computed(() => {\n const options = this.pdfOptions();\n return options.showPrintButton !== false; // Default to true\n });\n\n /**\n * Check if zoom controls should be shown\n */\n protected readonly showZoomControls = computed(() => {\n const options = this.pdfOptions();\n return options.showZoomControls !== false; // Default to true\n });\n\n /**\n * Check if fullscreen button should be shown\n */\n protected readonly showFullscreenButton = computed(() => {\n const options = this.pdfOptions();\n return options.showFullscreenButton !== false; // Default to true\n });\n\n /**\n * Current zoom level\n */\n protected readonly currentZoom = signal<number>(100);\n\n /**\n * PDF data from execution result\n */\n protected readonly pdfData = signal<{ url?: string; base64?: string; blob?: Blob; filename?: string } | null>(null);\n\n /**\n * Fullscreen state\n */\n protected readonly isFullscreen = signal<boolean>(false);\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch PDF data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.pdfLayout()) {\n void untracked(() => this.vm.fetchData()).then((result) => {\n if (!result) {\n return;\n }\n const pdfResult = queryResultToPdfSource(result);\n this.pdfData.set(pdfResult);\n if (pdfResult) {\n const options = this.pdfOptions();\n if (options.defaultZoom) {\n this.currentZoom.set(options.defaultZoom);\n }\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Methods ----\n\n /**\n * Handle download PDF\n */\n public downloadPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n let filename = this.pdfFilename();\n let shouldRevokeUrl = false;\n\n if (pdfData.url) {\n // For URL, create a temporary link\n url = pdfData.url;\n } else if (pdfData.base64) {\n // Convert base64 to blob and create URL\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64.split(',')[1]\n : pdfData.base64;\n const byteCharacters = atob(base64Data);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/pdf' });\n url = URL.createObjectURL(blob);\n shouldRevokeUrl = true;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n shouldRevokeUrl = true;\n } else {\n return;\n }\n\n // Create download link\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Clean up blob URL if created\n if (shouldRevokeUrl) {\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }\n }\n\n /**\n * Handle print PDF\n */\n public printPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n\n if (pdfData.url) {\n url = pdfData.url;\n } else if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n url = base64Data;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n } else {\n return;\n }\n\n // Open PDF in new window for printing\n const printWindow = window.open(url, '_blank');\n if (printWindow) {\n printWindow.onload = () => {\n printWindow.print();\n };\n }\n }\n\n /**\n * Handle zoom in\n */\n protected zoomIn(): void {\n const current = this.currentZoom();\n if (current < 500) {\n this.currentZoom.set(Math.min(current + 25, 500));\n }\n }\n\n /**\n * Handle zoom out\n */\n protected zoomOut(): void {\n const current = this.currentZoom();\n if (current > 25) {\n this.currentZoom.set(Math.max(current - 25, 25));\n }\n }\n\n /**\n * Handle zoom reset\n */\n protected zoomReset(): void {\n const options = this.pdfOptions();\n this.currentZoom.set(options.defaultZoom || 100);\n }\n\n /**\n * Handle fullscreen toggle\n */\n protected toggleFullscreen(): void {\n const isFullscreen = this.isFullscreen();\n this.isFullscreen.set(!isFullscreen);\n }\n\n //#endregion\n}\n\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading flex flex-col items-center justify-center h-full gap-6 p-8\">\n <div class=\"spinner spin w-10 h-10\"></div>\n <div class=\"__loading-text text-sm opacity-70\">\n {{ t('@report-management:report-viewer.components.pdf.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isPdfReady()) {\n <!-- PDF Embed Only -->\n <embed class=\"__pdf-embed w-full h-full\" [src]=\"pdfSource()\" type=\"application/pdf\" />\n } @else {\n <!-- No PDF Data State -->\n <axp-state-message icon=\"fa-light fa-file-pdf\"\n [title]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.description'\">\n </axp-state-message>\n }\n</ng-container>","import { AXPSystemActionType, getSystemActions, runtimeQueryCollectionData } from '@acorex-platform/framework-shared/core';\nimport { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\nimport {\n AXColumnsOrderChangedEvent,\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowDbClick,\n AXRowCommandItem,\n AXRowCommandItemClickEvent,\n onColumnSizeChangedEvent,\n} from '@acorex/components/data-table';\nimport { AXDataPagerChangedEvent } from '@acorex/components/data-pager';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\nimport {\n AXPQueryDataSource,\n AXPReportTableLayout,\n AXPReportTableLayoutRowAction,\n AXPReportTableSummaryResult,\n} from '../../../../reports';\nimport { AXDataSource, AXDataSourceQuery, AXDataSourceSortOption } from '@acorex/cdk/common';\n\nimport { applySystemActionDefault, AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { get } from 'lodash-es';\nimport {\n AXPReportTableColumnViewModel,\n applyGroupByDrillLinksToColumns,\n buildReportTableColumnsAsync,\n parseColumnResizeWidth,\n resolveColumnFieldFromDataField,\n} from '../../report-table-columns.util';\nimport {\n buildGroupByDrillCommandOptions,\n buildDrillRowActionsFromGroupBy,\n findGroupByDefinitionForDisplayField,\n hasGroupByDrillLinks,\n} from '../../report-group-by-drill.util';\nimport { AXPTextCommandColumnComponent } from '@acorex-platform/framework-client/layout/components';\n\n@Component({\n selector: 'axp-report-table-view',\n imports: [\n CommonModule,\n AXDataTableModule,\n AXLoadingModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPTextCommandColumnComponent,\n ],\n templateUrl: './report-table-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-report-table-view flex flex-col flex-1 min-h-0 h-full w-full',\n },\n})\nexport class AXPReportTableViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n protected readonly commandService = inject(AXPCommandService);\n\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n private readonly grid = viewChild<AXDataTableComponent>('grid');\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly columns = signal<AXPReportTableColumnViewModel[]>([]);\n\n protected readonly sortedFields = signal<AXPQuerySort[]>([]);\n\n protected readonly tableSummary = signal<AXPReportTableSummaryResult | null>(null);\n\n private handledExecutionRequestId = 0;\n\n private lastDataSourcePreferencesKey: string | null = null;\n\n //#endregion\n\n //#region ---- Effects ----\n\n #resetExecutionHandler = effect(() => {\n const reportId = this.vm.reportId();\n untracked(() => {\n this.handledExecutionRequestId = 0;\n this.lastDataSourcePreferencesKey = null;\n void reportId;\n });\n });\n\n #syncTableColumns = effect(() => {\n const layoutDef = this.vm.currentLayout();\n const tableLayout = layoutDef?.layout as AXPReportTableLayout | undefined;\n if (!tableLayout || tableLayout.type !== 'table') {\n this.columns.set([]);\n return;\n }\n\n const savedTable = this.vm.tableLayoutUserSettings();\n const groupBy = tableLayout.groupBy;\n const columns = tableLayout.columns;\n const savedColumns = savedTable?.columns;\n void (async () => {\n const builtColumns = await buildReportTableColumnsAsync(\n columns,\n savedColumns,\n this.expressionEvaluator,\n );\n this.columns.set(applyGroupByDrillLinksToColumns(builtColumns, groupBy));\n })();\n });\n\n #syncDataSourcePreferences = effect(() => {\n const layoutDef = this.vm.currentLayout();\n if (!layoutDef) {\n return;\n }\n\n const tableLayout = layoutDef.layout as AXPReportTableLayout | undefined;\n if (!tableLayout || tableLayout.type !== 'table') {\n return;\n }\n\n const savedTable = this.vm.tableLayoutUserSettings();\n const queryDataSource = layoutDef.dataSource as AXPQueryDataSource | undefined;\n const defaultSort = tableLayout.options?.sorting?.length\n ? tableLayout.options.sorting\n : (queryDataSource?.sortFields ?? []);\n const effectiveSort = savedTable?.sorts?.length ? savedTable.sorts : defaultSort;\n const pageSize = savedTable?.pageSize ?? 10;\n const preferencesKey = `${layoutDef.id}:${pageSize}:${JSON.stringify(effectiveSort)}`;\n\n if (this.lastDataSourcePreferencesKey === preferencesKey) {\n return;\n }\n\n untracked(() => {\n this.lastDataSourcePreferencesKey = preferencesKey;\n this.sortedFields.set(effectiveSort);\n this.applySortToDataSource(effectiveSort);\n this.dataSource.setPageSize(pageSize);\n });\n });\n\n /**\n * Refresh grid once per execute-report request.\n */\n #fetchData = effect(() => {\n const requestId = this.vm.executionRequestId();\n const grid = this.grid();\n if (!grid || requestId <= this.handledExecutionRequestId || !this.vm.allowFetchData()) {\n return;\n }\n\n untracked(() => {\n this.handledExecutionRequestId = requestId;\n grid.refresh();\n });\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleRowClick(event: AXRowCommandItemClickEvent): void {\n void this.handleRowAction(event.name, event.data);\n }\n\n protected handleDbRowClick(event: AXDataTableRowDbClick): void {\n const defaultGroupByDrill = this.defaultGroupByDrillDefinition();\n if (defaultGroupByDrill?.displayField) {\n void this.handleGroupByDrill(defaultGroupByDrill.displayField, event.data);\n return;\n }\n\n if (this.defaultRowAction()) {\n void this.handleRowAction(this.defaultRowAction()!.name, event.data);\n }\n }\n\n protected async handleGroupByDrill(displayField: string, data: unknown): Promise<void> {\n const definition = findGroupByDefinitionForDisplayField(this.layout().groupBy, displayField);\n if (!definition) {\n return;\n }\n\n const reportId = this.vm.reportDefinition()?.id;\n if (!reportId) {\n return;\n }\n\n const commandOptions = buildGroupByDrillCommandOptions(definition, reportId);\n const evaluatedOptions = await this.evaluateActionOptions(commandOptions, data);\n\n await this.commandService.execute('ReportManagement.Report:OpenInPopup', {\n data: data as Record<string, unknown>,\n options: evaluatedOptions,\n });\n }\n\n protected async handleRowAction(name: string, data: unknown): Promise<void> {\n const action = this.rowActions().find((item) => item.command?.name === name);\n const commandName = action?.command?.name ?? name;\n const evaluatedOptions = await this.evaluateActionOptions(action?.command?.options, data);\n\n await this.commandService.execute(commandName, {\n data: data as Record<string, unknown>,\n options: evaluatedOptions,\n \n });\n }\n\n private async evaluateActionOptions(\n options: Record<string, unknown> | undefined,\n data: unknown,\n ): Promise<Record<string, unknown>> {\n if (!options) {\n return {};\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(data as object, path),\n },\n };\n\n return (await this.expressionEvaluator.evaluate(options, scope)) as Record<string, unknown>;\n }\n\n protected handleColumnSort(columnField: string): void {\n const column = this.layout().columns?.find((c) => c.field === columnField);\n if (!column?.sortable) {\n return;\n }\n\n const activeSorts = [...this.sortedFields()];\n const index = activeSorts.findIndex((s) => s.name === columnField);\n const currentDir = index >= 0 ? activeSorts[index].dir : undefined;\n const newDir: 'asc' | 'desc' | undefined =\n currentDir === 'asc' ? 'desc' : currentDir === 'desc' ? undefined : 'asc';\n\n const nextSorts = newDir ? [{ name: columnField, dir: newDir }] : [];\n this.sortedFields.set(nextSorts);\n this.applySortToDataSource(nextSorts);\n void this.vm.saveTableSorts(nextSorts);\n this.grid()?.refresh();\n }\n\n protected onColumnSizeChanged(event: onColumnSizeChangedEvent): void {\n if (!event.isUserInteraction || event.type !== 'end' || !event.data) {\n return;\n }\n const dataField = String(event.data.dataField ?? '');\n const field = resolveColumnFieldFromDataField(dataField);\n const width = parseColumnResizeWidth(event.data.width);\n if (!field || width == null) {\n return;\n }\n\n const nextColumns = this.columns().map((col) =>\n col.field === field ? { ...col, width } : col,\n );\n this.columns.set(nextColumns);\n void this.vm.saveTableColumnWidth(field, width, nextColumns);\n }\n\n protected onColumnsOrderChanged(event: AXColumnsOrderChangedEvent): void {\n if (!event.isUserInteraction || !event.data?.event) {\n return;\n }\n const dragEvent = event.data.event as CdkDragDrop<unknown>;\n const offset = this.leadingColumnCount();\n const previousIndex = dragEvent.previousIndex - offset;\n const currentIndex = dragEvent.currentIndex - offset;\n if (previousIndex < 0 || currentIndex < 0) {\n return;\n }\n\n const nextColumns = [...this.columns()];\n const source = nextColumns[previousIndex];\n if (!source || source.pin) {\n return;\n }\n if (nextColumns[currentIndex]?.pin) {\n return;\n }\n\n moveItemInArray(nextColumns, previousIndex, currentIndex);\n this.columns.set(nextColumns);\n void this.vm.saveTableColumnOrder(nextColumns);\n }\n\n protected onPageChanged(event: AXDataPagerChangedEvent): void {\n if (event.isUserInteraction) {\n void this.vm.saveTablePageSize(event.take);\n }\n }\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected readonly layout = computed(() => {\n return (this.vm.currentLayout()?.layout as AXPReportTableLayout)!;\n });\n\n protected readonly dataSource = new AXDataSource({\n load: async (e: AXDataSourceQuery) => {\n if (!this.vm.allowFetchData()) {\n this.tableSummary.set(null);\n return { items: [], total: 0 };\n }\n\n const result = await this.vm.fetchData(e);\n const page = runtimeQueryCollectionData(result);\n if (!page) {\n this.tableSummary.set(null);\n return { items: [], total: 0 };\n }\n\n this.tableSummary.set((page.aggregateRows?.[0] as AXPReportTableSummaryResult | undefined) ?? null);\n\n return {\n items: (page.items ?? []) as unknown[],\n total: Number(page.total ?? page.items?.length ?? 0),\n };\n },\n pageSize: 10,\n key: 'id',\n });\n\n protected readonly visibleColumns = computed(() => this.columns().filter((c) => c.visible));\n\n protected readonly paginationEnabled = computed(() => {\n return this.layout().options?.pagination !== false;\n });\n\n protected readonly hasReportFooterSummary = computed(() => {\n return (\n (this.layout().summary?.some((s) => s.displayIn === 'reportFooter') ?? false) &&\n this.tableSummary() !== null\n );\n });\n\n protected readonly rowActions = computed(() => {\n const tableLayout = this.layout();\n const generated = buildDrillRowActionsFromGroupBy(tableLayout.groupBy, this.vm.reportDefinition()?.id);\n const manual = tableLayout.actions ?? [];\n return [...generated, ...manual];\n });\n\n protected readonly primaryRowAction = computed<AXRowCommandItem[]>(() => {\n return (\n this.rowActions().filter((a) => a.priority === 'primary')?.map((a) => this.convertToRowCommandItem(a)) ??\n []\n );\n });\n\n protected readonly hasPrimaryRowAction = computed(() => {\n return this.primaryRowAction().length > 0;\n });\n\n protected readonly secondaryRowAction = computed<AXRowCommandItem[]>(() => {\n return (\n this.rowActions()\n .filter((a) => a.priority === 'secondary')\n ?.map((a) => this.convertToRowCommandItem(a)) ?? []\n );\n });\n\n protected readonly hasSecondaryRowAction = computed(() => {\n return this.secondaryRowAction().length > 0;\n });\n\n protected readonly defaultGroupByDrillDefinition = computed(() => {\n const groupBy = this.layout().groupBy;\n if (!hasGroupByDrillLinks(groupBy)) {\n return null;\n }\n\n return groupBy?.find((definition) => definition.default) ?? groupBy?.[0] ?? null;\n });\n\n protected readonly defaultRowAction = computed<AXRowCommandItem | null>(() => {\n const defaultAction = this.rowActions().find((a) => a.default);\n if (!defaultAction) {\n return null;\n }\n return this.convertToRowCommandItem(defaultAction);\n });\n\n //#endregion\n\n //#region ---- Sort Helpers ----\n\n protected resolveColumnSortDirection(columnField: string): 'asc' | 'desc' | undefined {\n const dir = this.sortedFields().find((s) => s.name === columnField)?.dir;\n return dir === 'asc' || dir === 'desc' ? dir : undefined;\n }\n\n //#endregion\n\n //#region ---- Summary Helpers ----\n\n protected getSummaryDisplayValue(field: string): string | null {\n const summary = this.tableSummary();\n if (!summary || !(field in summary)) {\n return null;\n }\n const value = summary[field];\n if (value == null) {\n return null;\n }\n return String(value);\n }\n\n protected isFirstVisibleColumn(field: string): boolean {\n return this.visibleColumns()[0]?.field === field;\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n protected leadingColumnCount(): number {\n let count = 0;\n if (this.vm.showRowIndexColumn()) {\n count++;\n }\n if (this.vm.canSelectRows()) {\n count++;\n }\n return count;\n }\n\n private applySortToDataSource(sorts: AXPQuerySort[]): void {\n const sortOptions: AXDataSourceSortOption[] = sorts.map(\n (s) => ({ field: s.name, dir: s.dir }) as AXDataSourceSortOption,\n );\n this.dataSource.sort(...sortOptions);\n }\n\n protected convertToRowCommandItem(action: AXPReportTableLayoutRowAction): AXRowCommandItem {\n const systemAction = getSystemActions(action.type as AXPSystemActionType);\n if (!systemAction) {\n return {\n icon: action.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: action.title,\n name: action.command?.name,\n divided: action.break,\n color: action.color,\n } as AXRowCommandItem;\n }\n const defaultAction = applySystemActionDefault(action, systemAction.key as AXPSystemActionType);\n return {\n icon: defaultAction.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: defaultAction.title,\n name: action.command?.name,\n divided: defaultAction.break ?? action.break,\n color: defaultAction.color,\n } as AXRowCommandItem;\n }\n\n //#endregion\n}\n","<ax-data-table\n #grid\n [dataSource]=\"dataSource\"\n [paging]=\"paginationEnabled()\"\n [showFooter]=\"hasReportFooterSummary()\"\n [allowReordering]=\"true\"\n (onRowDbClick)=\"handleDbRowClick($event)\"\n (onColumnSizeChanged)=\"onColumnSizeChanged($event)\"\n (onColumnsOrderChanged)=\"onColumnsOrderChanged($event)\"\n (onPageChanged)=\"onPageChanged($event)\"\n class=\"flex-1 min-h-0 h-full\"\n>\n @if (vm.showRowIndexColumn()) {\n <ax-index-column\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm.canSelectRows()) {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n @for (column of columns(); track column.field) {\n @if (column.visible) {\n <ng-template #footerCell>\n <div\n class=\"w-full truncate\"\n [class.text-start]=\"column.align === 'left'\"\n [class.text-center]=\"column.align === 'center'\"\n [class.text-end]=\"column.align === 'right'\"\n >\n @if (isFirstVisibleColumn(column.field) && hasReportFooterSummary()) {\n <span class=\"font-medium\">\n {{ '@report-management:report-viewer.components.table.footer-total' | translate | async }}\n </span>\n } @else if (getSummaryDisplayValue(column.field); as summaryValue) {\n <span>{{ summaryValue }}</span>\n }\n </div>\n </ng-template>\n @if (column.isGroupByDrillLink && column.drillDisplayField) {\n <axp-text-command-column\n [customWidth]=\"column.width == 'auto' ? 'auto' : column.width + 'px'\"\n [caption]=\"(column.title | translate | async)!\"\n [textField]=\"column.drillDisplayField\"\n [columnFixed]=\"column.pin\"\n [sortEnabled]=\"column.sortable\"\n [headerSortDirection]=\"resolveColumnSortDirection(column.field)\"\n [footerTemplate]=\"footerCell\"\n (sortToggle)=\"handleColumnSort(column.field)\"\n (commandClick)=\"handleGroupByDrill(column.drillDisplayField, $event.data)\"\n ></axp-text-command-column>\n } @else {\n <axp-widget-column-renderer\n [customWidth]=\"column.width == 'auto' ? 'auto' : column.width + 'px'\"\n [caption]=\"(column.title | translate | async)!\"\n [node]=\"column.widget!\"\n [sortEnabled]=\"column.sortable\"\n [headerSortDirection]=\"resolveColumnSortDirection(column.field)\"\n [columnFixed]=\"column.pin\"\n [footerTemplate]=\"footerCell\"\n (sortToggle)=\"handleColumnSort(column.field)\"\n ></axp-widget-column-renderer>\n }\n }\n }\n @if (hasPrimaryRowAction()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowAction().length * 70 + 'px'\"\n [items]=\"primaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-command-column>\n }\n @if (hasSecondaryRowAction()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"secondaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n","//#region ----- Imports -----\n\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPLayoutSwitcherOption } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst STYLE_PREFIX = /^(fa-light|fa-solid|fa-regular|fa-thin|fa-duotone)\\s+/;\n\nexport const REPORT_LAYOUT_TITLE_KEYS = {\n table: '@report-management:report-viewer.layouts.table.title',\n bar: '@report-management:report-viewer.layouts.bar-chart.title',\n doughnut: '@report-management:report-viewer.layouts.doughnut-chart.title',\n pie: '@report-management:report-viewer.layouts.pie-chart.title',\n line: '@report-management:report-viewer.layouts.line-chart.title',\n pdf: '@report-management:report-viewer.layouts.pdf.title',\n chart: '@report-management:report-viewer.layouts.chart.title',\n} as const;\n\nconst DEFAULT_LAYOUT_GLYPHS: Record<string, string> = {\n table: 'fa-table',\n pdf: 'fa-file-pdf',\n chart: 'fa-chart-mixed',\n};\n\n//#endregion\n\n//#region ----- Layout switcher helpers -----\n\nexport function reportLayoutTitleKey(option: Pick<AXPLayoutSwitcherOption, 'type' | 'icon'>): string {\n if (option.type === 'table') {\n return REPORT_LAYOUT_TITLE_KEYS.table;\n }\n if (option.type === 'pdf') {\n return REPORT_LAYOUT_TITLE_KEYS.pdf;\n }\n\n const glyph = stripIconStylePrefix(option.icon);\n if (glyph.includes('fa-chart-bar')) {\n return REPORT_LAYOUT_TITLE_KEYS.bar;\n }\n if (glyph.includes('fa-chart-pie')) {\n return REPORT_LAYOUT_TITLE_KEYS.doughnut;\n }\n if (glyph.includes('fa-chart-line')) {\n return REPORT_LAYOUT_TITLE_KEYS.line;\n }\n return REPORT_LAYOUT_TITLE_KEYS.chart;\n}\n\nexport function reportLayoutGlyph(\n icon: string | undefined,\n option: Pick<AXPLayoutSwitcherOption, 'type'>,\n): string {\n const fromIcon = stripIconStylePrefix(icon);\n if (fromIcon) {\n return fromIcon;\n }\n if (option.type === 'table') {\n return DEFAULT_LAYOUT_GLYPHS['table'];\n }\n if (option.type === 'pdf') {\n return DEFAULT_LAYOUT_GLYPHS['pdf'];\n }\n return DEFAULT_LAYOUT_GLYPHS['chart'];\n}\n\nexport function reportLayoutPageIcon(\n icon: string | undefined,\n option: Pick<AXPLayoutSwitcherOption, 'type'>,\n): string {\n return `fa-light ${reportLayoutGlyph(icon, option)}`;\n}\n\nexport function isDistinctLayoutTitle(\n layoutTitle: AXPMultiLanguageString | undefined,\n reportTitle: AXPMultiLanguageString | undefined,\n locale: string,\n): boolean {\n const resolvedLayout = resolveMultiLanguageString(layoutTitle, locale).trim();\n if (!resolvedLayout) {\n return false;\n }\n const resolvedReport = resolveMultiLanguageString(reportTitle, locale).trim();\n return resolvedLayout !== resolvedReport;\n}\n\nfunction stripIconStylePrefix(icon: string | undefined): string {\n if (!icon?.trim()) {\n return '';\n }\n return icon.trim().replace(STYLE_PREFIX, '').trim();\n}\n\n//#endregion\n","\nimport { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPContextData, AXPExecuteCommand, AXPGridLayoutOptions, type AXPMultiLanguageString, resolveMultiLanguageString, runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXLoadingDialogModule, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPLayoutRendererComponent } from '@acorex-platform/framework-client/layout/builder';\nimport {\n AXPStateMessageComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport {\n AXPReportManagementFeatureKeys,\n RootConfig,\n type AXPLayoutSwitcherOption,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationStart } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\nimport { AXPReportViewerService } from '../../../reports';\nimport { resolveReportFilterDefaultValue } from '../../../reports/report-parameter.util';\nimport { queryResultToPdfSource } from '../../../reports/report-mapper';\nimport {\n isDistinctLayoutTitle,\n reportLayoutGlyph,\n reportLayoutPageIcon,\n reportLayoutTitleKey,\n} from '../report-layout-switcher.util';\n\n@Component({\n selector: 'axp-report-viewer-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXCheckBoxModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXBadgeModule,\n AXLoadingDialogModule,\n //\n AXPLayoutRendererComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXPReportTableViewComponent,\n AXPThemeLayoutFooterComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n AXPStateMessageComponent,\n ],\n providers: [\n AXUnsubscriber,\n AXPReportViewerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPReportViewerPageComponent,\n },\n ],\n templateUrl: './report-viewer-page.component.html',\n styleUrls: ['./report-viewer-page.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-report-viewer-page' },\n})\nexport class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Dependencies ----\n\n protected override layoutService = inject(AXPLayoutThemeService);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly route = inject(ActivatedRoute);\n private unsubscriber = inject(AXUnsubscriber);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly reportViewerService = inject(AXPReportViewerService);\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n reportId = input<string>();\n reportParameters = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- ViewChildren ----\n\n private filtersForm = viewChild<AXPLayoutRendererComponent>('filtersForm');\n\n //#endregion\n\n //#region ---- ViewModel ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly watchNavigationLoading = effect(() => {\n const isBusy = this.vm.isLoading() || this.vm.isExecuting();\n untracked(() => {\n this.layoutService.setNavigationLoading(isBusy);\n //\n if (isBusy) {\n void this.openContentLoading();\n } else {\n this.closeContentLoading();\n }\n });\n });\n\n private readonly syncFrozenRunUrl = effect(() => {\n const runId = this.vm.runId();\n const frozen = this.vm.isFrozen();\n const queued = this.vm.isBackgroundQueued();\n if (queued) {\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (!currentRunId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n });\n return;\n }\n if (!frozen || !runId) {\n return;\n }\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (currentRunId === runId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n this.recompute();\n });\n });\n\n //#endregion\n\n private loadingDialogRef: { close: () => void } | null = null;\n private isDialogOpening = false;\n private lastReportRouteKey: string | null = null;\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => {\n this.closeContentLoading();\n void this.vm.releaseInlineNotificationWatch();\n });\n }\n\n //#region ---- Computed Properties ----\n\n protected showFiltersPanel = () => this.deviceService.isLarge();\n\n protected showReportDisplay = () =>\n (!this.vm.isBackgroundReportMode() || this.vm.isFrozen()) &&\n (this.deviceService.isLarge() || (this.deviceService.isSmall() && this.vm.hasBeenExecuted()));\n\n private reportsListPath(): string {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.report.name)\n .createPath();\n }\n\n private isReportViewerUrl(url: string): boolean {\n return url.includes(`/${RootConfig.module.route}/viewer`);\n }\n\n //#endregion\n\n //#region ---- Layout Configurations ----\n\n protected defaultLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 6 },\n lg: { colSpan: 12 },\n },\n });\n\n protected compactLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 4 },\n lg: { colSpan: 3 },\n },\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.unsubscriber\n .takeUntilDestroy(this.router.events.pipe(filter((event) => event instanceof NavigationStart)))\n .subscribe((event) => {\n const navigation = event as NavigationStart;\n if (this.isReportViewerUrl(this.router.url) && !this.isReportViewerUrl(navigation.url)) {\n void this.vm.releaseInlineNotificationWatch();\n }\n });\n\n // Reload when reportId or runId changes. Ignore other query params (live filters).\n this.unsubscriber\n .takeUntilDestroy(combineLatest([this.route.paramMap, this.route.queryParamMap]))\n .subscribe(async ([params, queryParams]) => {\n const reportId = params.get('reportId') || queryParams.get('reportId') || this.reportId();\n if (!reportId) {\n return;\n }\n const runId = queryParams.get('runId')?.trim() || '';\n const routeKey = `${reportId}::${runId}`;\n if (routeKey === this.lastReportRouteKey) {\n return;\n }\n this.lastReportRouteKey = routeKey;\n await this.loadReportAndRefresh(reportId);\n });\n }\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n private async loadReportAndRefresh(reportId: string): Promise<void> {\n const runId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (runId) {\n await this.vm.loadReport(reportId);\n await this.vm.loadFrozenRun(runId);\n this.recompute();\n return;\n }\n\n await this.vm.loadReport(reportId);\n\n // Force refresh of page layout (breadcrumbs, title, etc.) after report loads\n this.recompute();\n\n // Handle initial parameters from query string\n const queryParams = this.route.snapshot.queryParams;\n const initialParams = { ...queryParams };\n delete initialParams['reportId'];\n delete initialParams['runId'];\n\n // Parse filter context values coming from URL (they are strings)\n const parsedInitialParams = this.parseFilterContextFromUrl(initialParams);\n\n // Merge with component input parameters (`today` / `{ from, to }` → filter shape)\n const rawParams = { ...parsedInitialParams, ...this.reportParameters() };\n const allParams = Object.fromEntries(\n Object.entries(rawParams).map(([key, value]) => [key, resolveReportFilterDefaultValue(value)]),\n );\n\n if (Object.keys(allParams).length > 0) {\n console.log('Applying initial parameters:', allParams);\n this.vm.updateFilterContext(allParams);\n // Auto-execute if parameters are provided\n setTimeout(async () => {\n await this.vm.executeReport();\n }, 500); // Small delay to ensure form is ready\n }\n }\n\n private async openContentLoading(): Promise<void> {\n if (this.loadingDialogRef || this.isDialogOpening) {\n return;\n }\n\n this.isDialogOpening = true;\n\n try {\n const [title, description, cancelText] = await Promise.all([\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.in-progress-title'),\n this.translateService.translateAsync(\n '@report-management:report-viewer.messages.loading.in-progress-description',\n ),\n\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.cancel-button'),\n ]);\n\n this.loadingDialogRef = this.loadingDialog.show({\n title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: description,\n buttons: [\n {\n text: cancelText,\n color: 'danger',\n onClick: () => {\n this.closeContentLoading();\n this.vm.cancel();\n },\n },\n ],\n });\n } finally {\n this.isDialogOpening = false;\n }\n }\n\n private closeContentLoading(): void {\n if (!this.loadingDialogRef) {\n return;\n }\n\n this.loadingDialogRef.close();\n this.loadingDialogRef = null;\n }\n\n /**\n * Synchronizes filter context to URL query parameters using dot notation\n * @param filterContext The current filter context to sync\n */\n private syncFiltersToUrl(filterContext: AXPContextData): void {\n // Get current query params\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n // Get all filter keys from current params (excluding reportId and internal fields)\n const currentFilterKeys = new Set<string>();\n Object.keys(currentParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n // Extract root key (before first dot) for filter identification\n const rootKey = key.includes('.') ? key.split('.')[0] : key;\n currentFilterKeys.add(rootKey);\n }\n });\n\n // Build new query params - start with current params and remove filter-related ones\n const queryParams: Record<string, string | undefined> = { ...currentParams };\n\n // Remove all filter-related params first (we'll add them back if they have values)\n Object.keys(queryParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n delete queryParams[key];\n }\n });\n\n const processedFilterKeys = new Set<string>();\n\n // Add filter params that have values\n Object.keys(filterContext).forEach((key) => {\n // Skip internal editor fields (EditorObj, __EditorValue)\n if (key.endsWith('EditorObj') || key.startsWith('__') || key.endsWith('EditorValue')) {\n return;\n }\n\n processedFilterKeys.add(key);\n const value = filterContext[key];\n\n // Check if value is empty (null, undefined, empty string, or empty array)\n const isEmpty = this.isFilterValueEmpty(value);\n\n if (!isEmpty) {\n const flattened = this.flattenToDotNotation(key, value);\n Object.assign(queryParams, flattened);\n }\n // If empty, we don't add it to queryParams, so it will be removed from URL\n });\n\n // Remove filter keys that are no longer in filterContext\n currentFilterKeys.forEach((filterKey) => {\n if (!processedFilterKeys.has(filterKey)) {\n // This filter was removed - ensure all related params are removed\n Object.keys(currentParams).forEach((paramKey) => {\n if (paramKey === filterKey || paramKey.startsWith(`${filterKey}.`)) {\n delete queryParams[paramKey];\n }\n });\n }\n });\n\n // Preserve reportId / runId if exists\n if (reportId) {\n queryParams['reportId'] = String(reportId);\n } else {\n delete queryParams['reportId'];\n }\n const runId = currentParams['runId'];\n if (runId) {\n queryParams['runId'] = String(runId);\n } else {\n delete queryParams['runId'];\n }\n\n // Update URL without reloading\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true, // Don't add to browser history\n });\n }\n\n /**\n * Checks if a filter value is considered empty\n */\n private isFilterValueEmpty(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n // Check if it's a filter object with empty value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n const filterValue = filterObj.value;\n\n if (filterValue === null || filterValue === undefined || filterValue === '') {\n return true;\n }\n\n if (Array.isArray(filterValue) && filterValue.length === 0) {\n return true;\n }\n\n // Check nested object values\n if (typeof filterValue === 'object' && !Array.isArray(filterValue)) {\n const hasAnyValue = Object.values(filterValue).some((v) => v !== null && v !== undefined && v !== '');\n return !hasAnyValue;\n }\n }\n\n // Check if it's an empty array\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Flattens filter context to dot notation query parameters\n * Only includes operation.type and value - skips displayText and other fields\n * Example: { operation: { type: 'in' }, value: ['POST', 'GET'] } \n * -> { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n */\n private flattenToDotNotation(prefix: string, value: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (value == null) {\n return result;\n }\n\n // Handle filter context object - only extract operation.type and value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n\n // Extract operation.type if exists\n if (filterObj.operation?.type) {\n result[`${prefix}.operation.type`] = String(filterObj.operation.type);\n }\n\n // Extract value - handle arrays and primitives\n if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n if (Array.isArray(filterObj.value)) {\n if (filterObj.value.length > 0) {\n result[`${prefix}.value`] = filterObj.value.map((v: any) => String(v)).join(',');\n }\n } else if (typeof filterObj.value === 'object') {\n // If value is an object, flatten it recursively\n const flattenedValue = this.flattenValueObject(filterObj.value);\n Object.assign(result, flattenedValue);\n } else {\n result[`${prefix}.value`] = String(filterObj.value);\n }\n }\n\n return result;\n }\n\n // Handle primitives directly\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n result[prefix] = String(value);\n return result;\n }\n\n // Handle arrays - join with comma\n if (Array.isArray(value)) {\n if (value.length > 0) {\n result[prefix] = value.map(v => String(v)).join(',');\n }\n return result;\n }\n\n // Fallback: convert to string\n result[prefix] = String(value);\n return result;\n }\n\n /**\n * Flattens a value object (for nested objects in value field)\n */\n private flattenValueObject(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (obj == null || typeof obj !== 'object') {\n return result;\n }\n\n for (const [key, val] of Object.entries(obj)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n\n if (val == null) {\n continue;\n }\n\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n result[newPrefix] = String(val);\n } else if (Array.isArray(val)) {\n if (val.length > 0) {\n result[newPrefix] = val.map((v: any) => String(v)).join(',');\n }\n } else if (typeof val === 'object') {\n const flattened = this.flattenValueObject(val, newPrefix);\n Object.assign(result, flattened);\n }\n }\n\n return result;\n }\n\n /**\n * Reconstructs filter context from dot notation query parameters\n * Only parses operation.type and value - ignores other fields\n * Example: { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n * -> { fieldName: { operation: { type: 'in' }, value: ['POST', 'GET'] } }\n */\n private parseFilterContextFromUrl(params: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, any> = {};\n\n // Filter out reportId and internal editor fields\n const filteredParams: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n // Skip reportId and internal editor fields (EditorObj, __EditorValue, displayText)\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n filteredParams[key] = value;\n }\n }\n\n // Group by root key (before first dot)\n for (const [key, value] of Object.entries(filteredParams)) {\n if (!key.includes('.')) {\n // Simple key without dot notation - skip (we only want operation.type and value)\n continue;\n }\n\n // Split by dot and reconstruct nested structure\n const parts = key.split('.');\n const rootKey = parts[0];\n const path = parts.slice(1);\n\n // Only process operation.type and value paths\n if (path.length === 2 && path[0] === 'operation' && path[1] === 'type') {\n // operation.type\n if (!result[rootKey]) {\n result[rootKey] = { operation: {} };\n }\n if (!result[rootKey].operation) {\n result[rootKey].operation = {};\n }\n result[rootKey].operation.type = String(value);\n } else if (path.length === 1 && path[0] === 'value') {\n // value\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n result[rootKey].value = this.parseValue(String(value));\n } else if (path.length > 1 && path[0] === 'value') {\n // nested value object (e.g., value.from, value.to for between)\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n if (!result[rootKey].value) {\n result[rootKey].value = {};\n }\n const valuePath = path.slice(1);\n this.setNestedValue(result[rootKey].value, valuePath, this.parseValue(String(value)));\n }\n }\n\n // Post-process: Convert values to arrays if operation.type is 'in' or 'notIn'\n // Also reconstruct EditorObj for lookup widgets (from value only, no displayText)\n for (const [key, value] of Object.entries(result)) {\n if (value && typeof value === 'object' && value.operation?.type) {\n const operationType = value.operation.type;\n\n // If operation is 'in' or 'notIn', ensure value is an array\n if ((operationType === 'in' || operationType === 'notIn') && typeof value.value === 'string') {\n // Convert comma-separated string to array\n value.value = value.value.split(',').map((v: string) => v.trim()).filter((v: string) => v !== '');\n }\n\n // Reconstruct EditorObj for lookup widgets from value only\n // This is needed because lookup widget expects EditorObj to exist\n if (value.value !== undefined && value.value !== null && value.value !== '') {\n const editorObjKey = `${key}EditorObj`;\n const valueField = 'id'; // Default value field for lookup\n const textField = 'title'; // Default text field for lookup\n\n if (operationType === 'in' || operationType === 'notIn') {\n // Multiple selection: create array of objects with value as both id and title\n const values = Array.isArray(value.value) ? value.value : [value.value];\n result[editorObjKey] = values.map((val: string) => ({\n [valueField]: val,\n [textField]: val // Use value as title since we don't have displayText\n }));\n } else {\n // Single selection: create single object\n result[editorObjKey] = {\n [valueField]: value.value,\n [textField]: value.value // Use value as title since we don't have displayText\n };\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sets a value in a nested object using a path array\n */\n private setNestedValue(obj: any, path: string[], value: unknown): void {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n const lastKey = path[path.length - 1];\n current[lastKey] = value;\n }\n\n /**\n * Parses a string value, handling arrays (comma-separated) and primitives\n */\n private parseValue(value: string): unknown {\n if (value === '') {\n return value;\n }\n\n // Check if it's a comma-separated array\n if (value.includes(',')) {\n return value.split(',').map(v => this.parsePrimitive(v.trim()));\n }\n\n return this.parsePrimitive(value);\n }\n\n /**\n * Parses a primitive value\n * For query params, we keep everything as string to match user requirement\n * Arrays are handled separately in parseValue\n */\n private parsePrimitive(value: string): string {\n return value;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleFiltersChange(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n this.syncFiltersToUrl(event);\n }\n\n protected handleFiltersInitiated(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n }\n\n protected async handleExecuteReport(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.executeReport();\n this.recompute();\n }\n\n protected async handleGenerateInBackground(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.generateInBackground();\n this.recompute();\n }\n\n protected canGenerateInBackground(): boolean {\n return (\n this.sessionService.isFeatureEnabled(AXPReportManagementFeatureKeys.BackgroundReports) &&\n !this.vm.isFrozen() &&\n (this.vm.generationMode() === 'choose' || this.vm.generationMode() === 'background')\n );\n }\n\n protected handleRefresh(): void {\n this.vm.refresh();\n }\n\n protected handleClearFilters(): void {\n this.vm.clearFilters();\n\n // Reset form if available\n const form = this.filtersForm();\n if (form) {\n form.reset();\n }\n\n // Clear URL query parameters (preserve reportId if exists)\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n const runId = currentParams['runId'];\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n ...(reportId ? { reportId } : {}),\n ...(runId ? { runId } : {}),\n },\n replaceUrl: true,\n });\n }\n\n /**\n * Handle download report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handleDownloadReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.download-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('download-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-download');\n console.warn(warning);\n }\n }\n\n /**\n * Handle print report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handlePrintReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.print-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('print-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-print');\n console.warn(warning);\n }\n }\n\n /**\n * Handle export report action\n * Gets report data from viewmodel and calls service executeAction method\n * @param format - Export format (excel, csv, pdf, image)\n */\n protected async handleExportReport(format?: string): Promise<void> {\n if (!format) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.export-format-required');\n console.warn(warning);\n return;\n }\n\n // Fetch report data\n const result = await this.vm.fetchData();\n const reportData = runtimeQueryPayloadData(result);\n if (reportData == null) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-report-data-export');\n console.warn(warning);\n return;\n }\n\n const layout = this.vm.currentLayout();\n await this.reportViewerService.executeAction('export-report', {\n format,\n reportData,\n layoutDefinition: layout || undefined,\n });\n }\n\n protected readonly layoutPageIcon = reportLayoutPageIcon;\n\n protected getLayoutSelectionLabel(layout: AXPLayoutSwitcherOption): AXPMultiLanguageString {\n const locale = this.translateService.getActiveLang() || 'en-US';\n const reportTitle = this.vm.reportDefinition()?.title;\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n return layout.title ?? reportLayoutTitleKey(layout);\n }\n return reportLayoutTitleKey(layout);\n }\n\n protected handleBackgroundLayoutToggle(layoutId: string, selected: boolean): void {\n this.vm.setBackgroundLayoutSelected(layoutId, selected);\n }\n\n //#endregion\n\n //#region ---- Page Configuration Overrides ----\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const breadcrumbs: AXPBreadcrumbItem[] = [\n {\n name: 'reports',\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n command: {\n name: 'navigate',\n options: {\n path: this.reportsListPath(),\n },\n },\n },\n ];\n\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n breadcrumbs.push({\n name: 'report-viewer',\n title: reportDefinition.title,\n });\n }\n\n return breadcrumbs;\n }\n\n override async getPageTitle(): Promise<AXPMultiLanguageString> {\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n return reportDefinition.title;\n }\n return await this.translateService.translateAsync(\n '@report-management:report-viewer.components.report-viewer.title',\n );\n }\n\n override async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n const reportDefinition = this.vm.reportDefinition();\n return reportDefinition?.description || null;\n }\n\n protected override getPageIcon(): string | null {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return null;\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return null;\n }\n\n return reportLayoutPageIcon(currentLayout.icon, {\n type: currentLayout.layout.type,\n });\n }\n\n protected override async getTitleActions(): Promise<AXPActionMenuItem[]> {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return [];\n }\n\n const currentLayoutId = this.vm.currentLayout()?.id;\n const reportTitle = this.vm.reportDefinition()?.title;\n const locale = this.translateService.getActiveLang() || 'en-US';\n\n const items: AXPActionMenuItem[] = [];\n for (const layout of this.vm.availableLayouts()) {\n items.push({\n title: await this.resolveLayoutSwitcherTitle(layout, reportTitle, locale),\n icon: reportLayoutGlyph(layout.icon, layout),\n command: {\n name: 'switch-layout',\n metadata: { isLayout: true, layoutId: layout.id, isSelected: layout.id === currentLayoutId },\n },\n });\n }\n\n return items.sort((a, b) =>\n resolveMultiLanguageString(a.title, locale).localeCompare(\n resolveMultiLanguageString(b.title, locale),\n undefined,\n { sensitivity: 'base' },\n ),\n );\n }\n\n private async resolveLayoutSwitcherTitle(\n layout: AXPLayoutSwitcherOption,\n reportTitle: AXPMultiLanguageString | undefined,\n locale: string,\n ): Promise<AXPMultiLanguageString> {\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n if (typeof layout.title === 'string' && layout.title.startsWith('@')) {\n return await this.translateService.translateAsync(layout.title);\n }\n if (typeof layout.title === 'object') {\n return this.translateService.resolve(layout.title) || layout.title;\n }\n return layout.title;\n }\n\n return await this.translateService.translateAsync(reportLayoutTitleKey(layout));\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n // On mobile, if report has been executed (showing report), show \"Filters\" as back button\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n return {\n title: await this.translateService.translateAsync('@general:terms.interface.filter.title'),\n };\n }\n\n return {\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n };\n }\n\n override async onBackButtonClick(): Promise<void> {\n // On mobile, if report has been executed (showing report), go back to filters\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n this.vm.clearExecutionState();\n return;\n }\n\n await this.router.navigateByUrl(this.reportsListPath());\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get primary actions from service (includes general actions + layout-specific actions)\n const primaryActions = this.reportViewerService.getPrimaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return primaryActions.map(({ priority, ...action }) => action);\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n const secondaryActions = this.reportViewerService.getSecondaryActions(currentLayout);\n const items = secondaryActions.map(({ priority, ...action }) => action);\n if (this.canGenerateInBackground() && this.vm.generationMode() === 'choose') {\n items.unshift({\n title: '@report-management:report-generation.actions.generate-in-background',\n icon: 'fa-light fa-clock',\n command: { name: 'generate-in-background' },\n });\n }\n return items;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n // Handle layout switching from title actions\n if (command.metadata?.['isLayout']) {\n const layoutId = command.metadata?.['layoutId'] as string;\n if (layoutId) {\n this.vm.switchLayout(layoutId);\n this.recompute();\n }\n return;\n }\n\n switch (command.name) {\n case 'execute-report':\n await this.handleExecuteReport();\n break;\n case 'generate-in-background':\n await this.handleGenerateInBackground();\n break;\n case 'refresh-report':\n this.handleRefresh();\n break;\n case 'reset-filters':\n this.handleClearFilters();\n break;\n case 'download-report':\n this.handleDownloadReport();\n break;\n case 'print-report':\n this.handlePrintReport();\n break;\n case 'export-report':\n await this.handleExportReport(command.options?.['format'] as string);\n break;\n default:\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.unknown-command', {\n params: { commandName: command.name },\n });\n console.warn(warning);\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:report-viewer.components.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n @if (vm.reportDefinition()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'card'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n <!-- ----- Background report layout multi-select ----- -->\n @if (vm.isBackgroundReportMode() && !vm.isBackgroundQueued() && vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer hover:bg-neutral-50\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n </axp-layout-content>\n <axp-layout-footer class=\"p-4 border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-viewer.components.filters.messages.warning.unapplied') | async\n }}</span>\n </div>\n </div>\n }\n @if (vm.isBackgroundReportMode() && !vm.hasSelectedBackgroundLayouts() && !vm.isBackgroundQueued()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-generation.errors.no-layouts-selected') | async\n }}</span>\n </div>\n </div>\n }\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? t('@report-management:report-generation.actions.generate-in-background')\n : t('@report-management:report-viewer.actions.execute.title')) | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- ----- Secondary background generate for choose mode ----- -->\n @if (canGenerateInBackground() && vm.generationMode() === 'choose') {\n <ax-button class=\"w-full mt-2\" [disabled]=\"vm.areParametersReadonly()\"\n [text]=\"t('@report-management:report-generation.actions.generate-in-background') | async\" [color]=\"'default'\"\n (onClick)=\"execute({ name: 'generate-in-background' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-clock\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"overflow-auto\">\n @if (vm.isFrozen()) {\n <!-- ----- Frozen run banner ----- -->\n <div class=\"warning-lightest-surface mb-3 p-3 rounded border border-warning-200 text-warning-800 text-sm\">\n {{ t('@report-management:report-generation.banners.frozen') | async }}\n </div>\n }\n @if (vm.hasError()) {\n <!-- Error State -->\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.retry.title') | async\" (onClick)=\"vm.clearError()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-refresh\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else if (!vm.reportDefinition()) {\n <!-- No Report Selected State -->\n <axp-state-message icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.title'\"\n [description]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.description'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.browse-reports.title') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n <!-- ----- Background report message state (no live layout preview) ----- -->\n } @else if (vm.isBackgroundReportMode() && !vm.isFrozen()) {\n <!-- ----- Mobile filters and layout selection for background reports ----- -->\n @if (deviceService.isSmall() && !vm.isBackgroundQueued()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n @if (vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"flex items-center justify-between gap-2 mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n @if (vm.isBackgroundQueued()) {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.queued-title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.queued-description'\">\n </axp-state-message>\n } @else {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.description'\">\n </axp-state-message>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Desktop: Report Display Area -->\n<ng-template #reportDisplay>\n @if (showReportDisplay()) {\n <!-- Desktop & Mobile: Report Display Area -->\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n } @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view> </axp-report-pdf-view>\n }\n } @else if (vm.reportDefinition()) {\n <!-- Mobile: Show filters -->\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\">\n </axp-layout-renderer>\n }\n</ng-template>\n\n<!-- Mobile: Execute Button -->\n@if (deviceService.isSmall() && ((!vm.isBackgroundReportMode() && !vm.hasBeenExecuted()) || (vm.isBackgroundReportMode() && !vm.isBackgroundQueued()))) {\n<axp-page-footer class=\"p-2 border-t\">\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? '@report-management:report-generation.actions.generate-in-background'\n : '@report-management:report-viewer.actions.execute.title') | translate | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n</axp-page-footer>\n}\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXBarChartReportMapper, queryResultToChartSeries } from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '@acorex-platform/module-report-management-client/contracts';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-bar-chart-view',\n standalone: true,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXChartLegendComponent,\n ],\n templateUrl: './report-bar-chart-view.component.html',\n styleUrl: './report-bar-chart-view.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportBarChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n this.vm.fetchData().then((result) => {\n const barChartData = AXBarChartReportMapper(queryResultToChartSeries(result, this.dataMapping()));\n this.barChartData.set(barChartData);\n });\n }\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle chart click events\n */\n protected handleChartClick(event: any): void {\n // TODO: Implement chart click handling\n console.log('Chart clicked:', event);\n }\n\n /**\n * Handle chart data point selection\n */\n protected handleDataPointSelect(event: any): void {\n // TODO: Implement data point selection\n console.log('Data point selected:', event);\n }\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n /**\n * Get chart configuration for rendering\n */\n protected getChartConfig(): any {\n // TODO: Transform AXPReportChartOptions to chart library format\n return {\n type: this.chartType(),\n options: this.chartOptions(),\n dataMapping: this.dataMapping(),\n };\n }\n\n protected barChartData = signal<AXBarChartValue>([]);\n\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected legendOptions = signal<AXChartLegendOptions>({\n mode: 'horizontal',\n });\n\n //#endregion\n}\n","<div class=\"axp-report-chart-view\" *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading\">\n <div class=\"spinner spin border-4 border-gray-200 border-t-primary rounded-full w-12 h-12\">\n </div>\n <div class=\"__loading-text\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <div class=\"__chart-container\">\n @if (chartLayout()?.header) {\n <div class=\"__chart-header\">\n <h3 class=\"__chart-title\">{{ chartLayout()?.header?.title }}</h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date\">{{ '@general:common.date.today' | translate | async }}</div>\n }\n </div>\n }\n\n <div class=\"__chart-body\">\n <!-- Chart component will be rendered here -->\n <div class=\"__chart-placeholder\">\n <div class=\"__placeholder-content\">\n <div class=\"flex flex-wrap items-center justify-center gap-10\"\n [class]=\"legendOptions().mode === 'horizontal' ? 'flex-col' : 'flex-row'\">\n <!-- Chart Area -->\n <div class=\"flex-0 size-96\">\n <ax-bar-chart #chart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n <!-- Legend Area -->\n @if (barChartData().length > 0) {\n <div>\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"chart\"></ax-chart-legend>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (chartLayout()?.footer) {\n <div class=\"__chart-footer\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"$safeNavigationMigration(chartLayout()?.footer?.customHtml)\"></div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message icon=\"fa-light fa-chart-column\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\">\n </axp-state-message>\n }\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["OPEN_REPORT_IN_POPUP_COMMAND","i1","i3","i4","i2","i6"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DUdUNlnp.mjs","sources":["../../../../libs/modules/report-management/client/src/lib/manifest.ts","../../../../libs/modules/report-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/report-management/client/src/lib/menu.provider.ts","../../../../libs/modules/report-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/report-management/client/src/lib/settings.provider.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-parameter.util.ts","../../../../libs/modules/report-management/client/src/lib/features/entity-reports/entity-reports.util.ts","../../../../libs/modules/report-management/client/src/lib/features/entity-reports/entity-reports.plugin.ts","../../../../libs/modules/report-management/client/src/lib/commands/open-report-viewer.command.ts","../../../../libs/modules/report-management/client/src/lib/features/background-operation/report-generation-background-operation.handler.ts","../../../../libs/modules/report-management/client/src/lib/features/report-generation/report-generation-inbox-toast.bridge.service.ts","../../../../libs/modules/report-management/client/src/lib/features/report-generation/report-generation-inbox-toast.providers.ts","../../../../libs/modules/report-management/client/src/lib/report-management.module.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-viewer-user-settings.types.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-viewer.service.ts","../../../../libs/modules/report-management/client/src/lib/reports/report-mapper.ts","../../../../libs/modules/report-management/client/src/lib/commands/open-report-in-popup.command.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-user-settings.service.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-group-by-drill.util.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-table-columns.util.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer.viewmodel.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-layout-switcher.util.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.html","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.ts","../../../../libs/modules/report-management/client/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.html","../../../../libs/modules/report-management/client/src/acorex-platform-module-report-management-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Report Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const ReportManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'data',\n required : true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPInsightsReportingPermissionKeys\n} from '@acorex-platform/module-report-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Permission Definition Provider -----\n\n/**\n * Registers report capabilities into the shared Insights & Reporting group.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPInsightsReportingPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:insights-reporting.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.InsightsReporting.Root, `${G}.insights-reporting.title`, `${G}.insights-reporting.description`, { order: 100 });\n\n context\n .addGroup(\n groups.InsightsReporting.Reports,\n `${G}.insights-reporting-reports.title`,\n `${G}.insights-reporting-reports.description`,\n { parent: groups.InsightsReporting.Root, order: 10 },\n )\n .addPermission(keys.Access, `${P}.access.title`, `${P}.access.description`)\n .endPermission()\n .addPermission(keys.MaintainReports, `${P}.maintain-reports.title`, `${P}.maintain-reports.description`)\n .endPermission()\n .addPermission(keys.Setup, `${P}.setup.title`, `${P}.setup.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport {\n AXPInsightsReportingPermissionKeys,\n AXPReportManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-report-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n context.addItems([\n {\n name: AXPReportManagementMenuKeys.Reports,\n text: RootConfig.entities.report.titlePlural,\n path: this.entityService.withEntity(module.name, RootConfig.entities.report.name).createPath(),\n icon: RootConfig.entities.report.icon,\n priority: 8300,\n policy: {\n features: [module.name],\n permissions: [AXPInsightsReportingPermissionKeys.MaintainReports],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { AXPReportManagementFeatureKeys } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Report Management Feature Definition Provider.\n * Provides feature definitions for the Report Management module.\n */\nexport class AXPReportManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Report Builder feature\n context.addFeature(AXPReportManagementFeatureKeys.ReportBuilder, {\n title: '@report-management:features.report-builder.title',\n description: '@report-management:features.report-builder.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Saved Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.SavedReports, {\n title: '@report-management:features.saved-reports.title',\n description: '@report-management:features.saved-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Scheduled Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.ScheduledReports, {\n title: '@report-management:features.scheduled-reports.title',\n description: '@report-management:features.scheduled-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Background Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.BackgroundReports, {\n title: '@report-management:features.background-reports.title',\n description: '@report-management:features.background-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXPReportManagementSettings,\n AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS,\n} from '@acorex-platform/module-report-management-client/contracts';\n\n//#region ----- Report management settings -----\n\nconst DEDUPE_POLICY_ITEMS = [\n {\n value: 'none',\n text: '@report-management:settings.generation.items.dedupe-policy.options.none',\n },\n {\n value: 'in-flight',\n text: '@report-management:settings.generation.items.dedupe-policy.options.in-flight',\n },\n {\n value: 'in-flight-or-cooldown',\n text: '@report-management:settings.generation.items.dedupe-policy.options.in-flight-or-cooldown',\n },\n];\n\nexport class AXMReportManagementSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const cooldownPolicy = `{{ context.eval('${AXPReportManagementSettings.GenerationDedupePolicy}') === 'in-flight-or-cooldown' }}`;\n\n context\n .addGroup(\n 'report-management',\n '@report-management:settings.group.title',\n '@report-management:settings.group.description',\n 'fa-light fa-chart-line',\n undefined,\n 840,\n )\n .addSection(\n 'generation',\n '@report-management:settings.generation.title',\n '@report-management:settings.generation.description',\n )\n .addSetting({\n key: AXPReportManagementSettings.GenerationDedupePolicy,\n title: '@report-management:settings.generation.items.dedupe-policy.title',\n description: '@report-management:settings.generation.items.dedupe-policy.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS[\n AXPReportManagementSettings.GenerationDedupePolicy\n ],\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: DEDUPE_POLICY_ITEMS,\n },\n },\n validationRules: [{ rule: 'required' }],\n })\n .addSetting({\n key: AXPReportManagementSettings.GenerationDedupeCooldownMinutes,\n title: '@report-management:settings.generation.items.dedupe-cooldown-minutes.title',\n description: '@report-management:settings.generation.items.dedupe-cooldown-minutes.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS[\n AXPReportManagementSettings.GenerationDedupeCooldownMinutes\n ],\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: { minValue: 0, maxValue: 1440, visibility: cooldownPolicy },\n },\n validationRules: [{ rule: 'required' }],\n })\n .addSetting({\n key: AXPReportManagementSettings.GenerationMaxConcurrentPerUser,\n title: '@report-management:settings.generation.items.max-concurrent-per-user.title',\n description: '@report-management:settings.generation.items.max-concurrent-per-user.description',\n scope: 'P',\n overridableAt: [],\n isInherited: false,\n defaultValue: AXP_REPORT_MANAGEMENT_GENERATION_SETTING_DEFAULTS[\n AXPReportManagementSettings.GenerationMaxConcurrentPerUser\n ],\n widget: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: { minValue: 0, maxValue: 50 },\n },\n validationRules: [{ rule: 'required' }],\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ----- Types -----\n\nexport type AXPReportDateRangeValue = 'today' | { from: string; to: string };\n\nexport type AXPReportParameterValue = string | number | boolean | AXPReportDateRangeValue | Record<string, unknown>;\n\n//#endregion\n\n//#region ----- Date helpers -----\n\n/** Local calendar date as `yyyy-MM-dd` (session \"today\" for report ranges). */\nexport function formatReportDateOnly(date: Date = new Date()): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\nexport function resolveTodayDateRange(date: Date = new Date()): { from: string; to: string } {\n const day = formatReportDateOnly(date);\n return { from: day, to: day };\n}\n\nexport function isReportDateRangeObject(value: unknown): value is { from?: unknown; to?: unknown; start?: unknown; end?: unknown } {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const raw = value as Record<string, unknown>;\n const from = raw['from'] ?? raw['start'];\n const to = raw['to'] ?? raw['end'];\n return typeof from === 'string' && typeof to === 'string' && !!from.trim() && !!to.trim();\n}\n\nexport function toReportDateRangeFilterValue(\n range: { from: string; to: string },\n): { operation: { type: 'between' }; value: { from: string; to: string } } {\n return {\n operation: { type: 'between' },\n value: { from: range.from, to: range.to },\n };\n}\n\n/**\n * Converts report default / binding values into filter-form context shape.\n * - `'today'` and `{ from, to }` → `{ operation: between, value }`\n * - existing filter objects are left unchanged\n */\nexport function resolveReportFilterDefaultValue(value: unknown, now: Date = new Date()): unknown {\n if (value === 'today') {\n return toReportDateRangeFilterValue(resolveTodayDateRange(now));\n }\n if (isReportDateRangeObject(value)) {\n return toReportDateRangeFilterValue({\n from: String(value.from ?? value.start),\n to: String(value.to ?? value.end),\n });\n }\n return value;\n}\n\ntype ReportParameterDefaultSource = {\n path: string;\n widget?: {\n defaultValue?: unknown;\n options?: Record<string, unknown>;\n };\n};\n\ntype ReportParameterGroupDefaultSource = {\n parameters?: ReportParameterDefaultSource[];\n};\n\nexport function collectReportParameterDefaults(\n parameterGroups: ReportParameterGroupDefaultSource[] | undefined,\n now: Date = new Date(),\n): Record<string, unknown> {\n const defaults: Record<string, unknown> = {};\n for (const group of parameterGroups ?? []) {\n for (const param of group.parameters ?? []) {\n const rawDefault = param.widget?.defaultValue ?? param.widget?.options?.['defaultValue'];\n if (rawDefault === undefined) {\n continue;\n }\n defaults[param.path] = resolveReportFilterDefaultValue(rawDefault, now);\n }\n }\n return defaults;\n}\n\n//#endregion\n\n//#region ----- Parameter resolution -----\n\n/**\n * Resolves special parameter tokens after expression evaluation.\n * - `dateRange: 'today'` → `{ from, to }` for the local calendar day\n */\nexport function resolveReportParameterValues(\n parameters: Record<string, unknown> | undefined,\n now: Date = new Date(),\n): Record<string, unknown> {\n if (!parameters) {\n return {};\n }\n\n const resolved: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(parameters)) {\n if (value === 'today') {\n resolved[key] = resolveTodayDateRange(now);\n continue;\n }\n resolved[key] = value;\n }\n return resolved;\n}\n\n/**\n * Maps entity-binding parameter declarations into OpenInPopup command parameters.\n * Field paths become `context.eval` expressions; `today` and `{from,to}` stay literal.\n */\nexport function mapEntityBindingParameters(\n parameters: Record<string, AXPReportParameterValue> | undefined,\n): Record<string, unknown> | undefined {\n if (!parameters) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(parameters).map(([key, value]) => [key, toBindingParameterExpression(value)]),\n );\n}\n\nfunction toBindingParameterExpression(value: AXPReportParameterValue): unknown {\n if (value === 'today') {\n return 'today';\n }\n\n if (isReportDateRangeObject(value)) {\n return {\n from: String(value.from ?? value.start),\n to: String(value.to ?? value.end),\n };\n }\n\n if (typeof value !== 'string') {\n return value;\n }\n\n const trimmed = value.trim();\n if (!trimmed || trimmed.includes('{{') || trimmed.includes('context.eval')) {\n return value;\n }\n\n return `{{ context.eval('${trimmed}') }}`;\n}\n\n//#endregion\n\n//#region ----- Viewer query params -----\n\n/**\n * Flattens popup/filter parameters into report-viewer URL query params\n * (`field.operation.type` + `field.value` / nested `from`/`to`).\n */\nexport function flattenReportParametersToQueryParams(\n parameters: Record<string, unknown>,\n): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const [field, rawValue] of Object.entries(parameters)) {\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n continue;\n }\n\n if (isReportDateRangeObject(rawValue)) {\n const from = String(rawValue.from ?? rawValue.start);\n const to = String(rawValue.to ?? rawValue.end);\n result[`${field}.operation.type`] = 'between';\n result[`${field}.value.from`] = from;\n result[`${field}.value.to`] = to;\n continue;\n }\n\n if (typeof rawValue === 'object' && !Array.isArray(rawValue) && 'operation' in rawValue) {\n const filterObj = rawValue as { operation?: { type?: string }; value?: unknown };\n if (filterObj.operation?.type) {\n result[`${field}.operation.type`] = String(filterObj.operation.type);\n }\n if (isReportDateRangeObject(filterObj.value)) {\n result[`${field}.value.from`] = String(filterObj.value.from ?? filterObj.value.start);\n result[`${field}.value.to`] = String(filterObj.value.to ?? filterObj.value.end);\n } else if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n result[`${field}.value`] = Array.isArray(filterObj.value)\n ? filterObj.value.map(String).join(',')\n : String(filterObj.value);\n }\n continue;\n }\n\n result[`${field}.operation.type`] = Array.isArray(rawValue) ? 'in' : 'equal';\n result[`${field}.value`] = Array.isArray(rawValue) ? rawValue.map(String).join(',') : String(rawValue);\n }\n\n return result;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type {\n AXPReportDefinition,\n AXPReportEntityBinding,\n AXPReportEntityDisplay,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { mapEntityBindingParameters } from '../../reports/report-parameter.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXPEntityBoundReport {\n report: AXPReportDefinition;\n binding: AXPReportEntityBinding;\n}\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const OPEN_REPORT_IN_POPUP_COMMAND = 'ReportManagement.Report:OpenInPopup';\nexport const ENTITY_REPORTS_PAGE_COMPONENT_KEY = 'entity-reports-page';\n\n//#endregion\n\n//#region ----- Display helpers -----\n\nexport function normalizeReportEntityDisplays(\n display: AXPReportEntityBinding['display'],\n): Set<AXPReportEntityDisplay> {\n if (!display) {\n return new Set<AXPReportEntityDisplay>(['page']);\n }\n const list = Array.isArray(display) ? display : [display];\n return new Set(list);\n}\n\nexport function bindingShowsOnPage(binding: AXPReportEntityBinding): boolean {\n const displays = normalizeReportEntityDisplays(binding.display);\n // Default / empty → page. Explicit lists without `page` hide from the Reports page.\n return displays.has('page') || displays.size === 0;\n}\n\nexport function resolveBindingTitle(\n report: AXPReportDefinition,\n binding: AXPReportEntityBinding,\n): AXPMultiLanguageString {\n if (typeof binding.title === 'string' && binding.title.trim()) {\n return binding.title.trim();\n }\n return report.title;\n}\n\nexport function resolveBindingDescription(\n report: AXPReportDefinition,\n binding: AXPReportEntityBinding,\n): AXPMultiLanguageString | undefined {\n if (typeof binding.description === 'string' && binding.description.trim()) {\n return binding.description.trim();\n }\n if (typeof report.description === 'string') {\n const trimmed = report.description.trim();\n return trimmed || undefined;\n }\n return report.description;\n}\n\nexport function buildOpenInPopupCommandOptions(\n report: AXPReportDefinition,\n binding: AXPReportEntityBinding,\n): Record<string, unknown> {\n return {\n reportId: report.id,\n layoutId: binding.layoutId,\n title: resolveBindingTitle(report, binding),\n parameters: mapEntityBindingParameters(binding.parameters),\n };\n}\n\nexport function extractEntityBindings(\n report: AXPReportDefinition,\n entityType: string,\n): AXPReportEntityBinding[] {\n const bindings = report.entities ?? [];\n return bindings\n .filter((binding) => binding?.entity === entityType)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPEntityActionPlugin,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { Injector } from '@angular/core';\nimport { ENTITY_REPORTS_PAGE_COMPONENT_KEY } from './entity-reports.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type EntityReportsPluginOptions = {\n /** Title for the Reports detail page. */\n title?: string;\n /** Icon for the Reports detail page. */\n icon?: string;\n};\n\n//#endregion\n\n//#region ----- Plugin factory -----\n\n/**\n * Entity `reports` plugin — contributes a Reports detail page for definitions\n * bound via `entities[]`. Reports open from that page (not entity Actions).\n *\n * Takes {@link Injector} for factory signature parity with other entity plugins.\n */\nexport function createEntityReportsPlugin(_injector: Injector): AXPEntityActionPlugin {\n return {\n name: 'reports',\n order: 55,\n apply: async (ctx, options?: EntityReportsPluginOptions) => {\n const opts = options ?? {};\n const entityType = `${ctx.entity.module}.${ctx.entity.name}`;\n const pageTitle = opts.title?.trim() || '@report-management:entity-reports.page.title';\n\n //#region ----- Reports detail page -----\n\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some(\n (p: { componentKey?: string }) => p.componentKey === ENTITY_REPORTS_PAGE_COMPONENT_KEY,\n );\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'reports',\n {\n componentKey: ENTITY_REPORTS_PAGE_COMPONENT_KEY,\n skipPage: pageExists ? { componentKey: ENTITY_REPORTS_PAGE_COMPONENT_KEY } : undefined,\n },\n );\n const page = {\n componentKey: ENTITY_REPORTS_PAGE_COMPONENT_KEY,\n title: pageTitle,\n icon: opts.icon ?? 'fa-light fa-chart-mixed',\n layout: { order: pageOrder },\n options: { entityType },\n } as any;\n if (!pageExists) {\n ctx.entity.pages.push(page);\n } else {\n const pages = ctx.entity.pages as any[];\n const index = pages.findIndex((p) => p.componentKey === ENTITY_REPORTS_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...page };\n }\n }\n\n //#endregion\n\n (ctx.entity as any).extensions ??= {};\n (ctx.entity as any).extensions.reports = {\n entityType,\n };\n },\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPTabNavigationService } from '@acorex-platform/framework-client/common';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { buildReportGenerationNotificationCorrelationId } from '@acorex-platform/module-report-management-client/contracts';\nimport { get } from 'lodash-es';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ----- Command Input -----\n\nexport interface AXPOpenReportViewerCommandInput {\n reportId?: string;\n runId?: string;\n data?: Record<string, unknown>;\n options?: Partial<AXPOpenReportViewerCommandInput>;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Opens a report in the full-page report viewer. */\n@Injectable({ providedIn: 'root' })\nexport class AXPOpenReportViewerCommand\n implements AXPCommand<AXPOpenReportViewerCommandInput | Record<string, unknown>, void>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly tabNavigation = inject(AXPTabNavigationService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly translate = inject(AXTranslationService);\n private readonly inboxConnector = inject(AXPInAppInboxConnectorService, { optional: true });\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n async execute(\n input: AXPOpenReportViewerCommandInput | Record<string, unknown>,\n ): AXPCommandExecuteResultPromise<void> {\n const rowData = this.resolveRowData(input);\n const options = await this.resolveOptions(input, rowData);\n\n if (!options.reportId) {\n return {\n success: false,\n message: {\n text: await this.translate.translateAsync(\n '@report-management:report-viewer.messages.error.invalid-popup-target',\n ),\n },\n };\n }\n\n const runId = typeof options.runId === 'string' ? options.runId.trim() : '';\n if (runId) {\n await this.dismissReportGenerationInboxNotification(runId);\n }\n\n const appName = this.sessionService.application?.name;\n if (!appName) {\n return {\n success: false,\n message: {\n text: await this.translate.translateAsync(\n '@report-management:report-viewer.messages.error.invalid-popup-target',\n ),\n },\n };\n }\n\n // Put reportId in the path (not queryParams): tabular navigation drops NavigationExtras.\n const path = runId\n ? `${appName}/${RootConfig.module.route}/viewer/${options.reportId}?runId=${encodeURIComponent(runId)}`\n : `${appName}/${RootConfig.module.route}/viewer/${options.reportId}`;\n await this.tabNavigation.navigate(path);\n\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private async dismissReportGenerationInboxNotification(runId: string): Promise<void> {\n if (!this.inboxConnector) {\n return;\n }\n try {\n await this.inboxConnector.dismissByCorrelationId(\n buildReportGenerationNotificationCorrelationId(runId),\n );\n } catch {\n // Best-effort — navigation should still proceed.\n }\n }\n\n private resolveRowData(\n input: AXPOpenReportViewerCommandInput | Record<string, unknown>,\n ): Record<string, unknown> {\n const ctx = input as AXPOpenReportViewerCommandInput;\n if (ctx?.data && typeof ctx.data === 'object') {\n return ctx.data as Record<string, unknown>;\n }\n if (\n (input as Record<string, unknown>)['data'] &&\n typeof (input as Record<string, unknown>)['data'] === 'object'\n ) {\n return (input as Record<string, unknown>)['data'] as Record<string, unknown>;\n }\n return input as Record<string, unknown>;\n }\n\n private async resolveOptions(\n input: AXPOpenReportViewerCommandInput | Record<string, unknown>,\n rowData: Record<string, unknown>,\n ): Promise<AXPOpenReportViewerCommandInput> {\n const typedInput = input as AXPOpenReportViewerCommandInput;\n const rawOptions = {\n reportId: typedInput.reportId,\n runId: typedInput.runId,\n ...(typedInput.options ?? {}),\n };\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rowData, path),\n },\n };\n\n return (await this.expressionEvaluator.evaluate(rawOptions, scope)) as AXPOpenReportViewerCommandInput;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXP_BACKGROUND_OPERATION_HANDLERS,\n AXPBackgroundOperationHandler,\n type AXPBackgroundOperation,\n type AXPBackgroundOperationCta,\n} from '@acorex-platform/framework-client/common';\nimport { AXPExecuteCommand } from '@acorex-platform/framework-shared/core';\nimport { Injectable, Provider, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { AXPOpenReportViewerCommand } from '../../commands/open-report-viewer.command';\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport { runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport {\n AXMReportManagementQueryKeys,\n type AXMReportGenerationRequest,\n} from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ----- Handler -----\n\n@Injectable()\nexport class AXMReportGenerationBackgroundOperationHandler extends AXPBackgroundOperationHandler {\n readonly providerKey = 'report-management';\n\n private readonly openViewer = inject(AXPOpenReportViewerCommand);\n private readonly queryService = inject(AXPQueryService);\n\n async execute(command: AXPExecuteCommand, operation: AXPBackgroundOperation): Promise<void> {\n if (command.name !== 'click') {\n return;\n }\n\n const reportRequestId =\n get(operation.data, 'reportRequestId') ??\n get(operation.data, 'payload.reportRequestId') ??\n get(operation.data, 'command.payload.reportRequestId');\n if (typeof reportRequestId !== 'string' || !reportRequestId.trim()) {\n return;\n }\n\n const result = await this.queryService.fetch<{ id: string }, AXMReportGenerationRequest>(\n AXMReportManagementQueryKeys.ReportGeneration.Get,\n { id: reportRequestId },\n );\n const request = runtimeQueryPayloadData(result);\n if (!request?.reportId) {\n return;\n }\n\n if (request.status === 'completed') {\n await this.openViewer.execute({ reportId: request.reportId, runId: request.id });\n return;\n }\n\n await this.openViewer.execute({ reportId: request.reportId });\n }\n\n override resolveCta(operation: AXPBackgroundOperation): AXPBackgroundOperationCta | null {\n if (operation.status === 'failed' && operation.capabilities.retryable) {\n return {\n text: '@general:background-operation.actions.retry',\n icon: 'fa-light fa-arrow-rotate-right',\n color: 'primary',\n look: 'solid',\n command: { name: 'retry' },\n };\n }\n\n if (operation.status === 'completed' && operation.capabilities.clickable) {\n return {\n text: '@report-management:report-generation.notifications.actions.open-viewer',\n icon: 'fa-light fa-file-chart-column',\n color: 'primary',\n look: 'solid',\n command: { name: 'click' },\n };\n }\n\n return null;\n }\n}\n\n//#endregion\n\n//#region ----- Providers -----\n\nexport const AXM_REPORT_GENERATION_BACKGROUND_OPERATION_HANDLERS: Provider[] = [\n {\n provide: AXP_BACKGROUND_OPERATION_HANDLERS,\n useExisting: AXMReportGenerationBackgroundOperationHandler,\n multi: true,\n },\n AXMReportGenerationBackgroundOperationHandler,\n];\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXP_USER_NOTIFICATION_SERVICE } from '@acorex-platform/framework-client/common';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport type { AXPInAppInboxItem } from '@acorex-platform/module-communication-management-client';\nimport { REPORT_GENERATION_NOTIFICATION_DEFINITION_KEY } from '@acorex-platform/module-report-management-client/contracts';\nimport { DestroyRef, effect, inject, Injectable, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { distinctUntilChanged, map } from 'rxjs';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst TOASTED_KEYS_STORAGE = 'axp:report-generation-inbox-toast-keys';\n\n//#endregion\n\n//#region ----- Bridge -----\n\n/**\n * When a report-generation inbox row arrives (user was not watching inline),\n * mirrors it as a transient toast with an open action. Inbox persistence stays server-owned.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMReportGenerationInboxToastBridgeService {\n //#region ----- Dependencies -----\n\n private readonly inboxConnector = inject(AXPInAppInboxConnectorService, { optional: true });\n private readonly userNotificationService = inject(AXP_USER_NOTIFICATION_SERVICE);\n private readonly commandService = inject(AXPCommandService);\n private readonly translationService = inject(AXTranslationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n //#endregion\n\n //#region ----- State -----\n\n private started = false;\n private inboxBaselined = false;\n private boundUserId: string | null = null;\n private readonly toastedKeys = new Set<string>();\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n start(): void {\n if (this.started || !this.inboxConnector) {\n return;\n }\n this.started = true;\n\n this.sessionService.isReadyForAppScopedApi$\n .pipe(\n map(() => this.sessionService.user?.id?.trim() || null),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((userId) => {\n this.bindSessionUser(userId);\n });\n\n this.bindSessionUser(this.sessionService.user?.id?.trim() || null);\n\n effect(\n () => {\n const userId = this.sessionService.user?.id?.trim();\n const inboxLoading = this.inboxConnector?.loading() ?? false;\n const items = this.readReportGenerationItems();\n\n if (!this.sessionService.isReadyForAppScopedApi || !userId) {\n return;\n }\n\n if (!this.inboxBaselined) {\n for (const item of items) {\n this.markToasted(this.toastKey(item));\n }\n if (!inboxLoading) {\n this.inboxBaselined = true;\n }\n return;\n }\n\n for (const item of items) {\n const key = this.toastKey(item);\n if (this.toastedKeys.has(key)) {\n continue;\n }\n this.markToasted(key);\n void this.showToastForInboxItem(item);\n }\n },\n { injector: this.injector },\n );\n }\n\n //#endregion\n\n //#region ----- Toast -----\n\n private async showToastForInboxItem(item: AXPInAppInboxItem): Promise<void> {\n const action = item.actions?.[0];\n const actionTitle = action?.title\n ? await this.translationService.translateAsync(action.title)\n : await this.translationService.translateAsync(\n '@report-management:report-generation.notifications.actions.open-viewer',\n );\n\n const toastActions = action?.command?.name\n ? [\n {\n text: actionTitle,\n color: 'primary' as const,\n onClick: () => this.executeInboxAction(item, action),\n },\n ]\n : undefined;\n\n await this.userNotificationService.notify({\n correlationId: item.correlationId?.trim() || item.id,\n title: await this.resolveText(item.title),\n body: await this.resolveText(item.body),\n icon: item.iconClass ?? this.resolveIcon(item),\n delivery: {\n toast: {\n color: this.resolveToastColor(item),\n location: 'bottom-center',\n closeButton: true,\n timeOut: 8_000,\n timeOutProgress: true,\n showActions: !!toastActions?.length,\n },\n },\n toastActions,\n });\n }\n\n private async executeInboxAction(\n item: AXPInAppInboxItem,\n action: NonNullable<AXPInAppInboxItem['actions']>[number],\n ): Promise<void> {\n if (!action.command?.name) {\n return;\n }\n await this.commandService.execute(action.command.name, action.command.options ?? {});\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private readReportGenerationItems(): AXPInAppInboxItem[] {\n const userId = this.sessionService.user?.id?.trim();\n return (this.inboxConnector?.inboxList() ?? []).filter((item) => {\n if (item.definitionKey !== REPORT_GENERATION_NOTIFICATION_DEFINITION_KEY) {\n return false;\n }\n const recipientUserId = item.recipientUserId?.trim();\n return !recipientUserId || recipientUserId === userId;\n });\n }\n\n private toastKey(item: AXPInAppInboxItem): string {\n return item.correlationId?.trim() || item.id;\n }\n\n private bindSessionUser(userId: string | null): void {\n if (userId === this.boundUserId) {\n return;\n }\n this.boundUserId = userId;\n this.inboxBaselined = false;\n this.toastedKeys.clear();\n if (userId) {\n this.loadPersistedToastedKeys(userId);\n }\n }\n\n private markToasted(key: string): void {\n const normalized = key.trim();\n if (!normalized) {\n return;\n }\n this.toastedKeys.add(normalized);\n this.persistToastedKeys();\n }\n\n private toastedStorageKey(userId: string): string {\n return `${TOASTED_KEYS_STORAGE}:${userId}`;\n }\n\n private loadPersistedToastedKeys(userId: string): void {\n try {\n const raw = sessionStorage.getItem(this.toastedStorageKey(userId));\n if (!raw) {\n return;\n }\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) {\n return;\n }\n for (const entry of parsed) {\n if (typeof entry === 'string' && entry.trim()) {\n this.toastedKeys.add(entry.trim());\n }\n }\n } catch {\n // Ignore corrupt session storage.\n }\n }\n\n private persistToastedKeys(): void {\n const userId = this.boundUserId?.trim();\n if (!userId) {\n return;\n }\n try {\n sessionStorage.setItem(this.toastedStorageKey(userId), JSON.stringify([...this.toastedKeys]));\n } catch {\n // Ignore quota / privacy errors.\n }\n }\n\n private async resolveText(value: string): Promise<string> {\n const text = value?.trim();\n if (!text) {\n return '';\n }\n if (text.startsWith('@')) {\n return this.translationService.translateAsync(text);\n }\n return text;\n }\n\n private resolveToastColor(item: AXPInAppInboxItem): 'success' | 'danger' | 'warning' {\n switch (item.priority) {\n case 'Danger':\n return 'danger';\n case 'Warning':\n return 'warning';\n default:\n return 'success';\n }\n }\n\n private resolveIcon(item: AXPInAppInboxItem): string {\n if (item.priority === 'Danger') {\n return 'fa-light fa-circle-exclamation';\n }\n if (item.priority === 'Warning') {\n return 'fa-light fa-triangle-exclamation';\n }\n return 'fa-light fa-circle-check';\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { inject, type Provider } from '@angular/core';\nimport {\n AXP_APP_STARTUP_PRIORITY,\n provideAppStartUpTask,\n} from '@acorex-platform/framework-client/core';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { AXMReportGenerationInboxToastBridgeService } from './report-generation-inbox-toast.bridge.service';\n\n//#endregion\n\n//#region ----- Providers -----\n\nexport function provideReportGenerationInboxToastBridge(): Provider[] {\n return [\n provideAppStartUpTask(() => {\n const bridge = inject(AXMReportGenerationInboxToastBridgeService);\n const inbox = inject(AXPInAppInboxConnectorService, { optional: true });\n return {\n name: 'report-generation-inbox-toast-bridge',\n priority: AXP_APP_STARTUP_PRIORITY.realtimeHandlers,\n run: async () => {\n if (inbox) {\n await inbox.ensureReady();\n await inbox.refresh();\n }\n bridge.start();\n },\n };\n }),\n ];\n}\n\n//#endregion\n","import { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';\nimport { ReportManagementManifest } from './manifest';\nimport { AXPDomainModule } from '@acorex-platform/framework-client/domain';\nimport { AXP_ENTITY_ACTION_PLUGIN, provideEntity } from '@acorex-platform/framework-client/layout/entity';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { inject, Injector, NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\nimport { AXP_MENU_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXPRuntimeModule, provideCommandSetups } from '@acorex-platform/framework-client/runtime';\n\n// Entity Modules\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\n\nimport { AXPReportManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMReportManagementSettingProvider } from './settings.provider';\nimport { createEntityReportsPlugin } from './features/entity-reports/entity-reports.plugin';\nimport { AXM_REPORT_GENERATION_BACKGROUND_OPERATION_HANDLERS } from './features/background-operation/report-generation-background-operation.handler';\nimport { provideReportGenerationInboxToastBridge } from './features/report-generation/report-generation-inbox-toast.providers';\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: `:app/${RootConfig.module.route}/viewer`,\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { tab: true, rootLayout: true },\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: ':reportId',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n {\n path: '',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [\n AXPDomainModule,\n AXPRuntimeModule,\n // Entity Modules\n ],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: ReportManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXPReportManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMReportManagementSettingProvider,\n multi: true,\n },\n ...AXM_REPORT_GENERATION_BACKGROUND_OPERATION_HANDLERS,\n ...provideReportGenerationInboxToastBridge(),\n provideCommandSetups([\n {\n key: 'ReportManagement.Report:OpenInPopup',\n command: () =>\n import('./commands/open-report-in-popup.command').then((c) => c.AXPOpenReportInPopupCommand),\n },\n {\n key: 'ReportManagement.Report:OpenViewer',\n command: () =>\n import('./commands/open-report-viewer.command').then((c) => c.AXPOpenReportViewerCommand),\n },\n ]),\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n multi: true,\n useFactory: () => createEntityReportsPlugin(inject(Injector)),\n },\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/entity-reports/entity-reports-page-component.provider').then(\n (m) => m.AXMEntityReportsPageComponentProvider,\n ),\n ),\n ],\n})\nexport class AXMReportManagementModule { }\n","import { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\n\n//#region ---- User Settings (per report + layout) ----\n\nexport interface AXPReportTableColumnUserState {\n field: string;\n width?: number;\n}\n\nexport interface AXPReportTableLayoutUserState {\n columns?: AXPReportTableColumnUserState[];\n sorts?: AXPQuerySort[];\n pageSize?: number;\n}\n\nexport interface AXPReportViewerUserSettings {\n activeLayoutId?: string;\n layouts?: Record<string, { table?: AXPReportTableLayoutUserState }>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport {\n AXPReportDefinition,\n AXPReportLayoutDefinition,\n AXPReportLayoutType,\n AXPReportLayoutAction,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-report-management-client/contracts';\nimport {\n extractEntityBindings,\n type AXPEntityBoundReport,\n} from '../features/entity-reports/entity-reports.util';\n\n//#endregion\n\n/**\n * Report Viewer Service\n *\n * Handles report definition retrieval, caching, and layout actions.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPReportViewerService {\n //#region ---- Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly reportDefinitionService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.report.name)\n .data();\n\n //#endregion\n\n //#region ---- Cache Storage ----\n\n /** Cache for individual report definitions by id */\n private definitionsById = new Map<string, AXPReportDefinition>();\n\n /** Pending API requests to prevent duplicate calls */\n private pendingReportRequests = new Map<string, Promise<AXPReportDefinition | undefined>>();\n\n //#endregion\n\n //#region ---- Public API: Report Definitions ----\n\n /**\n * Reports bound to a host entity type via `entities[].entity`.\n * Falls back to an in-memory filter when the nested-array query returns nothing\n * (or is unsupported by the current query backend).\n */\n async getReportsByEntityType(entityType: string): Promise<AXPEntityBoundReport[]> {\n if (!entityType?.trim()) {\n return [];\n }\n\n let items: AXPReportDefinition[] = [];\n try {\n const result = await this.reportDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entities.entity',\n operator: { type: 'equal' },\n value: entityType,\n },\n ],\n },\n });\n items = (result.items ?? []) as AXPReportDefinition[];\n } catch {\n items = [];\n }\n\n if (items.length === 0) {\n try {\n const fallback = await this.reportDefinitionService.query({\n skip: 0,\n take: 1000,\n });\n items = ((fallback.items ?? []) as AXPReportDefinition[]).filter((report) =>\n (report.entities ?? []).some((binding) => binding?.entity === entityType),\n );\n } catch {\n items = [];\n }\n }\n\n const bound: AXPEntityBoundReport[] = [];\n for (const report of items) {\n this.definitionsById.set(report.id, report);\n for (const binding of extractEntityBindings(report, entityType)) {\n bound.push({ report, binding });\n }\n }\n\n return bound.sort(\n (a, b) =>\n (a.binding.order ?? 0) - (b.binding.order ?? 0) ||\n resolveMultiLanguageString(a.report.title, 'en-US').localeCompare(\n resolveMultiLanguageString(b.report.title, 'en-US'),\n ),\n );\n }\n\n /**\n * Get single report definition by ID with O(1) lookup\n */\n async getReportById(id: string): Promise<AXPReportDefinition | undefined> {\n if (this.definitionsById.has(id)) {\n return this.definitionsById.get(id);\n }\n\n if (this.pendingReportRequests.has(id)) {\n return this.pendingReportRequests.get(id)!;\n }\n\n const requestPromise = this.loadReport(id);\n this.pendingReportRequests.set(id, requestPromise);\n\n return requestPromise;\n }\n\n //#endregion\n\n //#region ---- Public API: Layout Actions ----\n\n /**\n * Get general actions list for a layout type.\n * Override in connectivity layer (mock/API) to provide general actions.\n */\n getGeneralActionsList(layoutType: AXPReportLayoutType): AXPReportLayoutAction[] {\n return [];\n }\n\n /**\n * Get merged actions for a layout definition.\n * Combines general actions with layout-specific actions.\n */\n getMergedActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n const generalActions = this.getGeneralActionsList(layoutDefinition.layout.type);\n const customActions = layoutDefinition.actions || [];\n\n const customActionsMap = new Map<string, AXPReportLayoutAction>();\n customActions.forEach((action) => {\n if (action.name) {\n customActionsMap.set(action.name, action);\n }\n });\n\n const merged: AXPReportLayoutAction[] = [];\n const usedNames = new Set<string>();\n\n generalActions.forEach((action) => {\n if (action.name && customActionsMap.has(action.name)) {\n merged.push(customActionsMap.get(action.name)!);\n usedNames.add(action.name);\n } else {\n merged.push(action);\n if (action.name) {\n usedNames.add(action.name);\n }\n }\n });\n\n customActions.forEach((action) => {\n if (action.name && !usedNames.has(action.name)) {\n merged.push(action);\n usedNames.add(action.name);\n } else if (!action.name) {\n merged.push(action);\n }\n });\n\n return merged;\n }\n\n getPrimaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter((action) => action.priority === 'primary');\n }\n\n getSecondaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter((action) => action.priority === 'secondary');\n }\n\n //#endregion\n\n //#region ---- Private: Data Loading ----\n\n /**\n * Load single report from entity service and cache result.\n * Can be overridden in extended services (e.g., API layer).\n */\n protected async loadReport(id: string): Promise<AXPReportDefinition | undefined> {\n try {\n const result = (await this.reportDefinitionService.byKey(id)) as AXPReportDefinition | undefined;\n\n if (result) {\n this.definitionsById.set(id, result);\n return result;\n }\n\n return undefined;\n } finally {\n this.pendingReportRequests.delete(id);\n }\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n protected isReportCached(reportId: string): boolean {\n return this.definitionsById.has(reportId) || this.pendingReportRequests.has(reportId);\n }\n\n clearAllCache(): void {\n this.definitionsById.clear();\n this.pendingReportRequests.clear();\n }\n\n clearReportsCache(): void {\n this.definitionsById.clear();\n this.pendingReportRequests.clear();\n }\n\n //#endregion\n\n //#region ---- Action Handlers (Override in Connectivity Layer) ----\n\n async executeAction(commandName: string, options?: Record<string, unknown>): Promise<void> {\n console.log(`Execute action: ${commandName} - should be implemented in connectivity layer`, options);\n }\n\n //#endregion\n}\n","import {\n AXPContextData,\n AXPFilterClause,\n type AXPRuntimeQueryResult,\n runtimeQueryCollectionData,\n runtimeQueryObjectData,\n runtimeQueryPayloadData,\n} from '@acorex-platform/framework-shared/core';\nimport { AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartValue } from '@acorex/charts/line-chart';\n\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { isReportDateRangeObject } from './report-parameter.util';\nimport type { AXPChartDataMapping } from '@acorex-platform/module-report-management-client/contracts';\n\nexport function AXPieChartReportMapper(data: Record<string, number>): AXDonutChartValue {\n return Object.entries(data)\n .map(([key, value]) => ({\n id: key,\n label: key,\n value: Number(value),\n }))\n .filter((item) => Number.isFinite(item.value) && item.value > 0);\n}\n\nexport function AXBarChartReportMapper(data: Record<string, number>): AXBarChartValue {\n return Object.entries(data)\n .map(([key, value]) => ({\n id: key,\n label: key,\n value: Number(value),\n }))\n .filter((item) => Number.isFinite(item.value));\n}\n\nexport function AXLineChartReportMapper(data: Record<string, number>): AXLineChartValue {\n const entries = Object.entries(data);\n if (entries.length === 0) {\n return [];\n }\n const dataPoints = entries.map(([key, value]) => ({\n x: key,\n y: value,\n }));\n\n return [\n {\n id: 'series-1',\n label: 'Data Series',\n tooltipLabel: 'Countries Info',\n lineColor: '#d81159',\n fillColor: '#d8115920',\n data: dataPoints,\n },\n ];\n}\n\n//#region ---- Helpers ----\n\n/**\n * Determines whether a filter value should be treated as empty.\n * This handles deep objects, arrays, and primitives so that\n * values like { from: null, to: null } are considered empty.\n */\nfunction isEmptyFilterValue(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0 || value.every((item) => isEmptyFilterValue(item));\n }\n\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n return true;\n }\n\n // Consider object empty if all nested values are empty\n return entries.every(([, v]) => isEmptyFilterValue(v));\n }\n\n return false;\n}\n\n//#endregion\n\n/**\n * Converts AXPContextData (filter context) to AXPFilterClause format\n *\n * Input format:\n * {\n * \"fieldName\": {\n * \"operation\": { \"type\": \"between\" },\n * \"value\": { \"from\": \"...\", \"to\": \"...\" }\n * }\n * }\n *\n * Output format:\n * {\n * logic: 'and',\n * filters: [\n * {\n * field: 'fieldName',\n * operator: { type: 'between' },\n * value: { from: \"...\", to: \"...\" }\n * }\n * ]\n * }\n */\nexport function convertContextDataToFilterClause(context: AXPContextData): AXPFilterClause {\n const filters: AXDataSourceFilterOption[] = [];\n\n // Iterate through all keys in context\n for (const [fieldName, fieldData] of Object.entries(context)) {\n if (fieldName.endsWith('EditorObj') || fieldName.startsWith('__')) {\n continue;\n }\n\n // Drill-down and URL shortcuts may pass plain parameter values (e.g. { brand: 'id' })\n if (fieldData === null || fieldData === undefined || typeof fieldData !== 'object' || Array.isArray(fieldData)) {\n if (!isEmptyFilterValue(fieldData)) {\n filters.push({\n field: fieldName,\n operator: {\n type: Array.isArray(fieldData) ? 'in' : 'equal',\n },\n value: fieldData,\n });\n }\n continue;\n }\n\n // Plain `{ from, to }` / `{ start, end }` objects (e.g. dateRange from OpenInPopup)\n if (isReportDateRangeObject(fieldData) && !('operation' in fieldData)) {\n // Date-range widgets use `between`; CDK operator union is narrower than runtime.\n filters.push({\n field: fieldName,\n operator: { type: 'between' as never },\n value: {\n from: String(fieldData.from ?? fieldData.start),\n to: String(fieldData.to ?? fieldData.end),\n },\n });\n continue;\n }\n\n // Skip structured filter objects without operation metadata\n if (!('operation' in fieldData)) {\n continue;\n }\n\n const operation = (fieldData as any).operation;\n const value = (fieldData as any).value;\n\n // Skip if operation type is missing\n if (!operation || !operation.type) {\n continue;\n }\n\n // Skip if value is effectively empty (null/undefined/empty string,\n // empty object/array, or deep object where all nested values are empty)\n if (isEmptyFilterValue(value)) {\n continue;\n }\n\n // Create filter clause\n const filter: AXDataSourceFilterOption = {\n field: fieldName,\n operator: {\n type: operation.type,\n },\n value: value,\n };\n\n filters.push(filter);\n }\n\n // Return filter clause with AND logic\n if (filters.length === 0) {\n return {\n logic: 'and',\n filters: [],\n };\n }\n\n return {\n logic: 'and',\n filters: filters,\n };\n}\n\n//#region ----- Query payload helpers -----\n\nexport type AXPReportPdfSource = {\n url?: string;\n base64?: string;\n blob?: Blob;\n filename?: string;\n};\n\nfunction asPdfSource(record: Record<string, unknown> | undefined): AXPReportPdfSource | null {\n if (!record) {\n return null;\n }\n const url = typeof record['url'] === 'string' ? record['url'] : undefined;\n const base64 = typeof record['base64'] === 'string' ? record['base64'] : undefined;\n const blob = record['blob'] instanceof Blob ? record['blob'] : undefined;\n const filename = typeof record['filename'] === 'string' ? record['filename'] : undefined;\n if (url == null && base64 == null && blob == null) {\n return null;\n }\n return { url, base64, blob, filename };\n}\n\nexport function queryResultToPdfSource(\n queryResult: AXPRuntimeQueryResult<unknown> | null | undefined,\n): AXPReportPdfSource | null {\n if (!queryResult?.success) {\n return null;\n }\n\n const fromObject = asPdfSource(\n (runtimeQueryPayloadData(queryResult) ?? runtimeQueryObjectData(queryResult)) as\n | Record<string, unknown>\n | undefined,\n );\n if (fromObject) {\n return fromObject;\n }\n\n const page = runtimeQueryCollectionData(queryResult);\n return asPdfSource(page?.items?.[0] as Record<string, unknown> | undefined);\n}\n\nexport function queryResultToChartSeries(\n queryResult: AXPRuntimeQueryResult<unknown> | null | undefined,\n mapping?: AXPChartDataMapping | null,\n): Record<string, number> {\n if (!queryResult?.success) {\n return {};\n }\n\n const objectData = runtimeQueryObjectData(queryResult) as Record<string, unknown> | undefined;\n if (objectData && !('items' in objectData)) {\n const series: Record<string, number> = {};\n for (const [key, value] of Object.entries(objectData)) {\n const n = Number(value);\n if (Number.isFinite(n)) {\n series[key] = n;\n }\n }\n if (Object.keys(series).length > 0) {\n return series;\n }\n }\n\n const page = runtimeQueryCollectionData(queryResult);\n const rows = (page?.items ?? []) as Record<string, unknown>[];\n if (rows.length === 0) {\n return {};\n }\n\n const firstRow = rows[0] ?? {};\n const keys = Object.keys(firstRow);\n const xField = mapping?.xField ?? keys[0] ?? 'x';\n const yFieldsRaw = mapping?.yFields;\n const yField = Array.isArray(yFieldsRaw)\n ? yFieldsRaw[0]\n : yFieldsRaw\n ? String(yFieldsRaw)\n : (keys[1] ?? 'value');\n\n const chartData: Record<string, number> = {};\n for (const row of rows) {\n const key = String(row[xField] ?? '');\n if (!key) {\n continue;\n }\n const value = Number(row[yField] ?? 0);\n if (Number.isFinite(value)) {\n chartData[key] = value;\n }\n }\n return chartData;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport {\n AXPExpressionEvaluatorScope,\n resolveMultiLanguageString,\n type AXPMultiLanguageString,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { buildReportGenerationNotificationCorrelationId } from '@acorex-platform/module-report-management-client/contracts';\nimport { get, isString } from 'lodash-es';\nimport { inject, Injectable } from '@angular/core';\nimport { resolveReportParameterValues } from '../reports/report-parameter.util';\nimport { AXPReportViewerService } from '../reports';\n\n//#endregion\n\n//#region ----- Command Input -----\n\nexport interface AXPOpenReportInPopupCommandInput {\n reportId?: string;\n layoutId?: string;\n runId?: string;\n title?: AXPMultiLanguageString;\n parameters?: Record<string, unknown>;\n hideColumnFields?: string[];\n data?: Record<string, unknown>;\n options?: Partial<AXPOpenReportInPopupCommandInput>;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Opens a report in a results-only popup. Pass `runId` to show a frozen generation run. */\n@Injectable({ providedIn: 'root' })\nexport class AXPOpenReportInPopupCommand\n implements AXPCommand<AXPOpenReportInPopupCommandInput | Record<string, unknown>, void>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly translate = inject(AXTranslationService);\n private readonly reportViewerService = inject(AXPReportViewerService);\n private readonly inboxConnector = inject(AXPInAppInboxConnectorService, { optional: true });\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n async execute(\n input: AXPOpenReportInPopupCommandInput | Record<string, unknown>,\n ): AXPCommandExecuteResultPromise<void> {\n const rowData = this.resolveRowData(input);\n const options = await this.resolveOptions(input, rowData);\n\n if (!options.reportId) {\n return {\n success: false,\n message: {\n text: await this.translate.translateAsync(\n '@report-management:report-viewer.messages.error.invalid-popup-target',\n ),\n },\n };\n }\n\n const runId = typeof options.runId === 'string' ? options.runId.trim() : '';\n if (runId) {\n await this.dismissReportGenerationInboxNotification(runId);\n }\n const popupTitle = await this.resolvePopupTitle(options, rowData, runId);\n const parameters = resolveReportParameterValues(options.parameters);\n\n const comp = (\n await import('../features/report-viewer/report-popup-viewer/report-popup-viewer.component')\n ).AXPReportPopupViewerComponent;\n\n this.popupService.open(comp, {\n title: popupTitle,\n size: 'lg',\n maximizable: true,\n data: {\n reportId: options.reportId,\n layoutId: options.layoutId,\n runId,\n parameters,\n hideColumnFields: options.hideColumnFields ?? [],\n },\n });\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { refresh: false },\n };\n }\n\n //#endregion\n\n //#region ----- Helpers -----\n\n private resolveRowData(\n input: AXPOpenReportInPopupCommandInput | Record<string, unknown>,\n ): Record<string, unknown> {\n const ctx = input as AXPOpenReportInPopupCommandInput;\n if (ctx?.data && typeof ctx.data === 'object') {\n return ctx.data as Record<string, unknown>;\n }\n if (\n (input as Record<string, unknown>)['data'] &&\n typeof (input as Record<string, unknown>)['data'] === 'object'\n ) {\n return (input as Record<string, unknown>)['data'] as Record<string, unknown>;\n }\n return input as Record<string, unknown>;\n }\n\n private async resolveOptions(\n input: AXPOpenReportInPopupCommandInput | Record<string, unknown>,\n rowData: Record<string, unknown>,\n ): Promise<AXPOpenReportInPopupCommandInput> {\n const typedInput = input as AXPOpenReportInPopupCommandInput;\n const rawOptions = {\n reportId: typedInput.reportId,\n layoutId: typedInput.layoutId,\n runId: typedInput.runId,\n title: typedInput.title,\n parameters: typedInput.parameters,\n hideColumnFields: typedInput.hideColumnFields,\n ...(typedInput.options ?? {}),\n };\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rowData, path),\n },\n };\n\n return (await this.expressionEvaluator.evaluate(rawOptions, scope)) as AXPOpenReportInPopupCommandInput;\n }\n\n private async resolvePopupTitle(\n options: AXPOpenReportInPopupCommandInput,\n rowData: Record<string, unknown>,\n runId: string,\n ): Promise<string> {\n let baseTitle = await this.resolveExplicitPopupTitle(options.title, rowData);\n\n if (!baseTitle && options.reportId) {\n const report = await this.reportViewerService.getReportById(options.reportId);\n if (report?.title) {\n baseTitle =\n this.translate.resolve(report.title) ||\n resolveMultiLanguageString(report.title, this.translate.getActiveLang() || 'en-US') ||\n '';\n }\n }\n\n if (!baseTitle) {\n baseTitle = await this.translate.translateAsync(\n '@report-management:report-viewer.components.report-popup-viewer.title',\n );\n }\n\n if (!runId) {\n return baseTitle;\n }\n\n return this.translate.translateAsync(\n '@report-management:report-viewer.components.report-popup-viewer.generated-title',\n { params: { title: baseTitle } },\n );\n }\n\n private async resolveExplicitPopupTitle(\n title: AXPMultiLanguageString | undefined,\n rowData: Record<string, unknown>,\n ): Promise<string> {\n if (title && typeof title === 'object') {\n const resolved = this.translate.resolve(title);\n if (resolved) {\n return resolved;\n }\n }\n\n if (!isString(title) || !title.trim()) {\n return '';\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(rowData, path),\n },\n };\n\n const evaluated = await this.expressionEvaluator.evaluate(title, scope);\n return isString(evaluated) ? evaluated : title;\n }\n\n private async dismissReportGenerationInboxNotification(runId: string): Promise<void> {\n if (!this.inboxConnector) {\n return;\n }\n try {\n await this.inboxConnector.dismissByCorrelationId(\n buildReportGenerationNotificationCorrelationId(runId),\n );\n } catch {\n // Best-effort — opening the report should still proceed.\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { set } from 'lodash';\nimport {\n AXPReportTableColumnUserState,\n AXPReportTableLayoutUserState,\n AXPReportViewerUserSettings,\n} from '../../reports/report-viewer-user-settings.types';\n\n//#region ---- Report Viewer User Settings Service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPReportViewerUserSettingsService {\n private readonly settingsService = inject(AXPSettingsService);\n\n getSettingKey(reportId: string): string {\n return `ReportManagement:Report:${reportId}`;\n }\n\n async load(reportId: string): Promise<AXPReportViewerUserSettings | null> {\n const stored = await this.settingsService.get<AXPReportViewerUserSettings>(this.getSettingKey(reportId));\n return stored ?? null;\n }\n\n getTableLayoutState(\n settings: AXPReportViewerUserSettings | null | undefined,\n layoutId: string,\n ): AXPReportTableLayoutUserState | undefined {\n return settings?.layouts?.[layoutId]?.table;\n }\n\n async saveActiveLayoutId(reportId: string, layoutId: string): Promise<void> {\n await this.patch(reportId, (prev) => ({\n ...prev,\n activeLayoutId: layoutId,\n }));\n }\n\n async saveTableColumnOrder(\n reportId: string,\n layoutId: string,\n columns: AXPReportTableColumnUserState[],\n ): Promise<void> {\n await this.patchTable(reportId, layoutId, (table) => ({\n ...table,\n columns,\n }));\n }\n\n async saveTableColumnWidth(\n reportId: string,\n layoutId: string,\n field: string,\n width: number,\n baseColumns: AXPReportTableColumnUserState[],\n ): Promise<void> {\n const columns = baseColumns.map((col) =>\n col.field === field ? { ...col, width } : col,\n );\n await this.saveTableColumnOrder(reportId, layoutId, columns);\n }\n\n async saveTableSorts(reportId: string, layoutId: string, sorts: AXPQuerySort[]): Promise<void> {\n await this.patchTable(reportId, layoutId, (table) => ({\n ...table,\n sorts,\n }));\n }\n\n async saveTablePageSize(reportId: string, layoutId: string, pageSize: number): Promise<void> {\n await this.patchTable(reportId, layoutId, (table) => ({\n ...table,\n pageSize,\n }));\n }\n\n private async patch(\n reportId: string,\n updateFn: (prev: AXPReportViewerUserSettings) => AXPReportViewerUserSettings,\n ): Promise<void> {\n await this.settingsService.scope(AXPPlatformScope.User).update(this.getSettingKey(reportId), (prev) => {\n const base = (prev && typeof prev === 'object' ? prev : {}) as AXPReportViewerUserSettings;\n return updateFn(base);\n });\n }\n\n private async patchTable(\n reportId: string,\n layoutId: string,\n updateFn: (table: AXPReportTableLayoutUserState) => AXPReportTableLayoutUserState,\n ): Promise<void> {\n await this.patch(reportId, (prev) => {\n const next = { ...prev };\n const currentTable = prev.layouts?.[layoutId]?.table ?? {};\n const updatedTable = updateFn(currentTable);\n set(next, `layouts.${layoutId}.table`, updatedTable);\n return next;\n });\n }\n}\n\n//#endregion\n","import {\n AXPReportGroupByDefinition,\n AXPReportTableLayoutRowAction,\n} from '../../reports';\n\n//#region ---- Constants ----\n\nconst OPEN_REPORT_IN_POPUP_COMMAND = 'ReportManagement.Report:OpenInPopup';\n\n//#endregion\n\n//#region ---- Row Action Builder ----\n\n/**\n * Builds table row actions from declarative group-by drill-down definitions.\n * Skips row commands when linked display columns are used.\n */\nexport function buildDrillRowActionsFromGroupBy(\n definitions: AXPReportGroupByDefinition[] | undefined,\n currentReportId: string | null | undefined,\n): AXPReportTableLayoutRowAction[] {\n if (!definitions?.length || !currentReportId || hasGroupByDrillLinks(definitions)) {\n return [];\n }\n\n const hasExplicitDefault = definitions.some((definition) => definition.default);\n\n return definitions.map((definition, index) => {\n const isDefault = definition.default ?? (!hasExplicitDefault && index === 0);\n\n return {\n title: definition.title ?? 'View',\n command: {\n name: OPEN_REPORT_IN_POPUP_COMMAND,\n options: buildDrillCommandOptions(definition, currentReportId),\n },\n type: 'view',\n priority: definition.priority ?? 'primary',\n default: isDefault,\n iconOnly: false,\n };\n });\n}\n\n//#endregion\n\n//#region ---- Drill Link Columns ----\n\n/**\n * Whether group-by definitions use linked display columns instead of row command actions.\n */\nexport function hasGroupByDrillLinks(definitions: AXPReportGroupByDefinition[] | undefined): boolean {\n return definitions?.some((definition) => isGroupByDrillLinkDefinition(definition)) ?? false;\n}\n\nexport function isGroupByDrillLinkDefinition(definition: AXPReportGroupByDefinition): boolean {\n return Boolean(definition.displayField) && definition.linkDisplay !== false;\n}\n\nexport function findGroupByDefinitionForDisplayField(\n definitions: AXPReportGroupByDefinition[] | undefined,\n field: string,\n): AXPReportGroupByDefinition | undefined {\n return definitions?.find(\n (definition) => definition.displayField === field && isGroupByDrillLinkDefinition(definition),\n );\n}\n\nexport function buildGroupByDrillCommandOptions(\n definition: AXPReportGroupByDefinition,\n currentReportId: string,\n): Record<string, unknown> {\n return buildDrillCommandOptions(definition, currentReportId);\n}\n\nexport function resolveGroupByDrillLinkFields(\n definitions: AXPReportGroupByDefinition[] | undefined,\n): string[] {\n if (!definitions?.length) {\n return [];\n }\n\n return definitions\n .filter((definition) => isGroupByDrillLinkDefinition(definition))\n .map((definition) => definition.displayField!)\n .filter(Boolean);\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction buildDrillCommandOptions(\n definition: AXPReportGroupByDefinition,\n currentReportId: string,\n): Record<string, unknown> {\n const drillDown = definition.drillDown;\n const reportId = drillDown.reportId ?? currentReportId;\n\n return {\n reportId,\n layoutId: drillDown.layoutId,\n title: resolveDrillTitle(definition, drillDown.title),\n parameters: mapDrillParameters(drillDown.parameters),\n hideColumnFields: resolveDrillHideColumnFields(definition),\n };\n}\n\nfunction resolveDrillHideColumnFields(definition: AXPReportGroupByDefinition): string[] {\n const fields = new Set<string>(definition.fields);\n\n if (definition.displayField) {\n fields.add(definition.displayField);\n }\n\n return [...fields];\n}\n\nfunction resolveDrillTitle(\n definition: AXPReportGroupByDefinition,\n explicitTitle?: string,\n): string | undefined {\n if (explicitTitle) {\n return explicitTitle;\n }\n\n if (definition.displayField) {\n return `{{ context.eval('${definition.displayField}') }}`;\n }\n\n return undefined;\n}\n\nfunction mapDrillParameters(\n parameters: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!parameters) {\n return undefined;\n }\n\n return Object.fromEntries(\n Object.entries(parameters).map(([parameterKey, rowField]) => [\n parameterKey,\n toRowExpression(rowField),\n ]),\n );\n}\n\nfunction toRowExpression(value: string): string {\n const trimmed = value.trim();\n if (trimmed.includes('{{') || trimmed.includes('context.eval')) {\n return value;\n }\n\n return `{{ context.eval('${value}') }}`;\n}\n\n//#endregion\n","\nimport { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetColumnNode } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPReportColumn, AXPReportGroupByDefinition } from '../../reports';\nimport { AXPReportTableColumnUserState } from '../../reports/report-viewer-user-settings.types';\nimport { isGroupByDrillLinkDefinition } from './report-group-by-drill.util';\n\n/** Infers a column display widget when the report definition omits `widget.type`. */\nconst NUMERIC_COLUMN_FIELD_PATTERN =\n /(?:count|total|average|avg|min|max|price|value|amount|quantity|number|year|month|quarter|experience|rate|percent|score|age|duration|hours?|days?)$/i;\n\n//#region ---- Table Column View Model ----\n\nexport interface AXPReportTableColumnViewModel {\n field: string;\n title: string;\n width: number | 'auto';\n visible: boolean;\n align: 'left' | 'center' | 'right';\n sortable: boolean;\n pin?: 'start' | 'end';\n widget: AXPWidgetColumnNode;\n isGroupByDrillLink?: boolean;\n drillDisplayField?: string;\n}\n\nexport function buildReportTableColumns(\n definitionColumns: AXPReportColumn[] | undefined,\n savedColumns?: AXPReportTableColumnUserState[],\n): AXPReportTableColumnViewModel[] {\n const base =\n definitionColumns\n ?.filter((col) => col.visible !== false)\n .map((col) => mapDefinitionColumn(col)) ?? [];\n\n return applySavedColumnLayout(base, savedColumns);\n}\n\n/**\n * Builds columns and evaluates `visible` expressions (`permission.check` / `feature.check`).\n */\nexport async function buildReportTableColumnsAsync(\n definitionColumns: AXPReportColumn[] | undefined,\n savedColumns: AXPReportTableColumnUserState[] | undefined,\n expressionEvaluator: AXPExpressionEvaluatorService,\n): Promise<AXPReportTableColumnViewModel[]> {\n const visibleColumns: AXPReportColumn[] = [];\n for (const col of definitionColumns ?? []) {\n if (await isReportColumnVisible(col.visible, expressionEvaluator)) {\n visibleColumns.push(col);\n }\n }\n\n const base = visibleColumns.map((col) => mapDefinitionColumn(col));\n return applySavedColumnLayout(base, savedColumns);\n}\n\nasync function isReportColumnVisible(\n visible: boolean | string | undefined,\n expressionEvaluator: AXPExpressionEvaluatorService,\n): Promise<boolean> {\n if (visible === false) {\n return false;\n }\n if (visible === undefined || visible === true) {\n return true;\n }\n if (typeof visible === 'string' && expressionEvaluator.isExpression(visible)) {\n try {\n return Boolean(await expressionEvaluator.evaluate(visible));\n } catch {\n return true;\n }\n }\n return Boolean(visible);\n}\n\nfunction applySavedColumnLayout(\n base: AXPReportTableColumnViewModel[],\n savedColumns?: AXPReportTableColumnUserState[],\n): AXPReportTableColumnViewModel[] {\n if (!savedColumns?.length) {\n return base;\n }\n\n const widthMap = new Map(savedColumns.map((col) => [col.field, col.width]));\n const orderIndex = new Map(savedColumns.map((col, index) => [col.field, index]));\n\n return [...base]\n .map((col) => {\n const savedWidth = widthMap.get(col.field);\n const resolvedWidth =\n typeof savedWidth === 'number' ? savedWidth : parseColumnResizeWidth(savedWidth) ?? col.width;\n return {\n ...col,\n width: resolvedWidth,\n };\n })\n .sort((a, b) => {\n const aIndex = orderIndex.get(a.field) ?? Number.MAX_SAFE_INTEGER;\n const bIndex = orderIndex.get(b.field) ?? Number.MAX_SAFE_INTEGER;\n return aIndex - bIndex;\n });\n}\n\nexport function toColumnUserState(columns: AXPReportTableColumnViewModel[]): AXPReportTableColumnUserState[] {\n return columns.map((col) => ({\n field: col.field,\n width: typeof col.width === 'number' ? col.width : parseColumnResizeWidth(col.width) ?? undefined,\n }));\n}\n\nexport function inferReportColumnWidgetType(field: string): string {\n return NUMERIC_COLUMN_FIELD_PATTERN.test(field)\n ? AXPWidgetsList.Editors.NumberBox\n : AXPWidgetsList.Editors.TextBox;\n}\n\nfunction resolveColumnWidget(col: AXPReportColumn): AXPWidgetColumnNode {\n const path = col.widget?.path ?? col.field;\n\n if (col.widget?.type) {\n return { ...col.widget, path };\n }\n\n return {\n type: inferReportColumnWidgetType(col.field),\n path,\n };\n}\n\nfunction mapDefinitionColumn(col: AXPReportColumn): AXPReportTableColumnViewModel {\n return {\n field: col.field,\n title: col.title || col.field,\n width: col.width || 'auto',\n visible: col.visible !== false,\n align: col.align || 'left',\n sortable: col.sortable === true,\n pin: col.pin,\n widget: resolveColumnWidget(col),\n };\n}\n\nexport function parseColumnResizeWidth(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nexport function resolveColumnFieldFromDataField(dataField: string): string {\n if (dataField.startsWith('col-')) {\n return dataField.slice(4);\n }\n if (dataField.includes('-')) {\n return dataField.split('-').slice(1).join('-');\n }\n return dataField;\n}\n\nexport function applyGroupByDrillLinksToColumns(\n columns: AXPReportTableColumnViewModel[],\n groupByDefinitions: AXPReportGroupByDefinition[] | undefined,\n): AXPReportTableColumnViewModel[] {\n if (!groupByDefinitions?.length) {\n return columns;\n }\n\n const linkFields = new Set(\n groupByDefinitions\n .filter((definition) => isGroupByDrillLinkDefinition(definition))\n .map((definition) => definition.displayField!)\n .filter(Boolean),\n );\n\n if (linkFields.size === 0) {\n return columns;\n }\n\n return columns.map((column) => {\n if (!linkFields.has(column.field)) {\n return column;\n }\n\n return {\n ...column,\n isGroupByDrillLink: true,\n drillDisplayField: column.field,\n };\n });\n}\n\n//#endregion\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPCommonSettings,\n AXPSettingsService,\n AXP_USER_NOTIFICATION_SERVICE,\n commandMessageTextForError,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPContextData,\n runtimeCommandPayloadData,\n runtimeQueryCollectionData,\n runtimeQueryPayloadData,\n type AXPRuntimeQueryResult,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPDynamicFormDefinition } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPWidgetRegistryService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPQueryService, AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { computed, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport { AXDataSourceQuery } from '@acorex/cdk/common';\nimport {\n AXPLayoutSwitcherOption,\n AXPReportChartLayout,\n AXPReportDefinition,\n AXPReportViewerService,\n AXPReportLayoutDefinition,\n AXPReportParameter,\n AXPReportParameterGroup,\n AXPReportPdfLayout,\n AXPReportTableLayout,\n AXMReportManagementCommandKeys,\n AXMReportManagementQueryKeys,\n buildReportGenerationNotificationCorrelationId,\n type AXPReportGenerationCreateResult,\n type AXPReportViewerFreeze,\n type AXMReportGenerationRequest,\n} from '../../reports';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { convertContextDataToFilterClause } from '../../reports/report-mapper';\nimport {\n collectReportParameterDefaults,\n resolveReportFilterDefaultValue,\n} from '../../reports/report-parameter.util';\nimport { AXPReportViewerUserSettingsService } from './report-viewer-user-settings.service';\nimport { AXPReportViewerUserSettings } from '../../reports/report-viewer-user-settings.types';\nimport { toColumnUserState } from './report-table-columns.util';\nimport type { AXPReportTableColumnViewModel } from './report-table-columns.util';\n\nconst OPEN_REPORT_VIEWER_COMMAND = 'ReportManagement.Report:OpenViewer';\n\nexport const AXPReportViewerViewModel = signalStore(\n withState(() => ({\n reportDefinition: null as AXPReportDefinition | null,\n currentLayout: null as AXPReportLayoutDefinition | null,\n filterContext: {} as AXPContextData,\n allowFetchData: false,\n shouldExecuteReport: false,\n executionRequestId: 0,\n lastAppliedFilterContext: null as AXPContextData | null, // Track last applied filters\n hasBeenExecuted: false, // Track if report has been executed at least once\n status: AXPPageStatus.Idle,\n error: null as string | null,\n showRowIndexColumn: false,\n reportUserSettings: null as AXPReportViewerUserSettings | null,\n runId: null as string | null,\n frozen: false,\n freeze: null as AXPReportViewerFreeze | null,\n backgroundQueued: false,\n backgroundGenerationRequestId: null as string | null,\n /** When true, completion is delivered inline on the viewer (no server inbox toast). */\n inlineGenerationWatchActive: false,\n parametersReadonly: false,\n selectedLayoutIds: [] as string[],\n })),\n\n withComputed((store, widgetRegistryService = inject(AXPWidgetRegistryService)) => ({\n //#region ---- Layout Management ----\n\n availableLayouts: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts) return [];\n const freeze = store.freeze();\n const layouts =\n store.frozen() && freeze?.dataSources?.length\n ? report.layouts.filter((layout) => freeze.dataSources.some((source) => source.layoutId === layout.id))\n : report.layouts;\n\n return layouts.map(\n (layout: AXPReportLayoutDefinition) =>\n ({\n id: layout.id,\n title: layout.title,\n icon: layout.icon,\n type: layout.layout.type,\n }) as AXPLayoutSwitcherOption,\n );\n }),\n\n defaultLayout: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts?.length) return null;\n\n // Find layout marked as default, or use first layout\n return report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n }),\n\n activeLayoutId: computed(() => store.currentLayout()?.id || null),\n\n layoutType: computed(() => store.currentLayout()?.layout?.type || null),\n\n //#endregion\n\n //#region ---- Layout-Specific Configurations ----\n\n tableLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'table' ? (layout.layout as AXPReportTableLayout) : null;\n }),\n\n chartLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n }),\n\n pdfLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n }),\n\n //#endregion\n\n //#region ---- State Indicators ----\n\n isLoading: computed(() => store.status() === AXPPageStatus.Processing),\n isExecuting: computed(() => store.status() === AXPPageStatus.Submitting),\n hasError: computed(() => store.error() !== null),\n canExecute: computed(() => {\n // Always allow execution if there's an error (to enable retry)\n if (store.error() !== null) {\n return true;\n }\n\n if ((store.reportDefinition()?.generation?.mode ?? 'interactive') === 'background') {\n if (store.backgroundQueued() && !store.frozen()) {\n return false;\n }\n return store.selectedLayoutIds().length > 0;\n }\n\n // Allow execution if there are unapplied filters\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n if (hasBeenExecuted && JSON.stringify(currentContext) !== JSON.stringify(lastApplied)) {\n return true;\n }\n\n // Allow execution if report hasn't been executed yet\n if (!hasBeenExecuted) {\n return true;\n }\n\n // Otherwise, don't allow execution\n return false;\n }),\n hasMultipleLayouts: computed(() => {\n const report = store.reportDefinition();\n const freeze = store.freeze();\n if (store.frozen() && freeze?.dataSources?.length) {\n return freeze.dataSources.length > 1;\n }\n return (report?.layouts?.length ?? 0) > 1;\n }),\n\n title: computed(() => store.reportDefinition()?.title ?? '@report-management:report-viewer.components.report-viewer.title'),\n description: computed(() => store.reportDefinition()?.description ?? null),\n\n //#endregion\n\n //#region ---- Form Configuration ----\n\n formDefinition: computed<AXPDynamicFormDefinition>(() => {\n const report = store.reportDefinition();\n if (!report || !report.parameterGroups) {\n return { groups: [] } as AXPDynamicFormDefinition;\n }\n const formDefinition: AXPDynamicFormDefinition = {\n groups: report.parameterGroups.map((group: AXPReportParameterGroup) => ({\n name: group.name,\n title: group.title,\n description: group.description,\n parameters: group.parameters.map((param: AXPReportParameter) => {\n const editorType = param.widget.type ?? '';\n const widget = widgetRegistryService.getOptional(editorType);\n const filterType = widget?.defaultFilterWidgetName ?? editorType;\n // date-time / text filter aliases do not mount reliably in report filter forms;\n // keep the editor widget and enable filterMode instead.\n const useEditorFilter =\n editorType === 'date-time-editor' ||\n filterType === 'datetime-filter' ||\n editorType === 'text-editor' ||\n filterType === 'string-filter';\n const widgetType = useEditorFilter ? editorType || filterType : filterType;\n const rawDefault = param.widget.defaultValue ?? param.widget.options?.['defaultValue'];\n const resolvedDefault =\n rawDefault === undefined ? undefined : resolveReportFilterDefaultValue(rawDefault);\n return {\n path: param.path,\n title: param.title,\n description: param.description,\n visible: param.visible,\n badge: `{{ filter.getTitle(context.eval(\"${param.path}.operation.type\")) }}`,\n widget: {\n path: param.path,\n type: widgetType,\n ...(resolvedDefault !== undefined ? { defaultValue: resolvedDefault } : {}),\n options: {\n ...param.widget.options,\n clearButton: true,\n hasClearButton: true,\n ...(useEditorFilter ? { filterMode: true } : {}),\n },\n triggers: param.widget.triggers,\n\n }\n };\n }),\n })),\n };\n return formDefinition;\n }),\n\n //#endregion\n\n //#region ---- Layout Type Detection ----\n\n isTableLayout: computed(() => store.currentLayout()?.layout?.type === 'table'),\n isChartLayout: computed(() => store.currentLayout()?.layout?.type === 'chart'),\n isPdfLayout: computed(() => store.currentLayout()?.layout?.type === 'pdf'),\n\n //#endregion\n\n //#region ---- Filter States ----\n\n hasUnappliedFilters: computed(() => {\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n // If report has never been executed, don't show unapplied filters warning\n if (!hasBeenExecuted) {\n return false;\n }\n\n // If no filters have been applied yet, return true\n if (lastApplied === null) {\n return true;\n }\n\n // Check if current filters are different from last applied filters\n const currentKeys = Object.keys(currentContext);\n const lastKeys = Object.keys(lastApplied);\n\n if (currentKeys.length !== lastKeys.length) {\n return true;\n }\n\n // Check if any values are different\n for (const key of currentKeys) {\n if (currentContext[key] !== lastApplied[key]) {\n return true;\n }\n }\n\n return false;\n }),\n\n //#endregion\n\n //#region ---- Action States ----\n\n canSelectRows: computed(() => {\n const layout = store.currentLayout();\n return (\n layout?.layout?.type === 'table' &&\n layout.layout.options?.selectable?.mode &&\n layout.layout.options?.selectable?.mode !== 'none'\n );\n }),\n\n tableLayoutUserSettings: computed(() => {\n const settings = store.reportUserSettings();\n const layoutId = store.currentLayout()?.id;\n if (!settings || !layoutId) {\n return null;\n }\n return settings.layouts?.[layoutId]?.table ?? null;\n }),\n\n reportId: computed(() => store.reportDefinition()?.id ?? null),\n isFrozen: computed(() => store.frozen()),\n isBackgroundQueued: computed(() => store.backgroundQueued()),\n isBackgroundReportMode: computed(\n () => (store.reportDefinition()?.generation?.mode ?? 'interactive') === 'background',\n ),\n hasSelectedBackgroundLayouts: computed(() => store.selectedLayoutIds().length > 0),\n areParametersReadonly: computed(() => store.parametersReadonly() || store.frozen()),\n isBackgroundGenerateDisabled: computed(() => {\n if ((store.reportDefinition()?.generation?.mode ?? 'interactive') !== 'background') {\n return false;\n }\n return store.backgroundQueued() || store.selectedLayoutIds().length === 0;\n }),\n canSwitchLayout: computed(() => {\n if (store.frozen() && (store.freeze()?.dataSources?.length ?? 0) <= 1) {\n return false;\n }\n return (store.reportDefinition()?.layouts?.length ?? 0) > 1 && store.status() !== AXPPageStatus.Submitting;\n }),\n generationMode: computed(() => store.reportDefinition()?.generation?.mode ?? 'interactive'),\n\n //#endregion\n })),\n\n withMethods(\n (\n store,\n reportDefinitionService: AXPReportViewerService = inject(AXPReportViewerService),\n reportUserSettingsService: AXPReportViewerUserSettingsService = inject(AXPReportViewerUserSettingsService),\n queryService: AXPQueryService = inject(AXPQueryService),\n commandService: AXPCommandService = inject(AXPCommandService),\n userNotificationService = inject(AXP_USER_NOTIFICATION_SERVICE),\n translationService: AXTranslationService = inject(AXTranslationService),\n inboxConnector: AXPInAppInboxConnectorService | null = inject(AXPInAppInboxConnectorService, {\n optional: true,\n }),\n ) => {\n let activeFetchCount = 0;\n let activeGenerationWatchId: string | null = null;\n const BACKGROUND_GENERATION_POLL_MS = 3_000;\n\n const dismissReportGenerationInboxNotification = async (runId: string): Promise<void> => {\n const normalized = runId.trim();\n if (!normalized || !inboxConnector) {\n return;\n }\n try {\n await inboxConnector.dismissByCorrelationId(\n buildReportGenerationNotificationCorrelationId(normalized),\n );\n } catch {\n // Best-effort — the report viewer should still open.\n }\n };\n\n const openGeneratedReportFromNotification = async (runId: string): Promise<void> => {\n const report = store.reportDefinition();\n const normalizedRunId = runId.trim();\n if (!report?.id || !normalizedRunId) {\n return;\n }\n\n await dismissReportGenerationInboxNotification(normalizedRunId);\n\n await commandService.execute(OPEN_REPORT_VIEWER_COMMAND, {\n reportId: report.id,\n runId: normalizedRunId,\n });\n };\n\n const showGenerationNotification = async (options: {\n color: 'success' | 'danger' | 'warning';\n titleKey: string;\n bodyKey: string;\n icon: string;\n runId?: string;\n showOpenAction?: boolean;\n }): Promise<void> => {\n const runId = options.runId?.trim();\n const showOpenAction = options.showOpenAction === true && !!runId;\n const toastActions = showOpenAction\n ? [\n {\n text: await translationService.translateAsync(\n '@report-management:report-generation.notifications.actions.open-viewer',\n ),\n color: 'primary' as const,\n onClick: () => openGeneratedReportFromNotification(runId!),\n },\n ]\n : undefined;\n\n await userNotificationService.notify({\n correlationId: runId\n ? buildReportGenerationNotificationCorrelationId(runId)\n : `report-generation-ui:${options.titleKey}`,\n title: await translationService.translateAsync(options.titleKey),\n body: await translationService.translateAsync(options.bodyKey),\n icon: options.icon,\n delivery: {\n toast: {\n color: options.color,\n location: 'bottom-center',\n closeButton: true,\n timeOut: showOpenAction ? 8_000 : 3_000,\n timeOutProgress: true,\n showActions: showOpenAction,\n },\n },\n toastActions,\n });\n };\n\n const showGenerationReadyNotification = async (runId: string): Promise<void> => {\n await showGenerationNotification({\n color: 'success',\n icon: 'fa-light fa-circle-check',\n titleKey: '@report-management:report-generation.notifications.complete.title',\n bodyKey: '@report-management:report-generation.notifications.complete.body',\n runId,\n showOpenAction: false,\n });\n };\n\n const showGenerationFailedNotification = async (): Promise<void> => {\n await showGenerationNotification({\n color: 'danger',\n icon: 'fa-light fa-circle-exclamation',\n titleKey: '@report-management:report-generation.notifications.failed.title',\n bodyKey: '@report-management:report-generation.notifications.failed.body',\n });\n };\n\n const api = {\n loadFrozenRun: async (_runId: string): Promise<void> => {},\n startBackgroundGenerationWatch: async (_requestId: string): Promise<void> => {},\n };\n\n api.loadFrozenRun = async (runId: string): Promise<void> => {\n patchState(store, { status: AXPPageStatus.Processing, error: null });\n try {\n const result = await queryService.fetch<{ id: string }, AXPReportViewerFreeze>(\n AXMReportManagementQueryKeys.ReportGeneration.GetViewerFreeze,\n { id: runId },\n );\n const freeze = runtimeQueryPayloadData(result);\n if (!result?.success || !freeze) {\n patchState(store, {\n error:\n commandMessageTextForError(result?.message?.text) ||\n '@report-management:report-generation.errors.freeze-not-found',\n });\n return;\n }\n\n let report = store.reportDefinition();\n if (freeze.definition) {\n report = {\n id: freeze.reportId,\n title: freeze.definition.title,\n categoryIds: report?.categoryIds ?? [],\n parameterGroups: report?.parameterGroups ?? [],\n layouts: freeze.definition.layouts,\n defaultLayoutId: freeze.definition.defaultLayoutId,\n generation: report?.generation,\n };\n } else if (!report) {\n report = (await reportDefinitionService.getReportById(freeze.reportId)) ?? null;\n }\n if (!report) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-load',\n });\n return;\n }\n\n const defaultLayout =\n report.layouts.find((layout) => layout.id === freeze.definition?.defaultLayoutId) ||\n report.layouts.find((layout) => layout.id === freeze.dataSources[0]?.layoutId) ||\n report.layouts[0];\n\n patchState(store, {\n reportDefinition: report,\n currentLayout: defaultLayout,\n filterContext: freeze.parameters ?? {},\n lastAppliedFilterContext: freeze.parameters ?? {},\n allowFetchData: true,\n shouldExecuteReport: true,\n hasBeenExecuted: true,\n executionRequestId: store.executionRequestId() + 1,\n runId,\n frozen: true,\n freeze,\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n parametersReadonly: true,\n status: AXPPageStatus.Idle,\n });\n } catch (error) {\n patchState(store, {\n error:\n error instanceof Error\n ? error.message\n : '@report-management:report-generation.errors.freeze-not-found',\n });\n } finally {\n patchState(store, { status: AXPPageStatus.Idle });\n }\n };\n\n api.startBackgroundGenerationWatch = async (requestId: string): Promise<void> => {\n activeGenerationWatchId = requestId;\n while (activeGenerationWatchId === requestId) {\n if (!store.backgroundQueued() || store.backgroundGenerationRequestId() !== requestId) {\n return;\n }\n\n await new Promise((resolve) => setTimeout(resolve, BACKGROUND_GENERATION_POLL_MS));\n if (activeGenerationWatchId !== requestId) {\n return;\n }\n\n try {\n const result = await queryService.fetch<{ id: string }, AXMReportGenerationRequest>(\n AXMReportManagementQueryKeys.ReportGeneration.Get,\n { id: requestId },\n );\n const request = runtimeQueryPayloadData(result);\n if (!request || activeGenerationWatchId !== requestId) {\n continue;\n }\n\n if (request.status === 'completed') {\n activeGenerationWatchId = null;\n const inlineWatchActive = store.inlineGenerationWatchActive();\n patchState(store, {\n backgroundQueued: false,\n inlineGenerationWatchActive: false,\n ...(inlineWatchActive ? {} : { backgroundGenerationRequestId: null }),\n });\n if (!inlineWatchActive) {\n return;\n }\n await api.loadFrozenRun(requestId);\n if (!store.error()) {\n await showGenerationReadyNotification(requestId);\n }\n return;\n }\n\n if (request.status === 'failed' || request.status === 'cancelled') {\n activeGenerationWatchId = null;\n patchState(store, {\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n status: AXPPageStatus.Error,\n error: '@report-management:report-generation.notifications.failed.body',\n });\n await showGenerationFailedNotification();\n return;\n }\n } catch {\n // Keep polling while the run is still active.\n }\n }\n };\n\n const generateInBackground = async (): Promise<void> => {\n const report = store.reportDefinition();\n const isBackgroundMode = (report?.generation?.mode ?? 'interactive') === 'background';\n const layoutIds = isBackgroundMode\n ? store.selectedLayoutIds()\n : store.currentLayout()\n ? [store.currentLayout()!.id]\n : [];\n if (!report || layoutIds.length === 0) {\n patchState(store, {\n error:\n layoutIds.length === 0\n ? '@report-management:report-generation.errors.no-layouts-selected'\n : '@report-management:report-viewer.messages.error.report-or-layout-not-found',\n });\n return;\n }\n\n patchState(store, { status: AXPPageStatus.Submitting, error: null });\n if (store.frozen()) {\n patchState(store, {\n frozen: false,\n freeze: null,\n runId: null,\n hasBeenExecuted: false,\n allowFetchData: false,\n parametersReadonly: false,\n });\n }\n try {\n const result = await commandService.executeRemote<\n Record<string, unknown>,\n AXPReportGenerationCreateResult\n >(AXMReportManagementCommandKeys.ReportGeneration.Create, {\n reportId: report.id,\n layoutIds,\n layoutId: layoutIds[0],\n parameters: store.filterContext(),\n trigger: 'manual',\n suppressNotificationOnComplete: true,\n });\n if (!result?.success) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error:\n commandMessageTextForError(result?.message?.text) ||\n '@report-management:report-generation.errors.create-failed',\n });\n return;\n }\n const createResult = runtimeCommandPayloadData(result);\n const requestId = createResult?.id?.trim();\n if (!createResult || !requestId) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error: '@report-management:report-generation.errors.create-failed',\n });\n return;\n }\n\n if (createResult.status === 'completed') {\n patchState(store, { status: AXPPageStatus.Idle, error: null });\n await api.loadFrozenRun(requestId);\n if (!store.error()) {\n await showGenerationReadyNotification(requestId);\n }\n return;\n }\n\n patchState(store, {\n status: AXPPageStatus.Submitted,\n backgroundQueued: true,\n backgroundGenerationRequestId: requestId,\n inlineGenerationWatchActive: true,\n error: null,\n });\n\n if (createResult.deduplicated) {\n await showGenerationNotification({\n color: 'warning',\n icon: 'fa-light fa-triangle-exclamation',\n titleKey: '@report-management:report-generation.messages.deduplicated-title',\n bodyKey: '@report-management:report-generation.messages.deduplicated-body',\n });\n } else {\n await showGenerationNotification({\n color: 'success',\n icon: 'fa-light fa-clock',\n titleKey: '@report-management:report-generation.messages.queued-title',\n bodyKey: '@report-management:report-generation.messages.queued-body',\n });\n }\n\n void api.startBackgroundGenerationWatch(requestId);\n } catch (error) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error:\n error instanceof Error\n ? error.message\n : '@report-management:report-generation.errors.create-failed',\n });\n }\n };\n\n const releaseInlineNotificationWatch = async (): Promise<void> => {\n const requestId = store.backgroundGenerationRequestId()?.trim();\n activeGenerationWatchId = null;\n patchState(store, {\n inlineGenerationWatchActive: false,\n backgroundQueued: false,\n });\n if (!requestId) {\n return;\n }\n try {\n await commandService.executeRemote<{ id: string }, void>(\n AXMReportManagementCommandKeys.ReportGeneration.ReleaseInlineWatch,\n { id: requestId },\n );\n } catch {\n // Best-effort — completion notify re-reads the flag from storage.\n }\n };\n\n const executeReport = async (): Promise<void> => {\n try {\n if (\n store.status() === AXPPageStatus.Processing ||\n store.status() === AXPPageStatus.Submitting\n ) {\n return;\n }\n\n const report = store.reportDefinition();\n if ((report?.generation?.mode ?? 'interactive') === 'background') {\n await generateInBackground();\n return;\n }\n\n if (store.frozen()) {\n patchState(store, {\n allowFetchData: true,\n shouldExecuteReport: true,\n executionRequestId: store.executionRequestId() + 1,\n hasBeenExecuted: true,\n });\n return;\n }\n\n const layout = store.currentLayout();\n if (!report || !layout) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.report-or-layout-not-found',\n });\n return;\n }\n\n patchState(store, {\n status: AXPPageStatus.Submitting,\n error: null,\n allowFetchData: true,\n shouldExecuteReport: true,\n executionRequestId: store.executionRequestId() + 1,\n lastAppliedFilterContext: { ...store.filterContext() }, // Mark current filters as applied\n hasBeenExecuted: true, // Mark that report has been executed at least once\n });\n\n patchState(store, {\n status: AXPPageStatus.Submitted,\n error: null,\n });\n } catch (error) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error: error instanceof Error ? error.message : '@report-management:report-viewer.messages.error.unexpected-execution',\n });\n }\n };\n\n const buildSummaryFromLayout = (layoutDef: AXPReportLayoutDefinition): unknown[] | undefined => {\n const tableLayout = layoutDef.layout as AXPReportTableLayout | undefined;\n if (tableLayout?.type !== 'table' || !Array.isArray(tableLayout.summary)) {\n return undefined;\n }\n const footer = tableLayout.summary.filter((s) => s.displayIn === 'reportFooter');\n return footer.length > 0 ? footer : undefined;\n };\n\n const fetchData = async (query?: AXDataSourceQuery): Promise<AXPRuntimeQueryResult<unknown> | null> => {\n const report = store.reportDefinition();\n const layout = store.currentLayout();\n if (!report || !layout) {\n return null;\n }\n\n if (store.frozen()) {\n const freeze = store.freeze();\n const layoutId = layout.id;\n const source = freeze?.dataSources.find((item) => item.layoutId === layoutId) ?? freeze?.dataSources[0];\n if (!source?.result) {\n return null;\n }\n const collection = runtimeQueryCollectionData(source.result);\n if (!collection) {\n return source.result;\n }\n const skip = query?.skip ?? 0;\n const take = query?.take ?? collection.items.length;\n return {\n ...source.result,\n success: true,\n kind: 'collection',\n data: {\n ...collection,\n items: collection.items.slice(skip, skip + take),\n },\n } as AXPRuntimeQueryResult<unknown>;\n }\n\n if (activeFetchCount > 0) {\n return null;\n }\n\n activeFetchCount++;\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n let nextStatus: AXPPageStatus = AXPPageStatus.Idle;\n try {\n const dataSource = layout.dataSource;\n if (!dataSource || dataSource.type !== 'query' || !dataSource.name) {\n nextStatus = AXPPageStatus.Error;\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-execute',\n });\n return null;\n }\n\n const filterClause = convertContextDataToFilterClause(store.filterContext());\n\n const runtimeSort: AXPQuerySort[] | undefined = query?.sort?.length\n ? query.sort.map((s) => ({\n name: s.field,\n dir: s.dir as 'asc' | 'desc',\n }))\n : dataSource.sortFields;\n\n const summary = buildSummaryFromLayout(layout);\n const queryInput = {\n skip: query?.skip ?? 0,\n take: query?.take ?? null,\n filter: filterClause,\n ...(runtimeSort?.length\n ? {\n sort: runtimeSort.map((s) => ({\n field: s.name,\n dir: s.dir as 'asc' | 'desc',\n })),\n }\n : {}),\n ...(summary ? { summary } : {}),\n };\n\n const queryResult = await queryService.fetch(dataSource.name, queryInput);\n if (!queryResult?.success) {\n nextStatus = AXPPageStatus.Error;\n patchState(store, {\n error:\n commandMessageTextForError(queryResult?.message?.text) ||\n '@report-management:report-viewer.messages.error.failed-to-execute',\n });\n return null;\n }\n return queryResult;\n } catch (error) {\n nextStatus = AXPPageStatus.Error;\n const message =\n error instanceof Error && error.message\n ? error.message\n : '@report-management:report-viewer.messages.error.failed-to-execute';\n patchState(store, {\n error: message,\n });\n console.error('Error executing report:', error);\n return null;\n } finally {\n activeFetchCount--;\n patchState(store, {\n status: nextStatus,\n });\n }\n };\n\n return {\n //#region ---- Report Loading ----\n\n async loadReport(reportId: string): Promise<void> {\n await releaseInlineNotificationWatch();\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n try {\n const report = await reportDefinitionService.getReportById(reportId);\n if (report) {\n // Configure parameter widgets with proper paths\n report.parameterGroups.forEach((group) => {\n group.parameters.forEach((param) => {\n param.widget.path = param.path;\n });\n });\n\n const userSettings = await reportUserSettingsService.load(reportId);\n\n const defaultLayout =\n report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n\n const savedLayout = userSettings?.activeLayoutId\n ? report.layouts.find((l) => l.id === userSettings.activeLayoutId)\n : undefined;\n\n patchState(store, {\n reportDefinition: report,\n currentLayout: savedLayout ?? defaultLayout,\n filterContext: collectReportParameterDefaults(report.parameterGroups),\n allowFetchData: false,\n hasBeenExecuted: false,\n executionRequestId: 0,\n reportUserSettings: userSettings,\n runId: null,\n frozen: false,\n freeze: null,\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n parametersReadonly: false,\n selectedLayoutIds: report.layouts.map((layout) => layout.id),\n });\n }\n } catch (error) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-load',\n });\n console.error('Error loading report:', error);\n } finally {\n patchState(store, {\n status: AXPPageStatus.Idle,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Layout Management ----\n\n switchLayout(layoutId: string): void {\n const report = store.reportDefinition();\n if (!report) return;\n\n const layout = report.layouts.find((l: AXPReportLayoutDefinition) => l.id === layoutId);\n if (layout) {\n patchState(store, {\n currentLayout: layout,\n reportUserSettings: {\n ...(store.reportUserSettings() ?? {}),\n activeLayoutId: layoutId,\n },\n });\n void reportUserSettingsService.saveActiveLayoutId(report.id, layoutId);\n }\n },\n\n isBackgroundLayoutSelected(layoutId: string): boolean {\n return store.selectedLayoutIds().includes(layoutId);\n },\n\n setBackgroundLayoutSelected(layoutId: string, selected: boolean): void {\n const current = store.selectedLayoutIds();\n if (selected) {\n if (current.includes(layoutId)) {\n return;\n }\n patchState(store, { selectedLayoutIds: [...current, layoutId] });\n return;\n }\n patchState(store, {\n selectedLayoutIds: current.filter((id) => id !== layoutId),\n });\n },\n\n async saveTableColumnOrder(columns: AXPReportTableColumnViewModel[]): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n await reportUserSettingsService.saveTableColumnOrder(\n reportId,\n layoutId,\n toColumnUserState(columns),\n );\n patchState(store, {\n reportUserSettings: mergeTableColumnsIntoSettings(\n store.reportUserSettings(),\n layoutId,\n toColumnUserState(columns),\n ),\n });\n },\n\n async saveTableColumnWidth(\n field: string,\n width: number,\n columns: AXPReportTableColumnViewModel[],\n ): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n const columnState = toColumnUserState(columns);\n await reportUserSettingsService.saveTableColumnWidth(reportId, layoutId, field, width, columnState);\n patchState(store, {\n reportUserSettings: mergeTableColumnsIntoSettings(store.reportUserSettings(), layoutId, columnState),\n });\n },\n\n async saveTableSorts(sorts: AXPQuerySort[]): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n await reportUserSettingsService.saveTableSorts(reportId, layoutId, sorts);\n patchState(store, {\n reportUserSettings: mergeTableSortsIntoSettings(store.reportUserSettings(), layoutId, sorts),\n });\n },\n\n async saveTablePageSize(pageSize: number): Promise<void> {\n const reportId = store.reportDefinition()?.id;\n const layoutId = store.currentLayout()?.id;\n if (!reportId || !layoutId) {\n return;\n }\n await reportUserSettingsService.saveTablePageSize(reportId, layoutId, pageSize);\n patchState(store, {\n reportUserSettings: mergeTablePageSizeIntoSettings(store.reportUserSettings(), layoutId, pageSize),\n });\n },\n\n //#endregion\n\n //#region ---- Data Execution ----\n\n executeReport,\n fetchData,\n generateInBackground,\n releaseInlineNotificationWatch,\n nudgeFetch(): void {\n if (!store.allowFetchData()) {\n return;\n }\n patchState(store, { executionRequestId: store.executionRequestId() + 1 });\n },\n loadFrozenRun: api.loadFrozenRun,\n\n //#endregion\n\n //#region ---- Drill View ----\n\n /**\n * Applies the same layout in drill-down mode: hides group-by columns, keeps summary and data source.\n */\n applyDrillView(options: { hideColumnFields: string[] }): void {\n const layout = store.currentLayout();\n if (!layout || layout.layout.type !== 'table') {\n return;\n }\n\n const tableLayout = layout.layout as AXPReportTableLayout;\n const hiddenFields = new Set(options.hideColumnFields);\n\n const nextTableLayout: AXPReportTableLayout = {\n ...tableLayout,\n columns: tableLayout.columns.map((column) =>\n hiddenFields.has(column.field) ? { ...column, visible: false } : column,\n ),\n groupBy: undefined,\n actions: [],\n };\n\n patchState(store, {\n currentLayout: {\n ...layout,\n layout: nextTableLayout,\n },\n });\n },\n\n //#endregion\n\n //#region ---- Filter Management ----\n\n updateFilterContext(context: Record<string, any>): void {\n patchState(store, {\n filterContext: { ...store.filterContext(), ...context },\n shouldExecuteReport: false, // Reset execution flag when filters change\n });\n },\n\n clearFilters(): void {\n patchState(store, {\n allowFetchData: false,\n shouldExecuteReport: false,\n filterContext: collectReportParameterDefaults(store.reportDefinition()?.parameterGroups),\n lastAppliedFilterContext: null, // Reset applied filters when clearing\n hasBeenExecuted: false, // Reset execution state when clearing filters\n });\n },\n\n resetFilters(): void {\n patchState(store, {\n allowFetchData: false,\n });\n },\n\n //#endregion\n\n //#region ---- Export Management ----\n\n async exportReport(format: string): Promise<void> {\n const layout = store.currentLayout();\n if (!layout?.export) {\n console.warn('@report-management:report-viewer.messages.warnings.export-not-configured');\n return;\n }\n\n try {\n // Export logic would go here\n // This would typically call a different command for export\n console.log(`Exporting report in ${format} format`);\n } catch (error) {\n console.error('Error exporting report:', error);\n }\n },\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n refresh(): Promise<void> {\n return executeReport();\n },\n\n clearError(): void {\n patchState(store, {\n error: null,\n });\n },\n\n clearExecutionState(): void {\n patchState(store, {\n hasBeenExecuted: false,\n allowFetchData: false,\n shouldExecuteReport: false,\n executionRequestId: 0,\n });\n },\n\n cancel(): void {\n patchState(store, {\n status: AXPPageStatus.Idle,\n hasBeenExecuted: false,\n error: null,\n });\n //TODO: Cancel the report execution\n },\n\n reset(): void {\n patchState(store, {\n reportDefinition: null,\n currentLayout: null,\n filterContext: {},\n allowFetchData: false,\n shouldExecuteReport: false,\n executionRequestId: 0,\n lastAppliedFilterContext: null,\n hasBeenExecuted: false,\n status: AXPPageStatus.Idle,\n error: null,\n reportUserSettings: null,\n runId: null,\n frozen: false,\n freeze: null,\n backgroundQueued: false,\n backgroundGenerationRequestId: null,\n inlineGenerationWatchActive: false,\n parametersReadonly: false,\n });\n },\n\n //#endregion\n };\n },\n ),\n\n withHooks(\n (\n store,\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n settingsService = inject(AXPSettingsService),\n ) => {\n const settingSubs = new Subscription();\n\n const syncShowRowIndexColumn = async (): Promise<void> => {\n try {\n const value = await settingsService.get<boolean>(AXPCommonSettings.ShowRowIndexColumn);\n patchState(store, { showRowIndexColumn: value ?? false });\n } catch {\n patchState(store, { showRowIndexColumn: false });\n }\n };\n\n return {\n async onInit() {\n translationService.langChanges$.subscribe(() => {\n // Handle language change if needed\n });\n\n localeService.profileChanged$.subscribe(() => {\n // Handle locale change if needed\n });\n\n void syncShowRowIndexColumn();\n settingSubs.add(settingsService.onLoaded.subscribe(() => void syncShowRowIndexColumn()));\n settingSubs.add(settingsService.onChanged.subscribe(() => void syncShowRowIndexColumn()));\n },\n onDestroy() {\n settingSubs.unsubscribe();\n },\n };\n },\n ),\n);\n\n//#region ---- Settings Merge Helpers ----\n\nfunction mergeTableColumnsIntoSettings(\n settings: AXPReportViewerUserSettings | null,\n layoutId: string,\n columns: { field: string; width?: number }[],\n): AXPReportViewerUserSettings {\n const base = settings ?? {};\n return {\n ...base,\n layouts: {\n ...base.layouts,\n [layoutId]: {\n ...base.layouts?.[layoutId],\n table: {\n ...base.layouts?.[layoutId]?.table,\n columns,\n },\n },\n },\n };\n}\n\nfunction mergeTableSortsIntoSettings(\n settings: AXPReportViewerUserSettings | null,\n layoutId: string,\n sorts: AXPQuerySort[],\n): AXPReportViewerUserSettings {\n const base = settings ?? {};\n return {\n ...base,\n layouts: {\n ...base.layouts,\n [layoutId]: {\n ...base.layouts?.[layoutId],\n table: {\n ...base.layouts?.[layoutId]?.table,\n sorts,\n },\n },\n },\n };\n}\n\nfunction mergeTablePageSizeIntoSettings(\n settings: AXPReportViewerUserSettings | null,\n layoutId: string,\n pageSize: number,\n): AXPReportViewerUserSettings {\n const base = settings ?? {};\n return {\n ...base,\n layouts: {\n ...base.layouts,\n [layoutId]: {\n ...base.layouts?.[layoutId],\n table: {\n ...base.layouts?.[layoutId]?.table,\n pageSize,\n },\n },\n },\n };\n}\n\n//#endregion\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDonutChartComponent, AXDonutChartOption, AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartComponent, AXLineChartOption, AXLineChartValue } from '@acorex/charts/line-chart';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked } from '@angular/core';\nimport {\n AXBarChartReportMapper,\n AXLineChartReportMapper,\n AXPieChartReportMapper,\n queryResultToChartSeries,\n} from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '@acorex-platform/module-report-management-client/contracts';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-chart-view',\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXDonutChartComponent,\n AXLineChartComponent,\n AXChartLegendComponent,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-chart-view w-full h-full flex flex-col',\n },\n templateUrl: './report-chart-view.component.html',\n styleUrl: './report-chart-view.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPReportChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch chart data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n void untracked(() => this.vm.fetchData()).then((result) => {\n if (!result) {\n return;\n }\n const series = queryResultToChartSeries(result, this.dataMapping());\n const seriesColors = this.chartOptions()?.styling?.seriesColors;\n switch (this.chartType()) {\n case 'bar': {\n // Mapper returns flat bars for report series (not clustered).\n const bars = AXBarChartReportMapper(series) as Array<{\n id: string;\n label: string;\n value: number;\n color?: string;\n }>;\n this.barChartData.set(applySeriesColors(bars, seriesColors));\n break;\n }\n case 'doughnut': {\n this.donutChartData.set(applySeriesColors(AXPieChartReportMapper(series), seriesColors));\n break;\n }\n case 'line':\n default: {\n this.lineChartData.set(AXLineChartReportMapper(series));\n break;\n }\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n protected readonly legendOptions = signal<AXChartLegendOptions>({\n mode: 'vertical',\n showValues: true,\n showPercentage: true,\n interactive: true,\n });\n\n protected barChartData = signal<AXBarChartValue>([]);\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected donutChartData = signal<AXDonutChartValue>([]);\n\n protected readonly donutChartOptions = signal<AXDonutChartOption>({\n totalLabel: 'Total',\n showTooltip: true,\n showDataLabels: false,\n donutWidth: 28,\n cornerRadius: 4,\n animationDuration: 800,\n animationEasing: 'cubic-out',\n });\n\n protected lineChartData = signal<AXLineChartValue>([]);\n protected lineChartOptions = signal<AXLineChartOption>({});\n\n /**\n * Check if bar chart data has items\n */\n protected readonly hasBarChartData = computed(() => {\n const data = this.barChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if donut chart data has items\n */\n protected readonly hasDonutChartData = computed(() => {\n const data = this.donutChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if line chart data has items\n */\n protected readonly hasLineChartData = computed(() => {\n const data = this.lineChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if chart has any data (for any chart type)\n */\n protected readonly hasChartData = computed(() => {\n return this.hasBarChartData() || this.hasDonutChartData() || this.hasLineChartData();\n });\n\n /**\n * Check if report has been executed and has no data\n */\n protected readonly showNoDataState = computed(() => {\n return this.vm.hasBeenExecuted() && !this.hasChartData();\n });\n\n //#endregion\n}\n\n//#region ----- Series color helpers -----\n\nfunction applySeriesColors<T extends { id: string; label?: string; color?: string }>(\n items: T[],\n seriesColors?: Record<string, string>,\n): T[] {\n if (!seriesColors || Object.keys(seriesColors).length === 0) {\n return items;\n }\n return items.map((item) => {\n const color = seriesColors[item.id] ?? (item.label ? seriesColors[item.label] : undefined);\n return color ? { ...item, color } : item;\n });\n}\n\n//#endregion\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading flex flex-col items-center justify-center h-full gap-6 p-8\">\n <div class=\"spinner spin w-10 h-10\"></div>\n <div class=\"__loading-text text-sm opacity-70\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\"\n >\n </axp-state-message>\n } @else if (isChartReady() && showNoDataState()) {\n <!-- No Data State -->\n <axp-state-message\n icon=\"fa-light fa-chart-pie\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.description'\"\n >\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <section\n class=\"__chart-container overflow-auto md:overflow-hidden rounded-2xl border h-full flex flex-col\"\n >\n @if (chartLayout()?.header) {\n <header\n class=\"__chart-header p-4 md:p-6 border-b flex flex-col sm:flex-row gap-2 sm:items-center sm:justify-between\"\n >\n <h3 class=\"__chart-title text-base md:text-lg font-semibold truncate\">\n {{ chartLayout()?.header?.title }}\n </h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date text-xs md:text-sm opacity-70 font-medium flex-shrink-0\">\n {{ '@general:common.date.today' | translate | async }}\n </div>\n }\n </header>\n }\n\n <div class=\"__chart-body flex min-h-0 flex-1 flex-col p-3 md:p-6\">\n @switch (chartType()) {\n @case ('bar') {\n <!-- ----- Bar chart with side legend ----- -->\n <div class=\"__chart-wrapper flex h-full min-h-0 w-full flex-col items-center gap-4 lg:flex-row lg:gap-6\">\n <div\n class=\"__chart-content flex h-full min-h-[250px] w-full flex-1 items-center justify-center overflow-hidden md:min-h-[300px]\"\n >\n <ax-bar-chart #barChart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n @if (hasBarChartData()) {\n <div class=\"__chart-legend w-fit flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"barChart\"></ax-chart-legend>\n </div>\n }\n </div>\n }\n @case ('doughnut') {\n <!-- ----- Donut in a square box; vertical legend on the right (same as bar) ----- -->\n <div class=\"__chart-wrapper flex h-full min-h-0 w-full flex-col items-center gap-4 lg:flex-row lg:gap-6\">\n <div\n class=\"__chart-content flex h-full min-h-[250px] w-full flex-1 items-center justify-center overflow-hidden md:min-h-[300px]\"\n >\n <div\n class=\"__chart-radial relative aspect-square h-full max-h-full w-auto max-w-full min-h-64 min-w-64 overflow-hidden\"\n >\n <ax-donut-chart\n #donutChart\n [data]=\"donutChartData()\"\n [options]=\"donutChartOptions()\"\n ></ax-donut-chart>\n </div>\n </div>\n @if (hasDonutChartData()) {\n <div class=\"__chart-legend w-fit flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"donutChart\"></ax-chart-legend>\n </div>\n }\n </div>\n }\n @default {\n <!-- ----- Line chart with side legend ----- -->\n <div class=\"__chart-wrapper flex h-full min-h-0 w-full flex-col items-center gap-4 lg:flex-row lg:gap-6\">\n <div\n class=\"__chart-content flex h-full min-h-[250px] w-full flex-1 items-center justify-center overflow-hidden md:min-h-[300px]\"\n >\n <ax-line-chart #lineChart [data]=\"lineChartData()\" [options]=\"lineChartOptions()\"></ax-line-chart>\n </div>\n @if (hasLineChartData()) {\n <div class=\"__chart-legend w-fit flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"lineChart\"></ax-chart-legend>\n </div>\n }\n </div>\n }\n }\n </div>\n\n @if (chartLayout()?.footer) {\n <footer class=\"__chart-footer p-4 md:p-6 border-t\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"$safeNavigationMigration(chartLayout()?.footer?.customHtml)\"></div>\n }\n </footer>\n }\n </section>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\"\n >\n </axp-state-message>\n }\n</ng-container>\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { AXPReportPdfLayout } from '@acorex-platform/module-report-management-client/contracts';\nimport { queryResultToPdfSource } from '../../../../reports/report-mapper';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-pdf-view',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-pdf-view w-full h-full flex flex-col',\n },\n templateUrl: './report-pdf-view.component.html',\n styleUrls: ['./report-pdf-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportPdfViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n private readonly sanitizer = inject(DomSanitizer);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current PDF layout configuration\n */\n protected readonly pdfLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n });\n\n /**\n * PDF layout options\n */\n protected readonly pdfOptions = computed(() => {\n const pdfLayout = this.pdfLayout();\n return pdfLayout?.options || {};\n });\n\n /**\n * PDF source URL (sanitized for embed)\n */\n protected readonly pdfSource = computed<SafeResourceUrl | null>(() => {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return null;\n }\n\n // Handle URL\n if (pdfData.url) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(pdfData.url);\n }\n\n // Handle base64\n if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n return this.sanitizer.bypassSecurityTrustResourceUrl(base64Data);\n }\n\n // Handle blob\n if (pdfData.blob) {\n const blobUrl = URL.createObjectURL(pdfData.blob);\n return this.sanitizer.bypassSecurityTrustResourceUrl(blobUrl);\n }\n\n return null;\n });\n\n /**\n * PDF filename for download\n */\n protected readonly pdfFilename = computed(() => {\n const pdfData = this.pdfData();\n return pdfData?.filename || 'report.pdf';\n });\n\n /**\n * PDF embed height\n */\n protected readonly embedHeight = computed(() => {\n const options = this.pdfOptions();\n return options.height || '100%';\n });\n\n /**\n * Check if PDF is ready to render\n */\n protected readonly isPdfReady = computed(() => {\n return !!this.pdfSource();\n });\n\n /**\n * Check if download button should be shown\n */\n protected readonly showDownloadButton = computed(() => {\n const options = this.pdfOptions();\n return options.showDownloadButton !== false; // Default to true\n });\n\n /**\n * Check if print button should be shown\n */\n protected readonly showPrintButton = computed(() => {\n const options = this.pdfOptions();\n return options.showPrintButton !== false; // Default to true\n });\n\n /**\n * Check if zoom controls should be shown\n */\n protected readonly showZoomControls = computed(() => {\n const options = this.pdfOptions();\n return options.showZoomControls !== false; // Default to true\n });\n\n /**\n * Check if fullscreen button should be shown\n */\n protected readonly showFullscreenButton = computed(() => {\n const options = this.pdfOptions();\n return options.showFullscreenButton !== false; // Default to true\n });\n\n /**\n * Current zoom level\n */\n protected readonly currentZoom = signal<number>(100);\n\n /**\n * PDF data from execution result\n */\n protected readonly pdfData = signal<{ url?: string; base64?: string; blob?: Blob; filename?: string } | null>(null);\n\n /**\n * Fullscreen state\n */\n protected readonly isFullscreen = signal<boolean>(false);\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch PDF data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.pdfLayout()) {\n void untracked(() => this.vm.fetchData()).then((result) => {\n if (!result) {\n return;\n }\n const pdfResult = queryResultToPdfSource(result);\n this.pdfData.set(pdfResult);\n if (pdfResult) {\n const options = this.pdfOptions();\n if (options.defaultZoom) {\n this.currentZoom.set(options.defaultZoom);\n }\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Methods ----\n\n /**\n * Handle download PDF\n */\n public downloadPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n let filename = this.pdfFilename();\n let shouldRevokeUrl = false;\n\n if (pdfData.url) {\n // For URL, create a temporary link\n url = pdfData.url;\n } else if (pdfData.base64) {\n // Convert base64 to blob and create URL\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64.split(',')[1]\n : pdfData.base64;\n const byteCharacters = atob(base64Data);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/pdf' });\n url = URL.createObjectURL(blob);\n shouldRevokeUrl = true;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n shouldRevokeUrl = true;\n } else {\n return;\n }\n\n // Create download link\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Clean up blob URL if created\n if (shouldRevokeUrl) {\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }\n }\n\n /**\n * Handle print PDF\n */\n public printPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n\n if (pdfData.url) {\n url = pdfData.url;\n } else if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n url = base64Data;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n } else {\n return;\n }\n\n // Open PDF in new window for printing\n const printWindow = window.open(url, '_blank');\n if (printWindow) {\n printWindow.onload = () => {\n printWindow.print();\n };\n }\n }\n\n /**\n * Handle zoom in\n */\n protected zoomIn(): void {\n const current = this.currentZoom();\n if (current < 500) {\n this.currentZoom.set(Math.min(current + 25, 500));\n }\n }\n\n /**\n * Handle zoom out\n */\n protected zoomOut(): void {\n const current = this.currentZoom();\n if (current > 25) {\n this.currentZoom.set(Math.max(current - 25, 25));\n }\n }\n\n /**\n * Handle zoom reset\n */\n protected zoomReset(): void {\n const options = this.pdfOptions();\n this.currentZoom.set(options.defaultZoom || 100);\n }\n\n /**\n * Handle fullscreen toggle\n */\n protected toggleFullscreen(): void {\n const isFullscreen = this.isFullscreen();\n this.isFullscreen.set(!isFullscreen);\n }\n\n //#endregion\n}\n\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading flex flex-col items-center justify-center h-full gap-6 p-8\">\n <div class=\"spinner spin w-10 h-10\"></div>\n <div class=\"__loading-text text-sm opacity-70\">\n {{ t('@report-management:report-viewer.components.pdf.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isPdfReady()) {\n <!-- PDF Embed Only -->\n <embed class=\"__pdf-embed w-full h-full\" [src]=\"pdfSource()\" type=\"application/pdf\" />\n } @else {\n <!-- No PDF Data State -->\n <axp-state-message icon=\"fa-light fa-file-pdf\"\n [title]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.description'\">\n </axp-state-message>\n }\n</ng-container>","import { AXPSystemActionType, getSystemActions, runtimeQueryCollectionData } from '@acorex-platform/framework-shared/core';\nimport { AXPQuerySort } from '@acorex-platform/framework-shared/entity';\nimport {\n AXColumnsOrderChangedEvent,\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowDbClick,\n AXRowCommandItem,\n AXRowCommandItemClickEvent,\n onColumnSizeChangedEvent,\n} from '@acorex/components/data-table';\nimport { AXDataPagerChangedEvent } from '@acorex/components/data-pager';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\nimport {\n AXPQueryDataSource,\n AXPReportTableLayout,\n AXPReportTableLayoutRowAction,\n AXPReportTableSummaryResult,\n} from '../../../../reports';\nimport { AXDataSource, AXDataSourceQuery, AXDataSourceSortOption } from '@acorex/cdk/common';\n\nimport { applySystemActionDefault, AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { AXPExpressionEvaluatorScope } from '@acorex-platform/framework-shared/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { get } from 'lodash-es';\nimport {\n AXPReportTableColumnViewModel,\n applyGroupByDrillLinksToColumns,\n buildReportTableColumnsAsync,\n parseColumnResizeWidth,\n resolveColumnFieldFromDataField,\n} from '../../report-table-columns.util';\nimport {\n buildGroupByDrillCommandOptions,\n buildDrillRowActionsFromGroupBy,\n findGroupByDefinitionForDisplayField,\n hasGroupByDrillLinks,\n} from '../../report-group-by-drill.util';\nimport { AXPTextCommandColumnComponent } from '@acorex-platform/framework-client/layout/components';\n\n@Component({\n selector: 'axp-report-table-view',\n imports: [\n CommonModule,\n AXDataTableModule,\n AXLoadingModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPTextCommandColumnComponent,\n ],\n templateUrl: './report-table-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-report-table-view flex flex-col flex-1 min-h-0 h-full w-full',\n },\n})\nexport class AXPReportTableViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n protected readonly commandService = inject(AXPCommandService);\n\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n private readonly grid = viewChild<AXDataTableComponent>('grid');\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly columns = signal<AXPReportTableColumnViewModel[]>([]);\n\n protected readonly sortedFields = signal<AXPQuerySort[]>([]);\n\n protected readonly tableSummary = signal<AXPReportTableSummaryResult | null>(null);\n\n private handledExecutionRequestId = 0;\n\n private lastDataSourcePreferencesKey: string | null = null;\n\n //#endregion\n\n //#region ---- Effects ----\n\n #resetExecutionHandler = effect(() => {\n const reportId = this.vm.reportId();\n untracked(() => {\n this.handledExecutionRequestId = 0;\n this.lastDataSourcePreferencesKey = null;\n void reportId;\n });\n });\n\n #syncTableColumns = effect(() => {\n const layoutDef = this.vm.currentLayout();\n const tableLayout = layoutDef?.layout as AXPReportTableLayout | undefined;\n if (!tableLayout || tableLayout.type !== 'table') {\n this.columns.set([]);\n return;\n }\n\n const savedTable = this.vm.tableLayoutUserSettings();\n const groupBy = tableLayout.groupBy;\n const columns = tableLayout.columns;\n const savedColumns = savedTable?.columns;\n void (async () => {\n const builtColumns = await buildReportTableColumnsAsync(\n columns,\n savedColumns,\n this.expressionEvaluator,\n );\n this.columns.set(applyGroupByDrillLinksToColumns(builtColumns, groupBy));\n })();\n });\n\n #syncDataSourcePreferences = effect(() => {\n const layoutDef = this.vm.currentLayout();\n if (!layoutDef) {\n return;\n }\n\n const tableLayout = layoutDef.layout as AXPReportTableLayout | undefined;\n if (!tableLayout || tableLayout.type !== 'table') {\n return;\n }\n\n const savedTable = this.vm.tableLayoutUserSettings();\n const queryDataSource = layoutDef.dataSource as AXPQueryDataSource | undefined;\n const defaultSort = tableLayout.options?.sorting?.length\n ? tableLayout.options.sorting\n : (queryDataSource?.sortFields ?? []);\n const effectiveSort = savedTable?.sorts?.length ? savedTable.sorts : defaultSort;\n const pageSize = savedTable?.pageSize ?? 10;\n const preferencesKey = `${layoutDef.id}:${pageSize}:${JSON.stringify(effectiveSort)}`;\n\n if (this.lastDataSourcePreferencesKey === preferencesKey) {\n return;\n }\n\n untracked(() => {\n this.lastDataSourcePreferencesKey = preferencesKey;\n this.sortedFields.set(effectiveSort);\n this.applySortToDataSource(effectiveSort);\n this.dataSource.setPageSize(pageSize);\n });\n });\n\n /**\n * Refresh grid once per execute-report request.\n */\n #fetchData = effect(() => {\n const requestId = this.vm.executionRequestId();\n const grid = this.grid();\n if (!grid || requestId <= this.handledExecutionRequestId || !this.vm.allowFetchData()) {\n return;\n }\n\n untracked(() => {\n this.handledExecutionRequestId = requestId;\n grid.refresh();\n });\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleRowClick(event: AXRowCommandItemClickEvent): void {\n void this.handleRowAction(event.name, event.data);\n }\n\n protected handleDbRowClick(event: AXDataTableRowDbClick): void {\n const defaultGroupByDrill = this.defaultGroupByDrillDefinition();\n if (defaultGroupByDrill?.displayField) {\n void this.handleGroupByDrill(defaultGroupByDrill.displayField, event.data);\n return;\n }\n\n if (this.defaultRowAction()) {\n void this.handleRowAction(this.defaultRowAction()!.name, event.data);\n }\n }\n\n protected async handleGroupByDrill(displayField: string, data: unknown): Promise<void> {\n const definition = findGroupByDefinitionForDisplayField(this.layout().groupBy, displayField);\n if (!definition) {\n return;\n }\n\n const reportId = this.vm.reportDefinition()?.id;\n if (!reportId) {\n return;\n }\n\n const commandOptions = buildGroupByDrillCommandOptions(definition, reportId);\n const evaluatedOptions = await this.evaluateActionOptions(commandOptions, data);\n\n await this.commandService.execute('ReportManagement.Report:OpenInPopup', {\n data: data as Record<string, unknown>,\n options: evaluatedOptions,\n });\n }\n\n protected async handleRowAction(name: string, data: unknown): Promise<void> {\n const action = this.rowActions().find((item) => item.command?.name === name);\n const commandName = action?.command?.name ?? name;\n const evaluatedOptions = await this.evaluateActionOptions(action?.command?.options, data);\n\n await this.commandService.execute(commandName, {\n data: data as Record<string, unknown>,\n options: evaluatedOptions,\n \n });\n }\n\n private async evaluateActionOptions(\n options: Record<string, unknown> | undefined,\n data: unknown,\n ): Promise<Record<string, unknown>> {\n if (!options) {\n return {};\n }\n\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(data as object, path),\n },\n };\n\n return (await this.expressionEvaluator.evaluate(options, scope)) as Record<string, unknown>;\n }\n\n protected handleColumnSort(columnField: string): void {\n const column = this.layout().columns?.find((c) => c.field === columnField);\n if (!column?.sortable) {\n return;\n }\n\n const activeSorts = [...this.sortedFields()];\n const index = activeSorts.findIndex((s) => s.name === columnField);\n const currentDir = index >= 0 ? activeSorts[index].dir : undefined;\n const newDir: 'asc' | 'desc' | undefined =\n currentDir === 'asc' ? 'desc' : currentDir === 'desc' ? undefined : 'asc';\n\n const nextSorts = newDir ? [{ name: columnField, dir: newDir }] : [];\n this.sortedFields.set(nextSorts);\n this.applySortToDataSource(nextSorts);\n void this.vm.saveTableSorts(nextSorts);\n this.grid()?.refresh();\n }\n\n protected onColumnSizeChanged(event: onColumnSizeChangedEvent): void {\n if (!event.isUserInteraction || event.type !== 'end' || !event.data) {\n return;\n }\n const dataField = String(event.data.dataField ?? '');\n const field = resolveColumnFieldFromDataField(dataField);\n const width = parseColumnResizeWidth(event.data.width);\n if (!field || width == null) {\n return;\n }\n\n const nextColumns = this.columns().map((col) =>\n col.field === field ? { ...col, width } : col,\n );\n this.columns.set(nextColumns);\n void this.vm.saveTableColumnWidth(field, width, nextColumns);\n }\n\n protected onColumnsOrderChanged(event: AXColumnsOrderChangedEvent): void {\n if (!event.isUserInteraction || !event.data?.event) {\n return;\n }\n const dragEvent = event.data.event as CdkDragDrop<unknown>;\n const offset = this.leadingColumnCount();\n const previousIndex = dragEvent.previousIndex - offset;\n const currentIndex = dragEvent.currentIndex - offset;\n if (previousIndex < 0 || currentIndex < 0) {\n return;\n }\n\n const nextColumns = [...this.columns()];\n const source = nextColumns[previousIndex];\n if (!source || source.pin) {\n return;\n }\n if (nextColumns[currentIndex]?.pin) {\n return;\n }\n\n moveItemInArray(nextColumns, previousIndex, currentIndex);\n this.columns.set(nextColumns);\n void this.vm.saveTableColumnOrder(nextColumns);\n }\n\n protected onPageChanged(event: AXDataPagerChangedEvent): void {\n if (event.isUserInteraction) {\n void this.vm.saveTablePageSize(event.take);\n }\n }\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected readonly layout = computed(() => {\n return (this.vm.currentLayout()?.layout as AXPReportTableLayout)!;\n });\n\n protected readonly dataSource = new AXDataSource({\n load: async (e: AXDataSourceQuery) => {\n if (!this.vm.allowFetchData()) {\n this.tableSummary.set(null);\n return { items: [], total: 0 };\n }\n\n const result = await this.vm.fetchData(e);\n const page = runtimeQueryCollectionData(result);\n if (!page) {\n this.tableSummary.set(null);\n return { items: [], total: 0 };\n }\n\n this.tableSummary.set((page.aggregateRows?.[0] as AXPReportTableSummaryResult | undefined) ?? null);\n\n return {\n items: (page.items ?? []) as unknown[],\n total: Number(page.total ?? page.items?.length ?? 0),\n };\n },\n pageSize: 10,\n key: 'id',\n });\n\n protected readonly visibleColumns = computed(() => this.columns().filter((c) => c.visible));\n\n protected readonly paginationEnabled = computed(() => {\n return this.layout().options?.pagination !== false;\n });\n\n protected readonly hasReportFooterSummary = computed(() => {\n return (\n (this.layout().summary?.some((s) => s.displayIn === 'reportFooter') ?? false) &&\n this.tableSummary() !== null\n );\n });\n\n protected readonly rowActions = computed(() => {\n const tableLayout = this.layout();\n const generated = buildDrillRowActionsFromGroupBy(tableLayout.groupBy, this.vm.reportDefinition()?.id);\n const manual = tableLayout.actions ?? [];\n return [...generated, ...manual];\n });\n\n protected readonly primaryRowAction = computed<AXRowCommandItem[]>(() => {\n return (\n this.rowActions().filter((a) => a.priority === 'primary')?.map((a) => this.convertToRowCommandItem(a)) ??\n []\n );\n });\n\n protected readonly hasPrimaryRowAction = computed(() => {\n return this.primaryRowAction().length > 0;\n });\n\n protected readonly secondaryRowAction = computed<AXRowCommandItem[]>(() => {\n return (\n this.rowActions()\n .filter((a) => a.priority === 'secondary')\n ?.map((a) => this.convertToRowCommandItem(a)) ?? []\n );\n });\n\n protected readonly hasSecondaryRowAction = computed(() => {\n return this.secondaryRowAction().length > 0;\n });\n\n protected readonly defaultGroupByDrillDefinition = computed(() => {\n const groupBy = this.layout().groupBy;\n if (!hasGroupByDrillLinks(groupBy)) {\n return null;\n }\n\n return groupBy?.find((definition) => definition.default) ?? groupBy?.[0] ?? null;\n });\n\n protected readonly defaultRowAction = computed<AXRowCommandItem | null>(() => {\n const defaultAction = this.rowActions().find((a) => a.default);\n if (!defaultAction) {\n return null;\n }\n return this.convertToRowCommandItem(defaultAction);\n });\n\n //#endregion\n\n //#region ---- Sort Helpers ----\n\n protected resolveColumnSortDirection(columnField: string): 'asc' | 'desc' | undefined {\n const dir = this.sortedFields().find((s) => s.name === columnField)?.dir;\n return dir === 'asc' || dir === 'desc' ? dir : undefined;\n }\n\n //#endregion\n\n //#region ---- Summary Helpers ----\n\n protected getSummaryDisplayValue(field: string): string | null {\n const summary = this.tableSummary();\n if (!summary || !(field in summary)) {\n return null;\n }\n const value = summary[field];\n if (value == null) {\n return null;\n }\n return String(value);\n }\n\n protected isFirstVisibleColumn(field: string): boolean {\n return this.visibleColumns()[0]?.field === field;\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n protected leadingColumnCount(): number {\n let count = 0;\n if (this.vm.showRowIndexColumn()) {\n count++;\n }\n if (this.vm.canSelectRows()) {\n count++;\n }\n return count;\n }\n\n private applySortToDataSource(sorts: AXPQuerySort[]): void {\n const sortOptions: AXDataSourceSortOption[] = sorts.map(\n (s) => ({ field: s.name, dir: s.dir }) as AXDataSourceSortOption,\n );\n this.dataSource.sort(...sortOptions);\n }\n\n protected convertToRowCommandItem(action: AXPReportTableLayoutRowAction): AXRowCommandItem {\n const systemAction = getSystemActions(action.type as AXPSystemActionType);\n if (!systemAction) {\n return {\n icon: action.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: action.title,\n name: action.command?.name,\n divided: action.break,\n color: action.color,\n } as AXRowCommandItem;\n }\n const defaultAction = applySystemActionDefault(action, systemAction.key as AXPSystemActionType);\n return {\n icon: defaultAction.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: defaultAction.title,\n name: action.command?.name,\n divided: defaultAction.break ?? action.break,\n color: defaultAction.color,\n } as AXRowCommandItem;\n }\n\n //#endregion\n}\n","<ax-data-table\n #grid\n [dataSource]=\"dataSource\"\n [paging]=\"paginationEnabled()\"\n [showFooter]=\"hasReportFooterSummary()\"\n [allowReordering]=\"true\"\n (onRowDbClick)=\"handleDbRowClick($event)\"\n (onColumnSizeChanged)=\"onColumnSizeChanged($event)\"\n (onColumnsOrderChanged)=\"onColumnsOrderChanged($event)\"\n (onPageChanged)=\"onPageChanged($event)\"\n class=\"flex-1 min-h-0 h-full\"\n>\n @if (vm.showRowIndexColumn()) {\n <ax-index-column\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm.canSelectRows()) {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n @for (column of columns(); track column.field) {\n @if (column.visible) {\n <ng-template #footerCell>\n <div\n class=\"w-full truncate\"\n [class.text-start]=\"column.align === 'left'\"\n [class.text-center]=\"column.align === 'center'\"\n [class.text-end]=\"column.align === 'right'\"\n >\n @if (isFirstVisibleColumn(column.field) && hasReportFooterSummary()) {\n <span class=\"font-medium\">\n {{ '@report-management:report-viewer.components.table.footer-total' | translate | async }}\n </span>\n } @else if (getSummaryDisplayValue(column.field); as summaryValue) {\n <span>{{ summaryValue }}</span>\n }\n </div>\n </ng-template>\n @if (column.isGroupByDrillLink && column.drillDisplayField) {\n <axp-text-command-column\n [customWidth]=\"column.width == 'auto' ? 'auto' : column.width + 'px'\"\n [caption]=\"(column.title | translate | async)!\"\n [textField]=\"column.drillDisplayField\"\n [columnFixed]=\"column.pin\"\n [sortEnabled]=\"column.sortable\"\n [headerSortDirection]=\"resolveColumnSortDirection(column.field)\"\n [footerTemplate]=\"footerCell\"\n (sortToggle)=\"handleColumnSort(column.field)\"\n (commandClick)=\"handleGroupByDrill(column.drillDisplayField, $event.data)\"\n ></axp-text-command-column>\n } @else {\n <axp-widget-column-renderer\n [customWidth]=\"column.width == 'auto' ? 'auto' : column.width + 'px'\"\n [caption]=\"(column.title | translate | async)!\"\n [node]=\"column.widget!\"\n [sortEnabled]=\"column.sortable\"\n [headerSortDirection]=\"resolveColumnSortDirection(column.field)\"\n [columnFixed]=\"column.pin\"\n [footerTemplate]=\"footerCell\"\n (sortToggle)=\"handleColumnSort(column.field)\"\n ></axp-widget-column-renderer>\n }\n }\n }\n @if (hasPrimaryRowAction()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowAction().length * 70 + 'px'\"\n [items]=\"primaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-command-column>\n }\n @if (hasSecondaryRowAction()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"secondaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n","//#region ----- Imports -----\n\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport type { AXPLayoutSwitcherOption } from '@acorex-platform/module-report-management-client/contracts';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst STYLE_PREFIX = /^(fa-light|fa-solid|fa-regular|fa-thin|fa-duotone)\\s+/;\n\nexport const REPORT_LAYOUT_TITLE_KEYS = {\n table: '@report-management:report-viewer.layouts.table.title',\n bar: '@report-management:report-viewer.layouts.bar-chart.title',\n doughnut: '@report-management:report-viewer.layouts.doughnut-chart.title',\n pie: '@report-management:report-viewer.layouts.pie-chart.title',\n line: '@report-management:report-viewer.layouts.line-chart.title',\n pdf: '@report-management:report-viewer.layouts.pdf.title',\n chart: '@report-management:report-viewer.layouts.chart.title',\n} as const;\n\nconst DEFAULT_LAYOUT_GLYPHS: Record<string, string> = {\n table: 'fa-table',\n pdf: 'fa-file-pdf',\n chart: 'fa-chart-mixed',\n};\n\n//#endregion\n\n//#region ----- Layout switcher helpers -----\n\nexport function reportLayoutTitleKey(option: Pick<AXPLayoutSwitcherOption, 'type' | 'icon'>): string {\n if (option.type === 'table') {\n return REPORT_LAYOUT_TITLE_KEYS.table;\n }\n if (option.type === 'pdf') {\n return REPORT_LAYOUT_TITLE_KEYS.pdf;\n }\n\n const glyph = stripIconStylePrefix(option.icon);\n if (glyph.includes('fa-chart-bar')) {\n return REPORT_LAYOUT_TITLE_KEYS.bar;\n }\n if (glyph.includes('fa-chart-pie')) {\n return REPORT_LAYOUT_TITLE_KEYS.doughnut;\n }\n if (glyph.includes('fa-chart-line')) {\n return REPORT_LAYOUT_TITLE_KEYS.line;\n }\n return REPORT_LAYOUT_TITLE_KEYS.chart;\n}\n\nexport function reportLayoutGlyph(\n icon: string | undefined,\n option: Pick<AXPLayoutSwitcherOption, 'type'>,\n): string {\n const fromIcon = stripIconStylePrefix(icon);\n if (fromIcon) {\n return fromIcon;\n }\n if (option.type === 'table') {\n return DEFAULT_LAYOUT_GLYPHS['table'];\n }\n if (option.type === 'pdf') {\n return DEFAULT_LAYOUT_GLYPHS['pdf'];\n }\n return DEFAULT_LAYOUT_GLYPHS['chart'];\n}\n\nexport function reportLayoutPageIcon(\n icon: string | undefined,\n option: Pick<AXPLayoutSwitcherOption, 'type'>,\n): string {\n return `fa-light ${reportLayoutGlyph(icon, option)}`;\n}\n\nexport function isDistinctLayoutTitle(\n layoutTitle: AXPMultiLanguageString | undefined,\n reportTitle: AXPMultiLanguageString | undefined,\n locale: string,\n): boolean {\n const resolvedLayout = resolveMultiLanguageString(layoutTitle, locale).trim();\n if (!resolvedLayout) {\n return false;\n }\n const resolvedReport = resolveMultiLanguageString(reportTitle, locale).trim();\n return resolvedLayout !== resolvedReport;\n}\n\nfunction stripIconStylePrefix(icon: string | undefined): string {\n if (!icon?.trim()) {\n return '';\n }\n return icon.trim().replace(STYLE_PREFIX, '').trim();\n}\n\n//#endregion\n","\nimport { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPContextData, AXPExecuteCommand, AXPGridLayoutOptions, type AXPMultiLanguageString, resolveMultiLanguageString, runtimeQueryPayloadData } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXLoadingDialogModule, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { AXPLayoutRendererComponent } from '@acorex-platform/framework-client/layout/builder';\nimport {\n AXPStateMessageComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport {\n AXPReportManagementFeatureKeys,\n RootConfig,\n type AXPLayoutSwitcherOption,\n} from '@acorex-platform/module-report-management-client/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationStart } from '@angular/router';\nimport { combineLatest } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\nimport { AXPReportViewerService } from '../../../reports';\nimport { resolveReportFilterDefaultValue } from '../../../reports/report-parameter.util';\nimport { queryResultToPdfSource } from '../../../reports/report-mapper';\nimport {\n isDistinctLayoutTitle,\n reportLayoutGlyph,\n reportLayoutPageIcon,\n reportLayoutTitleKey,\n} from '../report-layout-switcher.util';\n\n@Component({\n selector: 'axp-report-viewer-page',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXCheckBoxModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXBadgeModule,\n AXLoadingDialogModule,\n //\n AXPLayoutRendererComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXPReportTableViewComponent,\n AXPThemeLayoutFooterComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n AXPStateMessageComponent,\n ],\n providers: [\n AXUnsubscriber,\n AXPReportViewerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPReportViewerPageComponent,\n },\n ],\n templateUrl: './report-viewer-page.component.html',\n styleUrls: ['./report-viewer-page.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-report-viewer-page' },\n})\nexport class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Dependencies ----\n\n protected override layoutService = inject(AXPLayoutThemeService);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly route = inject(ActivatedRoute);\n private unsubscriber = inject(AXUnsubscriber);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly reportViewerService = inject(AXPReportViewerService);\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n reportId = input<string>();\n reportParameters = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- ViewChildren ----\n\n private filtersForm = viewChild<AXPLayoutRendererComponent>('filtersForm');\n\n //#endregion\n\n //#region ---- ViewModel ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly watchNavigationLoading = effect(() => {\n const isBusy = this.vm.isLoading() || this.vm.isExecuting();\n untracked(() => {\n this.layoutService.setNavigationLoading(isBusy);\n //\n if (isBusy) {\n void this.openContentLoading();\n } else {\n this.closeContentLoading();\n }\n });\n });\n\n private readonly syncFrozenRunUrl = effect(() => {\n const runId = this.vm.runId();\n const frozen = this.vm.isFrozen();\n const queued = this.vm.isBackgroundQueued();\n if (queued) {\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (!currentRunId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n });\n return;\n }\n if (!frozen || !runId) {\n return;\n }\n untracked(() => {\n const currentRunId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (currentRunId === runId) {\n return;\n }\n void this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { runId },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n this.recompute();\n });\n });\n\n //#endregion\n\n private loadingDialogRef: { close: () => void } | null = null;\n private isDialogOpening = false;\n private lastReportRouteKey: string | null = null;\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => {\n this.closeContentLoading();\n void this.vm.releaseInlineNotificationWatch();\n });\n }\n\n //#region ---- Computed Properties ----\n\n protected showFiltersPanel = () => this.deviceService.isLarge();\n\n protected showReportDisplay = () =>\n (!this.vm.isBackgroundReportMode() || this.vm.isFrozen()) &&\n (this.deviceService.isLarge() || (this.deviceService.isSmall() && this.vm.hasBeenExecuted()));\n\n private reportsListPath(): string {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.report.name)\n .createPath();\n }\n\n private isReportViewerUrl(url: string): boolean {\n return url.includes(`/${RootConfig.module.route}/viewer`);\n }\n\n //#endregion\n\n //#region ---- Layout Configurations ----\n\n protected defaultLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 6 },\n lg: { colSpan: 12 },\n },\n });\n\n protected compactLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 4 },\n lg: { colSpan: 3 },\n },\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n this.unsubscriber\n .takeUntilDestroy(this.router.events.pipe(filter((event) => event instanceof NavigationStart)))\n .subscribe((event) => {\n const navigation = event as NavigationStart;\n if (this.isReportViewerUrl(this.router.url) && !this.isReportViewerUrl(navigation.url)) {\n void this.vm.releaseInlineNotificationWatch();\n }\n });\n\n // Reload when reportId or runId changes. Ignore other query params (live filters).\n this.unsubscriber\n .takeUntilDestroy(combineLatest([this.route.paramMap, this.route.queryParamMap]))\n .subscribe(async ([params, queryParams]) => {\n const reportId = params.get('reportId') || queryParams.get('reportId') || this.reportId();\n if (!reportId) {\n return;\n }\n const runId = queryParams.get('runId')?.trim() || '';\n const routeKey = `${reportId}::${runId}`;\n if (routeKey === this.lastReportRouteKey) {\n return;\n }\n this.lastReportRouteKey = routeKey;\n await this.loadReportAndRefresh(reportId);\n });\n }\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n private async loadReportAndRefresh(reportId: string): Promise<void> {\n const runId = this.route.snapshot.queryParamMap.get('runId')?.trim();\n if (runId) {\n await this.vm.loadReport(reportId);\n await this.vm.loadFrozenRun(runId);\n this.recompute();\n return;\n }\n\n await this.vm.loadReport(reportId);\n\n // Force refresh of page layout (breadcrumbs, title, etc.) after report loads\n this.recompute();\n\n // Handle initial parameters from query string\n const queryParams = this.route.snapshot.queryParams;\n const initialParams = { ...queryParams };\n delete initialParams['reportId'];\n delete initialParams['runId'];\n\n // Parse filter context values coming from URL (they are strings)\n const parsedInitialParams = this.parseFilterContextFromUrl(initialParams);\n\n // Merge with component input parameters (`today` / `{ from, to }` → filter shape)\n const rawParams = { ...parsedInitialParams, ...this.reportParameters() };\n const allParams = Object.fromEntries(\n Object.entries(rawParams).map(([key, value]) => [key, resolveReportFilterDefaultValue(value)]),\n );\n\n if (Object.keys(allParams).length > 0) {\n console.log('Applying initial parameters:', allParams);\n this.vm.updateFilterContext(allParams);\n // Auto-execute if parameters are provided\n setTimeout(async () => {\n await this.vm.executeReport();\n }, 500); // Small delay to ensure form is ready\n }\n }\n\n private async openContentLoading(): Promise<void> {\n if (this.loadingDialogRef || this.isDialogOpening) {\n return;\n }\n\n this.isDialogOpening = true;\n\n try {\n const [title, description, cancelText] = await Promise.all([\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.in-progress-title'),\n this.translateService.translateAsync(\n '@report-management:report-viewer.messages.loading.in-progress-description',\n ),\n\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.cancel-button'),\n ]);\n\n this.loadingDialogRef = this.loadingDialog.show({\n title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: description,\n buttons: [\n {\n text: cancelText,\n color: 'danger',\n onClick: () => {\n this.closeContentLoading();\n this.vm.cancel();\n },\n },\n ],\n });\n } finally {\n this.isDialogOpening = false;\n }\n }\n\n private closeContentLoading(): void {\n if (!this.loadingDialogRef) {\n return;\n }\n\n this.loadingDialogRef.close();\n this.loadingDialogRef = null;\n }\n\n /**\n * Synchronizes filter context to URL query parameters using dot notation\n * @param filterContext The current filter context to sync\n */\n private syncFiltersToUrl(filterContext: AXPContextData): void {\n // Get current query params\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n // Get all filter keys from current params (excluding reportId and internal fields)\n const currentFilterKeys = new Set<string>();\n Object.keys(currentParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n // Extract root key (before first dot) for filter identification\n const rootKey = key.includes('.') ? key.split('.')[0] : key;\n currentFilterKeys.add(rootKey);\n }\n });\n\n // Build new query params - start with current params and remove filter-related ones\n const queryParams: Record<string, string | undefined> = { ...currentParams };\n\n // Remove all filter-related params first (we'll add them back if they have values)\n Object.keys(queryParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n delete queryParams[key];\n }\n });\n\n const processedFilterKeys = new Set<string>();\n\n // Add filter params that have values\n Object.keys(filterContext).forEach((key) => {\n // Skip internal editor fields (EditorObj, __EditorValue)\n if (key.endsWith('EditorObj') || key.startsWith('__') || key.endsWith('EditorValue')) {\n return;\n }\n\n processedFilterKeys.add(key);\n const value = filterContext[key];\n\n // Check if value is empty (null, undefined, empty string, or empty array)\n const isEmpty = this.isFilterValueEmpty(value);\n\n if (!isEmpty) {\n const flattened = this.flattenToDotNotation(key, value);\n Object.assign(queryParams, flattened);\n }\n // If empty, we don't add it to queryParams, so it will be removed from URL\n });\n\n // Remove filter keys that are no longer in filterContext\n currentFilterKeys.forEach((filterKey) => {\n if (!processedFilterKeys.has(filterKey)) {\n // This filter was removed - ensure all related params are removed\n Object.keys(currentParams).forEach((paramKey) => {\n if (paramKey === filterKey || paramKey.startsWith(`${filterKey}.`)) {\n delete queryParams[paramKey];\n }\n });\n }\n });\n\n // Preserve reportId / runId if exists\n if (reportId) {\n queryParams['reportId'] = String(reportId);\n } else {\n delete queryParams['reportId'];\n }\n const runId = currentParams['runId'];\n if (runId) {\n queryParams['runId'] = String(runId);\n } else {\n delete queryParams['runId'];\n }\n\n // Update URL without reloading\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true, // Don't add to browser history\n });\n }\n\n /**\n * Checks if a filter value is considered empty\n */\n private isFilterValueEmpty(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n // Check if it's a filter object with empty value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n const filterValue = filterObj.value;\n\n if (filterValue === null || filterValue === undefined || filterValue === '') {\n return true;\n }\n\n if (Array.isArray(filterValue) && filterValue.length === 0) {\n return true;\n }\n\n // Check nested object values\n if (typeof filterValue === 'object' && !Array.isArray(filterValue)) {\n const hasAnyValue = Object.values(filterValue).some((v) => v !== null && v !== undefined && v !== '');\n return !hasAnyValue;\n }\n }\n\n // Check if it's an empty array\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Flattens filter context to dot notation query parameters\n * Only includes operation.type and value - skips displayText and other fields\n * Example: { operation: { type: 'in' }, value: ['POST', 'GET'] } \n * -> { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n */\n private flattenToDotNotation(prefix: string, value: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (value == null) {\n return result;\n }\n\n // Handle filter context object - only extract operation.type and value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n\n // Extract operation.type if exists\n if (filterObj.operation?.type) {\n result[`${prefix}.operation.type`] = String(filterObj.operation.type);\n }\n\n // Extract value - handle arrays and primitives\n if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n if (Array.isArray(filterObj.value)) {\n if (filterObj.value.length > 0) {\n result[`${prefix}.value`] = filterObj.value.map((v: any) => String(v)).join(',');\n }\n } else if (typeof filterObj.value === 'object') {\n // If value is an object, flatten it recursively\n const flattenedValue = this.flattenValueObject(filterObj.value);\n Object.assign(result, flattenedValue);\n } else {\n result[`${prefix}.value`] = String(filterObj.value);\n }\n }\n\n return result;\n }\n\n // Handle primitives directly\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n result[prefix] = String(value);\n return result;\n }\n\n // Handle arrays - join with comma\n if (Array.isArray(value)) {\n if (value.length > 0) {\n result[prefix] = value.map(v => String(v)).join(',');\n }\n return result;\n }\n\n // Fallback: convert to string\n result[prefix] = String(value);\n return result;\n }\n\n /**\n * Flattens a value object (for nested objects in value field)\n */\n private flattenValueObject(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (obj == null || typeof obj !== 'object') {\n return result;\n }\n\n for (const [key, val] of Object.entries(obj)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n\n if (val == null) {\n continue;\n }\n\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n result[newPrefix] = String(val);\n } else if (Array.isArray(val)) {\n if (val.length > 0) {\n result[newPrefix] = val.map((v: any) => String(v)).join(',');\n }\n } else if (typeof val === 'object') {\n const flattened = this.flattenValueObject(val, newPrefix);\n Object.assign(result, flattened);\n }\n }\n\n return result;\n }\n\n /**\n * Reconstructs filter context from dot notation query parameters\n * Only parses operation.type and value - ignores other fields\n * Example: { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n * -> { fieldName: { operation: { type: 'in' }, value: ['POST', 'GET'] } }\n */\n private parseFilterContextFromUrl(params: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, any> = {};\n\n // Filter out reportId and internal editor fields\n const filteredParams: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n // Skip reportId and internal editor fields (EditorObj, __EditorValue, displayText)\n if (\n key !== 'reportId' &&\n key !== 'runId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n filteredParams[key] = value;\n }\n }\n\n // Group by root key (before first dot)\n for (const [key, value] of Object.entries(filteredParams)) {\n if (!key.includes('.')) {\n // Simple key without dot notation - skip (we only want operation.type and value)\n continue;\n }\n\n // Split by dot and reconstruct nested structure\n const parts = key.split('.');\n const rootKey = parts[0];\n const path = parts.slice(1);\n\n // Only process operation.type and value paths\n if (path.length === 2 && path[0] === 'operation' && path[1] === 'type') {\n // operation.type\n if (!result[rootKey]) {\n result[rootKey] = { operation: {} };\n }\n if (!result[rootKey].operation) {\n result[rootKey].operation = {};\n }\n result[rootKey].operation.type = String(value);\n } else if (path.length === 1 && path[0] === 'value') {\n // value\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n result[rootKey].value = this.parseValue(String(value));\n } else if (path.length > 1 && path[0] === 'value') {\n // nested value object (e.g., value.from, value.to for between)\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n if (!result[rootKey].value) {\n result[rootKey].value = {};\n }\n const valuePath = path.slice(1);\n this.setNestedValue(result[rootKey].value, valuePath, this.parseValue(String(value)));\n }\n }\n\n // Post-process: Convert values to arrays if operation.type is 'in' or 'notIn'\n // Also reconstruct EditorObj for lookup widgets (from value only, no displayText)\n for (const [key, value] of Object.entries(result)) {\n if (value && typeof value === 'object' && value.operation?.type) {\n const operationType = value.operation.type;\n\n // If operation is 'in' or 'notIn', ensure value is an array\n if ((operationType === 'in' || operationType === 'notIn') && typeof value.value === 'string') {\n // Convert comma-separated string to array\n value.value = value.value.split(',').map((v: string) => v.trim()).filter((v: string) => v !== '');\n }\n\n // Reconstruct EditorObj for lookup widgets from value only\n // This is needed because lookup widget expects EditorObj to exist\n if (value.value !== undefined && value.value !== null && value.value !== '') {\n const editorObjKey = `${key}EditorObj`;\n const valueField = 'id'; // Default value field for lookup\n const textField = 'title'; // Default text field for lookup\n\n if (operationType === 'in' || operationType === 'notIn') {\n // Multiple selection: create array of objects with value as both id and title\n const values = Array.isArray(value.value) ? value.value : [value.value];\n result[editorObjKey] = values.map((val: string) => ({\n [valueField]: val,\n [textField]: val // Use value as title since we don't have displayText\n }));\n } else {\n // Single selection: create single object\n result[editorObjKey] = {\n [valueField]: value.value,\n [textField]: value.value // Use value as title since we don't have displayText\n };\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sets a value in a nested object using a path array\n */\n private setNestedValue(obj: any, path: string[], value: unknown): void {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n const lastKey = path[path.length - 1];\n current[lastKey] = value;\n }\n\n /**\n * Parses a string value, handling arrays (comma-separated) and primitives\n */\n private parseValue(value: string): unknown {\n if (value === '') {\n return value;\n }\n\n // Check if it's a comma-separated array\n if (value.includes(',')) {\n return value.split(',').map(v => this.parsePrimitive(v.trim()));\n }\n\n return this.parsePrimitive(value);\n }\n\n /**\n * Parses a primitive value\n * For query params, we keep everything as string to match user requirement\n * Arrays are handled separately in parseValue\n */\n private parsePrimitive(value: string): string {\n return value;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleFiltersChange(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n this.syncFiltersToUrl(event);\n }\n\n protected handleFiltersInitiated(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n }\n\n protected async handleExecuteReport(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.executeReport();\n this.recompute();\n }\n\n protected async handleGenerateInBackground(): Promise<void> {\n if (this.vm.isFrozen() && !this.vm.isBackgroundReportMode()) {\n return;\n }\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.generateInBackground();\n this.recompute();\n }\n\n protected canGenerateInBackground(): boolean {\n return (\n this.sessionService.isFeatureEnabled(AXPReportManagementFeatureKeys.BackgroundReports) &&\n !this.vm.isFrozen() &&\n (this.vm.generationMode() === 'choose' || this.vm.generationMode() === 'background')\n );\n }\n\n protected handleRefresh(): void {\n this.vm.refresh();\n }\n\n protected handleClearFilters(): void {\n this.vm.clearFilters();\n\n // Reset form if available\n const form = this.filtersForm();\n if (form) {\n form.reset();\n }\n\n // Clear URL query parameters (preserve reportId if exists)\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n const runId = currentParams['runId'];\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n ...(reportId ? { reportId } : {}),\n ...(runId ? { runId } : {}),\n },\n replaceUrl: true,\n });\n }\n\n /**\n * Handle download report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handleDownloadReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.download-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('download-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-download');\n console.warn(warning);\n }\n }\n\n /**\n * Handle print report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handlePrintReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.print-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const pdfData = queryResultToPdfSource(await this.vm.fetchData());\n if (pdfData) {\n await this.reportViewerService.executeAction('print-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-print');\n console.warn(warning);\n }\n }\n\n /**\n * Handle export report action\n * Gets report data from viewmodel and calls service executeAction method\n * @param format - Export format (excel, csv, pdf, image)\n */\n protected async handleExportReport(format?: string): Promise<void> {\n if (!format) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.export-format-required');\n console.warn(warning);\n return;\n }\n\n // Fetch report data\n const result = await this.vm.fetchData();\n const reportData = runtimeQueryPayloadData(result);\n if (reportData == null) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-report-data-export');\n console.warn(warning);\n return;\n }\n\n const layout = this.vm.currentLayout();\n await this.reportViewerService.executeAction('export-report', {\n format,\n reportData,\n layoutDefinition: layout || undefined,\n });\n }\n\n protected readonly layoutPageIcon = reportLayoutPageIcon;\n\n protected getLayoutSelectionLabel(layout: AXPLayoutSwitcherOption): AXPMultiLanguageString {\n const locale = this.translateService.getActiveLang() || 'en-US';\n const reportTitle = this.vm.reportDefinition()?.title;\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n return layout.title ?? reportLayoutTitleKey(layout);\n }\n return reportLayoutTitleKey(layout);\n }\n\n protected handleBackgroundLayoutToggle(layoutId: string, selected: boolean): void {\n this.vm.setBackgroundLayoutSelected(layoutId, selected);\n }\n\n //#endregion\n\n //#region ---- Page Configuration Overrides ----\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const breadcrumbs: AXPBreadcrumbItem[] = [\n {\n name: 'reports',\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n command: {\n name: 'navigate',\n options: {\n path: this.reportsListPath(),\n },\n },\n },\n ];\n\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n breadcrumbs.push({\n name: 'report-viewer',\n title: reportDefinition.title,\n });\n }\n\n return breadcrumbs;\n }\n\n override async getPageTitle(): Promise<AXPMultiLanguageString> {\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n return reportDefinition.title;\n }\n return await this.translateService.translateAsync(\n '@report-management:report-viewer.components.report-viewer.title',\n );\n }\n\n override async getPageDescription(): Promise<AXPMultiLanguageString | null> {\n const reportDefinition = this.vm.reportDefinition();\n return reportDefinition?.description || null;\n }\n\n protected override getPageIcon(): string | null {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return null;\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return null;\n }\n\n return reportLayoutPageIcon(currentLayout.icon, {\n type: currentLayout.layout.type,\n });\n }\n\n protected override async getTitleActions(): Promise<AXPActionMenuItem[]> {\n if (\n (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) ||\n !this.vm.hasMultipleLayouts() ||\n !this.showReportDisplay()\n ) {\n return [];\n }\n\n const currentLayoutId = this.vm.currentLayout()?.id;\n const reportTitle = this.vm.reportDefinition()?.title;\n const locale = this.translateService.getActiveLang() || 'en-US';\n\n const items: AXPActionMenuItem[] = [];\n for (const layout of this.vm.availableLayouts()) {\n items.push({\n title: await this.resolveLayoutSwitcherTitle(layout, reportTitle, locale),\n icon: reportLayoutGlyph(layout.icon, layout),\n command: {\n name: 'switch-layout',\n metadata: { isLayout: true, layoutId: layout.id, isSelected: layout.id === currentLayoutId },\n },\n });\n }\n\n return items.sort((a, b) =>\n resolveMultiLanguageString(a.title, locale).localeCompare(\n resolveMultiLanguageString(b.title, locale),\n undefined,\n { sensitivity: 'base' },\n ),\n );\n }\n\n private async resolveLayoutSwitcherTitle(\n layout: AXPLayoutSwitcherOption,\n reportTitle: AXPMultiLanguageString | undefined,\n locale: string,\n ): Promise<AXPMultiLanguageString> {\n if (isDistinctLayoutTitle(layout.title, reportTitle, locale)) {\n if (typeof layout.title === 'string' && layout.title.startsWith('@')) {\n return await this.translateService.translateAsync(layout.title);\n }\n if (typeof layout.title === 'object') {\n return this.translateService.resolve(layout.title) || layout.title;\n }\n return layout.title;\n }\n\n return await this.translateService.translateAsync(reportLayoutTitleKey(layout));\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n // On mobile, if report has been executed (showing report), show \"Filters\" as back button\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n return {\n title: await this.translateService.translateAsync('@general:terms.interface.filter.title'),\n };\n }\n\n return {\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n };\n }\n\n override async onBackButtonClick(): Promise<void> {\n // On mobile, if report has been executed (showing report), go back to filters\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n this.vm.clearExecutionState();\n return;\n }\n\n await this.router.navigateByUrl(this.reportsListPath());\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get primary actions from service (includes general actions + layout-specific actions)\n const primaryActions = this.reportViewerService.getPrimaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return primaryActions.map(({ priority, ...action }) => action);\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.isBackgroundReportMode() && !this.vm.isFrozen()) {\n return [];\n }\n\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n const secondaryActions = this.reportViewerService.getSecondaryActions(currentLayout);\n const items = secondaryActions.map(({ priority, ...action }) => action);\n if (this.canGenerateInBackground() && this.vm.generationMode() === 'choose') {\n items.unshift({\n title: '@report-management:report-generation.actions.generate-in-background',\n icon: 'fa-light fa-clock',\n command: { name: 'generate-in-background' },\n });\n }\n return items;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n // Handle layout switching from title actions\n if (command.metadata?.['isLayout']) {\n const layoutId = command.metadata?.['layoutId'] as string;\n if (layoutId) {\n this.vm.switchLayout(layoutId);\n this.recompute();\n }\n return;\n }\n\n switch (command.name) {\n case 'execute-report':\n await this.handleExecuteReport();\n break;\n case 'generate-in-background':\n await this.handleGenerateInBackground();\n break;\n case 'refresh-report':\n this.handleRefresh();\n break;\n case 'reset-filters':\n this.handleClearFilters();\n break;\n case 'download-report':\n this.handleDownloadReport();\n break;\n case 'print-report':\n this.handlePrintReport();\n break;\n case 'export-report':\n await this.handleExportReport(command.options?.['format'] as string);\n break;\n default:\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.unknown-command', {\n params: { commandName: command.name },\n });\n console.warn(warning);\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:report-viewer.components.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n @if (vm.reportDefinition()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'card'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n <!-- ----- Background report layout multi-select ----- -->\n @if (vm.isBackgroundReportMode() && !vm.isBackgroundQueued() && vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer hover:bg-neutral-50\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n </axp-layout-content>\n <axp-layout-footer class=\"p-4 border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-viewer.components.filters.messages.warning.unapplied') | async\n }}</span>\n </div>\n </div>\n }\n @if (vm.isBackgroundReportMode() && !vm.hasSelectedBackgroundLayouts() && !vm.isBackgroundQueued()) {\n <div class=\"w-full warning-lightest-surface mb-2 p-2 rounded border border-warning-200\">\n <div class=\"flex items-center gap-2 text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle text-sm\"></ax-icon>\n <span class=\"text-xs\">{{\n t('@report-management:report-generation.errors.no-layouts-selected') | async\n }}</span>\n </div>\n </div>\n }\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? t('@report-management:report-generation.actions.generate-in-background')\n : t('@report-management:report-viewer.actions.execute.title')) | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- ----- Secondary background generate for choose mode ----- -->\n @if (canGenerateInBackground() && vm.generationMode() === 'choose') {\n <ax-button class=\"w-full mt-2\" [disabled]=\"vm.areParametersReadonly()\"\n [text]=\"t('@report-management:report-generation.actions.generate-in-background') | async\" [color]=\"'default'\"\n (onClick)=\"execute({ name: 'generate-in-background' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-clock\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"overflow-auto\">\n @if (vm.isFrozen()) {\n <!-- ----- Frozen run banner ----- -->\n <div class=\"warning-lightest-surface mb-3 p-3 rounded border border-warning-200 text-warning-800 text-sm\">\n {{ t('@report-management:report-generation.banners.frozen') | async }}\n </div>\n }\n @if (vm.hasError()) {\n <!-- Error State -->\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.retry.title') | async\" (onClick)=\"vm.clearError()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-refresh\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else if (!vm.reportDefinition()) {\n <!-- No Report Selected State -->\n <axp-state-message icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.title'\"\n [description]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.description'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.browse-reports.title') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n <!-- ----- Background report message state (no live layout preview) ----- -->\n } @else if (vm.isBackgroundReportMode() && !vm.isFrozen()) {\n <!-- ----- Mobile filters and layout selection for background reports ----- -->\n @if (deviceService.isSmall() && !vm.isBackgroundQueued()) {\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n @if (vm.availableLayouts().length > 0) {\n <div class=\"mt-4 pt-4 border-t\">\n <div class=\"flex items-center justify-between gap-2 mb-2\">\n <span class=\"text-sm font-medium\">\n {{ t('@report-management:report-generation.components.background-layouts.title') | async }}\n </span>\n </div>\n <p class=\"text-xs opacity-70 mb-3\">\n {{ t('@report-management:report-generation.components.background-layouts.description') | async }}\n </p>\n <div class=\"flex flex-col gap-2\">\n @for (layout of vm.availableLayouts(); track layout.id) {\n <label class=\"flex items-center gap-2 p-2 rounded border cursor-pointer\">\n <ax-check-box\n [ngModel]=\"vm.isBackgroundLayoutSelected(layout.id)\"\n (ngModelChange)=\"handleBackgroundLayoutToggle(layout.id, $event)\"\n ></ax-check-box>\n <ax-icon [icon]=\"layoutPageIcon(layout.icon, layout)\"></ax-icon>\n <span class=\"text-sm\">{{ getLayoutSelectionLabel(layout) | translate | async }}</span>\n </label>\n }\n </div>\n </div>\n }\n }\n @if (vm.isBackgroundQueued()) {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.queued-title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.queued-description'\">\n </axp-state-message>\n } @else {\n <axp-state-message icon=\"fa-light fa-clock\"\n [title]=\"'@report-management:report-generation.empty-states.background.title'\"\n [description]=\"'@report-management:report-generation.empty-states.background.description'\">\n </axp-state-message>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Desktop: Report Display Area -->\n<ng-template #reportDisplay>\n @if (showReportDisplay()) {\n <!-- Desktop & Mobile: Report Display Area -->\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n } @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view> </axp-report-pdf-view>\n }\n } @else if (vm.reportDefinition()) {\n <!-- Mobile: Show filters -->\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\">\n </axp-layout-renderer>\n }\n</ng-template>\n\n<!-- Mobile: Execute Button -->\n@if (deviceService.isSmall() && ((!vm.isBackgroundReportMode() && !vm.hasBeenExecuted()) || (vm.isBackgroundReportMode() && !vm.isBackgroundQueued()))) {\n<axp-page-footer class=\"p-2 border-t\">\n <ax-button class=\"w-full\" [disabled]=\"vm.isBackgroundReportMode() ? vm.isBackgroundGenerateDisabled() : (!vm.canExecute() || vm.areParametersReadonly())\"\n [text]=\"(vm.isBackgroundReportMode()\n ? '@report-management:report-generation.actions.generate-in-background'\n : '@report-management:report-viewer.actions.execute.title') | translate | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon [icon]=\"vm.isBackgroundReportMode() ? 'fa-light fa-clock' : 'fa-light fa-play'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n</axp-page-footer>\n}\n","import { AXPPageStatus } from '@acorex-platform/framework-shared/widget-core';\nimport { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXBarChartReportMapper, queryResultToChartSeries } from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '@acorex-platform/module-report-management-client/contracts';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-bar-chart-view',\n standalone: true,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXChartLegendComponent,\n ],\n templateUrl: './report-bar-chart-view.component.html',\n styleUrl: './report-bar-chart-view.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportBarChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n this.vm.fetchData().then((result) => {\n const barChartData = AXBarChartReportMapper(queryResultToChartSeries(result, this.dataMapping()));\n this.barChartData.set(barChartData);\n });\n }\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle chart click events\n */\n protected handleChartClick(event: any): void {\n // TODO: Implement chart click handling\n console.log('Chart clicked:', event);\n }\n\n /**\n * Handle chart data point selection\n */\n protected handleDataPointSelect(event: any): void {\n // TODO: Implement data point selection\n console.log('Data point selected:', event);\n }\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n /**\n * Get chart configuration for rendering\n */\n protected getChartConfig(): any {\n // TODO: Transform AXPReportChartOptions to chart library format\n return {\n type: this.chartType(),\n options: this.chartOptions(),\n dataMapping: this.dataMapping(),\n };\n }\n\n protected barChartData = signal<AXBarChartValue>([]);\n\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected legendOptions = signal<AXChartLegendOptions>({\n mode: 'horizontal',\n });\n\n //#endregion\n}\n","<div class=\"axp-report-chart-view\" *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading\">\n <div class=\"spinner spin border-4 border-gray-200 border-t-primary rounded-full w-12 h-12\">\n </div>\n <div class=\"__loading-text\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <div class=\"__chart-container\">\n @if (chartLayout()?.header) {\n <div class=\"__chart-header\">\n <h3 class=\"__chart-title\">{{ chartLayout()?.header?.title }}</h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date\">{{ '@general:common.date.today' | translate | async }}</div>\n }\n </div>\n }\n\n <div class=\"__chart-body\">\n <!-- Chart component will be rendered here -->\n <div class=\"__chart-placeholder\">\n <div class=\"__placeholder-content\">\n <div class=\"flex flex-wrap items-center justify-center gap-10\"\n [class]=\"legendOptions().mode === 'horizontal' ? 'flex-col' : 'flex-row'\">\n <!-- Chart Area -->\n <div class=\"flex-0 size-96\">\n <ax-bar-chart #chart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n <!-- Legend Area -->\n @if (barChartData().length > 0) {\n <div>\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"chart\"></ax-chart-legend>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (chartLayout()?.footer) {\n <div class=\"__chart-footer\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"$safeNavigationMigration(chartLayout()?.footer?.customHtml)\"></div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message icon=\"fa-light fa-chart-column\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\">\n </axp-state-message>\n }\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["OPEN_REPORT_IN_POPUP_COMMAND","i1","i3","i4","i2","i6"],"mappings":"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"}