@acorex/modules 21.0.0-next.73 → 21.0.0-next.75

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 (86) hide show
  1. package/fesm2022/acorex-modules-ai-management.mjs +48 -15
  2. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-FKvCLWhj.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-yboYQ8I-.mjs} +24 -24
  4. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-FKvCLWhj.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-yboYQ8I-.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B59NvUDv.mjs → acorex-modules-assessment-management-assessment-case.entity-BBWeshSs.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B59NvUDv.mjs.map → acorex-modules-assessment-management-assessment-case.entity-BBWeshSs.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-DY3kcvHv.mjs → acorex-modules-assessment-management-assessment-session-answers-view.util-UCYBAHLk.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-DY3kcvHv.mjs.map → acorex-modules-assessment-management-assessment-session-answers-view.util-UCYBAHLk.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-NZgnUnIg.mjs → acorex-modules-assessment-management-assessment-session.entity-Bp_dS1Js.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-NZgnUnIg.mjs.map → acorex-modules-assessment-management-assessment-session.entity-Bp_dS1Js.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-DTpp9nGB.mjs → acorex-modules-assessment-management-fill-assessment-session.command-VivCLw2H.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-DTpp9nGB.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-VivCLw2H.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DLN9rq0h.mjs → acorex-modules-assessment-management-preview-question.command-CKF4BjCx.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DLN9rq0h.mjs.map → acorex-modules-assessment-management-preview-question.command-CKF4BjCx.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-D5RxnsfD.mjs → acorex-modules-assessment-management-preview-questionnaire.command-B_2o4jC2.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-D5RxnsfD.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-B_2o4jC2.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-j6Pzk1UT.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-s8KcR3D0.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-j6Pzk1UT.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-s8KcR3D0.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-C8jxKIKe.mjs → acorex-modules-assessment-management-question-bank-item.entity-Sj-5woTX.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-C8jxKIKe.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Sj-5woTX.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DYtzVNK8.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-ClvQ18w6.mjs} +5 -375
  22. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-ClvQ18w6.mjs.map +1 -0
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-Ca-oiaZ5.mjs → acorex-modules-assessment-management-questionnaire.entity-BbyNZvoc.mjs} +2 -2
  24. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-Ca-oiaZ5.mjs.map → acorex-modules-assessment-management-questionnaire.entity-BbyNZvoc.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CXSelp7y.mjs → acorex-modules-assessment-management-review-assessment-session.command-B2QViI9d.mjs} +3 -3
  26. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CXSelp7y.mjs.map → acorex-modules-assessment-management-review-assessment-session.command-B2QViI9d.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BQDyUTwa.mjs → acorex-modules-assessment-management-view-session-answers.command-CWdBtkn1.mjs} +3 -3
  28. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BQDyUTwa.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CWdBtkn1.mjs.map} +1 -1
  29. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  30. package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-CVyrVwfU.mjs → acorex-modules-content-management-acorex-modules-content-management-B5zqb3b_.mjs} +5 -5
  31. package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-CVyrVwfU.mjs.map → acorex-modules-content-management-acorex-modules-content-management-B5zqb3b_.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-BnnCEroN.mjs → acorex-modules-content-management-permission-definition.provider-DxI6NmP4.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-BnnCEroN.mjs.map → acorex-modules-content-management-permission-definition.provider-DxI6NmP4.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-B3Scw9SG.mjs → acorex-modules-content-management-template-content-editor-widget-edit.component-ChmkpMy9.mjs} +3 -3
  35. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-B3Scw9SG.mjs.map → acorex-modules-content-management-template-content-editor-widget-edit.component-ChmkpMy9.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-D7EBdcU9.mjs → acorex-modules-content-management-template-content-editor-widget-view.component-LyoQmopL.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-D7EBdcU9.mjs.map → acorex-modules-content-management-template-content-editor-widget-view.component-LyoQmopL.mjs.map} +1 -1
  38. package/fesm2022/acorex-modules-content-management.mjs +1 -1
  39. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-p9c5_MMk.mjs → acorex-modules-conversation-acorex-modules-conversation-lPw23AJc.mjs} +10 -9
  40. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-lPw23AJc.mjs.map +1 -0
  41. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQiGLMAZ.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-D0SGSQC8.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQiGLMAZ.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-D0SGSQC8.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-conversation-comments-page.component-rY_6dZ3X.mjs → acorex-modules-conversation-comments-page.component-Bqeplzuy.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-conversation-comments-page.component-rY_6dZ3X.mjs.map → acorex-modules-conversation-comments-page.component-Bqeplzuy.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-Bi1MZ0AE.mjs → acorex-modules-conversation-send-assist-chat-message.command-CFwkUHCc.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-Bi1MZ0AE.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-CFwkUHCc.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-1Mro9mxs.mjs → acorex-modules-conversation-start-assist-chat.command-aEOnD6ax.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-1Mro9mxs.mjs.map → acorex-modules-conversation-start-assist-chat.command-aEOnD6ax.mjs.map} +1 -1
  49. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  50. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLOyCwM3.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-D2TrYnCW.mjs} +4 -4
  51. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLOyCwM3.mjs.map → acorex-modules-dashboard-management-acorex-modules-dashboard-management-D2TrYnCW.mjs.map} +1 -1
  52. package/fesm2022/{acorex-modules-dashboard-management-index-DlrkqIge.mjs → acorex-modules-dashboard-management-index-DAQNEq43.mjs} +2 -2
  53. package/fesm2022/{acorex-modules-dashboard-management-index-DlrkqIge.mjs.map → acorex-modules-dashboard-management-index-DAQNEq43.mjs.map} +1 -1
  54. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  55. package/fesm2022/acorex-modules-data-management.mjs +2 -1
  56. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  57. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  58. package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-B8de7ifz.mjs.map +1 -1
  59. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-SYgMvrE2.mjs → acorex-modules-platform-management-acorex-modules-platform-management-ilmoyxAw.mjs} +95 -4442
  60. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-ilmoyxAw.mjs.map +1 -0
  61. package/fesm2022/{acorex-modules-platform-management-menu-list.component-CKiFNjU0.mjs → acorex-modules-platform-management-menu-list.component-MJCUVTho.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-platform-management-menu-list.component-CKiFNjU0.mjs.map → acorex-modules-platform-management-menu-list.component-MJCUVTho.mjs.map} +1 -1
  63. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  64. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-Dfx7mO_y.mjs → acorex-modules-task-management-acorex-modules-task-management-Bv7Ye6d1.mjs} +2 -2
  65. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-Dfx7mO_y.mjs.map → acorex-modules-task-management-acorex-modules-task-management-Bv7Ye6d1.mjs.map} +1 -1
  66. package/fesm2022/{acorex-modules-task-management-task-board.page-eXpBudGO.mjs → acorex-modules-task-management-task-board.page-CfgeDnBx.mjs} +3 -3
  67. package/fesm2022/{acorex-modules-task-management-task-board.page-eXpBudGO.mjs.map → acorex-modules-task-management-task-board.page-CfgeDnBx.mjs.map} +1 -1
  68. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  69. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-LJ8Bb-CT.mjs.map +1 -1
  70. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BW6kK9Av.mjs.map +1 -1
  71. package/fesm2022/acorex-modules-workflow-management-index--D61tV-f.mjs.map +1 -1
  72. package/fesm2022/acorex-modules-workflow-management-index-DXIQw3Ao.mjs.map +1 -1
  73. package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-huamhFhc.mjs.map +1 -1
  74. package/fesm2022/acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs.map +1 -1
  75. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-popup.component-FLqOdI2t.mjs.map +1 -1
  76. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-visual-tab.component-3gnqTYdJ.mjs.map +1 -1
  77. package/package.json +2 -2
  78. package/types/acorex-modules-ai-management.d.ts +2 -2
  79. package/types/acorex-modules-content-management.d.ts +2 -1
  80. package/types/acorex-modules-data-management.d.ts +2 -1
  81. package/types/acorex-modules-notification-management.d.ts +2 -1
  82. package/types/acorex-modules-platform-management.d.ts +3 -137
  83. package/types/acorex-modules-workflow-management.d.ts +2 -1
  84. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-DYtzVNK8.mjs.map +0 -1
  85. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-p9c5_MMk.mjs.map +0 -1
  86. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-SYgMvrE2.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-workflow-management-index-DXIQw3Ao.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-instance-activity-instances-page-component.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-instance-activity-instances-page.component.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-instance-activity-instances-page.component.html"],"sourcesContent":["/** Component key for the Workflow Instance Activity instances tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY =\n 'workflow-instance-activity-instances-page';\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY } from './WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY';\n\n//#region ---- Workflow Instance Activity Instances Page Component Provider ----\n\n@Injectable()\nexport class AXMWorkflowInstanceActivityInstancesPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./workflow-instance-activity-instances-page.component').then(\n (m) => m.AXMWorkflowInstanceActivityInstancesPageComponent,\n ),\n },\n ];\n }\n}\n\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, signal, untracked } from '@angular/core';\nimport { AXJsonViewerModule } from '@acorex/components/json-viewer';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';\nimport {\n AXPWorkflowDefinition,\n AXPWorkflowInstance,\n AXPWorkflowDefinitionService,\n} from '@acorex/platform/workflow';\nimport {\n buildWorkflowActivityInstanceRows,\n workflowActivityStatusChipModifier,\n workflowActivityToViewerRoot,\n} from './workflow-activity-instance-rows.utils';\n\nexport type { AXMWorkflowActivityInstanceViewRow } from './workflow-activity-instance-rows.utils';\n\n//#region ---- Component ----\n\n/**\n * Readonly entity detail page: lists activity execution contexts for a workflow instance.\n * Data: `rootContext.workflowInstance` + definition loaded by `definitionId`, plus audit keys on\n * `workflowState.properties` (`_outcome`, `_activityOutput`, `_completedByUserId` / `_completedByLabel`).\n */\n@Component({\n selector: 'axm-workflow-instance-activity-instances-page',\n standalone: true,\n imports: [\n CommonModule,\n AXJsonViewerModule,\n AXDecoratorModule,\n AXLabelModule,\n AXLoadingModule,\n AXTranslationModule,\n ],\n templateUrl: './workflow-instance-activity-instances-page.component.html',\n styleUrl: './workflow-instance-activity-instances-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMWorkflowInstanceActivityInstancesPageComponent,\n },\n ],\n})\nexport class AXMWorkflowInstanceActivityInstancesPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Inputs ----\n\n rootContext = input<Record<string, unknown>>();\n\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n\n //#endregion\n\n //#region ---- Definition load ----\n\n private readonly definition = signal<AXPWorkflowDefinition | null>(null);\n protected readonly definitionLoading = signal(false);\n private loadSeq = 0;\n\n //#endregion\n\n constructor() {\n super();\n effect(() => {\n const ctx = this.rootContext();\n const defId =\n ctx && typeof ctx === 'object' && typeof (ctx as Record<string, unknown>)['definitionId'] === 'string'\n ? ((ctx as Record<string, unknown>)['definitionId'] as string)\n : undefined;\n if (!defId) {\n untracked(() => {\n this.definition.set(null);\n this.definitionLoading.set(false);\n });\n return;\n }\n const seq = ++this.loadSeq;\n void (async () => {\n this.definitionLoading.set(true);\n try {\n const def = await this.workflowDefinitionService.getWorkflowByName(defId);\n if (seq !== this.loadSeq) {\n return;\n }\n untracked(() => this.definition.set(def ?? null));\n } finally {\n if (seq === this.loadSeq) {\n this.definitionLoading.set(false);\n }\n }\n })();\n });\n }\n\n /**\n * Maps activity execution status to `status-chips.scss` modifier classes (uses theme `--ax-sys-color-*` tokens).\n */\n statusChipModifier(status: string): 'primary' | 'success' | 'warning' | 'danger' | 'neutral' | 'secondary' {\n return workflowActivityStatusChipModifier(status);\n }\n\n /**\n * Normalizes a value for `ax-json-viewer` (expects a root object; primitives/arrays are wrapped like the platform json-viewer widget).\n */\n toViewerRoot(value: unknown): Record<string, unknown> {\n return workflowActivityToViewerRoot(value);\n }\n\n //#region ---- View rows ----\n\n protected readonly rows = computed(() => {\n const ctx = this.rootContext();\n const wi = ctx?.['workflowInstance'] as AXPWorkflowInstance | undefined;\n const def = this.definition();\n return buildWorkflowActivityInstanceRows(wi, def ?? null, '—', '—');\n });\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-workflow-activity-instances-page ax-block ax-p-4 ax-min-h-[30vh] ax-overflow-y-auto\">\n @if (definitionLoading()) {\n <div class=\"axm-workflow-activity-instances-page__state\">\n <ax-loading></ax-loading>\n </div>\n } @else {\n @if (rows().length === 0) {\n <p class=\"axm-workflow-activity-instances-page__state ax-typo-caption\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.empty' | translate | async }}\n </p>\n } @else {\n <div class=\"axm-workflow-activity-instances-page__list\">\n @for (row of rows(); track row.contextId) {\n <div class=\"axm-workflow-activity-instances-page__card ax-block\">\n <div class=\"axm-workflow-activity-instances-page__header\">\n <h3 [textContent]=\"row.activityTitle\" class=\"axm-workflow-activity-instances-page__title\"></h3>\n <div class=\"axm-workflow-activity-instances-page__header-status\">\n <span class=\"axm-workflow-activity-instances-page__status-label\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.status' | translate | async }}\n </span>\n <span\n class=\"ax-inline-flex ax-items-center ax-rounded-md ax-px-2.5 ax-py-1 ax-text-xs ax-font-semibold ax-leading-none axp-status-chip\"\n [ngClass]=\"'axp-status-chip--' + statusChipModifier(row.status)\"\n >\n {{ row.status }}\n </span>\n </div>\n </div>\n\n <div class=\"axm-workflow-activity-instances-page__meta-grid\" role=\"list\">\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.activity-type' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.activityTypeName\"\n [textContent]=\"row.activityTypeName\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.node-id' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v axm-workflow-activity-instances-page__meta-v--code\"\n [attr.title]=\"row.nodeId\"\n [textContent]=\"row.nodeId\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.outcome' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.outcomeDisplay\"\n [textContent]=\"row.outcomeDisplay\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.started-at' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.startedAt || '—'\"\n [textContent]=\"row.startedAt || '—'\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.completed-at' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.completedAt || '—'\"\n [textContent]=\"row.completedAt || '—'\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.performed-by' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.performedByDisplay\"\n [textContent]=\"row.performedByDisplay\"\n ></span>\n </div>\n </div>\n\n <div class=\"axm-workflow-activity-instances-page__json-row\">\n <div class=\"axm-workflow-activity-instances-page__field axm-workflow-activity-instances-page__field--full\">\n <ax-label>\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.input' | translate | async }}\n </ax-label>\n <div class=\"axm-workflow-activity-instances-page__json-viewer\">\n <ax-json-viewer [json]=\"toViewerRoot(row.inputForViewer)\"></ax-json-viewer>\n </div>\n </div>\n <div class=\"axm-workflow-activity-instances-page__field axm-workflow-activity-instances-page__field--full\">\n <ax-label>\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.output' | translate | async }}\n </ax-label>\n <div class=\"axm-workflow-activity-instances-page__json-viewer\">\n <ax-json-viewer [json]=\"toViewerRoot(row.outputForViewer)\"></ax-json-viewer>\n </div>\n </div>\n </div>\n\n @if (row.isHumanTask) {\n <div class=\"axm-workflow-activity-instances-page__field axm-workflow-activity-instances-page__field--full\">\n <ax-label>\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.human-assignees' | translate | async }}\n </ax-label>\n <div class=\"axm-workflow-activity-instances-page__value\" [textContent]=\"row.humanAssigneesDisplay\"></div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n"],"names":["i1","i4","i5"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-workflow-management-index-DXIQw3Ao.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-instance-activity-instances-page-component.provider.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-instance-activity-instances-page.component.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-instance-activity-instances-page.component.html"],"sourcesContent":["/** Component key for the Workflow Instance Activity instances tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY =\n 'workflow-instance-activity-instances-page';\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY } from './WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY';\n\n//#region ---- Workflow Instance Activity Instances Page Component Provider ----\n\n@Injectable()\nexport class AXMWorkflowInstanceActivityInstancesPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: WORKFLOW_INSTANCE_ACTIVITY_INSTANCES_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./workflow-instance-activity-instances-page.component').then(\n (m) => m.AXMWorkflowInstanceActivityInstancesPageComponent,\n ),\n },\n ];\n }\n}\n\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, signal, untracked } from '@angular/core';\nimport { AXJsonViewerModule } from '@acorex/components/json-viewer';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';\nimport type { AXPWorkflowDefinition, AXPWorkflowInstance } from '@acorex/platform/contracts';\nimport { AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport {\n buildWorkflowActivityInstanceRows,\n workflowActivityStatusChipModifier,\n workflowActivityToViewerRoot,\n} from './workflow-activity-instance-rows.utils';\n\nexport type { AXMWorkflowActivityInstanceViewRow } from './workflow-activity-instance-rows.utils';\n\n//#region ---- Component ----\n\n/**\n * Readonly entity detail page: lists activity execution contexts for a workflow instance.\n * Data: `rootContext.workflowInstance` + definition loaded by `definitionId`, plus audit keys on\n * `workflowState.properties` (`_outcome`, `_activityOutput`, `_completedByUserId` / `_completedByLabel`).\n */\n@Component({\n selector: 'axm-workflow-instance-activity-instances-page',\n standalone: true,\n imports: [\n CommonModule,\n AXJsonViewerModule,\n AXDecoratorModule,\n AXLabelModule,\n AXLoadingModule,\n AXTranslationModule,\n ],\n templateUrl: './workflow-instance-activity-instances-page.component.html',\n styleUrl: './workflow-instance-activity-instances-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMWorkflowInstanceActivityInstancesPageComponent,\n },\n ],\n})\nexport class AXMWorkflowInstanceActivityInstancesPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Inputs ----\n\n rootContext = input<Record<string, unknown>>();\n\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n\n //#endregion\n\n //#region ---- Definition load ----\n\n private readonly definition = signal<AXPWorkflowDefinition | null>(null);\n protected readonly definitionLoading = signal(false);\n private loadSeq = 0;\n\n //#endregion\n\n constructor() {\n super();\n effect(() => {\n const ctx = this.rootContext();\n const defId =\n ctx && typeof ctx === 'object' && typeof (ctx as Record<string, unknown>)['definitionId'] === 'string'\n ? ((ctx as Record<string, unknown>)['definitionId'] as string)\n : undefined;\n if (!defId) {\n untracked(() => {\n this.definition.set(null);\n this.definitionLoading.set(false);\n });\n return;\n }\n const seq = ++this.loadSeq;\n void (async () => {\n this.definitionLoading.set(true);\n try {\n const def = await this.workflowDefinitionService.getWorkflowByName(defId);\n if (seq !== this.loadSeq) {\n return;\n }\n untracked(() => this.definition.set(def ?? null));\n } finally {\n if (seq === this.loadSeq) {\n this.definitionLoading.set(false);\n }\n }\n })();\n });\n }\n\n /**\n * Maps activity execution status to `status-chips.scss` modifier classes (uses theme `--ax-sys-color-*` tokens).\n */\n statusChipModifier(status: string): 'primary' | 'success' | 'warning' | 'danger' | 'neutral' | 'secondary' {\n return workflowActivityStatusChipModifier(status);\n }\n\n /**\n * Normalizes a value for `ax-json-viewer` (expects a root object; primitives/arrays are wrapped like the platform json-viewer widget).\n */\n toViewerRoot(value: unknown): Record<string, unknown> {\n return workflowActivityToViewerRoot(value);\n }\n\n //#region ---- View rows ----\n\n protected readonly rows = computed(() => {\n const ctx = this.rootContext();\n const wi = ctx?.['workflowInstance'] as AXPWorkflowInstance | undefined;\n const def = this.definition();\n return buildWorkflowActivityInstanceRows(wi, def ?? null, '—', '—');\n });\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-workflow-activity-instances-page ax-block ax-p-4 ax-min-h-[30vh] ax-overflow-y-auto\">\n @if (definitionLoading()) {\n <div class=\"axm-workflow-activity-instances-page__state\">\n <ax-loading></ax-loading>\n </div>\n } @else {\n @if (rows().length === 0) {\n <p class=\"axm-workflow-activity-instances-page__state ax-typo-caption\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.empty' | translate | async }}\n </p>\n } @else {\n <div class=\"axm-workflow-activity-instances-page__list\">\n @for (row of rows(); track row.contextId) {\n <div class=\"axm-workflow-activity-instances-page__card ax-block\">\n <div class=\"axm-workflow-activity-instances-page__header\">\n <h3 [textContent]=\"row.activityTitle\" class=\"axm-workflow-activity-instances-page__title\"></h3>\n <div class=\"axm-workflow-activity-instances-page__header-status\">\n <span class=\"axm-workflow-activity-instances-page__status-label\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.status' | translate | async }}\n </span>\n <span\n class=\"ax-inline-flex ax-items-center ax-rounded-md ax-px-2.5 ax-py-1 ax-text-xs ax-font-semibold ax-leading-none axp-status-chip\"\n [ngClass]=\"'axp-status-chip--' + statusChipModifier(row.status)\"\n >\n {{ row.status }}\n </span>\n </div>\n </div>\n\n <div class=\"axm-workflow-activity-instances-page__meta-grid\" role=\"list\">\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.activity-type' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.activityTypeName\"\n [textContent]=\"row.activityTypeName\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.node-id' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v axm-workflow-activity-instances-page__meta-v--code\"\n [attr.title]=\"row.nodeId\"\n [textContent]=\"row.nodeId\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.outcome' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.outcomeDisplay\"\n [textContent]=\"row.outcomeDisplay\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.started-at' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.startedAt || '—'\"\n [textContent]=\"row.startedAt || '—'\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.completed-at' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.completedAt || '—'\"\n [textContent]=\"row.completedAt || '—'\"\n ></span>\n </div>\n <div class=\"axm-workflow-activity-instances-page__meta-pair\" role=\"listitem\">\n <span class=\"axm-workflow-activity-instances-page__meta-k\">\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.performed-by' | translate | async }}\n </span>\n <span\n class=\"axm-workflow-activity-instances-page__meta-v\"\n [attr.title]=\"row.performedByDisplay\"\n [textContent]=\"row.performedByDisplay\"\n ></span>\n </div>\n </div>\n\n <div class=\"axm-workflow-activity-instances-page__json-row\">\n <div class=\"axm-workflow-activity-instances-page__field axm-workflow-activity-instances-page__field--full\">\n <ax-label>\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.input' | translate | async }}\n </ax-label>\n <div class=\"axm-workflow-activity-instances-page__json-viewer\">\n <ax-json-viewer [json]=\"toViewerRoot(row.inputForViewer)\"></ax-json-viewer>\n </div>\n </div>\n <div class=\"axm-workflow-activity-instances-page__field axm-workflow-activity-instances-page__field--full\">\n <ax-label>\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.output' | translate | async }}\n </ax-label>\n <div class=\"axm-workflow-activity-instances-page__json-viewer\">\n <ax-json-viewer [json]=\"toViewerRoot(row.outputForViewer)\"></ax-json-viewer>\n </div>\n </div>\n </div>\n\n @if (row.isHumanTask) {\n <div class=\"axm-workflow-activity-instances-page__field axm-workflow-activity-instances-page__field--full\">\n <ax-label>\n {{ '@workflow-management:workflow-instances.entities.workflow-instance.pages.activity-instances.field.human-assignees' | translate | async }}\n </ax-label>\n <div class=\"axm-workflow-activity-instances-page__value\" [textContent]=\"row.humanAssigneesDisplay\"></div>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n</div>\n"],"names":["i1","i4","i5"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AACO,MAAM,uDAAuD,GAClE;;ACKF;MAGa,yDAAyD,CAAA;AACpE,IAAA,MAAM,UAAU,GAAA;QACd,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,uDAAuD;AAC5D,gBAAA,MAAM,EAAE,MACN,+FAA+D,CAAC,IAAI,CAClE,CAAC,CAAC,KAAK,CAAC,CAAC,iDAAiD,CAC3D;AACJ,aAAA;SACF;IACH;8GAXW,yDAAyD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAzD,yDAAyD,EAAA,CAAA,CAAA;;2FAAzD,yDAAyD,EAAA,UAAA,EAAA,CAAA;kBADrE;;;ACSD;AAEA;;;;AAIG;AAsBG,MAAO,iDAAkD,SAAQ,0BAA0B,CAAA;;AAuB/F,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QArBT,IAAA,CAAA,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA2B;QAE9C,IAAA,CAAA,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA2B;;;AAM5B,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,4BAA4B,CAAC;;;AAMhE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA+B,IAAI,iFAAC;AACrD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,wFAAC;QAC5C,IAAA,CAAA,OAAO,GAAG,CAAC;;AAqDA,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,MAAM,EAAE,GAAG,GAAG,GAAG,kBAAkB,CAAoC;AACvE,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,OAAO,iCAAiC,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;AACrE,QAAA,CAAC,2EAAC;QApDA,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,MAAM,KAAK,GACT,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAQ,GAA+B,CAAC,cAAc,CAAC,KAAK;AAC5F,kBAAI,GAA+B,CAAC,cAAc;kBAChD,SAAS;YACf,IAAI,CAAC,KAAK,EAAE;gBACV,SAAS,CAAC,MAAK;AACb,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,gBAAA,CAAC,CAAC;gBACF;YACF;AACA,YAAA,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,OAAO;YAC1B,KAAK,CAAC,YAAW;AACf,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI;oBACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACzE,oBAAA,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE;wBACxB;oBACF;AACA,oBAAA,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;gBACnD;wBAAU;AACR,oBAAA,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE;AACxB,wBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;oBACnC;gBACF;YACF,CAAC,GAAG;AACN,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAA;AAC/B,QAAA,OAAO,kCAAkC,CAAC,MAAM,CAAC;IACnD;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,OAAO,4BAA4B,CAAC,KAAK,CAAC;IAC5C;8GApEW,iDAAiD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iDAAiD,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPjD;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,iDAAiD;AAC/D,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5CH,srOA6HA,EAAA,MAAA,EAAA,CAAA,kpGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhGI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAYV,iDAAiD,EAAA,UAAA,EAAA,CAAA;kBArB7D,SAAS;+BACE,+CAA+C,EAAA,UAAA,EAC7C,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,kBAAkB;wBAClB,iBAAiB;wBACjB,aAAa;wBACb,eAAe;wBACf,mBAAmB;qBACpB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,iDAAmD;AAC/D,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,srOAAA,EAAA,MAAA,EAAA,CAAA,kpGAAA,CAAA,EAAA;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-workflow-management-save-workflow-definition-activities.command-huamhFhc.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/entities/workflow-definition/commands/save-workflow-definition-activities.command.ts"],"sourcesContent":["import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport type { AXPWorkflowGraph } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../const';\n\nexport const WORKFLOW_DEFINITION_ACTIVITIES_SAVE_COMMAND = 'WorkflowManagement.WorkflowDefinition:Activities:Save';\n\nexport interface SaveWorkflowDefinitionActivitiesInput {\n id: string;\n graph: AXPWorkflowGraph;\n /** When true, suppresses success toast (used by background auto-save). */\n silent?: boolean;\n __context__?: Record<string, unknown>;\n}\n\n/**\n * Persists the workflow definition graph edited from the Activities custom page.\n */\n@Injectable()\nexport class SaveWorkflowDefinitionActivitiesCommand\n implements AXPCommand<SaveWorkflowDefinitionActivitiesInput, unknown>\n{\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n async execute(input: SaveWorkflowDefinitionActivitiesInput): Promise<AXPExecuteCommandResult<unknown>> {\n const { id, graph, silent } = input;\n\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const entityRef = `${RootConfig.module.name}.${RootConfig.entities.workflowDefinition.name}`;\n const dataAccessor = this.entityService.withEntity(entityRef).data<any, any>();\n\n await dataAccessor.update(id, { graph });\n\n return {\n success: true,\n data: { id, graph },\n metadata: { refresh: false },\n ...(silent\n ? {}\n : {\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n }),\n };\n } catch (error: unknown) {\n const message =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.generic.error.description');\n\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n}\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,2CAA2C,GAAG;AAU3D;;AAEG;MAEU,uCAAuC,CAAA;AADpD,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AA4CnE,IAAA;IA1CC,MAAM,OAAO,CAAC,KAA4C,EAAA;QACxD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK;QAEnC,IAAI,CAAC,EAAE,EAAE;YACP,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,uCAAuC,CAAC;AAC5F,iBAAA;aACF;QACH;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC5F,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAY;YAE9E,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YAExC,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;AACnB,gBAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC5B,gBAAA,IAAI;AACF,sBAAE;AACF,sBAAE;AACE,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,+CAA+C,CAAC;AACpG,yBAAA;qBACF,CAAC;aACP;QACH;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GACX,KAAK,YAAY;kBACb,KAAK,CAAC;kBACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,6CAA6C,CAAC;YAEjG,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;aAC3B;QACH;IACF;8GA/CW,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvC,uCAAuC,EAAA,CAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD;;;;;"}
1
+ {"version":3,"file":"acorex-modules-workflow-management-save-workflow-definition-activities.command-huamhFhc.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/entities/workflow-definition/commands/save-workflow-definition-activities.command.ts"],"sourcesContent":["import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport type { AXPWorkflowGraph } from '@acorex/platform/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../const';\n\nexport const WORKFLOW_DEFINITION_ACTIVITIES_SAVE_COMMAND = 'WorkflowManagement.WorkflowDefinition:Activities:Save';\n\nexport interface SaveWorkflowDefinitionActivitiesInput {\n id: string;\n graph: AXPWorkflowGraph;\n /** When true, suppresses success toast (used by background auto-save). */\n silent?: boolean;\n __context__?: Record<string, unknown>;\n}\n\n/**\n * Persists the workflow definition graph edited from the Activities custom page.\n */\n@Injectable()\nexport class SaveWorkflowDefinitionActivitiesCommand\n implements AXPCommand<SaveWorkflowDefinitionActivitiesInput, unknown>\n{\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n async execute(input: SaveWorkflowDefinitionActivitiesInput): Promise<AXPExecuteCommandResult<unknown>> {\n const { id, graph, silent } = input;\n\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const entityRef = `${RootConfig.module.name}.${RootConfig.entities.workflowDefinition.name}`;\n const dataAccessor = this.entityService.withEntity(entityRef).data<any, any>();\n\n await dataAccessor.update(id, { graph });\n\n return {\n success: true,\n data: { id, graph },\n metadata: { refresh: false },\n ...(silent\n ? {}\n : {\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n }),\n };\n } catch (error: unknown) {\n const message =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.generic.error.description');\n\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n}\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,2CAA2C,GAAG;AAU3D;;AAEG;MAEU,uCAAuC,CAAA;AADpD,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AA4CnE,IAAA;IA1CC,MAAM,OAAO,CAAC,KAA4C,EAAA;QACxD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK;QAEnC,IAAI,CAAC,EAAE,EAAE;YACP,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,uCAAuC,CAAC;AAC5F,iBAAA;aACF;QACH;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE;AAC5F,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAY;YAE9E,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YAExC,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;AACnB,gBAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC5B,gBAAA,IAAI;AACF,sBAAE;AACF,sBAAE;AACE,wBAAA,OAAO,EAAE;4BACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,+CAA+C,CAAC;AACpG,yBAAA;qBACF,CAAC;aACP;QACH;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GACX,KAAK,YAAY;kBACb,KAAK,CAAC;kBACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,6CAA6C,CAAC;YAEjG,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;aAC3B;QACH;IACF;8GA/CW,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAvC,uCAAuC,EAAA,CAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-activity-instance-rows.utils.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport {\n AXPActivityExecutionContextState,\n AXPWorkflowActivityInstance,\n AXPWorkflowDefinition,\n AXPWorkflowInstance,\n} from '@acorex/platform/workflow';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One row in a workflow activity timeline (engine state, definition graph, persisted audit keys). */\nexport interface AXMWorkflowActivityInstanceViewRow {\n contextId: string;\n nodeId: string;\n activityTitle: string;\n activityTypeName: string;\n isHumanTask: boolean;\n status: string;\n startedAt: string;\n completedAt: string | null;\n /** Connection port / outcome that was taken after this step (from workflow state variables). */\n outcomeDisplay: string;\n /** Input from graph definition — passed to `ax-json-viewer`. */\n inputForViewer: unknown;\n /** Captured output for this step — passed to `ax-json-viewer`. */\n outputForViewer: unknown;\n humanAssigneesDisplay: string;\n /** Who performed the step (from persisted `completedByLabel` / `completedByUserId` when available). */\n performedByDisplay: string;\n}\n\n//#endregion\n\n//#region ---- Helpers (display only) ----\n\nexport function formatReadableActivityName(value: string): string {\n return value\n .replace(/^workflow-activity:/, '')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/[-_]/g, ' ')\n .split(' ')\n .filter((token) => token.length > 0)\n .map((token) => token.charAt(0).toUpperCase() + token.slice(1))\n .join(' ');\n}\n\nfunction normalizeUserIds(value: unknown): string[] {\n if (value == null) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((v): v is string => typeof v === 'string' && v.trim().length > 0);\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n return [value.trim()];\n }\n return [];\n}\n\nfunction formatHumanAssigneesFromPayload(payload: Record<string, unknown> | null | undefined): string {\n if (!payload) {\n return '';\n }\n const assigned = normalizeUserIds(payload['assignedUserIds']);\n const candidateUsers = normalizeUserIds(payload['candidateUserIds']);\n const candidateRoles = normalizeUserIds(payload['candidateRoleIds']);\n const labels = [\n ...assigned.map((id) => `User:${id}`),\n ...candidateUsers.map((id) => `Candidate:${id}`),\n ...candidateRoles.map((id) => `Role:${id}`),\n ];\n const unique = [...new Set(labels)];\n return unique.length > 0 ? unique.join(', ') : '';\n}\n\nfunction formatPerformedBy(label: unknown, id: unknown, empty: string): string {\n const ls = label != null && String(label).trim() !== '' ? String(label).trim() : '';\n const idStr = id != null && String(id).trim() !== '' ? String(id).trim() : '';\n if (ls && idStr) {\n return `${ls} (${idStr})`;\n }\n if (ls) {\n return ls;\n }\n if (idStr) {\n return idStr;\n }\n return empty;\n}\n\nfunction resolveActivityTitle(graphActivity: AXPWorkflowActivityInstance | undefined, nodeId: string): string {\n const rawTitle = graphActivity?.inputs?.['title'];\n if (typeof rawTitle === 'string' && rawTitle.trim().length > 0) {\n return rawTitle.trim();\n }\n if (graphActivity?.name) {\n return formatReadableActivityName(graphActivity.name);\n }\n return formatReadableActivityName(nodeId);\n}\n\nfunction resolveOutputForViewer(\n props: Record<string, unknown>,\n nodeId: string,\n ctx: AXPActivityExecutionContextState,\n): unknown {\n const key = `${nodeId}_activityOutput`;\n if (key in props && props[key] !== undefined) {\n return props[key];\n }\n if (ctx.activityState != null) {\n return ctx.activityState;\n }\n const p = ctx.properties;\n if (p && typeof p === 'object' && Object.keys(p as object).length > 0) {\n return p;\n }\n return null;\n}\n\n/**\n * Maps activity execution status to `status-chips.scss` modifier classes.\n */\nexport function workflowActivityStatusChipModifier(\n status: string,\n): 'primary' | 'success' | 'warning' | 'danger' | 'neutral' | 'secondary' {\n const s = (status ?? '').trim().toLowerCase();\n if (s === 'running' || s === 'pending' || s === 'executing') {\n return 'primary';\n }\n if (s === 'completed' || s === 'succeeded' || s === 'success') {\n return 'success';\n }\n if (s === 'canceled' || s === 'cancelled') {\n return 'neutral';\n }\n if (s === 'faulted' || s === 'failed' || s === 'error') {\n return 'danger';\n }\n if (s === 'suspended' || s === 'waiting') {\n return 'warning';\n }\n return 'secondary';\n}\n\n/**\n * Normalizes a value for `ax-json-viewer` (expects a root object).\n */\nexport function workflowActivityToViewerRoot(value: unknown): Record<string, unknown> {\n if (value === null || value === undefined) {\n return {};\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { value };\n}\n\nexport function buildWorkflowActivityInstanceRows(\n instance: AXPWorkflowInstance | null | undefined,\n definition: AXPWorkflowDefinition | null | undefined,\n emptyAssigneesLabel: string,\n notAvailableLabel: string,\n): AXMWorkflowActivityInstanceViewRow[] {\n if (!instance?.workflowState) {\n return [];\n }\n const props = (instance.workflowState.properties ?? {}) as Record<string, unknown>;\n const contexts = instance.workflowState.activityExecutionContexts ?? [];\n const activities = definition?.graph?.activities ?? [];\n const findActivity = (nodeId: string) => activities.find((a) => a.id === nodeId);\n const extended = instance as AXPWorkflowInstance & {\n bookmarks?: Array<{\n activityId?: string;\n payload?: Record<string, unknown> | null;\n isConsumed?: boolean;\n consumed?: boolean;\n }>;\n };\n const bookmarks = extended.bookmarks ?? [];\n\n const rows: AXMWorkflowActivityInstanceViewRow[] = contexts.map((ctx: AXPActivityExecutionContextState) => {\n const nodeId = ctx.scheduledActivityNodeId;\n const graphActivity = findActivity(nodeId);\n const isHumanTask =\n graphActivity?.name === 'workflow-activity:human-task' || graphActivity?.name === 'workflow-activity:cartable';\n const bookmark = bookmarks.find((b) => b.activityId === nodeId);\n const payload = bookmark?.payload && typeof bookmark.payload === 'object' ? bookmark.payload : null;\n let humanAssignees = isHumanTask ? formatHumanAssigneesFromPayload(payload) : '';\n if (isHumanTask && !humanAssignees) {\n humanAssignees = emptyAssigneesLabel;\n }\n\n const outKey = `${nodeId}_outcome`;\n const outcomeRaw = props[outKey];\n const outcomeDisplay =\n outcomeRaw !== undefined && outcomeRaw !== null && String(outcomeRaw).length > 0\n ? String(outcomeRaw)\n : notAvailableLabel;\n\n const inputForViewer: unknown = graphActivity?.inputs ?? null;\n const outputForViewer = resolveOutputForViewer(props, nodeId, ctx);\n\n const labelKey = `${nodeId}_completedByLabel`;\n const idKey = `${nodeId}_completedByUserId`;\n const performedByDisplay = formatPerformedBy(props[labelKey], props[idKey], notAvailableLabel);\n\n return {\n contextId: ctx.id,\n nodeId,\n activityTitle: resolveActivityTitle(graphActivity, nodeId),\n activityTypeName: graphActivity?.name ?? notAvailableLabel,\n isHumanTask,\n status: String(ctx.status ?? ''),\n startedAt: ctx.startedAt ?? '',\n completedAt: ctx.completedAt ?? null,\n outcomeDisplay,\n inputForViewer,\n outputForViewer,\n humanAssigneesDisplay: isHumanTask ? humanAssignees : notAvailableLabel,\n performedByDisplay,\n };\n });\n\n rows.sort((a, b) => {\n const ta = new Date(a.startedAt).getTime();\n const tb = new Date(b.startedAt).getTime();\n if (ta !== tb) {\n return ta - tb;\n }\n return a.contextId.localeCompare(b.contextId);\n });\n\n return rows;\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-instance-activity-instances-page/workflow-activity-instance-rows.utils.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type {\n AXPActivityExecutionContextState,\n AXPWorkflowActivityInstance,\n AXPWorkflowDefinition,\n AXPWorkflowInstance,\n} from '@acorex/platform/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One row in a workflow activity timeline (engine state, definition graph, persisted audit keys). */\nexport interface AXMWorkflowActivityInstanceViewRow {\n contextId: string;\n nodeId: string;\n activityTitle: string;\n activityTypeName: string;\n isHumanTask: boolean;\n status: string;\n startedAt: string;\n completedAt: string | null;\n /** Connection port / outcome that was taken after this step (from workflow state variables). */\n outcomeDisplay: string;\n /** Input from graph definition — passed to `ax-json-viewer`. */\n inputForViewer: unknown;\n /** Captured output for this step — passed to `ax-json-viewer`. */\n outputForViewer: unknown;\n humanAssigneesDisplay: string;\n /** Who performed the step (from persisted `completedByLabel` / `completedByUserId` when available). */\n performedByDisplay: string;\n}\n\n//#endregion\n\n//#region ---- Helpers (display only) ----\n\nexport function formatReadableActivityName(value: string): string {\n return value\n .replace(/^workflow-activity:/, '')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/[-_]/g, ' ')\n .split(' ')\n .filter((token) => token.length > 0)\n .map((token) => token.charAt(0).toUpperCase() + token.slice(1))\n .join(' ');\n}\n\nfunction normalizeUserIds(value: unknown): string[] {\n if (value == null) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((v): v is string => typeof v === 'string' && v.trim().length > 0);\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n return [value.trim()];\n }\n return [];\n}\n\nfunction formatHumanAssigneesFromPayload(payload: Record<string, unknown> | null | undefined): string {\n if (!payload) {\n return '';\n }\n const assigned = normalizeUserIds(payload['assignedUserIds']);\n const candidateUsers = normalizeUserIds(payload['candidateUserIds']);\n const candidateRoles = normalizeUserIds(payload['candidateRoleIds']);\n const labels = [\n ...assigned.map((id) => `User:${id}`),\n ...candidateUsers.map((id) => `Candidate:${id}`),\n ...candidateRoles.map((id) => `Role:${id}`),\n ];\n const unique = [...new Set(labels)];\n return unique.length > 0 ? unique.join(', ') : '';\n}\n\nfunction formatPerformedBy(label: unknown, id: unknown, empty: string): string {\n const ls = label != null && String(label).trim() !== '' ? String(label).trim() : '';\n const idStr = id != null && String(id).trim() !== '' ? String(id).trim() : '';\n if (ls && idStr) {\n return `${ls} (${idStr})`;\n }\n if (ls) {\n return ls;\n }\n if (idStr) {\n return idStr;\n }\n return empty;\n}\n\nfunction resolveActivityTitle(graphActivity: AXPWorkflowActivityInstance | undefined, nodeId: string): string {\n const rawTitle = graphActivity?.inputs?.['title'];\n if (typeof rawTitle === 'string' && rawTitle.trim().length > 0) {\n return rawTitle.trim();\n }\n if (graphActivity?.name) {\n return formatReadableActivityName(graphActivity.name);\n }\n return formatReadableActivityName(nodeId);\n}\n\nfunction resolveOutputForViewer(\n props: Record<string, unknown>,\n nodeId: string,\n ctx: AXPActivityExecutionContextState,\n): unknown {\n const key = `${nodeId}_activityOutput`;\n if (key in props && props[key] !== undefined) {\n return props[key];\n }\n if (ctx.activityState != null) {\n return ctx.activityState;\n }\n const p = ctx.properties;\n if (p && typeof p === 'object' && Object.keys(p as object).length > 0) {\n return p;\n }\n return null;\n}\n\n/**\n * Maps activity execution status to `status-chips.scss` modifier classes.\n */\nexport function workflowActivityStatusChipModifier(\n status: string,\n): 'primary' | 'success' | 'warning' | 'danger' | 'neutral' | 'secondary' {\n const s = (status ?? '').trim().toLowerCase();\n if (s === 'running' || s === 'pending' || s === 'executing') {\n return 'primary';\n }\n if (s === 'completed' || s === 'succeeded' || s === 'success') {\n return 'success';\n }\n if (s === 'canceled' || s === 'cancelled') {\n return 'neutral';\n }\n if (s === 'faulted' || s === 'failed' || s === 'error') {\n return 'danger';\n }\n if (s === 'suspended' || s === 'waiting') {\n return 'warning';\n }\n return 'secondary';\n}\n\n/**\n * Normalizes a value for `ax-json-viewer` (expects a root object).\n */\nexport function workflowActivityToViewerRoot(value: unknown): Record<string, unknown> {\n if (value === null || value === undefined) {\n return {};\n }\n if (typeof value === 'object' && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { value };\n}\n\nexport function buildWorkflowActivityInstanceRows(\n instance: AXPWorkflowInstance | null | undefined,\n definition: AXPWorkflowDefinition | null | undefined,\n emptyAssigneesLabel: string,\n notAvailableLabel: string,\n): AXMWorkflowActivityInstanceViewRow[] {\n if (!instance?.workflowState) {\n return [];\n }\n const props = (instance.workflowState.properties ?? {}) as Record<string, unknown>;\n const contexts = instance.workflowState.activityExecutionContexts ?? [];\n const activities = definition?.graph?.activities ?? [];\n const findActivity = (nodeId: string) => activities.find((a) => a.id === nodeId);\n const extended = instance as AXPWorkflowInstance & {\n bookmarks?: Array<{\n activityId?: string;\n payload?: Record<string, unknown> | null;\n isConsumed?: boolean;\n consumed?: boolean;\n }>;\n };\n const bookmarks = extended.bookmarks ?? [];\n\n const rows: AXMWorkflowActivityInstanceViewRow[] = contexts.map((ctx: AXPActivityExecutionContextState) => {\n const nodeId = ctx.scheduledActivityNodeId;\n const graphActivity = findActivity(nodeId);\n const isHumanTask =\n graphActivity?.name === 'workflow-activity:human-task' || graphActivity?.name === 'workflow-activity:cartable';\n const bookmark = bookmarks.find((b) => b.activityId === nodeId);\n const payload = bookmark?.payload && typeof bookmark.payload === 'object' ? bookmark.payload : null;\n let humanAssignees = isHumanTask ? formatHumanAssigneesFromPayload(payload) : '';\n if (isHumanTask && !humanAssignees) {\n humanAssignees = emptyAssigneesLabel;\n }\n\n const outKey = `${nodeId}_outcome`;\n const outcomeRaw = props[outKey];\n const outcomeDisplay =\n outcomeRaw !== undefined && outcomeRaw !== null && String(outcomeRaw).length > 0\n ? String(outcomeRaw)\n : notAvailableLabel;\n\n const inputForViewer: unknown = graphActivity?.inputs ?? null;\n const outputForViewer = resolveOutputForViewer(props, nodeId, ctx);\n\n const labelKey = `${nodeId}_completedByLabel`;\n const idKey = `${nodeId}_completedByUserId`;\n const performedByDisplay = formatPerformedBy(props[labelKey], props[idKey], notAvailableLabel);\n\n return {\n contextId: ctx.id,\n nodeId,\n activityTitle: resolveActivityTitle(graphActivity, nodeId),\n activityTypeName: graphActivity?.name ?? notAvailableLabel,\n isHumanTask,\n status: String(ctx.status ?? ''),\n startedAt: ctx.startedAt ?? '',\n completedAt: ctx.completedAt ?? null,\n outcomeDisplay,\n inputForViewer,\n outputForViewer,\n humanAssigneesDisplay: isHumanTask ? humanAssignees : notAvailableLabel,\n performedByDisplay,\n };\n });\n\n rows.sort((a, b) => {\n const ta = new Date(a.startedAt).getTime();\n const tb = new Date(b.startedAt).getTime();\n if (ta !== tb) {\n return ta - tb;\n }\n return a.contextId.localeCompare(b.contextId);\n });\n\n return rows;\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-workflow-management-workflow-run-history-popup.component-FLqOdI2t.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-history-rows.utils.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-popup.component.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-popup.component.html"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { get, toString } from 'lodash-es';\nimport {\n AXPActivityExecutionContextState,\n AXPWorkflowActivityInstance,\n AXPWorkflowDefinition,\n AXPWorkflowInstance,\n AXPWorkflowState,\n} from '@acorex/platform/workflow';\nimport { AXMWorkflowManagementWorkflowInstanceEntityModel } from '../../../../entities/workflow-instance/workflow-instance.types';\nimport {\n buildWorkflowTaskDisplayParams,\n buildWorkflowTaskDisplayParamsFromWorkflowState,\n composeWorkflowTaskTitleFromContext,\n type WorkflowTaskTranslationDeps,\n} from '../../../task-provider/workflow-task-translation.utils';\nimport { formatReadableActivityName } from '../../../workflow-instance-activity-instances-page/workflow-activity-instance-rows.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One end-user row in the workflow run history timeline. */\nexport interface AXMWorkflowHistoryRow {\n contextId: string;\n /** Graph activity id for this step (`scheduledActivityNodeId`). */\n nodeId: string;\n stepTitle: string;\n status: string;\n statusDisplay: string;\n performedBy: string;\n assignee: string;\n startedAt: string;\n completedAt: string | null;\n isHumanTask: boolean;\n /** Steps where assignee and performer are shown (human tasks, forms, sign-off, rejection reason). */\n showsParticipants: boolean;\n}\n\nexport interface AXMWorkflowHistorySummary {\n reporter: string;\n startedAt: string | null;\n}\n\ninterface WorkflowHistoryEntityLookup {\n byKey(id: string): Promise<unknown>;\n}\n\n/** Optional resolvers for localized step and popup titles. */\nexport interface WorkflowHistoryTitleResolveContext {\n resolveActivityDefinitionTitle?: (activityName: string) => Promise<string>;\n resolveEntityRefTitle?: (moduleEntityRef: string) => Promise<string>;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Activity types omitted from end-user history (internal plumbing). */\nconst HIDDEN_ACTIVITY_NAMES = new Set(['workflow-activity:get-current-session-user']);\n\n/** Activity types that show assignee and performer in end-user history. */\nconst USER_PARTICIPANT_ACTIVITY_NAMES = new Set([\n 'workflow-activity:human-task',\n 'workflow-activity:cartable',\n 'workflow-activity:sign-off',\n 'workflow-activity:rejection-reason',\n 'workflow-activity:create-entity-form',\n]);\n\nconst ACTIVITY_STATUS_KEYS: Record<string, string> = {\n Running: '@workflow-management:workflow-run.history.activity-status.running',\n Completed: '@workflow-management:workflow-run.history.activity-status.completed',\n Pending: '@workflow-management:workflow-run.history.activity-status.pending',\n Executing: '@workflow-management:workflow-run.history.activity-status.executing',\n Suspended: '@workflow-management:workflow-run.history.activity-status.suspended',\n Canceled: '@workflow-management:workflow-run.history.activity-status.canceled',\n Cancelled: '@workflow-management:workflow-run.history.activity-status.canceled',\n Faulted: '@workflow-management:workflow-run.history.activity-status.faulted',\n Failed: '@workflow-management:workflow-run.history.activity-status.failed',\n};\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction normalizeUserIds(value: unknown): string[] {\n if (value == null) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((v): v is string => typeof v === 'string' && v.trim().length > 0);\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n return [value.trim()];\n }\n return [];\n}\n\nfunction formatPerformedByLabel(label: unknown, id: unknown, empty: string): string {\n const labelText = label != null && String(label).trim() !== '' ? String(label).trim() : '';\n if (labelText && labelText !== 'System') {\n return labelText;\n }\n const idText = id != null && String(id).trim() !== '' ? String(id).trim() : '';\n if (idText) {\n return idText;\n }\n return empty;\n}\n\nfunction isTranslationKey(value: string): boolean {\n return value.trim().startsWith('@');\n}\n\nfunction getGraphHumanTaskContext(graphActivity: AXPWorkflowActivityInstance | undefined): Record<string, unknown> | undefined {\n const context = graphActivity?.inputs?.['context'];\n if (context != null && typeof context === 'object' && !Array.isArray(context)) {\n return context as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction parseBookmarkPayload(bookmark: {\n payload?: Record<string, unknown> | null;\n payloadJson?: string;\n} | undefined): Record<string, unknown> | null {\n if (bookmark?.payload && typeof bookmark.payload === 'object') {\n return bookmark.payload;\n }\n const raw = bookmark?.payloadJson?.trim();\n if (!raw) {\n return null;\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n return parsed != null && typeof parsed === 'object' && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\nfunction hasUnresolvedInterpolation(value: string): boolean {\n return /\\{\\{[^}]+\\}\\}/.test(value);\n}\n\nasync function resolveDisplayText(\n translationService: AXTranslationService,\n value: string,\n params?: Record<string, string>,\n): Promise<string> {\n const raw = value?.trim();\n if (!raw) {\n return '';\n }\n if (!isTranslationKey(raw)) {\n return raw;\n }\n return translationService.translateAsync(raw, { params });\n}\n\nfunction isModuleEntityRef(value: string): boolean {\n return /^[A-Za-z][\\w]*\\.[A-Za-z][\\w]*$/.test(value.trim());\n}\n\nasync function resolveGraphActivityTitle(\n translationService: AXTranslationService,\n graphActivity: AXPWorkflowActivityInstance | undefined,\n workflowState: AXPWorkflowState | undefined,\n taskTranslationDeps: WorkflowTaskTranslationDeps,\n titleResolveContext: WorkflowHistoryTitleResolveContext | undefined,\n): Promise<string> {\n const graphTitle = typeof graphActivity?.title === 'string' ? graphActivity.title.trim() : '';\n if (graphTitle) {\n if (isTranslationKey(graphTitle)) {\n const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);\n const resolved = await resolveDisplayText(translationService, graphTitle, params);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n if (isModuleEntityRef(graphTitle) && titleResolveContext?.resolveEntityRefTitle) {\n const entityTitle = await titleResolveContext.resolveEntityRefTitle(graphTitle);\n if (entityTitle.trim()) {\n return entityTitle.trim();\n }\n }\n if (!isModuleEntityRef(graphTitle)) {\n const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);\n const resolved = await resolveDisplayText(translationService, graphTitle, params);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n }\n\n const inputTitle =\n typeof graphActivity?.inputs?.['title'] === 'string' ? graphActivity.inputs['title'].trim() : '';\n if (inputTitle) {\n const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);\n const resolved = await resolveDisplayText(translationService, inputTitle, params);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n\n const activityName = graphActivity?.name?.trim() ?? '';\n if (activityName && titleResolveContext?.resolveActivityDefinitionTitle) {\n const definitionTitle = await titleResolveContext.resolveActivityDefinitionTitle(activityName);\n if (definitionTitle.trim()) {\n return definitionTitle.trim();\n }\n }\n\n return '';\n}\n\nasync function resolveStepTitle(\n translationService: AXTranslationService,\n graphActivity: AXPWorkflowActivityInstance | undefined,\n nodeId: string,\n isHumanTask: boolean,\n payload: Record<string, unknown> | null,\n workflowState: AXPWorkflowState | undefined,\n taskTranslationDeps: WorkflowTaskTranslationDeps,\n titleResolveContext: WorkflowHistoryTitleResolveContext | undefined,\n): Promise<string> {\n if (isHumanTask) {\n const payloadContext =\n payload?.['context'] && typeof payload['context'] === 'object'\n ? (payload['context'] as Record<string, unknown>)\n : undefined;\n const graphContext = getGraphHumanTaskContext(graphActivity);\n const graphParams = await buildWorkflowTaskDisplayParams(graphContext, workflowState, taskTranslationDeps);\n const payloadParams = await buildWorkflowTaskDisplayParams(payloadContext, workflowState, taskTranslationDeps);\n const taskParams = { ...graphParams, ...payloadParams };\n\n const payloadTitle = typeof payload?.['title'] === 'string' ? payload['title'].trim() : '';\n const graphTitle =\n typeof graphActivity?.inputs?.['title'] === 'string' ? graphActivity.inputs['title'].trim() : '';\n const titleSource = payloadTitle || graphTitle;\n\n if (titleSource) {\n const resolved = await resolveDisplayText(translationService, titleSource, taskParams);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n\n const composed =\n (await composeWorkflowTaskTitleFromContext(payloadContext, workflowState, taskTranslationDeps)) ||\n (await composeWorkflowTaskTitleFromContext(graphContext, workflowState, taskTranslationDeps));\n if (composed && !hasUnresolvedInterpolation(composed)) {\n return composed;\n }\n\n if (taskParams['employeeDisplayName']?.trim() && taskParams['leaveTypeTitle']?.trim()) {\n return `${taskParams['employeeDisplayName']} — ${taskParams['leaveTypeTitle']}`;\n }\n }\n\n const resolvedGraphTitle = await resolveGraphActivityTitle(\n translationService,\n graphActivity,\n workflowState,\n taskTranslationDeps,\n titleResolveContext,\n );\n if (resolvedGraphTitle) {\n return resolvedGraphTitle;\n }\n\n const rawTitle = graphActivity?.name\n ? formatReadableActivityName(graphActivity.name)\n : formatReadableActivityName(nodeId);\n return rawTitle;\n}\n\nasync function resolveActivityStatus(\n translationService: AXTranslationService,\n status: string,\n): Promise<string> {\n const normalized = (status ?? '').trim();\n if (!normalized) {\n return '';\n }\n const key = ACTIVITY_STATUS_KEYS[normalized] ?? ACTIVITY_STATUS_KEYS[normalized.toLowerCase()];\n if (key) {\n return translationService.translateAsync(key);\n }\n return formatReadableActivityName(normalized);\n}\n\nasync function resolveUserDisplayName(\n userEntityData: WorkflowHistoryEntityLookup,\n userId: string,\n cache: Map<string, string>,\n): Promise<string> {\n const id = userId.trim();\n if (!id) {\n return '';\n }\n const cached = cache.get(id);\n if (cached) {\n return cached;\n }\n let display = id;\n try {\n const row = await userEntityData.byKey(id);\n if (row && typeof row === 'object') {\n const displayName =\n 'displayName' in row ? String((row as { displayName?: unknown }).displayName ?? '').trim() : '';\n const username = 'username' in row ? String((row as { username?: unknown }).username ?? '').trim() : '';\n display = displayName || username || id;\n }\n } catch {\n display = id;\n }\n cache.set(id, display);\n return display;\n}\n\nasync function resolveAssigneeDisplay(\n payload: Record<string, unknown> | null,\n userEntityData: WorkflowHistoryEntityLookup,\n userCache: Map<string, string>,\n emptyLabel: string,\n): Promise<string> {\n if (!payload) {\n return emptyLabel;\n }\n const assigned = normalizeUserIds(payload['assignedUserIds']);\n if (assigned.length > 0) {\n const names = await Promise.all(assigned.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n return names.filter((name) => name.length > 0).join(', ') || emptyLabel;\n }\n const candidates = normalizeUserIds(payload['candidateUserIds']);\n if (candidates.length > 0) {\n const names = await Promise.all(candidates.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n return names.filter((name) => name.length > 0).join(', ') || emptyLabel;\n }\n return emptyLabel;\n}\n\n/**\n * Resolves who was assigned to a step (original assignee when take-over occurred).\n */\nasync function resolveStepAssignee(\n nodeId: string,\n props: Record<string, unknown>,\n payload: Record<string, unknown> | null,\n userEntityData: WorkflowHistoryEntityLookup,\n userCache: Map<string, string>,\n emptyLabel: string,\n): Promise<string> {\n const reassign = props[`${nodeId}_reassignedToSelf`];\n if (reassign && typeof reassign === 'object' && !Array.isArray(reassign)) {\n const fromIds = normalizeUserIds((reassign as { fromUserIds?: unknown }).fromUserIds);\n if (fromIds.length > 0) {\n const names = await Promise.all(fromIds.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n const joined = names.filter((name) => name.length > 0).join(', ');\n if (joined) {\n return joined;\n }\n }\n }\n\n const assignedAudit = normalizeUserIds(props[`${nodeId}_assignedUserIds`]);\n if (assignedAudit.length > 0) {\n const names = await Promise.all(assignedAudit.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n const joined = names.filter((name) => name.length > 0).join(', ');\n if (joined) {\n return joined;\n }\n }\n\n const fromBookmark = await resolveAssigneeDisplay(payload, userEntityData, userCache, '');\n if (fromBookmark) {\n return fromBookmark;\n }\n\n return emptyLabel;\n}\n\nfunction resolveReporterDisplay(instance: AXMWorkflowManagementWorkflowInstanceEntityModel): string {\n const audit = instance.auditInfo?.created?.by;\n if (audit?.fullName?.trim()) {\n return audit.fullName.trim();\n }\n if (instance.assignUserRef?.displayName?.trim()) {\n return instance.assignUserRef.displayName.trim();\n }\n return '';\n}\n\nfunction shouldIncludeActivity(graphActivity: AXPWorkflowActivityInstance | undefined): boolean {\n const name = graphActivity?.name?.trim();\n if (name && HIDDEN_ACTIVITY_NAMES.has(name)) {\n return false;\n }\n return true;\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\n/**\n * Builds end-user workflow history rows (no technical audit fields, resolved titles and user names).\n */\nfunction resolveInstanceStatusTranslationKey(status: string, subStatus: string): string {\n const normalizedStatus = status.trim().toLowerCase();\n const normalizedSubStatus = subStatus.trim().toLowerCase();\n const combined = `${normalizedStatus}-${normalizedSubStatus}`;\n const combinedMap: Record<string, string> = {\n 'running-executing': 'in-progress',\n 'running-suspended': 'pending-user-action',\n 'running-pending': 'waiting',\n 'running-idle': 'waiting',\n 'finished-finished': 'completed',\n 'finished-faulted': 'failed',\n 'finished-cancelled': 'cancelled',\n 'finished-canceled': 'cancelled',\n };\n if (combinedMap[combined]) {\n return combinedMap[combined];\n }\n if (normalizedStatus === 'running') {\n return 'in-progress';\n }\n if (normalizedStatus === 'finished') {\n return 'completed';\n }\n return 'unknown';\n}\n\nasync function resolveWorkflowInstanceStatusDisplay(\n translationService: AXTranslationService,\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): Promise<string> {\n if (!instance) {\n return '';\n }\n const statusKey = resolveInstanceStatusTranslationKey(String(instance.status ?? ''), String(instance.subStatus ?? ''));\n const translated = await translationService.translateAsync(\n `@workflow-management:workflow-run.history.instance-status.${statusKey}`,\n );\n if (translated.trim()) {\n return translated.trim();\n }\n return instance.statusDisplay?.trim() ?? '';\n}\n\nasync function resolveWorkflowTitle(\n translationService: AXTranslationService,\n definition: AXPWorkflowDefinition | null | undefined,\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): Promise<string> {\n if (definition?.title != null) {\n const resolved = translationService.resolve(definition.title);\n if (resolved?.trim()) {\n return resolved.trim();\n }\n }\n return (\n instance?.workflowTitle?.trim() ||\n instance?.name?.trim() ||\n instance?.definitionId?.trim() ||\n ''\n );\n}\n\nexport async function buildWorkflowHistoryPopupTitleAsync(\n translationService: AXTranslationService,\n definition: AXPWorkflowDefinition | null | undefined,\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): Promise<string> {\n const workflowTitle = await resolveWorkflowTitle(translationService, definition, instance);\n const statusDisplay = await resolveWorkflowInstanceStatusDisplay(translationService, instance);\n if (workflowTitle && statusDisplay) {\n return translationService.translateAsync('@workflow-management:workflow-run.history.popup-title', {\n params: { workflowTitle, statusDisplay },\n });\n }\n return workflowTitle || statusDisplay;\n}\n\nexport async function buildWorkflowHistoryRows(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n definition: AXPWorkflowDefinition | null | undefined,\n translationService: AXTranslationService,\n userEntityData: WorkflowHistoryEntityLookup,\n emptyLabel: string,\n taskTranslationDeps: WorkflowTaskTranslationDeps,\n titleResolveContext?: WorkflowHistoryTitleResolveContext,\n): Promise<AXMWorkflowHistoryRow[]> {\n const wi = instance?.workflowInstance;\n if (!wi?.workflowState) {\n return [];\n }\n\n const props = (wi.workflowState.properties ?? {}) as Record<string, unknown>;\n const contexts = wi.workflowState.activityExecutionContexts ?? [];\n const activities = definition?.graph?.activities ?? [];\n const findActivity = (nodeId: string) => activities.find((a) => a.id === nodeId);\n const workflowState = wi.workflowState;\n const extended = wi as AXPWorkflowInstance & {\n bookmarks?: Array<{\n activityId?: string;\n payload?: Record<string, unknown> | null;\n payloadJson?: string;\n }>;\n };\n const bookmarks = extended.bookmarks ?? [];\n const userCache = new Map<string, string>();\n const rows: AXMWorkflowHistoryRow[] = [];\n\n for (const ctx of contexts as AXPActivityExecutionContextState[]) {\n const nodeId = ctx.scheduledActivityNodeId;\n const graphActivity = findActivity(nodeId);\n if (!shouldIncludeActivity(graphActivity)) {\n continue;\n }\n\n const activityName = graphActivity?.name?.trim() ?? '';\n const isHumanTask =\n activityName === 'workflow-activity:human-task' || activityName === 'workflow-activity:cartable';\n const showsParticipants = USER_PARTICIPANT_ACTIVITY_NAMES.has(activityName);\n const bookmark = bookmarks.find((b) => b.activityId === nodeId);\n const payload = parseBookmarkPayload(bookmark);\n\n const stepTitle = await resolveStepTitle(\n translationService,\n graphActivity,\n nodeId,\n isHumanTask,\n payload,\n workflowState,\n taskTranslationDeps,\n titleResolveContext,\n );\n\n const labelKey = `${nodeId}_completedByLabel`;\n const idKey = `${nodeId}_completedByUserId`;\n let performedBy = '';\n const performedByLabel = formatPerformedByLabel(props[labelKey], props[idKey], '');\n if (performedByLabel && performedByLabel !== 'System') {\n performedBy = performedByLabel;\n } else if (props[idKey] != null && String(props[idKey]).trim() !== '') {\n performedBy = await resolveUserDisplayName(userEntityData, String(props[idKey]), userCache);\n } else if (performedByLabel === 'System') {\n performedBy = await translationService.translateAsync(\n '@workflow-management:workflow-run.history.system-performer',\n );\n } else if (showsParticipants) {\n const fallbackUserId =\n toString(get(props, 'managerUserId')).trim() || toString(get(props, 'initiatorUserId')).trim();\n if (fallbackUserId) {\n performedBy = await resolveUserDisplayName(userEntityData, fallbackUserId, userCache);\n }\n }\n\n let assignee = showsParticipants\n ? await resolveStepAssignee(nodeId, props, payload, userEntityData, userCache, emptyLabel)\n : '';\n if (showsParticipants && (!assignee || assignee === emptyLabel) && performedBy) {\n assignee = performedBy;\n }\n if (showsParticipants && !performedBy) {\n performedBy = emptyLabel;\n }\n if (showsParticipants && !assignee) {\n assignee = emptyLabel;\n }\n\n const status = String(ctx.status ?? '');\n const statusDisplay = await resolveActivityStatus(translationService, status);\n\n rows.push({\n contextId: ctx.id,\n nodeId,\n stepTitle,\n status,\n statusDisplay,\n performedBy,\n assignee,\n startedAt: ctx.startedAt ?? '',\n completedAt: ctx.completedAt ?? null,\n isHumanTask,\n showsParticipants,\n });\n }\n\n rows.sort((a, b) => {\n const ta = new Date(a.startedAt).getTime();\n const tb = new Date(b.startedAt).getTime();\n if (ta !== tb) {\n return ta - tb;\n }\n return a.contextId.localeCompare(b.contextId);\n });\n\n return rows;\n}\n\n/** Popup header: workflow title and human-readable status (e.g. \"Create Leave Request - Completed\"). */\nexport function buildWorkflowHistoryPopupTitle(workflowTitle: string, statusDisplay: string): string {\n const title = workflowTitle.trim();\n const status = statusDisplay.trim();\n if (title && status) {\n return `${title} - ${status}`;\n }\n return title || status;\n}\n\n/** Summary metadata shown above the timeline (reporter and workflow start time). */\nexport function buildWorkflowHistorySummary(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): AXMWorkflowHistorySummary {\n if (!instance) {\n return { reporter: '', startedAt: null };\n }\n return {\n reporter: resolveReporterDisplay(instance),\n startedAt: instance.createdAt?.trim() || null,\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { AXPopupRef } from '@acorex/components/popup';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityService } from '@acorex/platform/layout/entity';\nimport {\n AXPActivityDefinitionService,\n AXPWorkflowDefinition,\n AXPWorkflowDefinitionService,\n WorkflowExpressionScopeService,\n} from '@acorex/platform/workflow';\nimport { AXMWorkflowManagementWorkflowInstanceEntityModel } from '../../../../entities/workflow-instance/workflow-instance.types';\nimport {\n AXMWorkflowHistoryRow,\n AXMWorkflowHistorySummary,\n buildWorkflowHistoryPopupTitleAsync,\n buildWorkflowHistoryRows,\n buildWorkflowHistorySummary,\n WorkflowHistoryTitleResolveContext,\n} from './workflow-history-rows.utils';\nimport { AXMWorkflowRunHistoryTimelineTabComponent } from './workflow-run-history-timeline-tab/workflow-run-history-timeline-tab.component';\nimport { AXMWorkflowRunHistoryVisualTabComponent } from './workflow-run-history-visual-tab/workflow-run-history-visual-tab.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Popup: workflow run history with Timeline and Visual diagram tabs.\n */\n@Component({\n selector: 'axm-workflow-run-history-popup',\n templateUrl: './workflow-run-history-popup.component.html',\n styleUrl: './workflow-run-history-popup.component.scss',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTabsModule,\n AXFormatModule,\n AXTranslationModule,\n AXMWorkflowRunHistoryTimelineTabComponent,\n AXMWorkflowRunHistoryVisualTabComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMWorkflowRunHistoryPopupComponent extends AXBasePageComponent {\n //#region ---- Popup input ----\n\n instanceId!: string;\n\n /** Injected by {@link AXPopupService} when opened as a popup. */\n readonly __popup__ = input<AXPopupRef | undefined>(undefined);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly entityDefinitionRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly activityDefinitionService = inject(AXPActivityDefinitionService);\n private readonly workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n private readonly translationService = inject(AXTranslationService);\n private readonly expressionScopeService = inject(WorkflowExpressionScopeService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly userEntityData = this.entityService.withEntity('SecurityManagement', 'User').data<string>();\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly activeTabIndex = signal(0);\n protected readonly isBusy = signal(true);\n protected readonly summary = signal<AXMWorkflowHistorySummary>({ reporter: '', startedAt: null });\n protected readonly definition = signal<AXPWorkflowDefinition | null>(null);\n protected readonly rows = signal<AXMWorkflowHistoryRow[]>([]);\n\n private readonly popupTitle = signal('');\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n effect(() => {\n const title = this.popupTitle().trim();\n const popupRef = this.__popup__();\n if (title && popupRef) {\n popupRef.setTitle(title);\n }\n });\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadHistory();\n }\n\n //#endregion\n\n //#region ---- Tab handlers ----\n\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n this.activeTabIndex.set(event.index);\n }\n\n //#endregion\n\n //#region ---- Data loading ----\n\n private async loadHistory(): Promise<void> {\n const trimmed = this.instanceId?.trim();\n if (!trimmed) {\n this.isBusy.set(false);\n return;\n }\n\n this.isBusy.set(true);\n try {\n const emptyLabel = '—';\n const loaded = await this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data<string, AXMWorkflowManagementWorkflowInstanceEntityModel>()\n .byKey(trimmed);\n\n const defId = loaded?.definitionId?.trim();\n let definition: AXPWorkflowDefinition | null = null;\n if (defId) {\n definition = (await this.workflowDefinitionService.getWorkflowByName(defId)) ?? null;\n }\n\n this.definition.set(definition);\n this.popupTitle.set(\n await buildWorkflowHistoryPopupTitleAsync(this.translationService, definition, loaded ?? null),\n );\n this.summary.set(buildWorkflowHistorySummary(loaded ?? null));\n\n const titleResolveContext: WorkflowHistoryTitleResolveContext = {\n resolveActivityDefinitionTitle: async (activityName) => {\n const activityDef = await this.activityDefinitionService.getActivityByName(activityName);\n return activityDef?.title ? (this.translationService.resolve(activityDef.title) ?? '') : '';\n },\n resolveEntityRefTitle: async (moduleEntityRef) => {\n const [module, entity] = moduleEntityRef.split('.');\n if (!module?.trim() || !entity?.trim()) {\n return '';\n }\n try {\n const entityDef = await this.entityDefinitionRegistry.resolve(module.trim(), entity.trim());\n return entityDef?.title ? (this.translationService.resolve(entityDef.title) ?? '') : '';\n } catch {\n return '';\n }\n },\n };\n\n const historyRows = await buildWorkflowHistoryRows(\n loaded ?? null,\n definition,\n this.translationService,\n this.userEntityData,\n emptyLabel,\n {\n expressionScopeService: this.expressionScopeService,\n expressionEvaluator: this.expressionEvaluator,\n translationService: this.translationService,\n },\n titleResolveContext,\n );\n this.rows.set(historyRows);\n } finally {\n this.isBusy.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<ax-content>\n <div class=\"axm-workflow-run-history-popup\">\n <div class=\"axm-workflow-run-history-popup__sticky\">\n <div class=\"axm-workflow-run-history-popup__sticky-bar\">\n @if (summary().reporter || summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview\" role=\"list\">\n @if (summary().reporter) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.reporter' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\" [textContent]=\"summary().reporter\"></span>\n </div>\n }\n @if (summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.started-at' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\">\n {{ summary().startedAt | format: 'datetime' : 'short' | async }}\n </span>\n </div>\n }\n </div>\n }\n\n <ax-tabs\n class=\"axm-workflow-run-history-popup__tabs\"\n [look]=\"'with-line'\"\n (onActiveTabChanged)=\"handleTabChange($event)\"\n >\n <ax-tab-item\n [key]=\"'timeline'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.timeline.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 0\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list-timeline\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n <ax-tab-item\n [key]=\"'visual'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.visual.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 1\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-diagram-project\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n </ax-tabs>\n </div>\n </div>\n\n <div class=\"axm-workflow-run-history-popup__panel\">\n @if (activeTabIndex() === 0) {\n @defer (on viewport) {\n <axm-workflow-run-history-timeline-tab [rows]=\"rows()\" [isBusy]=\"isBusy()\" />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n\n @if (activeTabIndex() === 1) {\n @defer (on viewport) {\n <axm-workflow-run-history-visual-tab\n [definition]=\"definition()\"\n [rows]=\"rows()\"\n [isBusy]=\"isBusy()\"\n />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n </div>\n </div>\n</ax-content>\n"],"names":["i1","i2","i4","i6"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-workflow-management-workflow-run-history-popup.component-FLqOdI2t.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-history-rows.utils.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-popup.component.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-popup.component.html"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { get, toString } from 'lodash-es';\nimport type {\n AXPActivityExecutionContextState,\n AXPWorkflowActivityInstance,\n AXPWorkflowDefinition,\n AXPWorkflowInstance,\n AXPWorkflowState,\n} from '@acorex/platform/contracts';\nimport { AXMWorkflowManagementWorkflowInstanceEntityModel } from '../../../../entities/workflow-instance/workflow-instance.types';\nimport {\n buildWorkflowTaskDisplayParams,\n buildWorkflowTaskDisplayParamsFromWorkflowState,\n composeWorkflowTaskTitleFromContext,\n type WorkflowTaskTranslationDeps,\n} from '../../../task-provider/workflow-task-translation.utils';\nimport { formatReadableActivityName } from '../../../workflow-instance-activity-instances-page/workflow-activity-instance-rows.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One end-user row in the workflow run history timeline. */\nexport interface AXMWorkflowHistoryRow {\n contextId: string;\n /** Graph activity id for this step (`scheduledActivityNodeId`). */\n nodeId: string;\n stepTitle: string;\n status: string;\n statusDisplay: string;\n performedBy: string;\n assignee: string;\n startedAt: string;\n completedAt: string | null;\n isHumanTask: boolean;\n /** Steps where assignee and performer are shown (human tasks, forms, sign-off, rejection reason). */\n showsParticipants: boolean;\n}\n\nexport interface AXMWorkflowHistorySummary {\n reporter: string;\n startedAt: string | null;\n}\n\ninterface WorkflowHistoryEntityLookup {\n byKey(id: string): Promise<unknown>;\n}\n\n/** Optional resolvers for localized step and popup titles. */\nexport interface WorkflowHistoryTitleResolveContext {\n resolveActivityDefinitionTitle?: (activityName: string) => Promise<string>;\n resolveEntityRefTitle?: (moduleEntityRef: string) => Promise<string>;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Activity types omitted from end-user history (internal plumbing). */\nconst HIDDEN_ACTIVITY_NAMES = new Set(['workflow-activity:get-current-session-user']);\n\n/** Activity types that show assignee and performer in end-user history. */\nconst USER_PARTICIPANT_ACTIVITY_NAMES = new Set([\n 'workflow-activity:human-task',\n 'workflow-activity:cartable',\n 'workflow-activity:sign-off',\n 'workflow-activity:rejection-reason',\n 'workflow-activity:create-entity-form',\n]);\n\nconst ACTIVITY_STATUS_KEYS: Record<string, string> = {\n Running: '@workflow-management:workflow-run.history.activity-status.running',\n Completed: '@workflow-management:workflow-run.history.activity-status.completed',\n Pending: '@workflow-management:workflow-run.history.activity-status.pending',\n Executing: '@workflow-management:workflow-run.history.activity-status.executing',\n Suspended: '@workflow-management:workflow-run.history.activity-status.suspended',\n Canceled: '@workflow-management:workflow-run.history.activity-status.canceled',\n Cancelled: '@workflow-management:workflow-run.history.activity-status.canceled',\n Faulted: '@workflow-management:workflow-run.history.activity-status.faulted',\n Failed: '@workflow-management:workflow-run.history.activity-status.failed',\n};\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction normalizeUserIds(value: unknown): string[] {\n if (value == null) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((v): v is string => typeof v === 'string' && v.trim().length > 0);\n }\n if (typeof value === 'string' && value.trim().length > 0) {\n return [value.trim()];\n }\n return [];\n}\n\nfunction formatPerformedByLabel(label: unknown, id: unknown, empty: string): string {\n const labelText = label != null && String(label).trim() !== '' ? String(label).trim() : '';\n if (labelText && labelText !== 'System') {\n return labelText;\n }\n const idText = id != null && String(id).trim() !== '' ? String(id).trim() : '';\n if (idText) {\n return idText;\n }\n return empty;\n}\n\nfunction isTranslationKey(value: string): boolean {\n return value.trim().startsWith('@');\n}\n\nfunction getGraphHumanTaskContext(graphActivity: AXPWorkflowActivityInstance | undefined): Record<string, unknown> | undefined {\n const context = graphActivity?.inputs?.['context'];\n if (context != null && typeof context === 'object' && !Array.isArray(context)) {\n return context as Record<string, unknown>;\n }\n return undefined;\n}\n\nfunction parseBookmarkPayload(bookmark: {\n payload?: Record<string, unknown> | null;\n payloadJson?: string;\n} | undefined): Record<string, unknown> | null {\n if (bookmark?.payload && typeof bookmark.payload === 'object') {\n return bookmark.payload;\n }\n const raw = bookmark?.payloadJson?.trim();\n if (!raw) {\n return null;\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n return parsed != null && typeof parsed === 'object' && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\nfunction hasUnresolvedInterpolation(value: string): boolean {\n return /\\{\\{[^}]+\\}\\}/.test(value);\n}\n\nasync function resolveDisplayText(\n translationService: AXTranslationService,\n value: string,\n params?: Record<string, string>,\n): Promise<string> {\n const raw = value?.trim();\n if (!raw) {\n return '';\n }\n if (!isTranslationKey(raw)) {\n return raw;\n }\n return translationService.translateAsync(raw, { params });\n}\n\nfunction isModuleEntityRef(value: string): boolean {\n return /^[A-Za-z][\\w]*\\.[A-Za-z][\\w]*$/.test(value.trim());\n}\n\nasync function resolveGraphActivityTitle(\n translationService: AXTranslationService,\n graphActivity: AXPWorkflowActivityInstance | undefined,\n workflowState: AXPWorkflowState | undefined,\n taskTranslationDeps: WorkflowTaskTranslationDeps,\n titleResolveContext: WorkflowHistoryTitleResolveContext | undefined,\n): Promise<string> {\n const graphTitle = typeof graphActivity?.title === 'string' ? graphActivity.title.trim() : '';\n if (graphTitle) {\n if (isTranslationKey(graphTitle)) {\n const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);\n const resolved = await resolveDisplayText(translationService, graphTitle, params);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n if (isModuleEntityRef(graphTitle) && titleResolveContext?.resolveEntityRefTitle) {\n const entityTitle = await titleResolveContext.resolveEntityRefTitle(graphTitle);\n if (entityTitle.trim()) {\n return entityTitle.trim();\n }\n }\n if (!isModuleEntityRef(graphTitle)) {\n const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);\n const resolved = await resolveDisplayText(translationService, graphTitle, params);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n }\n\n const inputTitle =\n typeof graphActivity?.inputs?.['title'] === 'string' ? graphActivity.inputs['title'].trim() : '';\n if (inputTitle) {\n const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);\n const resolved = await resolveDisplayText(translationService, inputTitle, params);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n\n const activityName = graphActivity?.name?.trim() ?? '';\n if (activityName && titleResolveContext?.resolveActivityDefinitionTitle) {\n const definitionTitle = await titleResolveContext.resolveActivityDefinitionTitle(activityName);\n if (definitionTitle.trim()) {\n return definitionTitle.trim();\n }\n }\n\n return '';\n}\n\nasync function resolveStepTitle(\n translationService: AXTranslationService,\n graphActivity: AXPWorkflowActivityInstance | undefined,\n nodeId: string,\n isHumanTask: boolean,\n payload: Record<string, unknown> | null,\n workflowState: AXPWorkflowState | undefined,\n taskTranslationDeps: WorkflowTaskTranslationDeps,\n titleResolveContext: WorkflowHistoryTitleResolveContext | undefined,\n): Promise<string> {\n if (isHumanTask) {\n const payloadContext =\n payload?.['context'] && typeof payload['context'] === 'object'\n ? (payload['context'] as Record<string, unknown>)\n : undefined;\n const graphContext = getGraphHumanTaskContext(graphActivity);\n const graphParams = await buildWorkflowTaskDisplayParams(graphContext, workflowState, taskTranslationDeps);\n const payloadParams = await buildWorkflowTaskDisplayParams(payloadContext, workflowState, taskTranslationDeps);\n const taskParams = { ...graphParams, ...payloadParams };\n\n const payloadTitle = typeof payload?.['title'] === 'string' ? payload['title'].trim() : '';\n const graphTitle =\n typeof graphActivity?.inputs?.['title'] === 'string' ? graphActivity.inputs['title'].trim() : '';\n const titleSource = payloadTitle || graphTitle;\n\n if (titleSource) {\n const resolved = await resolveDisplayText(translationService, titleSource, taskParams);\n if (resolved && !hasUnresolvedInterpolation(resolved)) {\n return resolved;\n }\n }\n\n const composed =\n (await composeWorkflowTaskTitleFromContext(payloadContext, workflowState, taskTranslationDeps)) ||\n (await composeWorkflowTaskTitleFromContext(graphContext, workflowState, taskTranslationDeps));\n if (composed && !hasUnresolvedInterpolation(composed)) {\n return composed;\n }\n\n if (taskParams['employeeDisplayName']?.trim() && taskParams['leaveTypeTitle']?.trim()) {\n return `${taskParams['employeeDisplayName']} — ${taskParams['leaveTypeTitle']}`;\n }\n }\n\n const resolvedGraphTitle = await resolveGraphActivityTitle(\n translationService,\n graphActivity,\n workflowState,\n taskTranslationDeps,\n titleResolveContext,\n );\n if (resolvedGraphTitle) {\n return resolvedGraphTitle;\n }\n\n const rawTitle = graphActivity?.name\n ? formatReadableActivityName(graphActivity.name)\n : formatReadableActivityName(nodeId);\n return rawTitle;\n}\n\nasync function resolveActivityStatus(\n translationService: AXTranslationService,\n status: string,\n): Promise<string> {\n const normalized = (status ?? '').trim();\n if (!normalized) {\n return '';\n }\n const key = ACTIVITY_STATUS_KEYS[normalized] ?? ACTIVITY_STATUS_KEYS[normalized.toLowerCase()];\n if (key) {\n return translationService.translateAsync(key);\n }\n return formatReadableActivityName(normalized);\n}\n\nasync function resolveUserDisplayName(\n userEntityData: WorkflowHistoryEntityLookup,\n userId: string,\n cache: Map<string, string>,\n): Promise<string> {\n const id = userId.trim();\n if (!id) {\n return '';\n }\n const cached = cache.get(id);\n if (cached) {\n return cached;\n }\n let display = id;\n try {\n const row = await userEntityData.byKey(id);\n if (row && typeof row === 'object') {\n const displayName =\n 'displayName' in row ? String((row as { displayName?: unknown }).displayName ?? '').trim() : '';\n const username = 'username' in row ? String((row as { username?: unknown }).username ?? '').trim() : '';\n display = displayName || username || id;\n }\n } catch {\n display = id;\n }\n cache.set(id, display);\n return display;\n}\n\nasync function resolveAssigneeDisplay(\n payload: Record<string, unknown> | null,\n userEntityData: WorkflowHistoryEntityLookup,\n userCache: Map<string, string>,\n emptyLabel: string,\n): Promise<string> {\n if (!payload) {\n return emptyLabel;\n }\n const assigned = normalizeUserIds(payload['assignedUserIds']);\n if (assigned.length > 0) {\n const names = await Promise.all(assigned.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n return names.filter((name) => name.length > 0).join(', ') || emptyLabel;\n }\n const candidates = normalizeUserIds(payload['candidateUserIds']);\n if (candidates.length > 0) {\n const names = await Promise.all(candidates.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n return names.filter((name) => name.length > 0).join(', ') || emptyLabel;\n }\n return emptyLabel;\n}\n\n/**\n * Resolves who was assigned to a step (original assignee when take-over occurred).\n */\nasync function resolveStepAssignee(\n nodeId: string,\n props: Record<string, unknown>,\n payload: Record<string, unknown> | null,\n userEntityData: WorkflowHistoryEntityLookup,\n userCache: Map<string, string>,\n emptyLabel: string,\n): Promise<string> {\n const reassign = props[`${nodeId}_reassignedToSelf`];\n if (reassign && typeof reassign === 'object' && !Array.isArray(reassign)) {\n const fromIds = normalizeUserIds((reassign as { fromUserIds?: unknown }).fromUserIds);\n if (fromIds.length > 0) {\n const names = await Promise.all(fromIds.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n const joined = names.filter((name) => name.length > 0).join(', ');\n if (joined) {\n return joined;\n }\n }\n }\n\n const assignedAudit = normalizeUserIds(props[`${nodeId}_assignedUserIds`]);\n if (assignedAudit.length > 0) {\n const names = await Promise.all(assignedAudit.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));\n const joined = names.filter((name) => name.length > 0).join(', ');\n if (joined) {\n return joined;\n }\n }\n\n const fromBookmark = await resolveAssigneeDisplay(payload, userEntityData, userCache, '');\n if (fromBookmark) {\n return fromBookmark;\n }\n\n return emptyLabel;\n}\n\nfunction resolveReporterDisplay(instance: AXMWorkflowManagementWorkflowInstanceEntityModel): string {\n const audit = instance.auditInfo?.created?.by;\n if (audit?.fullName?.trim()) {\n return audit.fullName.trim();\n }\n if (instance.assignUserRef?.displayName?.trim()) {\n return instance.assignUserRef.displayName.trim();\n }\n return '';\n}\n\nfunction shouldIncludeActivity(graphActivity: AXPWorkflowActivityInstance | undefined): boolean {\n const name = graphActivity?.name?.trim();\n if (name && HIDDEN_ACTIVITY_NAMES.has(name)) {\n return false;\n }\n return true;\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\n/**\n * Builds end-user workflow history rows (no technical audit fields, resolved titles and user names).\n */\nfunction resolveInstanceStatusTranslationKey(status: string, subStatus: string): string {\n const normalizedStatus = status.trim().toLowerCase();\n const normalizedSubStatus = subStatus.trim().toLowerCase();\n const combined = `${normalizedStatus}-${normalizedSubStatus}`;\n const combinedMap: Record<string, string> = {\n 'running-executing': 'in-progress',\n 'running-suspended': 'pending-user-action',\n 'running-pending': 'waiting',\n 'running-idle': 'waiting',\n 'finished-finished': 'completed',\n 'finished-faulted': 'failed',\n 'finished-cancelled': 'cancelled',\n 'finished-canceled': 'cancelled',\n };\n if (combinedMap[combined]) {\n return combinedMap[combined];\n }\n if (normalizedStatus === 'running') {\n return 'in-progress';\n }\n if (normalizedStatus === 'finished') {\n return 'completed';\n }\n return 'unknown';\n}\n\nasync function resolveWorkflowInstanceStatusDisplay(\n translationService: AXTranslationService,\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): Promise<string> {\n if (!instance) {\n return '';\n }\n const statusKey = resolveInstanceStatusTranslationKey(String(instance.status ?? ''), String(instance.subStatus ?? ''));\n const translated = await translationService.translateAsync(\n `@workflow-management:workflow-run.history.instance-status.${statusKey}`,\n );\n if (translated.trim()) {\n return translated.trim();\n }\n return instance.statusDisplay?.trim() ?? '';\n}\n\nasync function resolveWorkflowTitle(\n translationService: AXTranslationService,\n definition: AXPWorkflowDefinition | null | undefined,\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): Promise<string> {\n if (definition?.title != null) {\n const resolved = translationService.resolve(definition.title);\n if (resolved?.trim()) {\n return resolved.trim();\n }\n }\n return (\n instance?.workflowTitle?.trim() ||\n instance?.name?.trim() ||\n instance?.definitionId?.trim() ||\n ''\n );\n}\n\nexport async function buildWorkflowHistoryPopupTitleAsync(\n translationService: AXTranslationService,\n definition: AXPWorkflowDefinition | null | undefined,\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): Promise<string> {\n const workflowTitle = await resolveWorkflowTitle(translationService, definition, instance);\n const statusDisplay = await resolveWorkflowInstanceStatusDisplay(translationService, instance);\n if (workflowTitle && statusDisplay) {\n return translationService.translateAsync('@workflow-management:workflow-run.history.popup-title', {\n params: { workflowTitle, statusDisplay },\n });\n }\n return workflowTitle || statusDisplay;\n}\n\nexport async function buildWorkflowHistoryRows(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n definition: AXPWorkflowDefinition | null | undefined,\n translationService: AXTranslationService,\n userEntityData: WorkflowHistoryEntityLookup,\n emptyLabel: string,\n taskTranslationDeps: WorkflowTaskTranslationDeps,\n titleResolveContext?: WorkflowHistoryTitleResolveContext,\n): Promise<AXMWorkflowHistoryRow[]> {\n const wi = instance?.workflowInstance;\n if (!wi?.workflowState) {\n return [];\n }\n\n const props = (wi.workflowState.properties ?? {}) as Record<string, unknown>;\n const contexts = wi.workflowState.activityExecutionContexts ?? [];\n const activities = definition?.graph?.activities ?? [];\n const findActivity = (nodeId: string) => activities.find((a) => a.id === nodeId);\n const workflowState = wi.workflowState;\n const extended = wi as AXPWorkflowInstance & {\n bookmarks?: Array<{\n activityId?: string;\n payload?: Record<string, unknown> | null;\n payloadJson?: string;\n }>;\n };\n const bookmarks = extended.bookmarks ?? [];\n const userCache = new Map<string, string>();\n const rows: AXMWorkflowHistoryRow[] = [];\n\n for (const ctx of contexts as AXPActivityExecutionContextState[]) {\n const nodeId = ctx.scheduledActivityNodeId;\n const graphActivity = findActivity(nodeId);\n if (!shouldIncludeActivity(graphActivity)) {\n continue;\n }\n\n const activityName = graphActivity?.name?.trim() ?? '';\n const isHumanTask =\n activityName === 'workflow-activity:human-task' || activityName === 'workflow-activity:cartable';\n const showsParticipants = USER_PARTICIPANT_ACTIVITY_NAMES.has(activityName);\n const bookmark = bookmarks.find((b) => b.activityId === nodeId);\n const payload = parseBookmarkPayload(bookmark);\n\n const stepTitle = await resolveStepTitle(\n translationService,\n graphActivity,\n nodeId,\n isHumanTask,\n payload,\n workflowState,\n taskTranslationDeps,\n titleResolveContext,\n );\n\n const labelKey = `${nodeId}_completedByLabel`;\n const idKey = `${nodeId}_completedByUserId`;\n let performedBy = '';\n const performedByLabel = formatPerformedByLabel(props[labelKey], props[idKey], '');\n if (performedByLabel && performedByLabel !== 'System') {\n performedBy = performedByLabel;\n } else if (props[idKey] != null && String(props[idKey]).trim() !== '') {\n performedBy = await resolveUserDisplayName(userEntityData, String(props[idKey]), userCache);\n } else if (performedByLabel === 'System') {\n performedBy = await translationService.translateAsync(\n '@workflow-management:workflow-run.history.system-performer',\n );\n } else if (showsParticipants) {\n const fallbackUserId =\n toString(get(props, 'managerUserId')).trim() || toString(get(props, 'initiatorUserId')).trim();\n if (fallbackUserId) {\n performedBy = await resolveUserDisplayName(userEntityData, fallbackUserId, userCache);\n }\n }\n\n let assignee = showsParticipants\n ? await resolveStepAssignee(nodeId, props, payload, userEntityData, userCache, emptyLabel)\n : '';\n if (showsParticipants && (!assignee || assignee === emptyLabel) && performedBy) {\n assignee = performedBy;\n }\n if (showsParticipants && !performedBy) {\n performedBy = emptyLabel;\n }\n if (showsParticipants && !assignee) {\n assignee = emptyLabel;\n }\n\n const status = String(ctx.status ?? '');\n const statusDisplay = await resolveActivityStatus(translationService, status);\n\n rows.push({\n contextId: ctx.id,\n nodeId,\n stepTitle,\n status,\n statusDisplay,\n performedBy,\n assignee,\n startedAt: ctx.startedAt ?? '',\n completedAt: ctx.completedAt ?? null,\n isHumanTask,\n showsParticipants,\n });\n }\n\n rows.sort((a, b) => {\n const ta = new Date(a.startedAt).getTime();\n const tb = new Date(b.startedAt).getTime();\n if (ta !== tb) {\n return ta - tb;\n }\n return a.contextId.localeCompare(b.contextId);\n });\n\n return rows;\n}\n\n/** Popup header: workflow title and human-readable status (e.g. \"Create Leave Request - Completed\"). */\nexport function buildWorkflowHistoryPopupTitle(workflowTitle: string, statusDisplay: string): string {\n const title = workflowTitle.trim();\n const status = statusDisplay.trim();\n if (title && status) {\n return `${title} - ${status}`;\n }\n return title || status;\n}\n\n/** Summary metadata shown above the timeline (reporter and workflow start time). */\nexport function buildWorkflowHistorySummary(\n instance: AXMWorkflowManagementWorkflowInstanceEntityModel | null | undefined,\n): AXMWorkflowHistorySummary {\n if (!instance) {\n return { reporter: '', startedAt: null };\n }\n return {\n reporter: resolveReporterDisplay(instance),\n startedAt: instance.createdAt?.trim() || null,\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { AXPopupRef } from '@acorex/components/popup';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityService } from '@acorex/platform/layout/entity';\nimport type { AXPWorkflowDefinition } from '@acorex/platform/contracts';\nimport {\n AXPActivityDefinitionService,\n AXPWorkflowDefinitionService,\n WorkflowExpressionScopeService,\n} from '@acorex/platform/workflow';\nimport { AXMWorkflowManagementWorkflowInstanceEntityModel } from '../../../../entities/workflow-instance/workflow-instance.types';\nimport {\n AXMWorkflowHistoryRow,\n AXMWorkflowHistorySummary,\n buildWorkflowHistoryPopupTitleAsync,\n buildWorkflowHistoryRows,\n buildWorkflowHistorySummary,\n WorkflowHistoryTitleResolveContext,\n} from './workflow-history-rows.utils';\nimport { AXMWorkflowRunHistoryTimelineTabComponent } from './workflow-run-history-timeline-tab/workflow-run-history-timeline-tab.component';\nimport { AXMWorkflowRunHistoryVisualTabComponent } from './workflow-run-history-visual-tab/workflow-run-history-visual-tab.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Popup: workflow run history with Timeline and Visual diagram tabs.\n */\n@Component({\n selector: 'axm-workflow-run-history-popup',\n templateUrl: './workflow-run-history-popup.component.html',\n styleUrl: './workflow-run-history-popup.component.scss',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTabsModule,\n AXFormatModule,\n AXTranslationModule,\n AXMWorkflowRunHistoryTimelineTabComponent,\n AXMWorkflowRunHistoryVisualTabComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXMWorkflowRunHistoryPopupComponent extends AXBasePageComponent {\n //#region ---- Popup input ----\n\n instanceId!: string;\n\n /** Injected by {@link AXPopupService} when opened as a popup. */\n readonly __popup__ = input<AXPopupRef | undefined>(undefined);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly entityDefinitionRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly activityDefinitionService = inject(AXPActivityDefinitionService);\n private readonly workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n private readonly translationService = inject(AXTranslationService);\n private readonly expressionScopeService = inject(WorkflowExpressionScopeService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly userEntityData = this.entityService.withEntity('SecurityManagement', 'User').data<string>();\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly activeTabIndex = signal(0);\n protected readonly isBusy = signal(true);\n protected readonly summary = signal<AXMWorkflowHistorySummary>({ reporter: '', startedAt: null });\n protected readonly definition = signal<AXPWorkflowDefinition | null>(null);\n protected readonly rows = signal<AXMWorkflowHistoryRow[]>([]);\n\n private readonly popupTitle = signal('');\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n effect(() => {\n const title = this.popupTitle().trim();\n const popupRef = this.__popup__();\n if (title && popupRef) {\n popupRef.setTitle(title);\n }\n });\n }\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadHistory();\n }\n\n //#endregion\n\n //#region ---- Tab handlers ----\n\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n this.activeTabIndex.set(event.index);\n }\n\n //#endregion\n\n //#region ---- Data loading ----\n\n private async loadHistory(): Promise<void> {\n const trimmed = this.instanceId?.trim();\n if (!trimmed) {\n this.isBusy.set(false);\n return;\n }\n\n this.isBusy.set(true);\n try {\n const emptyLabel = '—';\n const loaded = await this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data<string, AXMWorkflowManagementWorkflowInstanceEntityModel>()\n .byKey(trimmed);\n\n const defId = loaded?.definitionId?.trim();\n let definition: AXPWorkflowDefinition | null = null;\n if (defId) {\n definition = (await this.workflowDefinitionService.getWorkflowByName(defId)) ?? null;\n }\n\n this.definition.set(definition);\n this.popupTitle.set(\n await buildWorkflowHistoryPopupTitleAsync(this.translationService, definition, loaded ?? null),\n );\n this.summary.set(buildWorkflowHistorySummary(loaded ?? null));\n\n const titleResolveContext: WorkflowHistoryTitleResolveContext = {\n resolveActivityDefinitionTitle: async (activityName) => {\n const activityDef = await this.activityDefinitionService.getActivityByName(activityName);\n return activityDef?.title ? (this.translationService.resolve(activityDef.title) ?? '') : '';\n },\n resolveEntityRefTitle: async (moduleEntityRef) => {\n const [module, entity] = moduleEntityRef.split('.');\n if (!module?.trim() || !entity?.trim()) {\n return '';\n }\n try {\n const entityDef = await this.entityDefinitionRegistry.resolve(module.trim(), entity.trim());\n return entityDef?.title ? (this.translationService.resolve(entityDef.title) ?? '') : '';\n } catch {\n return '';\n }\n },\n };\n\n const historyRows = await buildWorkflowHistoryRows(\n loaded ?? null,\n definition,\n this.translationService,\n this.userEntityData,\n emptyLabel,\n {\n expressionScopeService: this.expressionScopeService,\n expressionEvaluator: this.expressionEvaluator,\n translationService: this.translationService,\n },\n titleResolveContext,\n );\n this.rows.set(historyRows);\n } finally {\n this.isBusy.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<ax-content>\n <div class=\"axm-workflow-run-history-popup\">\n <div class=\"axm-workflow-run-history-popup__sticky\">\n <div class=\"axm-workflow-run-history-popup__sticky-bar\">\n @if (summary().reporter || summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview\" role=\"list\">\n @if (summary().reporter) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.reporter' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\" [textContent]=\"summary().reporter\"></span>\n </div>\n }\n @if (summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.started-at' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\">\n {{ summary().startedAt | format: 'datetime' : 'short' | async }}\n </span>\n </div>\n }\n </div>\n }\n\n <ax-tabs\n class=\"axm-workflow-run-history-popup__tabs\"\n [look]=\"'with-line'\"\n (onActiveTabChanged)=\"handleTabChange($event)\"\n >\n <ax-tab-item\n [key]=\"'timeline'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.timeline.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 0\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list-timeline\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n <ax-tab-item\n [key]=\"'visual'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.visual.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 1\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-diagram-project\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n </ax-tabs>\n </div>\n </div>\n\n <div class=\"axm-workflow-run-history-popup__panel\">\n @if (activeTabIndex() === 0) {\n @defer (on viewport) {\n <axm-workflow-run-history-timeline-tab [rows]=\"rows()\" [isBusy]=\"isBusy()\" />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n\n @if (activeTabIndex() === 1) {\n @defer (on viewport) {\n <axm-workflow-run-history-visual-tab\n [definition]=\"definition()\"\n [rows]=\"rows()\"\n [isBusy]=\"isBusy()\"\n />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n </div>\n </div>\n</ax-content>\n"],"names":["i1","i2","i4","i6"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-workflow-management-workflow-run-history-visual-tab.component-3gnqTYdJ.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-history-diagram.utils.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-visual-tab/workflow-run-history-visual-tab.component.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-visual-tab/workflow-run-history-visual-tab.component.html"],"sourcesContent":["//#region ---- Imports ----\n\nimport {\n arrangeWorkflowDiagram,\n type AXPWorkflowDiagramModel,\n type AXPWorkflowSemanticColor,\n} from '@acorex/modules/platform-management';\nimport type { AXPConnection, AXPWorkflowActivityInstance, AXPWorkflowDefinition, AXPWorkflowGraph } from '@acorex/platform/workflow';\nimport {\n formatReadableActivityName,\n workflowActivityStatusChipModifier,\n} from '../../../workflow-instance-activity-instances-page/workflow-activity-instance-rows.utils';\nimport type { AXMWorkflowHistoryRow } from './workflow-history-rows.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMWorkflowHistoryDiagramResult {\n diagram: AXPWorkflowDiagramModel;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_NODE_W = 240;\nconst DEFAULT_NODE_H = 96;\nconst DESIGNER_GRID_SIZE = 20;\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction portKey(port: string | null | undefined): string {\n return port == null || port === '' ? 'Done' : port;\n}\n\nfunction isCompletedHistoryRow(row: AXMWorkflowHistoryRow): boolean {\n if (row.completedAt) {\n return true;\n }\n return workflowActivityStatusChipModifier(row.status) === 'success';\n}\n\nfunction isInProgressHistoryRow(row: AXMWorkflowHistoryRow): boolean {\n const modifier = workflowActivityStatusChipModifier(row.status);\n return modifier === 'primary' || modifier === 'warning';\n}\n\ninterface AXMWorkflowHistoryNodeHighlight {\n color?: AXPWorkflowSemanticColor;\n borderColor?: AXPWorkflowSemanticColor;\n}\n\nfunction buildNodeHighlightStyles(rows: AXMWorkflowHistoryRow[]): Map<string, AXMWorkflowHistoryNodeHighlight> {\n const statusByNodeId = new Map<string, { completed: boolean; inProgress: boolean }>();\n\n for (const row of rows) {\n const nodeId = row.nodeId?.trim();\n if (!nodeId) {\n continue;\n }\n const current = statusByNodeId.get(nodeId) ?? { completed: false, inProgress: false };\n if (isInProgressHistoryRow(row)) {\n current.inProgress = true;\n } else if (isCompletedHistoryRow(row)) {\n current.completed = true;\n }\n statusByNodeId.set(nodeId, current);\n }\n\n const highlights = new Map<string, AXMWorkflowHistoryNodeHighlight>();\n for (const [nodeId, status] of statusByNodeId) {\n if (status.inProgress) {\n highlights.set(nodeId, { color: 'warning' });\n } else if (status.completed) {\n highlights.set(nodeId, { borderColor: 'success' });\n }\n }\n return highlights;\n}\n\nfunction buildTitleByNodeId(rows: AXMWorkflowHistoryRow[]): Map<string, string> {\n const titleByNodeId = new Map<string, string>();\n const sorted = [...rows].sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n for (const row of sorted) {\n const nodeId = row.nodeId?.trim();\n if (nodeId && row.stepTitle?.trim()) {\n titleByNodeId.set(nodeId, row.stepTitle.trim());\n }\n }\n return titleByNodeId;\n}\n\nfunction outcomePortsFromConnections(activityId: string, connections: AXPConnection[]): string[] {\n const ports = new Set<string>();\n for (const connection of connections) {\n if (connection.source.activtyName === activityId) {\n ports.add(portKey(connection.source.port));\n }\n }\n if (ports.size === 0) {\n ports.add('Done');\n }\n return [...ports].sort((a, b) => a.localeCompare(b));\n}\n\nfunction resolveActivityTitle(\n activity: AXPWorkflowActivityInstance,\n titleByNodeId: Map<string, string>,\n): string {\n const fromHistory = titleByNodeId.get(activity.id);\n if (fromHistory) {\n return fromHistory;\n }\n const persistedTitle = activity.title?.trim();\n if (persistedTitle) {\n return persistedTitle;\n }\n const name = activity.name?.trim();\n return name ? formatReadableActivityName(name) : activity.id;\n}\n\nfunction hasPersistedDesignerLayout(graph: AXPWorkflowGraph): boolean {\n const activities = graph.activities ?? [];\n const nodes = graph.designer?.nodes;\n if (!nodes || activities.length === 0) {\n return false;\n }\n return activities.every((activity) => {\n const layout = nodes[activity.id];\n return layout != null && typeof layout.x === 'number' && typeof layout.y === 'number';\n });\n}\n\nfunction buildDiagramModelFromDefinition(\n graph: AXPWorkflowGraph,\n highlightStyles: Map<string, AXMWorkflowHistoryNodeHighlight>,\n titleByNodeId: Map<string, string>,\n): AXPWorkflowDiagramModel {\n const activities = graph.activities ?? [];\n const connections = graph.connections ?? [];\n const designerNodes = graph.designer?.nodes ?? {};\n\n const nodes = activities.map((activity, index) => {\n const layout = designerNodes[activity.id];\n const position = layout\n ? { x: layout.x, y: layout.y }\n : { x: (index % 4) * (DEFAULT_NODE_W + 48), y: Math.floor(index / 4) * (DEFAULT_NODE_H + 48) };\n const size = {\n width: layout?.width && layout.width > 0 ? layout.width : DEFAULT_NODE_W,\n height: layout?.height && layout.height > 0 ? layout.height : DEFAULT_NODE_H,\n };\n const outboundPortKeys = outcomePortsFromConnections(activity.id, connections);\n const highlight = highlightStyles.get(activity.id);\n\n return {\n id: activity.id,\n type: activity.name,\n title: resolveActivityTitle(activity, titleByNodeId),\n shape: 'rounded-rectangle' as const,\n size,\n position,\n readonly: true,\n ...(highlight?.color ? { color: highlight.color } : {}),\n ...(highlight?.borderColor ? { borderColor: highlight.borderColor } : {}),\n inboundPorts: [\n {\n id: `${activity.id}:in`,\n kind: 'inbound' as const,\n side: 'left' as const,\n ratio: 0.5,\n key: 'in',\n readonly: true,\n },\n ],\n outboundPorts: outboundPortKeys.map((port, portIndex, ports) => ({\n id: `${activity.id}:out:${port}`,\n kind: 'outbound' as const,\n side: 'right' as const,\n ratio: ports.length === 1 ? 0.5 : (portIndex + 1) / (ports.length + 1),\n key: port,\n readonly: true,\n })),\n };\n });\n\n const outPortByKey = new Map<string, string>();\n for (const node of nodes) {\n for (const port of node.outboundPorts) {\n outPortByKey.set(`${node.id}:${portKey(port.key)}`, port.id);\n }\n }\n\n const connectors = connections\n .map((connection, index) => {\n const sourcePortKey = portKey(connection.source.port);\n const sourcePortId = outPortByKey.get(`${connection.source.activtyName}:${sourcePortKey}`);\n if (!sourcePortId) {\n return null;\n }\n return {\n id: `history-c-${index}-${connection.source.activtyName}-${connection.target.activtyName}-${sourcePortKey}`,\n sourceNodeId: connection.source.activtyName,\n sourcePortId,\n targetNodeId: connection.target.activtyName,\n targetPortId: `${connection.target.activtyName}:in`,\n readonly: true,\n };\n })\n .filter((connector): connector is NonNullable<typeof connector> => connector != null);\n\n return { nodes, connectors };\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\n/**\n * Builds a readonly designer model from the full workflow definition graph,\n * highlighting in-progress steps via {@link AXPWorkflowNode.color} and completed steps via {@link AXPWorkflowNode.borderColor}.\n */\nexport function buildWorkflowHistoryDiagram(\n definition: AXPWorkflowDefinition | null | undefined,\n rows: AXMWorkflowHistoryRow[],\n): AXMWorkflowHistoryDiagramResult | null {\n const graph = definition?.graph;\n const activities = graph?.activities ?? [];\n if (!graph || activities.length === 0) {\n return null;\n }\n\n const highlightStyles = buildNodeHighlightStyles(rows);\n const titleByNodeId = buildTitleByNodeId(rows);\n let diagram = buildDiagramModelFromDefinition(graph, highlightStyles, titleByNodeId);\n\n if (!hasPersistedDesignerLayout(graph)) {\n const startNodeId = graph.startActivityId?.trim() || activities[0]?.id;\n diagram = arrangeWorkflowDiagram(diagram, {\n startNodeId,\n nodeIds: activities.map((activity) => activity.id),\n gridSize: DESIGNER_GRID_SIZE,\n direction: 'horizontal',\n });\n }\n\n return { diagram };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWorkflowDesignerComponent } from '@acorex/modules/platform-management';\nimport type { AXPWorkflowDefinition } from '@acorex/platform/workflow';\nimport { buildWorkflowHistoryDiagram } from '../workflow-history-diagram.utils';\nimport type { AXMWorkflowHistoryRow } from '../workflow-history-rows.utils';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-workflow-run-history-visual-tab',\n templateUrl: './workflow-run-history-visual-tab.component.html',\n styleUrl: './workflow-run-history-visual-tab.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXLoadingModule, AXTranslationModule, AXPWorkflowDesignerComponent],\n})\nexport class AXMWorkflowRunHistoryVisualTabComponent {\n readonly definition = input<AXPWorkflowDefinition | null>(null);\n readonly rows = input<AXMWorkflowHistoryRow[]>([]);\n readonly isBusy = input(false);\n\n protected readonly diagram = computed(\n () => buildWorkflowHistoryDiagram(this.definition(), this.rows())?.diagram ?? null,\n );\n}\n\n//#endregion\n","@if (isBusy()) {\n <div class=\"axm-workflow-run-history-visual-tab__state\">\n <ax-loading></ax-loading>\n </div>\n} @else if (!diagram()) {\n <p class=\"axm-workflow-run-history-visual-tab__empty ax-typo-caption\">\n {{ '@workflow-management:workflow-run.history.tabs.visual.empty' | translate | async }}\n </p>\n} @else {\n <div class=\"axm-workflow-run-history-visual-tab__canvas\">\n <axp-workflow-designer [model]=\"diagram()!\" [readonly]=\"true\" [showPortLabels]=\"false\" />\n </div>\n}\n"],"names":["i2","i3"],"mappings":";;;;;;;;;;;AAAA;AAsBA;AAEA;AAEA,MAAM,cAAc,GAAG,GAAG;AAC1B,MAAM,cAAc,GAAG,EAAE;AACzB,MAAM,kBAAkB,GAAG,EAAE;AAE7B;AAEA;AAEA,SAAS,OAAO,CAAC,IAA+B,EAAA;AAC9C,IAAA,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,GAAG,MAAM,GAAG,IAAI;AACpD;AAEA,SAAS,qBAAqB,CAAC,GAA0B,EAAA;AACvD,IAAA,IAAI,GAAG,CAAC,WAAW,EAAE;AACnB,QAAA,OAAO,IAAI;IACb;IACA,OAAO,kCAAkC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS;AACrE;AAEA,SAAS,sBAAsB,CAAC,GAA0B,EAAA;IACxD,MAAM,QAAQ,GAAG,kCAAkC,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/D,IAAA,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;AACzD;AAOA,SAAS,wBAAwB,CAAC,IAA6B,EAAA;AAC7D,IAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuD;AAErF,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;QACjC,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AACA,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;AACrF,QAAA,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE;AAC/B,YAAA,OAAO,CAAC,UAAU,GAAG,IAAI;QAC3B;AAAO,aAAA,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE;AACrC,YAAA,OAAO,CAAC,SAAS,GAAG,IAAI;QAC1B;AACA,QAAA,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IACrC;AAEA,IAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2C;IACrE,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,cAAc,EAAE;AAC7C,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC9C;AAAO,aAAA,IAAI,MAAM,CAAC,SAAS,EAAE;YAC3B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QACpD;IACF;AACA,IAAA,OAAO,UAAU;AACnB;AAEA,SAAS,kBAAkB,CAAC,IAA6B,EAAA;AACvD,IAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB;AAC/C,IAAA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1G,IAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;QACjC,IAAI,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;AACnC,YAAA,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACjD;IACF;AACA,IAAA,OAAO,aAAa;AACtB;AAEA,SAAS,2BAA2B,CAAC,UAAkB,EAAE,WAA4B,EAAA;AACnF,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU;AAC/B,IAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE;AAChD,YAAA,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C;IACF;AACA,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AACpB,QAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;IACnB;IACA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACtD;AAEA,SAAS,oBAAoB,CAC3B,QAAqC,EACrC,aAAkC,EAAA;IAElC,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClD,IAAI,WAAW,EAAE;AACf,QAAA,OAAO,WAAW;IACpB;IACA,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;IAC7C,IAAI,cAAc,EAAE;AAClB,QAAA,OAAO,cAAc;IACvB;IACA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE;AAClC,IAAA,OAAO,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE;AAC9D;AAEA,SAAS,0BAA0B,CAAC,KAAuB,EAAA;AACzD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE;AACzC,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK;IACnC,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAI;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjC,QAAA,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,CAAC,KAAK,QAAQ;AACvF,IAAA,CAAC,CAAC;AACJ;AAEA,SAAS,+BAA+B,CACtC,KAAuB,EACvB,eAA6D,EAC7D,aAAkC,EAAA;AAElC,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE;AACzC,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE;IAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAEjD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;QAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG;AACf,cAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC5B,cAAE,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,cAAc,GAAG,EAAE,CAAC,EAAE;AAChG,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,cAAc;AACxE,YAAA,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,cAAc;SAC7E;QACD,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;QAC9E,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAElD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,IAAI;AACnB,YAAA,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACpD,YAAA,KAAK,EAAE,mBAA4B;YACnC,IAAI;YACJ,QAAQ;AACR,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,IAAI,SAAS,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AACvD,YAAA,IAAI,SAAS,EAAE,WAAW,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;AACzE,YAAA,YAAY,EAAE;AACZ,gBAAA;AACE,oBAAA,EAAE,EAAE,CAAA,EAAG,QAAQ,CAAC,EAAE,CAAA,GAAA,CAAK;AACvB,oBAAA,IAAI,EAAE,SAAkB;AACxB,oBAAA,IAAI,EAAE,MAAe;AACrB,oBAAA,KAAK,EAAE,GAAG;AACV,oBAAA,GAAG,EAAE,IAAI;AACT,oBAAA,QAAQ,EAAE,IAAI;AACf,iBAAA;AACF,aAAA;AACD,YAAA,aAAa,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,MAAM;AAC/D,gBAAA,EAAE,EAAE,CAAA,EAAG,QAAQ,CAAC,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE;AAChC,gBAAA,IAAI,EAAE,UAAmB;AACzB,gBAAA,IAAI,EAAE,OAAgB;gBACtB,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,SAAS,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACtE,gBAAA,GAAG,EAAE,IAAI;AACT,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC,CAAC;SACJ;AACH,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB;AAC9C,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;YACrC,YAAY,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QAC9D;IACF;IAEA,MAAM,UAAU,GAAG;AAChB,SAAA,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;QACzB,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AACrD,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAC;QAC1F,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;QACA,OAAO;AACL,YAAA,EAAE,EAAE,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,UAAU,CAAC,MAAM,CAAC,WAAW,CAAA,CAAA,EAAI,UAAU,CAAC,MAAM,CAAC,WAAW,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE;AAC3G,YAAA,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW;YAC3C,YAAY;AACZ,YAAA,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW;AAC3C,YAAA,YAAY,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAA,GAAA,CAAK;AACnD,YAAA,QAAQ,EAAE,IAAI;SACf;AACH,IAAA,CAAC;SACA,MAAM,CAAC,CAAC,SAAS,KAAiD,SAAS,IAAI,IAAI,CAAC;AAEvF,IAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;AAC9B;AAEA;AAEA;AAEA;;;AAGG;AACG,SAAU,2BAA2B,CACzC,UAAoD,EACpD,IAA6B,EAAA;AAE7B,IAAA,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK;AAC/B,IAAA,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU,IAAI,EAAE;IAC1C,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,eAAe,GAAG,wBAAwB,CAAC,IAAI,CAAC;AACtD,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC;IAC9C,IAAI,OAAO,GAAG,+BAA+B,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,CAAC;AAEpF,IAAA,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE;AACtC,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;AACtE,QAAA,OAAO,GAAG,sBAAsB,CAAC,OAAO,EAAE;YACxC,WAAW;AACX,YAAA,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC;AAClD,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE,YAAY;AACxB,SAAA,CAAC;IACJ;IAEA,OAAO,EAAE,OAAO,EAAE;AACpB;AAEA;;AC3PA;AAWA;AAEA;MAUa,uCAAuC,CAAA;AARpD,IAAA,WAAA,GAAA;AASW,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAA+B,IAAI,iFAAC;AACtD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAA0B,EAAE,2EAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,6EAAC;QAEX,IAAA,CAAA,OAAO,GAAG,QAAQ,CACnC,MAAM,2BAA2B,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACnF;AACF,IAAA;8GARY,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvC,uCAAuC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBpD,mgBAaA,EAAA,MAAA,EAAA,CAAA,0wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDQY,YAAY,8BAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE/E,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBARnD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qCAAqC,mBAG9B,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,4BAA4B,CAAC,EAAA,QAAA,EAAA,mgBAAA,EAAA,MAAA,EAAA,CAAA,0wBAAA,CAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"acorex-modules-workflow-management-workflow-run-history-visual-tab.component-3gnqTYdJ.mjs","sources":["../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-history-diagram.utils.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-visual-tab/workflow-run-history-visual-tab.component.ts","../../../../libs/modules/workflow-management/src/lib/features/workflow-run-plugin/components/workflow-run-history-popup/workflow-run-history-visual-tab/workflow-run-history-visual-tab.component.html"],"sourcesContent":["//#region ---- Imports ----\n\nimport {\n arrangeWorkflowDiagram,\n type AXPWorkflowDiagramModel,\n type AXPWorkflowSemanticColor,\n} from '@acorex/modules/platform-management';\nimport type { AXPConnection, AXPWorkflowActivityInstance, AXPWorkflowDefinition, AXPWorkflowGraph } from '@acorex/platform/contracts';\nimport {\n formatReadableActivityName,\n workflowActivityStatusChipModifier,\n} from '../../../workflow-instance-activity-instances-page/workflow-activity-instance-rows.utils';\nimport type { AXMWorkflowHistoryRow } from './workflow-history-rows.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMWorkflowHistoryDiagramResult {\n diagram: AXPWorkflowDiagramModel;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DEFAULT_NODE_W = 240;\nconst DEFAULT_NODE_H = 96;\nconst DESIGNER_GRID_SIZE = 20;\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction portKey(port: string | null | undefined): string {\n return port == null || port === '' ? 'Done' : port;\n}\n\nfunction isCompletedHistoryRow(row: AXMWorkflowHistoryRow): boolean {\n if (row.completedAt) {\n return true;\n }\n return workflowActivityStatusChipModifier(row.status) === 'success';\n}\n\nfunction isInProgressHistoryRow(row: AXMWorkflowHistoryRow): boolean {\n const modifier = workflowActivityStatusChipModifier(row.status);\n return modifier === 'primary' || modifier === 'warning';\n}\n\ninterface AXMWorkflowHistoryNodeHighlight {\n color?: AXPWorkflowSemanticColor;\n borderColor?: AXPWorkflowSemanticColor;\n}\n\nfunction buildNodeHighlightStyles(rows: AXMWorkflowHistoryRow[]): Map<string, AXMWorkflowHistoryNodeHighlight> {\n const statusByNodeId = new Map<string, { completed: boolean; inProgress: boolean }>();\n\n for (const row of rows) {\n const nodeId = row.nodeId?.trim();\n if (!nodeId) {\n continue;\n }\n const current = statusByNodeId.get(nodeId) ?? { completed: false, inProgress: false };\n if (isInProgressHistoryRow(row)) {\n current.inProgress = true;\n } else if (isCompletedHistoryRow(row)) {\n current.completed = true;\n }\n statusByNodeId.set(nodeId, current);\n }\n\n const highlights = new Map<string, AXMWorkflowHistoryNodeHighlight>();\n for (const [nodeId, status] of statusByNodeId) {\n if (status.inProgress) {\n highlights.set(nodeId, { color: 'warning' });\n } else if (status.completed) {\n highlights.set(nodeId, { borderColor: 'success' });\n }\n }\n return highlights;\n}\n\nfunction buildTitleByNodeId(rows: AXMWorkflowHistoryRow[]): Map<string, string> {\n const titleByNodeId = new Map<string, string>();\n const sorted = [...rows].sort((a, b) => new Date(a.startedAt).getTime() - new Date(b.startedAt).getTime());\n for (const row of sorted) {\n const nodeId = row.nodeId?.trim();\n if (nodeId && row.stepTitle?.trim()) {\n titleByNodeId.set(nodeId, row.stepTitle.trim());\n }\n }\n return titleByNodeId;\n}\n\nfunction outcomePortsFromConnections(activityId: string, connections: AXPConnection[]): string[] {\n const ports = new Set<string>();\n for (const connection of connections) {\n if (connection.source.activtyName === activityId) {\n ports.add(portKey(connection.source.port));\n }\n }\n if (ports.size === 0) {\n ports.add('Done');\n }\n return [...ports].sort((a, b) => a.localeCompare(b));\n}\n\nfunction resolveActivityTitle(\n activity: AXPWorkflowActivityInstance,\n titleByNodeId: Map<string, string>,\n): string {\n const fromHistory = titleByNodeId.get(activity.id);\n if (fromHistory) {\n return fromHistory;\n }\n const persistedTitle = activity.title?.trim();\n if (persistedTitle) {\n return persistedTitle;\n }\n const name = activity.name?.trim();\n return name ? formatReadableActivityName(name) : activity.id;\n}\n\nfunction hasPersistedDesignerLayout(graph: AXPWorkflowGraph): boolean {\n const activities = graph.activities ?? [];\n const nodes = graph.designer?.nodes;\n if (!nodes || activities.length === 0) {\n return false;\n }\n return activities.every((activity) => {\n const layout = nodes[activity.id];\n return layout != null && typeof layout.x === 'number' && typeof layout.y === 'number';\n });\n}\n\nfunction buildDiagramModelFromDefinition(\n graph: AXPWorkflowGraph,\n highlightStyles: Map<string, AXMWorkflowHistoryNodeHighlight>,\n titleByNodeId: Map<string, string>,\n): AXPWorkflowDiagramModel {\n const activities = graph.activities ?? [];\n const connections = graph.connections ?? [];\n const designerNodes = graph.designer?.nodes ?? {};\n\n const nodes = activities.map((activity, index) => {\n const layout = designerNodes[activity.id];\n const position = layout\n ? { x: layout.x, y: layout.y }\n : { x: (index % 4) * (DEFAULT_NODE_W + 48), y: Math.floor(index / 4) * (DEFAULT_NODE_H + 48) };\n const size = {\n width: layout?.width && layout.width > 0 ? layout.width : DEFAULT_NODE_W,\n height: layout?.height && layout.height > 0 ? layout.height : DEFAULT_NODE_H,\n };\n const outboundPortKeys = outcomePortsFromConnections(activity.id, connections);\n const highlight = highlightStyles.get(activity.id);\n\n return {\n id: activity.id,\n type: activity.name,\n title: resolveActivityTitle(activity, titleByNodeId),\n shape: 'rounded-rectangle' as const,\n size,\n position,\n readonly: true,\n ...(highlight?.color ? { color: highlight.color } : {}),\n ...(highlight?.borderColor ? { borderColor: highlight.borderColor } : {}),\n inboundPorts: [\n {\n id: `${activity.id}:in`,\n kind: 'inbound' as const,\n side: 'left' as const,\n ratio: 0.5,\n key: 'in',\n readonly: true,\n },\n ],\n outboundPorts: outboundPortKeys.map((port, portIndex, ports) => ({\n id: `${activity.id}:out:${port}`,\n kind: 'outbound' as const,\n side: 'right' as const,\n ratio: ports.length === 1 ? 0.5 : (portIndex + 1) / (ports.length + 1),\n key: port,\n readonly: true,\n })),\n };\n });\n\n const outPortByKey = new Map<string, string>();\n for (const node of nodes) {\n for (const port of node.outboundPorts) {\n outPortByKey.set(`${node.id}:${portKey(port.key)}`, port.id);\n }\n }\n\n const connectors = connections\n .map((connection, index) => {\n const sourcePortKey = portKey(connection.source.port);\n const sourcePortId = outPortByKey.get(`${connection.source.activtyName}:${sourcePortKey}`);\n if (!sourcePortId) {\n return null;\n }\n return {\n id: `history-c-${index}-${connection.source.activtyName}-${connection.target.activtyName}-${sourcePortKey}`,\n sourceNodeId: connection.source.activtyName,\n sourcePortId,\n targetNodeId: connection.target.activtyName,\n targetPortId: `${connection.target.activtyName}:in`,\n readonly: true,\n };\n })\n .filter((connector): connector is NonNullable<typeof connector> => connector != null);\n\n return { nodes, connectors };\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\n/**\n * Builds a readonly designer model from the full workflow definition graph,\n * highlighting in-progress steps via {@link AXPWorkflowNode.color} and completed steps via {@link AXPWorkflowNode.borderColor}.\n */\nexport function buildWorkflowHistoryDiagram(\n definition: AXPWorkflowDefinition | null | undefined,\n rows: AXMWorkflowHistoryRow[],\n): AXMWorkflowHistoryDiagramResult | null {\n const graph = definition?.graph;\n const activities = graph?.activities ?? [];\n if (!graph || activities.length === 0) {\n return null;\n }\n\n const highlightStyles = buildNodeHighlightStyles(rows);\n const titleByNodeId = buildTitleByNodeId(rows);\n let diagram = buildDiagramModelFromDefinition(graph, highlightStyles, titleByNodeId);\n\n if (!hasPersistedDesignerLayout(graph)) {\n const startNodeId = graph.startActivityId?.trim() || activities[0]?.id;\n diagram = arrangeWorkflowDiagram(diagram, {\n startNodeId,\n nodeIds: activities.map((activity) => activity.id),\n gridSize: DESIGNER_GRID_SIZE,\n direction: 'horizontal',\n });\n }\n\n return { diagram };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWorkflowDesignerComponent } from '@acorex/modules/platform-management';\nimport type { AXPWorkflowDefinition } from '@acorex/platform/contracts';\nimport { buildWorkflowHistoryDiagram } from '../workflow-history-diagram.utils';\nimport type { AXMWorkflowHistoryRow } from '../workflow-history-rows.utils';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-workflow-run-history-visual-tab',\n templateUrl: './workflow-run-history-visual-tab.component.html',\n styleUrl: './workflow-run-history-visual-tab.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXLoadingModule, AXTranslationModule, AXPWorkflowDesignerComponent],\n})\nexport class AXMWorkflowRunHistoryVisualTabComponent {\n readonly definition = input<AXPWorkflowDefinition | null>(null);\n readonly rows = input<AXMWorkflowHistoryRow[]>([]);\n readonly isBusy = input(false);\n\n protected readonly diagram = computed(\n () => buildWorkflowHistoryDiagram(this.definition(), this.rows())?.diagram ?? null,\n );\n}\n\n//#endregion\n","@if (isBusy()) {\n <div class=\"axm-workflow-run-history-visual-tab__state\">\n <ax-loading></ax-loading>\n </div>\n} @else if (!diagram()) {\n <p class=\"axm-workflow-run-history-visual-tab__empty ax-typo-caption\">\n {{ '@workflow-management:workflow-run.history.tabs.visual.empty' | translate | async }}\n </p>\n} @else {\n <div class=\"axm-workflow-run-history-visual-tab__canvas\">\n <axp-workflow-designer [model]=\"diagram()!\" [readonly]=\"true\" [showPortLabels]=\"false\" />\n </div>\n}\n"],"names":["i2","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@acorex/modules",
3
- "version": "21.0.0-next.73",
3
+ "version": "21.0.0-next.75",
4
4
  "peerDependencies": {
5
- "@acorex/platform": "21.0.0-next.73",
5
+ "@acorex/platform": "21.0.0-next.75",
6
6
  "@angular/service-worker": "^20.0.0",
7
7
  "d3": "^7.0.0",
8
8
  "html2canvas": "^1.0.0",