@acorex-platform/module-workplacesafety-management-client 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts.mjs +1646 -0
  2. package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram-widget-view.component-C-qrrqOV.mjs +203 -0
  4. package/fesm2022/acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram-widget-view.component-C-qrrqOV.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.service-BBhH7KP1.mjs +119 -0
  6. package/fesm2022/acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.service-BBhH7KP1.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-ppe-rule-status.provider-o4bAwYcq.mjs +42 -0
  8. package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-ppe-rule-status.provider-o4bAwYcq.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-risk-ppe-rule-status.provider-DtqzcWh0.mjs +42 -0
  10. package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-risk-ppe-rule-status.provider-DtqzcWh0.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-risk-status.provider-B6IkRYbW.mjs +42 -0
  12. package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-risk-status.provider-B6IkRYbW.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-workplacesafety-management-client-index-kF37zgd4.mjs +1900 -0
  14. package/fesm2022/acorex-platform-module-workplacesafety-management-client-index-kF37zgd4.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-workplacesafety-management-client-preview-control-hierarchy-diagram.command-C2X3VpEt.mjs +175 -0
  16. package/fesm2022/acorex-platform-module-workplacesafety-management-client-preview-control-hierarchy-diagram.command-C2X3VpEt.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-workplacesafety-management-client-publish-safety-plan.command-Ci-zcrmO.mjs +106 -0
  18. package/fesm2022/acorex-platform-module-workplacesafety-management-client-publish-safety-plan.command-Ci-zcrmO.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-workplacesafety-management-client-safety-plan-status.provider-BpWx3gIf.mjs +51 -0
  20. package/fesm2022/acorex-platform-module-workplacesafety-management-client-safety-plan-status.provider-BpWx3gIf.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-workplacesafety-management-client-save-safety-plan-sections.command-BJsg3pHZ.mjs +461 -0
  22. package/fesm2022/acorex-platform-module-workplacesafety-management-client-save-safety-plan-sections.command-BJsg3pHZ.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-workplacesafety-management-client.mjs +461 -0
  24. package/fesm2022/acorex-platform-module-workplacesafety-management-client.mjs.map +1 -0
  25. package/package.json +28 -0
  26. package/types/acorex-platform-module-workplacesafety-management-client-contracts.d.ts +1111 -0
  27. package/types/acorex-platform-module-workplacesafety-management-client.d.ts +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-workplacesafety-management-client-index-kF37zgd4.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan-sections-page/safety-plan-section-builder.component.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan-sections-page/safety-plan-section-builder.component.html","../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan-sections-page/safety-plan-sections-page.component.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan-sections-page/safety-plan-sections-page-component.provider.ts"],"sourcesContent":["import { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPDynamicFormDefinition,\n AXPDynamicFormGroupDefinition,\n AXPLayoutBuilderService,\n} from '@acorex-platform/framework-client/layout/builder';\nimport {\n AXPEntityDataSelectorService,\n AXPEntityDefinitionRegistryService,\n AXPEntityService,\n} from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPBuilderItem,\n AXPBuilderItemViewModel,\n AXPBuilderSection,\n AXPBuilderValue,\n AXPStandardSectionItemsBuilderComponent,\n AXPStandardSectionItemsBuilderConfig,\n} from '@acorex-platform/framework-client/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport type { AXMSectionTypeSnapshot } from '@acorex-platform/module-workplacesafety-management-client/contracts';\nimport {\n RootConfig,\n SAFETY_PLAN_SECTION_DUPLICATE_SECTION_TYPE_MESSAGE_KEY,\n WORKPLACE_SAFETY_SECTION_TYPE_LOOKUP_WIDGET_OPTIONS,\n clearDependentItemsOnParentChange,\n collectBuiltInRepeatableSectionTypeIds,\n dedupeSafetyPlanSectionItemSelection,\n enrichSectionTypeSnapshot,\n isStepTableColumnMultiLookup,\n isStepTableSectionType,\n mapSafetyPlanSectionSelectedItems,\n normalizeStepTableColumns,\n normalizeStepTableRows,\n resolveSafetyPlanSectionItemColumns,\n resolveSafetyPlanSectionItemEntityKey,\n resolveSafetyPlanSectionItemFilterAsync,\n resolveStepTableColumnLookupEntity,\n safetyPlanSectionTypeAlreadyExists,\n sortStepTableColumns,\n stepTableColumnKey,\n stepTableColumnTitle,\n type AXMStepTableCellValue,\n type AXMStepTableColumnDef,\n} from '@acorex-platform/module-workplacesafety-management-client/contracts';\nimport {\n AXMSafetyPlanSectionBuilderItemValue,\n AXMSafetyPlanSectionBuilderValue,\n AXMSafetyPlanStepTableRowBuilderPayload,\n normalizeSafetyPlanSectionBuilderValue,\n summarizeStepTableRow,\n} from './safety-plan-section-builder.types';\n\n//#region ----- Types -----\n\ninterface SafetyPlanSectionDialogValue {\n sectionTypeId: string;\n sectionType?: AXMSectionTypeSnapshot;\n /** Synced from the selected Section Type (display-only in the dialog). */\n sectionTypeDescription?: string;\n /** Derived from Section Type title; not shown in the dialog. */\n title: string;\n /** Optional section description copied from the type description on create/edit. */\n description?: string;\n}\n\ninterface SafetyPlanSectionItemDialogValue {\n itemIds: string[];\n items?: { id: string; title?: string; code?: string }[];\n}\n\ninterface SafetyPlanStepTableRowDialogValue {\n [key: string]: unknown;\n}\n\ninterface SectionBuilderContext {\n sectionTypeId: string;\n sectionType?: AXMSectionTypeSnapshot;\n workStepTypeId?: string;\n workStepType?: { id: string; title?: string; code?: string };\n columns: AXMStepTableColumnDef[];\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-safety-plan-section-builder',\n templateUrl: './safety-plan-section-builder.component.html',\n styleUrl: './safety-plan-section-builder.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPStandardSectionItemsBuilderComponent],\n})\nexport class AXMSafetyPlanSectionBuilderComponent {\n //#region ----- Inputs / Outputs -----\n\n readonly value = input<AXMSafetyPlanSectionBuilderValue | null | undefined>(null);\n readonly safetyPlanId = input<string | undefined>(undefined);\n readonly options = input<Record<string, unknown>>({});\n\n readonly valueChange = output<AXMSafetyPlanSectionBuilderValue>();\n\n //#endregion\n\n //#region ----- Services & Dependencies -----\n\n private readonly standardRef = viewChild(AXPStandardSectionItemsBuilderComponent);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly entityDataSelector = inject(AXPEntityDataSelectorService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly entityService = inject(AXPEntityService);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly builderValue = signal<AXPBuilderValue>({ sections: [] });\n\n /** Applied on the next builder commit so section header title survives item add/edit. */\n private readonly pendingSectionTitles = new Map<string, string>();\n\n private readonly disabledSectionPrompt =\n false as unknown as AXPStandardSectionItemsBuilderConfig['promptEditSection'];\n\n protected readonly standardConfig = computed<AXPStandardSectionItemsBuilderConfig>(() => ({\n mapItemToView: (item) => this.mapItemToView(item),\n promptAddSection: this.allowAddSection() ? (value) => this.promptAddSection(value) : async () => null,\n promptEditSection: this.allowEditSection()\n ? (section, value) => this.promptEditSection(section, value)\n : this.disabledSectionPrompt,\n promptAddItems: this.allowAddItems() ? (sectionId, value) => this.promptAddItems(sectionId, value) : undefined,\n promptEditItem: (item, sectionId, value) => this.promptEditItem(item, sectionId, value),\n showSectionTechnicalName: false,\n allowReorderSections: this.allowReorderSections(),\n minSectionCount: this.allowAddSection() ? 0 : Number.MAX_SAFE_INTEGER,\n texts: {\n addSection: '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.actions.add-section.title',\n addItem: '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.actions.add-item.title',\n },\n }));\n\n protected readonly hideHeaderActions = computed(() => (this.options()['hideHeaderActions'] as boolean) === true);\n protected readonly allowAddSection = computed(() => (this.options()['allowAddSection'] as boolean) !== false);\n protected readonly allowEditSection = computed(() => (this.options()['allowEditSection'] as boolean) === true);\n protected readonly allowEditItem = computed(() => (this.options()['allowEditItem'] as boolean) === true);\n protected readonly allowAddItems = computed(() => (this.options()['allowAddItems'] as boolean) !== false);\n protected readonly allowReorderSections = computed(() => {\n const option = this.options()['allowReorderSections'];\n return typeof option === 'boolean' ? option : true;\n });\n protected readonly readonly = computed(() => (this.options()['readonly'] as boolean) === true);\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n #syncValueToBuilder = effect(() => {\n const normalized = normalizeSafetyPlanSectionBuilderValue(this.value());\n this.builderValue.set(this.toBuilderValue(normalized));\n });\n\n //#endregion\n\n //#region ----- Public API -----\n\n async addSection(): Promise<void> {\n await this.standardRef()?.addSection();\n }\n\n syncAfterSave(value: AXMSafetyPlanSectionBuilderValue): void {\n const normalized = normalizeSafetyPlanSectionBuilderValue(value);\n this.builderValue.set(this.toBuilderValue(normalized));\n queueMicrotask(() => this.standardRef()?.markClean());\n }\n\n resetAfterDiscard(): void {\n const normalized = normalizeSafetyPlanSectionBuilderValue(this.value());\n this.builderValue.set(this.toBuilderValue(normalized));\n queueMicrotask(() => this.standardRef()?.markClean());\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onBuilderValueChange(next: AXPBuilderValue): void {\n const previous = this.fromBuilderValue(this.builderValue());\n let nextValue = clearDependentItemsOnParentChange(previous, this.fromBuilderValue(next));\n if (this.pendingSectionTitles.size > 0) {\n nextValue = {\n sections: nextValue.sections.map((section) => {\n const title = this.pendingSectionTitles.get(section.id);\n return title ? { ...section, title } : section;\n }),\n };\n this.pendingSectionTitles.clear();\n }\n this.builderValue.set(this.toBuilderValue(nextValue));\n this.valueChange.emit(nextValue);\n }\n\n //#endregion\n\n //#region ----- Section prompts -----\n\n private async promptAddSection(value: AXPBuilderValue): Promise<Record<string, unknown> | null> {\n const dialogValue = await this.promptSectionForm('create', {\n sectionTypeId: '',\n sectionTypeDescription: '',\n title: '',\n description: '',\n });\n if (!dialogValue) return null;\n\n if (await this.blockIfSectionTypeExists(value, dialogValue.sectionTypeId, {\n sectionType: dialogValue.sectionType,\n })) {\n return null;\n }\n\n const sectionId = AXPDataGenerator.uuid();\n return {\n id: sectionId,\n name: sectionId,\n sectionTypeId: dialogValue.sectionTypeId,\n sectionType: dialogValue.sectionType,\n title: dialogValue.title,\n description: dialogValue.description ?? '',\n safetyPlanId: this.safetyPlanId() ?? '',\n sortOrder: (value.sections?.length ?? 0) + 1,\n items: [],\n };\n }\n\n private async promptEditSection(\n section: AXPBuilderSection,\n value: AXPBuilderValue,\n ): Promise<Record<string, unknown> | null> {\n const previousSectionTypeId = String(section['sectionTypeId'] ?? '');\n const sectionTypeSnapshot = section['sectionType'] as AXMSectionTypeSnapshot | undefined;\n const dialogValue = await this.promptSectionForm('edit', {\n sectionTypeId: previousSectionTypeId,\n sectionType: sectionTypeSnapshot,\n sectionTypeDescription:\n enrichSectionTypeSnapshot(previousSectionTypeId, sectionTypeSnapshot)?.description ??\n String(section['description'] ?? ''),\n title: String(section['title'] ?? ''),\n description: String(section['description'] ?? ''),\n });\n if (!dialogValue) return null;\n\n if (\n await this.blockIfSectionTypeExists(value, dialogValue.sectionTypeId, {\n excludeSectionId: String(section.id ?? ''),\n sectionType: dialogValue.sectionType,\n })\n ) {\n return null;\n }\n\n const sectionTypeChanged = previousSectionTypeId !== dialogValue.sectionTypeId;\n const isStepTable = isStepTableSectionType(dialogValue.sectionTypeId, dialogValue.sectionType);\n const keepWorkStep =\n isStepTable && !sectionTypeChanged\n ? {\n workStepTypeId: section['workStepTypeId'],\n workStepType: section['workStepType'],\n columns: section['columns'],\n }\n : {\n workStepTypeId: undefined,\n workStepType: undefined,\n columns: [],\n };\n\n return {\n ...section,\n sectionTypeId: dialogValue.sectionTypeId,\n sectionType: dialogValue.sectionType,\n title: dialogValue.title,\n description: dialogValue.description ?? '',\n ...keepWorkStep,\n ...(sectionTypeChanged ? { items: [] } : {}),\n };\n }\n\n private async blockIfSectionTypeExists(\n value: AXPBuilderValue,\n sectionTypeId: string,\n options?: { excludeSectionId?: string; sectionType?: { isRepeatable?: boolean } },\n ): Promise<boolean> {\n const repeatableSectionTypeIds = await this.loadRepeatableSectionTypeIds();\n const sections = value.sections.map((section) => ({\n id: String(section.id ?? ''),\n sectionTypeId: section['sectionTypeId'],\n sectionType: section['sectionType'] as { id?: unknown; isRepeatable?: boolean } | undefined,\n }));\n if (\n !safetyPlanSectionTypeAlreadyExists(sections, sectionTypeId, {\n ...options,\n repeatableSectionTypeIds,\n sectionType: options?.sectionType,\n })\n ) {\n return false;\n }\n\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translationService.translateAsync(\n SAFETY_PLAN_SECTION_DUPLICATE_SECTION_TYPE_MESSAGE_KEY,\n ),\n });\n return true;\n }\n\n private async loadRepeatableSectionTypeIds(): Promise<string[]> {\n const builtIn = collectBuiltInRepeatableSectionTypeIds();\n try {\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.sectionType.name}`;\n const result = await this.entityService.withEntity(entityKey).data().query({\n skip: 0,\n take: 1000,\n } as never);\n const fromQuery = (result.items ?? [])\n .filter((row) => (row as { isRepeatable?: unknown }).isRepeatable === true)\n .map((row) => {\n const id = (row as { id?: unknown }).id;\n return typeof id === 'string' ? id.trim() : '';\n })\n .filter(Boolean);\n return [...new Set([...fromQuery, ...builtIn])];\n } catch {\n return builtIn;\n }\n }\n\n private async promptSectionForm(\n mode: 'create' | 'edit',\n seed: SafetyPlanSectionDialogValue,\n ): Promise<SafetyPlanSectionDialogValue | null> {\n const titleKey =\n mode === 'create'\n ? '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.actions.add-section.title'\n : '@general:actions.edit.title';\n const title = (await this.translationService.translateAsync(titleKey)) || (mode === 'create' ? 'Add Section' : 'Edit');\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ success: boolean; value?: SafetyPlanSectionDialogValue }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setCloseButton(true)\n .setContext({ ...seed })\n .content((layout) => {\n layout.mode('edit');\n layout.dynamicForm(this.buildSectionFormDefinition());\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction((dialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return { success: false };\n }\n const context = dialogRef.context() as Partial<SafetyPlanSectionDialogValue>;\n const sectionTypeId = String(context.sectionTypeId ?? '').trim();\n if (!sectionTypeId) {\n return { success: false };\n }\n\n const sectionType = enrichSectionTypeSnapshot(sectionTypeId, context.sectionType);\n const titleValue =\n String(context.title ?? '').trim() ||\n String(sectionType?.title ?? '').trim() ||\n String(sectionType?.code ?? '').trim();\n if (!titleValue) {\n return { success: false };\n }\n\n const description =\n String(context.sectionTypeDescription ?? '').trim() ||\n String(context.description ?? '').trim() ||\n String(sectionType?.description ?? '').trim();\n\n return {\n success: true,\n kind: 'object',\n value: {\n sectionTypeId,\n sectionType,\n title: titleValue,\n description,\n sectionTypeDescription: description,\n },\n };\n });\n })\n .show();\n\n return result?.success && result.value ? result.value : null;\n }\n\n private buildSectionFormDefinition(): AXPDynamicFormDefinition {\n const group: AXPDynamicFormGroupDefinition = {\n name: 'section',\n title: '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.title',\n parameters: [\n {\n path: 'sectionTypeId',\n title: '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.fields.section-type.title',\n widget: {\n path: 'sectionTypeId',\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.sectionType.name}`,\n ...WORKPLACE_SAFETY_SECTION_TYPE_LOOKUP_WIDGET_OPTIONS,\n },\n },\n },\n {\n path: 'sectionTypeDescription',\n title:\n '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.fields.description.title',\n widget: {\n path: 'sectionTypeDescription',\n type: AXPWidgetsCatalog.largeText,\n options: {\n readonly: true,\n rows: 2,\n },\n },\n },\n ],\n };\n return { groups: [group] };\n }\n\n //#endregion\n\n //#region ----- Item prompts -----\n\n private async promptAddItems(sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem[] | null> {\n const section = value.sections.find((s) => s.id === sectionId);\n if (!section || !this.sectionContextFromBuilderSection(section)) {\n return null;\n }\n\n let sectionContext = this.sectionContextFromBuilderSection(section)!;\n if (isStepTableSectionType(sectionContext.sectionTypeId, sectionContext.sectionType)) {\n if (!sectionContext.workStepTypeId || sectionContext.columns.length === 0) {\n const assigned = await this.ensureStepTableWorkStep(sectionId);\n if (!assigned) {\n return null;\n }\n const updatedSection = this.builderValue().sections.find((entry) => entry.id === sectionId);\n const nextContext = updatedSection ? this.sectionContextFromBuilderSection(updatedSection) : null;\n if (!nextContext?.workStepTypeId || nextContext.columns.length === 0) {\n return null;\n }\n sectionContext = nextContext;\n }\n\n const currentSection = this.builderValue().sections.find((entry) => entry.id === sectionId) ?? section;\n const sectionTitle = String(currentSection['title'] ?? '').trim();\n const sectionTypeTitle = String(sectionContext.sectionType?.title ?? '').trim();\n const applyTitleToSection =\n (currentSection.items?.length ?? 0) === 0 ||\n !sectionTitle ||\n sectionTitle === sectionTypeTitle ||\n sectionTitle === sectionContext.sectionTypeId;\n\n const row = await this.promptStepTableRowForm(\n 'create',\n sectionContext,\n {\n title: applyTitleToSection\n ? sectionTitle && sectionTitle !== sectionTypeTitle\n ? sectionTitle\n : String(sectionContext.workStepType?.title ?? '').trim()\n : '',\n },\n { requireTitle: true, applyTitleToSection },\n );\n if (!row) {\n return null;\n }\n\n if (applyTitleToSection && row.title?.trim()) {\n this.patchSectionTitle(sectionId, row.title.trim());\n }\n\n const itemCount =\n this.builderValue().sections.find((entry) => entry.id === sectionId)?.items.length ??\n currentSection.items.length;\n return [this.toBuilderItemFromStepTableRow(row, itemCount)];\n }\n\n const existingIds = this.collectEntityIdsFromBuilderItems(section.items);\n const dialogValue = await this.openItemDataSelector('create', undefined, sectionId, value, section, true);\n if (!dialogValue) return null;\n\n const selected = this.expandDialogSelectionToLinkedEntities(dialogValue).filter(\n (entry) => !existingIds.has(entry.id),\n );\n if (!selected.length) {\n return null;\n }\n\n const startOrder = section.items.length;\n return selected.map((entry, index) =>\n this.toBuilderItemFromEntity(sectionId, entry, startOrder + index),\n );\n }\n\n private async promptEditItem(\n item: AXPBuilderItem,\n sectionId: string,\n value: AXPBuilderValue,\n ): Promise<AXPBuilderItem | null> {\n const section = value.sections.find((s) => s.id === sectionId);\n if (!section || !this.sectionContextFromBuilderSection(section)) {\n return null;\n }\n\n const sectionContext = this.sectionContextFromBuilderSection(section)!;\n if (isStepTableSectionType(sectionContext.sectionTypeId, sectionContext.sectionType)) {\n const existing = item['stepTableRow'] as AXMSafetyPlanStepTableRowBuilderPayload | undefined;\n if (!existing || sectionContext.columns.length === 0) {\n return null;\n }\n const seed = {\n ...this.cellsToDialogValue(existing.cells ?? [], sectionContext.columns),\n title: String(existing.title ?? item['title'] ?? '').trim(),\n };\n const isPrimaryRow = (item.order ?? 0) === 0;\n const row = await this.promptStepTableRowForm('edit', sectionContext, seed, {\n requireTitle: true,\n applyTitleToSection: isPrimaryRow,\n });\n if (!row) {\n return null;\n }\n if (isPrimaryRow && row.title?.trim()) {\n this.patchSectionTitle(sectionId, row.title.trim());\n }\n return this.toBuilderItemFromStepTableRow(\n {\n ...row,\n code: existing.code,\n },\n item.order ?? 0,\n String(item.id),\n );\n }\n\n if (!this.allowEditItem()) {\n return null;\n }\n\n const currentEntityId = this.resolveBuilderItemEntityId(item);\n const seed: SafetyPlanSectionItemDialogValue | undefined = currentEntityId\n ? {\n itemIds: [currentEntityId],\n items: Array.isArray(item['items'])\n ? (item['items'] as AXMSafetyPlanSectionBuilderItemValue['items'])\n : [],\n }\n : undefined;\n\n const dialogValue = await this.openItemDataSelector('edit', seed, sectionId, value, section, false);\n if (!dialogValue) return null;\n\n const selected = this.expandDialogSelectionToLinkedEntities(dialogValue);\n if (!selected.length) {\n return null;\n }\n\n const otherIds = this.collectEntityIdsFromBuilderItems(\n section.items.filter((row) => String(row.id) !== String(item.id)),\n );\n const replacement = selected.find((entry) => !otherIds.has(entry.id)) ?? selected[0];\n\n return this.toBuilderItemFromEntity(sectionId, replacement, item.order ?? 0);\n }\n\n private async toastWorkStepRequired(): Promise<void> {\n this.toastService.show({\n color: 'warning',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translationService.translateAsync(\n '@workplacesafety-management:safety-plan-sections.messages.work-step-required.message',\n ),\n });\n }\n\n /** Prompts for Work Step and patches the Step Table section before rows can be added. */\n private async ensureStepTableWorkStep(sectionId: string): Promise<boolean> {\n const picked = await this.promptWorkStepPicker();\n if (!picked) {\n return false;\n }\n\n const current = this.fromBuilderValue(this.builderValue());\n const next: AXMSafetyPlanSectionBuilderValue = {\n sections: current.sections.map((section) => {\n if (section.id !== sectionId) {\n return section;\n }\n return {\n ...section,\n workStepTypeId: picked.id,\n workStepType: { id: picked.id, title: picked.title, code: picked.code },\n columns: picked.columns,\n };\n }),\n };\n this.builderValue.set(this.toBuilderValue(next));\n this.valueChange.emit(next);\n return true;\n }\n\n private patchSectionTitle(sectionId: string, title: string): void {\n const trimmed = title.trim();\n if (!trimmed) {\n return;\n }\n this.pendingSectionTitles.set(sectionId, trimmed);\n }\n\n private async promptWorkStepPicker(): Promise<{\n id: string;\n title?: string;\n code?: string;\n columns: AXMStepTableColumnDef[];\n } | null> {\n const title =\n (await this.translationService.translateAsync(\n '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.fields.work-step.title',\n )) || 'Work Step';\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{\n success: boolean;\n value?: { workStepTypeId: string; workStepType?: { id: string; title?: string; code?: string } };\n }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setCloseButton(true)\n .setContext({ workStepTypeId: '' })\n .content((layout) => {\n layout.mode('edit');\n layout.dynamicForm({\n groups: [\n {\n name: 'work-step',\n title:\n '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.fields.work-step.title',\n parameters: [\n {\n path: 'workStepTypeId',\n title:\n '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.fields.work-step.title',\n widget: {\n path: 'workStepTypeId',\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.workStepType.name}`,\n look: 'select',\n textField: 'title',\n valueField: 'id',\n columns: ['code', 'title'],\n expose: [\n { source: 'id', target: 'workStepType.id' },\n { source: 'title', target: 'workStepType.title' },\n { source: 'code', target: 'workStepType.code' },\n ],\n },\n },\n },\n ],\n },\n ],\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return { success: false };\n }\n const context = dialogRef.context() as {\n workStepTypeId?: string;\n workStepType?: { id: string; title?: string; code?: string };\n };\n const workStepTypeId = String(context.workStepTypeId ?? '').trim();\n if (!workStepTypeId) {\n return { success: false };\n }\n return {\n success: true,\n kind: 'object',\n value: {\n workStepTypeId,\n workStepType: context.workStepType,\n },\n };\n });\n })\n .show();\n\n if (!result?.success || !result.value?.workStepTypeId) {\n return null;\n }\n\n const loaded = await this.loadWorkStepType(result.value.workStepTypeId);\n if (!loaded) {\n await this.toastWorkStepRequired();\n return null;\n }\n return loaded;\n }\n\n private sectionContextFromBuilderSection(section: AXPBuilderSection): SectionBuilderContext | null {\n const sectionTypeId = String(section['sectionTypeId'] ?? '').trim();\n if (!sectionTypeId) {\n return null;\n }\n return {\n sectionTypeId,\n sectionType: enrichSectionTypeSnapshot(\n sectionTypeId,\n section['sectionType'] as AXMSectionTypeSnapshot | undefined,\n ),\n workStepTypeId: typeof section['workStepTypeId'] === 'string' ? section['workStepTypeId'].trim() : undefined,\n workStepType: section['workStepType'] as SectionBuilderContext['workStepType'],\n columns: normalizeStepTableColumns(section['columns'] as AXMStepTableColumnDef[] | undefined),\n };\n }\n\n //#endregion\n\n //#region ----- Catalog item selector -----\n\n private resolveSectionIndex(sectionId: string, builderValue: AXPBuilderValue): number {\n const orderedSections = [...builderValue.sections].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n return orderedSections.findIndex((section) => section.id === sectionId);\n }\n\n private async loadHazardRiskRecords(hazardRiskIds: string[]): Promise<Record<string, unknown>[]> {\n if (!hazardRiskIds.length) {\n return [];\n }\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.hazardRisk.name}`;\n const accessor = this.entityService.withEntity(entityKey);\n const results = await Promise.all(\n hazardRiskIds.map((id) => accessor.data().byKey(id).catch(() => null)),\n );\n return results\n .filter((record): record is NonNullable<(typeof results)[number]> => record != null)\n .map((record) => record as unknown as Record<string, unknown>);\n }\n\n private async resolveItemFilterForSection(\n sectionTypeId: string,\n sectionId: string,\n builderValue: AXPBuilderValue,\n ): Promise<Record<string, unknown> | null> {\n const orderedSections = [...builderValue.sections].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n const sectionIndex = this.resolveSectionIndex(sectionId, builderValue);\n if (sectionIndex < 0) {\n return null;\n }\n const sections = this.fromBuilderValue({ sections: orderedSections }).sections;\n return resolveSafetyPlanSectionItemFilterAsync(\n sectionTypeId,\n sections,\n sectionIndex,\n (ids) => this.loadHazardRiskRecords(ids),\n );\n }\n\n private async openItemDataSelector(\n mode: 'create' | 'edit',\n seed: SafetyPlanSectionItemDialogValue | undefined,\n sectionId: string,\n builderValue: AXPBuilderValue,\n section: AXPBuilderSection,\n allowMultiple: boolean,\n ): Promise<SafetyPlanSectionItemDialogValue | null> {\n const sectionContext = this.sectionContextFromBuilderSection(section);\n if (!sectionContext) {\n return null;\n }\n\n const entityKey = resolveSafetyPlanSectionItemEntityKey(\n sectionContext.sectionTypeId,\n sectionContext.sectionType,\n );\n if (!entityKey) {\n return null;\n }\n\n const dotIndex = entityKey.indexOf('.');\n if (dotIndex <= 0) {\n return null;\n }\n\n const entity = await this.entityRegistry.resolve(\n entityKey.substring(0, dotIndex),\n entityKey.substring(dotIndex + 1),\n );\n if (!entity) {\n return null;\n }\n\n const filter = await this.resolveItemFilterForSection(\n sectionContext.sectionTypeId,\n sectionId,\n builderValue,\n );\n const columns = resolveSafetyPlanSectionItemColumns(sectionContext.sectionTypeId);\n const selectedItemIds = (seed?.itemIds ?? []).filter((id): id is string => typeof id === 'string' && id.length > 0);\n\n const titleKey =\n mode === 'create'\n ? '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.actions.add-item.title'\n : '@general:actions.edit.title';\n const title = (await this.translationService.translateAsync(titleKey)) || (mode === 'create' ? 'Add Item' : 'Edit');\n\n const result = await this.entityDataSelector.open({\n entity,\n title,\n allowMultiple,\n selectedItemIds: selectedItemIds.length > 0 ? selectedItemIds : undefined,\n columns,\n filters: filter ?? undefined,\n allowCreate: 'none',\n showCategoryFilter: false,\n });\n\n if (!result) {\n return null;\n }\n\n if (!result.items?.length) {\n return mode === 'edit' ? { itemIds: [], items: [] } : null;\n }\n\n const items = mapSafetyPlanSectionSelectedItems(sectionContext.sectionTypeId, result.items);\n return dedupeSafetyPlanSectionItemSelection({\n id: `${sectionId}__item_1`,\n itemIds: items.map((item) => item.id),\n items,\n });\n }\n\n //#endregion\n\n //#region ----- Builder value mapping -----\n\n private mapItemToView(item: AXPBuilderItem): AXPBuilderItemViewModel {\n const stepTableRow = item['stepTableRow'] as AXMSafetyPlanStepTableRowBuilderPayload | undefined;\n if (stepTableRow) {\n const code = String(stepTableRow.code ?? '').trim();\n return {\n icon: 'fa-light fa-table-rows',\n title: String(stepTableRow.title ?? item['title'] ?? '').trim() || 'Row',\n name: code || undefined,\n badges: [],\n };\n }\n\n const snapshot = Array.isArray(item['items'])\n ? (item['items'] as { title?: string; code?: string }[])[0]\n : undefined;\n const title = String(item['title'] ?? snapshot?.title ?? '').trim();\n const code = String(item['name'] ?? snapshot?.code ?? '').trim();\n\n return {\n icon: 'fa-light fa-list-check',\n title,\n name: code || undefined,\n badges: [],\n };\n }\n\n private toBuilderValue(value: AXMSafetyPlanSectionBuilderValue): AXPBuilderValue {\n return {\n sections: value.sections.map((section, sectionIndex) => ({\n id: section.id,\n order: sectionIndex,\n name: section.id,\n sectionTypeId: section.sectionTypeId,\n sectionType: enrichSectionTypeSnapshot(section.sectionTypeId, section.sectionType),\n title: section.title,\n description: section.description ?? '',\n code: section.code,\n safetyPlanId: section.safetyPlanId ?? this.safetyPlanId() ?? '',\n sourceSafetyPlanTypeSectionId: section.sourceSafetyPlanTypeSectionId,\n sortOrder: section.sortOrder ?? sectionIndex + 1,\n required: section.required === true,\n workStepTypeId: section.workStepTypeId,\n workStepType: section.workStepType,\n columns: normalizeStepTableColumns(section.columns),\n items: this.expandSectionItemsToBuilderRows(section.id, section.items, section),\n })),\n } as AXPBuilderValue;\n }\n\n private fromBuilderValue(value: AXPBuilderValue): AXMSafetyPlanSectionBuilderValue {\n return normalizeSafetyPlanSectionBuilderValue({\n sections: value.sections.map((section, sectionIndex) => ({\n id: section.id,\n sectionTypeId: String(section['sectionTypeId'] ?? ''),\n sectionType: enrichSectionTypeSnapshot(\n String(section['sectionTypeId'] ?? ''),\n section['sectionType'] as AXMSectionTypeSnapshot | undefined,\n ),\n title: String(section['title'] ?? ''),\n description: String(section['description'] ?? ''),\n code: typeof section['code'] === 'string' ? section['code'] : undefined,\n safetyPlanId: String(section['safetyPlanId'] ?? this.safetyPlanId() ?? ''),\n sourceSafetyPlanTypeSectionId:\n typeof section['sourceSafetyPlanTypeSectionId'] === 'string'\n ? section['sourceSafetyPlanTypeSectionId']\n : undefined,\n sortOrder:\n typeof section['sortOrder'] === 'number' ? section['sortOrder'] : sectionIndex + 1,\n required: section['required'] === true,\n workStepTypeId:\n typeof section['workStepTypeId'] === 'string' ? section['workStepTypeId'] : undefined,\n workStepType: section['workStepType'] as AXMSafetyPlanSectionBuilderValue['sections'][number]['workStepType'],\n columns: normalizeStepTableColumns(section['columns'] as AXMStepTableColumnDef[] | undefined),\n items: this.collapseBuilderRowsToStorageItems(section.id, section.items, section),\n })),\n });\n }\n\n private expandSectionItemsToBuilderRows(\n sectionId: string,\n items: AXMSafetyPlanSectionBuilderItemValue[],\n section: {\n sectionTypeId?: string;\n sectionType?: AXMSectionTypeSnapshot;\n columns?: AXMStepTableColumnDef[];\n },\n ): AXPBuilderItem[] {\n if (\n isStepTableSectionType(section.sectionTypeId, section.sectionType) ||\n items.some((item) => item.stepTableRow)\n ) {\n const columns = normalizeStepTableColumns(section.columns);\n return items\n .filter((item) => item.stepTableRow)\n .map((item, order) =>\n this.toBuilderItemFromStepTableRow(\n {\n ...item.stepTableRow!,\n title:\n item.stepTableRow!.title ||\n summarizeStepTableRow(item.stepTableRow!.cells ?? [], columns),\n },\n order,\n item.id,\n ),\n );\n }\n const linked = this.flattenLinkedEntities(items);\n return linked.map((entry, order) => this.toBuilderItemFromEntity(sectionId, entry, order));\n }\n\n private collapseBuilderRowsToStorageItems(\n sectionId: string,\n items: AXPBuilderItem[],\n section: AXPBuilderSection,\n ): AXMSafetyPlanSectionBuilderItemValue[] {\n const ordered = [...items].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n const sectionTypeId = String(section['sectionTypeId'] ?? '');\n const sectionType = section['sectionType'] as AXMSectionTypeSnapshot | undefined;\n\n if (isStepTableSectionType(sectionTypeId, sectionType) || ordered.some((item) => item['stepTableRow'])) {\n const columns = normalizeStepTableColumns(section['columns'] as AXMStepTableColumnDef[] | undefined);\n const stepItems: AXMSafetyPlanSectionBuilderItemValue[] = [];\n ordered.forEach((item, index) => {\n const stepTableRow = item['stepTableRow'] as AXMSafetyPlanStepTableRowBuilderPayload | undefined;\n if (!stepTableRow) {\n return;\n }\n const stepId =\n typeof item.id === 'string' && item.id && !String(item.id).includes('__entity_')\n ? String(item.id)\n : AXPDataGenerator.uuid();\n const title =\n stepTableRow.title?.trim() ||\n summarizeStepTableRow(stepTableRow.cells ?? [], columns) ||\n 'Row';\n stepItems.push({\n id: stepId,\n itemIds: [stepId],\n items: [{ id: stepId, title, code: stepTableRow.code }],\n stepTableRow: {\n ...stepTableRow,\n title,\n sortOrder: index + 1,\n },\n });\n });\n return stepItems;\n }\n\n const itemIds: string[] = [];\n const snapshots: NonNullable<AXMSafetyPlanSectionBuilderItemValue['items']> = [];\n\n for (const item of ordered) {\n const entityId = this.resolveBuilderItemEntityId(item);\n if (!entityId || itemIds.includes(entityId)) {\n continue;\n }\n itemIds.push(entityId);\n const snapshot = Array.isArray(item['items'])\n ? (item['items'] as NonNullable<AXMSafetyPlanSectionBuilderItemValue['items']>)[0]\n : undefined;\n snapshots.push({\n id: entityId,\n title:\n (typeof snapshot?.title === 'string' && snapshot.title) ||\n (typeof item['title'] === 'string' ? item['title'] : undefined),\n code:\n (typeof snapshot?.code === 'string' && snapshot.code) ||\n (typeof item['name'] === 'string' ? item['name'] : undefined),\n });\n }\n\n if (!itemIds.length) {\n return [];\n }\n\n return [\n dedupeSafetyPlanSectionItemSelection({\n id: `${sectionId}__item_1`,\n itemIds,\n items: snapshots,\n }),\n ];\n }\n\n private flattenLinkedEntities(\n items: AXMSafetyPlanSectionBuilderItemValue[],\n ): Array<{ id: string; title?: string; code?: string }> {\n const linked: Array<{ id: string; title?: string; code?: string }> = [];\n const seen = new Set<string>();\n\n for (const slot of items) {\n const ids = Array.isArray(slot.itemIds) ? slot.itemIds : [];\n const snapshots = Array.isArray(slot.items) ? slot.items : [];\n for (let index = 0; index < ids.length; index += 1) {\n const id = String(ids[index] ?? '').trim();\n if (!id || seen.has(id)) {\n continue;\n }\n seen.add(id);\n const snapshot = snapshots.find((entry) => entry?.id === id) ?? snapshots[index];\n linked.push({\n id,\n title: snapshot?.title,\n code: snapshot?.code,\n });\n }\n }\n\n return linked;\n }\n\n private expandDialogSelectionToLinkedEntities(\n dialogValue: SafetyPlanSectionItemDialogValue,\n ): Array<{ id: string; title?: string; code?: string }> {\n return this.flattenLinkedEntities([\n {\n id: 'dialog',\n itemIds: [...(dialogValue.itemIds ?? [])],\n items: dialogValue.items ? [...dialogValue.items] : [],\n },\n ]);\n }\n\n private collectEntityIdsFromBuilderItems(items: AXPBuilderItem[]): Set<string> {\n const ids = new Set<string>();\n for (const item of items) {\n const entityId = this.resolveBuilderItemEntityId(item);\n if (entityId) {\n ids.add(entityId);\n }\n }\n return ids;\n }\n\n private resolveBuilderItemEntityId(item: AXPBuilderItem): string | null {\n if (typeof item['entityId'] === 'string' && item['entityId'].trim()) {\n return item['entityId'].trim();\n }\n if (Array.isArray(item['itemIds']) && typeof item['itemIds'][0] === 'string' && item['itemIds'][0].trim()) {\n return item['itemIds'][0].trim();\n }\n const snapshot = Array.isArray(item['items'])\n ? (item['items'] as { id?: string }[])[0]\n : undefined;\n if (typeof snapshot?.id === 'string' && snapshot.id.trim()) {\n return snapshot.id.trim();\n }\n return null;\n }\n\n private toBuilderItemFromEntity(\n sectionId: string,\n entry: { id: string; title?: string; code?: string },\n order: number,\n ): AXPBuilderItem {\n const title = String(entry.title ?? '').trim();\n const code = String(entry.code ?? '').trim();\n return {\n id: `${sectionId}__entity_${entry.id}`,\n order,\n entityId: entry.id,\n itemIds: [entry.id],\n items: [{ id: entry.id, title: title || undefined, code: code || undefined }],\n title,\n name: code,\n };\n }\n\n private toBuilderItemFromStepTableRow(\n row: AXMSafetyPlanStepTableRowBuilderPayload,\n order: number,\n id?: string,\n ): AXPBuilderItem {\n const stepId =\n typeof id === 'string' && id.trim() && !id.includes('__item_') && !id.includes('__entity_')\n ? id.trim()\n : AXPDataGenerator.uuid();\n const title = String(row.title ?? '').trim() || 'Row';\n const code = String(row.code ?? '').trim();\n return {\n id: stepId,\n order,\n entityId: stepId,\n itemIds: [stepId],\n items: [{ id: stepId, title, code: code || undefined }],\n title,\n name: code,\n stepTableRow: {\n ...row,\n title,\n sortOrder: order + 1,\n },\n };\n }\n\n //#endregion\n\n //#region ----- Step Table row dialog -----\n\n private async promptStepTableRowForm(\n mode: 'create' | 'edit',\n sectionContext: SectionBuilderContext,\n seed: SafetyPlanStepTableRowDialogValue,\n options?: { requireTitle?: boolean; applyTitleToSection?: boolean },\n ): Promise<AXMSafetyPlanStepTableRowBuilderPayload | null> {\n const columns = sortStepTableColumns(sectionContext.columns);\n const requireTitle = options?.requireTitle === true;\n const titleKey =\n mode === 'create'\n ? '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.actions.add-row.title'\n : '@general:actions.edit.title';\n const dialogTitle =\n (await this.translationService.translateAsync(titleKey)) ||\n (mode === 'create' ? 'Add Row' : 'Edit');\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ success: boolean; value?: AXMSafetyPlanStepTableRowBuilderPayload }>((dialog) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('lg')\n .setCloseButton(true)\n .setContext({ ...seed })\n .content((layout) => {\n layout.mode('edit');\n layout.dynamicForm(this.buildStepTableRowFormDefinition(columns, { includeTitle: requireTitle }));\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction((dialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return { success: false };\n }\n const context = dialogRef.context() as SafetyPlanStepTableRowDialogValue;\n const customTitle = String(context['title'] ?? '').trim();\n if (requireTitle && !customTitle) {\n return { success: false };\n }\n const cells = this.dialogValueToCells(context, columns);\n if (!this.validateRequiredStepTableCells(cells, columns)) {\n return { success: false };\n }\n return {\n success: true,\n kind: 'object',\n value: {\n cells,\n title: customTitle || summarizeStepTableRow(cells, columns),\n } satisfies AXMSafetyPlanStepTableRowBuilderPayload,\n };\n });\n })\n .show();\n\n return result?.success && result.value ? result.value : null;\n }\n\n private buildStepTableRowFormDefinition(\n columns: AXMStepTableColumnDef[],\n options?: { includeTitle?: boolean },\n ): AXPDynamicFormDefinition {\n const ordered = sortStepTableColumns(columns);\n const parameters: AXPDynamicFormDefinition['groups'][number]['parameters'] = [];\n\n if (options?.includeTitle) {\n parameters.push({\n path: 'title',\n title: '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.fields.title.title',\n widget: {\n path: 'title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder:\n '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.fields.title.placeholder',\n },\n },\n });\n }\n\n for (const column of ordered) {\n const key = stepTableColumnKey(column);\n const lookupEntity = resolveStepTableColumnLookupEntity(column);\n const multi = isStepTableColumnMultiLookup(column);\n parameters.push({\n path: key,\n title: stepTableColumnTitle(column),\n widget: lookupEntity\n ? {\n path: key,\n type: AXPWidgetsCatalog.lookup,\n options: {\n look: multi ? 'lookup' : 'select',\n entity: lookupEntity,\n textField: 'title',\n valueField: 'id',\n columns: ['code', 'title'],\n ...(multi ? { multiple: true } : {}),\n expose: multi\n ? [\n { source: 'id', target: `${key}Refs.{id}` },\n { source: 'title', target: `${key}Refs.{title}` },\n { source: 'code', target: `${key}Refs.{code}` },\n ]\n : [\n { source: 'id', target: `${key}Ref.id` },\n { source: 'title', target: `${key}Ref.title` },\n { source: 'code', target: `${key}Ref.code` },\n ],\n },\n }\n : {\n path: key,\n type: AXPWidgetsCatalog.text,\n },\n });\n }\n\n return {\n groups: [\n {\n name: 'step-table-row',\n title: '@workplacesafety-management:safety-plan-work-steps.entities.safety-plan-work-step.groups.table-content',\n parameters,\n },\n ],\n };\n }\n\n private validateRequiredStepTableCells(\n cells: AXMStepTableCellValue[],\n columns: AXMStepTableColumnDef[],\n ): boolean {\n for (const column of columns) {\n if (column.required !== true) {\n continue;\n }\n const key = stepTableColumnKey(column);\n const cell = cells.find((entry) => entry.columnKey === key);\n if (!cell) {\n return false;\n }\n const lookupEntity = resolveStepTableColumnLookupEntity(column);\n if (lookupEntity) {\n if (!(cell.refIds?.length)) {\n return false;\n }\n } else if (!cell.textValue?.trim()) {\n return false;\n }\n }\n return true;\n }\n\n private cellsToDialogValue(\n cells: AXMStepTableCellValue[],\n columns: AXMStepTableColumnDef[],\n ): SafetyPlanStepTableRowDialogValue {\n const ordered = sortStepTableColumns(columns);\n const normalized = normalizeStepTableRows(\n [{ id: 'row', sortOrder: 1, cells }],\n ordered,\n )[0];\n const dialogRow: SafetyPlanStepTableRowDialogValue = {};\n for (const column of ordered) {\n const key = stepTableColumnKey(column);\n const cell = normalized?.cells.find((entry) => entry.columnKey === key);\n if (!cell) {\n continue;\n }\n const lookupEntity = resolveStepTableColumnLookupEntity(column);\n if (!lookupEntity) {\n dialogRow[key] = cell.textValue ?? '';\n continue;\n }\n if (isStepTableColumnMultiLookup(column)) {\n dialogRow[key] = cell.refIds ?? [];\n dialogRow[`${key}Refs`] = cell.refs ?? [];\n } else {\n dialogRow[key] = cell.refIds?.[0];\n dialogRow[`${key}Ref`] = cell.refs?.[0];\n }\n }\n return dialogRow;\n }\n\n private dialogValueToCells(\n row: SafetyPlanStepTableRowDialogValue,\n columns: AXMStepTableColumnDef[],\n ): AXMStepTableCellValue[] {\n const ordered = sortStepTableColumns(columns);\n return ordered.map((column) => {\n const key = stepTableColumnKey(column);\n const lookupEntity = resolveStepTableColumnLookupEntity(column);\n if (!lookupEntity) {\n return {\n columnKey: key,\n textValue: typeof row[key] === 'string' ? String(row[key]) : '',\n };\n }\n if (isStepTableColumnMultiLookup(column)) {\n const refs = Array.isArray(row[`${key}Refs`])\n ? (row[`${key}Refs`] as { id?: string; title?: string; code?: string }[])\n : [];\n const ids = Array.isArray(row[key])\n ? (row[key] as unknown[]).filter((value): value is string => typeof value === 'string')\n : refs\n .map((ref) => (typeof ref?.id === 'string' ? ref.id : ''))\n .filter(Boolean);\n return {\n columnKey: key,\n refIds: ids,\n refs: ids.map((idValue) => {\n const ref = refs.find((entry) => entry?.id === idValue);\n return { id: idValue, title: ref?.title, code: ref?.code };\n }),\n };\n }\n const ref = row[`${key}Ref`] as { id?: string; title?: string; code?: string } | undefined;\n const idValue =\n (typeof row[key] === 'string' && String(row[key])) ||\n (typeof ref?.id === 'string' ? ref.id : '');\n return {\n columnKey: key,\n refIds: idValue ? [idValue] : [],\n refs: idValue ? [{ id: idValue, title: ref?.title, code: ref?.code }] : [],\n };\n });\n }\n\n private async loadWorkStepType(workStepTypeId: string): Promise<{\n id: string;\n title?: string;\n code?: string;\n columns: AXMStepTableColumnDef[];\n } | null> {\n try {\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.workStepType.name}`;\n const row = await this.entityService.withEntity(entityKey).data().byKey(workStepTypeId);\n if (!row) {\n return null;\n }\n const record = row as {\n id?: string;\n title?: string;\n code?: string;\n columns?: AXMStepTableColumnDef[];\n };\n return {\n id: String(record.id ?? workStepTypeId),\n title: record.title,\n code: record.code,\n columns: normalizeStepTableColumns(record.columns),\n };\n } catch {\n return null;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-safety-plan-section-builder\">\n @if (!readonly() && !hideHeaderActions() && allowAddSection()) {\n <div class=\"__header\">\n <div class=\"__header-left\"></div>\n <div class=\"__header-right\">\n <ax-button\n class=\"ax-sm\"\n [text]=\"\n '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.actions.add-section.title'\n | translate\n | async\n \"\n [color]=\"'primary'\"\n (onClick)=\"addSection()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </div>\n }\n\n <axp-standard-section-items-builder\n class=\"block min-h-[200px]\"\n [value]=\"builderValue()\"\n [config]=\"standardConfig()\"\n [readonly]=\"readonly()\"\n (valueChange)=\"onBuilderValueChange($event)\"\n />\n</div>\n","//#region ---- Imports ----\n\nimport { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport { AXPDataGenerator } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommandService, AXPRuntimeRemoteHookKeys, type AXPRuntimeCommandExecuteHookPayload } from '@acorex-platform/framework-client/runtime';\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport { AXPLayoutBuilderService, resolveLayoutBuilderDialogResult } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport type { AXPLayoutDetailsViewAction } from '@acorex-platform/framework-client/layout/views';\nimport type {\n AXMSafetyPlanSectionBuilderValue,\n AXMWorkplaceSafetyManagementSafetyPlanTypeSectionEntityModel,\n} from '@acorex-platform/module-workplacesafety-management-client/contracts';\nimport {\n AXMWorkplaceSafetyManagementCommandKeys,\n RootConfig,\n buildSectionStructureFromTypeSections,\n collectBuiltInRepeatableSectionTypeIds,\n dedupeSafetyPlanSectionStructure,\n normalizeStepTableColumns,\n resolveEntityRefId,\n toBuilderValueFromStructure,\n type AXMStepTableColumnDef,\n} from '@acorex-platform/module-workplacesafety-management-client/contracts';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { cloneDeep, isEqual } from 'lodash';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXMSafetyPlanSectionBuilderComponent } from './safety-plan-section-builder.component';\nimport {\n normalizeSafetyPlanSectionBuilderValue,\n hydrateStepTableSectionsWithWorkSteps,\n safetyPlanSectionsToBuilderValue,\n} from './safety-plan-section-builder.types';\nimport { SAFETY_PLAN_SECTIONS_SAVE_COMMAND } from './save-safety-plan-sections.command';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst SAFETY_PLAN_SECTIONS_ADD_SECTION_COMMAND = 'SafetyPlan:Sections:AddSection';\nconst SAFETY_PLAN_SECTIONS_DISCARD_COMMAND = 'SafetyPlan:Sections:Discard';\nconst SAFETY_PLAN_SECTIONS_CHANGE_PLAN_TYPE_COMMAND = 'SafetyPlan:Sections:ChangePlanType';\n\nconst SAFETY_PLAN_SECTION_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.safetyPlanSection.name}`;\nconst SAFETY_PLAN_WORK_STEP_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.safetyPlanWorkStep.name}`;\nconst SAFETY_PLAN_TYPE_SECTION_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.safetyPlanTypeSection.name}`;\nconst SAFETY_PLAN_TYPE_ENTITY = RootConfig.entities.safetyPlanType.source;\nconst SECTION_TYPE_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.sectionType.name}`;\n\n//#endregion\n\n//#region ---- Types ----\n\ninterface ChangePlanTypeDialogValue {\n safetyPlanTypeId: string;\n safetyPlanType?: { id: string; title?: string; code?: string };\n}\n\ninterface ChangePlanTypeSelection {\n safetyPlanTypeId: string;\n safetyPlanType?: { id: string; title?: string; code?: string };\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-safety-plan-sections-page',\n standalone: true,\n imports: [AXMSafetyPlanSectionBuilderComponent, AXTranslationModule, AsyncPipe],\n template: `\n @if (isLoadingStructure()) {\n <p class=\"text-muted p-4\">\n {{\n '@workplacesafety-management:safety-plans.entities.safety-plan.pages.sections.loading'\n | translate\n | async\n }}\n </p>\n } @else if (safetyPlanId() || hasPlanType()) {\n <axm-safety-plan-section-builder\n #builderRef\n [value]=\"committedValue()\"\n [safetyPlanId]=\"safetyPlanId() ?? undefined\"\n [options]=\"builderOptions()\"\n (valueChange)=\"onValueChange($event)\"\n />\n } @else {\n <p class=\"text-muted p-4\">\n {{\n '@workplacesafety-management:safety-plans.entities.safety-plan.pages.sections.select-plan-type-first'\n | translate\n | async\n }}\n </p>\n }\n `,\n host: {\n class: 'block w-full min-h-0',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMSafetyPlanSectionsPageComponent,\n },\n ],\n})\nexport class AXMSafetyPlanSectionsPageComponent extends AXPPageLayoutBaseComponent {\n rootContext = input<Record<string, unknown>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, unknown>>({});\n\n protected readonly builderRef = viewChild<AXMSafetyPlanSectionBuilderComponent>('builderRef');\n\n private readonly commandService = inject(AXPCommandService);\n private readonly entityService = inject(AXPEntityService);\n private readonly dialogService = inject(AXDialogService);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly hooks = inject(AXPHookService);\n private readonly hostPageLayout = inject(AXPPageLayoutBase, { optional: true, skipSelf: true });\n\n private readonly baselineValue = signal<AXMSafetyPlanSectionBuilderValue | null>(null);\n protected readonly committedValue = signal<AXMSafetyPlanSectionBuilderValue | null>(null);\n protected readonly isLoadingStructure = signal(false);\n /** Prevents re-entrant sync loops when applyStructure mutates shared form context. */\n private readonly lastSyncedKey = signal<string | null>(null);\n /** In-flight sync key — blocks concurrent loads for the same pair without blocking retries after cancel. */\n private readonly inflightSyncKey = signal<string | null>(null);\n private readonly appliedPlanTypeId = signal<string | null>(null);\n /** Keeps plan type in sync after Change Plan Type when parent form context is mutated in place. */\n private readonly planTypeOverride = signal<string | null>(null);\n\n protected readonly safetyPlanId = computed((): string | null => {\n const raw = this.rootContext()?.['id'];\n return typeof raw === 'string' && raw.length > 0 ? raw : null;\n });\n\n protected readonly planTypeId = computed((): string | null => {\n const override = this.planTypeOverride();\n if (override) {\n return override;\n }\n const ctx = this.rootContext() ?? {};\n return (\n resolveEntityRefId(ctx['safetyPlanTypeId']) ??\n resolveEntityRefId((ctx['safetyPlanType'] as { id?: unknown } | undefined)?.id) ??\n resolveEntityRefId(ctx['safetyPlanType'])\n );\n });\n\n protected readonly hasPlanType = computed(() => !!this.planTypeId());\n\n protected readonly isDraftPlan = computed((): boolean => {\n const status = this.rootContext()?.['status'];\n return !status || status === AXPSystemStatusType.Draft;\n });\n\n protected readonly builderOptions = computed(() => ({\n hideHeaderActions: true,\n readonly: !this.isDraftPlan() || this.isLoadingStructure(),\n allowAddSection: this.isDraftPlan() && !this.isLoadingStructure(),\n allowAddItems: this.isDraftPlan() && !this.isLoadingStructure(),\n allowReorderSections: this.isDraftPlan() && !this.isLoadingStructure(),\n ...((this.pageConfig() ?? {}) as Record<string, unknown>),\n ...((this.options() ?? {}) as Record<string, unknown>),\n allowEditSection: false,\n allowEditItem: false,\n }));\n\n protected readonly isDirty = computed(() => {\n return !isEqual(this.baselineValue() ?? { sections: [] }, this.committedValue() ?? { sections: [] });\n });\n\n #syncFromContext = effect((onCleanup) => {\n const planId = this.safetyPlanId();\n const typeId = this.planTypeId();\n const syncKey = `${planId ?? ''}|${typeId ?? ''}`;\n\n // Already applied or already loading for this plan/type pair.\n if (\n untracked(() => this.lastSyncedKey()) === syncKey ||\n untracked(() => this.inflightSyncKey()) === syncKey\n ) {\n return;\n }\n\n this.inflightSyncKey.set(syncKey);\n\n let cancelled = false;\n\n const clearInflight = (): void => {\n if (untracked(() => this.inflightSyncKey()) === syncKey) {\n this.inflightSyncKey.set(null);\n }\n };\n\n const markSynced = (): void => {\n this.lastSyncedKey.set(syncKey);\n clearInflight();\n };\n\n const run = async (): Promise<void> => {\n if (cancelled) {\n return;\n }\n\n const repeatableSectionTypeIds = await this.loadRepeatableSectionTypeIds();\n if (cancelled) {\n return;\n }\n\n // Edit: load independent saved sections once — never append type defaults on top.\n if (planId) {\n this.isLoadingStructure.set(true);\n try {\n const loaded = await this.fetchSectionsFromBackend(planId, repeatableSectionTypeIds);\n if (cancelled) return;\n\n if (loaded.sections.length > 0) {\n // Replace UI from backend (deduped). Never append defaults on top of saved rows.\n this.applyStructure(loaded, { asBaseline: true });\n this.appliedPlanTypeId.set(typeId);\n markSynced();\n return;\n }\n\n // No saved rows yet — fall through to type defaults when type is known.\n } catch {\n if (cancelled) return;\n clearInflight();\n await this.showStructureLoadError();\n return;\n } finally {\n if (!cancelled) {\n this.isLoadingStructure.set(false);\n }\n }\n\n if (cancelled) {\n return;\n }\n }\n\n if (!typeId) {\n this.appliedPlanTypeId.set(null);\n this.applyStructure({ sections: [] }, { asBaseline: true });\n markSynced();\n return;\n }\n\n const previousTypeId = untracked(() => this.appliedPlanTypeId());\n const currentSections = untracked(() => this.committedValue()?.sections ?? []);\n\n if (previousTypeId && previousTypeId !== typeId && currentSections.length > 0) {\n const confirmed = await this.confirmReplaceStructure();\n if (cancelled) return;\n if (!confirmed) {\n // Keep previous structure; mark new type as handled so we do not loop.\n this.appliedPlanTypeId.set(typeId);\n markSynced();\n return;\n }\n }\n\n this.isLoadingStructure.set(true);\n try {\n const defaults = await this.loadDefaultsForPlanType(typeId, repeatableSectionTypeIds);\n if (cancelled) return;\n // Replace (never append) the current collection with type defaults.\n this.applyStructure(defaults, { asBaseline: true });\n this.appliedPlanTypeId.set(typeId);\n markSynced();\n } catch {\n if (cancelled) return;\n clearInflight();\n await this.showStructureLoadError();\n } finally {\n if (!cancelled) {\n this.isLoadingStructure.set(false);\n }\n }\n };\n\n void run();\n\n onCleanup(() => {\n cancelled = true;\n clearInflight();\n });\n });\n\n protected onValueChange(value: AXMSafetyPlanSectionBuilderValue): void {\n const withOrder = normalizeSafetyPlanSectionBuilderValue({\n sections: value.sections.map((section, index) => ({\n ...section,\n sortOrder: index + 1,\n })),\n });\n this.committedValue.set(withOrder);\n this.updateRootContextField('sectionStructure', withOrder);\n this.updateRootContextField('sections', withOrder);\n this.recompute();\n }\n\n override getWizardStepContext(): Record<string, unknown> | null {\n const value = this.committedValue();\n if (!value) {\n return null;\n }\n const cloned = cloneDeep(value);\n return { sectionStructure: cloned, sections: cloned };\n }\n\n override hasUnsavedChanges(): boolean {\n return this.isDirty();\n }\n\n override async getPrimaryMenuItems(): Promise<AXPLayoutDetailsViewAction[]> {\n if (!this.isDraftPlan() || this.isLoadingStructure()) {\n return [];\n }\n\n const actions: AXPLayoutDetailsViewAction[] = [\n {\n title:\n '@workplacesafety-management:safety-plan-sections.entities.safety-plan-section.actions.add-section.title',\n icon: 'fa-light fa-layer-group',\n zone: 'header' as const,\n priority: 'primary' as const,\n color: 'primary' as const,\n command: { name: SAFETY_PLAN_SECTIONS_ADD_SECTION_COMMAND, options: {} },\n },\n {\n title: '@workplacesafety-management:safety-plans.actions.change-plan-type.title',\n icon: 'fa-light fa-arrow-right-arrow-left',\n zone: 'header' as const,\n priority: 'secondary' as const,\n color: 'default' as const,\n visible: this.isDraftPlan() && (!!this.planTypeId() || !!this.safetyPlanId()),\n command: { name: SAFETY_PLAN_SECTIONS_CHANGE_PLAN_TYPE_COMMAND, options: {} },\n },\n ];\n\n if (this.safetyPlanId()) {\n actions.push(\n {\n title: '@general:actions.discard.title',\n icon: 'fa-light fa-rotate-left',\n zone: 'footer' as const,\n priority: 'secondary',\n color: 'default',\n visible: this.isDirty(),\n command: { name: SAFETY_PLAN_SECTIONS_DISCARD_COMMAND, options: {} },\n },\n {\n title: '@general:actions.save.title',\n icon: 'fa-light fa-floppy-disk',\n zone: 'footer' as const,\n priority: 'primary',\n color: 'primary',\n visible: this.isDirty(),\n command: { name: SAFETY_PLAN_SECTIONS_SAVE_COMMAND, options: {} },\n },\n );\n }\n\n return actions;\n }\n\n override async execute(command: { name: string; options?: unknown }): Promise<void> {\n if (command.name === SAFETY_PLAN_SECTIONS_ADD_SECTION_COMMAND) {\n await this.builderRef()?.addSection();\n return;\n }\n\n if (command.name === SAFETY_PLAN_SECTIONS_CHANGE_PLAN_TYPE_COMMAND) {\n await this.handleChangePlanType();\n return;\n }\n\n if (command.name === SAFETY_PLAN_SECTIONS_DISCARD_COMMAND) {\n this.handleDiscard();\n return;\n }\n\n if (command.name !== SAFETY_PLAN_SECTIONS_SAVE_COMMAND) return;\n\n await this.handleSave({ silent: false });\n }\n\n private async handleChangePlanType(): Promise<void> {\n if (!this.isDraftPlan()) {\n this.toastService.show({\n color: 'warning',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.draft-only',\n ),\n });\n return;\n }\n\n const selection = await this.promptChangePlanTypeDialog();\n if (!selection) {\n return;\n }\n\n const currentTypeId = this.planTypeId();\n if (currentTypeId && currentTypeId === selection.safetyPlanTypeId) {\n this.toastService.show({\n color: 'warning',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.same-plan-type',\n ),\n });\n return;\n }\n\n const confirmed = await this.confirmChangePlanType();\n if (!confirmed) {\n return;\n }\n\n const planId = this.safetyPlanId();\n this.isLoadingStructure.set(true);\n try {\n if (planId) {\n await this.applyPersistedPlanTypeChange(planId, selection);\n } else {\n await this.applyWizardPlanTypeChange(selection);\n }\n } catch {\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.change-plan-type-failed',\n ),\n });\n } finally {\n this.isLoadingStructure.set(false);\n }\n }\n\n private async promptChangePlanTypeDialog(): Promise<ChangePlanTypeSelection | null> {\n const ctx = this.rootContext() ?? {};\n const currentType = (ctx['safetyPlanType'] as { id?: string; title?: string; code?: string } | undefined) ?? {};\n const currentTypeId = this.planTypeId() ?? '';\n\n const result = await this.layoutBuilder\n .create()\n .dialog<ChangePlanTypeSelection | null>((dialog) => {\n dialog\n .setTitle('@workplacesafety-management:safety-plans.actions.change-plan-type.dialog.title')\n .setSize('md')\n .setCloseButton(true)\n .setContext({\n safetyPlanTypeId: currentTypeId,\n safetyPlanType: currentTypeId\n ? {\n id: currentTypeId,\n title: typeof currentType.title === 'string' ? currentType.title : undefined,\n code: typeof currentType.code === 'string' ? currentType.code : undefined,\n }\n : undefined,\n } satisfies ChangePlanTypeDialogValue)\n .content((flex) => {\n flex\n .setDirection('column')\n .setGap('12px')\n .formField(\n '@workplacesafety-management:safety-plans.actions.change-plan-type.dialog.fields.plan-type.title',\n (field) => {\n field.path('safetyPlanTypeId');\n field.lookupBox({\n entity: SAFETY_PLAN_TYPE_ENTITY,\n look: 'select',\n searchable: true,\n textField: 'title',\n valueField: 'id',\n columns: ['code', 'title'],\n expose: [\n { source: 'id', target: 'safetyPlanType.id' },\n { source: 'title', target: 'safetyPlanType.title' },\n { source: 'code', target: 'safetyPlanType.code' },\n ],\n validations: [{ rule: 'required' }],\n });\n },\n );\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@workplacesafety-management:safety-plans.actions.change-plan-type.dialog.actions.continue');\n })\n .onAction(async (dialogRef) => {\n if (dialogRef.action() === 'cancel') {\n return null;\n }\n const context = dialogRef.context() as ChangePlanTypeDialogValue;\n const safetyPlanTypeId = resolveEntityRefId(context.safetyPlanTypeId);\n if (!safetyPlanTypeId) {\n throw new Error(\n (await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.actions.change-plan-type.dialog.fields.plan-type.placeholder',\n )) || 'Select a Plan Type',\n );\n }\n return {\n safetyPlanTypeId,\n safetyPlanType: context.safetyPlanType?.id\n ? context.safetyPlanType\n : { id: safetyPlanTypeId },\n };\n });\n })\n .show();\n\n return resolveLayoutBuilderDialogResult<ChangePlanTypeSelection>(result);\n }\n\n private async confirmChangePlanType(): Promise<boolean> {\n const title =\n (await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.confirm-change-plan-type.title',\n )) || 'Change Plan Type?';\n const message =\n (await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.confirm-change-plan-type.message',\n )) ||\n 'Changing the Plan Type will discard all existing sections and their selected values. The default sections for the new Plan Type will be loaded. Do you want to continue?';\n\n const dialogResult = await this.dialogService.confirm(title, message, 'danger', 'horizontal');\n return dialogResult.result === true;\n }\n\n private async applyPersistedPlanTypeChange(planId: string, selection: ChangePlanTypeSelection): Promise<void> {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandExecuteHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandExecute,\n {\n name: AXMWorkplaceSafetyManagementCommandKeys.SafetyPlan.ChangeType,\n input: {\n id: planId,\n safetyPlanTypeId: selection.safetyPlanTypeId,\n safetyPlanType: selection.safetyPlanType,\n },\n },\n );\n\n if (!payload.handled || !payload.result?.success) {\n const text = payload.result?.message?.text;\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content:\n typeof text === 'string' && text.startsWith('@')\n ? await this.translateService.translateAsync(text)\n : await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.change-plan-type-failed',\n ),\n });\n return;\n }\n\n const data = payload.result.data as\n | {\n safetyPlanTypeId?: string;\n safetyPlanType?: { id: string; title?: string; code?: string };\n sections?: unknown[];\n }\n | undefined;\n\n const nextTypeId = data?.safetyPlanTypeId ?? selection.safetyPlanTypeId;\n const nextType = data?.safetyPlanType ?? selection.safetyPlanType ?? { id: nextTypeId };\n const repeatableSectionTypeIds = await this.loadRepeatableSectionTypeIds();\n const saved = dedupeSafetyPlanSectionStructure(\n safetyPlanSectionsToBuilderValue(\n (data?.sections ?? []) as Parameters<typeof safetyPlanSectionsToBuilderValue>[0],\n ),\n { repeatableSectionTypeIds },\n );\n\n this.planTypeOverride.set(nextTypeId);\n this.updateRootContextField('safetyPlanTypeId', nextTypeId);\n this.updateRootContextField('safetyPlanType', nextType);\n this.appliedPlanTypeId.set(nextTypeId);\n this.lastSyncedKey.set(`${planId}|${nextTypeId}`);\n this.inflightSyncKey.set(null);\n this.applyStructure(saved, { asBaseline: true });\n this.builderRef()?.syncAfterSave(saved);\n this.recompute();\n\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@general:messages.generic.success.title'),\n content: await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.actions.change-plan-type.dialog.success',\n ),\n });\n }\n\n private async applyWizardPlanTypeChange(selection: ChangePlanTypeSelection): Promise<void> {\n const repeatableSectionTypeIds = await this.loadRepeatableSectionTypeIds();\n const defaults = await this.loadDefaultsForPlanType(\n selection.safetyPlanTypeId,\n repeatableSectionTypeIds,\n );\n\n this.planTypeOverride.set(selection.safetyPlanTypeId);\n this.updateRootContextField('safetyPlanTypeId', selection.safetyPlanTypeId);\n this.updateRootContextField('safetyPlanType', selection.safetyPlanType ?? { id: selection.safetyPlanTypeId });\n this.appliedPlanTypeId.set(selection.safetyPlanTypeId);\n this.lastSyncedKey.set(`|${selection.safetyPlanTypeId}`);\n this.inflightSyncKey.set(null);\n this.applyStructure(defaults, { asBaseline: true });\n this.builderRef()?.syncAfterSave(defaults);\n this.recompute();\n\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@general:messages.generic.success.title'),\n content: await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.actions.change-plan-type.dialog.success',\n ),\n });\n }\n\n private async handleSave(options?: { silent?: boolean }): Promise<void> {\n const silent = options?.silent === true;\n const id = this.safetyPlanId();\n const value = this.committedValue() ?? { sections: [] };\n\n if (!id) {\n if (!silent) {\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.entities.safety-plan.pages.sections.save-plan-first',\n ),\n });\n }\n return;\n }\n\n const result = await this.commandService.execute(SAFETY_PLAN_SECTIONS_SAVE_COMMAND, { id, value });\n\n if (result?.success) {\n // Always reload from backend after save so UI never keeps a stale/appended local list.\n const repeatableSectionTypeIds = await this.loadRepeatableSectionTypeIds();\n const saved = await this.fetchSectionsFromBackend(id, repeatableSectionTypeIds);\n this.applyStructure(saved, { asBaseline: true });\n this.lastSyncedKey.set(`${id}|${this.planTypeId() ?? ''}`);\n this.inflightSyncKey.set(null);\n this.builderRef()?.syncAfterSave(saved);\n this.recompute();\n if (!silent) {\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@general:messages.generic.success.title'),\n content: await this.translateService.translateAsync('@general:messages.generic.success.description'),\n });\n }\n return;\n }\n\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content:\n typeof result?.message?.text === 'string' && result.message.text.startsWith('@')\n ? await this.translateService.translateAsync(result.message.text)\n : await this.translateService.translateAsync('@general:messages.entity.update-failed'),\n });\n }\n\n protected override recompute(): void {\n super.recompute();\n const layout = this.hostPageLayout as unknown as { recompute?: () => void } | null | undefined;\n layout?.recompute?.();\n }\n\n private handleDiscard(): void {\n const baseline = this.baselineValue() ?? { sections: [] };\n this.committedValue.set(baseline);\n this.updateRootContextField('sectionStructure', baseline);\n this.updateRootContextField('sections', baseline);\n this.builderRef()?.resetAfterDiscard();\n this.recompute();\n }\n\n private applyStructure(\n value: AXMSafetyPlanSectionBuilderValue,\n options: { asBaseline: boolean },\n ): void {\n const normalized = normalizeSafetyPlanSectionBuilderValue(value);\n if (options.asBaseline) {\n this.baselineValue.set(normalized);\n }\n this.committedValue.set(normalized);\n // Keep both form fields in sync with the same replaced value (never merge/append).\n this.updateRootContextField('sectionStructure', normalized);\n this.updateRootContextField('sections', normalized);\n // Defer host recompute so it cannot re-enter the sync effect synchronously.\n queueMicrotask(() => {\n untracked(() => this.recompute());\n });\n }\n\n /** Query plan sections from storage and return a deduped builder value (replace, never append). */\n private async fetchSectionsFromBackend(\n planId: string,\n repeatableSectionTypeIds: readonly string[] = [],\n ): Promise<AXMSafetyPlanSectionBuilderValue> {\n const result = await this.entityService.withEntity(SAFETY_PLAN_SECTION_ENTITY).data().query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{ field: 'safetyPlanId', operator: { type: 'equal' }, value: planId }],\n },\n } as never);\n\n const rawLoaded = safetyPlanSectionsToBuilderValue(\n (result.items ?? []) as Parameters<typeof safetyPlanSectionsToBuilderValue>[0],\n );\n const deduped = dedupeSafetyPlanSectionStructure(rawLoaded, { repeatableSectionTypeIds });\n\n const workStepsResult = await this.entityService.withEntity(SAFETY_PLAN_WORK_STEP_ENTITY).data().query({\n skip: 0,\n take: 2000,\n filter: {\n logic: 'and',\n filters: [{ field: 'safetyPlanId', operator: { type: 'equal' }, value: planId }],\n },\n } as never);\n\n const columnsByWorkStepTypeId = await this.loadWorkStepTypeColumns(\n deduped.sections\n .map((section) => section.workStepTypeId)\n .filter((id): id is string => typeof id === 'string' && id.length > 0),\n );\n\n return hydrateStepTableSectionsWithWorkSteps(\n deduped,\n (workStepsResult.items ?? []) as Parameters<typeof hydrateStepTableSectionsWithWorkSteps>[1],\n columnsByWorkStepTypeId,\n );\n }\n\n private async loadWorkStepTypeColumns(\n workStepTypeIds: readonly string[],\n ): Promise<Map<string, AXMStepTableColumnDef[]>> {\n const uniqueIds = [...new Set(workStepTypeIds)];\n const columnsById = new Map<string, AXMStepTableColumnDef[]>();\n if (!uniqueIds.length) {\n return columnsById;\n }\n\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.workStepType.name}`;\n const accessor = this.entityService.withEntity(entityKey);\n await Promise.all(\n uniqueIds.map(async (id) => {\n try {\n const row = await accessor.data().byKey(id);\n if (!row) {\n return;\n }\n const record = row as { columns?: AXMStepTableColumnDef[] };\n columnsById.set(id, normalizeStepTableColumns(record.columns));\n } catch {\n // Leave missing types without columns; hydrate falls back to row snapshots.\n }\n }),\n );\n return columnsById;\n }\n\n private async loadRepeatableSectionTypeIds(): Promise<string[]> {\n const builtIn = collectBuiltInRepeatableSectionTypeIds();\n try {\n const result = await this.entityService.withEntity(SECTION_TYPE_ENTITY).data().query({\n skip: 0,\n take: 1000,\n } as never);\n const fromQuery = (result.items ?? [])\n .filter((row) => (row as { isRepeatable?: unknown }).isRepeatable === true)\n .map((row) => resolveEntityRefId((row as { id?: unknown }).id))\n .filter((id): id is string => !!id);\n return [...new Set([...fromQuery, ...builtIn])];\n } catch {\n return builtIn;\n }\n }\n\n private async loadDefaultsForPlanType(\n typeId: string,\n repeatableSectionTypeIds: readonly string[] = [],\n ): Promise<AXMSafetyPlanSectionBuilderValue> {\n const result = await this.entityService.withEntity(SAFETY_PLAN_TYPE_SECTION_ENTITY).data().query({\n skip: 0,\n take: 1000,\n sort: [{ field: 'sortOrder', dir: 'asc' }],\n filter: {\n logic: 'and',\n filters: [\n { field: 'safetyPlanTypeId', operator: { type: 'equal' }, value: typeId },\n { field: 'isArchived', operator: { type: 'equal' }, value: false },\n ],\n },\n } as never);\n\n const typeSections = ((result.items ?? []) as AXMWorkplaceSafetyManagementSafetyPlanTypeSectionEntityModel[]).filter(\n (row) => resolveEntityRefId(row.safetyPlanTypeId) === typeId,\n );\n\n const structure = dedupeSafetyPlanSectionStructure(\n buildSectionStructureFromTypeSections(typeSections, {\n createId: () => AXPDataGenerator.uuid(),\n }),\n { repeatableSectionTypeIds },\n );\n\n return toBuilderValueFromStructure(await this.enrichSectionTitlesFromSectionTypes(structure));\n }\n\n /**\n * Fills missing section titles from SectionType records when type-section snapshots omit them.\n */\n private async enrichSectionTitlesFromSectionTypes(\n structure: ReturnType<typeof buildSectionStructureFromTypeSections>,\n ): Promise<ReturnType<typeof buildSectionStructureFromTypeSections>> {\n const missingIds = [\n ...new Set(\n structure.sections\n .filter((section) => !section.sectionType?.title || section.title === section.sectionTypeId)\n .map((section) => section.sectionTypeId)\n .filter((id) => !!id),\n ),\n ];\n if (!missingIds.length) {\n return structure;\n }\n\n const sectionTypeEntity = `${RootConfig.module.name}.${RootConfig.entities.sectionType.name}`;\n const result = await this.entityService.withEntity(sectionTypeEntity).data().query({\n skip: 0,\n take: Math.max(missingIds.length, 1),\n filter: {\n logic: 'or',\n filters: missingIds.map((id) => ({\n field: 'id',\n operator: { type: 'equal' },\n value: id,\n })),\n },\n } as never);\n\n const byId = new Map<string, { title?: string; code?: string }>();\n for (const row of result.items ?? []) {\n const record = row as unknown as Record<string, unknown>;\n const id = resolveEntityRefId(record['id']);\n if (!id) continue;\n const title = record['title'];\n const code = record['code'];\n byId.set(id, {\n title: typeof title === 'string' ? title : undefined,\n code: typeof code === 'string' ? code : undefined,\n });\n }\n\n return {\n sections: structure.sections.map((section) => {\n const meta = byId.get(section.sectionTypeId);\n if (!meta?.title && !meta?.code) {\n return section;\n }\n const title = (meta.title ?? meta.code ?? section.title).trim();\n return {\n ...section,\n title,\n sectionType: {\n id: section.sectionTypeId,\n title: meta.title ?? section.sectionType?.title,\n code: meta.code ?? section.sectionType?.code,\n },\n };\n }),\n };\n }\n\n private async confirmReplaceStructure(): Promise<boolean> {\n const title =\n (await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.confirm-change-plan-type.title',\n )) || 'Change Plan Type?';\n const message =\n (await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.confirm-change-plan-type.message',\n )) ||\n 'Changing the Plan Type will discard all existing sections and their selected values. The default sections for the new Plan Type will be loaded. Do you want to continue?';\n\n const dialogResult = await this.dialogService.confirm(title, message, 'danger', 'horizontal');\n return dialogResult.result === true;\n }\n\n private async showStructureLoadError(): Promise<void> {\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translateService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.section-structure.load-failed',\n ),\n });\n }\n\n private updateRootContextField(field: string, value: unknown): void {\n const ctx = this.rootContext() as Record<string, unknown> | undefined;\n if (!ctx || typeof ctx !== 'object') {\n return;\n }\n ctx[field] = cloneDeep(value);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\nimport { SAFETY_PLAN_SECTIONS_PAGE_COMPONENT_KEY } from '@acorex-platform/module-workplacesafety-management-client/contracts';\n\n//#endregion\n\n//#region ---- Safety plan sections page provider ----\n\n@Injectable()\nexport class AXMSafetyPlanSectionsPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: SAFETY_PLAN_SECTIONS_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./safety-plan-sections-page.component').then((m) => m.AXMSafetyPlanSectionsPageComponent),\n },\n ];\n }\n}\n\n//#endregion\n"],"names":["i4","i1"],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
2
+ import { resolveEntityRowDisplayText } from '@acorex-platform/framework-client/common';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, Injectable } from '@angular/core';
5
+ import { get, defaultTo, isString } from 'lodash';
6
+ import { AXPWidgetsList } from '@acorex-platform/framework-shared/core';
7
+ import { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';
8
+ import { A as AXMControlHierarchyDiagramService } from './acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.service-BBhH7KP1.mjs';
9
+
10
+ //#region ---- Imports ----
11
+ //#endregion
12
+ //#region ---- Control Hierarchy Diagram Viewer Service ----
13
+ /**
14
+ * Opens a read-only control hierarchy diagram preview dialog from form or record context.
15
+ */
16
+ class AXMControlHierarchyDiagramViewerService {
17
+ constructor() {
18
+ //#region ---- Services & Dependencies ----
19
+ this.layoutBuilder = inject(AXPLayoutBuilderService);
20
+ this.diagramService = inject(AXMControlHierarchyDiagramService);
21
+ this.translation = inject(AXTranslationService);
22
+ }
23
+ //#endregion
24
+ //#region ---- Public API ----
25
+ async open(options) {
26
+ const context = {
27
+ hierarchyDiagramViewType: defaultTo(get(options.context, 'hierarchyDiagramViewType'), 'horizontal'),
28
+ itemIds: defaultTo(get(options.context, 'itemIds'), []),
29
+ id: get(options.context, 'id'),
30
+ title: get(options.context, 'title'),
31
+ hierarchyDiagram: null,
32
+ };
33
+ const ref = await this.layoutBuilder
34
+ .create()
35
+ .dialog((dialog) => {
36
+ dialog
37
+ .setTitle(this.resolveDialogTitle(options.title))
38
+ .setSize('lg')
39
+ .setCloseButton(true)
40
+ .setContext(context)
41
+ .content((layout) => {
42
+ layout.flex((flex) => {
43
+ flex.setDirection('column');
44
+ flex.formField('@workplacesafety-management:control-measure-types.components.control-hierarchy-diagram.fields.view-type.title', (field) => {
45
+ field.path('hierarchyDiagramViewType').selectBox({
46
+ valueField: 'id',
47
+ textField: 'title',
48
+ dataSource: this.diagramService.getViewTypeOptions(),
49
+ });
50
+ });
51
+ flex.formField('', (field) => {
52
+ field
53
+ .path('hierarchyDiagram')
54
+ .setShowLabel(false)
55
+ .mode('view')
56
+ .customWidget(AXPWidgetsList.Editors.ControlHierarchyDiagram, {
57
+ showLabel: false,
58
+ showTitle: false,
59
+ showViewTypeSelector: false,
60
+ viewType: '{{ context.eval("hierarchyDiagramViewType") ?? "horizontal" }}',
61
+ triggers: [
62
+ {
63
+ event: "{{ events.context('hierarchyDiagramViewType') }}",
64
+ action: '{{ widget.refresh() }}',
65
+ },
66
+ {
67
+ event: "{{ events.context('itemIds') }}",
68
+ action: '{{ widget.refresh() }}',
69
+ },
70
+ ],
71
+ });
72
+ });
73
+ });
74
+ })
75
+ .setActions((actions) => {
76
+ actions.cancel('@general:actions.close.title');
77
+ });
78
+ })
79
+ .show();
80
+ ref.close();
81
+ }
82
+ //#endregion
83
+ //#region ---- Utility Methods ----
84
+ resolveDialogTitle(title) {
85
+ const resolved = resolveEntityRowDisplayText(title, this.translation.getActiveLang() ?? 'en-US');
86
+ return resolved || 'Hierarchy Diagram';
87
+ }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMControlHierarchyDiagramViewerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
89
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMControlHierarchyDiagramViewerService, providedIn: 'root' }); }
90
+ }
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMControlHierarchyDiagramViewerService, decorators: [{
92
+ type: Injectable,
93
+ args: [{ providedIn: 'root' }]
94
+ }] });
95
+
96
+ //#endregion
97
+ //#region ---- Command ----
98
+ class AXMPreviewControlHierarchyDiagramCommand {
99
+ constructor() {
100
+ //#region ---- Services & Dependencies ----
101
+ this.translationService = inject(AXTranslationService);
102
+ this.diagramViewer = inject(AXMControlHierarchyDiagramViewerService);
103
+ }
104
+ //#endregion
105
+ //#region ---- Command Implementation ----
106
+ async execute(input) {
107
+ try {
108
+ const context = this.resolveContext(input);
109
+ const dialogTitle = await this.resolveDialogTitle(input, context);
110
+ await this.diagramViewer.open({
111
+ context,
112
+ title: dialogTitle,
113
+ });
114
+ return {
115
+ success: true,
116
+ kind: 'object',
117
+ data: undefined,
118
+ metadata: { refresh: false },
119
+ };
120
+ }
121
+ catch {
122
+ return {
123
+ success: false,
124
+ message: {
125
+ text: await this.translationService.translateAsync('@general:messages.generic.error.description'),
126
+ },
127
+ };
128
+ }
129
+ }
130
+ //#endregion
131
+ //#region ---- Utility Methods ----
132
+ resolveContext(input) {
133
+ const ctxData = input.data;
134
+ if (ctxData) {
135
+ return {
136
+ itemIds: defaultTo(get(ctxData, 'itemIds'), []),
137
+ hierarchyDiagramViewType: defaultTo(get(ctxData, 'hierarchyDiagramViewType'), 'horizontal'),
138
+ id: get(ctxData, 'id'),
139
+ title: get(ctxData, 'title'),
140
+ };
141
+ }
142
+ const ctxOpts = defaultTo(input.options, {});
143
+ return {
144
+ itemIds: defaultTo(get(input, 'itemIds'), defaultTo(get(ctxOpts, 'itemIds'), [])),
145
+ hierarchyDiagramViewType: defaultTo(get(input, 'hierarchyDiagramViewType'), defaultTo(get(ctxOpts, 'hierarchyDiagramViewType'), 'horizontal')),
146
+ id: defaultTo(get(input, 'id'), get(ctxOpts, 'id')),
147
+ title: defaultTo(get(input, 'title'), get(ctxOpts, 'title')),
148
+ };
149
+ }
150
+ async resolveDialogTitle(input, context) {
151
+ const previewLabel = (await this.translationService.translateAsync('@general:actions.preview.title')) || 'Preview';
152
+ const locale = this.translationService.getActiveLang?.() ?? 'en-US';
153
+ const explicitTitle = defaultTo(input.title, get(input, 'options.title'));
154
+ if (isString(explicitTitle) && explicitTitle.trim().length > 0) {
155
+ return `${previewLabel}: ${resolveMultiLanguageString(explicitTitle, locale).trim()}`;
156
+ }
157
+ const contextTitle = get(context, 'title');
158
+ if (contextTitle != null) {
159
+ const recordTitle = resolveEntityRowDisplayText(contextTitle, locale).trim();
160
+ if (recordTitle.length > 0) {
161
+ return `${previewLabel}: ${recordTitle}`;
162
+ }
163
+ }
164
+ const diagramTitle = (await this.translationService.translateAsync('@workplacesafety-management:control-measure-types.components.control-hierarchy-diagram.title')) || 'Hierarchy Diagram';
165
+ return `${previewLabel}: ${diagramTitle}`;
166
+ }
167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPreviewControlHierarchyDiagramCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
168
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPreviewControlHierarchyDiagramCommand }); }
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPreviewControlHierarchyDiagramCommand, decorators: [{
171
+ type: Injectable
172
+ }] });
173
+
174
+ export { AXMPreviewControlHierarchyDiagramCommand };
175
+ //# sourceMappingURL=acorex-platform-module-workplacesafety-management-client-preview-control-hierarchy-diagram.command-C2X3VpEt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-workplacesafety-management-client-preview-control-hierarchy-diagram.command-C2X3VpEt.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/control-hierarchy-diagram/control-hierarchy-diagram-viewer.service.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/control-hierarchy-diagram/commands/preview-control-hierarchy-diagram.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { resolveEntityRowDisplayText } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get } from 'lodash';\n\nimport { AXMControlHierarchyDiagramService } from './control-hierarchy-diagram.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMControlHierarchyDiagramViewerOpenOptions {\n context: Record<string, unknown>;\n title?: string;\n}\n\n//#endregion\n\n//#region ---- Control Hierarchy Diagram Viewer Service ----\n\n/**\n * Opens a read-only control hierarchy diagram preview dialog from form or record context.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMControlHierarchyDiagramViewerService {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly diagramService = inject(AXMControlHierarchyDiagramService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n async open(options: AXMControlHierarchyDiagramViewerOpenOptions): Promise<void> {\n const context = {\n hierarchyDiagramViewType: defaultTo(get(options.context, 'hierarchyDiagramViewType'), 'horizontal'),\n itemIds: defaultTo(get(options.context, 'itemIds'), []),\n id: get(options.context, 'id'),\n title: get(options.context, 'title'),\n hierarchyDiagram: null,\n };\n\n const ref = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(this.resolveDialogTitle(options.title))\n .setSize('lg')\n .setCloseButton(true)\n .setContext(context)\n .content((layout) => {\n layout.flex((flex) => {\n flex.setDirection('column');\n flex.formField(\n '@workplacesafety-management:control-measure-types.components.control-hierarchy-diagram.fields.view-type.title',\n (field) => {\n field.path('hierarchyDiagramViewType').selectBox({\n valueField: 'id',\n textField: 'title',\n dataSource: this.diagramService.getViewTypeOptions(),\n });\n },\n );\n flex.formField('', (field) => {\n field\n .path('hierarchyDiagram')\n .setShowLabel(false)\n .mode('view')\n .customWidget(AXPWidgetsList.Editors.ControlHierarchyDiagram, {\n showLabel: false,\n showTitle: false,\n showViewTypeSelector: false,\n viewType: '{{ context.eval(\"hierarchyDiagramViewType\") ?? \"horizontal\" }}',\n triggers: [\n {\n event: \"{{ events.context('hierarchyDiagramViewType') }}\",\n action: '{{ widget.refresh() }}',\n },\n {\n event: \"{{ events.context('itemIds') }}\",\n action: '{{ widget.refresh() }}',\n },\n ],\n });\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.close.title');\n });\n })\n .show();\n\n ref.close();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private resolveDialogTitle(title: string | undefined): string {\n const resolved = resolveEntityRowDisplayText(title, this.translation.getActiveLang() ?? 'en-US');\n return resolved || 'Hierarchy Diagram';\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { resolveEntityRowDisplayText } from '@acorex-platform/framework-client/common';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, get, isString } from 'lodash';\n\nimport { AXMControlHierarchyDiagramViewerService } from '../control-hierarchy-diagram-viewer.service';\n\n//#endregion\n\n//#region ---- Command Types ----\n\nexport interface AXMPreviewControlHierarchyDiagramCommandInput {\n title?: string;\n itemIds?: unknown;\n hierarchyDiagramViewType?: string;\n id?: string;\n data?: Record<string, unknown>;\n options?: Partial<AXMPreviewControlHierarchyDiagramCommandInput>;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable()\nexport class AXMPreviewControlHierarchyDiagramCommand\n implements AXPCommand<AXMPreviewControlHierarchyDiagramCommandInput, void>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly translationService = inject(AXTranslationService);\n private readonly diagramViewer = inject(AXMControlHierarchyDiagramViewerService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(input: AXMPreviewControlHierarchyDiagramCommandInput): AXPCommandExecuteResultPromise<void> {\n try {\n const context = this.resolveContext(input);\n const dialogTitle = await this.resolveDialogTitle(input, context);\n\n await this.diagramViewer.open({\n context,\n title: dialogTitle,\n });\n\n return {\n success: true,\n kind: 'object',\n data: undefined,\n metadata: { refresh: false },\n };\n } catch {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.error.description'),\n },\n };\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private resolveContext(input: AXMPreviewControlHierarchyDiagramCommandInput): Record<string, unknown> {\n const ctxData = input.data;\n if (ctxData) {\n return {\n itemIds: defaultTo(get(ctxData, 'itemIds'), []),\n hierarchyDiagramViewType: defaultTo(get(ctxData, 'hierarchyDiagramViewType'), 'horizontal'),\n id: get(ctxData, 'id'),\n title: get(ctxData, 'title'),\n };\n }\n\n const ctxOpts = defaultTo(input.options, {});\n\n return {\n itemIds: defaultTo(get(input, 'itemIds'), defaultTo(get(ctxOpts, 'itemIds'), [])),\n hierarchyDiagramViewType: defaultTo(\n get(input, 'hierarchyDiagramViewType'),\n defaultTo(get(ctxOpts, 'hierarchyDiagramViewType'), 'horizontal'),\n ),\n id: defaultTo(get(input, 'id'), get(ctxOpts, 'id')),\n title: defaultTo(get(input, 'title'), get(ctxOpts, 'title')),\n };\n }\n\n private async resolveDialogTitle(\n input: AXMPreviewControlHierarchyDiagramCommandInput,\n context: Record<string, unknown>,\n ): Promise<string> {\n const previewLabel =\n (await this.translationService.translateAsync('@general:actions.preview.title')) || 'Preview';\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n\n const explicitTitle = defaultTo(input.title, get(input, 'options.title'));\n if (isString(explicitTitle) && explicitTitle.trim().length > 0) {\n return `${previewLabel}: ${resolveMultiLanguageString(explicitTitle, locale).trim()}`;\n }\n\n const contextTitle = get(context, 'title');\n if (contextTitle != null) {\n const recordTitle = resolveEntityRowDisplayText(contextTitle, locale).trim();\n if (recordTitle.length > 0) {\n return `${previewLabel}: ${recordTitle}`;\n }\n }\n\n const diagramTitle =\n (await this.translationService.translateAsync(\n '@workplacesafety-management:control-measure-types.components.control-hierarchy-diagram.title',\n )) || 'Hierarchy Diagram';\n\n return `${previewLabel}: ${diagramTitle}`;\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}