@acorex-platform/module-report-management-client 0.0.51 → 0.0.54

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 (15) hide show
  1. package/fesm2022/{acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-D5dCG62j.mjs → acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DhTbq8K0.mjs} +6 -6
  2. package/fesm2022/{acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-D5dCG62j.mjs.map → acorex-platform-module-report-management-client-acorex-platform-module-report-management-client-DhTbq8K0.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page-component.provider-0eSOzb0y.mjs → acorex-platform-module-report-management-client-entity-reports-page-component.provider-DaX9owYf.mjs} +3 -3
  4. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page-component.provider-0eSOzb0y.mjs.map → acorex-platform-module-report-management-client-entity-reports-page-component.provider-DaX9owYf.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page.component-CHBZbbaH.mjs → acorex-platform-module-report-management-client-entity-reports-page.component-1pkBoTlX.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-report-management-client-entity-reports-page.component-CHBZbbaH.mjs.map → acorex-platform-module-report-management-client-entity-reports-page.component-1pkBoTlX.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-report-management-client-report-layout-switcher.util-BGhHRYfe.mjs → acorex-platform-module-report-management-client-report-layout-switcher.util-GNdaXlQx.mjs} +4 -4
  8. package/fesm2022/acorex-platform-module-report-management-client-report-layout-switcher.util-GNdaXlQx.mjs.map +1 -0
  9. package/fesm2022/{acorex-platform-module-report-management-client-report-popup-viewer.component-BJq1BeUz.mjs → acorex-platform-module-report-management-client-report-popup-viewer.component-Bjb6ECKz.mjs} +3 -3
  10. package/fesm2022/{acorex-platform-module-report-management-client-report-popup-viewer.component-BJq1BeUz.mjs.map → acorex-platform-module-report-management-client-report-popup-viewer.component-Bjb6ECKz.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-report-management-client-report-viewer-page.component-YUdzA4B9.mjs → acorex-platform-module-report-management-client-report-viewer-page.component-uKCoRWfX.mjs} +3 -3
  12. package/fesm2022/{acorex-platform-module-report-management-client-report-viewer-page.component-YUdzA4B9.mjs.map → acorex-platform-module-report-management-client-report-viewer-page.component-uKCoRWfX.mjs.map} +1 -1
  13. package/fesm2022/acorex-platform-module-report-management-client.mjs +1 -1
  14. package/package.json +1 -1
  15. package/fesm2022/acorex-platform-module-report-management-client-report-layout-switcher.util-BGhHRYfe.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-module-report-management-client-report-layout-switcher.util-BGhHRYfe.mjs","sources":["../../../../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"],"sourcesContent":["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?|tokens)$/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"],"names":["i1","i3"],"mappings":"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"}