@acorex/modules 21.0.0-next.56 → 21.0.0-next.59
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-application-management.mjs +1 -1
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-DcPnI9fZ.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-o8aFazwA.mjs} +72 -78
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-o8aFazwA.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-D880d_qz.mjs → acorex-modules-assessment-management-assessment-case.entity-yrc_Yybq.mjs} +67 -71
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-yrc_Yybq.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BUQa_TSY.mjs +47 -0
- package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BUQa_TSY.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DvbocIN1.mjs → acorex-modules-assessment-management-assessment-session.entity-Cwf30iuu.mjs} +5 -41
- package/fesm2022/acorex-modules-assessment-management-assessment-session.entity-Cwf30iuu.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-BMJ54EPO.mjs → acorex-modules-assessment-management-fill-assessment-session.command-CJieLR5g.mjs} +32 -7
- package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-CJieLR5g.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-index-XdJCIYG3.mjs → acorex-modules-assessment-management-index-D8KjfHAH.mjs} +4 -4
- package/fesm2022/{acorex-modules-assessment-management-index-XdJCIYG3.mjs.map → acorex-modules-assessment-management-index-D8KjfHAH.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-CO8NfjEb.mjs → acorex-modules-assessment-management-preview-question.command-D0-FB1HH.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-CO8NfjEb.mjs.map → acorex-modules-assessment-management-preview-question.command-D0-FB1HH.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-DSzbtU0e.mjs → acorex-modules-assessment-management-preview-questionnaire.command-wqPNgv7q.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-DSzbtU0e.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-wqPNgv7q.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DbvxAUgb.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DYyUhSWd.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DbvxAUgb.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DYyUhSWd.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DBfQhSKR.mjs → acorex-modules-assessment-management-question-bank-item.entity-DUf2ceKY.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DBfQhSKR.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-DUf2ceKY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-CL9s20qR.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-CYF0k42_.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-CL9s20qR.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-CYF0k42_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-CH_cJlSf.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cy5ElBmU.mjs} +111 -28
- package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cy5ElBmU.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrryBMC2.mjs → acorex-modules-assessment-management-questionnaire.entity-RWSkzNbA.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CrryBMC2.mjs.map → acorex-modules-assessment-management-questionnaire.entity-RWSkzNbA.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-Dq5VComh.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-koGmUbNE.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-Dq5VComh.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-koGmUbNE.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-NTuDdoYk.mjs +157 -0
- package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-NTuDdoYk.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-0btGV66_.mjs +172 -0
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-0btGV66_.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-NPUjHz-F.mjs → acorex-modules-auth-acorex-modules-auth-D4IBi_VD.mjs} +42 -33
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-D4IBi_VD.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-h61xNtRT.mjs → acorex-modules-auth-app-chooser.component-BEktaBWD.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-h61xNtRT.mjs.map → acorex-modules-auth-app-chooser.component-BEktaBWD.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-DF5AHqYe.mjs → acorex-modules-auth-login.module-aAwHzXPj.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-DF5AHqYe.mjs.map → acorex-modules-auth-login.module-aAwHzXPj.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-00ZTMhc3.mjs → acorex-modules-auth-master.layout-BapDYFZ_.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-00ZTMhc3.mjs.map → acorex-modules-auth-master.layout-BapDYFZ_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-Ce5Fw8Qd.mjs → acorex-modules-auth-oauth-callback.component-Cyu2vqyK.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-Ce5Fw8Qd.mjs.map → acorex-modules-auth-oauth-callback.component-Cyu2vqyK.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-DQYCm8wg.mjs → acorex-modules-auth-password.component-DB-ac0Rn.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-DQYCm8wg.mjs.map → acorex-modules-auth-password.component-DB-ac0Rn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-CU0AY-Ia.mjs → acorex-modules-auth-password.component-cPmwNpuq.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-CU0AY-Ia.mjs.map → acorex-modules-auth-password.component-cPmwNpuq.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-CM4fRaWb.mjs → acorex-modules-auth-routes-r72zIRTa.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-CM4fRaWb.mjs.map → acorex-modules-auth-routes-r72zIRTa.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-BBztdcvq.mjs → acorex-modules-auth-tenant-chooser.component-AQA2o6Ty.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-BBztdcvq.mjs.map → acorex-modules-auth-tenant-chooser.component-AQA2o6Ty.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-C9AafF86.mjs → acorex-modules-auth-two-factor.module-Dx0CC5ic.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-C9AafF86.mjs.map → acorex-modules-auth-two-factor.module-Dx0CC5ic.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-user-sessions.component-Qw2sgsEe.mjs → acorex-modules-auth-user-sessions.component-3Wr7DUDQ.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-user-sessions.component-Qw2sgsEe.mjs.map → acorex-modules-auth-user-sessions.component-3Wr7DUDQ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/{acorex-modules-common-audit-info-column.component-SiqKcBMQ.mjs → acorex-modules-common-audit-info-column.component-MSYPMPZJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-common-audit-info-column.component-SiqKcBMQ.mjs.map → acorex-modules-common-audit-info-column.component-MSYPMPZJ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-common.mjs +8 -4
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-UNhA-qi5.mjs → acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs} +344 -1008
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Be58gcns.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Be58gcns.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-comments-page.component-3XBLeMW8.mjs → acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-comments-page.component-3XBLeMW8.mjs.map → acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CSu-lJuu.mjs → acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CSu-lJuu.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-CyoncQB1.mjs → acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-CyoncQB1.mjs.map → acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +1 -1
- package/fesm2022/acorex-modules-customer-management.mjs +2 -0
- package/fesm2022/acorex-modules-customer-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +6 -5
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-Bfjo-ENr.mjs → acorex-modules-help-desk-acorex-modules-help-desk-DVlO9JZw.mjs} +3 -2
- package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-DVlO9JZw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CsACFkPq.mjs → acorex-modules-help-desk-capture-screen.component-rNPehEf8.mjs} +2 -2
- package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CsACFkPq.mjs.map → acorex-modules-help-desk-capture-screen.component-rNPehEf8.mjs.map} +1 -1
- package/fesm2022/acorex-modules-help-desk.mjs +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-XhV2JQXs.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs} +131 -112
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Cre30Kp7.mjs → acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Cre30Kp7.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-NYgddiaD.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-NYgddiaD.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DPh-KQgN.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DPh-KQgN.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-znCbbQUd.mjs → acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs} +8 -8
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-DUNB3zAB.mjs → acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-DUNB3zAB.mjs.map → acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-JyFrrCGE.mjs → acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-JyFrrCGE.mjs.map → acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-B61MiEPu.mjs → acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-B61MiEPu.mjs.map → acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-lifecycle-process-type.entity-DJqo2kTG.mjs → acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs} +13 -13
- package/fesm2022/acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employee-lifecycle-process.entity-LX68KORg.mjs → acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs} +45 -56
- package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-CKCC6bKg.mjs → acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-CKCC6bKg.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Blv08UQZ.mjs → acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Blv08UQZ.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-lgEAbxYH.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-lgEAbxYH.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs +237 -0
- package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs.map +1 -0
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/{acorex-modules-learning-management-enrollment.entity-B53AQq_9.mjs → acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs} +4 -22
- package/fesm2022/acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs.map +1 -0
- package/fesm2022/acorex-modules-learning-management.mjs +1 -1
- package/fesm2022/acorex-modules-learning-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-locale-management.mjs +27 -22
- package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-location-management.mjs +1 -0
- package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
- package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-5DJoQkx2.mjs → acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs} +4 -4
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-5DJoQkx2.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-C3WBYbOt.mjs → acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-C3WBYbOt.mjs.map → acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +3 -0
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Di6Sxtq3.mjs → acorex-modules-settings-management-acorex-modules-settings-management-B4Ee8USF.mjs} +6 -6
- package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Di6Sxtq3.mjs.map → acorex-modules-settings-management-acorex-modules-settings-management-B4Ee8USF.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-Bml5VZUT.mjs → acorex-modules-settings-management-permission-definition.provider-nNhEFyc-.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-Bml5VZUT.mjs.map → acorex-modules-settings-management-permission-definition.provider-nNhEFyc-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-page.component-lN-7sTpD.mjs → acorex-modules-settings-management-setting-page.component-CEvWwS_a.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-setting-page.component-lN-7sTpD.mjs.map → acorex-modules-settings-management-setting-page.component-CEvWwS_a.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-D17G4RNQ.mjs → acorex-modules-settings-management-setting-view.component-C6ftmjuK.mjs} +2 -2
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-D17G4RNQ.mjs.map → acorex-modules-settings-management-setting-view.component-C6ftmjuK.mjs.map} +1 -1
- package/fesm2022/acorex-modules-settings-management.mjs +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-LQn5gZ6p.mjs → acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs} +32 -2
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs.map +1 -0
- package/fesm2022/{acorex-modules-task-management-task-board.page-BokG-G6Z.mjs → acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs} +35 -5
- package/fesm2022/acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +1 -1
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-OLbCD-7P.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs} +3 -3
- package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-OLbCD-7P.mjs.map → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-index-BxqOP8AA.mjs → acorex-modules-workflow-management-index-BhVZ1Bcw.mjs} +104 -23
- package/fesm2022/acorex-modules-workflow-management-index-BhVZ1Bcw.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs → acorex-modules-workflow-management-index-DC_9M9dk.mjs} +3 -3
- package/fesm2022/{acorex-modules-workflow-management-index-Eh5DDK-V.mjs.map → acorex-modules-workflow-management-index-DC_9M9dk.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs} +2 -2
- package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-B_V3uMSI.mjs.map → acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs.map} +1 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DjYDwHWU.mjs +255 -0
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DjYDwHWU.mjs.map +1 -0
- package/fesm2022/acorex-modules-workflow-management.mjs +1819 -745
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-assessment-management.d.ts +4 -7
- package/types/acorex-modules-common.d.ts +1 -0
- package/types/acorex-modules-conversation.d.ts +35 -198
- package/types/acorex-modules-human-capital-management.d.ts +31 -30
- package/types/acorex-modules-learning-management.d.ts +0 -1
- package/types/acorex-modules-task-management.d.ts +41 -2
- package/types/acorex-modules-workflow-management.d.ts +280 -34
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DcPnI9fZ.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-D880d_qz.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-assessment-session.entity-DvbocIN1.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-BMJ54EPO.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-CH_cJlSf.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-DpppXekm.mjs +0 -112
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-DpppXekm.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-NPUjHz-F.mjs.map +0 -1
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-UNhA-qi5.mjs.map +0 -1
- package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-Bfjo-ENr.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-XhV2JQXs.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee-lifecycle-process.entity-LX68KORg.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-znCbbQUd.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-lifecycle-process-type.entity-DJqo2kTG.mjs.map +0 -1
- package/fesm2022/acorex-modules-learning-management-enrollment.entity-B53AQq_9.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-LQn5gZ6p.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-BokG-G6Z.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-index-BxqOP8AA.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DMszilef.mjs +0 -356
- package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-DMszilef.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-report-management.mjs","sources":["../../../../libs/modules/report-management/src/lib/const.ts","../../../../libs/modules/report-management/src/lib/features.keys.ts","../../../../libs/modules/report-management/src/lib/menu.keys.ts","../../../../libs/modules/report-management/src/lib/manifest.ts","../../../../libs/modules/report-management/src/lib/permission.keys.ts","../../../../libs/modules/report-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/report-management/src/lib/menu.provider.ts","../../../../libs/modules/report-management/src/lib/entity.provider.ts","../../../../libs/modules/report-management/src/lib/feature-definition.provider.ts","../../../../libs/modules/report-management/src/lib/report-management.module.ts","../../../../libs/modules/report-management/src/lib/reports/report.types.ts","../../../../libs/modules/report-management/src/lib/reports/report-viewer.service.ts","../../../../libs/modules/report-management/src/lib/reports/report-mapper.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/report-viewer.viewmodel.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.html","../../../../libs/modules/report-management/src/acorex-modules-report-management.ts"],"sourcesContent":["const config = {\n i18n: 'report-management',\n module: 'ReportManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'report-management',\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-chart-bar',\n },\n entities: {\n dataSet: {\n name: 'DataSet',\n title: `t(\"dataSet\", { scope: \"${config.i18n}\" })`,\n titlePlural: `t(\"dataSetPlural\", { scope: \"${config.i18n}\" })`,\n icon: 'fa-light fa-default',\n },\n category: {\n name: 'Category',\n fullName: `${config.module}.Category`,\n title: `@${config.i18n}:reports.entities.category.title`,\n titlePlural: `@${config.i18n}:reports.entities.category.plural`,\n icon: 'fa-light fa-folder',\n },\n report: {\n name: 'Report',\n fullName: `${config.module}.Report`,\n title: `@${config.i18n}:reports.entities.report.title`,\n titlePlural: `@${config.i18n}:reports.entities.report.plural`,\n icon: 'fa-light fa-file-chart-pie',\n },\n },\n};\n","export const AXPReportManagementFeatureKeys = {\n ReportBuilder: 'ReportManagement:Feature:ReportBuilder',\n SavedReports: 'ReportManagement:Feature:SavedReports',\n ScheduledReports: 'ReportManagement:Feature:ScheduledReports',\n BackgroundReports: 'ReportManagement:Feature:BackgroundReports',\n} as const;\n\n","export const AXPReportManagementMenuKeys = {\n Root: 'report-management:menu',\n Reports: 'report-management:menu:reports',\n Categories: 'report-management:menu:categories',\n DataSets: 'report-management:menu:data-sets',\n} as const;\n\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Report Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const ReportManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n required : true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","export const AXMPermissionsKeys = {\n ReportManagement: {\n Management: 'ReportManagement:Permission:Management',\n Report: {\n Management: 'ReportManagement:Permission:Report.Management',\n View: 'ReportManagement:Permission:Report.View',\n Create: 'ReportManagement:Permission:Report.Create',\n Update: 'ReportManagement:Permission:Report.Update',\n Delete: 'ReportManagement:Permission:Report.Delete',\n },\n Category: {\n Management: 'ReportManagement:Permission:Category.Management',\n View: 'ReportManagement:Permission:Category.View',\n Create: 'ReportManagement:Permission:Category.Create',\n Update: 'ReportManagement:Permission:Category.Update',\n Delete: 'ReportManagement:Permission:Category.Delete',\n },\n },\n};\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, Injector } from '@angular/core';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n\n constructor(private injector: Injector) {}\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMPermissionsKeys.ReportManagement;\n const trans = async (key: string) => await this.translateService.translateAsync(key);\n\n context\n .addGroup(RootConfig.module.name, await trans('@report-management:module.menus.root.title'))\n // Reports Management\n .addPermission(keys.Report.Management, await trans('@report-management:reports.permissions.reports.title'))\n .addChild(keys.Report.View, await trans('@report-management:reports.permissions.reports.actions.view.title'))\n .addChild(keys.Report.Create, await trans('@report-management:reports.permissions.reports.actions.create.title'))\n .addChild(keys.Report.Update, await trans('@report-management:reports.permissions.reports.actions.update.title'))\n .addChild(keys.Report.Delete, await trans('@report-management:reports.permissions.reports.actions.delete.title'))\n .endPermission()\n // Categories Management\n .addPermission(keys.Category.Management, await trans('@report-management:reports.permissions.categories.title'))\n .addChild(keys.Category.View, await trans('@report-management:reports.permissions.categories.actions.view.title'))\n .addChild(keys.Category.Create, await trans('@report-management:reports.permissions.categories.actions.create.title'))\n .addChild(keys.Category.Update, await trans('@report-management:reports.permissions.categories.actions.update.title'))\n .addChild(keys.Category.Delete, await trans('@report-management:reports.permissions.categories.actions.delete.title'))\n .endPermission()\n .endGroup();\n }\n}\n\n","import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPReportManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n context.addItems([\n {\n name: AXPReportManagementMenuKeys.Reports,\n text: RootConfig.entities.report.titlePlural,\n path: `${this.sessionService.application?.name}/${module.route}/reports`,\n icon: RootConfig.entities.report.icon,\n priority: 900001,\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.ReportManagement.Report.View],\n },\n },\n ]);\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPEntityDefinitionLoader,\n AXPEntityDefinitionPreloader,\n AXPEntityPreloadEntity,\n} from '@acorex/platform/layout/entity';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader {\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n // Simulate report entity definition\n if (moduleName == RootConfig.module.name && entityName == RootConfig.entities.report.name) {\n return {\n name: \"Report\",\n module: \"ReportManagement\",\n title: \"Report Management\",\n formats: {\n individual: \"Report Management\",\n plural: \"Report Management\",\n },\n properties: [],\n } as AXPEntity;\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex/platform/core';\nimport { AXPReportManagementFeatureKeys } from './features.keys';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Report Management Feature Definition Provider.\n * Provides feature definitions for the Report Management module.\n */\nexport class AXPReportManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Report Builder feature\n context.addFeature(AXPReportManagementFeatureKeys.ReportBuilder, {\n title: '@report-management:features.report-builder.title',\n description: '@report-management:features.report-builder.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Saved Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.SavedReports, {\n title: '@report-management:features.saved-reports.title',\n description: '@report-management:features.saved-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Scheduled Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.ScheduledReports, {\n title: '@report-management:features.scheduled-reports.title',\n description: '@report-management:features.scheduled-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Background Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.BackgroundReports, {\n title: '@report-management:features.background-reports.title',\n description: '@report-management:features.background-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex/platform/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { ReportManagementManifest } from './manifest';\nimport { AXPDomainModule } from '@acorex/platform/domain';\nimport { provideEntity } from '@acorex/platform/layout/entity';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { RootConfig } from './const';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\n\n// Entity Modules\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXPReportManagementFeatureDefinitionProvider } from './feature-definition.provider';\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: `:app/${RootConfig.module.route}/viewer`,\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: ':reportId',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n {\n path: '',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n {\n path: `:app/${RootConfig.module.route}/reports`,\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: '**',\n loadComponent: () =>\n import('./features/report-runner/report-runner-root-page/report-runner-root-page.component').then(\n (c) => c.AXMReportRunnerRootPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [\n AXPDomainModule,\n // Entity Modules\n ],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: ReportManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXPReportManagementFeatureDefinitionProvider,\n multi: true,\n },\n ],\n})\nexport class AXMReportManagementModule { }\n","//#region ---- Imports ----\n\nimport { AXPQuerySort } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPCategoryEntity,\n AXPExportOptions,\n AXPFilterClause,\n AXPSystemActionType,\n} from '@acorex/platform/core';\nimport { AXPWidgetColumnNode, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPCommand } from '@acorex/platform/runtime';\n\n//#endregion\n\n//#region ---- Core Report Types and Interfaces ----\n\nexport type AXPReportLayoutType = 'table' | 'chart' | 'cards' | 'custom' | 'pdf';\n\n/**\n * Report Category - Extends AXPCategoryEntity for consistency and performance\n *\n * Inherited properties from AXPCategoryEntity:\n * - id: string - Unique identifier\n * - title: string - Display name\n * - description?: string - Category description\n * - parentId?: string - Parent category ID\n * - childrenCount: number - Direct child categories count (enables lazy loading)\n * - itemsCount?: number - Direct reports count (replaces hasReport boolean)\n * - totalChildrenCount?: number - Total nested categories (optional, for analytics)\n * - totalItemsCount?: number - Total reports in tree (optional, for analytics)\n *\n * Performance benefits:\n * - Lazy loading support (childrenCount > 0 shows expand icon)\n * - Report count display (itemsCount shows \"5 reports\" badge)\n * - Efficient queries (no need to query to know if expandable)\n */\nexport interface AXPReportCategory extends AXPCategoryEntity {\n // No additional properties needed - all inherited from AXPCategoryEntity\n // Use: childrenCount instead of hasChild\n // Use: itemsCount instead of hasReport\n}\n\nexport interface AXPReportDefinition {\n id: string;\n title: string;\n description?: string;\n categoryIds: string[];\n parameterGroups: AXPReportParameterGroup[];\n permissions?: string[];\n layouts: AXPReportLayoutDefinition[]; // Changed to support multiple layouts\n defaultLayoutId: string; // Which layout to show by default\n}\n\nexport type AXPReportLayoutAction = AXPActionMenuItem & {\n priority: 'primary' | 'secondary';\n};\n\n/**\n * Layout Definition - Associates a layout with metadata\n */\nexport interface AXPReportLayoutDefinition {\n id: string; // Unique identifier for this layout\n title: string; // Display name (e.g., \"Table View\", \"Chart View\")\n description?: string; // Optional description\n icon?: string; // Icon for layout switcher UI\n layout: AXPReportLayout; // The actual layout configuration\n dataSource?: AXPReportDataSource; // Optional layout-specific dataSource (overrides report-level)\n isDefault?: boolean; // Alternative to defaultLayoutId\n actions?: AXPReportLayoutAction[];\n export?: AXPExportOptions;\n}\n\nexport interface AXPReportParameterGroup {\n name: string;\n title: string;\n description?: string;\n parameters: AXPReportParameter[];\n}\n\nexport interface AXPReportParameter {\n path: string;\n title: string;\n description?: string;\n widget: AXPWidgetNode;\n}\n\n//#endregion\n\n//#region ---- Data Source Types ----\n\nexport type AXPReportDataSource =\n | AXPQueryDataSource\n | AXPCustomDataSource\n | AXPAggregatedDataSource\n | AXPTransformedDataSource;\n\n/**\n * Query Data Source - Used for executing predefined queries (AXPQuery)\n */\nexport interface AXPQueryDataSource {\n type: 'query';\n name: string; // The registered query name, e.g., 'getEmployeeList'\n description?: string;\n\n inputs?: AXPReportParameterBinding[]; // Maps report parameters to query inputs\n sortFields?: AXPQuerySort[]; // Default sorting applied by the backend\n pagination?: boolean; // Enables paging in result set\n}\n\n/**\n * Custom Data Source - Used for fetching data from custom providers like REST APIs or external services\n */\nexport interface AXPCustomDataSource {\n type: 'custom';\n provider: string; // Example: 'http://api/report' or 'custom:MyHandler'\n description?: string;\n\n inputs?: AXPReportParameterBinding[]; // Maps report parameters to payload\n options?: { [key: string]: any }; // Additional options for the custom handler\n}\n\n/**\n * Parameter Binding - Maps report-level parameters to actual query/command input structure\n */\nexport interface AXPReportParameterBinding {\n parameterKey: string; // Report parameter key, e.g., 'startDate'\n bindTo: string; // Input key in the query/command payload, e.g., 'filters.from'\n}\n\n/**\n * Aggregated Data Source - Used for pre-aggregated data optimized for charts\n */\nexport interface AXPAggregatedDataSource {\n type: 'aggregated';\n baseQuery: string; // Base query to aggregate from\n description?: string;\n\n groupBy: string[]; // Fields to group by\n aggregations: AXPAggregation[]; // Aggregation operations\n inputs?: AXPReportParameterBinding[];\n}\n\n/**\n * Transformed Data Source - Applies transformations to existing data sources\n */\nexport interface AXPTransformedDataSource {\n type: 'transformed';\n baseDataSource: AXPReportDataSource; // Source to transform\n description?: string;\n\n transformations: AXPDataTransformation[]; // List of transformations\n inputs?: AXPReportParameterBinding[];\n}\n\n/**\n * Aggregation operation for aggregated data sources\n */\nexport interface AXPAggregation {\n field: string;\n operation: 'sum' | 'avg' | 'count' | 'min' | 'max' | 'distinct';\n alias?: string; // Output field name\n}\n\n/**\n * Data transformation operation\n */\nexport interface AXPDataTransformation {\n type: 'filter' | 'sort' | 'group' | 'pivot' | 'format';\n config: Record<string, any>; // Transformation-specific configuration\n}\n\n//#endregion\n\n//#region ---- Layout Types ----\n\nexport type AXPReportLayout = AXPReportTableLayout | AXPReportChartLayout | AXPReportPdfLayout;\n\n/**\n * Table Layout - Displays data in tabular format\n */\n\nexport interface AXPReportTableLayoutRowAction extends AXPActionMenuItem {\n priority: 'primary' | 'secondary';\n type: AXPSystemActionType | string;\n default?: boolean;\n}\n\nexport interface AXPReportTableLayout {\n type: 'table';\n columns: AXPReportColumn[];\n actions?: AXPReportTableLayoutRowAction[];\n options?: AXPTableOptions;\n groupBy?: string[];\n conditionalFormatting?: AXPConditionalFormatRule[];\n summary?: AXPReportSummaryOptions[];\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\nexport interface AXPTableOptions {\n pagination?: boolean;\n stickyHeader?: boolean;\n stripedRows?: boolean;\n sorting?: AXPQuerySort[];\n selectable?: {\n mode: 'single' | 'multiple' | 'none';\n };\n}\n\n/**\n * Chart Layout - Displays data in various chart formats\n */\nexport interface AXPReportChartLayout {\n type: 'chart';\n options: AXPReportChartOptions;\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\nexport interface AXPReportChartOptions {\n chartType: 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'radar' | 'mixed';\n dataMapping: AXPChartDataMapping;\n styling?: AXPChartStyling;\n interactivity?: AXPChartInteractivity;\n}\n\n/**\n * Chart Data Mapping Configuration\n */\nexport interface AXPChartDataMapping {\n // Core fields\n xField: string; // X-axis data field\n yFields: string | string[]; // Y-axis data field(s) for multiple series\n\n // Grouping and categorization\n groupBy?: string; // Group data by this field\n seriesField?: string; // Field to create multiple series\n\n // Special fields for specific chart types\n sizeField?: string; // For bubble charts\n colorField?: string; // For gradient/conditional coloring\n labelField?: string; // Custom label field\n\n // Data aggregation\n aggregation?: {\n method: 'sum' | 'avg' | 'count' | 'min' | 'max';\n field: string;\n };\n}\n\n/**\n * Chart Visual Styling Configuration\n */\nexport interface AXPChartStyling {\n // Theme and colors\n colorScheme?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'custom';\n customColors?: string[];\n\n // Chart appearance\n gridLines?: boolean;\n legend?: {\n show: boolean;\n position: 'top' | 'bottom' | 'left' | 'right';\n };\n\n // Axes configuration\n xAxis?: AXPChartAxisConfig;\n yAxis?: AXPChartAxisConfig;\n\n // Animation\n animation?: {\n enabled: boolean;\n duration?: number;\n };\n\n // Chart-specific styling\n chartSpecific?: {\n // Bar chart options\n bar?: {\n orientation: 'vertical' | 'horizontal';\n mode: 'grouped' | 'stacked';\n barWidth?: number;\n };\n\n // Line chart options\n line?: {\n style: 'straight' | 'curved' | 'stepped';\n showPoints?: boolean;\n tension?: number;\n };\n\n // Area chart options\n area?: {\n mode: 'normal' | 'stacked' | 'percentage';\n opacity?: number;\n };\n\n // Pie/Doughnut options\n pie?: {\n startAngle?: number;\n innerRadius?: number; // For doughnut charts\n showLabels?: boolean;\n };\n };\n}\n\n/**\n * Chart Axis Configuration\n */\nexport interface AXPChartAxisConfig {\n title?: string;\n show?: boolean;\n type?: 'linear' | 'logarithmic' | 'datetime' | 'category';\n min?: number | string;\n max?: number | string;\n format?: string;\n gridLines?: boolean;\n tickInterval?: number;\n}\n\n/**\n * Chart Interactivity Configuration\n */\nexport interface AXPChartInteractivity {\n // Zoom and pan\n zoom?: {\n enabled: boolean;\n mode?: 'x' | 'y' | 'xy';\n };\n\n // Tooltips\n tooltips?: {\n enabled: boolean;\n format?: string;\n showOnHover?: boolean;\n };\n\n // Click events\n onClick?: {\n enabled: boolean;\n action?: 'drill-down' | 'filter' | 'custom';\n };\n\n // Selection\n selection?: {\n enabled: boolean;\n mode?: 'single' | 'multiple';\n };\n\n // Export\n export?: {\n enabled: boolean;\n formats?: ('png' | 'jpg' | 'pdf' | 'svg')[];\n };\n}\n\n/**\n * PDF Layout - Displays PDF documents\n */\nexport interface AXPReportPdfLayout {\n type: 'pdf';\n options?: AXPReportPdfOptions;\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\n/**\n * PDF Layout Options\n */\nexport interface AXPReportPdfOptions {\n showDownloadButton?: boolean;\n showPrintButton?: boolean;\n showZoomControls?: boolean;\n showFullscreenButton?: boolean;\n defaultZoom?: number; // Percentage (e.g., 100, 150, 200)\n height?: string; // CSS height (e.g., '100%', '600px')\n}\n\n//#region ---- Shared Models ----\n\nexport interface AXPReportColumn {\n field: string;\n title?: string;\n visible?: boolean;\n width?: number | 'auto';\n align?: 'left' | 'center' | 'right';\n widget?: AXPWidgetColumnNode;\n}\n\nexport interface AXPReportSummaryOptions {\n field: string;\n operation: 'sum' | 'avg' | 'count' | 'min' | 'max';\n displayIn: 'groupFooter' | 'reportFooter';\n}\n\nexport interface AXPConditionalFormatRule {\n field: string;\n condition: '>' | '<' | '=' | '!=' | 'contains';\n value: any;\n style: {\n color?: string;\n backgroundColor?: string;\n fontWeight?: 'normal' | 'bold';\n };\n}\n\nexport interface AXPReportHeaderFooter {\n title?: string;\n logoUrl?: string;\n showDate?: boolean;\n showParameters?: boolean;\n customHtml?: string;\n}\n\n/**\n * Layout switcher options for UI components\n */\nexport interface AXPLayoutSwitcherOption {\n id: string;\n title: string;\n icon?: string;\n type: AXPReportLayoutType;\n}\n\n/**\n * Runtime layout selection state\n */\nexport interface AXPReportLayoutState {\n reportId: string;\n activeLayoutId: string;\n availableLayouts: AXPLayoutSwitcherOption[];\n}\n\n/**\n * Layout validation result\n */\nexport interface AXPLayoutValidationResult {\n isValid: boolean;\n errors: string[];\n layoutId: string;\n}\n\n/**\n * Data source resolution result for a specific layout\n */\nexport interface AXPLayoutDataSourceResolution {\n layoutId: string;\n dataSource: AXPReportDataSource;\n source: 'layout' | 'report' | 'none'; // Where the dataSource came from\n}\n\n/**\n * Layout execution context with resolved data source\n */\nexport interface AXPLayoutExecutionContext {\n reportId: string;\n layoutId: string;\n dataSource: AXPReportDataSource;\n filters: AXPFilterClause;\n}\n\nexport type AXPExecutionReportResult =\n | { type: 'table'; items: Record<string, unknown>[]; total: number }\n | { type: 'chart'; data: Record<string, unknown> }\n | { type: 'cards'; items: Record<string, unknown>[] }\n | { type: 'custom'; data: unknown }\n | { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n\nexport type AXPExecutionReportCommandResult = AXPReportLayout & { data: AXPExecutionReportResult };\n\nexport interface AXPExecutionReportCommand extends AXPCommand<\n AXPLayoutExecutionContext,\n AXPExecutionReportCommandResult\n> {}\n\n/**\n * Report execution status and metadata\n */\nexport interface AXPReportExecutionStatus {\n reportId: string;\n layoutId: string;\n status: 'pending' | 'executing' | 'completed' | 'failed' | 'cancelled';\n startTime: Date;\n endTime?: Date;\n duration?: number; // milliseconds\n recordCount?: number;\n error?: AXPReportExecutionError;\n}\n\n/**\n * Detailed error information for report execution\n */\nexport interface AXPReportExecutionError {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n stack?: string;\n}\n\n/**\n * Report execution request with options\n */\nexport interface AXPReportExecutionRequest {\n reportId: string;\n layoutId: string;\n parameters: Record<string, unknown>;\n options?: AXPReportExecutionOptions;\n}\n\n/**\n * Options for report execution\n */\nexport interface AXPReportExecutionOptions {\n timeout?: number; // milliseconds\n priority?: 'low' | 'normal' | 'high';\n cache?: boolean;\n cacheTimeout?: number; // seconds\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPReportCategory, AXPReportDefinition, AXPReportLayoutDefinition, AXPReportLayoutType, AXPReportLayoutAction, AXPExecutionReportResult, AXPLayoutExecutionContext, AXPExecutionReportCommandResult } from './report.types';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../const';\n\n//#endregion\n\n/**\n * Report Viewer Service\n * \n * Handles report definition retrieval, caching, and layout actions.\n * \n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has reports (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPReportViewerService {\n //#region ---- Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly reportCategoryService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.report.name + \"Category\").data<any, any>();\n private readonly reportDefinitionService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.report.name).data();\n\n //#endregion\n\n //#region ---- Cache Storage ----\n\n /** Cache for categories by id - O(1) lookup */\n private categoriesById = new Map<string, AXPReportCategory>();\n\n /** Cache for categories by parentId - O(1) lookup */\n private categoriesByParentId = new Map<string | undefined, AXPReportCategory[]>();\n\n /** Cache for report definitions by categoryId - O(1) lookup */\n private definitionsByCategory = new Map<string, AXPReportDefinition[]>();\n\n /** Cache for individual report definitions by id - O(1) lookup */\n private definitionsById = new Map<string, AXPReportDefinition>();\n\n /** Pending API requests to prevent duplicate calls */\n private pendingCategoriesRequests = new Map<string | undefined, Promise<AXPReportCategory[]>>();\n private pendingDefinitionsRequests = new Map<string, Promise<AXPReportDefinition[]>>();\n private pendingReportRequests = new Map<string, Promise<AXPReportDefinition | undefined>>();\n\n //#endregion\n\n //#region ---- Public API: Categories ----\n\n /**\n * Get categories by parentId with aggressive caching\n * \n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n * \n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId?: string): Promise<AXPReportCategory[]> {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId)!;\n }\n\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId)!;\n }\n\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategories(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n\n return requestPromise;\n }\n\n /**\n * Get single category by ID with O(1) lookup\n * \n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId: string): Promise<AXPReportCategory | undefined> {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n\n /**\n * Get category path from root to specified category\n * \n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId: string): Promise<AXPReportCategory[]> {\n const path: AXPReportCategory[] = [];\n let currentCategoryId: string | undefined = categoryId;\n\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n\n return path;\n }\n\n //#endregion\n\n //#region ---- Public API: Report Definitions ----\n\n /**\n * Get report definitions for a category with smart caching\n * \n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches reports\n * - Returns cached result on subsequent calls\n * \n * @param categoryId - Category ID to get reports from\n * @returns Array of report definitions\n */\n async getReportsByCategoryId(categoryId: string): Promise<AXPReportDefinition[]> {\n // ✅ Fast path: Return cached result\n if (this.definitionsByCategory.has(categoryId)) {\n return this.definitionsByCategory.get(categoryId)!;\n }\n\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no reports - cache empty array and skip API call\n const emptyArray: AXPReportDefinition[] = [];\n this.definitionsByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n\n // ✅ Prevent duplicate requests\n if (this.pendingDefinitionsRequests.has(categoryId)) {\n return this.pendingDefinitionsRequests.get(categoryId)!;\n }\n\n // ✅ Load from entity service\n const requestPromise = this.loadReports(categoryId);\n this.pendingDefinitionsRequests.set(categoryId, requestPromise);\n\n return requestPromise;\n }\n\n /**\n * Get single report definition by ID with O(1) lookup\n * \n * Optimization: Uses Map for instant retrieval\n */\n async getReportById(id: string): Promise<AXPReportDefinition | undefined> {\n // ✅ Fast path: O(1) lookup in cache\n if (this.definitionsById.has(id)) {\n return this.definitionsById.get(id);\n }\n\n // ✅ Prevent duplicate requests\n if (this.pendingReportRequests.has(id)) {\n return this.pendingReportRequests.get(id)!;\n }\n\n // ✅ Load from entity service\n const requestPromise = this.loadReport(id);\n this.pendingReportRequests.set(id, requestPromise);\n\n return requestPromise;\n }\n\n /**\n * Get category ID containing a specific report\n * \n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByReportId(reportId: string): Promise<string | undefined> {\n // ✅ Search in cached reports\n for (const [categoryId, reports] of this.definitionsByCategory.entries()) {\n if (reports.some(report => report.id === reportId)) {\n return categoryId;\n }\n }\n\n // ✅ Try loading the report to find its category\n const report = await this.getReportById(reportId);\n if (report && report.categoryIds && report.categoryIds.length > 0) {\n return report.categoryIds[0]; // Return first category\n }\n\n return undefined;\n }\n\n /**\n * Get category path for a report\n */\n async getCategoriesPathByReportId(reportId: string): Promise<AXPReportCategory[]> {\n const categoryId = await this.getCategoryIdByReportId(reportId);\n if (!categoryId) {\n throw new Error(`Report '${reportId}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n\n //#endregion\n\n //#region ---- Public API: Layout Actions ----\n\n /**\n * Get general actions list for a layout type\n * Override in connectivity layer (mock/API) to provide general actions\n * Base implementation returns empty array\n * \n * @param layoutType - The layout type\n * @returns Array of general actions for the layout type\n */\n getGeneralActionsList(layoutType: AXPReportLayoutType): AXPReportLayoutAction[] {\n return [];\n }\n\n /**\n * Get merged actions for a layout definition\n * Combines general actions (from getGeneralActionsList) with layout-specific actions\n * Layout-specific actions take precedence (by name) over general actions\n * \n * @param layoutDefinition - The layout definition\n * @returns Merged array of actions (general + custom)\n */\n getMergedActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n const generalActions = this.getGeneralActionsList(layoutDefinition.layout.type);\n const customActions = layoutDefinition.actions || [];\n\n // Create a map of custom actions by name for quick lookup\n const customActionsMap = new Map<string, AXPReportLayoutAction>();\n customActions.forEach(action => {\n if (action.name) {\n customActionsMap.set(action.name, action);\n }\n });\n\n // Merge: Start with general actions, replace with custom if name matches\n const merged: AXPReportLayoutAction[] = [];\n const usedNames = new Set<string>();\n\n // Add general actions (unless overridden by custom)\n generalActions.forEach(action => {\n if (action.name && customActionsMap.has(action.name)) {\n // Custom action overrides general action\n merged.push(customActionsMap.get(action.name)!);\n usedNames.add(action.name);\n } else {\n merged.push(action);\n if (action.name) {\n usedNames.add(action.name);\n }\n }\n });\n\n // Add custom actions that weren't already added (new actions)\n customActions.forEach(action => {\n if (action.name && !usedNames.has(action.name)) {\n merged.push(action);\n usedNames.add(action.name);\n } else if (!action.name) {\n // Actions without names are always added\n merged.push(action);\n }\n });\n\n return merged;\n }\n\n /**\n * Get primary actions for a layout definition\n */\n getPrimaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter(action => action.priority === 'primary');\n }\n\n /**\n * Get secondary actions for a layout definition\n */\n getSecondaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter(action => action.priority === 'secondary');\n }\n\n //#endregion\n\n //#region ---- Private: Data Loading ----\n\n /**\n * Load categories from entity service and cache results\n * Can be overridden in extended services (e.g., API layer)\n */\n protected async loadCategories(parentId?: string): Promise<AXPReportCategory[]> {\n try {\n const list: AXPReportCategory[] = [];\n\n if (parentId) {\n const result = await this.reportCategoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n }]\n }\n });\n list.push(...result.items);\n } else {\n const result = await this.reportCategoryService.query();\n list.push(...result.items);\n }\n\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, list);\n list.forEach(cat => this.categoriesById.set(cat.id, cat));\n\n return list;\n } finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n\n /**\n * Load report definitions from entity service and cache results\n * Can be overridden in extended services (e.g., API layer)\n */\n protected async loadReports(categoryId: string): Promise<AXPReportDefinition[]> {\n try {\n const list: AXPReportDefinition[] = [];\n\n // Use 'contains' operator to filter by categoryIds array field\n const result = await this.reportDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: categoryId,\n }]\n }\n });\n list.push(...(result.items as AXPReportDefinition[]));\n\n // ✅ Cache results for fast subsequent access\n this.definitionsByCategory.set(categoryId, list);\n list.forEach(def => this.definitionsById.set(def.id, def));\n\n return list;\n } finally {\n this.pendingDefinitionsRequests.delete(categoryId);\n }\n }\n\n /**\n * Load single report from entity service and cache result\n * Can be overridden in extended services (e.g., API layer)\n */\n protected async loadReport(id: string): Promise<AXPReportDefinition | undefined> {\n try {\n const result = await this.reportDefinitionService.byKey(id) as AXPReportDefinition | undefined;\n\n if (result) {\n this.definitionsById.set(id, result);\n return result;\n }\n\n // Fallback: Search in cached reports\n for (const reports of this.definitionsByCategory.values()) {\n const found = reports.find(report => report.id === id);\n if (found) {\n this.definitionsById.set(id, found);\n return found;\n }\n }\n\n return undefined;\n } finally {\n this.pendingReportRequests.delete(id);\n }\n }\n\n /**\n * Breadth-first search through category hierarchy\n */\n private async searchCategoryInHierarchy(categoryId: string): Promise<AXPReportCategory | undefined> {\n const searchQueue: (string | undefined)[] = [undefined];\n const searched = new Set<string | undefined>();\n\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift()!;\n if (searched.has(parentId)) continue;\n searched.add(parentId);\n\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n\n if (found) {\n return found;\n }\n\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId: string): boolean {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n\n /**\n * Check if category has reports (uses cached count)\n */\n categoryHasReports(categoryId: string): boolean {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n\n /**\n * Protected: Check if categories are cached for a parentId\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isCategoriesCached(parentId?: string): boolean {\n return this.categoriesByParentId.has(parentId) || this.pendingCategoriesRequests.has(parentId);\n }\n\n /**\n * Protected: Check if a category is cached by ID\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isCategoryCached(categoryId: string): boolean {\n if (this.categoriesById.has(categoryId)) {\n return true;\n }\n // Check if it might be in a cached parent list\n for (const categories of this.categoriesByParentId.values()) {\n if (categories.some(cat => cat.id === categoryId)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Protected: Check if reports are cached for a categoryId\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isReportsCached(categoryId: string): boolean {\n return this.definitionsByCategory.has(categoryId) || this.pendingDefinitionsRequests.has(categoryId);\n }\n\n /**\n * Protected: Check if a report is cached by ID\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isReportCached(reportId: string): boolean {\n return this.definitionsById.has(reportId) || this.pendingReportRequests.has(reportId);\n }\n\n /**\n * Clear all caches\n */\n clearAllCache(): void {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.definitionsByCategory.clear();\n this.definitionsById.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingDefinitionsRequests.clear();\n this.pendingReportRequests.clear();\n }\n\n /**\n * Clear categories cache only\n */\n clearCategoriesCache(): void {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.pendingCategoriesRequests.clear();\n }\n\n /**\n * Clear reports cache only\n */\n clearReportsCache(): void {\n this.definitionsByCategory.clear();\n this.definitionsById.clear();\n this.pendingDefinitionsRequests.clear();\n this.pendingReportRequests.clear();\n }\n\n //#endregion\n\n //#endregion\n\n //#region ---- Report Execution (Override in Connectivity Layer) ----\n\n /**\n * Execute report with given context\n * Override in connectivity layer (mock/API) to implement report execution\n * \n * @param context - Layout execution context with reportId, layoutId, dataSource, and filters\n * @returns Report execution result with layout and data\n */\n async executeReport(context: AXPLayoutExecutionContext): Promise<AXPExecutionReportCommandResult> {\n throw new Error('executeReport must be implemented in connectivity layer (mock/API)');\n }\n\n //#endregion\n\n //#region ---- Action Handlers (Override in Connectivity Layer) ----\n\n /**\n * Execute action by command name\n * Override in connectivity layer (mock/API) to implement action execution\n * \n * @param commandName - Command name (e.g., 'download-report', 'print-report', 'export-report')\n * @param options - Command options (e.g., { format: 'excel', pdfData: {...}, reportData: {...} })\n */\n async executeAction(commandName: string, options?: Record<string, unknown>): Promise<void> {\n console.log(`Execute action: ${commandName} - should be implemented in connectivity layer`, options);\n }\n\n //#endregion\n}\n\n","import { AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartValue } from '@acorex/charts/line-chart';\nimport { AXPContextData, AXPFilterClause } from '@acorex/platform/core';\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPieChartReportMapper(data: Record<string, number>): AXDonutChartValue {\n return Object.entries(data).map(([key, value]) => ({\n id: key,\n label: key,\n value: value,\n }));\n}\n\nexport function AXBarChartReportMapper(data: Record<string, number>): AXBarChartValue {\n return Object.entries(data).map(([key, value]) => ({\n id: key,\n label: key,\n value: value,\n }));\n}\n\nexport function AXLineChartReportMapper(data: Record<string, number>): AXLineChartValue {\n const entries = Object.entries(data);\n if (entries.length === 0) {\n return [];\n }\n const dataPoints = entries.map(([key, value]) => ({\n x: key,\n y: value,\n }));\n\n return [\n {\n id: 'series-1',\n label: 'Data Series',\n tooltipLabel: 'Countries Info',\n lineColor: '#d81159',\n fillColor: '#d8115920',\n data: dataPoints,\n },\n ];\n}\n\n//#region ---- Helpers ----\n\n/**\n * Determines whether a filter value should be treated as empty.\n * This handles deep objects, arrays, and primitives so that\n * values like { from: null, to: null } are considered empty.\n */\nfunction isEmptyFilterValue(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0 || value.every((item) => isEmptyFilterValue(item));\n }\n\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n return true;\n }\n\n // Consider object empty if all nested values are empty\n return entries.every(([, v]) => isEmptyFilterValue(v));\n }\n\n return false;\n}\n\n//#endregion\n\n/**\n * Converts AXPContextData (filter context) to AXPFilterClause format\n *\n * Input format:\n * {\n * \"fieldName\": {\n * \"operation\": { \"type\": \"between\" },\n * \"value\": { \"from\": \"...\", \"to\": \"...\" }\n * }\n * }\n *\n * Output format:\n * {\n * logic: 'and',\n * filters: [\n * {\n * field: 'fieldName',\n * operator: { type: 'between' },\n * value: { from: \"...\", to: \"...\" }\n * }\n * ]\n * }\n */\nexport function convertContextDataToFilterClause(context: AXPContextData): AXPFilterClause {\n const filters: AXDataSourceFilterOption[] = [];\n\n // Iterate through all keys in context\n for (const [fieldName, fieldData] of Object.entries(context)) {\n // Skip if fieldData is not an object or doesn't have operation\n if (!fieldData || typeof fieldData !== 'object' || !('operation' in fieldData)) {\n continue;\n }\n\n const operation = (fieldData as any).operation;\n const value = (fieldData as any).value;\n\n // Skip if operation type is missing\n if (!operation || !operation.type) {\n continue;\n }\n\n // Skip if value is effectively empty (null/undefined/empty string,\n // empty object/array, or deep object where all nested values are empty)\n if (isEmptyFilterValue(value)) {\n continue;\n }\n\n // Create filter clause\n const filter: AXDataSourceFilterOption = {\n field: fieldName,\n operator: {\n type: operation.type,\n },\n value: value,\n };\n\n filters.push(filter);\n }\n\n // Return filter clause with AND logic\n if (filters.length === 0) {\n return {\n logic: 'and',\n filters: [],\n };\n }\n\n return {\n logic: 'and',\n filters: filters,\n };\n}\n","import { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPContextData } from '@acorex/platform/core';\nimport { AXPDynamicFormDefinition } from '@acorex/platform/layout/builder';\nimport { AXPPageStatus, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { computed, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport {\n AXPExecutionReportCommandResult,\n AXPLayoutExecutionContext,\n AXPLayoutSwitcherOption,\n AXPReportChartLayout,\n AXPReportDefinition,\n AXPReportViewerService,\n AXPReportLayoutDefinition,\n AXPReportParameter,\n AXPReportParameterGroup,\n AXPReportPdfLayout,\n AXPReportTableLayout,\n} from '../../reports';\nimport { convertContextDataToFilterClause } from '../../reports/report-mapper';\n\nexport const AXPReportViewerViewModel = signalStore(\n withState(() => ({\n reportDefinition: null as AXPReportDefinition | null,\n currentLayout: null as AXPReportLayoutDefinition | null,\n filterContext: {} as AXPContextData,\n categoriesPath: [] as any[],\n allowFetchData: false,\n shouldExecuteReport: false,\n lastAppliedFilterContext: null as AXPContextData | null, // Track last applied filters\n hasBeenExecuted: false, // Track if report has been executed at least once\n status: AXPPageStatus.Idle,\n error: null as string | null,\n showRowIndexColumn: false,\n })),\n\n withComputed((store, widgetRegistryService = inject(AXPWidgetRegistryService)) => ({\n //#region ---- Layout Management ----\n\n availableLayouts: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts) return [];\n\n return report.layouts.map(\n (layout: AXPReportLayoutDefinition) =>\n ({\n id: layout.id,\n title: layout.title,\n icon: layout.icon,\n type: layout.layout.type,\n }) as AXPLayoutSwitcherOption,\n );\n }),\n\n defaultLayout: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts?.length) return null;\n\n // Find layout marked as default, or use first layout\n return report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n }),\n\n activeLayoutId: computed(() => store.currentLayout()?.id || null),\n\n layoutType: computed(() => store.currentLayout()?.layout?.type || null),\n\n //#endregion\n\n //#region ---- Layout-Specific Configurations ----\n\n tableLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'table' ? (layout.layout as AXPReportTableLayout) : null;\n }),\n\n chartLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n }),\n\n pdfLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n }),\n\n //#endregion\n\n //#region ---- State Indicators ----\n\n isLoading: computed(() => store.status() === AXPPageStatus.Processing),\n isExecuting: computed(() => store.status() === AXPPageStatus.Submitting),\n hasError: computed(() => store.error() !== null),\n canExecute: computed(() => {\n // Always allow execution if there's an error (to enable retry)\n if (store.error() !== null) {\n return true;\n }\n\n // Allow execution if there are unapplied filters\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n if (hasBeenExecuted && JSON.stringify(currentContext) !== JSON.stringify(lastApplied)) {\n return true;\n }\n\n // Allow execution if report hasn't been executed yet\n if (!hasBeenExecuted) {\n return true;\n }\n\n // Otherwise, don't allow execution\n return false;\n }),\n hasMultipleLayouts: computed(() => {\n const report = store.reportDefinition();\n return (report?.layouts?.length ?? 0) > 1;\n }),\n\n title: computed(() => store.reportDefinition()?.title ?? '@report-management:report-viewer.components.report-viewer.title'),\n description: computed(() => store.reportDefinition()?.description ?? null),\n\n //#endregion\n\n //#region ---- Form Configuration ----\n\n formDefinition: computed<AXPDynamicFormDefinition>(() => {\n const report = store.reportDefinition();\n if (!report || !report.parameterGroups) {\n return { groups: [] } as AXPDynamicFormDefinition;\n }\n const formDefinition: AXPDynamicFormDefinition = {\n groups: report.parameterGroups.map((group: AXPReportParameterGroup) => ({\n name: group.name,\n title: group.title,\n description: group.description,\n parameters: group.parameters.map((param: AXPReportParameter) => {\n const widget = widgetRegistryService.resolve(param.widget.type ?? '');\n const widgetType = widget?.defaultFilterWidgetName ?? (param.widget.type ?? '');\n return {\n path: param.path,\n title: param.title,\n description: param.description,\n badge: `{{ filter.getTitle(context.eval(\"${param.path}.operation.type\")) }}`,\n widget: {\n path: param.path,\n type: widgetType,\n options: {\n ...param.widget.options,\n clearButton: true,\n hasClearButton: true,\n },\n triggers: param.widget.triggers,\n\n }\n };\n }),\n })),\n };\n return formDefinition;\n }),\n\n //#endregion\n\n //#region ---- Layout Type Detection ----\n\n isTableLayout: computed(() => store.currentLayout()?.layout?.type === 'table'),\n isChartLayout: computed(() => store.currentLayout()?.layout?.type === 'chart'),\n isPdfLayout: computed(() => store.currentLayout()?.layout?.type === 'pdf'),\n\n //#endregion\n\n //#region ---- Filter States ----\n\n hasUnappliedFilters: computed(() => {\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n // If report has never been executed, don't show unapplied filters warning\n if (!hasBeenExecuted) {\n return false;\n }\n\n // If no filters have been applied yet, return true\n if (lastApplied === null) {\n return true;\n }\n\n // Check if current filters are different from last applied filters\n const currentKeys = Object.keys(currentContext);\n const lastKeys = Object.keys(lastApplied);\n\n if (currentKeys.length !== lastKeys.length) {\n return true;\n }\n\n // Check if any values are different\n for (const key of currentKeys) {\n if (currentContext[key] !== lastApplied[key]) {\n return true;\n }\n }\n\n return false;\n }),\n\n //#endregion\n\n //#region ---- Action States ----\n\n canSwitchLayout: computed(\n () => (store.reportDefinition()?.layouts?.length ?? 0) > 1 && store.status() !== AXPPageStatus.Submitting,\n ),\n\n canSelectRows: computed(() => {\n const layout = store.currentLayout();\n return (\n layout?.layout?.type === 'table' &&\n layout.layout.options?.selectable?.mode &&\n layout.layout.options?.selectable?.mode !== 'none'\n );\n }),\n\n //#endregion\n })),\n\n withMethods(\n (\n store,\n reportDefinitionService: AXPReportViewerService = inject(AXPReportViewerService),\n ) => {\n const executeReport = async (): Promise<void> => {\n try {\n const report = store.reportDefinition();\n const layout = store.currentLayout();\n if (!report || !layout) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.report-or-layout-not-found',\n });\n return;\n }\n\n patchState(store, {\n status: AXPPageStatus.Submitting,\n error: null,\n allowFetchData: true,\n shouldExecuteReport: true,\n lastAppliedFilterContext: { ...store.filterContext() }, // Mark current filters as applied\n hasBeenExecuted: true, // Mark that report has been executed at least once\n });\n\n patchState(store, {\n status: AXPPageStatus.Submitted,\n error: null,\n });\n } catch (error) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error: error instanceof Error ? error.message : '@report-management:report-viewer.messages.error.unexpected-execution',\n });\n }\n };\n const fetchData = async (parameters: AXPContextData = {}): Promise<AXPExecutionReportCommandResult | null> => {\n const report = store.reportDefinition();\n const layout = store.currentLayout();\n if (!report || !layout) {\n return null;\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n try {\n // Create execution context - ensure dataSource is provided\n const dataSource = layout.dataSource || {\n type: 'query' as const,\n name: 'getEmployeeList',\n };\n\n // Convert filter context to AXPFilterClause format\n const filterContext = {\n ...store.filterContext(),\n ...parameters,\n };\n const filterClause = convertContextDataToFilterClause(filterContext);\n\n // Preserve pagination parameters (skip/take) that are not part of the filter context structure\n // used by convertContextDataToFilterClause (it only converts { operation, value } items).\n const paginationSkip = (filterContext as any).skip;\n const paginationTake = (filterContext as any).take;\n if (paginationSkip !== undefined) {\n (filterClause as any).skip = paginationSkip;\n }\n if (paginationTake !== undefined) {\n (filterClause as any).take = paginationTake;\n }\n\n const context: AXPLayoutExecutionContext = {\n reportId: report.id,\n layoutId: layout.id,\n dataSource: dataSource,\n filters: filterClause,\n };\n\n const executionResult = await reportDefinitionService.executeReport(context);\n return executionResult;\n } catch (error) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-execute',\n });\n console.error('Error executing report:', error);\n return null;\n } finally {\n patchState(store, {\n status: AXPPageStatus.Idle,\n });\n }\n };\n\n return {\n //#region ---- Report Loading ----\n\n async loadReport(reportId: string): Promise<void> {\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n try {\n const report = await reportDefinitionService.getReportById(reportId);\n if (report) {\n // Configure parameter widgets with proper paths\n report.parameterGroups.forEach((group) => {\n group.parameters.forEach((param) => {\n param.widget.path = param.path;\n });\n });\n\n // Load categories path for breadcrumbs\n const categoriesPath = await reportDefinitionService.getCategoriesPathByReportId(reportId);\n\n // Set default layout\n const defaultLayout =\n report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n\n patchState(store, {\n reportDefinition: report,\n currentLayout: defaultLayout,\n categoriesPath: categoriesPath || [],\n filterContext: {}, // Reset context when loading new report\n allowFetchData: false,\n hasBeenExecuted: false, // Reset execution state for new report\n });\n }\n } catch (error) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-load',\n });\n console.error('Error loading report:', error);\n } finally {\n patchState(store, {\n status: AXPPageStatus.Idle,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Layout Management ----\n\n switchLayout(layoutId: string): void {\n const report = store.reportDefinition();\n if (!report) return;\n\n const layout = report.layouts.find((l: AXPReportLayoutDefinition) => l.id === layoutId);\n if (layout) {\n patchState(store, {\n currentLayout: layout,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Data Execution ----\n\n executeReport,\n fetchData,\n\n //#endregion\n\n //#region ---- Filter Management ----\n\n updateFilterContext(context: Record<string, any>): void {\n patchState(store, {\n filterContext: { ...store.filterContext(), ...context },\n shouldExecuteReport: false, // Reset execution flag when filters change\n });\n },\n\n\n clearFilters(): void {\n patchState(store, {\n allowFetchData: false,\n shouldExecuteReport: false,\n filterContext: {},\n lastAppliedFilterContext: null, // Reset applied filters when clearing\n hasBeenExecuted: false, // Reset execution state when clearing filters\n });\n },\n\n resetFilters(): void {\n patchState(store, {\n allowFetchData: false,\n });\n },\n\n //#endregion\n\n //#region ---- Export Management ----\n\n async exportReport(format: string): Promise<void> {\n const layout = store.currentLayout();\n if (!layout?.export) {\n console.warn('@report-management:report-viewer.messages.warnings.export-not-configured');\n return;\n }\n\n try {\n // Export logic would go here\n // This would typically call a different command for export\n console.log(`Exporting report in ${format} format`);\n } catch (error) {\n console.error('Error exporting report:', error);\n }\n },\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n refresh(): Promise<void> {\n return executeReport();\n },\n\n clearError(): void {\n patchState(store, {\n error: null,\n });\n },\n\n clearExecutionState(): void {\n patchState(store, {\n hasBeenExecuted: false,\n allowFetchData: false,\n shouldExecuteReport: false,\n });\n },\n\n cancel(): void {\n patchState(store, {\n status: AXPPageStatus.Idle,\n hasBeenExecuted: false,\n error: null,\n });\n //TODO: Cancel the report execution\n },\n\n reset(): void {\n patchState(store, {\n reportDefinition: null,\n currentLayout: null,\n filterContext: {},\n allowFetchData: false,\n shouldExecuteReport: false,\n lastAppliedFilterContext: null,\n hasBeenExecuted: false,\n categoriesPath: [],\n status: AXPPageStatus.Idle,\n error: null,\n });\n },\n\n //#endregion\n };\n },\n ),\n\n withHooks(\n (\n store,\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n settingsService = inject(AXPSettingsService),\n ) => {\n const settingSubs = new Subscription();\n\n const syncShowRowIndexColumn = async (): Promise<void> => {\n try {\n const value = await settingsService.get<boolean>(AXPCommonSettings.ShowRowIndexColumn);\n patchState(store, { showRowIndexColumn: value ?? false });\n } catch {\n patchState(store, { showRowIndexColumn: false });\n }\n };\n\n return {\n async onInit() {\n translationService.langChanges$.subscribe(() => {\n // Handle language change if needed\n });\n\n localeService.profileChanged$.subscribe(() => {\n // Handle locale change if needed\n });\n\n void syncShowRowIndexColumn();\n settingSubs.add(settingsService.onLoaded.subscribe(() => void syncShowRowIndexColumn()));\n settingSubs.add(settingsService.onChanged.subscribe(() => void syncShowRowIndexColumn()));\n },\n onDestroy() {\n settingSubs.unsubscribe();\n },\n };\n },\n ),\n);\n","import { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDonutChartComponent, AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartComponent, AXLineChartOption, AXLineChartValue } from '@acorex/charts/line-chart';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport {\n AXBarChartReportMapper,\n AXLineChartReportMapper,\n AXPieChartReportMapper,\n} from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '../../../../reports/report.types';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-chart-view',\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXDonutChartComponent,\n AXLineChartComponent,\n AXChartLegendComponent,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-chart-view ax-w-full ax-h-full ax-flex ax-flex-col',\n },\n templateUrl: './report-chart-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPReportChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch chart data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n this.vm.fetchData().then((data) => {\n const raw = (((data?.data as any).data as any) ?? {}) as Record<string, number>;\n switch (this.chartType()) {\n case 'bar': {\n const v = AXBarChartReportMapper(raw);\n this.barChartData.set(v);\n break;\n }\n case 'doughnut': {\n const v = AXPieChartReportMapper(raw);\n this.donutChartData.set(v);\n break;\n }\n case 'line':\n default: {\n const v = AXLineChartReportMapper(raw);\n this.lineChartData.set(v);\n break;\n }\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n protected legendOptions = signal<AXChartLegendOptions>({\n mode: 'vertical',\n });\n\n protected barChartData = signal<AXBarChartValue>([]);\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected donutChartData = signal<AXDonutChartValue>([]);\n\n protected donutChartOptions = computed(() => {\n return {\n totalLabel: 'Total',\n showTooltip: true,\n showDataLabels: this.donutChartData().length <= 10,\n };\n });\n\n protected lineChartData = signal<AXLineChartValue>([]);\n protected lineChartOptions = signal<AXLineChartOption>({});\n\n /**\n * Check if bar chart data has items\n */\n protected readonly hasBarChartData = computed(() => {\n const data = this.barChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if donut chart data has items\n */\n protected readonly hasDonutChartData = computed(() => {\n const data = this.donutChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if line chart data has items\n */\n protected readonly hasLineChartData = computed(() => {\n const data = this.lineChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if chart has any data (for any chart type)\n */\n protected readonly hasChartData = computed(() => {\n return this.hasBarChartData() || this.hasDonutChartData() || this.hasLineChartData();\n });\n\n /**\n * Check if report has been executed and has no data\n */\n protected readonly showNoDataState = computed(() => {\n return this.vm.hasBeenExecuted() && !this.hasChartData();\n });\n\n //#endregion\n}\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-gap-6 ax-p-8\">\n <div class=\"ax-spinner ax-spin ax-w-10 ax-h-10\"></div>\n <div class=\"__loading-text ax-text-sm ax-opacity-70\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\"\n >\n </axp-state-message>\n } @else if (isChartReady() && showNoDataState()) {\n <!-- No Data State -->\n <axp-state-message\n icon=\"fa-light fa-chart-pie\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.description'\"\n >\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <section\n class=\"__chart-container ax-overflow-auto md:ax-overflow-hidden ax-rounded-2xl ax-border ax-h-full ax-flex ax-flex-col\"\n >\n @if (chartLayout()?.header) {\n <header\n class=\"__chart-header ax-p-4 md:ax-p-6 ax-border-b ax-flex ax-flex-col sm:ax-flex-row ax-gap-2 sm:ax-items-center sm:ax-justify-between\"\n >\n <h3 class=\"__chart-title ax-text-base md:ax-text-lg ax-font-semibold ax-truncate\">\n {{ chartLayout()?.header?.title }}\n </h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date ax-text-xs md:ax-text-sm ax-opacity-70 ax-font-medium ax-flex-shrink-0\">\n {{ '@general:common.date.today' | translate | async }}\n </div>\n }\n </header>\n }\n\n <div class=\"__chart-body ax-flex-1 ax-p-3 md:ax-p-6\">\n <div\n class=\"__chart-wrapper ax-h-full ax-items-center ax-flex ax-flex-col ax-gap-4 lg:ax-gap-6\"\n [class]=\"\n legendOptions().mode === 'horizontal'\n ? 'ax-flex-col ax-gap-4'\n : 'ax-flex-col lg:ax-flex-row ax-gap-4 lg:ax-gap-6'\n \"\n >\n @switch (chartType()) {\n @case ('bar') {\n <div\n class=\"__chart-content ax-flex-1 ax-h-full ax-min-h-[250px] md:ax-min-h-[300px] ax-flex ax-items-center ax-justify-center ax-w-full ax-overflow-hidden\"\n >\n <ax-bar-chart #barChart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n @if (hasBarChartData()) {\n <div class=\"__chart-legend ax-w-fit ax-flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"barChart\"></ax-chart-legend>\n </div>\n }\n }\n @case ('doughnut') {\n <div\n class=\"__chart-content ax-flex-1 ax-h-full ax-min-h-[250px] md:ax-min-h-[300px] ax-flex ax-items-center ax-justify-center ax-w-full ax-overflow-hidden\"\n >\n <ax-donut-chart #donutChart [data]=\"donutChartData()\" [options]=\"donutChartOptions()\"></ax-donut-chart>\n </div>\n @if (hasDonutChartData()) {\n <div class=\"__chart-legend ax-w-fit ax-flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"donutChart\"></ax-chart-legend>\n </div>\n }\n }\n @default {\n <div\n class=\"__chart-content ax-flex-1 ax-h-full ax-min-h-[250px] md:ax-min-h-[300px] ax-flex ax-items-center ax-justify-center ax-w-full ax-overflow-hidden\"\n >\n <ax-line-chart #lineChart [data]=\"lineChartData()\" [options]=\"lineChartOptions()\"></ax-line-chart>\n </div>\n @if (hasLineChartData()) {\n <div class=\"__chart-legend ax-w-fit ax-flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"lineChart\"></ax-chart-legend>\n </div>\n }\n }\n }\n </div>\n </div>\n\n @if (chartLayout()?.footer) {\n <footer class=\"__chart-footer ax-p-4 md:ax-p-6 ax-border-t\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"chartLayout()?.footer?.customHtml\"></div>\n }\n </footer>\n }\n </section>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\"\n >\n </axp-state-message>\n }\n</ng-container>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { AXPReportPdfLayout } from '../../../../reports/report.types';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-pdf-view',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-pdf-view ax-w-full ax-h-full ax-flex ax-flex-col',\n },\n templateUrl: './report-pdf-view.component.html',\n styleUrls: ['./report-pdf-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportPdfViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n private readonly sanitizer = inject(DomSanitizer);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current PDF layout configuration\n */\n protected readonly pdfLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n });\n\n /**\n * PDF layout options\n */\n protected readonly pdfOptions = computed(() => {\n const pdfLayout = this.pdfLayout();\n return pdfLayout?.options || {};\n });\n\n /**\n * PDF source URL (sanitized for embed)\n */\n protected readonly pdfSource = computed<SafeResourceUrl | null>(() => {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return null;\n }\n\n // Handle URL\n if (pdfData.url) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(pdfData.url);\n }\n\n // Handle base64\n if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n return this.sanitizer.bypassSecurityTrustResourceUrl(base64Data);\n }\n\n // Handle blob\n if (pdfData.blob) {\n const blobUrl = URL.createObjectURL(pdfData.blob);\n return this.sanitizer.bypassSecurityTrustResourceUrl(blobUrl);\n }\n\n return null;\n });\n\n /**\n * PDF filename for download\n */\n protected readonly pdfFilename = computed(() => {\n const pdfData = this.pdfData();\n return pdfData?.filename || 'report.pdf';\n });\n\n /**\n * PDF embed height\n */\n protected readonly embedHeight = computed(() => {\n const options = this.pdfOptions();\n return options.height || '100%';\n });\n\n /**\n * Check if PDF is ready to render\n */\n protected readonly isPdfReady = computed(() => {\n return !!this.pdfSource();\n });\n\n /**\n * Check if download button should be shown\n */\n protected readonly showDownloadButton = computed(() => {\n const options = this.pdfOptions();\n return options.showDownloadButton !== false; // Default to true\n });\n\n /**\n * Check if print button should be shown\n */\n protected readonly showPrintButton = computed(() => {\n const options = this.pdfOptions();\n return options.showPrintButton !== false; // Default to true\n });\n\n /**\n * Check if zoom controls should be shown\n */\n protected readonly showZoomControls = computed(() => {\n const options = this.pdfOptions();\n return options.showZoomControls !== false; // Default to true\n });\n\n /**\n * Check if fullscreen button should be shown\n */\n protected readonly showFullscreenButton = computed(() => {\n const options = this.pdfOptions();\n return options.showFullscreenButton !== false; // Default to true\n });\n\n /**\n * Current zoom level\n */\n protected readonly currentZoom = signal<number>(100);\n\n /**\n * PDF data from execution result\n */\n protected readonly pdfData = signal<{ url?: string; base64?: string; blob?: Blob; filename?: string } | null>(null);\n\n /**\n * Fullscreen state\n */\n protected readonly isFullscreen = signal<boolean>(false);\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch PDF data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.pdfLayout()) {\n this.vm.fetchData().then((data) => {\n if (data?.data && data.data.type === 'pdf') {\n const pdfResult = data.data as { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n this.pdfData.set(pdfResult);\n\n // Set initial zoom from options\n const options = this.pdfOptions();\n if (options.defaultZoom) {\n this.currentZoom.set(options.defaultZoom);\n }\n } else {\n this.pdfData.set(null);\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Methods ----\n\n /**\n * Handle download PDF\n */\n public downloadPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n let filename = this.pdfFilename();\n let shouldRevokeUrl = false;\n\n if (pdfData.url) {\n // For URL, create a temporary link\n url = pdfData.url;\n } else if (pdfData.base64) {\n // Convert base64 to blob and create URL\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64.split(',')[1]\n : pdfData.base64;\n const byteCharacters = atob(base64Data);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/pdf' });\n url = URL.createObjectURL(blob);\n shouldRevokeUrl = true;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n shouldRevokeUrl = true;\n } else {\n return;\n }\n\n // Create download link\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Clean up blob URL if created\n if (shouldRevokeUrl) {\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }\n }\n\n /**\n * Handle print PDF\n */\n public printPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n\n if (pdfData.url) {\n url = pdfData.url;\n } else if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n url = base64Data;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n } else {\n return;\n }\n\n // Open PDF in new window for printing\n const printWindow = window.open(url, '_blank');\n if (printWindow) {\n printWindow.onload = () => {\n printWindow.print();\n };\n }\n }\n\n /**\n * Handle zoom in\n */\n protected zoomIn(): void {\n const current = this.currentZoom();\n if (current < 500) {\n this.currentZoom.set(Math.min(current + 25, 500));\n }\n }\n\n /**\n * Handle zoom out\n */\n protected zoomOut(): void {\n const current = this.currentZoom();\n if (current > 25) {\n this.currentZoom.set(Math.max(current - 25, 25));\n }\n }\n\n /**\n * Handle zoom reset\n */\n protected zoomReset(): void {\n const options = this.pdfOptions();\n this.currentZoom.set(options.defaultZoom || 100);\n }\n\n /**\n * Handle fullscreen toggle\n */\n protected toggleFullscreen(): void {\n const isFullscreen = this.isFullscreen();\n this.isFullscreen.set(!isFullscreen);\n }\n\n //#endregion\n}\n\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-gap-6 ax-p-8\">\n <div class=\"ax-spinner ax-spin ax-w-10 ax-h-10\"></div>\n <div class=\"__loading-text ax-text-sm ax-opacity-70\">\n {{ t('@report-management:report-viewer.components.pdf.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isPdfReady()) {\n <!-- PDF Embed Only -->\n <embed class=\"__pdf-embed ax-w-full ax-h-full\" [src]=\"pdfSource()\" type=\"application/pdf\" />\n } @else {\n <!-- No PDF Data State -->\n <axp-state-message icon=\"fa-light fa-file-pdf\"\n [title]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.description'\">\n </axp-state-message>\n }\n</ng-container>","import { AXDataTableComponent, AXDataTableModule, AXDataTableRowDbClick, AXRowCommandItem, AXRowCommandItemClickEvent } from '@acorex/components/data-table';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPWidgetColumnNode } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\nimport { AXPReportColumn, AXPReportTableLayout, AXPReportTableLayoutRowAction } from '../../../../reports';\nimport { AXDataSource, AXDataSourceQuery } from '@acorex/cdk/common';\nimport { AXPSystemActionType, applySystemActionDefault, getSystemActions } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\n\n@Component({\n selector: 'axp-report-table-view',\n standalone: true,\n imports: [\n CommonModule,\n AXDataTableModule,\n AXLoadingModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule\n ],\n templateUrl: './report-table-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportTableViewComponent {\n\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n protected readonly commandService = inject(AXPCommandService);\n\n private readonly grid = viewChild<AXDataTableComponent>('grid');\n\n //#endregion\n\n\n //#region ---- Event Handlers ----\n\n protected handleRowClick(event: AXRowCommandItemClickEvent): void {\n this.handleRowAction(event.name, event.data);\n }\n\n protected handleDbRowClick(event: AXDataTableRowDbClick): void {\n if (this.defaultRowAction()) {\n this.handleRowAction(this.defaultRowAction()!.name, event.data);\n }\n }\n\n protected handleRowAction(name: string, data: any): void {\n this.commandService.execute(name, data);\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to handle data fetching when report is executed\n */\n #fetchData = effect(() => {\n if (this.grid() && this.vm.allowFetchData() && this.vm.shouldExecuteReport()) {\n this.grid()?.refresh();\n }\n });\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n\n protected readonly layout = computed(() => {\n return (this.vm.currentLayout()?.layout as AXPReportTableLayout)!;\n });\n\n protected readonly dataSource = new AXDataSource({\n load: async (e: AXDataSourceQuery) => {\n if (!this.vm.allowFetchData()) {\n return { items: [], total: 0 }\n }\n\n const result = await this.vm.fetchData(e)\n if (!result?.data || result.data.type !== 'table') {\n console.error('invalid table result');\n return { items: [], total: 0 }\n };\n\n let items: any[] = result.data.items as any[] ?? [];\n let total = result.data.total || 0;\n\n return { items, total };\n },\n pageSize: 10,\n key: 'id'\n });\n\n\n protected readonly columns = computed(() => {\n return this.layout().columns?.map((col: AXPReportColumn) => ({\n field: col.field,\n title: col.title || col.field,\n width: col.width || 'auto',\n visible: col.visible !== false,\n align: col.align || 'left',\n widget: { ...col.widget, path: col.field } as AXPWidgetColumnNode\n })) || [];\n });\n\n protected readonly paginationEnabled = computed(() => {\n return this.layout().options?.pagination !== false;\n });\n\n\n protected readonly primaryRowAction = computed<AXRowCommandItem[]>(() => {\n return this.layout().actions?.filter(a => a.priority === 'primary')?.map(a => this.convertToRowCommandItem(a)) || [];\n });\n\n protected readonly hasPrimaryRowAction = computed(() => {\n return this.primaryRowAction().length > 0;\n });\n\n protected readonly secondaryRowAction = computed<AXRowCommandItem[]>(() => {\n return this.layout().actions?.filter(a => a.priority === 'secondary')?.map(a => this.convertToRowCommandItem(a)) || [];\n });\n\n protected readonly hasSecondaryRowAction = computed(() => {\n return this.secondaryRowAction().length > 0;\n });\n\n protected readonly defaultRowAction = computed<AXRowCommandItem | null>(() => {\n const defaultAction = this.layout().actions?.find(a => a.default);\n if (!defaultAction) {\n return null;\n }\n return this.convertToRowCommandItem(defaultAction);\n });\n\n //#endregion\n\n //#region ---- Helpers ----\n\n protected convertToRowCommandItem(action: AXPReportTableLayoutRowAction): AXRowCommandItem {\n const systemAction = getSystemActions(action.type as AXPSystemActionType);\n if (!systemAction) {\n\n return {\n icon: action.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: action.title,\n name: action.command?.name,\n divided: action.break,\n color: action.color,\n } as AXRowCommandItem;\n }\n const defaultAction = applySystemActionDefault(action, systemAction.key as AXPSystemActionType);\n return {\n icon: defaultAction.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: defaultAction.title,\n name: action.command?.name,\n divided: defaultAction.break ?? action.break,\n color: defaultAction.color,\n } as AXRowCommandItem;\n }\n\n //#endregion\n\n} ","<ax-data-table\n #grid\n [dataSource]=\"dataSource\"\n [paging]=\"true\"\n (onRowDbClick)=\"handleDbRowClick($event)\"\n class=\"ax-flex-1\"\n>\n <!-- Dynamic columns based on configuration -->\n @if (vm.showRowIndexColumn()) {\n <ax-index-column\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm.canSelectRows()) {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n @for (column of columns(); track column.field) {\n @if (column.visible) {\n <axp-widget-column-renderer\n [customWidth]=\"column.width == 'auto' ? 'auto' : column.width + 'px'\"\n [caption]=\"(column.title | translate | async)!\"\n [node]=\"column.widget!\"\n ></axp-widget-column-renderer>\n }\n }\n @if (hasPrimaryRowAction()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowAction().length * 70 + 'px'\"\n [items]=\"primaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-command-column>\n }\n @if (hasSecondaryRowAction()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"secondaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXLoadingDialogModule, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBreadcrumbItem,\n AXPContextData,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPGridLayoutOptions,\n} from '@acorex/platform/core';\nimport { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport {\n AXPStateMessageComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\nimport { AXPReportViewerService } from '../../../reports';\n\n@Component({\n selector: 'axp-report-viewer-page',\n standalone: true,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXBadgeModule,\n AXLoadingDialogModule,\n //\n AXPLayoutRendererComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXPReportTableViewComponent,\n AXPThemeLayoutFooterComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n AXPStateMessageComponent,\n ],\n providers: [\n AXUnsubscriber,\n AXPReportViewerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPReportViewerPageComponent,\n },\n ],\n templateUrl: './report-viewer-page.component.html',\n styleUrls: ['./report-viewer-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-report-viewer-page' },\n})\nexport class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Dependencies ----\n\n protected override layoutService = inject(AXPLayoutThemeService);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private unsubscriber = inject(AXUnsubscriber);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly reportViewerService = inject(AXPReportViewerService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n reportId = input<string>();\n reportParameters = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- ViewChildren ----\n\n private filtersForm = viewChild<AXPLayoutRendererComponent>('filtersForm');\n\n //#endregion\n\n //#region ---- ViewModel ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly watchNavigationLoading = effect(() => {\n const isBusy = this.vm.isLoading() || this.vm.isExecuting();\n untracked(() => {\n this.layoutService.setNavigationLoading(isBusy);\n //\n if (isBusy) {\n void this.openContentLoading();\n } else {\n this.closeContentLoading();\n }\n });\n });\n\n //#endregion\n\n private loadingDialogRef: { close: () => void } | null = null;\n private isDialogOpening = false;\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => this.closeContentLoading());\n }\n\n //#region ---- Computed Properties ----\n\n protected showFiltersPanel = () => this.deviceService.isLarge();\n\n protected showReportDisplay = () =>\n this.deviceService.isLarge() || (this.deviceService.isSmall() && this.vm.hasBeenExecuted());\n\n private baseRoutes = [this.sessionService.application?.name, 'report-management'];\n\n //#endregion\n\n //#region ---- Layout Configurations ----\n\n protected defaultLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 6 },\n lg: { colSpan: 12 },\n },\n });\n\n protected compactLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 4 },\n lg: { colSpan: 3 },\n },\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Subscribe to route parameter changes for dynamic report loading\n this.unsubscriber.takeUntilDestroy(this.route.paramMap).subscribe(async (params) => {\n const reportId = params.get('reportId') || this.route.snapshot.queryParamMap.get('reportId') || this.reportId();\n\n if (reportId) {\n await this.loadReportAndRefresh(reportId);\n }\n });\n }\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n private async loadReportAndRefresh(reportId: string): Promise<void> {\n await this.vm.loadReport(reportId);\n\n // Force refresh of page layout (breadcrumbs, title, etc.) after report loads\n this.recompute();\n\n // Handle initial parameters from query string\n const queryParams = this.route.snapshot.queryParams;\n const initialParams = { ...queryParams };\n delete initialParams['reportId']; // Remove reportId from parameters\n\n // Parse filter context values coming from URL (they are strings)\n const parsedInitialParams = this.parseFilterContextFromUrl(initialParams);\n\n // Merge with component input parameters\n const allParams = { ...parsedInitialParams, ...this.reportParameters() };\n\n if (Object.keys(allParams).length > 0) {\n console.log('Applying initial parameters:', allParams);\n this.vm.updateFilterContext(allParams);\n // Auto-execute if parameters are provided\n setTimeout(async () => {\n await this.vm.executeReport();\n }, 500); // Small delay to ensure form is ready\n }\n }\n\n private async openContentLoading(): Promise<void> {\n if (this.loadingDialogRef || this.isDialogOpening) {\n return;\n }\n\n this.isDialogOpening = true;\n\n try {\n const [title, description, cancelText] = await Promise.all([\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.in-progress-title'),\n this.translateService.translateAsync(\n '@report-management:report-viewer.messages.loading.in-progress-description',\n ),\n\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.cancel-button'),\n ]);\n\n this.loadingDialogRef = this.loadingDialog.show({\n title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: description,\n buttons: [\n {\n text: cancelText,\n color: 'danger',\n onClick: () => {\n this.closeContentLoading();\n this.vm.cancel();\n },\n },\n ],\n });\n } finally {\n this.isDialogOpening = false;\n }\n }\n\n private closeContentLoading(): void {\n if (!this.loadingDialogRef) {\n return;\n }\n\n this.loadingDialogRef.close();\n this.loadingDialogRef = null;\n }\n\n /**\n * Synchronizes filter context to URL query parameters using dot notation\n * @param filterContext The current filter context to sync\n */\n private syncFiltersToUrl(filterContext: AXPContextData): void {\n // Get current query params\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n // Get all filter keys from current params (excluding reportId and internal fields)\n const currentFilterKeys = new Set<string>();\n Object.keys(currentParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n // Extract root key (before first dot) for filter identification\n const rootKey = key.includes('.') ? key.split('.')[0] : key;\n currentFilterKeys.add(rootKey);\n }\n });\n\n // Build new query params - start with current params and remove filter-related ones\n const queryParams: Record<string, string | undefined> = { ...currentParams };\n\n // Remove all filter-related params first (we'll add them back if they have values)\n Object.keys(queryParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n delete queryParams[key];\n }\n });\n\n const processedFilterKeys = new Set<string>();\n\n // Add filter params that have values\n Object.keys(filterContext).forEach((key) => {\n // Skip internal editor fields (EditorObj, __EditorValue)\n if (key.endsWith('EditorObj') || key.startsWith('__') || key.endsWith('EditorValue')) {\n return;\n }\n\n processedFilterKeys.add(key);\n const value = filterContext[key];\n\n // Check if value is empty (null, undefined, empty string, or empty array)\n const isEmpty = this.isFilterValueEmpty(value);\n\n if (!isEmpty) {\n const flattened = this.flattenToDotNotation(key, value);\n Object.assign(queryParams, flattened);\n }\n // If empty, we don't add it to queryParams, so it will be removed from URL\n });\n\n // Remove filter keys that are no longer in filterContext\n currentFilterKeys.forEach((filterKey) => {\n if (!processedFilterKeys.has(filterKey)) {\n // This filter was removed - ensure all related params are removed\n Object.keys(currentParams).forEach((paramKey) => {\n if (paramKey === filterKey || paramKey.startsWith(`${filterKey}.`)) {\n delete queryParams[paramKey];\n }\n });\n }\n });\n\n // Preserve reportId if exists\n if (reportId) {\n queryParams['reportId'] = String(reportId);\n } else {\n delete queryParams['reportId'];\n }\n\n // Update URL without reloading\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true, // Don't add to browser history\n });\n }\n\n /**\n * Checks if a filter value is considered empty\n */\n private isFilterValueEmpty(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n // Check if it's a filter object with empty value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n const filterValue = filterObj.value;\n\n if (filterValue === null || filterValue === undefined || filterValue === '') {\n return true;\n }\n\n if (Array.isArray(filterValue) && filterValue.length === 0) {\n return true;\n }\n\n // Check nested object values\n if (typeof filterValue === 'object' && !Array.isArray(filterValue)) {\n const hasAnyValue = Object.values(filterValue).some((v) => v !== null && v !== undefined && v !== '');\n return !hasAnyValue;\n }\n }\n\n // Check if it's an empty array\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Flattens filter context to dot notation query parameters\n * Only includes operation.type and value - skips displayText and other fields\n * Example: { operation: { type: 'in' }, value: ['POST', 'GET'] } \n * -> { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n */\n private flattenToDotNotation(prefix: string, value: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (value == null) {\n return result;\n }\n\n // Handle filter context object - only extract operation.type and value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n\n // Extract operation.type if exists\n if (filterObj.operation?.type) {\n result[`${prefix}.operation.type`] = String(filterObj.operation.type);\n }\n\n // Extract value - handle arrays and primitives\n if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n if (Array.isArray(filterObj.value)) {\n if (filterObj.value.length > 0) {\n result[`${prefix}.value`] = filterObj.value.map((v: any) => String(v)).join(',');\n }\n } else if (typeof filterObj.value === 'object') {\n // If value is an object, flatten it recursively\n const flattenedValue = this.flattenValueObject(filterObj.value);\n Object.assign(result, flattenedValue);\n } else {\n result[`${prefix}.value`] = String(filterObj.value);\n }\n }\n\n return result;\n }\n\n // Handle primitives directly\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n result[prefix] = String(value);\n return result;\n }\n\n // Handle arrays - join with comma\n if (Array.isArray(value)) {\n if (value.length > 0) {\n result[prefix] = value.map(v => String(v)).join(',');\n }\n return result;\n }\n\n // Fallback: convert to string\n result[prefix] = String(value);\n return result;\n }\n\n /**\n * Flattens a value object (for nested objects in value field)\n */\n private flattenValueObject(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (obj == null || typeof obj !== 'object') {\n return result;\n }\n\n for (const [key, val] of Object.entries(obj)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n\n if (val == null) {\n continue;\n }\n\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n result[newPrefix] = String(val);\n } else if (Array.isArray(val)) {\n if (val.length > 0) {\n result[newPrefix] = val.map((v: any) => String(v)).join(',');\n }\n } else if (typeof val === 'object') {\n const flattened = this.flattenValueObject(val, newPrefix);\n Object.assign(result, flattened);\n }\n }\n\n return result;\n }\n\n /**\n * Reconstructs filter context from dot notation query parameters\n * Only parses operation.type and value - ignores other fields\n * Example: { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n * -> { fieldName: { operation: { type: 'in' }, value: ['POST', 'GET'] } }\n */\n private parseFilterContextFromUrl(params: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, any> = {};\n\n // Filter out reportId and internal editor fields\n const filteredParams: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n // Skip reportId and internal editor fields (EditorObj, __EditorValue, displayText)\n if (\n key !== 'reportId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n filteredParams[key] = value;\n }\n }\n\n // Group by root key (before first dot)\n for (const [key, value] of Object.entries(filteredParams)) {\n if (!key.includes('.')) {\n // Simple key without dot notation - skip (we only want operation.type and value)\n continue;\n }\n\n // Split by dot and reconstruct nested structure\n const parts = key.split('.');\n const rootKey = parts[0];\n const path = parts.slice(1);\n\n // Only process operation.type and value paths\n if (path.length === 2 && path[0] === 'operation' && path[1] === 'type') {\n // operation.type\n if (!result[rootKey]) {\n result[rootKey] = { operation: {} };\n }\n if (!result[rootKey].operation) {\n result[rootKey].operation = {};\n }\n result[rootKey].operation.type = String(value);\n } else if (path.length === 1 && path[0] === 'value') {\n // value\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n result[rootKey].value = this.parseValue(String(value));\n } else if (path.length > 1 && path[0] === 'value') {\n // nested value object (e.g., value.from, value.to for between)\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n if (!result[rootKey].value) {\n result[rootKey].value = {};\n }\n const valuePath = path.slice(1);\n this.setNestedValue(result[rootKey].value, valuePath, this.parseValue(String(value)));\n }\n }\n\n // Post-process: Convert values to arrays if operation.type is 'in' or 'notIn'\n // Also reconstruct EditorObj for lookup widgets (from value only, no displayText)\n for (const [key, value] of Object.entries(result)) {\n if (value && typeof value === 'object' && value.operation?.type) {\n const operationType = value.operation.type;\n\n // If operation is 'in' or 'notIn', ensure value is an array\n if ((operationType === 'in' || operationType === 'notIn') && typeof value.value === 'string') {\n // Convert comma-separated string to array\n value.value = value.value.split(',').map((v: string) => v.trim()).filter((v: string) => v !== '');\n }\n\n // Reconstruct EditorObj for lookup widgets from value only\n // This is needed because lookup widget expects EditorObj to exist\n if (value.value !== undefined && value.value !== null && value.value !== '') {\n const editorObjKey = `${key}EditorObj`;\n const valueField = 'id'; // Default value field for lookup\n const textField = 'title'; // Default text field for lookup\n\n if (operationType === 'in' || operationType === 'notIn') {\n // Multiple selection: create array of objects with value as both id and title\n const values = Array.isArray(value.value) ? value.value : [value.value];\n result[editorObjKey] = values.map((val: string) => ({\n [valueField]: val,\n [textField]: val // Use value as title since we don't have displayText\n }));\n } else {\n // Single selection: create single object\n result[editorObjKey] = {\n [valueField]: value.value,\n [textField]: value.value // Use value as title since we don't have displayText\n };\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sets a value in a nested object using a path array\n */\n private setNestedValue(obj: any, path: string[], value: unknown): void {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n const lastKey = path[path.length - 1];\n current[lastKey] = value;\n }\n\n /**\n * Parses a string value, handling arrays (comma-separated) and primitives\n */\n private parseValue(value: string): unknown {\n if (value === '') {\n return value;\n }\n\n // Check if it's a comma-separated array\n if (value.includes(',')) {\n return value.split(',').map(v => this.parsePrimitive(v.trim()));\n }\n\n return this.parsePrimitive(value);\n }\n\n /**\n * Parses a primitive value\n * For query params, we keep everything as string to match user requirement\n * Arrays are handled separately in parseValue\n */\n private parsePrimitive(value: string): string {\n return value;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleFiltersChange(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n this.syncFiltersToUrl(event);\n }\n\n protected handleFiltersInitiated(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n }\n\n protected async handleExecuteReport(): Promise<void> {\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.executeReport();\n }\n\n protected handleRefresh(): void {\n this.vm.refresh();\n }\n\n protected handleClearFilters(): void {\n this.vm.clearFilters();\n\n // Reset form if available\n const form = this.filtersForm();\n if (form) {\n form.reset();\n }\n\n // Clear URL query parameters (preserve reportId if exists)\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: reportId ? { reportId } : {},\n replaceUrl: true,\n });\n }\n\n /**\n * Handle download report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handleDownloadReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.download-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const result = await this.vm.fetchData();\n if (result?.data && result.data.type === 'pdf') {\n const pdfData = result.data as { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n await this.reportViewerService.executeAction('download-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-download');\n console.warn(warning);\n }\n }\n\n /**\n * Handle print report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handlePrintReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.print-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const result = await this.vm.fetchData();\n if (result?.data && result.data.type === 'pdf') {\n const pdfData = result.data as { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n await this.reportViewerService.executeAction('print-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-print');\n console.warn(warning);\n }\n }\n\n /**\n * Handle export report action\n * Gets report data from viewmodel and calls service executeAction method\n * @param format - Export format (excel, csv, pdf, image)\n */\n protected async handleExportReport(format?: string): Promise<void> {\n if (!format) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.export-format-required');\n console.warn(warning);\n return;\n }\n\n // Fetch report data\n const result = await this.vm.fetchData();\n if (!result?.data) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-report-data-export');\n console.warn(warning);\n return;\n }\n\n const layout = this.vm.currentLayout();\n await this.reportViewerService.executeAction('export-report', {\n format,\n reportData: result.data,\n layoutDefinition: layout || undefined,\n });\n }\n\n //#endregion\n\n //#region ---- Page Configuration Overrides ----\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const breadcrumbs: AXPBreadcrumbItem[] = [\n {\n name: 'reports',\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n command: {\n name: 'navigate-to-reports',\n },\n },\n ];\n\n // Add categories path\n const categoriesPath = this.vm.categoriesPath();\n if (categoriesPath && categoriesPath.length > 0) {\n let urlParts = [...this.baseRoutes, 'reports'];\n for (const category of categoriesPath) {\n urlParts.push(category.id);\n breadcrumbs.push({\n name: category.id,\n title: category.title,\n command: {\n name: 'navigate-to-category',\n options: {\n path: [...urlParts],\n },\n },\n });\n }\n }\n\n // Add report title as final breadcrumb\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n breadcrumbs.push({\n name: 'report-viewer',\n title: reportDefinition.title,\n });\n }\n\n return breadcrumbs;\n }\n\n override async getPageTitle(): Promise<string> {\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n return reportDefinition.title;\n }\n return await this.translateService.translateAsync(\n '@report-management:report-viewer.components.report-viewer.title',\n );\n }\n\n override async getPageDescription(): Promise<string | null> {\n const reportDefinition = this.vm.reportDefinition();\n return reportDefinition?.description || null;\n }\n\n protected override getPageIcon(): string | null {\n // Show current layout icon before the title when there are multiple layouts\n if (!this.vm.hasMultipleLayouts() || !this.showReportDisplay()) {\n return null;\n }\n\n const currentLayout = this.vm.currentLayout();\n if (currentLayout?.icon) {\n return `fa-light ${currentLayout.icon}`;\n }\n\n return null;\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n // Only show layout switcher if there are multiple layouts and report display is visible\n if (!this.vm.hasMultipleLayouts() || !this.showReportDisplay()) {\n return [];\n }\n\n const currentLayoutId = this.vm.currentLayout()?.id;\n\n return this.vm\n .availableLayouts()\n .map((layout) => ({\n title: layout.title,\n // Always show layout icon in prefix\n icon: layout.icon ? `fa-light ${layout.icon}` : undefined,\n command: {\n name: 'switch-layout',\n metadata: { isLayout: true, layoutId: layout.id, isSelected: layout.id === currentLayoutId },\n },\n }))\n .sort((a, b) => (a.title ?? '').localeCompare(b.title ?? '', undefined, { sensitivity: 'base' }));\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n // On mobile, if report has been executed (showing report), show \"Filters\" as back button\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n return {\n title: await this.translateService.translateAsync('@general:terms.interface.filter.title'),\n };\n }\n\n const categoriesPath = this.vm.categoriesPath();\n\n if (!categoriesPath || categoriesPath.length === 0) {\n // If no categories path, go back to reports root\n return {\n title: await this.translateService.translateAsync('@report-management:report-runner.terms.menu-title'),\n };\n }\n\n if (categoriesPath.length === 1) {\n // If only one category, go back to reports root\n return {\n title: await this.translateService.translateAsync('@report-management:report-runner.terms.menu-title'),\n };\n }\n\n // Go back to parent category\n const parentCategory = categoriesPath[categoriesPath.length - 1];\n return {\n title: parentCategory.title,\n };\n }\n\n override async onBackButtonClick(): Promise<void> {\n // On mobile, if report has been executed (showing report), go back to filters\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n this.vm.clearExecutionState();\n return;\n }\n\n const categoriesPath = this.vm.categoriesPath();\n\n if (!categoriesPath || categoriesPath.length <= 1) {\n // Navigate back to reports root\n await this.router.navigate([...this.baseRoutes, 'reports']);\n } else {\n // Navigate to parent category\n let urlParts = [...this.baseRoutes, 'reports'];\n for (const cat of categoriesPath) {\n urlParts.push(cat.id);\n }\n await this.router.navigate(urlParts);\n }\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get primary actions from service (includes general actions + layout-specific actions)\n const primaryActions = this.reportViewerService.getPrimaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return primaryActions.map(({ priority, ...action }) => action);\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get secondary actions from service (includes general actions + layout-specific actions)\n const secondaryActions = this.reportViewerService.getSecondaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return secondaryActions.map(({ priority, ...action }) => action);\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n // Handle layout switching from title actions\n if (command.metadata?.['isLayout']) {\n const layoutId = command.metadata?.['layoutId'] as string;\n if (layoutId) {\n this.vm.switchLayout(layoutId);\n this.recompute();\n }\n return;\n }\n\n switch (command.name) {\n case 'execute-report':\n await this.handleExecuteReport();\n break;\n case 'refresh-report':\n this.handleRefresh();\n break;\n case 'reset-filters':\n this.handleClearFilters();\n break;\n case 'download-report':\n this.handleDownloadReport();\n break;\n case 'print-report':\n this.handlePrintReport();\n break;\n case 'export-report':\n await this.handleExportReport(command.options?.['format'] as string);\n break;\n case 'navigate-to-reports':\n await this.router.navigate([...this.baseRoutes, 'reports']);\n break;\n case 'navigate-to-category':\n const path = command.options?.['path'] as string[];\n if (path) {\n await this.router.navigate(path);\n }\n break;\n default:\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.unknown-command', {\n params: { commandName: command.name },\n });\n console.warn(warning);\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:report-viewer.components.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'card'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"ax-w-full ax-warning-lightest ax-mb-2 ax-p-2 ax-rounded ax-border ax-border-warning-200\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle ax-text-sm\"></ax-icon>\n <span class=\"ax-text-xs\">{{\n t('@report-management:report-viewer.components.filters.messages.warning.unapplied') | async\n }}</span>\n </div>\n </div>\n }\n <ax-button class=\"ax-w-full\" [disabled]=\"!vm.canExecute()\"\n [text]=\"t('@report-management:report-viewer.actions.execute.title') | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"ax-overflow-auto\">\n @if (vm.hasError()) {\n <!-- Error State -->\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.retry.title') | async\" (onClick)=\"vm.clearError()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-refresh\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else if (!vm.reportDefinition()) {\n <!-- No Report Selected State -->\n <axp-state-message icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.title'\"\n [description]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.description'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.browse-reports.title') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Desktop: Report Display Area -->\n<ng-template #reportDisplay>\n @if (showReportDisplay()) {\n <!-- Desktop & Mobile: Report Display Area -->\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n } @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view> </axp-report-pdf-view>\n }\n } @else {\n <!-- Mobile: Show filters -->\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\">\n </axp-layout-renderer>\n }\n</ng-template>\n\n<!-- Mobile: Execute Button -->\n@if (deviceService.isSmall() && !vm.hasBeenExecuted()) {\n<axp-page-footer class=\"ax-p-2 ax-border-t\">\n <ax-button class=\"ax-w-full\" [disabled]=\"!vm.canExecute()\"\n [text]=\"'@report-management:report-viewer.actions.execute.title' | translate | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n</axp-page-footer>\n}","import { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPWidgetCoreModule, AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXBarChartReportMapper } from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '../../../../reports/report.types';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-bar-chart-view',\n standalone: true,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXChartLegendComponent,\n ],\n templateUrl: './report-bar-chart-view.component.html',\n styleUrl: './report-bar-chart-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportBarChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n // TODO: Implement chart data fetching\n console.log('Chart data fetch triggered', {\n chartType: this.chartType(),\n dataMapping: this.dataMapping(),\n });\n this.vm.fetchData().then((data) => {\n const barChartData = AXBarChartReportMapper(((data?.data as any).data as any) ?? {});\n this.barChartData.set(barChartData);\n console.log('barChartData', barChartData);\n });\n }\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle chart click events\n */\n protected handleChartClick(event: any): void {\n // TODO: Implement chart click handling\n console.log('Chart clicked:', event);\n }\n\n /**\n * Handle chart data point selection\n */\n protected handleDataPointSelect(event: any): void {\n // TODO: Implement data point selection\n console.log('Data point selected:', event);\n }\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n /**\n * Get chart configuration for rendering\n */\n protected getChartConfig(): any {\n // TODO: Transform AXPReportChartOptions to chart library format\n return {\n type: this.chartType(),\n options: this.chartOptions(),\n dataMapping: this.dataMapping(),\n };\n }\n\n protected barChartData = signal<AXBarChartValue>([]);\n\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected legendOptions = signal<AXChartLegendOptions>({\n mode: 'horizontal',\n });\n\n //#endregion\n}\n","<div class=\"axp-report-chart-view\" *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading\">\n <div class=\"ax-spinner ax-spin ax-border-4 ax-border-gray-200 ax-border-t-primary ax-rounded-full ax-w-12 ax-h-12\">\n </div>\n <div class=\"__loading-text\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <div class=\"__chart-container\">\n @if (chartLayout()?.header) {\n <div class=\"__chart-header\">\n <h3 class=\"__chart-title\">{{ chartLayout()?.header?.title }}</h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date\">{{ '@general:common.date.today' | translate | async }}</div>\n }\n </div>\n }\n\n <div class=\"__chart-body\">\n <!-- Chart component will be rendered here -->\n <div class=\"__chart-placeholder\">\n <div class=\"__placeholder-content\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-center ax-gap-10\"\n [class]=\"legendOptions().mode === 'horizontal' ? 'ax-flex-col' : 'ax-flex-row'\">\n <!-- Chart Area -->\n <div class=\"ax-flex-0 ax-size-96\">\n <ax-bar-chart #chart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n <!-- Legend Area -->\n @if (barChartData().length > 0) {\n <div>\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"chart\"></ax-chart-legend>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (chartLayout()?.footer) {\n <div class=\"__chart-footer\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"chartLayout()?.footer?.customHtml\"></div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message icon=\"fa-light fa-chart-column\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\">\n </axp-state-message>\n }\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-report-management.mjs","sources":["../../../../libs/modules/report-management/src/lib/const.ts","../../../../libs/modules/report-management/src/lib/features.keys.ts","../../../../libs/modules/report-management/src/lib/menu.keys.ts","../../../../libs/modules/report-management/src/lib/manifest.ts","../../../../libs/modules/report-management/src/lib/permission.keys.ts","../../../../libs/modules/report-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/report-management/src/lib/menu.provider.ts","../../../../libs/modules/report-management/src/lib/entity.provider.ts","../../../../libs/modules/report-management/src/lib/feature-definition.provider.ts","../../../../libs/modules/report-management/src/lib/report-management.module.ts","../../../../libs/modules/report-management/src/lib/reports/report.types.ts","../../../../libs/modules/report-management/src/lib/reports/report-viewer.service.ts","../../../../libs/modules/report-management/src/lib/reports/report-mapper.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/report-viewer.viewmodel.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-chart-view/report-chart-view.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-pdf-view/report-pdf-view.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-table-view/report-table-view.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/report-viewer-page/report-viewer-page.component.html","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.ts","../../../../libs/modules/report-management/src/lib/features/report-viewer/views/report-bar-chart-view/report-bar-chart-view.component.html","../../../../libs/modules/report-management/src/acorex-modules-report-management.ts"],"sourcesContent":["const config = {\n i18n: 'report-management',\n module: 'ReportManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'report-management',\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-chart-bar',\n },\n entities: {\n dataSet: {\n name: 'DataSet',\n title: `t(\"dataSet\", { scope: \"${config.i18n}\" })`,\n titlePlural: `t(\"dataSetPlural\", { scope: \"${config.i18n}\" })`,\n icon: 'fa-light fa-default',\n },\n category: {\n name: 'Category',\n fullName: `${config.module}.Category`,\n title: `@${config.i18n}:reports.entities.category.title`,\n titlePlural: `@${config.i18n}:reports.entities.category.plural`,\n icon: 'fa-light fa-folder',\n },\n report: {\n name: 'Report',\n fullName: `${config.module}.Report`,\n title: `@${config.i18n}:reports.entities.report.title`,\n titlePlural: `@${config.i18n}:reports.entities.report.plural`,\n icon: 'fa-light fa-file-chart-pie',\n },\n },\n};\n","export const AXPReportManagementFeatureKeys = {\n ReportBuilder: 'ReportManagement:Feature:ReportBuilder',\n SavedReports: 'ReportManagement:Feature:SavedReports',\n ScheduledReports: 'ReportManagement:Feature:ScheduledReports',\n BackgroundReports: 'ReportManagement:Feature:BackgroundReports',\n} as const;\n\n","export const AXPReportManagementMenuKeys = {\n Root: 'report-management:menu',\n Reports: 'report-management:menu:reports',\n Categories: 'report-management:menu:categories',\n DataSets: 'report-management:menu:data-sets',\n} as const;\n\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Report Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const ReportManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n required : true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","export const AXMPermissionsKeys = {\n ReportManagement: {\n Management: 'ReportManagement:Permission:Management',\n Report: {\n Management: 'ReportManagement:Permission:Report.Management',\n View: 'ReportManagement:Permission:Report.View',\n Create: 'ReportManagement:Permission:Report.Create',\n Update: 'ReportManagement:Permission:Report.Update',\n Delete: 'ReportManagement:Permission:Report.Delete',\n },\n Category: {\n Management: 'ReportManagement:Permission:Category.Management',\n View: 'ReportManagement:Permission:Category.View',\n Create: 'ReportManagement:Permission:Category.Create',\n Update: 'ReportManagement:Permission:Category.Update',\n Delete: 'ReportManagement:Permission:Category.Delete',\n },\n },\n};\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, Injector } from '@angular/core';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n\n constructor(private injector: Injector) {}\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMPermissionsKeys.ReportManagement;\n const trans = async (key: string) => await this.translateService.translateAsync(key);\n\n context\n .addGroup(RootConfig.module.name, await trans('@report-management:module.menus.root.title'))\n // Reports Management\n .addPermission(keys.Report.Management, await trans('@report-management:reports.permissions.reports.title'))\n .addChild(keys.Report.View, await trans('@report-management:reports.permissions.reports.actions.view.title'))\n .addChild(keys.Report.Create, await trans('@report-management:reports.permissions.reports.actions.create.title'))\n .addChild(keys.Report.Update, await trans('@report-management:reports.permissions.reports.actions.update.title'))\n .addChild(keys.Report.Delete, await trans('@report-management:reports.permissions.reports.actions.delete.title'))\n .endPermission()\n // Categories Management\n .addPermission(keys.Category.Management, await trans('@report-management:reports.permissions.categories.title'))\n .addChild(keys.Category.View, await trans('@report-management:reports.permissions.categories.actions.view.title'))\n .addChild(keys.Category.Create, await trans('@report-management:reports.permissions.categories.actions.create.title'))\n .addChild(keys.Category.Update, await trans('@report-management:reports.permissions.categories.actions.update.title'))\n .addChild(keys.Category.Delete, await trans('@report-management:reports.permissions.categories.actions.delete.title'))\n .endPermission()\n .endGroup();\n }\n}\n\n","import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPReportManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n context.addItems([\n {\n name: AXPReportManagementMenuKeys.Reports,\n text: RootConfig.entities.report.titlePlural,\n path: `${this.sessionService.application?.name}/${module.route}/reports`,\n icon: RootConfig.entities.report.icon,\n priority: 900001,\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.ReportManagement.Report.View],\n },\n },\n ]);\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPEntityDefinitionLoader,\n AXPEntityDefinitionPreloader,\n AXPEntityPreloadEntity,\n} from '@acorex/platform/layout/entity';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader {\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n // Simulate report entity definition\n if (moduleName == RootConfig.module.name && entityName == RootConfig.entities.report.name) {\n return {\n name: \"Report\",\n module: \"ReportManagement\",\n title: \"Report Management\",\n formats: {\n individual: \"Report Management\",\n plural: \"Report Management\",\n },\n properties: [],\n } as AXPEntity;\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex/platform/core';\nimport { AXPReportManagementFeatureKeys } from './features.keys';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Report Management Feature Definition Provider.\n * Provides feature definitions for the Report Management module.\n */\nexport class AXPReportManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Report Builder feature\n context.addFeature(AXPReportManagementFeatureKeys.ReportBuilder, {\n title: '@report-management:features.report-builder.title',\n description: '@report-management:features.report-builder.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Saved Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.SavedReports, {\n title: '@report-management:features.saved-reports.title',\n description: '@report-management:features.saved-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Scheduled Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.ScheduledReports, {\n title: '@report-management:features.scheduled-reports.title',\n description: '@report-management:features.scheduled-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n\n // Background Reports feature\n context.addFeature(AXPReportManagementFeatureKeys.BackgroundReports, {\n title: '@report-management:features.background-reports.title',\n description: '@report-management:features.background-reports.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex/platform/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { ReportManagementManifest } from './manifest';\nimport { AXPDomainModule } from '@acorex/platform/domain';\nimport { provideEntity } from '@acorex/platform/layout/entity';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { RootConfig } from './const';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\n\n// Entity Modules\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXPReportManagementFeatureDefinitionProvider } from './feature-definition.provider';\n\nfunction routesFacory() {\n let routes: Routes = [\n {\n path: `:app/${RootConfig.module.route}/viewer`,\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: ':reportId',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n {\n path: '',\n loadComponent: () =>\n import('./features/report-viewer/report-viewer-page/report-viewer-page.component').then(\n (c) => c.AXPReportViewerPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n {\n path: `:app/${RootConfig.module.route}/reports`,\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n children: [\n {\n path: '**',\n loadComponent: () =>\n import('./features/report-runner/report-runner-root-page/report-runner-root-page.component').then(\n (c) => c.AXMReportRunnerRootPageComponent,\n ),\n data: { reuse: true },\n },\n ],\n },\n ];\n return routes;\n}\n\n@NgModule({\n imports: [\n AXPDomainModule,\n // Entity Modules\n ],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n provideEntity([RootConfig.entities.report.fullName, RootConfig.entities.category.fullName]),\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: ReportManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXPReportManagementFeatureDefinitionProvider,\n multi: true,\n },\n ],\n})\nexport class AXMReportManagementModule { }\n","//#region ---- Imports ----\n\nimport { AXPQuerySort } from '@acorex/platform/common';\nimport {\n AXPActionMenuItem,\n AXPCategoryEntity,\n AXPExportOptions,\n AXPFilterClause,\n AXPSystemActionType,\n} from '@acorex/platform/core';\nimport { AXPWidgetColumnNode, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPCommand } from '@acorex/platform/runtime';\n\n//#endregion\n\n//#region ---- Core Report Types and Interfaces ----\n\nexport type AXPReportLayoutType = 'table' | 'chart' | 'cards' | 'custom' | 'pdf';\n\n/**\n * Report Category - Extends AXPCategoryEntity for consistency and performance\n *\n * Inherited properties from AXPCategoryEntity:\n * - id: string - Unique identifier\n * - title: string - Display name\n * - description?: string - Category description\n * - parentId?: string - Parent category ID\n * - childrenCount: number - Direct child categories count (enables lazy loading)\n * - itemsCount?: number - Direct reports count (replaces hasReport boolean)\n * - totalChildrenCount?: number - Total nested categories (optional, for analytics)\n * - totalItemsCount?: number - Total reports in tree (optional, for analytics)\n *\n * Performance benefits:\n * - Lazy loading support (childrenCount > 0 shows expand icon)\n * - Report count display (itemsCount shows \"5 reports\" badge)\n * - Efficient queries (no need to query to know if expandable)\n */\nexport interface AXPReportCategory extends AXPCategoryEntity {\n // No additional properties needed - all inherited from AXPCategoryEntity\n // Use: childrenCount instead of hasChild\n // Use: itemsCount instead of hasReport\n}\n\nexport interface AXPReportDefinition {\n id: string;\n title: string;\n description?: string;\n categoryIds: string[];\n parameterGroups: AXPReportParameterGroup[];\n permissions?: string[];\n layouts: AXPReportLayoutDefinition[]; // Changed to support multiple layouts\n defaultLayoutId: string; // Which layout to show by default\n}\n\nexport type AXPReportLayoutAction = AXPActionMenuItem & {\n priority: 'primary' | 'secondary';\n};\n\n/**\n * Layout Definition - Associates a layout with metadata\n */\nexport interface AXPReportLayoutDefinition {\n id: string; // Unique identifier for this layout\n title: string; // Display name (e.g., \"Table View\", \"Chart View\")\n description?: string; // Optional description\n icon?: string; // Icon for layout switcher UI\n layout: AXPReportLayout; // The actual layout configuration\n dataSource?: AXPReportDataSource; // Optional layout-specific dataSource (overrides report-level)\n isDefault?: boolean; // Alternative to defaultLayoutId\n actions?: AXPReportLayoutAction[];\n export?: AXPExportOptions;\n}\n\nexport interface AXPReportParameterGroup {\n name: string;\n title: string;\n description?: string;\n parameters: AXPReportParameter[];\n}\n\nexport interface AXPReportParameter {\n path: string;\n title: string;\n description?: string;\n widget: AXPWidgetNode;\n}\n\n//#endregion\n\n//#region ---- Data Source Types ----\n\nexport type AXPReportDataSource =\n | AXPQueryDataSource\n | AXPCustomDataSource\n | AXPAggregatedDataSource\n | AXPTransformedDataSource;\n\n/**\n * Query Data Source - Used for executing predefined queries (AXPQuery)\n */\nexport interface AXPQueryDataSource {\n type: 'query';\n name: string; // The registered query name, e.g., 'getEmployeeList'\n description?: string;\n\n inputs?: AXPReportParameterBinding[]; // Maps report parameters to query inputs\n sortFields?: AXPQuerySort[]; // Default sorting applied by the backend\n pagination?: boolean; // Enables paging in result set\n}\n\n/**\n * Custom Data Source - Used for fetching data from custom providers like REST APIs or external services\n */\nexport interface AXPCustomDataSource {\n type: 'custom';\n provider: string; // Example: 'http://api/report' or 'custom:MyHandler'\n description?: string;\n\n inputs?: AXPReportParameterBinding[]; // Maps report parameters to payload\n options?: { [key: string]: any }; // Additional options for the custom handler\n}\n\n/**\n * Parameter Binding - Maps report-level parameters to actual query/command input structure\n */\nexport interface AXPReportParameterBinding {\n parameterKey: string; // Report parameter key, e.g., 'startDate'\n bindTo: string; // Input key in the query/command payload, e.g., 'filters.from'\n}\n\n/**\n * Aggregated Data Source - Used for pre-aggregated data optimized for charts\n */\nexport interface AXPAggregatedDataSource {\n type: 'aggregated';\n baseQuery: string; // Base query to aggregate from\n description?: string;\n\n groupBy: string[]; // Fields to group by\n aggregations: AXPAggregation[]; // Aggregation operations\n inputs?: AXPReportParameterBinding[];\n}\n\n/**\n * Transformed Data Source - Applies transformations to existing data sources\n */\nexport interface AXPTransformedDataSource {\n type: 'transformed';\n baseDataSource: AXPReportDataSource; // Source to transform\n description?: string;\n\n transformations: AXPDataTransformation[]; // List of transformations\n inputs?: AXPReportParameterBinding[];\n}\n\n/**\n * Aggregation operation for aggregated data sources\n */\nexport interface AXPAggregation {\n field: string;\n operation: 'sum' | 'avg' | 'count' | 'min' | 'max' | 'distinct';\n alias?: string; // Output field name\n}\n\n/**\n * Data transformation operation\n */\nexport interface AXPDataTransformation {\n type: 'filter' | 'sort' | 'group' | 'pivot' | 'format';\n config: Record<string, any>; // Transformation-specific configuration\n}\n\n//#endregion\n\n//#region ---- Layout Types ----\n\nexport type AXPReportLayout = AXPReportTableLayout | AXPReportChartLayout | AXPReportPdfLayout;\n\n/**\n * Table Layout - Displays data in tabular format\n */\n\nexport interface AXPReportTableLayoutRowAction extends AXPActionMenuItem {\n priority: 'primary' | 'secondary';\n type: AXPSystemActionType | string;\n default?: boolean;\n}\n\nexport interface AXPReportTableLayout {\n type: 'table';\n columns: AXPReportColumn[];\n actions?: AXPReportTableLayoutRowAction[];\n options?: AXPTableOptions;\n groupBy?: string[];\n conditionalFormatting?: AXPConditionalFormatRule[];\n summary?: AXPReportSummaryOptions[];\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\nexport interface AXPTableOptions {\n pagination?: boolean;\n stickyHeader?: boolean;\n stripedRows?: boolean;\n sorting?: AXPQuerySort[];\n selectable?: {\n mode: 'single' | 'multiple' | 'none';\n };\n}\n\n/**\n * Chart Layout - Displays data in various chart formats\n */\nexport interface AXPReportChartLayout {\n type: 'chart';\n options: AXPReportChartOptions;\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\nexport interface AXPReportChartOptions {\n chartType: 'bar' | 'line' | 'pie' | 'doughnut' | 'area' | 'scatter' | 'radar' | 'mixed';\n dataMapping: AXPChartDataMapping;\n styling?: AXPChartStyling;\n interactivity?: AXPChartInteractivity;\n}\n\n/**\n * Chart Data Mapping Configuration\n */\nexport interface AXPChartDataMapping {\n // Core fields\n xField: string; // X-axis data field\n yFields: string | string[]; // Y-axis data field(s) for multiple series\n\n // Grouping and categorization\n groupBy?: string; // Group data by this field\n seriesField?: string; // Field to create multiple series\n\n // Special fields for specific chart types\n sizeField?: string; // For bubble charts\n colorField?: string; // For gradient/conditional coloring\n labelField?: string; // Custom label field\n\n // Data aggregation\n aggregation?: {\n method: 'sum' | 'avg' | 'count' | 'min' | 'max';\n field: string;\n };\n}\n\n/**\n * Chart Visual Styling Configuration\n */\nexport interface AXPChartStyling {\n // Theme and colors\n colorScheme?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'custom';\n customColors?: string[];\n\n // Chart appearance\n gridLines?: boolean;\n legend?: {\n show: boolean;\n position: 'top' | 'bottom' | 'left' | 'right';\n };\n\n // Axes configuration\n xAxis?: AXPChartAxisConfig;\n yAxis?: AXPChartAxisConfig;\n\n // Animation\n animation?: {\n enabled: boolean;\n duration?: number;\n };\n\n // Chart-specific styling\n chartSpecific?: {\n // Bar chart options\n bar?: {\n orientation: 'vertical' | 'horizontal';\n mode: 'grouped' | 'stacked';\n barWidth?: number;\n };\n\n // Line chart options\n line?: {\n style: 'straight' | 'curved' | 'stepped';\n showPoints?: boolean;\n tension?: number;\n };\n\n // Area chart options\n area?: {\n mode: 'normal' | 'stacked' | 'percentage';\n opacity?: number;\n };\n\n // Pie/Doughnut options\n pie?: {\n startAngle?: number;\n innerRadius?: number; // For doughnut charts\n showLabels?: boolean;\n };\n };\n}\n\n/**\n * Chart Axis Configuration\n */\nexport interface AXPChartAxisConfig {\n title?: string;\n show?: boolean;\n type?: 'linear' | 'logarithmic' | 'datetime' | 'category';\n min?: number | string;\n max?: number | string;\n format?: string;\n gridLines?: boolean;\n tickInterval?: number;\n}\n\n/**\n * Chart Interactivity Configuration\n */\nexport interface AXPChartInteractivity {\n // Zoom and pan\n zoom?: {\n enabled: boolean;\n mode?: 'x' | 'y' | 'xy';\n };\n\n // Tooltips\n tooltips?: {\n enabled: boolean;\n format?: string;\n showOnHover?: boolean;\n };\n\n // Click events\n onClick?: {\n enabled: boolean;\n action?: 'drill-down' | 'filter' | 'custom';\n };\n\n // Selection\n selection?: {\n enabled: boolean;\n mode?: 'single' | 'multiple';\n };\n\n // Export\n export?: {\n enabled: boolean;\n formats?: ('png' | 'jpg' | 'pdf' | 'svg')[];\n };\n}\n\n/**\n * PDF Layout - Displays PDF documents\n */\nexport interface AXPReportPdfLayout {\n type: 'pdf';\n options?: AXPReportPdfOptions;\n header?: AXPReportHeaderFooter;\n footer?: AXPReportHeaderFooter;\n}\n\n/**\n * PDF Layout Options\n */\nexport interface AXPReportPdfOptions {\n showDownloadButton?: boolean;\n showPrintButton?: boolean;\n showZoomControls?: boolean;\n showFullscreenButton?: boolean;\n defaultZoom?: number; // Percentage (e.g., 100, 150, 200)\n height?: string; // CSS height (e.g., '100%', '600px')\n}\n\n//#region ---- Shared Models ----\n\nexport interface AXPReportColumn {\n field: string;\n title?: string;\n visible?: boolean;\n width?: number | 'auto';\n align?: 'left' | 'center' | 'right';\n widget?: AXPWidgetColumnNode;\n}\n\nexport interface AXPReportSummaryOptions {\n field: string;\n operation: 'sum' | 'avg' | 'count' | 'min' | 'max';\n displayIn: 'groupFooter' | 'reportFooter';\n}\n\nexport interface AXPConditionalFormatRule {\n field: string;\n condition: '>' | '<' | '=' | '!=' | 'contains';\n value: any;\n style: {\n color?: string;\n backgroundColor?: string;\n fontWeight?: 'normal' | 'bold';\n };\n}\n\nexport interface AXPReportHeaderFooter {\n title?: string;\n logoUrl?: string;\n showDate?: boolean;\n showParameters?: boolean;\n customHtml?: string;\n}\n\n/**\n * Layout switcher options for UI components\n */\nexport interface AXPLayoutSwitcherOption {\n id: string;\n title: string;\n icon?: string;\n type: AXPReportLayoutType;\n}\n\n/**\n * Runtime layout selection state\n */\nexport interface AXPReportLayoutState {\n reportId: string;\n activeLayoutId: string;\n availableLayouts: AXPLayoutSwitcherOption[];\n}\n\n/**\n * Layout validation result\n */\nexport interface AXPLayoutValidationResult {\n isValid: boolean;\n errors: string[];\n layoutId: string;\n}\n\n/**\n * Data source resolution result for a specific layout\n */\nexport interface AXPLayoutDataSourceResolution {\n layoutId: string;\n dataSource: AXPReportDataSource;\n source: 'layout' | 'report' | 'none'; // Where the dataSource came from\n}\n\n/**\n * Layout execution context with resolved data source\n */\nexport interface AXPLayoutExecutionContext {\n reportId: string;\n layoutId: string;\n dataSource: AXPReportDataSource;\n filters: AXPFilterClause;\n}\n\nexport type AXPExecutionReportResult =\n | { type: 'table'; items: Record<string, unknown>[]; total: number }\n | { type: 'chart'; data: Record<string, unknown> }\n | { type: 'cards'; items: Record<string, unknown>[] }\n | { type: 'custom'; data: unknown }\n | { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n\nexport type AXPExecutionReportCommandResult = AXPReportLayout & { data: AXPExecutionReportResult };\n\nexport interface AXPExecutionReportCommand extends AXPCommand<\n AXPLayoutExecutionContext,\n AXPExecutionReportCommandResult\n> {}\n\n/**\n * Report execution status and metadata\n */\nexport interface AXPReportExecutionStatus {\n reportId: string;\n layoutId: string;\n status: 'pending' | 'executing' | 'completed' | 'failed' | 'cancelled';\n startTime: Date;\n endTime?: Date;\n duration?: number; // milliseconds\n recordCount?: number;\n error?: AXPReportExecutionError;\n}\n\n/**\n * Detailed error information for report execution\n */\nexport interface AXPReportExecutionError {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n stack?: string;\n}\n\n/**\n * Report execution request with options\n */\nexport interface AXPReportExecutionRequest {\n reportId: string;\n layoutId: string;\n parameters: Record<string, unknown>;\n options?: AXPReportExecutionOptions;\n}\n\n/**\n * Options for report execution\n */\nexport interface AXPReportExecutionOptions {\n timeout?: number; // milliseconds\n priority?: 'low' | 'normal' | 'high';\n cache?: boolean;\n cacheTimeout?: number; // seconds\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject, Injectable } from '@angular/core';\nimport { AXPReportCategory, AXPReportDefinition, AXPReportLayoutDefinition, AXPReportLayoutType, AXPReportLayoutAction, AXPExecutionReportResult, AXPLayoutExecutionContext, AXPExecutionReportCommandResult } from './report.types';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../const';\n\n//#endregion\n\n/**\n * Report Viewer Service\n * \n * Handles report definition retrieval, caching, and layout actions.\n * \n * Performance optimizations:\n * 1. Uses childrenCount to determine if category has children (no query needed)\n * 2. Uses itemsCount to determine if category has reports (no query needed)\n * 3. Aggressive caching prevents duplicate API calls\n * 4. Single pending request per resource prevents race conditions\n * 5. Lazy loading - only loads data when needed\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPReportViewerService {\n //#region ---- Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly reportCategoryService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.report.name + \"Category\").data<any, any>();\n private readonly reportDefinitionService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.report.name).data();\n\n //#endregion\n\n //#region ---- Cache Storage ----\n\n /** Cache for categories by id - O(1) lookup */\n private categoriesById = new Map<string, AXPReportCategory>();\n\n /** Cache for categories by parentId - O(1) lookup */\n private categoriesByParentId = new Map<string | undefined, AXPReportCategory[]>();\n\n /** Cache for report definitions by categoryId - O(1) lookup */\n private definitionsByCategory = new Map<string, AXPReportDefinition[]>();\n\n /** Cache for individual report definitions by id - O(1) lookup */\n private definitionsById = new Map<string, AXPReportDefinition>();\n\n /** Pending API requests to prevent duplicate calls */\n private pendingCategoriesRequests = new Map<string | undefined, Promise<AXPReportCategory[]>>();\n private pendingDefinitionsRequests = new Map<string, Promise<AXPReportDefinition[]>>();\n private pendingReportRequests = new Map<string, Promise<AXPReportDefinition | undefined>>();\n\n //#endregion\n\n //#region ---- Public API: Categories ----\n\n /**\n * Get categories by parentId with aggressive caching\n * \n * Optimization: Returns cached result immediately if available,\n * preventing unnecessary API calls during navigation\n * \n * @param parentId - Parent category ID (undefined = root categories)\n * @returns Array of categories with count metadata (childrenCount, itemsCount)\n */\n async getCategories(parentId?: string): Promise<AXPReportCategory[]> {\n // ✅ Fast path: Return cached result\n if (this.categoriesByParentId.has(parentId)) {\n return this.categoriesByParentId.get(parentId)!;\n }\n\n // ✅ Prevent duplicate requests: Return pending promise\n if (this.pendingCategoriesRequests.has(parentId)) {\n return this.pendingCategoriesRequests.get(parentId)!;\n }\n\n // ✅ Create single request and cache it\n const requestPromise = this.loadCategories(parentId);\n this.pendingCategoriesRequests.set(parentId, requestPromise);\n\n return requestPromise;\n }\n\n /**\n * Get single category by ID with O(1) lookup\n * \n * Optimization: Uses Map for instant retrieval, falls back to\n * searching cache, then providers if not found\n */\n async getCategoryById(categoryId: string): Promise<AXPReportCategory | undefined> {\n // ✅ Fast path: O(1) lookup in cache\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n\n // ✅ Search in cached parent-child lists\n for (const categories of this.categoriesByParentId.values()) {\n const found = categories.find(cat => cat.id === categoryId);\n if (found) {\n this.categoriesById.set(categoryId, found);\n return found;\n }\n }\n\n // ✅ Load root categories if not loaded\n if (!this.categoriesByParentId.has(undefined)) {\n await this.getCategories();\n if (this.categoriesById.has(categoryId)) {\n return this.categoriesById.get(categoryId);\n }\n }\n\n // ✅ Breadth-first search through hierarchy\n return this.searchCategoryInHierarchy(categoryId);\n }\n\n /**\n * Get category path from root to specified category\n * \n * Optimization: Builds path using cached categories only\n */\n async getCategoriesPathById(categoryId: string): Promise<AXPReportCategory[]> {\n const path: AXPReportCategory[] = [];\n let currentCategoryId: string | undefined = categoryId;\n\n while (currentCategoryId) {\n const category = await this.getCategoryById(currentCategoryId);\n if (!category) {\n throw new Error(`Category '${currentCategoryId}' not found`);\n }\n path.unshift(category);\n currentCategoryId = category.parentId;\n }\n\n return path;\n }\n\n //#endregion\n\n //#region ---- Public API: Report Definitions ----\n\n /**\n * Get report definitions for a category with smart caching\n * \n * Optimization: Checks itemsCount before querying\n * - If itemsCount = 0, returns empty array (no API call)\n * - If itemsCount > 0, loads and caches reports\n * - Returns cached result on subsequent calls\n * \n * @param categoryId - Category ID to get reports from\n * @returns Array of report definitions\n */\n async getReportsByCategoryId(categoryId: string): Promise<AXPReportDefinition[]> {\n // ✅ Fast path: Return cached result\n if (this.definitionsByCategory.has(categoryId)) {\n return this.definitionsByCategory.get(categoryId)!;\n }\n\n // ✅ Smart optimization: Check itemsCount before querying\n const category = await this.getCategoryById(categoryId);\n if (category && category.itemsCount !== undefined && category.itemsCount === 0) {\n // Category has no reports - cache empty array and skip API call\n const emptyArray: AXPReportDefinition[] = [];\n this.definitionsByCategory.set(categoryId, emptyArray);\n return emptyArray;\n }\n\n // ✅ Prevent duplicate requests\n if (this.pendingDefinitionsRequests.has(categoryId)) {\n return this.pendingDefinitionsRequests.get(categoryId)!;\n }\n\n // ✅ Load from entity service\n const requestPromise = this.loadReports(categoryId);\n this.pendingDefinitionsRequests.set(categoryId, requestPromise);\n\n return requestPromise;\n }\n\n /**\n * Get single report definition by ID with O(1) lookup\n * \n * Optimization: Uses Map for instant retrieval\n */\n async getReportById(id: string): Promise<AXPReportDefinition | undefined> {\n // ✅ Fast path: O(1) lookup in cache\n if (this.definitionsById.has(id)) {\n return this.definitionsById.get(id);\n }\n\n // ✅ Prevent duplicate requests\n if (this.pendingReportRequests.has(id)) {\n return this.pendingReportRequests.get(id)!;\n }\n\n // ✅ Load from entity service\n const requestPromise = this.loadReport(id);\n this.pendingReportRequests.set(id, requestPromise);\n\n return requestPromise;\n }\n\n /**\n * Get category ID containing a specific report\n * \n * Optimization: Searches cache first, loads on-demand if needed\n */\n async getCategoryIdByReportId(reportId: string): Promise<string | undefined> {\n // ✅ Search in cached reports\n for (const [categoryId, reports] of this.definitionsByCategory.entries()) {\n if (reports.some(report => report.id === reportId)) {\n return categoryId;\n }\n }\n\n // ✅ Try loading the report to find its category\n const report = await this.getReportById(reportId);\n if (report && report.categoryIds && report.categoryIds.length > 0) {\n return report.categoryIds[0]; // Return first category\n }\n\n return undefined;\n }\n\n /**\n * Get category path for a report\n */\n async getCategoriesPathByReportId(reportId: string): Promise<AXPReportCategory[]> {\n const categoryId = await this.getCategoryIdByReportId(reportId);\n if (!categoryId) {\n throw new Error(`Report '${reportId}' not found in any category`);\n }\n return this.getCategoriesPathById(categoryId);\n }\n\n //#endregion\n\n //#region ---- Public API: Layout Actions ----\n\n /**\n * Get general actions list for a layout type\n * Override in connectivity layer (mock/API) to provide general actions\n * Base implementation returns empty array\n * \n * @param layoutType - The layout type\n * @returns Array of general actions for the layout type\n */\n getGeneralActionsList(layoutType: AXPReportLayoutType): AXPReportLayoutAction[] {\n return [];\n }\n\n /**\n * Get merged actions for a layout definition\n * Combines general actions (from getGeneralActionsList) with layout-specific actions\n * Layout-specific actions take precedence (by name) over general actions\n * \n * @param layoutDefinition - The layout definition\n * @returns Merged array of actions (general + custom)\n */\n getMergedActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n const generalActions = this.getGeneralActionsList(layoutDefinition.layout.type);\n const customActions = layoutDefinition.actions || [];\n\n // Create a map of custom actions by name for quick lookup\n const customActionsMap = new Map<string, AXPReportLayoutAction>();\n customActions.forEach(action => {\n if (action.name) {\n customActionsMap.set(action.name, action);\n }\n });\n\n // Merge: Start with general actions, replace with custom if name matches\n const merged: AXPReportLayoutAction[] = [];\n const usedNames = new Set<string>();\n\n // Add general actions (unless overridden by custom)\n generalActions.forEach(action => {\n if (action.name && customActionsMap.has(action.name)) {\n // Custom action overrides general action\n merged.push(customActionsMap.get(action.name)!);\n usedNames.add(action.name);\n } else {\n merged.push(action);\n if (action.name) {\n usedNames.add(action.name);\n }\n }\n });\n\n // Add custom actions that weren't already added (new actions)\n customActions.forEach(action => {\n if (action.name && !usedNames.has(action.name)) {\n merged.push(action);\n usedNames.add(action.name);\n } else if (!action.name) {\n // Actions without names are always added\n merged.push(action);\n }\n });\n\n return merged;\n }\n\n /**\n * Get primary actions for a layout definition\n */\n getPrimaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter(action => action.priority === 'primary');\n }\n\n /**\n * Get secondary actions for a layout definition\n */\n getSecondaryActions(layoutDefinition: AXPReportLayoutDefinition): AXPReportLayoutAction[] {\n return this.getMergedActions(layoutDefinition).filter(action => action.priority === 'secondary');\n }\n\n //#endregion\n\n //#region ---- Private: Data Loading ----\n\n /**\n * Load categories from entity service and cache results\n * Can be overridden in extended services (e.g., API layer)\n */\n protected async loadCategories(parentId?: string): Promise<AXPReportCategory[]> {\n try {\n const list: AXPReportCategory[] = [];\n\n if (parentId) {\n const result = await this.reportCategoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n }]\n }\n });\n list.push(...result.items);\n } else {\n const result = await this.reportCategoryService.query();\n list.push(...result.items);\n }\n\n // ✅ Cache results for fast subsequent access\n this.categoriesByParentId.set(parentId, list);\n list.forEach(cat => this.categoriesById.set(cat.id, cat));\n\n return list;\n } finally {\n this.pendingCategoriesRequests.delete(parentId);\n }\n }\n\n /**\n * Load report definitions from entity service and cache results\n * Can be overridden in extended services (e.g., API layer)\n */\n protected async loadReports(categoryId: string): Promise<AXPReportDefinition[]> {\n try {\n const list: AXPReportDefinition[] = [];\n\n // Use 'contains' operator to filter by categoryIds array field\n const result = await this.reportDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: categoryId,\n }]\n }\n });\n list.push(...(result.items as AXPReportDefinition[]));\n\n // ✅ Cache results for fast subsequent access\n this.definitionsByCategory.set(categoryId, list);\n list.forEach(def => this.definitionsById.set(def.id, def));\n\n return list;\n } finally {\n this.pendingDefinitionsRequests.delete(categoryId);\n }\n }\n\n /**\n * Load single report from entity service and cache result\n * Can be overridden in extended services (e.g., API layer)\n */\n protected async loadReport(id: string): Promise<AXPReportDefinition | undefined> {\n try {\n const result = await this.reportDefinitionService.byKey(id) as AXPReportDefinition | undefined;\n\n if (result) {\n this.definitionsById.set(id, result);\n return result;\n }\n\n // Fallback: Search in cached reports\n for (const reports of this.definitionsByCategory.values()) {\n const found = reports.find(report => report.id === id);\n if (found) {\n this.definitionsById.set(id, found);\n return found;\n }\n }\n\n return undefined;\n } finally {\n this.pendingReportRequests.delete(id);\n }\n }\n\n /**\n * Breadth-first search through category hierarchy\n */\n private async searchCategoryInHierarchy(categoryId: string): Promise<AXPReportCategory | undefined> {\n const searchQueue: (string | undefined)[] = [undefined];\n const searched = new Set<string | undefined>();\n\n while (searchQueue.length > 0) {\n const parentId = searchQueue.shift()!;\n if (searched.has(parentId)) continue;\n searched.add(parentId);\n\n const categories = await this.getCategories(parentId);\n const found = categories.find(cat => cat.id === categoryId);\n\n if (found) {\n return found;\n }\n\n // ✅ Optimization: Only search children if childrenCount > 0\n for (const category of categories) {\n if (category.childrenCount > 0 && !searched.has(category.id)) {\n searchQueue.push(category.id);\n }\n }\n }\n\n return undefined;\n }\n\n //#endregion\n\n //#region ---- Cache Management ----\n\n /**\n * Check if category has children (uses cached count)\n */\n categoryHasChildren(categoryId: string): boolean {\n const category = this.categoriesById.get(categoryId);\n return category ? category.childrenCount > 0 : false;\n }\n\n /**\n * Check if category has reports (uses cached count)\n */\n categoryHasReports(categoryId: string): boolean {\n const category = this.categoriesById.get(categoryId);\n return category ? (category.itemsCount ?? 0) > 0 : false;\n }\n\n /**\n * Protected: Check if categories are cached for a parentId\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isCategoriesCached(parentId?: string): boolean {\n return this.categoriesByParentId.has(parentId) || this.pendingCategoriesRequests.has(parentId);\n }\n\n /**\n * Protected: Check if a category is cached by ID\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isCategoryCached(categoryId: string): boolean {\n if (this.categoriesById.has(categoryId)) {\n return true;\n }\n // Check if it might be in a cached parent list\n for (const categories of this.categoriesByParentId.values()) {\n if (categories.some(cat => cat.id === categoryId)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Protected: Check if reports are cached for a categoryId\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isReportsCached(categoryId: string): boolean {\n return this.definitionsByCategory.has(categoryId) || this.pendingDefinitionsRequests.has(categoryId);\n }\n\n /**\n * Protected: Check if a report is cached by ID\n * Used by extended services (e.g., mock) to determine if logging is needed\n */\n protected isReportCached(reportId: string): boolean {\n return this.definitionsById.has(reportId) || this.pendingReportRequests.has(reportId);\n }\n\n /**\n * Clear all caches\n */\n clearAllCache(): void {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.definitionsByCategory.clear();\n this.definitionsById.clear();\n this.pendingCategoriesRequests.clear();\n this.pendingDefinitionsRequests.clear();\n this.pendingReportRequests.clear();\n }\n\n /**\n * Clear categories cache only\n */\n clearCategoriesCache(): void {\n this.categoriesById.clear();\n this.categoriesByParentId.clear();\n this.pendingCategoriesRequests.clear();\n }\n\n /**\n * Clear reports cache only\n */\n clearReportsCache(): void {\n this.definitionsByCategory.clear();\n this.definitionsById.clear();\n this.pendingDefinitionsRequests.clear();\n this.pendingReportRequests.clear();\n }\n\n //#endregion\n\n //#endregion\n\n //#region ---- Report Execution (Override in Connectivity Layer) ----\n\n /**\n * Execute report with given context\n * Override in connectivity layer (mock/API) to implement report execution\n * \n * @param context - Layout execution context with reportId, layoutId, dataSource, and filters\n * @returns Report execution result with layout and data\n */\n async executeReport(context: AXPLayoutExecutionContext): Promise<AXPExecutionReportCommandResult> {\n throw new Error('executeReport must be implemented in connectivity layer (mock/API)');\n }\n\n //#endregion\n\n //#region ---- Action Handlers (Override in Connectivity Layer) ----\n\n /**\n * Execute action by command name\n * Override in connectivity layer (mock/API) to implement action execution\n * \n * @param commandName - Command name (e.g., 'download-report', 'print-report', 'export-report')\n * @param options - Command options (e.g., { format: 'excel', pdfData: {...}, reportData: {...} })\n */\n async executeAction(commandName: string, options?: Record<string, unknown>): Promise<void> {\n console.log(`Execute action: ${commandName} - should be implemented in connectivity layer`, options);\n }\n\n //#endregion\n}\n\n","import { AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartValue } from '@acorex/charts/line-chart';\nimport { AXPContextData, AXPFilterClause } from '@acorex/platform/core';\nimport { AXDataSourceFilterOption } from '@acorex/cdk/common';\n\nexport function AXPieChartReportMapper(data: Record<string, number>): AXDonutChartValue {\n return Object.entries(data).map(([key, value]) => ({\n id: key,\n label: key,\n value: value,\n }));\n}\n\nexport function AXBarChartReportMapper(data: Record<string, number>): AXBarChartValue {\n return Object.entries(data).map(([key, value]) => ({\n id: key,\n label: key,\n value: value,\n }));\n}\n\nexport function AXLineChartReportMapper(data: Record<string, number>): AXLineChartValue {\n const entries = Object.entries(data);\n if (entries.length === 0) {\n return [];\n }\n const dataPoints = entries.map(([key, value]) => ({\n x: key,\n y: value,\n }));\n\n return [\n {\n id: 'series-1',\n label: 'Data Series',\n tooltipLabel: 'Countries Info',\n lineColor: '#d81159',\n fillColor: '#d8115920',\n data: dataPoints,\n },\n ];\n}\n\n//#region ---- Helpers ----\n\n/**\n * Determines whether a filter value should be treated as empty.\n * This handles deep objects, arrays, and primitives so that\n * values like { from: null, to: null } are considered empty.\n */\nfunction isEmptyFilterValue(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length === 0 || value.every((item) => isEmptyFilterValue(item));\n }\n\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>);\n if (entries.length === 0) {\n return true;\n }\n\n // Consider object empty if all nested values are empty\n return entries.every(([, v]) => isEmptyFilterValue(v));\n }\n\n return false;\n}\n\n//#endregion\n\n/**\n * Converts AXPContextData (filter context) to AXPFilterClause format\n *\n * Input format:\n * {\n * \"fieldName\": {\n * \"operation\": { \"type\": \"between\" },\n * \"value\": { \"from\": \"...\", \"to\": \"...\" }\n * }\n * }\n *\n * Output format:\n * {\n * logic: 'and',\n * filters: [\n * {\n * field: 'fieldName',\n * operator: { type: 'between' },\n * value: { from: \"...\", to: \"...\" }\n * }\n * ]\n * }\n */\nexport function convertContextDataToFilterClause(context: AXPContextData): AXPFilterClause {\n const filters: AXDataSourceFilterOption[] = [];\n\n // Iterate through all keys in context\n for (const [fieldName, fieldData] of Object.entries(context)) {\n // Skip if fieldData is not an object or doesn't have operation\n if (!fieldData || typeof fieldData !== 'object' || !('operation' in fieldData)) {\n continue;\n }\n\n const operation = (fieldData as any).operation;\n const value = (fieldData as any).value;\n\n // Skip if operation type is missing\n if (!operation || !operation.type) {\n continue;\n }\n\n // Skip if value is effectively empty (null/undefined/empty string,\n // empty object/array, or deep object where all nested values are empty)\n if (isEmptyFilterValue(value)) {\n continue;\n }\n\n // Create filter clause\n const filter: AXDataSourceFilterOption = {\n field: fieldName,\n operator: {\n type: operation.type,\n },\n value: value,\n };\n\n filters.push(filter);\n }\n\n // Return filter clause with AND logic\n if (filters.length === 0) {\n return {\n logic: 'and',\n filters: [],\n };\n }\n\n return {\n logic: 'and',\n filters: filters,\n };\n}\n","import { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPContextData } from '@acorex/platform/core';\nimport { AXPDynamicFormDefinition } from '@acorex/platform/layout/builder';\nimport { AXPPageStatus, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { computed, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';\nimport {\n AXPExecutionReportCommandResult,\n AXPLayoutExecutionContext,\n AXPLayoutSwitcherOption,\n AXPReportChartLayout,\n AXPReportDefinition,\n AXPReportViewerService,\n AXPReportLayoutDefinition,\n AXPReportParameter,\n AXPReportParameterGroup,\n AXPReportPdfLayout,\n AXPReportTableLayout,\n} from '../../reports';\nimport { convertContextDataToFilterClause } from '../../reports/report-mapper';\n\nexport const AXPReportViewerViewModel = signalStore(\n withState(() => ({\n reportDefinition: null as AXPReportDefinition | null,\n currentLayout: null as AXPReportLayoutDefinition | null,\n filterContext: {} as AXPContextData,\n categoriesPath: [] as any[],\n allowFetchData: false,\n shouldExecuteReport: false,\n lastAppliedFilterContext: null as AXPContextData | null, // Track last applied filters\n hasBeenExecuted: false, // Track if report has been executed at least once\n status: AXPPageStatus.Idle,\n error: null as string | null,\n showRowIndexColumn: false,\n })),\n\n withComputed((store, widgetRegistryService = inject(AXPWidgetRegistryService)) => ({\n //#region ---- Layout Management ----\n\n availableLayouts: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts) return [];\n\n return report.layouts.map(\n (layout: AXPReportLayoutDefinition) =>\n ({\n id: layout.id,\n title: layout.title,\n icon: layout.icon,\n type: layout.layout.type,\n }) as AXPLayoutSwitcherOption,\n );\n }),\n\n defaultLayout: computed(() => {\n const report = store.reportDefinition();\n if (!report?.layouts?.length) return null;\n\n // Find layout marked as default, or use first layout\n return report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n }),\n\n activeLayoutId: computed(() => store.currentLayout()?.id || null),\n\n layoutType: computed(() => store.currentLayout()?.layout?.type || null),\n\n //#endregion\n\n //#region ---- Layout-Specific Configurations ----\n\n tableLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'table' ? (layout.layout as AXPReportTableLayout) : null;\n }),\n\n chartLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n }),\n\n pdfLayoutConfig: computed(() => {\n const layout = store.currentLayout();\n return layout?.layout?.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n }),\n\n //#endregion\n\n //#region ---- State Indicators ----\n\n isLoading: computed(() => store.status() === AXPPageStatus.Processing),\n isExecuting: computed(() => store.status() === AXPPageStatus.Submitting),\n hasError: computed(() => store.error() !== null),\n canExecute: computed(() => {\n // Always allow execution if there's an error (to enable retry)\n if (store.error() !== null) {\n return true;\n }\n\n // Allow execution if there are unapplied filters\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n if (hasBeenExecuted && JSON.stringify(currentContext) !== JSON.stringify(lastApplied)) {\n return true;\n }\n\n // Allow execution if report hasn't been executed yet\n if (!hasBeenExecuted) {\n return true;\n }\n\n // Otherwise, don't allow execution\n return false;\n }),\n hasMultipleLayouts: computed(() => {\n const report = store.reportDefinition();\n return (report?.layouts?.length ?? 0) > 1;\n }),\n\n title: computed(() => store.reportDefinition()?.title ?? '@report-management:report-viewer.components.report-viewer.title'),\n description: computed(() => store.reportDefinition()?.description ?? null),\n\n //#endregion\n\n //#region ---- Form Configuration ----\n\n formDefinition: computed<AXPDynamicFormDefinition>(() => {\n const report = store.reportDefinition();\n if (!report || !report.parameterGroups) {\n return { groups: [] } as AXPDynamicFormDefinition;\n }\n const formDefinition: AXPDynamicFormDefinition = {\n groups: report.parameterGroups.map((group: AXPReportParameterGroup) => ({\n name: group.name,\n title: group.title,\n description: group.description,\n parameters: group.parameters.map((param: AXPReportParameter) => {\n const widget = widgetRegistryService.resolve(param.widget.type ?? '');\n const widgetType = widget?.defaultFilterWidgetName ?? (param.widget.type ?? '');\n return {\n path: param.path,\n title: param.title,\n description: param.description,\n badge: `{{ filter.getTitle(context.eval(\"${param.path}.operation.type\")) }}`,\n widget: {\n path: param.path,\n type: widgetType,\n options: {\n ...param.widget.options,\n clearButton: true,\n hasClearButton: true,\n },\n triggers: param.widget.triggers,\n\n }\n };\n }),\n })),\n };\n return formDefinition;\n }),\n\n //#endregion\n\n //#region ---- Layout Type Detection ----\n\n isTableLayout: computed(() => store.currentLayout()?.layout?.type === 'table'),\n isChartLayout: computed(() => store.currentLayout()?.layout?.type === 'chart'),\n isPdfLayout: computed(() => store.currentLayout()?.layout?.type === 'pdf'),\n\n //#endregion\n\n //#region ---- Filter States ----\n\n hasUnappliedFilters: computed(() => {\n const currentContext = store.filterContext();\n const lastApplied = store.lastAppliedFilterContext();\n const hasBeenExecuted = store.hasBeenExecuted();\n\n // If report has never been executed, don't show unapplied filters warning\n if (!hasBeenExecuted) {\n return false;\n }\n\n // If no filters have been applied yet, return true\n if (lastApplied === null) {\n return true;\n }\n\n // Check if current filters are different from last applied filters\n const currentKeys = Object.keys(currentContext);\n const lastKeys = Object.keys(lastApplied);\n\n if (currentKeys.length !== lastKeys.length) {\n return true;\n }\n\n // Check if any values are different\n for (const key of currentKeys) {\n if (currentContext[key] !== lastApplied[key]) {\n return true;\n }\n }\n\n return false;\n }),\n\n //#endregion\n\n //#region ---- Action States ----\n\n canSwitchLayout: computed(\n () => (store.reportDefinition()?.layouts?.length ?? 0) > 1 && store.status() !== AXPPageStatus.Submitting,\n ),\n\n canSelectRows: computed(() => {\n const layout = store.currentLayout();\n return (\n layout?.layout?.type === 'table' &&\n layout.layout.options?.selectable?.mode &&\n layout.layout.options?.selectable?.mode !== 'none'\n );\n }),\n\n //#endregion\n })),\n\n withMethods(\n (\n store,\n reportDefinitionService: AXPReportViewerService = inject(AXPReportViewerService),\n ) => {\n const executeReport = async (): Promise<void> => {\n try {\n const report = store.reportDefinition();\n const layout = store.currentLayout();\n if (!report || !layout) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.report-or-layout-not-found',\n });\n return;\n }\n\n patchState(store, {\n status: AXPPageStatus.Submitting,\n error: null,\n allowFetchData: true,\n shouldExecuteReport: true,\n lastAppliedFilterContext: { ...store.filterContext() }, // Mark current filters as applied\n hasBeenExecuted: true, // Mark that report has been executed at least once\n });\n\n patchState(store, {\n status: AXPPageStatus.Submitted,\n error: null,\n });\n } catch (error) {\n patchState(store, {\n status: AXPPageStatus.Error,\n error: error instanceof Error ? error.message : '@report-management:report-viewer.messages.error.unexpected-execution',\n });\n }\n };\n const fetchData = async (parameters: AXPContextData = {}): Promise<AXPExecutionReportCommandResult | null> => {\n const report = store.reportDefinition();\n const layout = store.currentLayout();\n if (!report || !layout) {\n return null;\n }\n\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n try {\n // Create execution context - ensure dataSource is provided\n const dataSource = layout.dataSource || {\n type: 'query' as const,\n name: 'getEmployeeList',\n };\n\n // Convert filter context to AXPFilterClause format\n const filterContext = {\n ...store.filterContext(),\n ...parameters,\n };\n const filterClause = convertContextDataToFilterClause(filterContext);\n\n // Preserve pagination parameters (skip/take) that are not part of the filter context structure\n // used by convertContextDataToFilterClause (it only converts { operation, value } items).\n const paginationSkip = (filterContext as any).skip;\n const paginationTake = (filterContext as any).take;\n if (paginationSkip !== undefined) {\n (filterClause as any).skip = paginationSkip;\n }\n if (paginationTake !== undefined) {\n (filterClause as any).take = paginationTake;\n }\n\n const context: AXPLayoutExecutionContext = {\n reportId: report.id,\n layoutId: layout.id,\n dataSource: dataSource,\n filters: filterClause,\n };\n\n const executionResult = await reportDefinitionService.executeReport(context);\n return executionResult;\n } catch (error) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-execute',\n });\n console.error('Error executing report:', error);\n return null;\n } finally {\n patchState(store, {\n status: AXPPageStatus.Idle,\n });\n }\n };\n\n return {\n //#region ---- Report Loading ----\n\n async loadReport(reportId: string): Promise<void> {\n patchState(store, {\n status: AXPPageStatus.Processing,\n error: null,\n });\n\n try {\n const report = await reportDefinitionService.getReportById(reportId);\n if (report) {\n // Configure parameter widgets with proper paths\n report.parameterGroups.forEach((group) => {\n group.parameters.forEach((param) => {\n param.widget.path = param.path;\n });\n });\n\n // Load categories path for breadcrumbs\n const categoriesPath = await reportDefinitionService.getCategoriesPathByReportId(reportId);\n\n // Set default layout\n const defaultLayout =\n report.layouts.find((l: AXPReportLayoutDefinition) => l.isDefault) || report.layouts[0];\n\n patchState(store, {\n reportDefinition: report,\n currentLayout: defaultLayout,\n categoriesPath: categoriesPath || [],\n filterContext: {}, // Reset context when loading new report\n allowFetchData: false,\n hasBeenExecuted: false, // Reset execution state for new report\n });\n }\n } catch (error) {\n patchState(store, {\n error: '@report-management:report-viewer.messages.error.failed-to-load',\n });\n console.error('Error loading report:', error);\n } finally {\n patchState(store, {\n status: AXPPageStatus.Idle,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Layout Management ----\n\n switchLayout(layoutId: string): void {\n const report = store.reportDefinition();\n if (!report) return;\n\n const layout = report.layouts.find((l: AXPReportLayoutDefinition) => l.id === layoutId);\n if (layout) {\n patchState(store, {\n currentLayout: layout,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Data Execution ----\n\n executeReport,\n fetchData,\n\n //#endregion\n\n //#region ---- Filter Management ----\n\n updateFilterContext(context: Record<string, any>): void {\n patchState(store, {\n filterContext: { ...store.filterContext(), ...context },\n shouldExecuteReport: false, // Reset execution flag when filters change\n });\n },\n\n\n clearFilters(): void {\n patchState(store, {\n allowFetchData: false,\n shouldExecuteReport: false,\n filterContext: {},\n lastAppliedFilterContext: null, // Reset applied filters when clearing\n hasBeenExecuted: false, // Reset execution state when clearing filters\n });\n },\n\n resetFilters(): void {\n patchState(store, {\n allowFetchData: false,\n });\n },\n\n //#endregion\n\n //#region ---- Export Management ----\n\n async exportReport(format: string): Promise<void> {\n const layout = store.currentLayout();\n if (!layout?.export) {\n console.warn('@report-management:report-viewer.messages.warnings.export-not-configured');\n return;\n }\n\n try {\n // Export logic would go here\n // This would typically call a different command for export\n console.log(`Exporting report in ${format} format`);\n } catch (error) {\n console.error('Error exporting report:', error);\n }\n },\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n refresh(): Promise<void> {\n return executeReport();\n },\n\n clearError(): void {\n patchState(store, {\n error: null,\n });\n },\n\n clearExecutionState(): void {\n patchState(store, {\n hasBeenExecuted: false,\n allowFetchData: false,\n shouldExecuteReport: false,\n });\n },\n\n cancel(): void {\n patchState(store, {\n status: AXPPageStatus.Idle,\n hasBeenExecuted: false,\n error: null,\n });\n //TODO: Cancel the report execution\n },\n\n reset(): void {\n patchState(store, {\n reportDefinition: null,\n currentLayout: null,\n filterContext: {},\n allowFetchData: false,\n shouldExecuteReport: false,\n lastAppliedFilterContext: null,\n hasBeenExecuted: false,\n categoriesPath: [],\n status: AXPPageStatus.Idle,\n error: null,\n });\n },\n\n //#endregion\n };\n },\n ),\n\n withHooks(\n (\n store,\n translationService = inject(AXTranslationService),\n localeService = inject(AXLocaleService),\n settingsService = inject(AXPSettingsService),\n ) => {\n const settingSubs = new Subscription();\n\n const syncShowRowIndexColumn = async (): Promise<void> => {\n try {\n const value = await settingsService.get<boolean>(AXPCommonSettings.ShowRowIndexColumn);\n patchState(store, { showRowIndexColumn: value ?? false });\n } catch {\n patchState(store, { showRowIndexColumn: false });\n }\n };\n\n return {\n async onInit() {\n translationService.langChanges$.subscribe(() => {\n // Handle language change if needed\n });\n\n localeService.profileChanged$.subscribe(() => {\n // Handle locale change if needed\n });\n\n void syncShowRowIndexColumn();\n settingSubs.add(settingsService.onLoaded.subscribe(() => void syncShowRowIndexColumn()));\n settingSubs.add(settingsService.onChanged.subscribe(() => void syncShowRowIndexColumn()));\n },\n onDestroy() {\n settingSubs.unsubscribe();\n },\n };\n },\n ),\n);\n","import { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDonutChartComponent, AXDonutChartValue } from '@acorex/charts/donut-chart';\nimport { AXLineChartComponent, AXLineChartOption, AXLineChartValue } from '@acorex/charts/line-chart';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport {\n AXBarChartReportMapper,\n AXLineChartReportMapper,\n AXPieChartReportMapper,\n} from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '../../../../reports/report.types';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-chart-view',\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXDonutChartComponent,\n AXLineChartComponent,\n AXChartLegendComponent,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-chart-view ax-w-full ax-h-full ax-flex ax-flex-col',\n },\n templateUrl: './report-chart-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPReportChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch chart data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n this.vm.fetchData().then((data) => {\n const raw = (((data?.data as any).data as any) ?? {}) as Record<string, number>;\n switch (this.chartType()) {\n case 'bar': {\n const v = AXBarChartReportMapper(raw);\n this.barChartData.set(v);\n break;\n }\n case 'doughnut': {\n const v = AXPieChartReportMapper(raw);\n this.donutChartData.set(v);\n break;\n }\n case 'line':\n default: {\n const v = AXLineChartReportMapper(raw);\n this.lineChartData.set(v);\n break;\n }\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n protected legendOptions = signal<AXChartLegendOptions>({\n mode: 'vertical',\n });\n\n protected barChartData = signal<AXBarChartValue>([]);\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected donutChartData = signal<AXDonutChartValue>([]);\n\n protected donutChartOptions = computed(() => {\n return {\n totalLabel: 'Total',\n showTooltip: true,\n showDataLabels: this.donutChartData().length <= 10,\n };\n });\n\n protected lineChartData = signal<AXLineChartValue>([]);\n protected lineChartOptions = signal<AXLineChartOption>({});\n\n /**\n * Check if bar chart data has items\n */\n protected readonly hasBarChartData = computed(() => {\n const data = this.barChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if donut chart data has items\n */\n protected readonly hasDonutChartData = computed(() => {\n const data = this.donutChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if line chart data has items\n */\n protected readonly hasLineChartData = computed(() => {\n const data = this.lineChartData();\n return Array.isArray(data) && data.length > 0;\n });\n\n /**\n * Check if chart has any data (for any chart type)\n */\n protected readonly hasChartData = computed(() => {\n return this.hasBarChartData() || this.hasDonutChartData() || this.hasLineChartData();\n });\n\n /**\n * Check if report has been executed and has no data\n */\n protected readonly showNoDataState = computed(() => {\n return this.vm.hasBeenExecuted() && !this.hasChartData();\n });\n\n //#endregion\n}\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-gap-6 ax-p-8\">\n <div class=\"ax-spinner ax-spin ax-w-10 ax-h-10\"></div>\n <div class=\"__loading-text ax-text-sm ax-opacity-70\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\"\n >\n </axp-state-message>\n } @else if (isChartReady() && showNoDataState()) {\n <!-- No Data State -->\n <axp-state-message\n icon=\"fa-light fa-chart-pie\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-data.description'\"\n >\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <section\n class=\"__chart-container ax-overflow-auto md:ax-overflow-hidden ax-rounded-2xl ax-border ax-h-full ax-flex ax-flex-col\"\n >\n @if (chartLayout()?.header) {\n <header\n class=\"__chart-header ax-p-4 md:ax-p-6 ax-border-b ax-flex ax-flex-col sm:ax-flex-row ax-gap-2 sm:ax-items-center sm:ax-justify-between\"\n >\n <h3 class=\"__chart-title ax-text-base md:ax-text-lg ax-font-semibold ax-truncate\">\n {{ chartLayout()?.header?.title }}\n </h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date ax-text-xs md:ax-text-sm ax-opacity-70 ax-font-medium ax-flex-shrink-0\">\n {{ '@general:common.date.today' | translate | async }}\n </div>\n }\n </header>\n }\n\n <div class=\"__chart-body ax-flex-1 ax-p-3 md:ax-p-6\">\n <div\n class=\"__chart-wrapper ax-h-full ax-items-center ax-flex ax-flex-col ax-gap-4 lg:ax-gap-6\"\n [class]=\"\n legendOptions().mode === 'horizontal'\n ? 'ax-flex-col ax-gap-4'\n : 'ax-flex-col lg:ax-flex-row ax-gap-4 lg:ax-gap-6'\n \"\n >\n @switch (chartType()) {\n @case ('bar') {\n <div\n class=\"__chart-content ax-flex-1 ax-h-full ax-min-h-[250px] md:ax-min-h-[300px] ax-flex ax-items-center ax-justify-center ax-w-full ax-overflow-hidden\"\n >\n <ax-bar-chart #barChart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n @if (hasBarChartData()) {\n <div class=\"__chart-legend ax-w-fit ax-flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"barChart\"></ax-chart-legend>\n </div>\n }\n }\n @case ('doughnut') {\n <div\n class=\"__chart-content ax-flex-1 ax-h-full ax-min-h-[250px] md:ax-min-h-[300px] ax-flex ax-items-center ax-justify-center ax-w-full ax-overflow-hidden\"\n >\n <ax-donut-chart #donutChart [data]=\"donutChartData()\" [options]=\"donutChartOptions()\"></ax-donut-chart>\n </div>\n @if (hasDonutChartData()) {\n <div class=\"__chart-legend ax-w-fit ax-flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"donutChart\"></ax-chart-legend>\n </div>\n }\n }\n @default {\n <div\n class=\"__chart-content ax-flex-1 ax-h-full ax-min-h-[250px] md:ax-min-h-[300px] ax-flex ax-items-center ax-justify-center ax-w-full ax-overflow-hidden\"\n >\n <ax-line-chart #lineChart [data]=\"lineChartData()\" [options]=\"lineChartOptions()\"></ax-line-chart>\n </div>\n @if (hasLineChartData()) {\n <div class=\"__chart-legend ax-w-fit ax-flex-shrink-0\">\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"lineChart\"></ax-chart-legend>\n </div>\n }\n }\n }\n </div>\n </div>\n\n @if (chartLayout()?.footer) {\n <footer class=\"__chart-footer ax-p-4 md:ax-p-6 ax-border-t\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"chartLayout()?.footer?.customHtml\"></div>\n }\n </footer>\n }\n </section>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message\n icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\"\n >\n </axp-state-message>\n }\n</ng-container>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { AXPReportPdfLayout } from '../../../../reports/report.types';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-pdf-view',\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPStateMessageComponent,\n ],\n host: {\n class: 'axp-report-pdf-view ax-w-full ax-h-full ax-flex ax-flex-col',\n },\n templateUrl: './report-pdf-view.component.html',\n styleUrls: ['./report-pdf-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportPdfViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n private readonly sanitizer = inject(DomSanitizer);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current PDF layout configuration\n */\n protected readonly pdfLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'pdf' ? (layout.layout as AXPReportPdfLayout) : null;\n });\n\n /**\n * PDF layout options\n */\n protected readonly pdfOptions = computed(() => {\n const pdfLayout = this.pdfLayout();\n return pdfLayout?.options || {};\n });\n\n /**\n * PDF source URL (sanitized for embed)\n */\n protected readonly pdfSource = computed<SafeResourceUrl | null>(() => {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return null;\n }\n\n // Handle URL\n if (pdfData.url) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(pdfData.url);\n }\n\n // Handle base64\n if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n return this.sanitizer.bypassSecurityTrustResourceUrl(base64Data);\n }\n\n // Handle blob\n if (pdfData.blob) {\n const blobUrl = URL.createObjectURL(pdfData.blob);\n return this.sanitizer.bypassSecurityTrustResourceUrl(blobUrl);\n }\n\n return null;\n });\n\n /**\n * PDF filename for download\n */\n protected readonly pdfFilename = computed(() => {\n const pdfData = this.pdfData();\n return pdfData?.filename || 'report.pdf';\n });\n\n /**\n * PDF embed height\n */\n protected readonly embedHeight = computed(() => {\n const options = this.pdfOptions();\n return options.height || '100%';\n });\n\n /**\n * Check if PDF is ready to render\n */\n protected readonly isPdfReady = computed(() => {\n return !!this.pdfSource();\n });\n\n /**\n * Check if download button should be shown\n */\n protected readonly showDownloadButton = computed(() => {\n const options = this.pdfOptions();\n return options.showDownloadButton !== false; // Default to true\n });\n\n /**\n * Check if print button should be shown\n */\n protected readonly showPrintButton = computed(() => {\n const options = this.pdfOptions();\n return options.showPrintButton !== false; // Default to true\n });\n\n /**\n * Check if zoom controls should be shown\n */\n protected readonly showZoomControls = computed(() => {\n const options = this.pdfOptions();\n return options.showZoomControls !== false; // Default to true\n });\n\n /**\n * Check if fullscreen button should be shown\n */\n protected readonly showFullscreenButton = computed(() => {\n const options = this.pdfOptions();\n return options.showFullscreenButton !== false; // Default to true\n });\n\n /**\n * Current zoom level\n */\n protected readonly currentZoom = signal<number>(100);\n\n /**\n * PDF data from execution result\n */\n protected readonly pdfData = signal<{ url?: string; base64?: string; blob?: Blob; filename?: string } | null>(null);\n\n /**\n * Fullscreen state\n */\n protected readonly isFullscreen = signal<boolean>(false);\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to fetch PDF data when conditions are met\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.pdfLayout()) {\n this.vm.fetchData().then((data) => {\n if (data?.data && data.data.type === 'pdf') {\n const pdfResult = data.data as { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n this.pdfData.set(pdfResult);\n\n // Set initial zoom from options\n const options = this.pdfOptions();\n if (options.defaultZoom) {\n this.currentZoom.set(options.defaultZoom);\n }\n } else {\n this.pdfData.set(null);\n }\n });\n }\n });\n\n //#endregion\n\n //#region ---- Methods ----\n\n /**\n * Handle download PDF\n */\n public downloadPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n let filename = this.pdfFilename();\n let shouldRevokeUrl = false;\n\n if (pdfData.url) {\n // For URL, create a temporary link\n url = pdfData.url;\n } else if (pdfData.base64) {\n // Convert base64 to blob and create URL\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64.split(',')[1]\n : pdfData.base64;\n const byteCharacters = atob(base64Data);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/pdf' });\n url = URL.createObjectURL(blob);\n shouldRevokeUrl = true;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n shouldRevokeUrl = true;\n } else {\n return;\n }\n\n // Create download link\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Clean up blob URL if created\n if (shouldRevokeUrl) {\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }\n }\n\n /**\n * Handle print PDF\n */\n public printPdf(): void {\n const pdfData = this.pdfData();\n if (!pdfData) {\n return;\n }\n\n let url: string;\n\n if (pdfData.url) {\n url = pdfData.url;\n } else if (pdfData.base64) {\n const base64Data = pdfData.base64.startsWith('data:')\n ? pdfData.base64\n : `data:application/pdf;base64,${pdfData.base64}`;\n url = base64Data;\n } else if (pdfData.blob) {\n url = URL.createObjectURL(pdfData.blob);\n } else {\n return;\n }\n\n // Open PDF in new window for printing\n const printWindow = window.open(url, '_blank');\n if (printWindow) {\n printWindow.onload = () => {\n printWindow.print();\n };\n }\n }\n\n /**\n * Handle zoom in\n */\n protected zoomIn(): void {\n const current = this.currentZoom();\n if (current < 500) {\n this.currentZoom.set(Math.min(current + 25, 500));\n }\n }\n\n /**\n * Handle zoom out\n */\n protected zoomOut(): void {\n const current = this.currentZoom();\n if (current > 25) {\n this.currentZoom.set(Math.max(current - 25, 25));\n }\n }\n\n /**\n * Handle zoom reset\n */\n protected zoomReset(): void {\n const options = this.pdfOptions();\n this.currentZoom.set(options.defaultZoom || 100);\n }\n\n /**\n * Handle fullscreen toggle\n */\n protected toggleFullscreen(): void {\n const isFullscreen = this.isFullscreen();\n this.isFullscreen.set(!isFullscreen);\n }\n\n //#endregion\n}\n\n","<ng-container *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-gap-6 ax-p-8\">\n <div class=\"ax-spinner ax-spin ax-w-10 ax-h-10\"></div>\n <div class=\"__loading-text ax-text-sm ax-opacity-70\">\n {{ t('@report-management:report-viewer.components.pdf.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isPdfReady()) {\n <!-- PDF Embed Only -->\n <embed class=\"__pdf-embed ax-w-full ax-h-full\" [src]=\"pdfSource()\" type=\"application/pdf\" />\n } @else {\n <!-- No PDF Data State -->\n <axp-state-message icon=\"fa-light fa-file-pdf\"\n [title]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.title'\"\n [description]=\"'@report-management:report-viewer.components.pdf.empty-states.no-data.description'\">\n </axp-state-message>\n }\n</ng-container>","import { AXDataTableComponent, AXDataTableModule, AXDataTableRowDbClick, AXRowCommandItem, AXRowCommandItemClickEvent } from '@acorex/components/data-table';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPWidgetColumnNode } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\nimport { AXPReportColumn, AXPReportTableLayout, AXPReportTableLayoutRowAction } from '../../../../reports';\nimport { AXDataSource, AXDataSourceQuery } from '@acorex/cdk/common';\nimport { AXPSystemActionType, applySystemActionDefault, getSystemActions } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\n\n@Component({\n selector: 'axp-report-table-view',\n standalone: true,\n imports: [\n CommonModule,\n AXDataTableModule,\n AXLoadingModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule\n ],\n templateUrl: './report-table-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportTableViewComponent {\n\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n protected readonly commandService = inject(AXPCommandService);\n\n private readonly grid = viewChild<AXDataTableComponent>('grid');\n\n //#endregion\n\n\n //#region ---- Event Handlers ----\n\n protected handleRowClick(event: AXRowCommandItemClickEvent): void {\n this.handleRowAction(event.name, event.data);\n }\n\n protected handleDbRowClick(event: AXDataTableRowDbClick): void {\n if (this.defaultRowAction()) {\n this.handleRowAction(this.defaultRowAction()!.name, event.data);\n }\n }\n\n protected handleRowAction(name: string, data: any): void {\n this.commandService.execute(name, data);\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to handle data fetching when report is executed\n */\n #fetchData = effect(() => {\n if (this.grid() && this.vm.allowFetchData() && this.vm.shouldExecuteReport()) {\n this.grid()?.refresh();\n }\n });\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n\n protected readonly layout = computed(() => {\n return (this.vm.currentLayout()?.layout as AXPReportTableLayout)!;\n });\n\n protected readonly dataSource = new AXDataSource({\n load: async (e: AXDataSourceQuery) => {\n if (!this.vm.allowFetchData()) {\n return { items: [], total: 0 }\n }\n\n const result = await this.vm.fetchData(e)\n if (!result?.data || result.data.type !== 'table') {\n console.error('invalid table result');\n return { items: [], total: 0 }\n };\n\n let items: any[] = result.data.items as any[] ?? [];\n let total = result.data.total || 0;\n\n return { items, total };\n },\n pageSize: 10,\n key: 'id'\n });\n\n\n protected readonly columns = computed(() => {\n return this.layout().columns?.map((col: AXPReportColumn) => ({\n field: col.field,\n title: col.title || col.field,\n width: col.width || 'auto',\n visible: col.visible !== false,\n align: col.align || 'left',\n widget: { ...col.widget, path: col.field } as AXPWidgetColumnNode\n })) || [];\n });\n\n protected readonly paginationEnabled = computed(() => {\n return this.layout().options?.pagination !== false;\n });\n\n\n protected readonly primaryRowAction = computed<AXRowCommandItem[]>(() => {\n return this.layout().actions?.filter(a => a.priority === 'primary')?.map(a => this.convertToRowCommandItem(a)) || [];\n });\n\n protected readonly hasPrimaryRowAction = computed(() => {\n return this.primaryRowAction().length > 0;\n });\n\n protected readonly secondaryRowAction = computed<AXRowCommandItem[]>(() => {\n return this.layout().actions?.filter(a => a.priority === 'secondary')?.map(a => this.convertToRowCommandItem(a)) || [];\n });\n\n protected readonly hasSecondaryRowAction = computed(() => {\n return this.secondaryRowAction().length > 0;\n });\n\n protected readonly defaultRowAction = computed<AXRowCommandItem | null>(() => {\n const defaultAction = this.layout().actions?.find(a => a.default);\n if (!defaultAction) {\n return null;\n }\n return this.convertToRowCommandItem(defaultAction);\n });\n\n //#endregion\n\n //#region ---- Helpers ----\n\n protected convertToRowCommandItem(action: AXPReportTableLayoutRowAction): AXRowCommandItem {\n const systemAction = getSystemActions(action.type as AXPSystemActionType);\n if (!systemAction) {\n\n return {\n icon: action.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: action.title,\n name: action.command?.name,\n divided: action.break,\n color: action.color,\n } as AXRowCommandItem;\n }\n const defaultAction = applySystemActionDefault(action, systemAction.key as AXPSystemActionType);\n return {\n icon: defaultAction.icon ?? 'fa-light fa-eye',\n iconOnly: action.iconOnly ?? true,\n text: defaultAction.title,\n name: action.command?.name,\n divided: defaultAction.break ?? action.break,\n color: defaultAction.color,\n } as AXRowCommandItem;\n }\n\n //#endregion\n\n} ","<ax-data-table\n #grid\n [dataSource]=\"dataSource\"\n [paging]=\"true\"\n (onRowDbClick)=\"handleDbRowClick($event)\"\n class=\"ax-flex-1\"\n>\n <!-- Dynamic columns based on configuration -->\n @if (vm.showRowIndexColumn()) {\n <ax-index-column\n [caption]=\"('@general:terms.common.row-number' | translate | async)!\"\n fixed=\"start\"\n [width]=\"'80px'\"\n [padZero]=\"false\"\n ></ax-index-column>\n }\n @if (vm.canSelectRows()) {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n @for (column of columns(); track column.field) {\n @if (column.visible) {\n <axp-widget-column-renderer\n [customWidth]=\"column.width == 'auto' ? 'auto' : column.width + 'px'\"\n [caption]=\"(column.title | translate | async)!\"\n [node]=\"column.widget!\"\n ></axp-widget-column-renderer>\n }\n }\n @if (hasPrimaryRowAction()) {\n <ax-command-column\n fixed=\"end\"\n [width]=\"primaryRowAction().length * 70 + 'px'\"\n [items]=\"primaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-command-column>\n }\n @if (hasSecondaryRowAction()) {\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"secondaryRowAction()\"\n (onItemClick)=\"handleRowClick($event)\"\n ></ax-dropdown-command-column>\n }\n</ax-data-table>\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXLoadingDialogModule, AXLoadingDialogService } from '@acorex/components/loading-dialog';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBreadcrumbItem,\n AXPContextData,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPGridLayoutOptions,\n} from '@acorex/platform/core';\nimport { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport {\n AXPStateMessageComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutFooterComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXPReportViewerViewModel } from '../report-viewer.viewmodel';\nimport { AXPReportChartViewComponent } from '../views/report-chart-view/report-chart-view.component';\nimport { AXPReportPdfViewComponent } from '../views/report-pdf-view/report-pdf-view.component';\nimport { AXPReportTableViewComponent } from '../views/report-table-view/report-table-view.component';\nimport { AXPReportViewerService } from '../../../reports';\n\n@Component({\n selector: 'axp-report-viewer-page',\n standalone: true,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n AXBadgeModule,\n AXLoadingDialogModule,\n //\n AXPLayoutRendererComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXPReportTableViewComponent,\n AXPThemeLayoutFooterComponent,\n AXPReportChartViewComponent,\n AXPReportPdfViewComponent,\n AXPStateMessageComponent,\n ],\n providers: [\n AXUnsubscriber,\n AXPReportViewerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPReportViewerPageComponent,\n },\n ],\n templateUrl: './report-viewer-page.component.html',\n styleUrls: ['./report-viewer-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-report-viewer-page' },\n})\nexport class AXPReportViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Dependencies ----\n\n protected override layoutService = inject(AXPLayoutThemeService);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private unsubscriber = inject(AXUnsubscriber);\n private readonly loadingDialog = inject(AXLoadingDialogService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly reportViewerService = inject(AXPReportViewerService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n reportId = input<string>();\n reportParameters = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- ViewChildren ----\n\n private filtersForm = viewChild<AXPLayoutRendererComponent>('filtersForm');\n\n //#endregion\n\n //#region ---- ViewModel ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly watchNavigationLoading = effect(() => {\n const isBusy = this.vm.isLoading() || this.vm.isExecuting();\n untracked(() => {\n this.layoutService.setNavigationLoading(isBusy);\n //\n if (isBusy) {\n void this.openContentLoading();\n } else {\n this.closeContentLoading();\n }\n });\n });\n\n //#endregion\n\n private loadingDialogRef: { close: () => void } | null = null;\n private isDialogOpening = false;\n\n constructor() {\n super();\n this.destroyRef.onDestroy(() => this.closeContentLoading());\n }\n\n //#region ---- Computed Properties ----\n\n protected showFiltersPanel = () => this.deviceService.isLarge();\n\n protected showReportDisplay = () =>\n this.deviceService.isLarge() || (this.deviceService.isSmall() && this.vm.hasBeenExecuted());\n\n private baseRoutes = [this.sessionService.application?.name, 'report-management'];\n\n //#endregion\n\n //#region ---- Layout Configurations ----\n\n protected defaultLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 6 },\n lg: { colSpan: 12 },\n },\n });\n\n protected compactLayout = (): AXPGridLayoutOptions => ({\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 4 },\n lg: { colSpan: 3 },\n },\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Subscribe to route parameter changes for dynamic report loading\n this.unsubscriber.takeUntilDestroy(this.route.paramMap).subscribe(async (params) => {\n const reportId = params.get('reportId') || this.route.snapshot.queryParamMap.get('reportId') || this.reportId();\n\n if (reportId) {\n await this.loadReportAndRefresh(reportId);\n }\n });\n }\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n private async loadReportAndRefresh(reportId: string): Promise<void> {\n await this.vm.loadReport(reportId);\n\n // Force refresh of page layout (breadcrumbs, title, etc.) after report loads\n this.recompute();\n\n // Handle initial parameters from query string\n const queryParams = this.route.snapshot.queryParams;\n const initialParams = { ...queryParams };\n delete initialParams['reportId']; // Remove reportId from parameters\n\n // Parse filter context values coming from URL (they are strings)\n const parsedInitialParams = this.parseFilterContextFromUrl(initialParams);\n\n // Merge with component input parameters\n const allParams = { ...parsedInitialParams, ...this.reportParameters() };\n\n if (Object.keys(allParams).length > 0) {\n console.log('Applying initial parameters:', allParams);\n this.vm.updateFilterContext(allParams);\n // Auto-execute if parameters are provided\n setTimeout(async () => {\n await this.vm.executeReport();\n }, 500); // Small delay to ensure form is ready\n }\n }\n\n private async openContentLoading(): Promise<void> {\n if (this.loadingDialogRef || this.isDialogOpening) {\n return;\n }\n\n this.isDialogOpening = true;\n\n try {\n const [title, description, cancelText] = await Promise.all([\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.in-progress-title'),\n this.translateService.translateAsync(\n '@report-management:report-viewer.messages.loading.in-progress-description',\n ),\n\n this.translateService.translateAsync('@report-management:report-viewer.messages.loading.cancel-button'),\n ]);\n\n this.loadingDialogRef = this.loadingDialog.show({\n title,\n mode: 'indeterminate',\n progressColor: 'primary',\n text: description,\n buttons: [\n {\n text: cancelText,\n color: 'danger',\n onClick: () => {\n this.closeContentLoading();\n this.vm.cancel();\n },\n },\n ],\n });\n } finally {\n this.isDialogOpening = false;\n }\n }\n\n private closeContentLoading(): void {\n if (!this.loadingDialogRef) {\n return;\n }\n\n this.loadingDialogRef.close();\n this.loadingDialogRef = null;\n }\n\n /**\n * Synchronizes filter context to URL query parameters using dot notation\n * @param filterContext The current filter context to sync\n */\n private syncFiltersToUrl(filterContext: AXPContextData): void {\n // Get current query params\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n // Get all filter keys from current params (excluding reportId and internal fields)\n const currentFilterKeys = new Set<string>();\n Object.keys(currentParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n // Extract root key (before first dot) for filter identification\n const rootKey = key.includes('.') ? key.split('.')[0] : key;\n currentFilterKeys.add(rootKey);\n }\n });\n\n // Build new query params - start with current params and remove filter-related ones\n const queryParams: Record<string, string | undefined> = { ...currentParams };\n\n // Remove all filter-related params first (we'll add them back if they have values)\n Object.keys(queryParams).forEach((key) => {\n if (\n key !== 'reportId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n delete queryParams[key];\n }\n });\n\n const processedFilterKeys = new Set<string>();\n\n // Add filter params that have values\n Object.keys(filterContext).forEach((key) => {\n // Skip internal editor fields (EditorObj, __EditorValue)\n if (key.endsWith('EditorObj') || key.startsWith('__') || key.endsWith('EditorValue')) {\n return;\n }\n\n processedFilterKeys.add(key);\n const value = filterContext[key];\n\n // Check if value is empty (null, undefined, empty string, or empty array)\n const isEmpty = this.isFilterValueEmpty(value);\n\n if (!isEmpty) {\n const flattened = this.flattenToDotNotation(key, value);\n Object.assign(queryParams, flattened);\n }\n // If empty, we don't add it to queryParams, so it will be removed from URL\n });\n\n // Remove filter keys that are no longer in filterContext\n currentFilterKeys.forEach((filterKey) => {\n if (!processedFilterKeys.has(filterKey)) {\n // This filter was removed - ensure all related params are removed\n Object.keys(currentParams).forEach((paramKey) => {\n if (paramKey === filterKey || paramKey.startsWith(`${filterKey}.`)) {\n delete queryParams[paramKey];\n }\n });\n }\n });\n\n // Preserve reportId if exists\n if (reportId) {\n queryParams['reportId'] = String(reportId);\n } else {\n delete queryParams['reportId'];\n }\n\n // Update URL without reloading\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n replaceUrl: true, // Don't add to browser history\n });\n }\n\n /**\n * Checks if a filter value is considered empty\n */\n private isFilterValueEmpty(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n\n // Check if it's a filter object with empty value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n const filterValue = filterObj.value;\n\n if (filterValue === null || filterValue === undefined || filterValue === '') {\n return true;\n }\n\n if (Array.isArray(filterValue) && filterValue.length === 0) {\n return true;\n }\n\n // Check nested object values\n if (typeof filterValue === 'object' && !Array.isArray(filterValue)) {\n const hasAnyValue = Object.values(filterValue).some((v) => v !== null && v !== undefined && v !== '');\n return !hasAnyValue;\n }\n }\n\n // Check if it's an empty array\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Flattens filter context to dot notation query parameters\n * Only includes operation.type and value - skips displayText and other fields\n * Example: { operation: { type: 'in' }, value: ['POST', 'GET'] } \n * -> { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n */\n private flattenToDotNotation(prefix: string, value: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (value == null) {\n return result;\n }\n\n // Handle filter context object - only extract operation.type and value\n if (typeof value === 'object' && !Array.isArray(value)) {\n const filterObj = value as any;\n\n // Extract operation.type if exists\n if (filterObj.operation?.type) {\n result[`${prefix}.operation.type`] = String(filterObj.operation.type);\n }\n\n // Extract value - handle arrays and primitives\n if (filterObj.value !== undefined && filterObj.value !== null && filterObj.value !== '') {\n if (Array.isArray(filterObj.value)) {\n if (filterObj.value.length > 0) {\n result[`${prefix}.value`] = filterObj.value.map((v: any) => String(v)).join(',');\n }\n } else if (typeof filterObj.value === 'object') {\n // If value is an object, flatten it recursively\n const flattenedValue = this.flattenValueObject(filterObj.value);\n Object.assign(result, flattenedValue);\n } else {\n result[`${prefix}.value`] = String(filterObj.value);\n }\n }\n\n return result;\n }\n\n // Handle primitives directly\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n result[prefix] = String(value);\n return result;\n }\n\n // Handle arrays - join with comma\n if (Array.isArray(value)) {\n if (value.length > 0) {\n result[prefix] = value.map(v => String(v)).join(',');\n }\n return result;\n }\n\n // Fallback: convert to string\n result[prefix] = String(value);\n return result;\n }\n\n /**\n * Flattens a value object (for nested objects in value field)\n */\n private flattenValueObject(obj: any, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n\n if (obj == null || typeof obj !== 'object') {\n return result;\n }\n\n for (const [key, val] of Object.entries(obj)) {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n\n if (val == null) {\n continue;\n }\n\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n result[newPrefix] = String(val);\n } else if (Array.isArray(val)) {\n if (val.length > 0) {\n result[newPrefix] = val.map((v: any) => String(v)).join(',');\n }\n } else if (typeof val === 'object') {\n const flattened = this.flattenValueObject(val, newPrefix);\n Object.assign(result, flattened);\n }\n }\n\n return result;\n }\n\n /**\n * Reconstructs filter context from dot notation query parameters\n * Only parses operation.type and value - ignores other fields\n * Example: { 'fieldName.operation.type': 'in', 'fieldName.value': 'POST,GET' }\n * -> { fieldName: { operation: { type: 'in' }, value: ['POST', 'GET'] } }\n */\n private parseFilterContextFromUrl(params: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, any> = {};\n\n // Filter out reportId and internal editor fields\n const filteredParams: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(params)) {\n // Skip reportId and internal editor fields (EditorObj, __EditorValue, displayText)\n if (\n key !== 'reportId' &&\n !key.endsWith('EditorObj') &&\n !key.startsWith('__') &&\n !key.endsWith('EditorValue') &&\n !key.includes('.displayText')\n ) {\n filteredParams[key] = value;\n }\n }\n\n // Group by root key (before first dot)\n for (const [key, value] of Object.entries(filteredParams)) {\n if (!key.includes('.')) {\n // Simple key without dot notation - skip (we only want operation.type and value)\n continue;\n }\n\n // Split by dot and reconstruct nested structure\n const parts = key.split('.');\n const rootKey = parts[0];\n const path = parts.slice(1);\n\n // Only process operation.type and value paths\n if (path.length === 2 && path[0] === 'operation' && path[1] === 'type') {\n // operation.type\n if (!result[rootKey]) {\n result[rootKey] = { operation: {} };\n }\n if (!result[rootKey].operation) {\n result[rootKey].operation = {};\n }\n result[rootKey].operation.type = String(value);\n } else if (path.length === 1 && path[0] === 'value') {\n // value\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n result[rootKey].value = this.parseValue(String(value));\n } else if (path.length > 1 && path[0] === 'value') {\n // nested value object (e.g., value.from, value.to for between)\n if (!result[rootKey]) {\n result[rootKey] = {};\n }\n if (!result[rootKey].value) {\n result[rootKey].value = {};\n }\n const valuePath = path.slice(1);\n this.setNestedValue(result[rootKey].value, valuePath, this.parseValue(String(value)));\n }\n }\n\n // Post-process: Convert values to arrays if operation.type is 'in' or 'notIn'\n // Also reconstruct EditorObj for lookup widgets (from value only, no displayText)\n for (const [key, value] of Object.entries(result)) {\n if (value && typeof value === 'object' && value.operation?.type) {\n const operationType = value.operation.type;\n\n // If operation is 'in' or 'notIn', ensure value is an array\n if ((operationType === 'in' || operationType === 'notIn') && typeof value.value === 'string') {\n // Convert comma-separated string to array\n value.value = value.value.split(',').map((v: string) => v.trim()).filter((v: string) => v !== '');\n }\n\n // Reconstruct EditorObj for lookup widgets from value only\n // This is needed because lookup widget expects EditorObj to exist\n if (value.value !== undefined && value.value !== null && value.value !== '') {\n const editorObjKey = `${key}EditorObj`;\n const valueField = 'id'; // Default value field for lookup\n const textField = 'title'; // Default text field for lookup\n\n if (operationType === 'in' || operationType === 'notIn') {\n // Multiple selection: create array of objects with value as both id and title\n const values = Array.isArray(value.value) ? value.value : [value.value];\n result[editorObjKey] = values.map((val: string) => ({\n [valueField]: val,\n [textField]: val // Use value as title since we don't have displayText\n }));\n } else {\n // Single selection: create single object\n result[editorObjKey] = {\n [valueField]: value.value,\n [textField]: value.value // Use value as title since we don't have displayText\n };\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sets a value in a nested object using a path array\n */\n private setNestedValue(obj: any, path: string[], value: unknown): void {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key];\n }\n const lastKey = path[path.length - 1];\n current[lastKey] = value;\n }\n\n /**\n * Parses a string value, handling arrays (comma-separated) and primitives\n */\n private parseValue(value: string): unknown {\n if (value === '') {\n return value;\n }\n\n // Check if it's a comma-separated array\n if (value.includes(',')) {\n return value.split(',').map(v => this.parsePrimitive(v.trim()));\n }\n\n return this.parsePrimitive(value);\n }\n\n /**\n * Parses a primitive value\n * For query params, we keep everything as string to match user requirement\n * Arrays are handled separately in parseValue\n */\n private parsePrimitive(value: string): string {\n return value;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleFiltersChange(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n this.syncFiltersToUrl(event);\n }\n\n protected handleFiltersInitiated(event: AXPContextData): void {\n this.vm.updateFilterContext(event);\n }\n\n protected async handleExecuteReport(): Promise<void> {\n const isValid = await this.filtersForm()?.validate();\n if (!isValid?.result) {\n return;\n }\n await this.vm.executeReport();\n }\n\n protected handleRefresh(): void {\n this.vm.refresh();\n }\n\n protected handleClearFilters(): void {\n this.vm.clearFilters();\n\n // Reset form if available\n const form = this.filtersForm();\n if (form) {\n form.reset();\n }\n\n // Clear URL query parameters (preserve reportId if exists)\n const currentParams = this.route.snapshot.queryParams;\n const reportId = currentParams['reportId'];\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: reportId ? { reportId } : {},\n replaceUrl: true,\n });\n }\n\n /**\n * Handle download report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handleDownloadReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.download-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const result = await this.vm.fetchData();\n if (result?.data && result.data.type === 'pdf') {\n const pdfData = result.data as { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n await this.reportViewerService.executeAction('download-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-download');\n console.warn(warning);\n }\n }\n\n /**\n * Handle print report action\n * Gets PDF data from viewmodel and calls service executeAction method\n */\n protected async handlePrintReport(): Promise<void> {\n if (!this.vm.isPdfLayout()) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.print-pdf-only');\n console.warn(warning);\n return;\n }\n\n // Fetch PDF data if not already available\n const result = await this.vm.fetchData();\n if (result?.data && result.data.type === 'pdf') {\n const pdfData = result.data as { type: 'pdf'; url?: string; base64?: string; blob?: Blob; filename?: string };\n await this.reportViewerService.executeAction('print-report', { pdfData });\n } else {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-pdf-print');\n console.warn(warning);\n }\n }\n\n /**\n * Handle export report action\n * Gets report data from viewmodel and calls service executeAction method\n * @param format - Export format (excel, csv, pdf, image)\n */\n protected async handleExportReport(format?: string): Promise<void> {\n if (!format) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.export-format-required');\n console.warn(warning);\n return;\n }\n\n // Fetch report data\n const result = await this.vm.fetchData();\n if (!result?.data) {\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.no-report-data-export');\n console.warn(warning);\n return;\n }\n\n const layout = this.vm.currentLayout();\n await this.reportViewerService.executeAction('export-report', {\n format,\n reportData: result.data,\n layoutDefinition: layout || undefined,\n });\n }\n\n //#endregion\n\n //#region ---- Page Configuration Overrides ----\n\n protected override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const breadcrumbs: AXPBreadcrumbItem[] = [\n {\n name: 'reports',\n title: await this.translateService.translateAsync('@report-management:module.menus.root.title'),\n command: {\n name: 'navigate-to-reports',\n },\n },\n ];\n\n // Add categories path\n const categoriesPath = this.vm.categoriesPath();\n if (categoriesPath && categoriesPath.length > 0) {\n let urlParts = [...this.baseRoutes, 'reports'];\n for (const category of categoriesPath) {\n urlParts.push(category.id);\n breadcrumbs.push({\n name: category.id,\n title: category.title,\n command: {\n name: 'navigate-to-category',\n options: {\n path: [...urlParts],\n },\n },\n });\n }\n }\n\n // Add report title as final breadcrumb\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n breadcrumbs.push({\n name: 'report-viewer',\n title: reportDefinition.title,\n });\n }\n\n return breadcrumbs;\n }\n\n override async getPageTitle(): Promise<string> {\n const reportDefinition = this.vm.reportDefinition();\n if (reportDefinition) {\n return reportDefinition.title;\n }\n return await this.translateService.translateAsync(\n '@report-management:report-viewer.components.report-viewer.title',\n );\n }\n\n override async getPageDescription(): Promise<string | null> {\n const reportDefinition = this.vm.reportDefinition();\n return reportDefinition?.description || null;\n }\n\n protected override getPageIcon(): string | null {\n // Show current layout icon before the title when there are multiple layouts\n if (!this.vm.hasMultipleLayouts() || !this.showReportDisplay()) {\n return null;\n }\n\n const currentLayout = this.vm.currentLayout();\n if (currentLayout?.icon) {\n return `fa-light ${currentLayout.icon}`;\n }\n\n return null;\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] | Promise<AXPActionMenuItem[]> {\n // Only show layout switcher if there are multiple layouts and report display is visible\n if (!this.vm.hasMultipleLayouts() || !this.showReportDisplay()) {\n return [];\n }\n\n const currentLayoutId = this.vm.currentLayout()?.id;\n\n return this.vm\n .availableLayouts()\n .map((layout) => ({\n title: layout.title,\n // Always show layout icon in prefix\n icon: layout.icon ? `fa-light ${layout.icon}` : undefined,\n command: {\n name: 'switch-layout',\n metadata: { isLayout: true, layoutId: layout.id, isSelected: layout.id === currentLayoutId },\n },\n }))\n .sort((a, b) => (a.title ?? '').localeCompare(b.title ?? '', undefined, { sensitivity: 'base' }));\n }\n\n override async getBackButton(): Promise<AXPBackButton | null> {\n // On mobile, if report has been executed (showing report), show \"Filters\" as back button\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n return {\n title: await this.translateService.translateAsync('@general:terms.interface.filter.title'),\n };\n }\n\n const categoriesPath = this.vm.categoriesPath();\n\n if (!categoriesPath || categoriesPath.length === 0) {\n // If no categories path, go back to reports root\n return {\n title: await this.translateService.translateAsync('@report-management:report-runner.terms.menu-title'),\n };\n }\n\n if (categoriesPath.length === 1) {\n // If only one category, go back to reports root\n return {\n title: await this.translateService.translateAsync('@report-management:report-runner.terms.menu-title'),\n };\n }\n\n // Go back to parent category\n const parentCategory = categoriesPath[categoriesPath.length - 1];\n return {\n title: parentCategory.title,\n };\n }\n\n override async onBackButtonClick(): Promise<void> {\n // On mobile, if report has been executed (showing report), go back to filters\n if (this.deviceService.isSmall() && this.vm.hasBeenExecuted()) {\n this.vm.clearExecutionState();\n return;\n }\n\n const categoriesPath = this.vm.categoriesPath();\n\n if (!categoriesPath || categoriesPath.length <= 1) {\n // Navigate back to reports root\n await this.router.navigate([...this.baseRoutes, 'reports']);\n } else {\n // Navigate to parent category\n let urlParts = [...this.baseRoutes, 'reports'];\n for (const cat of categoriesPath) {\n urlParts.push(cat.id);\n }\n await this.router.navigate(urlParts);\n }\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get primary actions from service (includes general actions + layout-specific actions)\n const primaryActions = this.reportViewerService.getPrimaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return primaryActions.map(({ priority, ...action }) => action);\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const currentLayout = this.vm.currentLayout();\n if (!currentLayout) {\n return [];\n }\n\n // Get secondary actions from service (includes general actions + layout-specific actions)\n const secondaryActions = this.reportViewerService.getSecondaryActions(currentLayout);\n\n // Convert AXPReportLayoutAction[] to AXPActionMenuItem[] (remove priority property)\n return secondaryActions.map(({ priority, ...action }) => action);\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n // Handle layout switching from title actions\n if (command.metadata?.['isLayout']) {\n const layoutId = command.metadata?.['layoutId'] as string;\n if (layoutId) {\n this.vm.switchLayout(layoutId);\n this.recompute();\n }\n return;\n }\n\n switch (command.name) {\n case 'execute-report':\n await this.handleExecuteReport();\n break;\n case 'refresh-report':\n this.handleRefresh();\n break;\n case 'reset-filters':\n this.handleClearFilters();\n break;\n case 'download-report':\n this.handleDownloadReport();\n break;\n case 'print-report':\n this.handlePrintReport();\n break;\n case 'export-report':\n await this.handleExportReport(command.options?.['format'] as string);\n break;\n case 'navigate-to-reports':\n await this.router.navigate([...this.baseRoutes, 'reports']);\n break;\n case 'navigate-to-category':\n const path = command.options?.['path'] as string[];\n if (path) {\n await this.router.navigate(path);\n }\n break;\n default:\n const warning = await this.translateService.translateAsync('@report-management:report-viewer.messages.warnings.unknown-command', {\n params: { commandName: command.name },\n });\n console.warn(warning);\n break;\n }\n }\n\n //#endregion\n}\n","<axp-page-layout *translate=\"let t\">\n <!-- Left Panel: Filters (Always visible for desktop) -->\n @if (showFiltersPanel()) {\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>\n {{ t('@report-management:report-viewer.components.filters.title') | async }}\n </axp-layout-title>\n </axp-layout-header>\n <axp-layout-content>\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'card'\"\n (contextChange)=\"handleFiltersChange($event)\" (contextInitiated)=\"handleFiltersInitiated($event)\">\n </axp-layout-renderer>\n </axp-layout-content>\n <axp-layout-footer class=\"ax-p-4 ax-border-t\" *translate=\"let t\">\n @if (vm.hasUnappliedFilters()) {\n <div class=\"ax-w-full ax-warning-lightest ax-mb-2 ax-p-2 ax-rounded ax-border ax-border-warning-200\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-text-warning-800\">\n <ax-icon class=\"fa-light fa-exclamation-triangle ax-text-sm\"></ax-icon>\n <span class=\"ax-text-xs\">{{\n t('@report-management:report-viewer.components.filters.messages.warning.unapplied') | async\n }}</span>\n </div>\n </div>\n }\n <ax-button class=\"ax-w-full\" [disabled]=\"!vm.canExecute()\"\n [text]=\"t('@report-management:report-viewer.actions.execute.title') | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-layout-footer>\n </axp-layout-start-side>\n }\n <!-- Main Content: Report Display -->\n <axp-page-content class=\"ax-overflow-auto\">\n @if (vm.hasError()) {\n <!-- Error State -->\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.unexpected'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.retry.title') | async\" (onClick)=\"vm.clearError()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-refresh\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else if (!vm.reportDefinition()) {\n <!-- No Report Selected State -->\n <axp-state-message icon=\"fa-light fa-chart-line\"\n [title]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.title'\"\n [description]=\"'@report-management:report-viewer.components.report-viewer.empty-states.no-report.description'\">\n <div slot=\"actions\">\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"t('@report-management:report-viewer.actions.browse-reports.title') | async\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-folder-open\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n } @else {\n <ng-container *ngTemplateOutlet=\"reportDisplay\"></ng-container>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Desktop: Report Display Area -->\n<ng-template #reportDisplay>\n @if (showReportDisplay()) {\n <!-- Desktop & Mobile: Report Display Area -->\n @if (vm.isTableLayout()) {\n <axp-report-table-view> </axp-report-table-view>\n } @else if (vm.isChartLayout()) {\n <axp-report-chart-view> </axp-report-chart-view>\n } @else if (vm.isPdfLayout()) {\n <axp-report-pdf-view> </axp-report-pdf-view>\n }\n } @else {\n <!-- Mobile: Show filters -->\n <axp-layout-renderer #filtersForm [layout]=\"vm.formDefinition()\" [context]=\"vm.filterContext()\" [look]=\"'fieldset'\">\n </axp-layout-renderer>\n }\n</ng-template>\n\n<!-- Mobile: Execute Button -->\n@if (deviceService.isSmall() && !vm.hasBeenExecuted()) {\n<axp-page-footer class=\"ax-p-2 ax-border-t\">\n <ax-button class=\"ax-w-full\" [disabled]=\"!vm.canExecute()\"\n [text]=\"'@report-management:report-viewer.actions.execute.title' | translate | async\" [color]=\"'primary'\"\n (onClick)=\"execute({ name: 'execute-report' })\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-play\"></ax-icon>\n </ax-prefix>\n </ax-button>\n</axp-page-footer>\n}","import { AXBarChartComponent, AXBarChartOption, AXBarChartValue } from '@acorex/charts/bar-chart';\nimport { AXChartLegendComponent, AXChartLegendOptions } from '@acorex/charts/chart-legend';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPWidgetCoreModule, AXPPageStatus } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXBarChartReportMapper } from '../../../../reports/report-mapper';\nimport { AXPReportChartLayout } from '../../../../reports/report.types';\nimport { AXPReportViewerViewModel } from '../../report-viewer.viewmodel';\n\n@Component({\n selector: 'axp-report-bar-chart-view',\n standalone: true,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXBarChartComponent,\n AXChartLegendComponent,\n ],\n templateUrl: './report-bar-chart-view.component.html',\n styleUrl: './report-bar-chart-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPReportBarChartViewComponent {\n //#region ---- Dependencies ----\n\n protected readonly vm = inject(AXPReportViewerViewModel);\n protected readonly AXPPageStatus = AXPPageStatus;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Current chart layout configuration\n */\n protected readonly chartLayout = computed(() => {\n const layout = this.vm.currentLayout();\n return layout?.layout.type === 'chart' ? (layout.layout as AXPReportChartLayout) : null;\n });\n\n /**\n * Chart configuration options\n */\n protected readonly chartOptions = computed(() => {\n const chartLayout = this.chartLayout();\n return chartLayout?.options || null;\n });\n\n /**\n * Chart type for rendering\n */\n protected readonly chartType = computed(() => {\n const options = this.chartOptions();\n return options?.chartType || 'bar';\n });\n\n /**\n * Data mapping configuration\n */\n protected readonly dataMapping = computed(() => {\n const options = this.chartOptions();\n return options?.dataMapping || null;\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /**\n * Effect to handle data fetching when chart configuration changes\n */\n #fetchData = effect(() => {\n if (this.vm.allowFetchData() && this.vm.shouldExecuteReport() && this.chartOptions()) {\n // TODO: Implement chart data fetching\n console.log('Chart data fetch triggered', {\n chartType: this.chartType(),\n dataMapping: this.dataMapping(),\n });\n this.vm.fetchData().then((data) => {\n const barChartData = AXBarChartReportMapper(((data?.data as any).data as any) ?? {});\n this.barChartData.set(barChartData);\n console.log('barChartData', barChartData);\n });\n }\n });\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle chart click events\n */\n protected handleChartClick(event: any): void {\n // TODO: Implement chart click handling\n console.log('Chart clicked:', event);\n }\n\n /**\n * Handle chart data point selection\n */\n protected handleDataPointSelect(event: any): void {\n // TODO: Implement data point selection\n console.log('Data point selected:', event);\n }\n\n //#endregion\n\n //#region ---- Helper Methods ----\n\n /**\n * Check if chart is ready to render\n */\n protected isChartReady(): boolean {\n return !!(this.chartOptions() && this.dataMapping());\n }\n\n /**\n * Get chart configuration for rendering\n */\n protected getChartConfig(): any {\n // TODO: Transform AXPReportChartOptions to chart library format\n return {\n type: this.chartType(),\n options: this.chartOptions(),\n dataMapping: this.dataMapping(),\n };\n }\n\n protected barChartData = signal<AXBarChartValue>([]);\n\n protected barChartOptions = signal<AXBarChartOption>({});\n\n protected legendOptions = signal<AXChartLegendOptions>({\n mode: 'horizontal',\n });\n\n //#endregion\n}\n","<div class=\"axp-report-chart-view\" *translate=\"let t\">\n @if (vm.status() === AXPPageStatus.Processing) {\n <!-- Loading State -->\n <div class=\"__loading\">\n <div class=\"ax-spinner ax-spin ax-border-4 ax-border-gray-200 ax-border-t-primary ax-rounded-full ax-w-12 ax-h-12\">\n </div>\n <div class=\"__loading-text\">\n {{ t('@report-management:report-viewer.components.chart.messages.loading') | async }}\n </div>\n </div>\n } @else if (vm.status() === AXPPageStatus.Error) {\n <!-- Error State -->\n <axp-state-message mode=\"error\" icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"'@report-management:report-viewer.messages.error.fetch-title'\"\n [description]=\"vm.error() || '@report-management:report-viewer.messages.error.fetch-description'\">\n </axp-state-message>\n } @else if (isChartReady()) {\n <!-- Chart Content -->\n <div class=\"__chart-container\">\n @if (chartLayout()?.header) {\n <div class=\"__chart-header\">\n <h3 class=\"__chart-title\">{{ chartLayout()?.header?.title }}</h3>\n @if (chartLayout()?.header?.showDate) {\n <div class=\"__chart-date\">{{ '@general:common.date.today' | translate | async }}</div>\n }\n </div>\n }\n\n <div class=\"__chart-body\">\n <!-- Chart component will be rendered here -->\n <div class=\"__chart-placeholder\">\n <div class=\"__placeholder-content\">\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-center ax-gap-10\"\n [class]=\"legendOptions().mode === 'horizontal' ? 'ax-flex-col' : 'ax-flex-row'\">\n <!-- Chart Area -->\n <div class=\"ax-flex-0 ax-size-96\">\n <ax-bar-chart #chart [data]=\"barChartData()\" [options]=\"barChartOptions()\"></ax-bar-chart>\n </div>\n <!-- Legend Area -->\n @if (barChartData().length > 0) {\n <div>\n <ax-chart-legend [options]=\"legendOptions()\" [chart]=\"chart\"></ax-chart-legend>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (chartLayout()?.footer) {\n <div class=\"__chart-footer\">\n @if (chartLayout()?.footer?.customHtml) {\n <div [innerHTML]=\"chartLayout()?.footer?.customHtml\"></div>\n }\n </div>\n }\n </div>\n } @else {\n <!-- No Configuration State -->\n <axp-state-message icon=\"fa-light fa-chart-column\"\n [title]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.title'\"\n [description]=\"'@report-management:report-viewer.components.chart.empty-states.no-config.description'\">\n </axp-state-message>\n }\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4"],"mappings":"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"}
|