@acorex-platform/module-workplacesafety-management-client 0.0.33 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-acorex-platform-module-workplacesafety-management-client-mzaaZ6T3.mjs → acorex-platform-module-workplacesafety-management-client-acorex-platform-module-workplacesafety-management-client-Ds0Fkspp.mjs} +20 -12
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-acorex-platform-module-workplacesafety-management-client-mzaaZ6T3.mjs.map → acorex-platform-module-workplacesafety-management-client-acorex-platform-module-workplacesafety-management-client-Ds0Fkspp.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-control-hierarchy-levels.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-control-measure.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-hazard-ppe-rule.mjs +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-hazard-ppe-rule.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-hazard-register.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-hazard-risk.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-hazard.mjs +71 -88
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-hazard.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-ppe-item.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan-section.mjs +35 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan-section.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan-type-section.mjs +35 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan-type-section.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan-type.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan-work-step.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan.mjs +70 -11
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-plan.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-template.mjs +3 -3
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-safety-template.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-section-type.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-work-step-type.mjs +35 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entities-work-step-type.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-CeTmhod5.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-BI4TLvSE.mjs} +16 -16
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-CeTmhod5.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-BI4TLvSE.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-hierarchy-levels.entity-Dae2kkZe.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-hierarchy-levels.entity-COlCNnyK.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-hierarchy-levels.entity-Dae2kkZe.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-hierarchy-levels.entity-COlCNnyK.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-measure.entity-CpNcN6Pf.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-measure.entity-BrXGzqZU.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-measure.entity-CpNcN6Pf.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-control-measure.entity-BrXGzqZU.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-ppe-rule.entity-BcsAnO9h.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-ppe-rule.entity-DHJus7OP.mjs} +3 -3
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-ppe-rule.entity-DHJus7OP.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-register.entity-C9wGZ3hB.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-register.entity-CogjoDox.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-register.entity-C9wGZ3hB.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-register.entity-CogjoDox.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-risk.entity-AUr2GVLU.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-risk.entity-9UWHmIXV.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-risk.entity-AUr2GVLU.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-risk.entity-9UWHmIXV.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard.entity-J6fveZKA.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard.entity-CNPbxULL.mjs} +12 -29
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard.entity-CNPbxULL.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-ppe-item.entity-3fQPlBBf.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-ppe-item.entity-D5iOBl3P.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-ppe-item.entity-3fQPlBBf.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-ppe-item.entity-D5iOBl3P.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section-dependency-BRGcQo7H.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section-dependency-TdIMIkM7.mjs} +37 -3
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section-dependency-TdIMIkM7.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section.entity-BPx-3rYX.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section.entity-DJAI-7lB.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section.entity-BPx-3rYX.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section.entity-DJAI-7lB.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type-section.entity-_nG09ZpE.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type-section.entity-BGZ1VAW3.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type-section.entity-_nG09ZpE.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type-section.entity-BGZ1VAW3.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type.entity-CIH7W9R7.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type.entity-B6NYL4xi.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type.entity-CIH7W9R7.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-type.entity-B6NYL4xi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-work-step.entity-DmFYsBhI.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-work-step.entity-BlCbf5qP.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-work-step.entity-DmFYsBhI.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-work-step.entity-BlCbf5qP.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan.entity-CUDh_ZfQ.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan.entity-BSUR9jqs.mjs} +72 -13
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan.entity-BSUR9jqs.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-template.entity-BxNUXvae.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-template.entity-CIHy_hLh.mjs} +5 -5
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-template.entity-CIHy_hLh.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-section-type.entity-73MUyaIk.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-section-type.entity-Cs4nIHou.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-section-type.entity-73MUyaIk.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-section-type.entity-Cs4nIHou.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-work-step-type.entity-Ujxum2GY.mjs → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-work-step-type.entity-CJFWDOoh.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-work-step-type.entity-Ujxum2GY.mjs.map → acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-work-step-type.entity-CJFWDOoh.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog.mjs +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts.mjs +38 -3
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram-widget-view.component-CnTEwf_l.mjs → acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram-widget-view.component-eDWG-sJ7.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram-widget-view.component-CnTEwf_l.mjs.map → acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram-widget-view.component-eDWG-sJ7.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.component-BI9VkzNw.mjs → acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.component-CfxHwZtH.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.component-BI9VkzNw.mjs.map → acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.component-CfxHwZtH.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-control-hierarchy-diagram.service-tMrUDnCb.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-hazard-ppe-rule-status.provider-o4bAwYcq.mjs → acorex-platform-module-workplacesafety-management-client-hazard-ppe-rule-status.provider-6ZWaO5DG.mjs} +3 -3
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-ppe-rule-status.provider-6ZWaO5DG.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-risk-status.provider-B6IkRYbW.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-index-LxP1eZLY.mjs → acorex-platform-module-workplacesafety-management-client-index-gbDgxqrV.mjs} +316 -375
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-index-gbDgxqrV.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-local-entities.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-ppe-item-viewer-widget-column.component-D2Mmow12.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-ppe-item-viewer-widget-edit.component-CQtVhCgw.mjs → acorex-platform-module-workplacesafety-management-client-ppe-item-viewer-widget-edit.component-BqHXrGn9.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-ppe-item-viewer-widget-edit.component-CQtVhCgw.mjs.map → acorex-platform-module-workplacesafety-management-client-ppe-item-viewer-widget-edit.component-BqHXrGn9.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.service-YS8FHiRu.mjs → acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.service-BxcGph1I.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.service-YS8FHiRu.mjs.map → acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.service-BxcGph1I.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.util-2Kl3_3sg.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-preview-control-hierarchy-diagram.command-Dd9xdo_y.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-preview-safety-plan.command-BU95c4xb.mjs +254 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-preview-safety-plan.command-BU95c4xb.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-publish-safety-plan.command-Ci-zcrmO.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-safety-plan-preview-modal.component-6i0RkG3L.mjs → acorex-platform-module-workplacesafety-management-client-safety-plan-preview-modal.component-CQ2xB7Va.mjs} +10 -10
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-safety-plan-preview-modal.component-6i0RkG3L.mjs.map → acorex-platform-module-workplacesafety-management-client-safety-plan-preview-modal.component-CQ2xB7Va.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-safety-plan-preview.service-DJP41MuL.mjs +36 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-safety-plan-preview.service-DJP41MuL.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-safety-plan-section-builder.types-LaN1NIgc.mjs +204 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-safety-plan-section-builder.types-LaN1NIgc.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-safety-plan-status.provider-BpWx3gIf.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-workplacesafety-management-client-save-safety-plan-sections.command-BlPzzCc2.mjs → acorex-platform-module-workplacesafety-management-client-save-safety-plan-sections.command-CLj3y_JD.mjs} +4 -209
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-save-safety-plan-sections.command-CLj3y_JD.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-workplacesafety-management-client.mjs +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-module-workplacesafety-management-client-contracts.d.ts +26 -3
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard-ppe-rule.entity-BcsAnO9h.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-hazard.entity-J6fveZKA.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan-section-dependency-BRGcQo7H.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-plan.entity-CUDh_ZfQ.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-contracts-entity-catalog-safety-template.entity-BxNUXvae.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-hazard-ppe-rule-status.provider-o4bAwYcq.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-index-LxP1eZLY.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-workplacesafety-management-client-save-safety-plan-sections.command-BlPzzCc2.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.service-YS8FHiRu.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-card.component.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-card.component.html","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.component.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.component.html","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.service.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport type { AXMPpeItemViewerDisplayItem, AXMPpeItemViewerLook } from './ppe-item-viewer.types';\nimport { ppeItemViewerStandardText } from './ppe-item-viewer.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-ppe-item-card',\n templateUrl: './ppe-item-card.component.html',\n styleUrl: './ppe-item-card.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXCheckBoxModule, AXDecoratorModule, FormsModule],\n host: {\n class: 'axm-ppe-item-card',\n '[class.axm-ppe-item-card--list]': 'look() === \"list\"',\n '[class.axm-ppe-item-card--card]': 'look() === \"card\"',\n '[class.axm-ppe-item-card--selected]': 'selected()',\n '[class.axm-ppe-item-card--interactive]': 'interactive()',\n '[class.axm-ppe-item-card--disabled]': 'disabled()',\n },\n})\nexport class AXMPpeItemCardComponent {\n //#region ----- Inputs -----\n\n readonly item = input.required<AXMPpeItemViewerDisplayItem>();\n readonly look = input<AXMPpeItemViewerLook>('card');\n readonly selected = input(false);\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly showControl = input(true);\n\n //#endregion\n\n //#region ----- Outputs -----\n\n readonly selectedChange = output<boolean>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly interactive = computed(\n () => this.showControl() && !this.disabled() && !this.readonly(),\n );\n\n protected readonly standardText = computed(() => ppeItemViewerStandardText(this.item()));\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onActivate(): void {\n if (!this.interactive()) {\n return;\n }\n this.selectedChange.emit(!this.selected());\n }\n\n protected onCheckChanged(event: AXValueChangedEvent<boolean>): void {\n if (!event.isUserInteraction || !this.interactive()) {\n return;\n }\n this.selectedChange.emit(Boolean(event.value));\n }\n\n protected onControlClick(event: Event): void {\n event.stopPropagation();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-ppe-item-card__body\" (click)=\"onActivate()\">\n <!-- ----- PPE icon ----- -->\n @if (item().imageUrl) {\n <div class=\"axm-ppe-item-card__icon\">\n <img [src]=\"item().imageUrl\" [alt]=\"item().title\" />\n </div>\n }\n <!-- ----- Fallback icon when the PPE item has no image ----- -->\n @else {\n <div class=\"axm-ppe-item-card__icon axm-ppe-item-card__icon--fallback\">\n <ax-icon icon=\"fa-light fa-helmet-safety\"></ax-icon>\n </div>\n }\n\n <div class=\"axm-ppe-item-card__content\">\n <span class=\"axm-ppe-item-card__title\">{{ item().title }}</span>\n <!--->\n <!-- ----- Standard / code when present ----- -->\n @if (standardText()) {\n <span class=\"axm-ppe-item-card__code\">{{ standardText() }}</span>\n }\n </div>\n\n <!-- ----- Selection checkbox ----- -->\n @if (showControl()) {\n <div class=\"axm-ppe-item-card__control\" (click)=\"onControlClick($event)\">\n <ax-check-box\n [ngModel]=\"selected()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (onValueChanged)=\"onCheckChanged($event)\"\n ></ax-check-box>\n </div>\n }\n</div>\n","//#region ----- Imports -----\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\n\nimport { AXMPpeItemCardComponent } from './ppe-item-card.component';\nimport type {\n AXMPpeItemViewerDisplayItem,\n AXMPpeItemViewerLayout,\n AXMPpeItemViewerLook,\n} from './ppe-item-viewer.types';\nimport { resolvePpeItemViewerLook } from './ppe-item-viewer.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-ppe-item-viewer',\n templateUrl: './ppe-item-viewer.component.html',\n styleUrl: './ppe-item-viewer.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AsyncPipe, AXLoadingModule, AXTranslationModule, AXMPpeItemCardComponent],\n host: {\n class: 'axm-ppe-item-viewer block w-full',\n },\n})\nexport class AXMPpeItemViewerComponent {\n //#region ----- Inputs -----\n\n readonly items = input<AXMPpeItemViewerDisplayItem[]>([]);\n readonly layout = input<AXMPpeItemViewerLayout>('horizontal');\n readonly selectedIds = input<readonly string[]>([]);\n readonly loading = input(false);\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly showControl = input(true);\n\n //#endregion\n\n //#region ----- Outputs -----\n\n readonly selectedIdsChange = output<string[]>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly look = computed<AXMPpeItemViewerLook>(() =>\n resolvePpeItemViewerLook(this.layout()),\n );\n\n protected readonly selectedIdSet = computed(() => new Set(this.selectedIds()));\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected isSelected(itemId: string): boolean {\n return this.selectedIdSet().has(itemId);\n }\n\n protected onItemSelectedChange(itemId: string, selected: boolean): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n const next = this.items()\n .map((item) => item.id)\n .filter((id) => (id === itemId ? selected : this.selectedIdSet().has(id)));\n this.selectedIdsChange.emit(next);\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (loading()) {\n <!-- ----- Loading indicator while configured PPE items are fetched ----- -->\n <ax-loading></ax-loading>\n}\n<!-- ----- Empty state when no PPE items are configured ----- -->\n@else if (items().length === 0) {\n <p class=\"axm-ppe-item-viewer__empty\">\n {{ '@workplacesafety-management:ppe-items.components.ppe-item-viewer.empty' | translate | async }}\n </p>\n}\n<!-- ----- PPE items in card grid or checklist list ----- -->\n@else {\n <div\n class=\"axm-ppe-item-viewer__items\"\n [class.axm-ppe-item-viewer__items--card]=\"look() === 'card'\"\n [class.axm-ppe-item-viewer__items--list]=\"look() === 'list'\"\n >\n @for (item of items(); track item.id) {\n <axm-ppe-item-card\n [item]=\"item\"\n [look]=\"look()\"\n [selected]=\"isSelected(item.id)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [showControl]=\"showControl()\"\n (selectedChange)=\"onItemSelectedChange(item.id, $event)\"\n />\n }\n </div>\n}\n","//#region ----- Imports -----\n\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPFileStorageService, isStoredImageFileId, resolveStoredImageDisplayUrl } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\n\nimport { RootConfig, type AXMWorkplaceSafetyManagementPpeItemEntityModel } from '@acorex-platform/module-workplacesafety-management-client/contracts';\n\nimport type { AXMPpeItemViewerDisplayItem } from './ppe-item-viewer.types';\n\n//#endregion\n\n//#region ----- Service -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMPpeItemViewerService {\n //#region ----- Services & Dependencies -----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly fileStorage = inject(AXPFileStorageService, { optional: true });\n\n //#endregion\n\n //#region ----- Public API -----\n\n async loadDisplayItems(ids: string[]): Promise<AXMPpeItemViewerDisplayItem[]> {\n if (ids.length === 0) {\n return [];\n }\n\n const records = await this.queryByIds(ids);\n const byId = new Map(records.map((row) => [row.id, row]));\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n\n return ids\n .map((id) => byId.get(id))\n .filter((row): row is AXMWorkplaceSafetyManagementPpeItemEntityModel => row != null)\n .map((row) => this.toDisplayItem(row, locale));\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private async queryByIds(ids: string[]): Promise<AXMWorkplaceSafetyManagementPpeItemEntityModel[]> {\n const dataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.ppeItem.name)\n .data<string, AXMWorkplaceSafetyManagementPpeItemEntityModel>();\n\n try {\n const result = await dataAccessor.query({\n skip: 0,\n take: Math.max(ids.length, 100),\n filter:\n ids.length === 1\n ? { field: 'id', operator: { type: 'equal' }, value: ids[0] }\n : { field: 'id', operator: { type: 'in' }, value: ids },\n });\n return result?.items ?? [];\n } catch {\n const loaded: AXMWorkplaceSafetyManagementPpeItemEntityModel[] = [];\n for (const id of ids) {\n try {\n const row = await dataAccessor.byKey(id);\n if (row) {\n loaded.push(row);\n }\n } catch {\n /* skip missing rows */\n }\n }\n return loaded;\n }\n }\n\n private toDisplayItem(\n row: AXMWorkplaceSafetyManagementPpeItemEntityModel,\n locale: string,\n ): AXMPpeItemViewerDisplayItem {\n const title = resolveMultiLanguageString(row.title, locale);\n const code = typeof row.code === 'string' ? row.code.trim() : '';\n const serialNumber = typeof row.serialNumber === 'string' ? row.serialNumber.trim() : '';\n return {\n id: row.id,\n title,\n code: code.length > 0 ? code : undefined,\n serialNumber: serialNumber.length > 0 ? serialNumber : undefined,\n imageUrl: this.resolveIconUrl(row.icon),\n };\n }\n\n private resolveIconUrl(icon: string | undefined): string | null {\n const trimmed = icon?.trim();\n if (!trimmed) {\n return null;\n }\n if (this.fileStorage && isStoredImageFileId(trimmed)) {\n const displayUrl = resolveStoredImageDisplayUrl(trimmed, (fileId) =>\n this.fileStorage!.getDownloadUrl(fileId),\n );\n return displayUrl || null;\n }\n return resolveStoredImageDisplayUrl(trimmed, () => '') || null;\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["i3","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.service-BxcGph1I.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-card.component.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-card.component.html","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.component.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.component.html","../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.service.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport type { AXMPpeItemViewerDisplayItem, AXMPpeItemViewerLook } from './ppe-item-viewer.types';\nimport { ppeItemViewerStandardText } from './ppe-item-viewer.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-ppe-item-card',\n templateUrl: './ppe-item-card.component.html',\n styleUrl: './ppe-item-card.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXCheckBoxModule, AXDecoratorModule, FormsModule],\n host: {\n class: 'axm-ppe-item-card',\n '[class.axm-ppe-item-card--list]': 'look() === \"list\"',\n '[class.axm-ppe-item-card--card]': 'look() === \"card\"',\n '[class.axm-ppe-item-card--selected]': 'selected()',\n '[class.axm-ppe-item-card--interactive]': 'interactive()',\n '[class.axm-ppe-item-card--disabled]': 'disabled()',\n },\n})\nexport class AXMPpeItemCardComponent {\n //#region ----- Inputs -----\n\n readonly item = input.required<AXMPpeItemViewerDisplayItem>();\n readonly look = input<AXMPpeItemViewerLook>('card');\n readonly selected = input(false);\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly showControl = input(true);\n\n //#endregion\n\n //#region ----- Outputs -----\n\n readonly selectedChange = output<boolean>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly interactive = computed(\n () => this.showControl() && !this.disabled() && !this.readonly(),\n );\n\n protected readonly standardText = computed(() => ppeItemViewerStandardText(this.item()));\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onActivate(): void {\n if (!this.interactive()) {\n return;\n }\n this.selectedChange.emit(!this.selected());\n }\n\n protected onCheckChanged(event: AXValueChangedEvent<boolean>): void {\n if (!event.isUserInteraction || !this.interactive()) {\n return;\n }\n this.selectedChange.emit(Boolean(event.value));\n }\n\n protected onControlClick(event: Event): void {\n event.stopPropagation();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-ppe-item-card__body\" (click)=\"onActivate()\">\n <!-- ----- PPE icon ----- -->\n @if (item().imageUrl) {\n <div class=\"axm-ppe-item-card__icon\">\n <img [src]=\"item().imageUrl\" [alt]=\"item().title\" />\n </div>\n }\n <!-- ----- Fallback icon when the PPE item has no image ----- -->\n @else {\n <div class=\"axm-ppe-item-card__icon axm-ppe-item-card__icon--fallback\">\n <ax-icon icon=\"fa-light fa-helmet-safety\"></ax-icon>\n </div>\n }\n\n <div class=\"axm-ppe-item-card__content\">\n <span class=\"axm-ppe-item-card__title\">{{ item().title }}</span>\n <!--->\n <!-- ----- Standard / code when present ----- -->\n @if (standardText()) {\n <span class=\"axm-ppe-item-card__code\">{{ standardText() }}</span>\n }\n </div>\n\n <!-- ----- Selection checkbox ----- -->\n @if (showControl()) {\n <div class=\"axm-ppe-item-card__control\" (click)=\"onControlClick($event)\">\n <ax-check-box\n [ngModel]=\"selected()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n (onValueChanged)=\"onCheckChanged($event)\"\n ></ax-check-box>\n </div>\n }\n</div>\n","//#region ----- Imports -----\n\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\n\nimport { AXMPpeItemCardComponent } from './ppe-item-card.component';\nimport type {\n AXMPpeItemViewerDisplayItem,\n AXMPpeItemViewerLayout,\n AXMPpeItemViewerLook,\n} from './ppe-item-viewer.types';\nimport { resolvePpeItemViewerLook } from './ppe-item-viewer.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-ppe-item-viewer',\n templateUrl: './ppe-item-viewer.component.html',\n styleUrl: './ppe-item-viewer.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AsyncPipe, AXLoadingModule, AXTranslationModule, AXMPpeItemCardComponent],\n host: {\n class: 'axm-ppe-item-viewer block w-full',\n },\n})\nexport class AXMPpeItemViewerComponent {\n //#region ----- Inputs -----\n\n readonly items = input<AXMPpeItemViewerDisplayItem[]>([]);\n readonly layout = input<AXMPpeItemViewerLayout>('horizontal');\n readonly selectedIds = input<readonly string[]>([]);\n readonly loading = input(false);\n readonly disabled = input(false);\n readonly readonly = input(false);\n readonly showControl = input(true);\n\n //#endregion\n\n //#region ----- Outputs -----\n\n readonly selectedIdsChange = output<string[]>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly look = computed<AXMPpeItemViewerLook>(() =>\n resolvePpeItemViewerLook(this.layout()),\n );\n\n protected readonly selectedIdSet = computed(() => new Set(this.selectedIds()));\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected isSelected(itemId: string): boolean {\n return this.selectedIdSet().has(itemId);\n }\n\n protected onItemSelectedChange(itemId: string, selected: boolean): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n const next = this.items()\n .map((item) => item.id)\n .filter((id) => (id === itemId ? selected : this.selectedIdSet().has(id)));\n this.selectedIdsChange.emit(next);\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (loading()) {\n <!-- ----- Loading indicator while configured PPE items are fetched ----- -->\n <ax-loading></ax-loading>\n}\n<!-- ----- Empty state when no PPE items are configured ----- -->\n@else if (items().length === 0) {\n <p class=\"axm-ppe-item-viewer__empty\">\n {{ '@workplacesafety-management:ppe-items.components.ppe-item-viewer.empty' | translate | async }}\n </p>\n}\n<!-- ----- PPE items in card grid or checklist list ----- -->\n@else {\n <div\n class=\"axm-ppe-item-viewer__items\"\n [class.axm-ppe-item-viewer__items--card]=\"look() === 'card'\"\n [class.axm-ppe-item-viewer__items--list]=\"look() === 'list'\"\n >\n @for (item of items(); track item.id) {\n <axm-ppe-item-card\n [item]=\"item\"\n [look]=\"look()\"\n [selected]=\"isSelected(item.id)\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [showControl]=\"showControl()\"\n (selectedChange)=\"onItemSelectedChange(item.id, $event)\"\n />\n }\n </div>\n}\n","//#region ----- Imports -----\n\nimport { resolveMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { AXPFileStorageService, isStoredImageFileId, resolveStoredImageDisplayUrl } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\n\nimport { RootConfig, type AXMWorkplaceSafetyManagementPpeItemEntityModel } from '@acorex-platform/module-workplacesafety-management-client/contracts';\n\nimport type { AXMPpeItemViewerDisplayItem } from './ppe-item-viewer.types';\n\n//#endregion\n\n//#region ----- Service -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMPpeItemViewerService {\n //#region ----- Services & Dependencies -----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly fileStorage = inject(AXPFileStorageService, { optional: true });\n\n //#endregion\n\n //#region ----- Public API -----\n\n async loadDisplayItems(ids: string[]): Promise<AXMPpeItemViewerDisplayItem[]> {\n if (ids.length === 0) {\n return [];\n }\n\n const records = await this.queryByIds(ids);\n const byId = new Map(records.map((row) => [row.id, row]));\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n\n return ids\n .map((id) => byId.get(id))\n .filter((row): row is AXMWorkplaceSafetyManagementPpeItemEntityModel => row != null)\n .map((row) => this.toDisplayItem(row, locale));\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private async queryByIds(ids: string[]): Promise<AXMWorkplaceSafetyManagementPpeItemEntityModel[]> {\n const dataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.ppeItem.name)\n .data<string, AXMWorkplaceSafetyManagementPpeItemEntityModel>();\n\n try {\n const result = await dataAccessor.query({\n skip: 0,\n take: Math.max(ids.length, 100),\n filter:\n ids.length === 1\n ? { field: 'id', operator: { type: 'equal' }, value: ids[0] }\n : { field: 'id', operator: { type: 'in' }, value: ids },\n });\n return result?.items ?? [];\n } catch {\n const loaded: AXMWorkplaceSafetyManagementPpeItemEntityModel[] = [];\n for (const id of ids) {\n try {\n const row = await dataAccessor.byKey(id);\n if (row) {\n loaded.push(row);\n }\n } catch {\n /* skip missing rows */\n }\n }\n return loaded;\n }\n }\n\n private toDisplayItem(\n row: AXMWorkplaceSafetyManagementPpeItemEntityModel,\n locale: string,\n ): AXMPpeItemViewerDisplayItem {\n const title = resolveMultiLanguageString(row.title, locale);\n const code = typeof row.code === 'string' ? row.code.trim() : '';\n const serialNumber = typeof row.serialNumber === 'string' ? row.serialNumber.trim() : '';\n return {\n id: row.id,\n title,\n code: code.length > 0 ? code : undefined,\n serialNumber: serialNumber.length > 0 ? serialNumber : undefined,\n imageUrl: this.resolveIconUrl(row.icon),\n };\n }\n\n private resolveIconUrl(icon: string | undefined): string | null {\n const trimmed = icon?.trim();\n if (!trimmed) {\n return null;\n }\n if (this.fileStorage && isStoredImageFileId(trimmed)) {\n const displayUrl = resolveStoredImageDisplayUrl(trimmed, (fileId) =>\n this.fileStorage!.getDownloadUrl(fileId),\n );\n return displayUrl || null;\n }\n return resolveStoredImageDisplayUrl(trimmed, () => '') || null;\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":["i3","i2"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.util-2Kl3_3sg.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.util.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport type {\n AXMPpeItemViewerDisplayItem,\n AXMPpeItemViewerLayout,\n AXMPpeItemViewerLayoutOption,\n AXMPpeItemViewerLook,\n} from './ppe-item-viewer.types';\n\n//#endregion\n\n//#region ----- Lookup id extraction -----\n\nfunction extractLookupId(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const id = (value as { id?: unknown }).id;\n if (typeof id === 'string' && id.trim().length > 0) {\n return id.trim();\n }\n }\n return null;\n}\n\n/**\n * Normalizes widget config or bound answer values to PPE item ids.\n * Lookup multiple may persist `string[]` or `{ id }[]`.\n */\nexport function extractPpeItemIds(value: unknown): string[] {\n if (value == null) {\n return [];\n }\n if (Array.isArray(value)) {\n const ids: string[] = [];\n const seen = new Set<string>();\n for (const entry of value) {\n const id = extractLookupId(entry);\n if (id && !seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n return ids;\n }\n const single = extractLookupId(value);\n return single ? [single] : [];\n}\n\n//#endregion\n\n//#region ----- Layout -----\n\nexport function resolvePpeItemViewerLayout(\n value: AXMPpeItemViewerLayoutOption | string | undefined,\n): AXMPpeItemViewerLayout {\n const raw = typeof value === 'string' ? value : value?.id;\n return raw === 'vertical' ? 'vertical' : 'horizontal';\n}\n\n/** Horizontal layout is a card grid; vertical layout is a checklist-style list. */\nexport function resolvePpeItemViewerLook(\n value: AXMPpeItemViewerLayoutOption | string | undefined,\n): AXMPpeItemViewerLook {\n return resolvePpeItemViewerLayout(value) === 'vertical' ? 'list' : 'card';\n}\n\nexport function ppeItemViewerStandardText(item: AXMPpeItemViewerDisplayItem): string {\n const code = item.code?.trim() ?? '';\n const serial = item.serialNumber?.trim() ?? '';\n if (code && serial && serial !== code) {\n return `${code} · ${serial}`;\n }\n return code || serial;\n}\n\n//#endregion\n"],"names":[],"mappings":"AAAA;AASA;AAEA;AAEA,SAAS,eAAe,CAAC,KAAc,EAAA;AACrC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;AAC5B,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI;IAC5C;AACA,IAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAA,MAAM,EAAE,GAAI,KAA0B,CAAC,EAAE;AACzC,QAAA,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,YAAA,OAAO,EAAE,CAAC,IAAI,EAAE;QAClB;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;AAGG;AACG,SAAU,iBAAiB,CAAC,KAAc,EAAA;AAC9C,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,GAAG,GAAa,EAAE;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzB,YAAA,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACZ,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACd;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AACA,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;IACrC,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;AAC/B;AAEA;AAEA;AAEM,SAAU,0BAA0B,CACxC,KAAwD,EAAA;AAExD,IAAA,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,EAAE,EAAE;IACzD,OAAO,GAAG,KAAK,UAAU,GAAG,UAAU,GAAG,YAAY;AACvD;AAEA;AACM,SAAU,wBAAwB,CACtC,KAAwD,EAAA;AAExD,IAAA,OAAO,0BAA0B,CAAC,KAAK,CAAC,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM;AAC3E;AAEM,SAAU,yBAAyB,CAAC,IAAiC,EAAA;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9C,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE;AACrC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,MAAM,EAAE;IAC9B;IACA,OAAO,IAAI,IAAI,MAAM;AACvB;AAEA
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-ppe-item-viewer.util-2Kl3_3sg.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/ppe-item-viewer/ppe-item-viewer.util.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport type {\n AXMPpeItemViewerDisplayItem,\n AXMPpeItemViewerLayout,\n AXMPpeItemViewerLayoutOption,\n AXMPpeItemViewerLook,\n} from './ppe-item-viewer.types';\n\n//#endregion\n\n//#region ----- Lookup id extraction -----\n\nfunction extractLookupId(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const id = (value as { id?: unknown }).id;\n if (typeof id === 'string' && id.trim().length > 0) {\n return id.trim();\n }\n }\n return null;\n}\n\n/**\n * Normalizes widget config or bound answer values to PPE item ids.\n * Lookup multiple may persist `string[]` or `{ id }[]`.\n */\nexport function extractPpeItemIds(value: unknown): string[] {\n if (value == null) {\n return [];\n }\n if (Array.isArray(value)) {\n const ids: string[] = [];\n const seen = new Set<string>();\n for (const entry of value) {\n const id = extractLookupId(entry);\n if (id && !seen.has(id)) {\n seen.add(id);\n ids.push(id);\n }\n }\n return ids;\n }\n const single = extractLookupId(value);\n return single ? [single] : [];\n}\n\n//#endregion\n\n//#region ----- Layout -----\n\nexport function resolvePpeItemViewerLayout(\n value: AXMPpeItemViewerLayoutOption | string | undefined,\n): AXMPpeItemViewerLayout {\n const raw = typeof value === 'string' ? value : value?.id;\n return raw === 'vertical' ? 'vertical' : 'horizontal';\n}\n\n/** Horizontal layout is a card grid; vertical layout is a checklist-style list. */\nexport function resolvePpeItemViewerLook(\n value: AXMPpeItemViewerLayoutOption | string | undefined,\n): AXMPpeItemViewerLook {\n return resolvePpeItemViewerLayout(value) === 'vertical' ? 'list' : 'card';\n}\n\nexport function ppeItemViewerStandardText(item: AXMPpeItemViewerDisplayItem): string {\n const code = item.code?.trim() ?? '';\n const serial = item.serialNumber?.trim() ?? '';\n if (code && serial && serial !== code) {\n return `${code} · ${serial}`;\n }\n return code || serial;\n}\n\n//#endregion\n"],"names":[],"mappings":"AAAA;AASA;AAEA;AAEA,SAAS,eAAe,CAAC,KAAc,EAAA;AACrC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;AAC5B,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI;IAC5C;AACA,IAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/D,QAAA,MAAM,EAAE,GAAI,KAA0B,CAAC,EAAE;AACzC,QAAA,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,YAAA,OAAO,EAAE,CAAC,IAAI,EAAE;QAClB;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA;;;AAGG;AACG,SAAU,iBAAiB,CAAC,KAAc,EAAA;AAC9C,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;AACA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,GAAG,GAAa,EAAE;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzB,YAAA,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACZ,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACd;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AACA,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;IACrC,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;AAC/B;AAEA;AAEA;AAEM,SAAU,0BAA0B,CACxC,KAAwD,EAAA;AAExD,IAAA,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,EAAE,EAAE;IACzD,OAAO,GAAG,KAAK,UAAU,GAAG,UAAU,GAAG,YAAY;AACvD;AAEA;AACM,SAAU,wBAAwB,CACtC,KAAwD,EAAA;AAExD,IAAA,OAAO,0BAA0B,CAAC,KAAK,CAAC,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM;AAC3E;AAEM,SAAU,yBAAyB,CAAC,IAAiC,EAAA;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9C,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE;AACrC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,MAAM,EAAE;IAC9B;IACA,OAAO,IAAI,IAAI,MAAM;AACvB;AAEA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-preview-control-hierarchy-diagram.command-Dd9xdo_y.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 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 })\n .show();\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":";;;;;;;;;AAAA;AAoBA;AAEA;AAEA;;AAEG;MAEU,uCAAuC,CAAA;AADpD,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAC1D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC;AA0E5D,IAAA;;;IApEC,MAAM,IAAI,CAAC,OAAoD,EAAA;AAC7D,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,wBAAwB,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE,YAAY,CAAC;AACnG,YAAA,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;YACvD,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;YAC9B,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;AACpC,YAAA,gBAAgB,EAAE,IAAI;SACvB;QAED,MAAM,IAAI,CAAC;AACR,aAAA,MAAM;AACN,aAAA,MAAM,CAAC,CAAC,MAAM,KAAI;YACjB;iBACG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC;iBAC/C,OAAO,CAAC,IAAI;iBACZ,cAAc,CAAC,IAAI;iBACnB,UAAU,CAAC,OAAO;AAClB,iBAAA,OAAO,CAAC,CAAC,MAAM,KAAI;AAClB,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACnB,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;oBAC3B,IAAI,CAAC,SAAS,CACZ,+GAA+G,EAC/G,CAAC,KAAK,KAAI;AACR,wBAAA,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAAC;AAC/C,4BAAA,UAAU,EAAE,IAAI;AAChB,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;AACrD,yBAAA,CAAC;AACJ,oBAAA,CAAC,CACF;oBACD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;wBAC3B;6BACG,IAAI,CAAC,kBAAkB;6BACvB,YAAY,CAAC,KAAK;6BAClB,IAAI,CAAC,MAAM;AACX,6BAAA,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,uBAAuB,EAAE;AAC5D,4BAAA,SAAS,EAAE,KAAK;AAChB,4BAAA,SAAS,EAAE,KAAK;AAChB,4BAAA,oBAAoB,EAAE,KAAK;AAC3B,4BAAA,QAAQ,EAAE,gEAAgE;AAC1E,4BAAA,QAAQ,EAAE;AACR,gCAAA;AACE,oCAAA,KAAK,EAAE,kDAAkD;AACzD,oCAAA,MAAM,EAAE,wBAAwB;AACjC,iCAAA;AACD,gCAAA;AACE,oCAAA,KAAK,EAAE,iCAAiC;AACxC,oCAAA,MAAM,EAAE,wBAAwB;AACjC,iCAAA;AACF,6BAAA;AACF,yBAAA,CAAC;AACN,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;IACX;;;AAMQ,IAAA,kBAAkB,CAAC,KAAyB,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,OAAO,CAAC;QAChG,OAAO,QAAQ,IAAI,mBAAmB;IACxC;8GA5EW,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uCAAuC,cAD1B,MAAM,EAAA,CAAA,CAAA;;2FACnB,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBADnD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACFlC;AAEA;MAGa,wCAAwC,CAAA;AADrD,IAAA,WAAA,GAAA;;AAMmB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uCAAuC,CAAC;AA0FjF,IAAA;;;IApFC,MAAM,OAAO,CAAC,KAAoD,EAAA;AAChE,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAC1C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;AAEjE,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC5B,OAAO;AACP,gBAAA,KAAK,EAAE,WAAW;AACnB,aAAA,CAAC;YAEF,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;aAC7B;QACH;AAAE,QAAA,MAAM;YACN,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,6CAA6C,CAAC;AAClG,iBAAA;aACF;QACH;IACF;;;AAMQ,IAAA,cAAc,CAAC,KAAoD,EAAA;AACzE,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI;QAC1B,IAAI,OAAO,EAAE;YACX,OAAO;gBACL,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;gBAC/C,wBAAwB,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE,YAAY,CAAC;AAC3F,gBAAA,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AACtB,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;aAC7B;QACH;QAEA,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAE5C,OAAO;YACL,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YACjF,wBAAwB,EAAE,SAAS,CACjC,GAAG,CAAC,KAAK,EAAE,0BAA0B,CAAC,EACtC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,0BAA0B,CAAC,EAAE,YAAY,CAAC,CAClE;AACD,YAAA,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACnD,YAAA,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SAC7D;IACH;AAEQ,IAAA,MAAM,kBAAkB,CAC9B,KAAoD,EACpD,OAAgC,EAAA;AAEhC,QAAA,MAAM,YAAY,GAChB,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,gCAAgC,CAAC,KAAK,SAAS;QAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,IAAI,IAAI,OAAO;AAEnE,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AACzE,QAAA,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9D,YAAA,OAAO,CAAA,EAAG,YAAY,CAAA,EAAA,EAAK,0BAA0B,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACvF;QAEA,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAC1C,QAAA,IAAI,YAAY,IAAI,IAAI,EAAE;YACxB,MAAM,WAAW,GAAG,2BAA2B,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;AAC5E,YAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,gBAAA,OAAO,CAAA,EAAG,YAAY,CAAA,EAAA,EAAK,WAAW,EAAE;YAC1C;QACF;AAEA,QAAA,MAAM,YAAY,GAChB,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAC3C,8FAA8F,CAC/F,KAAK,mBAAmB;AAE3B,QAAA,OAAO,CAAA,EAAG,YAAY,CAAA,EAAA,EAAK,YAAY,EAAE;IAC3C;8GA7FW,wCAAwC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxC,wCAAwC,EAAA,CAAA,CAAA;;2FAAxC,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBADpD;;;;;"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-preview-control-hierarchy-diagram.command-Dd9xdo_y.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 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 })\n .show();\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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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { resolveEntityRowDisplayText } from '@acorex-platform/framework-client/common';
|
|
2
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
3
|
+
import { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
import { inject, Injectable } from '@angular/core';
|
|
6
|
+
import { get, isString, isEmpty, defaultTo } from 'lodash';
|
|
7
|
+
import { A as AXMSafetyPlanPreviewService } from './acorex-platform-module-workplacesafety-management-client-safety-plan-preview.service-DJP41MuL.mjs';
|
|
8
|
+
import { RootConfig, dedupeSafetyPlanSectionStructure, collectBuiltInRepeatableSectionTypeIds, resolveEntityRefId, normalizeStepTableColumns, isStepTableSectionType, resolveSectionItemEntityName, asSafetyPlanDisplayText } from '@acorex-platform/module-workplacesafety-management-client/contracts';
|
|
9
|
+
import { a as safetyPlanSectionsToBuilderValue, h as hydrateStepTableSectionsWithWorkSteps } from './acorex-platform-module-workplacesafety-management-client-safety-plan-section-builder.types-LaN1NIgc.mjs';
|
|
10
|
+
|
|
11
|
+
//#region ----- Imports -----
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region ----- Constants -----
|
|
14
|
+
const SAFETY_PLAN_SECTION_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.safetyPlanSection.name}`;
|
|
15
|
+
const SAFETY_PLAN_WORK_STEP_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.safetyPlanWorkStep.name}`;
|
|
16
|
+
const SECTION_TYPE_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.sectionType.name}`;
|
|
17
|
+
const WORK_STEP_TYPE_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.workStepType.name}`;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region ----- Public API -----
|
|
20
|
+
/**
|
|
21
|
+
* Loads a safety plan's section structure for the existing preview modal
|
|
22
|
+
* (same shape the sections page feeds into AXMSafetyPlanPreviewService).
|
|
23
|
+
*/
|
|
24
|
+
async function loadSafetyPlanPreviewStructure(entityService, translationService, planId) {
|
|
25
|
+
const repeatableSectionTypeIds = await loadRepeatableSectionTypeIds(entityService);
|
|
26
|
+
const result = await entityService.withEntity(SAFETY_PLAN_SECTION_ENTITY).data().query({
|
|
27
|
+
skip: 0,
|
|
28
|
+
take: 1000,
|
|
29
|
+
filter: {
|
|
30
|
+
logic: 'and',
|
|
31
|
+
filters: [{ field: 'safetyPlanId', operator: { type: 'equal' }, value: planId }],
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const rawLoaded = safetyPlanSectionsToBuilderValue((result.items ?? []));
|
|
35
|
+
const deduped = dedupeSafetyPlanSectionStructure(rawLoaded, { repeatableSectionTypeIds });
|
|
36
|
+
const workStepsResult = await entityService.withEntity(SAFETY_PLAN_WORK_STEP_ENTITY).data().query({
|
|
37
|
+
skip: 0,
|
|
38
|
+
take: 2000,
|
|
39
|
+
filter: {
|
|
40
|
+
logic: 'and',
|
|
41
|
+
filters: [{ field: 'safetyPlanId', operator: { type: 'equal' }, value: planId }],
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
const columnsByWorkStepTypeId = await loadWorkStepTypeColumns(entityService, deduped.sections
|
|
45
|
+
.map((section) => section.workStepTypeId)
|
|
46
|
+
.filter((id) => typeof id === 'string' && id.length > 0));
|
|
47
|
+
return hydrateCatalogItemSnapshots(entityService, translationService, hydrateStepTableSectionsWithWorkSteps(deduped, (workStepsResult.items ?? []), columnsByWorkStepTypeId));
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region ----- Helpers -----
|
|
51
|
+
async function loadRepeatableSectionTypeIds(entityService) {
|
|
52
|
+
const builtIn = collectBuiltInRepeatableSectionTypeIds();
|
|
53
|
+
try {
|
|
54
|
+
const result = await entityService.withEntity(SECTION_TYPE_ENTITY).data().query({
|
|
55
|
+
skip: 0,
|
|
56
|
+
take: 1000,
|
|
57
|
+
});
|
|
58
|
+
const fromQuery = (result.items ?? [])
|
|
59
|
+
.filter((row) => row.isRepeatable === true)
|
|
60
|
+
.map((row) => resolveEntityRefId(row.id))
|
|
61
|
+
.filter((id) => !!id);
|
|
62
|
+
return [...new Set([...fromQuery, ...builtIn])];
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return builtIn;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function loadWorkStepTypeColumns(entityService, workStepTypeIds) {
|
|
69
|
+
const uniqueIds = [...new Set(workStepTypeIds)];
|
|
70
|
+
const columnsById = new Map();
|
|
71
|
+
if (!uniqueIds.length) {
|
|
72
|
+
return columnsById;
|
|
73
|
+
}
|
|
74
|
+
const accessor = entityService.withEntity(WORK_STEP_TYPE_ENTITY);
|
|
75
|
+
await Promise.all(uniqueIds.map(async (id) => {
|
|
76
|
+
try {
|
|
77
|
+
const row = await accessor.data().byKey(id);
|
|
78
|
+
if (!row) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const record = row;
|
|
82
|
+
columnsById.set(id, normalizeStepTableColumns(record.columns));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Leave missing types without columns; hydrate falls back to row snapshots.
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
return columnsById;
|
|
89
|
+
}
|
|
90
|
+
async function hydrateCatalogItemSnapshots(entityService, translationService, value) {
|
|
91
|
+
const locale = translationService.getActiveLang?.() ?? 'en-US';
|
|
92
|
+
const missingByEntity = new Map();
|
|
93
|
+
for (const section of value.sections) {
|
|
94
|
+
if (isStepTableSectionType(section.sectionTypeId, section.sectionType)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const entityName = resolveSectionItemEntityName(section.sectionTypeId, section.sectionType);
|
|
98
|
+
if (!entityName) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
for (const slot of section.items) {
|
|
102
|
+
for (const id of slot.itemIds ?? []) {
|
|
103
|
+
const snapshot = slot.items?.find((entry) => entry.id === id);
|
|
104
|
+
if (asSafetyPlanDisplayText(snapshot?.title) || asSafetyPlanDisplayText(snapshot?.code)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const ids = missingByEntity.get(entityName) ?? new Set();
|
|
108
|
+
ids.add(id);
|
|
109
|
+
missingByEntity.set(entityName, ids);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (missingByEntity.size === 0) {
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
const loadedById = new Map();
|
|
117
|
+
await Promise.all([...missingByEntity.entries()].map(async ([entityName, ids]) => {
|
|
118
|
+
const idList = [...ids];
|
|
119
|
+
try {
|
|
120
|
+
const result = await entityService.withEntity(entityName).data().query({
|
|
121
|
+
skip: 0,
|
|
122
|
+
take: Math.max(idList.length, 1),
|
|
123
|
+
filter: idList.length === 1
|
|
124
|
+
? { field: 'id', operator: { type: 'equal' }, value: idList[0] }
|
|
125
|
+
: { field: 'id', operator: { type: 'in' }, value: idList },
|
|
126
|
+
});
|
|
127
|
+
for (const row of result.items ?? []) {
|
|
128
|
+
const record = row;
|
|
129
|
+
const id = resolveEntityRefId(record['id']);
|
|
130
|
+
if (!id) {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
loadedById.set(id, {
|
|
134
|
+
title: resolveEntityRowDisplayText(record['title'], locale) || undefined,
|
|
135
|
+
code: asSafetyPlanDisplayText(record['code']) || undefined,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
/* skip entities the session cannot read */
|
|
141
|
+
}
|
|
142
|
+
}));
|
|
143
|
+
if (loadedById.size === 0) {
|
|
144
|
+
return value;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
sections: value.sections.map((section) => ({
|
|
148
|
+
...section,
|
|
149
|
+
items: section.items.map((slot) => ({
|
|
150
|
+
...slot,
|
|
151
|
+
items: (slot.itemIds ?? []).map((id, index) => {
|
|
152
|
+
const existing = slot.items?.find((entry) => entry.id === id) ?? slot.items?.[index];
|
|
153
|
+
const loaded = loadedById.get(id);
|
|
154
|
+
return {
|
|
155
|
+
id,
|
|
156
|
+
title: asSafetyPlanDisplayText(existing?.title) || loaded?.title,
|
|
157
|
+
code: asSafetyPlanDisplayText(existing?.code) || loaded?.code,
|
|
158
|
+
};
|
|
159
|
+
}),
|
|
160
|
+
})),
|
|
161
|
+
})),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//#endregion
|
|
165
|
+
|
|
166
|
+
//#region ----- Imports -----
|
|
167
|
+
//#endregion
|
|
168
|
+
//#region ----- Command -----
|
|
169
|
+
class AXMPreviewSafetyPlanCommand {
|
|
170
|
+
constructor() {
|
|
171
|
+
//#region ----- Services & Dependencies -----
|
|
172
|
+
this.entityService = inject(AXPEntityService);
|
|
173
|
+
this.translationService = inject(AXTranslationService);
|
|
174
|
+
this.previewService = inject(AXMSafetyPlanPreviewService);
|
|
175
|
+
}
|
|
176
|
+
//#endregion
|
|
177
|
+
//#region ----- Command Implementation -----
|
|
178
|
+
async execute(input = {}) {
|
|
179
|
+
try {
|
|
180
|
+
const planId = this.resolvePlanId(input);
|
|
181
|
+
if (!planId) {
|
|
182
|
+
return {
|
|
183
|
+
success: false,
|
|
184
|
+
message: {
|
|
185
|
+
text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
const structure = await loadSafetyPlanPreviewStructure(this.entityService, this.translationService, planId);
|
|
190
|
+
const dialogTitle = await this.resolveDialogTitle(input);
|
|
191
|
+
await this.previewService.open({
|
|
192
|
+
title: dialogTitle,
|
|
193
|
+
structure,
|
|
194
|
+
});
|
|
195
|
+
return {
|
|
196
|
+
success: true,
|
|
197
|
+
kind: 'object',
|
|
198
|
+
data: undefined,
|
|
199
|
+
metadata: { refresh: false },
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return {
|
|
204
|
+
success: false,
|
|
205
|
+
message: {
|
|
206
|
+
text: await this.translationService.translateAsync('@general:messages.generic.error.description'),
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//#endregion
|
|
212
|
+
//#region ----- Utility Methods -----
|
|
213
|
+
resolvePlanId(input) {
|
|
214
|
+
const context = input.__context__;
|
|
215
|
+
const candidates = [
|
|
216
|
+
input.id,
|
|
217
|
+
input.options?.id,
|
|
218
|
+
get(input, 'options.id'),
|
|
219
|
+
context?.options?.id,
|
|
220
|
+
context?.data?.id,
|
|
221
|
+
input.data?.['id'],
|
|
222
|
+
];
|
|
223
|
+
for (const candidate of candidates) {
|
|
224
|
+
if (isString(candidate) && !isEmpty(candidate.trim())) {
|
|
225
|
+
return candidate.trim();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
async resolveDialogTitle(input) {
|
|
231
|
+
const previewLabel = (await this.translationService.translateAsync('@general:actions.preview.title')) || 'Preview';
|
|
232
|
+
const locale = this.translationService.getActiveLang?.() ?? 'en-US';
|
|
233
|
+
const explicitTitle = defaultTo(input.title, defaultTo(input.options?.title, defaultTo(get(input, 'options.title'), input.__context__?.options?.title)));
|
|
234
|
+
if (isString(explicitTitle) && explicitTitle.trim().length > 0) {
|
|
235
|
+
return `${previewLabel}: ${resolveMultiLanguageString(explicitTitle, locale).trim()}`;
|
|
236
|
+
}
|
|
237
|
+
const contextTitle = defaultTo(input.data?.['title'], input.__context__?.data?.title);
|
|
238
|
+
if (contextTitle != null) {
|
|
239
|
+
const recordTitle = resolveEntityRowDisplayText(contextTitle, locale).trim();
|
|
240
|
+
if (recordTitle.length > 0) {
|
|
241
|
+
return `${previewLabel}: ${recordTitle}`;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return previewLabel;
|
|
245
|
+
}
|
|
246
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPreviewSafetyPlanCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
247
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPreviewSafetyPlanCommand }); }
|
|
248
|
+
}
|
|
249
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMPreviewSafetyPlanCommand, decorators: [{
|
|
250
|
+
type: Injectable
|
|
251
|
+
}] });
|
|
252
|
+
|
|
253
|
+
export { AXMPreviewSafetyPlanCommand };
|
|
254
|
+
//# sourceMappingURL=acorex-platform-module-workplacesafety-management-client-preview-safety-plan.command-BU95c4xb.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-preview-safety-plan.command-BU95c4xb.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan/commands/load-safety-plan-preview-structure.ts","../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan/commands/preview-safety-plan.command.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { resolveEntityRowDisplayText } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n asSafetyPlanDisplayText,\n collectBuiltInRepeatableSectionTypeIds,\n dedupeSafetyPlanSectionStructure,\n isStepTableSectionType,\n normalizeStepTableColumns,\n resolveEntityRefId,\n resolveSectionItemEntityName,\n RootConfig,\n type AXMSafetyPlanSectionBuilderValue,\n type AXMStepTableColumnDef,\n} from '@acorex-platform/module-workplacesafety-management-client/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport {\n hydrateStepTableSectionsWithWorkSteps,\n safetyPlanSectionsToBuilderValue,\n} from '../../safety-plan-sections-page/safety-plan-section-builder.types';\n\n//#endregion\n\n//#region ----- Constants -----\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 SECTION_TYPE_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.sectionType.name}`;\nconst WORK_STEP_TYPE_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.workStepType.name}`;\n\n//#endregion\n\n//#region ----- Public API -----\n\n/**\n * Loads a safety plan's section structure for the existing preview modal\n * (same shape the sections page feeds into AXMSafetyPlanPreviewService).\n */\nexport async function loadSafetyPlanPreviewStructure(\n entityService: AXPEntityService,\n translationService: AXTranslationService,\n planId: string,\n): Promise<AXMSafetyPlanSectionBuilderValue> {\n const repeatableSectionTypeIds = await loadRepeatableSectionTypeIds(entityService);\n\n const result = await 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 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 loadWorkStepTypeColumns(\n entityService,\n deduped.sections\n .map((section) => section.workStepTypeId)\n .filter((id): id is string => typeof id === 'string' && id.length > 0),\n );\n\n return hydrateCatalogItemSnapshots(\n entityService,\n translationService,\n hydrateStepTableSectionsWithWorkSteps(\n deduped,\n (workStepsResult.items ?? []) as Parameters<typeof hydrateStepTableSectionsWithWorkSteps>[1],\n columnsByWorkStepTypeId,\n ),\n );\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nasync function loadRepeatableSectionTypeIds(entityService: AXPEntityService): Promise<string[]> {\n const builtIn = collectBuiltInRepeatableSectionTypeIds();\n try {\n const result = await 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\nasync function loadWorkStepTypeColumns(\n entityService: AXPEntityService,\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 accessor = entityService.withEntity(WORK_STEP_TYPE_ENTITY);\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\nasync function hydrateCatalogItemSnapshots(\n entityService: AXPEntityService,\n translationService: AXTranslationService,\n value: AXMSafetyPlanSectionBuilderValue,\n): Promise<AXMSafetyPlanSectionBuilderValue> {\n const locale = translationService.getActiveLang?.() ?? 'en-US';\n const missingByEntity = new Map<string, Set<string>>();\n\n for (const section of value.sections) {\n if (isStepTableSectionType(section.sectionTypeId, section.sectionType)) {\n continue;\n }\n const entityName = resolveSectionItemEntityName(section.sectionTypeId, section.sectionType);\n if (!entityName) {\n continue;\n }\n for (const slot of section.items) {\n for (const id of slot.itemIds ?? []) {\n const snapshot = slot.items?.find((entry) => entry.id === id);\n if (asSafetyPlanDisplayText(snapshot?.title) || asSafetyPlanDisplayText(snapshot?.code)) {\n continue;\n }\n const ids = missingByEntity.get(entityName) ?? new Set<string>();\n ids.add(id);\n missingByEntity.set(entityName, ids);\n }\n }\n }\n\n if (missingByEntity.size === 0) {\n return value;\n }\n\n const loadedById = new Map<string, { title?: string; code?: string }>();\n await Promise.all(\n [...missingByEntity.entries()].map(async ([entityName, ids]) => {\n const idList = [...ids];\n try {\n const result = await entityService.withEntity(entityName).data().query({\n skip: 0,\n take: Math.max(idList.length, 1),\n filter:\n idList.length === 1\n ? { field: 'id', operator: { type: 'equal' }, value: idList[0] }\n : { field: 'id', operator: { type: 'in' }, value: idList },\n } as never);\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) {\n continue;\n }\n loadedById.set(id, {\n title: resolveEntityRowDisplayText(record['title'], locale) || undefined,\n code: asSafetyPlanDisplayText(record['code']) || undefined,\n });\n }\n } catch {\n /* skip entities the session cannot read */\n }\n }),\n );\n\n if (loadedById.size === 0) {\n return value;\n }\n\n return {\n sections: value.sections.map((section) => ({\n ...section,\n items: section.items.map((slot) => ({\n ...slot,\n items: (slot.itemIds ?? []).map((id, index) => {\n const existing = slot.items?.find((entry) => entry.id === id) ?? slot.items?.[index];\n const loaded = loadedById.get(id);\n return {\n id,\n title: asSafetyPlanDisplayText(existing?.title) || loaded?.title,\n code: asSafetyPlanDisplayText(existing?.code) || loaded?.code,\n };\n }),\n })),\n })),\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { resolveEntityRowDisplayText } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { defaultTo, get, isEmpty, isString } from 'lodash';\n\nimport { AXMSafetyPlanPreviewService } from '../../safety-plan-preview/safety-plan-preview.service';\nimport { loadSafetyPlanPreviewStructure } from './load-safety-plan-preview-structure';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMPreviewSafetyPlanCommandInput {\n id?: string;\n title?: string;\n data?: Record<string, unknown>;\n options?: Partial<AXMPreviewSafetyPlanCommandInput>;\n __context__?: {\n entity?: string;\n data?: { id?: string; title?: unknown };\n options?: { id?: string; title?: unknown };\n };\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable()\nexport class AXMPreviewSafetyPlanCommand implements AXPCommand<AXMPreviewSafetyPlanCommandInput, void> {\n //#region ----- Services & Dependencies -----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly previewService = inject(AXMSafetyPlanPreviewService);\n\n //#endregion\n\n //#region ----- Command Implementation -----\n\n async execute(input: AXMPreviewSafetyPlanCommandInput = {}): AXPCommandExecuteResultPromise<void> {\n try {\n const planId = this.resolvePlanId(input);\n if (!planId) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const structure = await loadSafetyPlanPreviewStructure(\n this.entityService,\n this.translationService,\n planId,\n );\n const dialogTitle = await this.resolveDialogTitle(input);\n\n await this.previewService.open({\n title: dialogTitle,\n structure,\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 resolvePlanId(input: AXMPreviewSafetyPlanCommandInput): string | undefined {\n const context = input.__context__;\n const candidates = [\n input.id,\n input.options?.id,\n get(input, 'options.id'),\n context?.options?.id,\n context?.data?.id,\n input.data?.['id'],\n ];\n\n for (const candidate of candidates) {\n if (isString(candidate) && !isEmpty(candidate.trim())) {\n return candidate.trim();\n }\n }\n\n return undefined;\n }\n\n private async resolveDialogTitle(input: AXMPreviewSafetyPlanCommandInput): 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(\n input.title,\n defaultTo(input.options?.title, defaultTo(get(input, 'options.title'), input.__context__?.options?.title)),\n );\n if (isString(explicitTitle) && explicitTitle.trim().length > 0) {\n return `${previewLabel}: ${resolveMultiLanguageString(explicitTitle, locale).trim()}`;\n }\n\n const contextTitle = defaultTo(input.data?.['title'], input.__context__?.data?.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 return previewLabel;\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-publish-safety-plan.command-Ci-zcrmO.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan/commands/publish-safety-plan.command.ts"],"sourcesContent":["import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityBroadcastService, AXPHookService } from '@acorex-platform/framework-client/core';\nimport { AXPRuntimeRemoteHookKeys, type AXPRuntimeCommandExecuteHookPayload } from '@acorex-platform/framework-client/runtime';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type { AXPCommand } from '@acorex-platform/framework-shared/runtime';\nimport { AXMWorkplaceSafetyManagementCommandKeys } from '@acorex-platform/module-workplacesafety-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\n//#region ---- Types ----\n\nexport interface AXMPublishSafetyPlanCommandInput {\n id?: string;\n __context__?: {\n entity?: string;\n data?: { id?: string };\n options?: { id?: string };\n };\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction resolveSafetyPlanId(input?: AXMPublishSafetyPlanCommandInput | null): string | undefined {\n if (!input) {\n return undefined;\n }\n\n const context = input.__context__;\n const candidate = context?.options?.id ?? context?.data?.id ?? input.id;\n return typeof candidate === 'string' && candidate.trim() ? candidate.trim() : undefined;\n}\n\nfunction resolveEntitySource(input?: AXMPublishSafetyPlanCommandInput | null): string | undefined {\n return input?.__context__?.entity;\n}\n\nasync function resolveCommandMessage(\n translationService: AXTranslationService,\n message?: AXPRuntimeCommandResult['message'],\n): Promise<string> {\n const text = message?.text;\n if (typeof text === 'string' && text.startsWith('@')) {\n return translationService.translateAsync(text);\n }\n if (typeof text === 'string' && text.trim()) {\n return text;\n }\n return translationService.translateAsync('@general:messages.generic.error.description');\n}\n\n//#endregion\n\n//#region ---- Publish safety plan command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMPublishSafetyPlanCommand\n implements AXPCommand<AXMPublishSafetyPlanCommandInput, void>\n{\n private readonly hooks = inject(AXPHookService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityEvents = inject(AXPEntityBroadcastService);\n\n async execute(input: AXMPublishSafetyPlanCommandInput = {}): Promise<AXPRuntimeCommandResult<void>> {\n const id = resolveSafetyPlanId(input);\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandExecuteHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandExecute,\n {\n name: AXMWorkplaceSafetyManagementCommandKeys.SafetyPlan.Publish,\n input: { id, __context__: input.__context__ },\n },\n );\n\n if (!payload.handled) {\n const content = await this.translationService.translateAsync(\n '@general:messages.generic.error.description',\n );\n await this.showErrorToast(content);\n return { success: false, message: { text: content } };\n }\n\n const result = payload.result;\n if (!result?.success) {\n const content = await resolveCommandMessage(this.translationService, result?.message);\n await this.showErrorToast(content);\n return { success: false, message: { text: content } };\n }\n\n const entity = resolveEntitySource(input);\n if (entity) {\n this.entityEvents.publishLayoutRefresh(entity, { highlightRowId: id });\n }\n\n this.toastService.show({\n color: 'success',\n title: await this.translationService.translateAsync('@general:messages.generic.success.title'),\n content: await this.translationService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.publish.success',\n ),\n closeButton: true,\n timeOut: 5000,\n });\n\n return { success: true, kind: 'object', data: undefined };\n } catch (error: unknown) {\n const content =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.generic.error.description');\n await this.showErrorToast(content);\n return { success: false, message: { text: content } };\n }\n }\n\n private async showErrorToast(content: string): Promise<void> {\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content,\n closeButton: true,\n timeOut: 7000,\n });\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;;;AAoBA;AAEA;AAEA,SAAS,mBAAmB,CAAC,KAA+C,EAAA;IAC1E,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;AACjC,IAAA,MAAM,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,EAAE;IACvE,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS;AACzF;AAEA,SAAS,mBAAmB,CAAC,KAA+C,EAAA;AAC1E,IAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM;AACnC;AAEA,eAAe,qBAAqB,CAClC,kBAAwC,EACxC,OAA4C,EAAA;AAE5C,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI;AAC1B,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACpD,QAAA,OAAO,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC;IAChD;IACA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAC3C,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,kBAAkB,CAAC,cAAc,CAAC,6CAA6C,CAAC;AACzF;AAEA;AAEA;MAGa,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAwElE,IAAA;AAtEC,IAAA,MAAM,OAAO,CAAC,KAAA,GAA0C,EAAE,EAAA;AACxD,QAAA,MAAM,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,EAAE,EAAE;YACP,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,uCAAuC,CAAC;AAC5F,iBAAA;aACF;QACH;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CACvC,wBAAwB,CAAC,cAAc,EACvC;AACE,gBAAA,IAAI,EAAE,uCAAuC,CAAC,UAAU,CAAC,OAAO;gBAChE,KAAK,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;AAC9C,aAAA,CACF;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAC1D,6CAA6C,CAC9C;AACD,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAClC,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACvD;AAEA,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;AAC7B,YAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACpB,gBAAA,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC;AACrF,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAClC,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACvD;AAEA,YAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC;YACzC,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;YACxE;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,yCAAyC,CAAC;gBAC9F,OAAO,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CACnD,mEAAmE,CACpE;AACD,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;AAEF,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3D;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GACX,KAAK,YAAY;kBACb,KAAK,CAAC;kBACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,6CAA6C,CAAC;AACjG,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAClC,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;IAEQ,MAAM,cAAc,CAAC,OAAe,EAAA;AAC1C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,uCAAuC,CAAC;YAC5F,OAAO;AACP,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC;IACJ;8GA7EW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-workplacesafety-management-client-publish-safety-plan.command-Ci-zcrmO.mjs","sources":["../../../../libs/modules/workplacesafety-management/client/src/lib/features/safety-plan/commands/publish-safety-plan.command.ts"],"sourcesContent":["import { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityBroadcastService, AXPHookService } from '@acorex-platform/framework-client/core';\nimport { AXPRuntimeRemoteHookKeys, type AXPRuntimeCommandExecuteHookPayload } from '@acorex-platform/framework-client/runtime';\nimport type { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport type { AXPCommand } from '@acorex-platform/framework-shared/runtime';\nimport { AXMWorkplaceSafetyManagementCommandKeys } from '@acorex-platform/module-workplacesafety-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\n//#region ---- Types ----\n\nexport interface AXMPublishSafetyPlanCommandInput {\n id?: string;\n __context__?: {\n entity?: string;\n data?: { id?: string };\n options?: { id?: string };\n };\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction resolveSafetyPlanId(input?: AXMPublishSafetyPlanCommandInput | null): string | undefined {\n if (!input) {\n return undefined;\n }\n\n const context = input.__context__;\n const candidate = context?.options?.id ?? context?.data?.id ?? input.id;\n return typeof candidate === 'string' && candidate.trim() ? candidate.trim() : undefined;\n}\n\nfunction resolveEntitySource(input?: AXMPublishSafetyPlanCommandInput | null): string | undefined {\n return input?.__context__?.entity;\n}\n\nasync function resolveCommandMessage(\n translationService: AXTranslationService,\n message?: AXPRuntimeCommandResult['message'],\n): Promise<string> {\n const text = message?.text;\n if (typeof text === 'string' && text.startsWith('@')) {\n return translationService.translateAsync(text);\n }\n if (typeof text === 'string' && text.trim()) {\n return text;\n }\n return translationService.translateAsync('@general:messages.generic.error.description');\n}\n\n//#endregion\n\n//#region ---- Publish safety plan command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMPublishSafetyPlanCommand\n implements AXPCommand<AXMPublishSafetyPlanCommandInput, void>\n{\n private readonly hooks = inject(AXPHookService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityEvents = inject(AXPEntityBroadcastService);\n\n async execute(input: AXMPublishSafetyPlanCommandInput = {}): Promise<AXPRuntimeCommandResult<void>> {\n const id = resolveSafetyPlanId(input);\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const payload = await this.hooks.runAsync<AXPRuntimeCommandExecuteHookPayload>(\n AXPRuntimeRemoteHookKeys.CommandExecute,\n {\n name: AXMWorkplaceSafetyManagementCommandKeys.SafetyPlan.Publish,\n input: { id, __context__: input.__context__ },\n },\n );\n\n if (!payload.handled) {\n const content = await this.translationService.translateAsync(\n '@general:messages.generic.error.description',\n );\n await this.showErrorToast(content);\n return { success: false, message: { text: content } };\n }\n\n const result = payload.result;\n if (!result?.success) {\n const content = await resolveCommandMessage(this.translationService, result?.message);\n await this.showErrorToast(content);\n return { success: false, message: { text: content } };\n }\n\n const entity = resolveEntitySource(input);\n if (entity) {\n this.entityEvents.publishLayoutRefresh(entity, { highlightRowId: id });\n }\n\n this.toastService.show({\n color: 'success',\n title: await this.translationService.translateAsync('@general:messages.generic.success.title'),\n content: await this.translationService.translateAsync(\n '@workplacesafety-management:safety-plans.messages.publish.success',\n ),\n closeButton: true,\n timeOut: 5000,\n });\n\n return { success: true, kind: 'object', data: undefined };\n } catch (error: unknown) {\n const content =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.generic.error.description');\n await this.showErrorToast(content);\n return { success: false, message: { text: content } };\n }\n }\n\n private async showErrorToast(content: string): Promise<void> {\n this.toastService.show({\n color: 'danger',\n title: await this.translationService.translateAsync('@general:messages.generic.error.title'),\n content,\n closeButton: true,\n timeOut: 7000,\n });\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|