@acorex/modules 21.0.0-next.40 → 21.0.0-next.41
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-modules-ai-management-acorex-modules-ai-management-Bqfx8OTv.mjs → acorex-modules-ai-management-acorex-modules-ai-management-D7_4LOGV.mjs} +3486 -1149
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-D7_4LOGV.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-DyczMN-R.mjs → acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C7TQMwX4.mjs} +4 -3
- package/fesm2022/acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C7TQMwX4.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-agent.entity-CpSXisAh.mjs → acorex-modules-ai-management-agent.entity-DwPIKib2.mjs} +20 -17
- package/fesm2022/acorex-modules-ai-management-agent.entity-DwPIKib2.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CYk2rB36.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D2GJ5qD1.mjs} +28 -6
- package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D2GJ5qD1.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BDcW8BRI.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BozVAuLO.mjs} +6 -9
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BozVAuLO.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist.entity-7uTePpME.mjs → acorex-modules-ai-management-assist.entity-CuToMDS_.mjs} +10 -11
- package/fesm2022/acorex-modules-ai-management-assist.entity-CuToMDS_.mjs.map +1 -0
- package/fesm2022/acorex-modules-ai-management-index-DaGJVOFw.mjs +2 -0
- package/fesm2022/{acorex-modules-ai-management-index-DUojDUau.mjs.map → acorex-modules-ai-management-index-DaGJVOFw.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-model.entity-C9J3trsK.mjs → acorex-modules-ai-management-model.entity-vUNlioDw.mjs} +20 -17
- package/fesm2022/acorex-modules-ai-management-model.entity-vUNlioDw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-kHsxkjEd.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-BpxRR5ir.mjs} +28 -9
- package/fesm2022/acorex-modules-ai-management-open-ai-endpoint.entity-BpxRR5ir.mjs.map +1 -0
- package/fesm2022/acorex-modules-ai-management.mjs +1 -1
- package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BRap9yt6.mjs → acorex-modules-asset-management-acorex-modules-asset-management-DrIhRaZ6.mjs} +84 -99
- package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-DrIhRaZ6.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-rental-history.entity-B_QZI3Cy.mjs → acorex-modules-asset-management-asset-rental-history.entity-95NBXoex.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-rental-history.entity-B_QZI3Cy.mjs.map → acorex-modules-asset-management-asset-rental-history.entity-95NBXoex.mjs.map} +1 -1
- package/fesm2022/acorex-modules-asset-management-asset-state-history.entity-C-z103la.mjs +258 -0
- package/fesm2022/acorex-modules-asset-management-asset-state-history.entity-C-z103la.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-status.rules-BL0Osjqv.mjs → acorex-modules-asset-management-asset-status.rules-B7KwWQEe.mjs} +2 -2
- package/fesm2022/acorex-modules-asset-management-asset-status.rules-B7KwWQEe.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-BRz8vItS.mjs → acorex-modules-asset-management-asset-system-assignment.entity-HqZtfJpe.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-BRz8vItS.mjs.map → acorex-modules-asset-management-asset-system-assignment.entity-HqZtfJpe.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-b_o5UnuE.mjs → acorex-modules-asset-management-asset-system-type.entity-fvrbyjXb.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-b_o5UnuE.mjs.map → acorex-modules-asset-management-asset-system-type.entity-fvrbyjXb.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-system.entity-C6ak4u9z.mjs → acorex-modules-asset-management-asset-system.entity-DVAaXNWx.mjs} +13 -3
- package/fesm2022/acorex-modules-asset-management-asset-system.entity-DVAaXNWx.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-BQjGo1s1.mjs → acorex-modules-asset-management-asset-type-section-component.entity-n-bxBcGz.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-BQjGo1s1.mjs.map → acorex-modules-asset-management-asset-type-section-component.entity-n-bxBcGz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-C1DJZZFy.mjs → acorex-modules-asset-management-asset-type-section.entity-BF7N699p.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-C1DJZZFy.mjs.map → acorex-modules-asset-management-asset-type-section.entity-BF7N699p.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset-type.entity-CtOnArR9.mjs → acorex-modules-asset-management-asset-type.entity-Dt61Rs4F.mjs} +2 -2
- package/fesm2022/{acorex-modules-asset-management-asset-type.entity-CtOnArR9.mjs.map → acorex-modules-asset-management-asset-type.entity-Dt61Rs4F.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-asset-management-asset.entity-BaET-kSd.mjs → acorex-modules-asset-management-asset.entity-BzlsaEwC.mjs} +35 -10
- package/fesm2022/acorex-modules-asset-management-asset.entity-BzlsaEwC.mjs.map +1 -0
- package/fesm2022/{acorex-modules-asset-management-assetLifecycleState.provider-DZ5r2zx7.mjs → acorex-modules-asset-management-assetLifecycle-state.provider-DZ5r2zx7.mjs} +1 -1
- package/fesm2022/acorex-modules-asset-management-assetLifecycle-state.provider-DZ5r2zx7.mjs.map +1 -0
- package/fesm2022/acorex-modules-asset-management.mjs +1 -1
- package/fesm2022/acorex-modules-common.mjs +33 -3
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +270 -206
- package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
- package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-yqfev--M.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLndkp6w.mjs} +23 -39
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLndkp6w.mjs.map +1 -0
- package/fesm2022/{acorex-modules-dashboard-management-index-CYnWQ2od.mjs → acorex-modules-dashboard-management-index-c8QzHHtG.mjs} +2 -2
- package/fesm2022/{acorex-modules-dashboard-management-index-CYnWQ2od.mjs.map → acorex-modules-dashboard-management-index-c8QzHHtG.mjs.map} +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +114 -22
- package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-Ck9q-IWW.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bgsi3FHG.mjs} +21 -19
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bgsi3FHG.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-qYSPyG_q.mjs → acorex-modules-human-capital-management-approve-leave-request.command-CxpTmb-1.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-qYSPyG_q.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-CxpTmb-1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-Da3u1fo5.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-jLGe49dJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-Da3u1fo5.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-jLGe49dJ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DstI60jo.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-ChNGu90e.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DstI60jo.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-ChNGu90e.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-DjMQm3VC.mjs → acorex-modules-human-capital-management-employee.entity-4k7F7_ON.mjs} +18 -16
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-4k7F7_ON.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-v8WzEHiE.mjs → acorex-modules-human-capital-management-employment-type.entity-Jo2fB9R3.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-v8WzEHiE.mjs.map → acorex-modules-human-capital-management-employment-type.entity-Jo2fB9R3.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-B9Bf-Nnm.mjs → acorex-modules-human-capital-management-leave-request.entity-DhLUXnJu.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-B9Bf-Nnm.mjs.map → acorex-modules-human-capital-management-leave-request.entity-DhLUXnJu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-Bpfd_hNb.mjs → acorex-modules-human-capital-management-leave-type.entity-C-lN2bb0.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-Bpfd_hNb.mjs.map → acorex-modules-human-capital-management-leave-type.entity-C-lN2bb0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-f0IDrLSn.mjs → acorex-modules-human-capital-management-position-assignment.entity-BD1jN4Mx.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-f0IDrLSn.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-BD1jN4Mx.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-DxNsroYI.mjs → acorex-modules-human-capital-management-reject-leave-request.command-D0G6UrqI.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-DxNsroYI.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-D0G6UrqI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-C3J9pcfh.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-CYzqQXja.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-C3J9pcfh.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-CYzqQXja.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-acorex-modules-maintenance-management-CfHMiVos.mjs → acorex-modules-maintenance-management-acorex-modules-maintenance-management-B5wf4zMI.mjs} +400 -147
- package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-B5wf4zMI.mjs.map +1 -0
- package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DKbARwJh.mjs → acorex-modules-maintenance-management-failure-effect.entity-Cv5KnboB.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DKbARwJh.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-Cv5KnboB.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-Br0lvFfu.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-BBL3-hfv.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-Br0lvFfu.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-BBL3-hfv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-Dydg4AJ7.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-nxOdHZxu.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-Dydg4AJ7.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-nxOdHZxu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-DHiVJHFj.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-ApD80Scc.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-DHiVJHFj.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-ApD80Scc.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-CZfm0U8u.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-CibfwJLG.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-CZfm0U8u.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-CibfwJLG.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DbCAFveJ.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-DpoqULBf.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DbCAFveJ.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-DpoqULBf.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-D83Yo6dT.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-0-J2Hkmn.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-D83Yo6dT.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-0-J2Hkmn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-zKGo9bOs.mjs → acorex-modules-maintenance-management-failure-register.entity-C4Az4Rr9.mjs} +23 -53
- package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-C4Az4Rr9.mjs.map +1 -0
- package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-Cnvdmt0N.mjs → acorex-modules-maintenance-management-failure-severity.entity-BZo6UUun.mjs} +2 -2
- package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-Cnvdmt0N.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-BZo6UUun.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-CzX0phT-.mjs → acorex-modules-maintenance-management-maintenance-template.entity-DxYY0hpG.mjs} +14 -11
- package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-DxYY0hpG.mjs.map +1 -0
- package/fesm2022/acorex-modules-maintenance-management-work-order-list-command-DTKNtyBF.mjs +54 -0
- package/fesm2022/acorex-modules-maintenance-management-work-order-list-command-DTKNtyBF.mjs.map +1 -0
- package/fesm2022/acorex-modules-maintenance-management.mjs +1 -1
- package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-CnAHfj2t.mjs → acorex-modules-organization-management-acorex-modules-organization-management-Bu8fRj_5.mjs} +48 -22
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-Bu8fRj_5.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management-add-position-to-business-unit.command-Qej_boIY.mjs +109 -0
- package/fesm2022/acorex-modules-organization-management-add-position-to-business-unit.command-Qej_boIY.mjs.map +1 -0
- package/fesm2022/{acorex-modules-organization-management-business-unit.entity-Dpf7-aeM.mjs → acorex-modules-organization-management-business-unit.entity-BfQ_7JAq.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-business-unit.entity-Dpf7-aeM.mjs.map → acorex-modules-organization-management-business-unit.entity-BfQ_7JAq.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-chart.entity-CQX81AiE.mjs → acorex-modules-organization-management-chart.entity-CNQGGfHV.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-chart.entity-CQX81AiE.mjs.map → acorex-modules-organization-management-chart.entity-CNQGGfHV.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-company.entity-D-RWQ_8O.mjs → acorex-modules-organization-management-company.entity-D_nTKLzu.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-company.entity-D-RWQ_8O.mjs.map → acorex-modules-organization-management-company.entity-D_nTKLzu.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-entity.provider-BdaKwTZq.mjs → acorex-modules-organization-management-entity.provider-B4uYixLQ.mjs} +15 -15
- package/fesm2022/{acorex-modules-organization-management-entity.provider-BdaKwTZq.mjs.map → acorex-modules-organization-management-entity.provider-B4uYixLQ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-EzMuHJ2K.mjs → acorex-modules-organization-management-feature-definition.provider-COjc6knz.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-EzMuHJ2K.mjs.map → acorex-modules-organization-management-feature-definition.provider-COjc6knz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-C8_Ab3Q7.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-gDpII9TZ.mjs} +3 -3
- package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-C8_Ab3Q7.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-gDpII9TZ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-DHUlvoOO.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-CjXV4wrM.mjs} +3 -3
- package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-DHUlvoOO.mjs.map → acorex-modules-organization-management-job-definition-responsibilities-page.component-CjXV4wrM.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-BpVESnnH.mjs → acorex-modules-organization-management-job-definition-skills-page.component-2XBgMms-.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-BpVESnnH.mjs.map → acorex-modules-organization-management-job-definition-skills-page.component-2XBgMms-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition.entity-H8VAbZ_r.mjs → acorex-modules-organization-management-job-definition.entity-f0JnkdjP.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-definition.entity-H8VAbZ_r.mjs.map → acorex-modules-organization-management-job-definition.entity-f0JnkdjP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-level.datasource-Dxfq0cGw.mjs → acorex-modules-organization-management-job-level.datasource-ByHluGvc.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-level.datasource-Dxfq0cGw.mjs.map → acorex-modules-organization-management-job-level.datasource-ByHluGvc.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-level.entity-Bdja794J.mjs → acorex-modules-organization-management-job-level.entity-BJJJQxCp.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-level.entity-Bdja794J.mjs.map → acorex-modules-organization-management-job-level.entity-BJJJQxCp.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-menu.provider-DnvNM-pk.mjs → acorex-modules-organization-management-menu.provider-Dd_Z58sY.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-menu.provider-DnvNM-pk.mjs.map → acorex-modules-organization-management-menu.provider-Dd_Z58sY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-COkMtxFO.mjs → acorex-modules-organization-management-org-chart.page-fudrNddI.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-COkMtxFO.mjs.map → acorex-modules-organization-management-org-chart.page-fudrNddI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BDLIuqxU.mjs → acorex-modules-organization-management-permission-definition.provider-CoB_RGSa.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BDLIuqxU.mjs.map → acorex-modules-organization-management-permission-definition.provider-CoB_RGSa.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-position.entity-BpbzqtEY.mjs → acorex-modules-organization-management-position.entity-T1DY1fZn.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-position.entity-BpbzqtEY.mjs.map → acorex-modules-organization-management-position.entity-T1DY1fZn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CGkXAtH2.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CIPzMi3d.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CGkXAtH2.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CIPzMi3d.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-Dw-tX5XI.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DzdTNVP6.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-Dw-tX5XI.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DzdTNVP6.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-D_ClGAIJ.mjs → acorex-modules-organization-management-responsibilities-matrix.component-C850Dz47.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-D_ClGAIJ.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-C850Dz47.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CzkogsDv.mjs → acorex-modules-organization-management-responsibility-level.entity-CVxWva5x.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CzkogsDv.mjs.map → acorex-modules-organization-management-responsibility-level.entity-CVxWva5x.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-DfKM6HV7.mjs → acorex-modules-organization-management-responsibility.entity-BmDZhqNl.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibility.entity-DfKM6HV7.mjs.map → acorex-modules-organization-management-responsibility.entity-BmDZhqNl.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-settings.provider-DaeJkP0y.mjs → acorex-modules-organization-management-settings.provider-wwGKyBrV.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-settings.provider-DaeJkP0y.mjs.map → acorex-modules-organization-management-settings.provider-wwGKyBrV.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-Cm9qcAG7.mjs → acorex-modules-organization-management-team-business-unit.entity-BmXLb4RI.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-Cm9qcAG7.mjs.map → acorex-modules-organization-management-team-business-unit.entity-BmXLb4RI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-B3xgLE6N.mjs → acorex-modules-organization-management-team-member-role.entity-C4DGSm2r.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-B3xgLE6N.mjs.map → acorex-modules-organization-management-team-member-role.entity-C4DGSm2r.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team-member.entity-Dk9t9S1r.mjs → acorex-modules-organization-management-team-member.entity-CvVHEzIU.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-team-member.entity-Dk9t9S1r.mjs.map → acorex-modules-organization-management-team-member.entity-CvVHEzIU.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-team.entity-BbcFYP20.mjs → acorex-modules-organization-management-team.entity-urjULfNp.mjs} +6 -9
- package/fesm2022/acorex-modules-organization-management-team.entity-urjULfNp.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-Dl-3IE-C.mjs → acorex-modules-platform-management-acorex-modules-platform-management-CZMqG3Eq.mjs} +10 -2
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-Dl-3IE-C.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-CZMqG3Eq.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management-list-registered-data-sources.query-DdDvT0uh.mjs +81 -0
- package/fesm2022/acorex-modules-platform-management-list-registered-data-sources.query-DdDvT0uh.mjs.map +1 -0
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-Brwqsawl.mjs → acorex-modules-platform-management-menu-list.component-BRA7Q50z.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-Brwqsawl.mjs.map → acorex-modules-platform-management-menu-list.component-BRA7Q50z.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/{acorex-modules-product-catalog-product.entity-aVWXuhlQ.mjs → acorex-modules-product-catalog-product.entity-BbB7GAg7.mjs} +3 -2
- package/fesm2022/acorex-modules-product-catalog-product.entity-BbB7GAg7.mjs.map +1 -0
- package/fesm2022/acorex-modules-product-catalog.mjs +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +231 -137
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-supplier-management.mjs +1 -0
- package/fesm2022/acorex-modules-supplier-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-it-Lf0L_.mjs +6066 -0
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-it-Lf0L_.mjs.map +1 -0
- package/fesm2022/{acorex-modules-task-management-task-board.page-DA2563QE.mjs → acorex-modules-task-management-task-board.page-DF4XWz_0.mjs} +260 -87
- package/fesm2022/acorex-modules-task-management-task-board.page-DF4XWz_0.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +1 -5860
- package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-tenant-management.mjs +6 -15
- package/fesm2022/acorex-modules-tenant-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-Dj6LkQeZ.mjs} +5 -5
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs.map → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-Dj6LkQeZ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-index-C9Qc07oK.mjs → acorex-modules-workflow-management-index-CHySddpP.mjs} +2 -64
- package/fesm2022/acorex-modules-workflow-management-index-CHySddpP.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-index-Bx2uYraH.mjs → acorex-modules-workflow-management-index-Eh5DDK-V.mjs} +3 -3
- package/fesm2022/{acorex-modules-workflow-management-index-Bx2uYraH.mjs.map → acorex-modules-workflow-management-index-Eh5DDK-V.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-index-D8fjNgQJ.mjs → acorex-modules-workflow-management-index-V4OesZTq.mjs} +6 -6
- package/fesm2022/{acorex-modules-workflow-management-index-D8fjNgQJ.mjs.map → acorex-modules-workflow-management-index-V4OesZTq.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs → acorex-modules-workflow-management-workflow-definition.entity-CjQQpjdB.mjs} +1 -16
- package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs.map → acorex-modules-workflow-management-workflow-definition.entity-CjQQpjdB.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-D-KnWlsU.mjs → acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs} +30 -20
- package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs → acorex-modules-workflow-management-workflow-task-popover.component-l37iXJIY.mjs} +19 -15
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-l37iXJIY.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +31 -2383
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-ai-management.d.ts +544 -67
- package/types/acorex-modules-asset-management.d.ts +51 -14
- package/types/acorex-modules-common.d.ts +24 -3
- package/types/acorex-modules-dashboard-management.d.ts +23 -12
- package/types/acorex-modules-document-management.d.ts +18 -2
- package/types/acorex-modules-human-capital-management.d.ts +1 -1
- package/types/acorex-modules-maintenance-management.d.ts +4 -7
- package/types/acorex-modules-reservation-management.d.ts +6 -5
- package/types/acorex-modules-task-management.d.ts +34 -5
- package/types/acorex-modules-workflow-management.d.ts +16 -549
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-Bqfx8OTv.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-DyczMN-R.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-agent.entity-CpSXisAh.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CYk2rB36.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BDcW8BRI.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-assist.entity-7uTePpME.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-index-DUojDUau.mjs +0 -2
- package/fesm2022/acorex-modules-ai-management-model.entity-C9J3trsK.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-open-ai-endpoint.entity-kHsxkjEd.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-BRap9yt6.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-status.rules-BL0Osjqv.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset-system.entity-C6ak4u9z.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-asset.entity-BaET-kSd.mjs.map +0 -1
- package/fesm2022/acorex-modules-asset-management-assetLifecycleState.provider-DZ5r2zx7.mjs.map +0 -1
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-yqfev--M.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Ck9q-IWW.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-DjMQm3VC.mjs.map +0 -1
- package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-CfHMiVos.mjs.map +0 -1
- package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-zKGo9bOs.mjs.map +0 -1
- package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-CzX0phT-.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-CnAHfj2t.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-team.entity-BbcFYP20.mjs.map +0 -1
- package/fesm2022/acorex-modules-product-catalog-product.entity-aVWXuhlQ.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-DA2563QE.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-index-C9Qc07oK.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-D-KnWlsU.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs.map +0 -1
|
@@ -26,7 +26,7 @@ import { AXSelectionListModule } from '@acorex/components/selection-list';
|
|
|
26
26
|
import { AXCalendarService } from '@acorex/core/date-time';
|
|
27
27
|
import { AXLocaleService } from '@acorex/core/locale';
|
|
28
28
|
import * as i6 from '@acorex/core/translation';
|
|
29
|
-
import { AXTranslatorPipe, AXTranslationModule } from '@acorex/core/translation';
|
|
29
|
+
import { AXTranslatorPipe, AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
|
|
30
30
|
import { AXUnsubscriber } from '@acorex/core/utils';
|
|
31
31
|
import { AXPPlatformScope, AXPDeviceService } from '@acorex/platform/core';
|
|
32
32
|
import { AXPStateMessageComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutHeaderComponent } from '@acorex/platform/layout/components';
|
|
@@ -34,38 +34,27 @@ import { AXPPageLayoutBaseComponent, AXPPageLayoutComponent, AXPPageLayoutBase }
|
|
|
34
34
|
import * as i1$1 from '@angular/common';
|
|
35
35
|
import { AsyncPipe, CommonModule } from '@angular/common';
|
|
36
36
|
import * as i0 from '@angular/core';
|
|
37
|
-
import { computed, inject, signal, effect, ViewEncapsulation, ChangeDetectionStrategy, Component, input, output, viewChild, untracked, afterNextRender, model, viewChildren } from '@angular/core';
|
|
37
|
+
import { computed, inject, signal, effect, ViewEncapsulation, ChangeDetectionStrategy, Component, input, output, DestroyRef, viewChild, untracked, afterNextRender, model, viewChildren } from '@angular/core';
|
|
38
38
|
import * as i1$3 from '@angular/forms';
|
|
39
39
|
import { FormsModule } from '@angular/forms';
|
|
40
40
|
import { Router, ActivatedRoute, NavigationEnd, RouterModule } from '@angular/router';
|
|
41
41
|
import { filter, startWith } from 'rxjs';
|
|
42
|
-
import { AXPTaskBoardService, RootConfig } from './acorex-modules-task-management.mjs';
|
|
42
|
+
import { A as AXM_TASK_BOARD_ALL_VIEW_MODE_IDS, a as AXMTaskBoardSettings, n as normalizeVisibleTaskBoardModesByParts, b as AXPTaskBoardService, R as RootConfig } from './acorex-modules-task-management-acorex-modules-task-management-it-Lf0L_.mjs';
|
|
43
43
|
import { AXFormatPipe } from '@acorex/core/format';
|
|
44
44
|
import * as i1 from '@acorex/platform/layout/widget-core';
|
|
45
45
|
import { AXPWidgetCoreModule, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';
|
|
46
|
+
import { AXPSessionService } from '@acorex/platform/auth';
|
|
46
47
|
import { AXPSettingsService } from '@acorex/platform/common';
|
|
47
48
|
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
|
48
49
|
import { isEqual, sortBy } from 'lodash-es';
|
|
49
50
|
import { AXSchedulerService, AXSchedulerComponent } from '@acorex/components/scheduler';
|
|
50
51
|
import { AXPCommandService } from '@acorex/platform/runtime';
|
|
52
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
51
53
|
import { AXDataSource } from '@acorex/cdk/common';
|
|
52
54
|
import * as i1$2 from '@acorex/components/data-table';
|
|
53
55
|
import { AXDataTableModule } from '@acorex/components/data-table';
|
|
54
56
|
import { AXKanbanComponent } from '@acorex/components/kanban';
|
|
55
57
|
|
|
56
|
-
var AXMTaskBoardSettings;
|
|
57
|
-
(function (AXMTaskBoardSettings) {
|
|
58
|
-
AXMTaskBoardSettings["ViewMode"] = "taskboard.viewMode";
|
|
59
|
-
AXMTaskBoardSettings["DetailPanel"] = "taskboard.DetailPanel";
|
|
60
|
-
AXMTaskBoardSettings["DaysCount"] = "taskboard.calendar.daysCount";
|
|
61
|
-
AXMTaskBoardSettings["CurrentDate"] = "taskboard.calendar.currentDate";
|
|
62
|
-
AXMTaskBoardSettings["SelectedPriorities"] = "taskboard.filter.selectedPriorities";
|
|
63
|
-
AXMTaskBoardSettings["SelectedAssigneeIds"] = "taskboard.filter.selectedAssigneeIds";
|
|
64
|
-
AXMTaskBoardSettings["SelectedReporterIds"] = "taskboard.filter.selectedReporterIds";
|
|
65
|
-
AXMTaskBoardSettings["SelectedTaskTypeNames"] = "taskboard.filter.selectedTaskTypeNames";
|
|
66
|
-
AXMTaskBoardSettings["SelectedCalendarEventTypeIds"] = "taskboard.filter.selectedCalendarEventTypeIds";
|
|
67
|
-
})(AXMTaskBoardSettings || (AXMTaskBoardSettings = {}));
|
|
68
|
-
|
|
69
58
|
const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
|
|
70
59
|
daysCount: 7,
|
|
71
60
|
taskTypes: [],
|
|
@@ -75,6 +64,7 @@ const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() =
|
|
|
75
64
|
rangeStartDate: null,
|
|
76
65
|
currentDate: new Date(),
|
|
77
66
|
currentViewMode: 'month',
|
|
67
|
+
visibleViewModes: [...AXM_TASK_BOARD_ALL_VIEW_MODE_IDS],
|
|
78
68
|
selectedTaskTypeNames: [],
|
|
79
69
|
selectedAssigneeIds: [],
|
|
80
70
|
selectedPriorities: [],
|
|
@@ -117,7 +107,7 @@ const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() =
|
|
|
117
107
|
}
|
|
118
108
|
return count;
|
|
119
109
|
}),
|
|
120
|
-
})), withMethods((store, settingsService = inject(AXPSettingsService), taskBoardService = inject(AXPTaskBoardService)) => {
|
|
110
|
+
})), withMethods((store, settingsService = inject(AXPSettingsService), taskBoardService = inject(AXPTaskBoardService), sessionService = inject(AXPSessionService)) => {
|
|
121
111
|
const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);
|
|
122
112
|
return {
|
|
123
113
|
async initialize() {
|
|
@@ -125,17 +115,27 @@ const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() =
|
|
|
125
115
|
try {
|
|
126
116
|
const taskTypes = await taskBoardService.getTaskTypes();
|
|
127
117
|
patchState(store, { taskTypes });
|
|
128
|
-
const [savedDaysCount, savedDateString, savedDetailPanel, savedViewMode, savedTaskTypeNames, savedAssigneeIds, savedReporterIds, savedPriorities, savedCalendarEventTypeIds,] = await Promise.all([
|
|
118
|
+
const [savedDaysCount, savedDateString, savedDetailPanel, savedViewMode, savedVisibleCalendarModes, savedVisibleTimelineModes, savedVisibleTableModes, savedVisibleKanbanModes, savedTaskTypeNames, savedAssigneeIds, savedReporterIds, savedPriorities, savedCalendarEventTypeIds,] = await Promise.all([
|
|
129
119
|
userScopedSettings().get(AXMTaskBoardSettings.DaysCount),
|
|
130
120
|
userScopedSettings().get(AXMTaskBoardSettings.CurrentDate),
|
|
131
121
|
userScopedSettings().get(AXMTaskBoardSettings.DetailPanel),
|
|
132
122
|
userScopedSettings().get(AXMTaskBoardSettings.ViewMode),
|
|
123
|
+
userScopedSettings().get(AXMTaskBoardSettings.VisibleCalendarModes),
|
|
124
|
+
userScopedSettings().get(AXMTaskBoardSettings.VisibleTimelineModes),
|
|
125
|
+
userScopedSettings().get(AXMTaskBoardSettings.VisibleTableModes),
|
|
126
|
+
userScopedSettings().get(AXMTaskBoardSettings.VisibleKanbanModes),
|
|
133
127
|
userScopedSettings().get(AXMTaskBoardSettings.SelectedTaskTypeNames),
|
|
134
128
|
userScopedSettings().get(AXMTaskBoardSettings.SelectedAssigneeIds),
|
|
135
129
|
userScopedSettings().get(AXMTaskBoardSettings.SelectedReporterIds),
|
|
136
130
|
userScopedSettings().get(AXMTaskBoardSettings.SelectedPriorities),
|
|
137
131
|
userScopedSettings().get(AXMTaskBoardSettings.SelectedCalendarEventTypeIds),
|
|
138
132
|
]);
|
|
133
|
+
const visibleViewModes = normalizeVisibleTaskBoardModesByParts({
|
|
134
|
+
calendar: savedVisibleCalendarModes,
|
|
135
|
+
timeline: savedVisibleTimelineModes,
|
|
136
|
+
table: savedVisibleTableModes,
|
|
137
|
+
kanban: savedVisibleKanbanModes,
|
|
138
|
+
});
|
|
139
139
|
// Ensure currentDate is always a valid Date
|
|
140
140
|
let currentDate;
|
|
141
141
|
if (savedDateString) {
|
|
@@ -145,13 +145,25 @@ const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() =
|
|
|
145
145
|
else {
|
|
146
146
|
currentDate = new Date();
|
|
147
147
|
}
|
|
148
|
+
const currentUserId = sessionService.user?.id;
|
|
149
|
+
const defaultAssigneeIds = savedAssigneeIds === undefined && currentUserId != null ? [currentUserId] : (savedAssigneeIds ?? []);
|
|
150
|
+
let effectiveViewMode = savedViewMode || 'month';
|
|
151
|
+
if (!visibleViewModes.includes(effectiveViewMode)) {
|
|
152
|
+
effectiveViewMode = visibleViewModes[0] ?? 'month';
|
|
153
|
+
}
|
|
154
|
+
if (savedViewMode != null && !visibleViewModes.includes(savedViewMode)) {
|
|
155
|
+
userScopedSettings()
|
|
156
|
+
.set(AXMTaskBoardSettings.ViewMode, effectiveViewMode)
|
|
157
|
+
.catch((error) => console.error('Error aligning task board view mode with visible views:', error));
|
|
158
|
+
}
|
|
148
159
|
patchState(store, {
|
|
149
160
|
daysCount: savedDaysCount || 7,
|
|
150
161
|
detailPanel: savedDetailPanel || false,
|
|
151
|
-
currentViewMode:
|
|
162
|
+
currentViewMode: effectiveViewMode,
|
|
163
|
+
visibleViewModes,
|
|
152
164
|
currentDate,
|
|
153
165
|
selectedTaskTypeNames: savedTaskTypeNames || [],
|
|
154
|
-
selectedAssigneeIds:
|
|
166
|
+
selectedAssigneeIds: defaultAssigneeIds,
|
|
155
167
|
selectedReporterIds: savedReporterIds || [],
|
|
156
168
|
selectedPriorities: savedPriorities || [],
|
|
157
169
|
selectedCalendarEventTypeIds: savedCalendarEventTypeIds || [],
|
|
@@ -163,6 +175,7 @@ const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() =
|
|
|
163
175
|
patchState(store, {
|
|
164
176
|
detailPanel: false,
|
|
165
177
|
currentViewMode: 'month',
|
|
178
|
+
visibleViewModes: [...AXM_TASK_BOARD_ALL_VIEW_MODE_IDS],
|
|
166
179
|
currentDate: new Date(),
|
|
167
180
|
selectedTaskTypeNames: [],
|
|
168
181
|
selectedAssigneeIds: [],
|
|
@@ -175,18 +188,22 @@ const AXMTaskBoardViewModel = signalStore({ providedIn: 'root' }, withState(() =
|
|
|
175
188
|
}
|
|
176
189
|
},
|
|
177
190
|
setViewMode(mode) {
|
|
178
|
-
|
|
191
|
+
const allowed = store.visibleViewModes();
|
|
192
|
+
const effectiveMode = allowed.includes(mode) ? mode : (allowed[0] ?? mode);
|
|
193
|
+
if ((effectiveMode === 'kanban' || effectiveMode === 'status-grouped-grid') &&
|
|
194
|
+
store.selectedTaskTypeNames().length === 0) {
|
|
179
195
|
const firstTaskType = store.taskTypes()[0];
|
|
180
196
|
if (firstTaskType) {
|
|
181
197
|
this.setSelectedTaskTypeNames([firstTaskType.name]);
|
|
182
198
|
}
|
|
183
199
|
}
|
|
184
|
-
if ((
|
|
200
|
+
if ((effectiveMode === 'kanban' || effectiveMode === 'status-grouped-grid') &&
|
|
201
|
+
store.selectedTaskTypeNames().length > 1) {
|
|
185
202
|
this.setSelectedTaskTypeNames([store.selectedTaskTypeNames()[0]]);
|
|
186
203
|
}
|
|
187
|
-
patchState(store, { currentViewMode:
|
|
204
|
+
patchState(store, { currentViewMode: effectiveMode });
|
|
188
205
|
userScopedSettings()
|
|
189
|
-
.set(AXMTaskBoardSettings.ViewMode,
|
|
206
|
+
.set(AXMTaskBoardSettings.ViewMode, effectiveMode)
|
|
190
207
|
.catch((error) => console.error('Error saving calendar view mode:', error));
|
|
191
208
|
},
|
|
192
209
|
setCurrentDate(date) {
|
|
@@ -540,6 +557,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
540
557
|
], template: "<div class=\"ax-px-4 ax-py-3 ax-flex ax-flex-col ax-gap-2 ax-sm ax-w-[20rem]\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"handleContextChanged($event)\">\n <ax-form>\n <div class=\"ax-flex ax-flex-col ax-gap-4\">\n <!-- @if (taskTypeItems()) {\n <ax-form-field>\n <ax-label> </ax-label>\n <ax-selection-list\n [items]=\"taskTypeItems()!\"\n [ngModel]=\"selectedTaskTypeValues()!\"\n (onValueChanged)=\"handleTaskTypeSelectionChange.emit($event.value)\"\n direction=\"vertical\"\n [multiple]=\"multiple()\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n <ax-select-box\n [dataSource]=\"taskTypeItems()!\"\n [ngModel]=\"selectedTaskTypeValues()!\"\n (onValueChanged)=\"handleTaskTypeSelectionChange.emit($event.value)\"\n [multiple]=\"multiple()\"\n valueField=\"id\"\n textField=\"text\"\n >\n </ax-select-box>\n </ax-form-field>\n <hr />\n } -->\n @for (node of nodes(); track $index) {\n <ax-form-field>\n @if (node.meta?.['title']) {\n <ax-label>\n {{ node.meta?.['title'] | translate: { scope: rootConfig.config.i18n } | async }}\n </ax-label>\n }\n <ng-container axp-widget-renderer [node]=\"node\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </div>\n <!-- <div class=\"ax-flex ax-gap-2 ax-mt-6 ax-mb-1\">\n <ax-button\n (onClick)=\"handleReset()\"\n class=\"ax-w-full\"\n [text]=\"'@general:actions.clear.title' | translate | async\"\n ></ax-button>\n <ax-button\n color=\"primary\"\n [type]=\"'submit'\"\n (onClick)=\"handleApply()\"\n class=\"ax-w-full\"\n [text]=\"'@general:actions.apply.title' | translate | async\"\n ></ax-button>\n </div> -->\n </ax-form>\n </axp-widgets-container>\n</div>\n" }]
|
|
541
558
|
}], propDecorators: { isQueryParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "isQueryParam", required: false }] }], applyClicked: [{ type: i0.Output, args: ["applyClicked"] }] } });
|
|
542
559
|
|
|
560
|
+
//#region ---- Imports ----
|
|
561
|
+
//#endregion
|
|
562
|
+
//#region ---- Menu Definition ----
|
|
563
|
+
/** Default task board view selector structure (filtered by user preference for visible modes). */
|
|
564
|
+
const AXM_TASK_BOARD_MENU_ITEMS = [
|
|
565
|
+
{
|
|
566
|
+
key: 'calendar',
|
|
567
|
+
text: 'calendar',
|
|
568
|
+
icon: 'fa-light fa-calendar-day',
|
|
569
|
+
children: [
|
|
570
|
+
{ key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day' },
|
|
571
|
+
{ key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },
|
|
572
|
+
{ key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },
|
|
573
|
+
{ key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },
|
|
574
|
+
],
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
key: 'timeline',
|
|
578
|
+
text: 'timeline',
|
|
579
|
+
icon: 'fa-light fa-list-timeline',
|
|
580
|
+
children: [
|
|
581
|
+
{ key: 'timeline-day', text: 'daily-timeline', icon: 'fa-light fa-calendar-day' },
|
|
582
|
+
{ key: 'timeline-weekly', text: 'weekly-timeline', icon: 'fa-light fa-calendar-week' },
|
|
583
|
+
{ key: 'timeline-month', text: 'monthly-timeline', icon: 'fa-light fa-calendar-alt' },
|
|
584
|
+
{ key: 'timeline-year', text: 'yearly-timeline', icon: 'fa-light fa-calendar-range' },
|
|
585
|
+
],
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
key: 'table',
|
|
589
|
+
text: 'table',
|
|
590
|
+
icon: 'fa-light fa-table',
|
|
591
|
+
children: [
|
|
592
|
+
{ key: 'grid', text: 'grid', icon: 'fa-light fa-table' },
|
|
593
|
+
{ key: 'status-grouped-grid', text: 'status-grouped-grid', icon: 'fa-light fa-table' },
|
|
594
|
+
],
|
|
595
|
+
},
|
|
596
|
+
{ key: 'kanban', text: 'kanban', icon: 'fa-light fa-chart-kanban' },
|
|
597
|
+
];
|
|
598
|
+
/**
|
|
599
|
+
* Returns menu branches that contain at least one allowed leaf mode.
|
|
600
|
+
*/
|
|
601
|
+
function filterTaskBoardMenuByAllowedModes(items, allowed) {
|
|
602
|
+
const result = [];
|
|
603
|
+
for (const category of items) {
|
|
604
|
+
if (!category.children) {
|
|
605
|
+
if (allowed.has(category.key)) {
|
|
606
|
+
result.push(category);
|
|
607
|
+
}
|
|
608
|
+
continue;
|
|
609
|
+
}
|
|
610
|
+
const children = category.children.filter((child) => allowed.has(child.key));
|
|
611
|
+
if (children.length > 0) {
|
|
612
|
+
result.push({ ...category, children });
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
return result;
|
|
616
|
+
}
|
|
617
|
+
//#endregion
|
|
618
|
+
|
|
543
619
|
class AXMTaskBoardCalendarViewComponent {
|
|
544
620
|
constructor() {
|
|
545
621
|
this.vm = inject(AXMTaskBoardViewModel);
|
|
@@ -548,6 +624,7 @@ class AXMTaskBoardCalendarViewComponent {
|
|
|
548
624
|
this.settingService = inject(AXPSettingsService);
|
|
549
625
|
this.commandService = inject(AXPCommandService);
|
|
550
626
|
this.schedulerService = inject(AXSchedulerService);
|
|
627
|
+
this.destroyRef = inject(DestroyRef);
|
|
551
628
|
this.schedulerComponent = viewChild(AXSchedulerComponent, ...(ngDevMode ? [{ debugName: "schedulerComponent" }] : /* istanbul ignore next */ []));
|
|
552
629
|
this.taskPopover = viewChild.required('taskPopover');
|
|
553
630
|
this.selectedTask = signal(null, ...(ngDevMode ? [{ debugName: "selectedTask" }] : /* istanbul ignore next */ []));
|
|
@@ -568,6 +645,7 @@ class AXMTaskBoardCalendarViewComponent {
|
|
|
568
645
|
return { task };
|
|
569
646
|
}, ...(ngDevMode ? [{ debugName: "customComponentInputs" }] : /* istanbul ignore next */ []));
|
|
570
647
|
this.resources = input([], ...(ngDevMode ? [{ debugName: "resources" }] : /* istanbul ignore next */ []));
|
|
648
|
+
this.refreshNonce = input(0, ...(ngDevMode ? [{ debugName: "refreshNonce" }] : /* istanbul ignore next */ []));
|
|
571
649
|
this.startingDate = input(new Date(), ...(ngDevMode ? [{ debugName: "startingDate" }] : /* istanbul ignore next */ []));
|
|
572
650
|
this.selectedView = input('month', ...(ngDevMode ? [{ debugName: "selectedView" }] : /* istanbul ignore next */ []));
|
|
573
651
|
this.dataSource = input.required(...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
@@ -588,6 +666,10 @@ class AXMTaskBoardCalendarViewComponent {
|
|
|
588
666
|
this.component = output();
|
|
589
667
|
this.onTaskRightClick = output();
|
|
590
668
|
this.onRangeChanged = output();
|
|
669
|
+
this.refreshNonceEffect = effect(() => {
|
|
670
|
+
this.refreshNonce();
|
|
671
|
+
this.schedulerComponent()?.refresh();
|
|
672
|
+
}, ...(ngDevMode ? [{ debugName: "refreshNonceEffect" }] : /* istanbul ignore next */ []));
|
|
591
673
|
}
|
|
592
674
|
// async ngOnInit(): Promise<void> {
|
|
593
675
|
// const firstDayOfWeek = await this.settingsService.get(AXPRegionalSetting.FirstDayOfWeek) as unknown as number;
|
|
@@ -596,6 +678,26 @@ class AXMTaskBoardCalendarViewComponent {
|
|
|
596
678
|
// this.weekendDays.set((await this.settingsService.get(AXPRegionalSetting.WeekendDays)) as unknown as number[]);
|
|
597
679
|
// }
|
|
598
680
|
async ngAfterViewInit() {
|
|
681
|
+
this.taskBoardService.refresh$
|
|
682
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
683
|
+
.subscribe(async (data) => {
|
|
684
|
+
const selected = this.selectedTask();
|
|
685
|
+
if (!selected?.provider)
|
|
686
|
+
return;
|
|
687
|
+
if (data.provider && data.provider !== selected.provider)
|
|
688
|
+
return;
|
|
689
|
+
await this.refreshPopoverData();
|
|
690
|
+
});
|
|
691
|
+
this.taskBoardService.close$
|
|
692
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
693
|
+
.subscribe((data) => {
|
|
694
|
+
const selected = this.selectedTask();
|
|
695
|
+
if (!selected?.provider)
|
|
696
|
+
return;
|
|
697
|
+
if (data.provider && data.provider !== selected.provider)
|
|
698
|
+
return;
|
|
699
|
+
this.closePopover();
|
|
700
|
+
});
|
|
599
701
|
if (this.schedulerComponent()) {
|
|
600
702
|
this.component.emit(this.schedulerComponent());
|
|
601
703
|
}
|
|
@@ -734,6 +836,14 @@ class AXMTaskBoardCalendarViewComponent {
|
|
|
734
836
|
console.error('Failed to execute action:', error);
|
|
735
837
|
}
|
|
736
838
|
}
|
|
839
|
+
async refreshPopoverData() {
|
|
840
|
+
const task = this.selectedTask();
|
|
841
|
+
if (!task) {
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
844
|
+
await this.loadTaskActions(task);
|
|
845
|
+
this.schedulerComponent()?.refresh();
|
|
846
|
+
}
|
|
737
847
|
async openTaskDetails() {
|
|
738
848
|
const task = this.selectedTask();
|
|
739
849
|
if (!task)
|
|
@@ -882,7 +992,7 @@ class AXMTaskBoardCalendarViewComponent {
|
|
|
882
992
|
return `${dateFormatted} ${timeRange}`;
|
|
883
993
|
}
|
|
884
994
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
885
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMTaskBoardCalendarViewComponent, isStandalone: true, selector: "axm-task-board-calendar-view", inputs: { resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: "startingDate", publicName: "startingDate", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: "selectedView", publicName: "selectedView", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskClick: "onTaskClick", onTaskChanged: "onTaskChanged", onMonthSlotDblClicked: "onMonthSlotDblClicked", onActionClick: "onActionClick", component: "component", onTaskRightClick: "onTaskRightClick", onRangeChanged: "onRangeChanged" }, viewQueries: [{ propertyName: "schedulerComponent", first: true, predicate: AXSchedulerComponent, descendants: true, isSignal: true }, { propertyName: "taskPopover", first: true, predicate: ["taskPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n [weekend]=\"weekendDays()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n></ax-scheduler>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: AXSchedulerComponent, selector: "ax-scheduler", inputs: ["calendar", "startingDate", "endDayHour", "startDayHour", "hasHeader", "readonly", "draggable", "hasActions", "dragStartDelay", "weekend", "allowFullScreen", "multiDayViewDaysCount", "showResourceHeaders", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "showUnassignedAppointments", "resources", "resourceTemplate", "firstDayOfWeek", "tooltipTemplate", "dataSource", "holidays", "views", "selectedView"], outputs: ["selectedViewChange", "onDataLoaded", "onRangeChanged", "onSlotClicked", "onSlotDblClicked", "onSlotRightClick", "onAppointmentDrop", "onActionClick", "onAppointmentClicked", "onAppointmentDblClicked", "onAppointmentRightClick"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
995
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMTaskBoardCalendarViewComponent, isStandalone: true, selector: "axm-task-board-calendar-view", inputs: { resources: { classPropertyName: "resources", publicName: "resources", isSignal: true, isRequired: false, transformFunction: null }, refreshNonce: { classPropertyName: "refreshNonce", publicName: "refreshNonce", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: "startingDate", publicName: "startingDate", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: "selectedView", publicName: "selectedView", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskClick: "onTaskClick", onTaskChanged: "onTaskChanged", onMonthSlotDblClicked: "onMonthSlotDblClicked", onActionClick: "onActionClick", component: "component", onTaskRightClick: "onTaskRightClick", onRangeChanged: "onRangeChanged" }, viewQueries: [{ propertyName: "schedulerComponent", first: true, predicate: AXSchedulerComponent, descendants: true, isSignal: true }, { propertyName: "taskPopover", first: true, predicate: ["taskPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n [weekend]=\"weekendDays()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n></ax-scheduler>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: AXSchedulerComponent, selector: "ax-scheduler", inputs: ["calendar", "startingDate", "endDayHour", "startDayHour", "hasHeader", "readonly", "draggable", "hasActions", "dragStartDelay", "weekend", "allowFullScreen", "multiDayViewDaysCount", "showResourceHeaders", "showCurrentTimeIndicator", "scrollToCurrentTimeIndicator", "showUnassignedAppointments", "resources", "resourceTemplate", "firstDayOfWeek", "tooltipTemplate", "dataSource", "holidays", "views", "selectedView"], outputs: ["selectedViewChange", "onDataLoaded", "onRangeChanged", "onSlotClicked", "onSlotDblClicked", "onSlotRightClick", "onAppointmentDrop", "onActionClick", "onAppointmentClicked", "onAppointmentDblClicked", "onAppointmentRightClick"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "repositionOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
886
996
|
}
|
|
887
997
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMTaskBoardCalendarViewComponent, decorators: [{
|
|
888
998
|
type: Component,
|
|
@@ -895,7 +1005,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
895
1005
|
AXDecoratorModule,
|
|
896
1006
|
AXTranslationModule,
|
|
897
1007
|
], template: "<ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [startingDate]=\"startingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n [weekend]=\"weekendDays()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n></ax-scheduler>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n", styles: ["ax-scheduler{line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\n"] }]
|
|
898
|
-
}], propDecorators: { schedulerComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXSchedulerComponent), { isSignal: true }] }], taskPopover: [{ type: i0.ViewChild, args: ['taskPopover', { isSignal: true }] }], resources: [{ type: i0.Input, args: [{ isSignal: true, alias: "resources", required: false }] }], startingDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "startingDate", required: false }] }], selectedView: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedView", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], onTaskClick: [{ type: i0.Output, args: ["onTaskClick"] }], onTaskChanged: [{ type: i0.Output, args: ["onTaskChanged"] }], onMonthSlotDblClicked: [{ type: i0.Output, args: ["onMonthSlotDblClicked"] }], onActionClick: [{ type: i0.Output, args: ["onActionClick"] }], component: [{ type: i0.Output, args: ["component"] }], onTaskRightClick: [{ type: i0.Output, args: ["onTaskRightClick"] }], onRangeChanged: [{ type: i0.Output, args: ["onRangeChanged"] }] } });
|
|
1008
|
+
}], propDecorators: { schedulerComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXSchedulerComponent), { isSignal: true }] }], taskPopover: [{ type: i0.ViewChild, args: ['taskPopover', { isSignal: true }] }], resources: [{ type: i0.Input, args: [{ isSignal: true, alias: "resources", required: false }] }], refreshNonce: [{ type: i0.Input, args: [{ isSignal: true, alias: "refreshNonce", required: false }] }], startingDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "startingDate", required: false }] }], selectedView: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedView", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], onTaskClick: [{ type: i0.Output, args: ["onTaskClick"] }], onTaskChanged: [{ type: i0.Output, args: ["onTaskChanged"] }], onMonthSlotDblClicked: [{ type: i0.Output, args: ["onMonthSlotDblClicked"] }], onActionClick: [{ type: i0.Output, args: ["onActionClick"] }], component: [{ type: i0.Output, args: ["component"] }], onTaskRightClick: [{ type: i0.Output, args: ["onTaskRightClick"] }], onRangeChanged: [{ type: i0.Output, args: ["onRangeChanged"] }] } });
|
|
899
1009
|
|
|
900
1010
|
class AXMTaskBoardGridViewComponent {
|
|
901
1011
|
#dataSourceChanged;
|
|
@@ -904,14 +1014,28 @@ class AXMTaskBoardGridViewComponent {
|
|
|
904
1014
|
this.localeService = inject(AXLocaleService);
|
|
905
1015
|
this.calendarService = inject(AXCalendarService);
|
|
906
1016
|
this.taskBoardService = inject(AXPTaskBoardService);
|
|
1017
|
+
this.translationService = inject(AXTranslationService);
|
|
907
1018
|
this.dataSource = input.required(...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
1019
|
+
this.refreshNonce = input(0, ...(ngDevMode ? [{ debugName: "refreshNonce" }] : /* istanbul ignore next */ []));
|
|
908
1020
|
this.onTaskClick = output();
|
|
909
1021
|
this.onActionClick = output();
|
|
910
1022
|
this.fetchedTasks = signal([], ...(ngDevMode ? [{ debugName: "fetchedTasks" }] : /* istanbul ignore next */ []));
|
|
911
1023
|
this.columns = signal([], ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
912
1024
|
this.grid = viewChild('grid', ...(ngDevMode ? [{ debugName: "grid" }] : /* istanbul ignore next */ []));
|
|
1025
|
+
this.commandItems = signal([
|
|
1026
|
+
{
|
|
1027
|
+
name: 'view',
|
|
1028
|
+
text: this.translationService.translateSync('@task-management:task-board.grid-headers.action-view') ?? 'View',
|
|
1029
|
+
icon: 'ax-icon ax-icon-more-horizontal',
|
|
1030
|
+
look: 'blank',
|
|
1031
|
+
},
|
|
1032
|
+
], ...(ngDevMode ? [{ debugName: "commandItems" }] : /* istanbul ignore next */ []));
|
|
1033
|
+
/** Remount keys so `ax-data-table` is recreated on board refresh (manual fetch mode can keep stale rows otherwise). */
|
|
1034
|
+
this.gridRemountKeys = computed(() => [this.refreshNonce()], ...(ngDevMode ? [{ debugName: "gridRemountKeys" }] : /* istanbul ignore next */ []));
|
|
913
1035
|
this.tasksDataSource = computed(() => {
|
|
914
1036
|
const parentDataSource = this.dataSource();
|
|
1037
|
+
// Bumps when the task board refreshes so we get a new data source instance (grid refresh alone can keep cached pages).
|
|
1038
|
+
void this.refreshNonce();
|
|
915
1039
|
return new AXDataSource({
|
|
916
1040
|
load: async (e) => {
|
|
917
1041
|
const result = await parentDataSource({ skip: e.skip, take: e.take });
|
|
@@ -955,11 +1079,12 @@ class AXMTaskBoardGridViewComponent {
|
|
|
955
1079
|
this.vm.currentDate();
|
|
956
1080
|
this.vm.daysCount();
|
|
957
1081
|
this.vm.currentViewMode();
|
|
1082
|
+
this.refreshNonce();
|
|
958
1083
|
// Use untracked to refresh the grid without tracking it
|
|
959
1084
|
untracked(() => {
|
|
960
1085
|
// Schedule refresh in next tick to avoid issues during effect execution
|
|
961
1086
|
setTimeout(() => {
|
|
962
|
-
this.grid()?.refresh();
|
|
1087
|
+
this.grid()?.refresh({ reset: true });
|
|
963
1088
|
}, 0);
|
|
964
1089
|
});
|
|
965
1090
|
}, ...(ngDevMode ? [{ debugName: "#dataSourceChanged" }] : /* istanbul ignore next */ []));
|
|
@@ -978,7 +1103,7 @@ class AXMTaskBoardGridViewComponent {
|
|
|
978
1103
|
// Ensure data source is refreshed after initial render
|
|
979
1104
|
afterNextRender(() => {
|
|
980
1105
|
untracked(() => {
|
|
981
|
-
this.grid()?.refresh();
|
|
1106
|
+
this.grid()?.refresh({ reset: true });
|
|
982
1107
|
});
|
|
983
1108
|
});
|
|
984
1109
|
}
|
|
@@ -1000,12 +1125,12 @@ class AXMTaskBoardGridViewComponent {
|
|
|
1000
1125
|
this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });
|
|
1001
1126
|
}
|
|
1002
1127
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMTaskBoardGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1003
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMTaskBoardGridViewComponent, isStandalone: true, selector: "axm-task-board-grid-view", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onTaskClick: "onTaskClick", onActionClick: "onActionClick" }, viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-data-table\n
|
|
1128
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMTaskBoardGridViewComponent, isStandalone: true, selector: "axm-task-board-grid-view", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, refreshNonce: { classPropertyName: "refreshNonce", publicName: "refreshNonce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onTaskClick: "onTaskClick", onActionClick: "onActionClick" }, viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], ngImport: i0, template: "@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"commandItems()\"\n ></ax-command-column>\n </ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "title", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$2.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "component", type: i1$2.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "cellTemplate", "headerTemplate"] }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1004
1129
|
}
|
|
1005
1130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMTaskBoardGridViewComponent, decorators: [{
|
|
1006
1131
|
type: Component,
|
|
1007
|
-
args: [{ selector: 'axm-task-board-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule], template: "<ax-data-table\n
|
|
1008
|
-
}], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], onTaskClick: [{ type: i0.Output, args: ["onTaskClick"] }], onActionClick: [{ type: i0.Output, args: ["onActionClick"] }], grid: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }] } });
|
|
1132
|
+
args: [{ selector: 'axm-task-board-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule], template: "@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"commandItems()\"\n ></ax-command-column>\n </ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"] }]
|
|
1133
|
+
}], ctorParameters: () => [], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], refreshNonce: [{ type: i0.Input, args: [{ isSignal: true, alias: "refreshNonce", required: false }] }], onTaskClick: [{ type: i0.Output, args: ["onTaskClick"] }], onActionClick: [{ type: i0.Output, args: ["onActionClick"] }], grid: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }] } });
|
|
1009
1134
|
|
|
1010
1135
|
class AXMTaskBoardKanbanViewComponent {
|
|
1011
1136
|
constructor() {
|
|
@@ -1014,6 +1139,7 @@ class AXMTaskBoardKanbanViewComponent {
|
|
|
1014
1139
|
this.calendarService = inject(AXCalendarService);
|
|
1015
1140
|
this.settingService = inject(AXPSettingsService);
|
|
1016
1141
|
this.commandService = inject(AXPCommandService);
|
|
1142
|
+
this.destroyRef = inject(DestroyRef);
|
|
1017
1143
|
this.kanbanComponent = viewChild(AXKanbanComponent, ...(ngDevMode ? [{ debugName: "kanbanComponent" }] : /* istanbul ignore next */ []));
|
|
1018
1144
|
this.taskPopover = viewChild.required('taskPopover');
|
|
1019
1145
|
this.selectedTask = signal(null, ...(ngDevMode ? [{ debugName: "selectedTask" }] : /* istanbul ignore next */ []));
|
|
@@ -1065,6 +1191,26 @@ class AXMTaskBoardKanbanViewComponent {
|
|
|
1065
1191
|
}, ...(ngDevMode ? [{ debugName: "#providerChanged" }] : /* istanbul ignore next */ []));
|
|
1066
1192
|
}
|
|
1067
1193
|
ngAfterViewInit() {
|
|
1194
|
+
this.taskBoardService.refresh$
|
|
1195
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
1196
|
+
.subscribe(async (data) => {
|
|
1197
|
+
const selected = this.selectedTask();
|
|
1198
|
+
if (!selected?.provider)
|
|
1199
|
+
return;
|
|
1200
|
+
if (data.provider && data.provider !== selected.provider)
|
|
1201
|
+
return;
|
|
1202
|
+
await this.refreshPopoverData();
|
|
1203
|
+
});
|
|
1204
|
+
this.taskBoardService.close$
|
|
1205
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
1206
|
+
.subscribe((data) => {
|
|
1207
|
+
const selected = this.selectedTask();
|
|
1208
|
+
if (!selected?.provider)
|
|
1209
|
+
return;
|
|
1210
|
+
if (data.provider && data.provider !== selected.provider)
|
|
1211
|
+
return;
|
|
1212
|
+
this.closePopover();
|
|
1213
|
+
});
|
|
1068
1214
|
if (this.kanbanComponent()) {
|
|
1069
1215
|
this.component.emit(this.kanbanComponent());
|
|
1070
1216
|
}
|
|
@@ -1412,6 +1558,34 @@ class AXMTaskBoardKanbanViewComponent {
|
|
|
1412
1558
|
this.popoverTarget.set(null);
|
|
1413
1559
|
this.taskActions.set([]);
|
|
1414
1560
|
}
|
|
1561
|
+
async refreshPopoverData() {
|
|
1562
|
+
const selected = this.selectedTask();
|
|
1563
|
+
if (!selected?.provider) {
|
|
1564
|
+
return;
|
|
1565
|
+
}
|
|
1566
|
+
const provider = this.taskBoardService.getProvider(selected.provider);
|
|
1567
|
+
if (!provider) {
|
|
1568
|
+
return;
|
|
1569
|
+
}
|
|
1570
|
+
try {
|
|
1571
|
+
const result = await provider.getTasks();
|
|
1572
|
+
const updatedTasks = result.items.map((t) => ({ ...t, provider: selected.provider }));
|
|
1573
|
+
const updatedMap = new Map(updatedTasks.map((t) => [t.id, t]));
|
|
1574
|
+
const currentTasks = this.tasks();
|
|
1575
|
+
const mergedTasks = currentTasks.map((t) => updatedMap.get(t.id) ?? t);
|
|
1576
|
+
const existingIds = new Set(currentTasks.map((t) => t.id));
|
|
1577
|
+
const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id));
|
|
1578
|
+
this.tasks.set([...mergedTasks, ...newTasks]);
|
|
1579
|
+
const updatedSelectedTask = updatedMap.get(selected.id);
|
|
1580
|
+
if (updatedSelectedTask) {
|
|
1581
|
+
this.selectedTask.set(updatedSelectedTask);
|
|
1582
|
+
await this.loadTaskActions(updatedSelectedTask);
|
|
1583
|
+
}
|
|
1584
|
+
}
|
|
1585
|
+
catch (error) {
|
|
1586
|
+
console.error('[TaskPopover] Failed to refresh popover data:', error);
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1415
1589
|
formatTime(date) {
|
|
1416
1590
|
return this.calendarService.create(date).format('HH:mm');
|
|
1417
1591
|
}
|
|
@@ -1479,6 +1653,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
1479
1653
|
], template: "<ax-kanban\n [statuses]=\"statuses()\"\n [dataSource]=\"kanbanTasks()\"\n (onItemClick)=\"handleItemClick($event)\"\n (onBeforeDrop)=\"onBeforeDrop($event)\"\n (onSortChanged)=\"onSortChanged($event)\"\n></ax-kanban>\n\n<!-- Task Detail Popover (Modern Google Calendar Style) -->\n<ax-popover\n #taskPopover\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [offsetY]=\"12\"\n [offsetX]=\"12\"\n [adaptivityEnabled]=\"true\"\n>\n <div>\n @if (selectedTask()) {\n <div class=\"task-popover ax-shadow-md ax-border\">\n <!-- Header Section -->\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\" [title]=\"selectedTask()!.title\">{{ selectedTask()!.title }}</h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"closePopover()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n @if (selectedTask()!.description && !customComponentType()) {\n <p class=\"task-popover__description\">{{ selectedTask()!.description }}</p>\n }\n </div>\n </div>\n\n <!-- Custom Component or Default Content -->\n @if (customComponentType()) {\n <!-- Custom Component from Provider -->\n <div class=\"task-popover__custom-content\">\n <ng-container *ngComponentOutlet=\"customComponentType()!; inputs: customComponentInputs()!\"></ng-container>\n </div>\n } @else {\n <!-- Default Content Section -->\n <div class=\"task-popover__content\">\n <!-- Time -->\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(selectedTask()!) }}</span>\n </div>\n </div>\n\n <!-- Status -->\n @if (selectedTask()!.status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ selectedTask()!.status.title }}</span>\n </div>\n </div>\n }\n\n <!-- Assignee -->\n @if (selectedTask()!.assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n selectedTask()!.assignee?.fullName || selectedTask()!.assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n <!-- Priority -->\n @if (selectedTask()!.priority) {\n <div class=\"task-popover__info-item\">\n <div\n class=\"task-popover__icon task-popover__icon--priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span\n class=\"task-popover__info-text task-popover__priority\"\n [attr.data-priority]=\"selectedTask()!.priority\"\n >\n {{ selectedTask()!.priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n <!-- Actions Section -->\n <div class=\"task-popover__actions\">\n <!-- Task Actions from Provider -->\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions-group\">\n <!-- Primary Actions: Icon-only buttons -->\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n <!-- Secondary Actions: Dropdown with \"...\" button -->\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n</ax-popover>\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-height: 100%;--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5;background-color:rgba(var(--ax-sys-color-lightest-surface))!important}.task-popover{background:rgba(var(--ax-sys-color-lightest-surface));border-radius:12px;overflow:hidden;display:flex;flex-direction:column}.task-popover__header{padding:20px 20px 16px;border-bottom:1px solid var(--ax-sys-color-border);background:linear-gradient(to bottom,var(--ax-sys-color-lightest-surface),var(--ax-sys-color-lighter-surface))}.task-popover__title-section{display:flex;flex-direction:column;gap:8px}.task-popover__title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.task-popover__title{font-size:18px;font-weight:600;line-height:1.4;color:var(--ax-sys-color-text-primary);margin:0;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.task-popover__close-btn{flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--ax-sys-color-text-neutral-600);transition:color .2s ease;border-radius:4px}.task-popover__close-btn:hover{color:var(--ax-sys-color-text-primary);background:var(--ax-sys-color-lighter-surface)}.task-popover__close-btn:active{background:var(--ax-sys-color-light-surface)}.task-popover__close-btn ax-icon{display:block;width:16px;height:16px}.task-popover__description{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-secondary);margin:0;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.task-popover__content{padding:16px 20px;display:flex;flex-direction:column;gap:12px;flex:1}.task-popover__info-item{display:flex;align-items:flex-start;gap:12px;min-height:24px}.task-popover__icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;color:var(--ax-sys-color-text-neutral-600);font-size:14px}.task-popover__icon i{display:block}.task-popover__icon--priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__icon--priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__icon--priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__icon--priority[data-priority=low],.task-popover__icon--priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-500)}.task-popover__info-content{flex:1;min-width:0;display:flex;align-items:center}.task-popover__info-text{font-size:14px;line-height:1.5;color:var(--ax-sys-color-text-primary);word-wrap:break-word}.task-popover__time{font-weight:500;color:var(--ax-sys-color-text-primary);margin-left:4px}.task-popover__priority{text-transform:capitalize;font-weight:500}.task-popover__priority[data-priority=highest]{color:var(--ax-sys-color-danger)}.task-popover__priority[data-priority=high]{color:var(--ax-sys-color-warning)}.task-popover__priority[data-priority=medium]{color:var(--ax-sys-color-info)}.task-popover__priority[data-priority=low],.task-popover__priority[data-priority=lowest]{color:var(--ax-sys-color-text-neutral-600)}.task-popover__actions{padding:12px 20px 16px;border-top:1px solid var(--ax-sys-color-border);display:flex;flex-direction:column;gap:8px;background:var(--ax-sys-color-lighter-surface)}.task-popover__actions-group{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.task-popover__actions-group--default{margin-top:4px;padding-top:8px;border-top:1px solid var(--ax-sys-color-border)}.task-popover__action-divider{width:100%;height:1px;background:var(--ax-sys-color-border);margin:4px 0}.task-popover__action-btn{min-width:100px;white-space:nowrap}\n"] }]
|
|
1480
1654
|
}], propDecorators: { kanbanComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXKanbanComponent), { isSignal: true }] }], taskPopover: [{ type: i0.ViewChild, args: ['taskPopover', { isSignal: true }] }], tasks: [{ type: i0.Input, args: [{ isSignal: true, alias: "tasks", required: true }] }, { type: i0.Output, args: ["tasksChange"] }], onTaskClick: [{ type: i0.Output, args: ["onTaskClick"] }], onTaskChanged: [{ type: i0.Output, args: ["onTaskChanged"] }], component: [{ type: i0.Output, args: ["component"] }], onActionClick: [{ type: i0.Output, args: ["onActionClick"] }] } });
|
|
1481
1655
|
|
|
1656
|
+
/** Stable row identity for @for; includes refresh nonce so tables remount after board refresh. */
|
|
1657
|
+
function statusGroupTrackKey(nonce, group) {
|
|
1658
|
+
return `${nonce}:${String(group.statusInfo.key)}`;
|
|
1659
|
+
}
|
|
1482
1660
|
class AXMTaskBoardStatusGroupedGridViewComponent {
|
|
1483
1661
|
#dataChanged;
|
|
1484
1662
|
#providerChanged;
|
|
@@ -1489,12 +1667,15 @@ class AXMTaskBoardStatusGroupedGridViewComponent {
|
|
|
1489
1667
|
this.calendarService = inject(AXCalendarService);
|
|
1490
1668
|
this.provider = input(...(ngDevMode ? [undefined, { debugName: "provider" }] : /* istanbul ignore next */ []));
|
|
1491
1669
|
this.dataSource = input.required(...(ngDevMode ? [{ debugName: "dataSource" }] : /* istanbul ignore next */ []));
|
|
1670
|
+
this.refreshNonce = input(0, ...(ngDevMode ? [{ debugName: "refreshNonce" }] : /* istanbul ignore next */ []));
|
|
1492
1671
|
this.onActionClick = output();
|
|
1493
1672
|
this.groupedTasks = signal([], ...(ngDevMode ? [{ debugName: "groupedTasks" }] : /* istanbul ignore next */ []));
|
|
1494
1673
|
this.allFetchedTasks = signal([], ...(ngDevMode ? [{ debugName: "allFetchedTasks" }] : /* istanbul ignore next */ []));
|
|
1495
1674
|
this.columns = signal([], ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
1496
1675
|
this.statuses = signal([], ...(ngDevMode ? [{ debugName: "statuses" }] : /* istanbul ignore next */ []));
|
|
1497
1676
|
this.grids = viewChildren('grid', ...(ngDevMode ? [{ debugName: "grids" }] : /* istanbul ignore next */ []));
|
|
1677
|
+
/** Used by the template so status tables remount when the board refreshes (same as flat grid). */
|
|
1678
|
+
this.trackStatusGroup = (_index, group) => statusGroupTrackKey(this.refreshNonce(), group);
|
|
1498
1679
|
this.#dataChanged = effect(async () => {
|
|
1499
1680
|
// Track filter-related signals that affect the data source
|
|
1500
1681
|
// When these change, the parent's filter() computed signal changes,
|
|
@@ -1506,6 +1687,7 @@ class AXMTaskBoardStatusGroupedGridViewComponent {
|
|
|
1506
1687
|
this.vm.currentDate();
|
|
1507
1688
|
this.vm.daysCount();
|
|
1508
1689
|
this.vm.currentViewMode();
|
|
1690
|
+
this.refreshNonce();
|
|
1509
1691
|
const parentDataSource = this.dataSource();
|
|
1510
1692
|
const allStatuses = this.statuses();
|
|
1511
1693
|
if (!parentDataSource || allStatuses.length === 0) {
|
|
@@ -1533,7 +1715,7 @@ class AXMTaskBoardStatusGroupedGridViewComponent {
|
|
|
1533
1715
|
});
|
|
1534
1716
|
// Refresh data table components
|
|
1535
1717
|
this.grids().forEach((grid) => {
|
|
1536
|
-
grid.refresh();
|
|
1718
|
+
grid.refresh({ reset: true });
|
|
1537
1719
|
});
|
|
1538
1720
|
}, 0);
|
|
1539
1721
|
});
|
|
@@ -1558,7 +1740,7 @@ class AXMTaskBoardStatusGroupedGridViewComponent {
|
|
|
1558
1740
|
// Wait for grids to be rendered
|
|
1559
1741
|
setTimeout(() => {
|
|
1560
1742
|
this.grids().forEach((grid) => {
|
|
1561
|
-
grid.refresh();
|
|
1743
|
+
grid.refresh({ reset: true });
|
|
1562
1744
|
});
|
|
1563
1745
|
}, 100);
|
|
1564
1746
|
});
|
|
@@ -1574,7 +1756,7 @@ class AXMTaskBoardStatusGroupedGridViewComponent {
|
|
|
1574
1756
|
});
|
|
1575
1757
|
// Refresh data table components
|
|
1576
1758
|
this.grids().forEach((grid) => {
|
|
1577
|
-
grid.refresh();
|
|
1759
|
+
grid.refresh({ reset: true });
|
|
1578
1760
|
});
|
|
1579
1761
|
}, 200);
|
|
1580
1762
|
});
|
|
@@ -1617,12 +1799,12 @@ class AXMTaskBoardStatusGroupedGridViewComponent {
|
|
|
1617
1799
|
this.onActionClick.emit({ nativeEvent: e.nativeEvent, task });
|
|
1618
1800
|
}
|
|
1619
1801
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMTaskBoardStatusGroupedGridViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1620
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMTaskBoardStatusGroupedGridViewComponent, isStandalone: true, selector: "axm-task-board-status-grouped-grid-view", inputs: { provider: { classPropertyName: "provider", publicName: "provider", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onActionClick: "onActionClick" }, viewQueries: [{ propertyName: "grids", predicate: ["grid"], descendants: true, isSignal: true }], ngImport: i0, template: "@for (group of groupedTasks(); track group) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"[\n {\n name: 'view',\n text: ('@task-management:task-board.grid-headers.action-view' | translate | async) ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n },\n ]\"\n ></ax-command-column>\n </ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "title", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$2.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "component", type: i1$2.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1802
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMTaskBoardStatusGroupedGridViewComponent, isStandalone: true, selector: "axm-task-board-status-grouped-grid-view", inputs: { provider: { classPropertyName: "provider", publicName: "provider", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, refreshNonce: { classPropertyName: "refreshNonce", publicName: "refreshNonce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onActionClick: "onActionClick" }, viewQueries: [{ propertyName: "grids", predicate: ["grid"], descendants: true, isSignal: true }], ngImport: i0, template: "@for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"[\n {\n name: 'view',\n text: ('@task-management:task-board.grid-headers.action-view' | translate | async) ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n },\n ]\"\n ></ax-command-column>\n </ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "title", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$2.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "component", type: i1$2.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1621
1803
|
}
|
|
1622
1804
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMTaskBoardStatusGroupedGridViewComponent, decorators: [{
|
|
1623
1805
|
type: Component,
|
|
1624
|
-
args: [{ selector: 'axm-task-board-status-grouped-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule], template: "@for (group of groupedTasks(); track group) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"[\n {\n name: 'view',\n text: ('@task-management:task-board.grid-headers.action-view' | translate | async) ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n },\n ]\"\n ></ax-command-column>\n </ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"] }]
|
|
1625
|
-
}], ctorParameters: () => [], propDecorators: { provider: [{ type: i0.Input, args: [{ isSignal: true, alias: "provider", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], onActionClick: [{ type: i0.Output, args: ["onActionClick"] }], grids: [{ type: i0.ViewChildren, args: ['grid', { isSignal: true }] }] } });
|
|
1806
|
+
args: [{ selector: 'axm-task-board-status-grouped-grid-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule], template: "@for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"'75px'\"\n (onItemClick)=\"onActionClickHandler($event)\"\n [items]=\"[\n {\n name: 'view',\n text: ('@task-management:task-board.grid-headers.action-view' | translate | async) ?? 'View',\n icon: 'ax-icon ax-icon-more-horizontal',\n },\n ]\"\n ></ax-command-column>\n </ax-data-table>\n}\n", styles: ["ax-kanban{--ax-comp-kanban-status-min-width: 25rem;height:100%;line-height:1.5}\n"] }]
|
|
1807
|
+
}], ctorParameters: () => [], propDecorators: { provider: [{ type: i0.Input, args: [{ isSignal: true, alias: "provider", required: false }] }], dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], refreshNonce: [{ type: i0.Input, args: [{ isSignal: true, alias: "refreshNonce", required: false }] }], onActionClick: [{ type: i0.Output, args: ["onActionClick"] }], grids: [{ type: i0.ViewChildren, args: ['grid', { isSignal: true }] }] } });
|
|
1626
1808
|
|
|
1627
1809
|
class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
1628
1810
|
constructor() {
|
|
@@ -1644,6 +1826,7 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
1644
1826
|
this.calendarEventTypes = signal([], ...(ngDevMode ? [{ debugName: "calendarEventTypes" }] : /* istanbul ignore next */ []));
|
|
1645
1827
|
this.resources = signal([], ...(ngDevMode ? [{ debugName: "resources" }] : /* istanbul ignore next */ []));
|
|
1646
1828
|
this.isQueryParam = signal(false, ...(ngDevMode ? [{ debugName: "isQueryParam" }] : /* istanbul ignore next */ []));
|
|
1829
|
+
this.refreshNonce = signal(0, ...(ngDevMode ? [{ debugName: "refreshNonce" }] : /* istanbul ignore next */ []));
|
|
1647
1830
|
this.taskTypeAccordionCollapsed = signal(false, ...(ngDevMode ? [{ debugName: "taskTypeAccordionCollapsed" }] : /* istanbul ignore next */ []));
|
|
1648
1831
|
this.calendarEventTypeAccordionCollapsed = signal(false, ...(ngDevMode ? [{ debugName: "calendarEventTypeAccordionCollapsed" }] : /* istanbul ignore next */ []));
|
|
1649
1832
|
this.sidebarCollapsed = signal(false, ...(ngDevMode ? [{ debugName: "sidebarCollapsed" }] : /* istanbul ignore next */ []));
|
|
@@ -1651,40 +1834,11 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
1651
1834
|
this.currentViewMode = signal('calendar', ...(ngDevMode ? [{ debugName: "currentViewMode" }] : /* istanbul ignore next */ []));
|
|
1652
1835
|
this.schedulerComponent = signal(null, ...(ngDevMode ? [{ debugName: "schedulerComponent" }] : /* istanbul ignore next */ []));
|
|
1653
1836
|
this.dayDataCache = signal(new Map(), ...(ngDevMode ? [{ debugName: "dayDataCache" }] : /* istanbul ignore next */ []));
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
children: [
|
|
1660
|
-
{ key: 'day', text: 'daily', icon: 'fa-light fa-calendar-day' },
|
|
1661
|
-
{ key: 'week', text: 'weekly', icon: 'fa-light fa-calendar-week' },
|
|
1662
|
-
{ key: 'month', text: 'monthly', icon: 'fa-light fa-calendar-alt' },
|
|
1663
|
-
{ key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },
|
|
1664
|
-
],
|
|
1665
|
-
},
|
|
1666
|
-
{
|
|
1667
|
-
key: 'timeline',
|
|
1668
|
-
text: 'timeline',
|
|
1669
|
-
icon: 'fa-light fa-list-timeline',
|
|
1670
|
-
children: [
|
|
1671
|
-
{ key: 'timeline-day', text: 'daily-timeline', icon: 'fa-light fa-calendar-day' },
|
|
1672
|
-
{ key: 'timeline-weekly', text: 'weekly-timeline', icon: 'fa-light fa-calendar-week' },
|
|
1673
|
-
{ key: 'timeline-month', text: 'monthly-timeline', icon: 'fa-light fa-calendar-alt' },
|
|
1674
|
-
{ key: 'timeline-year', text: 'yearly-timeline', icon: 'fa-light fa-calendar-range' },
|
|
1675
|
-
],
|
|
1676
|
-
},
|
|
1677
|
-
{
|
|
1678
|
-
key: 'table',
|
|
1679
|
-
text: 'table',
|
|
1680
|
-
icon: 'fa-light fa-table',
|
|
1681
|
-
children: [
|
|
1682
|
-
{ key: 'grid', text: 'grid', icon: 'fa-light fa-table' },
|
|
1683
|
-
{ key: 'status-grouped-grid', text: 'status-grouped-grid', icon: 'fa-light fa-table' },
|
|
1684
|
-
],
|
|
1685
|
-
},
|
|
1686
|
-
{ key: 'kanban', text: 'kanban', icon: 'fa-light fa-chart-kanban' },
|
|
1687
|
-
], ...(ngDevMode ? [{ debugName: "menuItems" }] : /* istanbul ignore next */ []));
|
|
1837
|
+
/** View switcher entries filtered by user visibility settings parts. */
|
|
1838
|
+
this.menuItems = computed(() => {
|
|
1839
|
+
const allowed = new Set(this.vm.visibleViewModes());
|
|
1840
|
+
return filterTaskBoardMenuByAllowedModes(AXM_TASK_BOARD_MENU_ITEMS, allowed);
|
|
1841
|
+
}, ...(ngDevMode ? [{ debugName: "menuItems" }] : /* istanbul ignore next */ []));
|
|
1688
1842
|
this.calendarType = computed(() => this.localeService.activeProfile().calendar.system, ...(ngDevMode ? [{ debugName: "calendarType" }] : /* istanbul ignore next */ []));
|
|
1689
1843
|
this.todayButtonText = computed(() => {
|
|
1690
1844
|
switch (this.vm.currentViewMode()) {
|
|
@@ -1737,7 +1891,8 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
1737
1891
|
}, ...(ngDevMode ? [{ debugName: "currentDateForCalendar" }] : /* istanbul ignore next */ []));
|
|
1738
1892
|
this.selectedViewMode = computed(() => {
|
|
1739
1893
|
const currentMode = this.vm.currentViewMode();
|
|
1740
|
-
|
|
1894
|
+
const items = this.menuItems();
|
|
1895
|
+
for (const category of items) {
|
|
1741
1896
|
if (category.key === currentMode) {
|
|
1742
1897
|
return { key: category.key, text: category.text, icon: category.icon };
|
|
1743
1898
|
}
|
|
@@ -1748,18 +1903,20 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
1748
1903
|
}
|
|
1749
1904
|
}
|
|
1750
1905
|
}
|
|
1751
|
-
const firstCategory =
|
|
1906
|
+
const firstCategory = items[0];
|
|
1907
|
+
if (!firstCategory) {
|
|
1908
|
+
return {
|
|
1909
|
+
key: currentMode,
|
|
1910
|
+
text: 'view',
|
|
1911
|
+
icon: 'fa-light fa-table',
|
|
1912
|
+
};
|
|
1913
|
+
}
|
|
1752
1914
|
return firstCategory.children
|
|
1753
1915
|
? firstCategory.children[0]
|
|
1754
1916
|
: { key: firstCategory.key, text: firstCategory.text, icon: firstCategory.icon };
|
|
1755
1917
|
}, ...(ngDevMode ? [{ debugName: "selectedViewMode" }] : /* istanbul ignore next */ []));
|
|
1756
1918
|
this.filter = computed(() => {
|
|
1757
1919
|
const taskTypeNames = this.vm.selectedTaskTypeNames();
|
|
1758
|
-
// When nothing is selected (empty array), we want to show NO types
|
|
1759
|
-
// The service treats empty/undefined types as "show all providers"
|
|
1760
|
-
// To show none when nothing is selected, we pass a non-existent type name
|
|
1761
|
-
// This ensures filteredProviders.length === 0, resulting in empty results
|
|
1762
|
-
const types = taskTypeNames.length > 0 ? taskTypeNames : ['__NONE__'];
|
|
1763
1920
|
const assigneeIds = this.vm.selectedAssigneeIds();
|
|
1764
1921
|
const reporterIds = this.vm.selectedReporterIds();
|
|
1765
1922
|
const priorities = this.vm.selectedPriorities();
|
|
@@ -1782,8 +1939,8 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
1782
1939
|
end = from.endOf('day');
|
|
1783
1940
|
}
|
|
1784
1941
|
return {
|
|
1785
|
-
//
|
|
1786
|
-
types,
|
|
1942
|
+
// Empty filter means "all items" for task type/provider.
|
|
1943
|
+
...(taskTypeNames.length > 0 && { types: taskTypeNames }),
|
|
1787
1944
|
...(assigneeIds.length > 0 && { assigneeIds }),
|
|
1788
1945
|
...(reporterIds.length > 0 && { reporterIds }),
|
|
1789
1946
|
...(priorities.length > 0 && { priorities }),
|
|
@@ -1934,6 +2091,8 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
1934
2091
|
this.taskBoardService.refresh$.subscribe(async () => {
|
|
1935
2092
|
await this.taskResolveHandler();
|
|
1936
2093
|
await this.getResources();
|
|
2094
|
+
this.refreshNonce.update((value) => value + 1);
|
|
2095
|
+
this.schedulerComponent()?.refresh();
|
|
1937
2096
|
});
|
|
1938
2097
|
}
|
|
1939
2098
|
async getPageTitle() {
|
|
@@ -2100,8 +2259,22 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
2100
2259
|
return 0;
|
|
2101
2260
|
}
|
|
2102
2261
|
}
|
|
2103
|
-
handleContextMenuItemClick(event) {
|
|
2104
|
-
|
|
2262
|
+
async handleContextMenuItemClick(event) {
|
|
2263
|
+
const command = event.item.data?.command;
|
|
2264
|
+
const provider = this.currentTask()?.provider ?? '';
|
|
2265
|
+
try {
|
|
2266
|
+
if (command) {
|
|
2267
|
+
await this.taskBoardService.executeCommand(command, provider);
|
|
2268
|
+
}
|
|
2269
|
+
}
|
|
2270
|
+
catch (error) {
|
|
2271
|
+
console.error('[TaskBoard] Context menu command failed:', error);
|
|
2272
|
+
}
|
|
2273
|
+
finally {
|
|
2274
|
+
if (command) {
|
|
2275
|
+
this.taskBoardService.requestRefresh(provider || undefined);
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2105
2278
|
}
|
|
2106
2279
|
changeDate(forward) {
|
|
2107
2280
|
const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);
|
|
@@ -2210,7 +2383,7 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
2210
2383
|
handleTaskTypeSelectionChange(selectedValues) {
|
|
2211
2384
|
// Convert single value to array if needed (for radio mode)
|
|
2212
2385
|
const values = Array.isArray(selectedValues) ? selectedValues : selectedValues ? [selectedValues] : [];
|
|
2213
|
-
// If nothing is selected, pass empty array to
|
|
2386
|
+
// If nothing is selected, pass empty array to mean "all task types".
|
|
2214
2387
|
this.vm.setSelectedTaskTypeNames(values, this.isQueryParam());
|
|
2215
2388
|
}
|
|
2216
2389
|
handleCalendarEventTypeSelectionChange(selectedValues) {
|
|
@@ -2298,11 +2471,11 @@ class AXMTaskBoardPage extends AXPPageLayoutBaseComponent {
|
|
|
2298
2471
|
provide: AXPPageLayoutBase,
|
|
2299
2472
|
useExisting: AXMTaskBoardPage,
|
|
2300
2473
|
},
|
|
2301
|
-
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true, isSignal: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, isSignal: true }, { propertyName: "sidebarCalendar", first: true, predicate: ["sidebarCalendar"], descendants: true, isSignal: true }, { propertyName: "contextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-layout-start-side\n class=\"ax-border-e ax-lightest-surface ax-h-full ax-min-w-0\"\n [style.width]=\"sidebarCollapsed() ? 'auto' : null\"\n >\n <axp-layout-header\n class=\"ax-flex !ax-flex-row ax-items-center ax-gap-2\"\n [class.ax-justify-center]=\"sidebarCollapsed()\"\n [class.ax-border-b]=\"!sidebarCollapsed()\"\n >\n @if (!sidebarCollapsed()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'sidebar' }\"></ng-container>\n }\n <ax-button look=\"blank\" color=\"neutral\" (onClick)=\"toggleSidebar()\" [iconOnly]=\"true\">\n <ax-icon [icon]=\"sidebarCollapsed() ? 'fa-light fa-chevrons-right' : 'fa-light fa-chevrons-left'\"></ax-icon>\n </ax-button>\n </axp-layout-header>\n\n @if (!sidebarCollapsed()) {\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\">\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <ax-calendar\n #sidebarCalendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\"\n [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n </ax-calendar>\n </div>\n\n <div axAccordionGroup [accordion]=\"false\">\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarFilterTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n <div axAccordionItemContent>\n <axm-task-board-filters #filtersComponent [isQueryParam]=\"isQueryParam()\"></axm-task-board-filters>\n </div>\n </div>\n @if (!isNonCalendarView()) {\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarEventTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n @if (calendarEventTypeItems().length > 0) {\n <div axAccordionItemContent>\n <div class=\"ax-pt-2\">\n <ax-selection-list\n [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"selectedCalendarEventTypeValues()\"\n (onValueChanged)=\"handleCalendarEventTypeSelectionChange($event.value)\"\n direction=\"vertical\"\n [multiple]=\"true\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </axp-layout-content>\n }\n </axp-layout-start-side>\n <axp-page-toolbar>\n <axp-layout-prefix class=\"sm:ax-flex-row ax-flex-col ax-items-start\">\n <div class=\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover> -->\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix>\n @if (deviceService.isSmall()) {\n <ax-button id=\"axp-toolbar-btn-filters\" (onClick)=\"toggleStartSide()\" [iconOnly]=\"true\" [color]=\"'default'\">\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n <!-- @if (!deviceService.isSmall()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'toolbar' }\"></ng-container>\n } -->\n\n <!-- @if(deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n } -->\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2\">\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\"\n [tasks]=\"resolvedTasks()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-kanban-view>\n } @case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-grid-view>\n } @case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-status-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\"\n [startingDate]=\"vm.currentDate()\"\n [dataSource]=\"schedulerDataSource\"\n (onTaskClick)=\"vm.selectTask($event)\"\n [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\"\n (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n } }\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n } } @else {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<ng-template #viewSelectorTemplate let-location=\"location\">\n @if (location === 'sidebar') {\n <ax-button\n class=\"ax-grow\"\n [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\"\n >\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #sidebarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n } @else {\n <ax-button [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\">\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #toolbarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n }\n</ng-template>\n\n<ng-template #dayCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<ng-template #monthCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? '' }}</span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n", styles: ["html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
|
|
2474
|
+
], viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true, isSignal: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, isSignal: true }, { propertyName: "sidebarCalendar", first: true, predicate: ["sidebarCalendar"], descendants: true, isSignal: true }, { propertyName: "contextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-layout-start-side\n class=\"ax-border-e ax-lightest-surface ax-h-full ax-min-w-0\"\n [style.width]=\"sidebarCollapsed() ? 'auto' : null\"\n >\n <axp-layout-header\n class=\"ax-flex !ax-flex-row ax-items-center ax-gap-2\"\n [class.ax-justify-center]=\"sidebarCollapsed()\"\n [class.ax-border-b]=\"!sidebarCollapsed()\"\n >\n @if (!sidebarCollapsed()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'sidebar' }\"></ng-container>\n }\n <ax-button look=\"blank\" color=\"neutral\" (onClick)=\"toggleSidebar()\" [iconOnly]=\"true\">\n <ax-icon [icon]=\"sidebarCollapsed() ? 'fa-light fa-chevrons-right' : 'fa-light fa-chevrons-left'\"></ax-icon>\n </ax-button>\n </axp-layout-header>\n\n @if (!sidebarCollapsed()) {\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\">\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <ax-calendar\n #sidebarCalendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\"\n [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n </ax-calendar>\n </div>\n\n <div axAccordionGroup [accordion]=\"false\">\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarFilterTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n <div axAccordionItemContent>\n <axm-task-board-filters #filtersComponent [isQueryParam]=\"isQueryParam()\"></axm-task-board-filters>\n </div>\n </div>\n @if (!isNonCalendarView()) {\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarEventTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n @if (calendarEventTypeItems().length > 0) {\n <div axAccordionItemContent>\n <div class=\"ax-pt-2\">\n <ax-selection-list\n [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"selectedCalendarEventTypeValues()\"\n (onValueChanged)=\"handleCalendarEventTypeSelectionChange($event.value)\"\n direction=\"vertical\"\n [multiple]=\"true\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </axp-layout-content>\n }\n </axp-layout-start-side>\n <axp-page-toolbar>\n <axp-layout-prefix class=\"sm:ax-flex-row ax-flex-col ax-items-start\">\n <div class=\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover> -->\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix>\n @if (deviceService.isSmall()) {\n <ax-button id=\"axp-toolbar-btn-filters\" (onClick)=\"toggleStartSide()\" [iconOnly]=\"true\" [color]=\"'default'\">\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n <!-- @if (!deviceService.isSmall()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'toolbar' }\"></ng-container>\n } -->\n\n <!-- @if(deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n } -->\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2\">\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\"\n [tasks]=\"resolvedTasks()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-kanban-view>\n } @case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-grid-view>\n } @case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-status-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\"\n [startingDate]=\"vm.currentDate()\"\n [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\"\n (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n } }\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n } } @else {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<ng-template #viewSelectorTemplate let-location=\"location\">\n @if (location === 'sidebar') {\n <ax-button\n class=\"ax-grow\"\n [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\"\n >\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #sidebarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n } @else {\n <ax-button [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\">\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #toolbarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n }\n</ng-template>\n\n<ng-template #dayCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<ng-template #monthCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? '' }}</span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n", styles: ["html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type:
|
|
2302
2475
|
//
|
|
2303
2476
|
AXMenuModule }, { kind: "component", type: i3$1.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color"], outputs: ["onClick"] }, { kind: "component", type: i3$1.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn", "closeOn", "items", "hasArrow"], outputs: ["onItemClick"] }, { kind: "component", type: i3$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening", "onClose"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i6.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i7.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i8.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXAccordionModule }, { kind: "ngmodule", type: AXAccordionCdkModule }, { kind: "directive", type: i9.AXAccordionGroupDirective, selector: "[axAccordionGroup]", inputs: ["accordion", "activeIndex", "collapsedOnItemClick"], exportAs: ["axAccordionGroup"] }, { kind: "directive", type: i9.AXAccordionItemContentDirective, selector: "[axAccordionItemContent]", inputs: ["transition"], exportAs: ["axAccordionItemContent"] }, { kind: "directive", type: i9.AXAccordionItemHeaderDirective, selector: "[axAccordionItemHeader]", exportAs: ["axAccordionItemHeader"] }, { kind: "directive", type: i9.AXAccordionItemDirective, selector: "[axAccordionItem]", inputs: ["isCollapsed"], outputs: ["isCollapsedChange", "onClick"], exportAs: ["axAccordionItem"] }, { kind: "component", type:
|
|
2304
2477
|
//
|
|
2305
|
-
AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXMTaskBoardCalendarViewComponent, selector: "axm-task-board-calendar-view", inputs: ["resources", "startingDate", "selectedView", "dataSource"], outputs: ["onTaskClick", "onTaskChanged", "onMonthSlotDblClicked", "onActionClick", "component", "onTaskRightClick", "onRangeChanged"] }, { kind: "component", type: AXMTaskBoardKanbanViewComponent, selector: "axm-task-board-kanban-view", inputs: ["tasks"], outputs: ["tasksChange", "onTaskClick", "onTaskChanged", "component", "onActionClick"] }, { kind: "component", type: AXMTaskBoardGridViewComponent, selector: "axm-task-board-grid-view", inputs: ["dataSource"], outputs: ["onTaskClick", "onActionClick"] }, { kind: "component", type: AXMTaskBoardStatusGroupedGridViewComponent, selector: "axm-task-board-status-grouped-grid-view", inputs: ["provider", "dataSource"], outputs: ["onActionClick"] }, { kind: "component", type: AXMTaskBoardDetailPanel, selector: "axm-task-board-detail-panel" }, { kind: "component", type: AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: AXCalendarComponent, selector: "ax-calendar", inputs: ["rtl", "readonly", "value", "name", "disabled", "depth", "activeView", "minValue", "maxValue", "disabledDates", "holidayDates", "type", "dayCellTemplate", "monthCellTemplate", "yearCellTemplate", "cellClass", "showNavigation", "count", "id", "weekend", "weekdays"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }, { kind: "component", type: AXMTaskBoardFiltersComponent, selector: "axm-task-board-filters", inputs: ["isQueryParam"], outputs: ["applyClicked"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXSelectionListModule }, { kind: "component", type: i10.AXSelectionListComponent, selector: "ax-selection-list", inputs: ["id", "name", "disabled", "readonly", "tabIndex", "size", "value", "valueField", "textField", "disabledField", "readonlyField", "multiple", "direction", "customTemplate", "showControl", "items", "look"], outputs: ["onValueChanged", "onBlur", "onFocus"] }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2478
|
+
AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXMTaskBoardCalendarViewComponent, selector: "axm-task-board-calendar-view", inputs: ["resources", "refreshNonce", "startingDate", "selectedView", "dataSource"], outputs: ["onTaskClick", "onTaskChanged", "onMonthSlotDblClicked", "onActionClick", "component", "onTaskRightClick", "onRangeChanged"] }, { kind: "component", type: AXMTaskBoardKanbanViewComponent, selector: "axm-task-board-kanban-view", inputs: ["tasks"], outputs: ["tasksChange", "onTaskClick", "onTaskChanged", "component", "onActionClick"] }, { kind: "component", type: AXMTaskBoardGridViewComponent, selector: "axm-task-board-grid-view", inputs: ["dataSource", "refreshNonce"], outputs: ["onTaskClick", "onActionClick"] }, { kind: "component", type: AXMTaskBoardStatusGroupedGridViewComponent, selector: "axm-task-board-status-grouped-grid-view", inputs: ["provider", "dataSource", "refreshNonce"], outputs: ["onActionClick"] }, { kind: "component", type: AXMTaskBoardDetailPanel, selector: "axm-task-board-detail-panel" }, { kind: "component", type: AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: AXCalendarComponent, selector: "ax-calendar", inputs: ["rtl", "readonly", "value", "name", "disabled", "depth", "activeView", "minValue", "maxValue", "disabledDates", "holidayDates", "type", "dayCellTemplate", "monthCellTemplate", "yearCellTemplate", "cellClass", "showNavigation", "count", "id", "weekend", "weekdays"], outputs: ["onOptionChanged", "valueChange", "onValueChanged", "minValueChange", "maxValueChange", "onBlur", "onFocus", "depthChange", "typeChange", "activeViewChange", "disabledDatesChange", "holidayDatesChange", "onNavigate", "onSlotClick", "countChange"] }, { kind: "component", type: AXMTaskBoardFiltersComponent, selector: "axm-task-board-filters", inputs: ["isQueryParam"], outputs: ["applyClicked"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXSelectionListModule }, { kind: "component", type: i10.AXSelectionListComponent, selector: "ax-selection-list", inputs: ["id", "name", "disabled", "readonly", "tabIndex", "size", "value", "valueField", "textField", "disabledField", "readonlyField", "multiple", "direction", "customTemplate", "showControl", "items", "look"], outputs: ["onValueChanged", "onBlur", "onFocus"] }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2306
2479
|
}
|
|
2307
2480
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMTaskBoardPage, decorators: [{
|
|
2308
2481
|
type: Component,
|
|
@@ -2344,8 +2517,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
2344
2517
|
provide: AXPPageLayoutBase,
|
|
2345
2518
|
useExisting: AXMTaskBoardPage,
|
|
2346
2519
|
},
|
|
2347
|
-
], template: "<axp-page-layout *translate=\"let t\">\n <axp-layout-start-side\n class=\"ax-border-e ax-lightest-surface ax-h-full ax-min-w-0\"\n [style.width]=\"sidebarCollapsed() ? 'auto' : null\"\n >\n <axp-layout-header\n class=\"ax-flex !ax-flex-row ax-items-center ax-gap-2\"\n [class.ax-justify-center]=\"sidebarCollapsed()\"\n [class.ax-border-b]=\"!sidebarCollapsed()\"\n >\n @if (!sidebarCollapsed()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'sidebar' }\"></ng-container>\n }\n <ax-button look=\"blank\" color=\"neutral\" (onClick)=\"toggleSidebar()\" [iconOnly]=\"true\">\n <ax-icon [icon]=\"sidebarCollapsed() ? 'fa-light fa-chevrons-right' : 'fa-light fa-chevrons-left'\"></ax-icon>\n </ax-button>\n </axp-layout-header>\n\n @if (!sidebarCollapsed()) {\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\">\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <ax-calendar\n #sidebarCalendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\"\n [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n </ax-calendar>\n </div>\n\n <div axAccordionGroup [accordion]=\"false\">\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarFilterTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n <div axAccordionItemContent>\n <axm-task-board-filters #filtersComponent [isQueryParam]=\"isQueryParam()\"></axm-task-board-filters>\n </div>\n </div>\n @if (!isNonCalendarView()) {\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarEventTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n @if (calendarEventTypeItems().length > 0) {\n <div axAccordionItemContent>\n <div class=\"ax-pt-2\">\n <ax-selection-list\n [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"selectedCalendarEventTypeValues()\"\n (onValueChanged)=\"handleCalendarEventTypeSelectionChange($event.value)\"\n direction=\"vertical\"\n [multiple]=\"true\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </axp-layout-content>\n }\n </axp-layout-start-side>\n <axp-page-toolbar>\n <axp-layout-prefix class=\"sm:ax-flex-row ax-flex-col ax-items-start\">\n <div class=\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover> -->\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix>\n @if (deviceService.isSmall()) {\n <ax-button id=\"axp-toolbar-btn-filters\" (onClick)=\"toggleStartSide()\" [iconOnly]=\"true\" [color]=\"'default'\">\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n <!-- @if (!deviceService.isSmall()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'toolbar' }\"></ng-container>\n } -->\n\n <!-- @if(deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n } -->\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2\">\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\"\n [tasks]=\"resolvedTasks()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-kanban-view>\n } @case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-grid-view>\n } @case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-status-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\"\n [startingDate]=\"vm.currentDate()\"\n [dataSource]=\"schedulerDataSource\"\n (onTaskClick)=\"vm.selectTask($event)\"\n [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\"\n (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n } }\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n } } @else {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<ng-template #viewSelectorTemplate let-location=\"location\">\n @if (location === 'sidebar') {\n <ax-button\n class=\"ax-grow\"\n [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\"\n >\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #sidebarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n } @else {\n <ax-button [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\">\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #toolbarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n }\n</ng-template>\n\n<ng-template #dayCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<ng-template #monthCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? '' }}</span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n", styles: ["html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\n"] }]
|
|
2520
|
+
], template: "<axp-page-layout *translate=\"let t\">\n <axp-layout-start-side\n class=\"ax-border-e ax-lightest-surface ax-h-full ax-min-w-0\"\n [style.width]=\"sidebarCollapsed() ? 'auto' : null\"\n >\n <axp-layout-header\n class=\"ax-flex !ax-flex-row ax-items-center ax-gap-2\"\n [class.ax-justify-center]=\"sidebarCollapsed()\"\n [class.ax-border-b]=\"!sidebarCollapsed()\"\n >\n @if (!sidebarCollapsed()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'sidebar' }\"></ng-container>\n }\n <ax-button look=\"blank\" color=\"neutral\" (onClick)=\"toggleSidebar()\" [iconOnly]=\"true\">\n <ax-icon [icon]=\"sidebarCollapsed() ? 'fa-light fa-chevrons-right' : 'fa-light fa-chevrons-left'\"></ax-icon>\n </ax-button>\n </axp-layout-header>\n\n @if (!sidebarCollapsed()) {\n <axp-layout-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-y-auto\">\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n <ax-calendar\n #sidebarCalendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\"\n [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n </ax-calendar>\n </div>\n\n <div axAccordionGroup [accordion]=\"false\">\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarFilterTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.title-plural' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarFilterTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n <div axAccordionItemContent>\n <axm-task-board-filters #filtersComponent [isQueryParam]=\"isQueryParam()\"></axm-task-board-filters>\n </div>\n </div>\n @if (!isNonCalendarView()) {\n <div\n class=\"ax-mb-2 ax-w-full ax-border ax-p-2 ax-rounded-lg\"\n axAccordionItem\n #calendarEventTypeAccordion=\"axAccordionItem\"\n >\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-select-none ax-cursor-pointer\"\n axAccordionItemHeader\n >\n <h3 class=\"ax-text-sm ax-font-semibold\">\n {{ ('@task-management:task-board.filter.calendars' | translate | async)! }}\n </h3>\n <ax-icon\n [icon]=\"calendarEventTypeAccordion?.isCollapsed() ? 'fa-light fa-chevron-down' : 'fa-light fa-chevron-up'\"\n class=\"ax-transition-transform\"\n ></ax-icon>\n </div>\n @if (calendarEventTypeItems().length > 0) {\n <div axAccordionItemContent>\n <div class=\"ax-pt-2\">\n <ax-selection-list\n [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"selectedCalendarEventTypeValues()\"\n (onValueChanged)=\"handleCalendarEventTypeSelectionChange($event.value)\"\n direction=\"vertical\"\n [multiple]=\"true\"\n [showControl]=\"true\"\n valueField=\"id\"\n textField=\"text\"\n >\n <ng-template #itemTemplate let-item>\n <div class=\"ax-flex ax-items-center\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span [class]=\"item.icon ? 'ax-ml-2' : ''\">{{ item.text }}</span>\n </div>\n </ng-template>\n </ax-selection-list>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </axp-layout-content>\n }\n </axp-layout-start-side>\n <axp-page-toolbar>\n <axp-layout-prefix class=\"sm:ax-flex-row ax-flex-col ax-items-start\">\n <div class=\"ax-scheduler-header ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"timeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n #calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [cellClass]=\"getCellClass\"\n [ngModel]=\"vm.currentDate()\"\n class=\"ax-single-range-calendar\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\"\n >\n <ax-footer>\n <ax-button\n look=\"link\"\n color=\"primary\"\n [text]=\"todayButtonText()\"\n (onClick)=\"handleTodayClick()\"\n ></ax-button>\n </ax-footer>\n </ax-calendar>\n </div>\n </ax-popover> -->\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix>\n @if (deviceService.isSmall()) {\n <ax-button id=\"axp-toolbar-btn-filters\" (onClick)=\"toggleStartSide()\" [iconOnly]=\"true\" [color]=\"'default'\">\n <i class=\"fa-light fa-bars\"></i>\n </ax-button>\n }\n <!-- @if (!deviceService.isSmall()) {\n <ng-container *ngTemplateOutlet=\"viewSelectorTemplate; context: { location: 'toolbar' }\"></ng-container>\n } -->\n\n <!-- @if(deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"></ax-icon>\n </ax-button>\n } -->\n </axp-layout-suffix>\n </axp-page-toolbar>\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2\">\n @if (isReady()) { @switch(vm.currentViewMode()) { @case('kanban') {\n <axm-task-board-kanban-view\n class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\"\n [tasks]=\"resolvedTasks()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-kanban-view>\n } @case('grid') {\n <axm-task-board-grid-view\n class=\"ax-h-full ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-grid-view>\n } @case('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view\n class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onActionClick)=\"handleContextMenu($event)\"\n ></axm-task-board-status-grouped-grid-view>\n } @default {\n <axm-task-board-calendar-view\n class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\"\n [startingDate]=\"vm.currentDate()\"\n [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"\n [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\"\n (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"\n ></axm-task-board-calendar-view>\n } }\n <ax-context-menu\n #rootContextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n } } @else {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<ng-template #viewSelectorTemplate let-location=\"location\">\n @if (location === 'sidebar') {\n <ax-button\n class=\"ax-grow\"\n [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\"\n >\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #sidebarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, sidebarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n } @else {\n <ax-button [text]=\"('@task-management:task-board.view.' + selectedViewMode().text | translate | async)!\">\n <ax-prefix><ax-icon [icon]=\"selectedViewMode().icon\"></ax-icon></ax-prefix>\n <ax-dropdown-panel #toolbarDropdownPanel>\n <ax-menu [orientation]=\"'vertical'\" class=\"ax-menu-container\">\n @for (category of menuItems(); track category.key) {\n <ng-container>\n @if (category.children && category.children.length > 0) {\n <ax-menu-item>\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n @for (child of category.children; track child.key) {\n <ax-menu-item (onClick)=\"handleViewChange(child.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"child.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.view.' + child.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ax-menu-item>\n } @else {\n <ax-menu-item (onClick)=\"handleViewChange(category.key, toolbarDropdownPanel)\">\n <ax-prefix>\n <ax-icon [icon]=\"category.icon\"></ax-icon>\n </ax-prefix>\n <ax-text>{{ ('@task-management:task-board.' + category.text | translate | async)! }}</ax-text>\n </ax-menu-item>\n }\n </ng-container>\n }\n </ax-menu>\n </ax-dropdown-panel>\n <ax-suffix>\n <ax-icon icon=\"fa-light fa-caret-down\"></ax-icon>\n </ax-suffix>\n </ax-button>\n }\n</ng-template>\n\n<ng-template #dayCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? slot.slot.date?.day ?? '' }}</span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<ng-template #monthCellTemplate let-slot>\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\"\n >\n <span class=\"ax-flex-1 ax-text-center\">{{ slot.slot.text ?? '' }}</span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n", styles: ["html[dir=rtl] axp-page-layout axp-page-toolbar axp-layout-prefix .ax-scheduler-header .arrow-icon:before{-moz-transform:scale(-1,1);-webkit-transform:scale(-1,1);-o-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scaleX(-1)}.ax-single-range-calendar .ax-range-start,.ax-single-range-calendar .ax-range-end{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.85)!important}.ax-single-range-calendar .ax-range-start:hover,.ax-single-range-calendar .ax-range-end:hover{background-color:rgba(var(--ax-sys-color-primary-surface))!important}.ax-single-range-calendar .ax-range-start.ax-state-holiday,.ax-single-range-calendar .ax-range-end.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.85)!important}.ax-single-range-calendar .ax-range-between{color:rgba(var(--ax-sys-color-on-primary-surface))!important;background-color:rgba(var(--ax-sys-color-primary-surface),.65)}.ax-single-range-calendar .ax-range-between.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.65)}.ax-single-range-calendar ax-footer{display:flex;justify-content:center;border-color:rgba(var(--ax-comp-calendar-view-header-border-color));border-top-width:var(--ax-comp-calendar-view-header-border-width, 1px)}axp-page-content:not(:has(axm-task-board-status-grouped-grid-view,axm-task-board-time-grouped-grid-view)){overflow-y:hidden}\n"] }]
|
|
2348
2521
|
}], propDecorators: { popover: [{ type: i0.ViewChild, args: ['popover', { isSignal: true }] }], calendar: [{ type: i0.ViewChild, args: ['calendar', { isSignal: true }] }], sidebarCalendar: [{ type: i0.ViewChild, args: ['sidebarCalendar', { isSignal: true }] }], contextMenu: [{ type: i0.ViewChild, args: ['rootContextMenu', { isSignal: true }] }] } });
|
|
2349
2522
|
|
|
2350
2523
|
export { AXMTaskBoardPage };
|
|
2351
|
-
//# sourceMappingURL=acorex-modules-task-management-task-board.page-
|
|
2524
|
+
//# sourceMappingURL=acorex-modules-task-management-task-board.page-DF4XWz_0.mjs.map
|