@acorex/modules 21.0.0-next.88 → 21.0.0-next.89
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-features-widget-view.component-uc8eGA-k.mjs → acorex-modules-application-management-features-widget-view.component-BNTT58PB.mjs} +2 -2
- package/fesm2022/{acorex-modules-application-management-features-widget-view.component-uc8eGA-k.mjs.map → acorex-modules-application-management-features-widget-view.component-BNTT58PB.mjs.map} +1 -1
- package/fesm2022/acorex-modules-application-management.mjs +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-WGRBHMmQ.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BDU2DZEq.mjs} +108 -53
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-BDU2DZEq.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-BWG9hI3t.mjs → acorex-modules-assessment-management-assessment-session-answers-view.util-CzgivU3s.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-BWG9hI3t.mjs.map → acorex-modules-assessment-management-assessment-session-answers-view.util-CzgivU3s.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-BtZ68Wt5.mjs → acorex-modules-assessment-management-fill-assessment-session.command-D6i0YZ3k.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-BtZ68Wt5.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-D6i0YZ3k.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-_rWx2Vje.mjs → acorex-modules-assessment-management-index-BPQ9AiD6.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-index-_rWx2Vje.mjs.map → acorex-modules-assessment-management-index-BPQ9AiD6.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-CL6OmKwh.mjs → acorex-modules-assessment-management-index-BaMs2R6k.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-index-CL6OmKwh.mjs.map → acorex-modules-assessment-management-index-BaMs2R6k.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-BDqMpgdu.mjs → acorex-modules-assessment-management-index-YVENsZN4.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-index-BDqMpgdu.mjs.map → acorex-modules-assessment-management-index-YVENsZN4.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-BwZPHD1o.mjs → acorex-modules-assessment-management-index-oXkGQDat.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-index-BwZPHD1o.mjs.map → acorex-modules-assessment-management-index-oXkGQDat.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DMeQF_J0.mjs → acorex-modules-assessment-management-preview-question.command-B6rHNI4x.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DMeQF_J0.mjs.map → acorex-modules-assessment-management-preview-question.command-B6rHNI4x.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CKmY95wj.mjs → acorex-modules-assessment-management-preview-questionnaire.command-DXB1Y7hz.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CKmY95wj.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-DXB1Y7hz.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-CXf2p-tS.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-D2CNfj8T.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-CXf2p-tS.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-D2CNfj8T.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-CLZuPzUo.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-CF_tV-2p.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-CLZuPzUo.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-CF_tV-2p.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CcGyOKUI.mjs → acorex-modules-assessment-management-review-assessment-session.command-CtEvoUxA.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CcGyOKUI.mjs.map → acorex-modules-assessment-management-review-assessment-session.command-CtEvoUxA.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CmieuVjM.mjs → acorex-modules-assessment-management-view-session-answers.command-CkyBkiXC.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CmieuVjM.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CkyBkiXC.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/acorex-modules-asset-management.mjs +37 -23
- package/fesm2022/acorex-modules-asset-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CMRT9dQC.mjs → acorex-modules-auth-acorex-modules-auth-Nw701LHa.mjs} +30 -30
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CMRT9dQC.mjs.map → acorex-modules-auth-acorex-modules-auth-Nw701LHa.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-app-chooser.component-mOPBXcQc.mjs → acorex-modules-auth-app-chooser.component-FqCIt_8E.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-app-chooser.component-mOPBXcQc.mjs.map → acorex-modules-auth-app-chooser.component-FqCIt_8E.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-change-password.command-CceYk6DE.mjs → acorex-modules-auth-change-password.command-DND9Oka4.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-change-password.command-CceYk6DE.mjs.map → acorex-modules-auth-change-password.command-DND9Oka4.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-edit-account-info.command-jF8A_Jsy.mjs → acorex-modules-auth-edit-account-info.command-bmdkZzYt.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-edit-account-info.command-jF8A_Jsy.mjs.map → acorex-modules-auth-edit-account-info.command-bmdkZzYt.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-lock-screen.command-BvruxuiF.mjs → acorex-modules-auth-lock-screen.command-DSGXqDVD.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-lock-screen.command-BvruxuiF.mjs.map → acorex-modules-auth-lock-screen.command-DSGXqDVD.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-login.module-CmBClJv2.mjs → acorex-modules-auth-login.module-DC3dzDf0.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-login.module-CmBClJv2.mjs.map → acorex-modules-auth-login.module-DC3dzDf0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-master.layout-CLGmgSqo.mjs → acorex-modules-auth-master.layout-iMOvevEv.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-master.layout-CLGmgSqo.mjs.map → acorex-modules-auth-master.layout-iMOvevEv.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-yxfNoBS-.mjs → acorex-modules-auth-oauth-callback.component-s9WMG92M.mjs} +3 -3
- package/fesm2022/{acorex-modules-auth-oauth-callback.component-yxfNoBS-.mjs.map → acorex-modules-auth-oauth-callback.component-s9WMG92M.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-open-sessions.command-DsWueHa3.mjs → acorex-modules-auth-open-sessions.command-CLL8rgjE.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-open-sessions.command-DsWueHa3.mjs.map → acorex-modules-auth-open-sessions.command-CLL8rgjE.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-C3_tAt8j.mjs → acorex-modules-auth-password.component-BOEi91f7.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-C3_tAt8j.mjs.map → acorex-modules-auth-password.component-BOEi91f7.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-password.component-BrTEuc51.mjs → acorex-modules-auth-password.component-eA_3LtcO.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-password.component-BrTEuc51.mjs.map → acorex-modules-auth-password.component-eA_3LtcO.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-profile-activity-chart.component-C6_0oeCC.mjs → acorex-modules-auth-profile-activity-chart.component-BK1k4Lrh.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-profile-activity-chart.component-C6_0oeCC.mjs.map → acorex-modules-auth-profile-activity-chart.component-BK1k4Lrh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-profile-delete-account-danger-zone.component-EhmuT88j.mjs → acorex-modules-auth-profile-delete-account-danger-zone.component-CHru1be-.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-profile-delete-account-danger-zone.component-EhmuT88j.mjs.map → acorex-modules-auth-profile-delete-account-danger-zone.component-CHru1be-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-profile-page-component.provider-BHEdqBbF.mjs → acorex-modules-auth-profile-page-component.provider-MCsUPTrt.mjs} +4 -4
- package/fesm2022/{acorex-modules-auth-profile-page-component.provider-BHEdqBbF.mjs.map → acorex-modules-auth-profile-page-component.provider-MCsUPTrt.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-profile-page.component-Q0ixAWtC.mjs → acorex-modules-auth-profile-page.component-DOj2GhFJ.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-profile-page.component-Q0ixAWtC.mjs.map → acorex-modules-auth-profile-page.component-DOj2GhFJ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-remove-pin-code.command-j5iobHAs.mjs → acorex-modules-auth-remove-pin-code.command-CqRxKR4Y.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-remove-pin-code.command-j5iobHAs.mjs.map → acorex-modules-auth-remove-pin-code.command-CqRxKR4Y.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-routes-BFACBfAG.mjs → acorex-modules-auth-routes-FZRnzT9V.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-BFACBfAG.mjs.map → acorex-modules-auth-routes-FZRnzT9V.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-session-lock-overlay.component-flpWlR8p.mjs → acorex-modules-auth-session-lock-overlay.component-6o2uU9U5.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-session-lock-overlay.component-flpWlR8p.mjs.map → acorex-modules-auth-session-lock-overlay.component-6o2uU9U5.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-set-pin-code.command-B0sXGsok.mjs → acorex-modules-auth-set-pin-code.command-CsXJ30Fs.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-set-pin-code.command-B0sXGsok.mjs.map → acorex-modules-auth-set-pin-code.command-CsXJ30Fs.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-set-pin-code.component-D95Hn8R-.mjs → acorex-modules-auth-set-pin-code.component-DJhqru7e.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-set-pin-code.component-D95Hn8R-.mjs.map → acorex-modules-auth-set-pin-code.component-DJhqru7e.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-settings.provider-D0-hEHd2.mjs → acorex-modules-auth-settings.provider-BJ7lDjbr.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-settings.provider-D0-hEHd2.mjs.map → acorex-modules-auth-settings.provider-BJ7lDjbr.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DBIVSBaM.mjs → acorex-modules-auth-tenant-chooser.component-DR7rH0m1.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DBIVSBaM.mjs.map → acorex-modules-auth-tenant-chooser.component-DR7rH0m1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-two-factor.module-DwXsAUlJ.mjs → acorex-modules-auth-two-factor.module-BvvDIlqe.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-two-factor.module-DwXsAUlJ.mjs.map → acorex-modules-auth-two-factor.module-BvvDIlqe.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-view-login-history.command-BpCog3dx.mjs → acorex-modules-auth-view-login-history.command-BUiXUbjA.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-view-login-history.command-BpCog3dx.mjs.map → acorex-modules-auth-view-login-history.command-BUiXUbjA.mjs.map} +1 -1
- package/fesm2022/acorex-modules-auth.mjs +1 -1
- package/fesm2022/acorex-modules-business-core.mjs +0 -6
- package/fesm2022/acorex-modules-business-core.mjs.map +1 -1
- package/fesm2022/{acorex-modules-common-search-popup.component-6_qrYkc2.mjs → acorex-modules-common-search-popup.component-BhItO3Sr.mjs} +2 -2
- package/fesm2022/{acorex-modules-common-search-popup.component-6_qrYkc2.mjs.map → acorex-modules-common-search-popup.component-BhItO3Sr.mjs.map} +1 -1
- package/fesm2022/acorex-modules-common.mjs +30 -43
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-contact-core-acorex-modules-contact-core-CBMdv1GN.mjs → acorex-modules-contact-core-acorex-modules-contact-core-CELmV51p.mjs} +8 -7
- package/fesm2022/acorex-modules-contact-core-acorex-modules-contact-core-CELmV51p.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-core-entity.provider-B8__CVGP.mjs → acorex-modules-contact-core-entity.provider-AH-gvpLJ.mjs} +3 -3
- package/fesm2022/{acorex-modules-contact-core-entity.provider-B8__CVGP.mjs.map → acorex-modules-contact-core-entity.provider-AH-gvpLJ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-contact-core-menu.provider-C-iEIPGe.mjs → acorex-modules-contact-core-menu.provider-T9IuzSBf.mjs} +11 -5
- package/fesm2022/acorex-modules-contact-core-menu.provider-T9IuzSBf.mjs.map +1 -0
- package/fesm2022/{acorex-modules-contact-core-permission-definition.provider-DXjdp846.mjs → acorex-modules-contact-core-permission-definition.provider-CnxI1ujq.mjs} +2 -2
- package/fesm2022/{acorex-modules-contact-core-permission-definition.provider-DXjdp846.mjs.map → acorex-modules-contact-core-permission-definition.provider-CnxI1ujq.mjs.map} +1 -1
- package/fesm2022/acorex-modules-contact-core.mjs +1 -1
- package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-CUjTT3M7.mjs → acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs} +6394 -3666
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs.map +1 -0
- package/fesm2022/acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs +34 -0
- package/fesm2022/acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-CGcngwdA.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs} +5 -5
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-CGcngwdA.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-comments-page.component-hopaF6xW.mjs → acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-comments-page.component-hopaF6xW.mjs.map → acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs +30 -0
- package/fesm2022/acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs.map +1 -0
- package/fesm2022/acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs +30 -0
- package/fesm2022/acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs.map +1 -0
- package/fesm2022/acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs +34 -0
- package/fesm2022/acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CqDrZKFK.mjs → acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs} +19 -9
- package/fesm2022/acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DiDAz-Is.mjs → acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DiDAz-Is.mjs.map → acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs +62 -0
- package/fesm2022/acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs.map +1 -0
- package/fesm2022/acorex-modules-conversation.mjs +1 -1
- package/fesm2022/acorex-modules-customer-management.mjs +2 -2
- package/fesm2022/acorex-modules-customer-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-Lx3VuIg6.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs} +1034 -395
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map +1 -0
- package/fesm2022/{acorex-modules-dashboard-management-index-DvY9N8FF.mjs → acorex-modules-dashboard-management-index-gjCiELmH.mjs} +2 -2
- package/fesm2022/{acorex-modules-dashboard-management-index-DvY9N8FF.mjs.map → acorex-modules-dashboard-management-index-gjCiELmH.mjs.map} +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
- package/fesm2022/{acorex-modules-data-management-index-CxVSgxTM.mjs → acorex-modules-data-management-index-BYQncZ6e.mjs} +28 -6
- package/fesm2022/acorex-modules-data-management-index-BYQncZ6e.mjs.map +1 -0
- package/fesm2022/acorex-modules-data-management.mjs +6 -6
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-document-management.mjs +4 -4
- package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-cLToc9fP.mjs → acorex-modules-form-template-management-template-picker.component-BGf98ooQ.mjs} +2 -2
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-cLToc9fP.mjs.map → acorex-modules-form-template-management-template-picker.component-BGf98ooQ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-DpVAfk3i.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs} +20 -20
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-DpVAfk3i.mjs.map → acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-BDv_eotn.mjs → acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-BDv_eotn.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-CT49oS39.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-CT49oS39.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-zAunbLbf.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-zAunbLbf.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-8LKMNm4Z.mjs → acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs} +2 -6
- package/fesm2022/acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-BQ6Ysh-A.mjs → acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-BQ6Ysh-A.mjs.map → acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CEAUhv0o.mjs → acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CEAUhv0o.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-DakWOslg.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-DakWOslg.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-BXMGzUuM.mjs → acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-BXMGzUuM.mjs.map → acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B1s_i8U3.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B1s_i8U3.mjs.map → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/acorex-modules-learning-management.mjs +1 -1
- package/fesm2022/acorex-modules-learning-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-location-management.mjs +2 -2
- package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-meeting-management.mjs +1 -1
- package/fesm2022/acorex-modules-meeting-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-notification-management-acorex-modules-notification-management-DZSXFNgo.mjs → acorex-modules-notification-management-acorex-modules-notification-management-DZWUyu54.mjs} +4 -4
- package/fesm2022/{acorex-modules-notification-management-acorex-modules-notification-management-DZSXFNgo.mjs.map → acorex-modules-notification-management-acorex-modules-notification-management-DZWUyu54.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-notification-management-notification-page.component-swzDjJUP.mjs → acorex-modules-notification-management-notification-page.component-BNxTMY-C.mjs} +3 -3
- package/fesm2022/{acorex-modules-notification-management-notification-page.component-swzDjJUP.mjs.map → acorex-modules-notification-management-notification-page.component-BNxTMY-C.mjs.map} +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +1 -1
- package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-B6zOrUAS.mjs → acorex-modules-organization-management-acorex-modules-organization-management-BjKrMO_L.mjs} +37 -37
- package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-B6zOrUAS.mjs.map → acorex-modules-organization-management-acorex-modules-organization-management-BjKrMO_L.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-BG6AQs-j.mjs → acorex-modules-organization-management-add-business-unit-to-business-unit.command-CgqydSZh.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-BG6AQs-j.mjs.map → acorex-modules-organization-management-add-business-unit-to-business-unit.command-CgqydSZh.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-DzA0h9ED.mjs → acorex-modules-organization-management-add-position-to-business-unit.command-B_BIg-aF.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-DzA0h9ED.mjs.map → acorex-modules-organization-management-add-position-to-business-unit.command-B_BIg-aF.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-5ZGzmp95.mjs → acorex-modules-organization-management-add-team-to-business-unit.command-zFql0VH1.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-5ZGzmp95.mjs.map → acorex-modules-organization-management-add-team-to-business-unit.command-zFql0VH1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-entity.provider-DKhXlL2j.mjs → acorex-modules-organization-management-entity.provider-Buchg68Q.mjs} +15 -15
- package/fesm2022/{acorex-modules-organization-management-entity.provider-DKhXlL2j.mjs.map → acorex-modules-organization-management-entity.provider-Buchg68Q.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-DhCn97pE.mjs → acorex-modules-organization-management-feature-definition.provider-CulEun4H.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-DhCn97pE.mjs.map → acorex-modules-organization-management-feature-definition.provider-CulEun4H.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-C1WFmQ2x.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-D3k2BNKU.mjs} +4 -4
- package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-C1WFmQ2x.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-D3k2BNKU.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-Bs28OWW8.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-CSwHAkh5.mjs} +3 -3
- package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-Bs28OWW8.mjs.map → acorex-modules-organization-management-job-definition-responsibilities-page.component-CSwHAkh5.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-C66FEcxc.mjs → acorex-modules-organization-management-job-definition-skills-page.component-CVo37Mx0.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-C66FEcxc.mjs.map → acorex-modules-organization-management-job-definition-skills-page.component-CVo37Mx0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DcOVF99r.mjs → acorex-modules-organization-management-job-level.datasource-CMxMInko.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DcOVF99r.mjs.map → acorex-modules-organization-management-job-level.datasource-CMxMInko.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-menu.provider-B0v8w3eH.mjs → acorex-modules-organization-management-menu.provider-BL99vlod.mjs} +3 -3
- package/fesm2022/{acorex-modules-organization-management-menu.provider-B0v8w3eH.mjs.map → acorex-modules-organization-management-menu.provider-BL99vlod.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-B07M8tKi.mjs → acorex-modules-organization-management-org-chart-default-node-contribution.provider-CfvmOwYD.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-B07M8tKi.mjs.map → acorex-modules-organization-management-org-chart-default-node-contribution.provider-CfvmOwYD.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-DSvij02R.mjs → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-CsvhhcoW.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-DSvij02R.mjs.map → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-CsvhhcoW.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-BYWq-Aco.mjs → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Dvo2XEHn.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-BYWq-Aco.mjs.map → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Dvo2XEHn.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DiMvAEbk.mjs → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BsBsdoII.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DiMvAEbk.mjs.map → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BsBsdoII.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-DwHB4ZGl.mjs → acorex-modules-organization-management-org-chart.page-DJNfsp4z.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-org-chart.page-DwHB4ZGl.mjs.map → acorex-modules-organization-management-org-chart.page-DJNfsp4z.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CynLhaYz.mjs → acorex-modules-organization-management-permission-definition.provider-CuReVYo1.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CynLhaYz.mjs.map → acorex-modules-organization-management-permission-definition.provider-CuReVYo1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-DUgDxwtI.mjs → acorex-modules-organization-management-remove-position-from-business-unit.command-mPTX8Vpc.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-DUgDxwtI.mjs.map → acorex-modules-organization-management-remove-position-from-business-unit.command-mPTX8Vpc.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BTAwsZNP.mjs → acorex-modules-organization-management-replace-position-assignee.command-DibpVA88.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BTAwsZNP.mjs.map → acorex-modules-organization-management-replace-position-assignee.command-DibpVA88.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-D904V181.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-zN1Vz3Om.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-D904V181.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-zN1Vz3Om.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BMFws_6Y.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BYOs9nrw.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BMFws_6Y.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BYOs9nrw.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-DXmsR1qV.mjs → acorex-modules-organization-management-responsibilities-matrix.component-DVlThT1h.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-DXmsR1qV.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-DVlThT1h.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-organization-management-settings.provider-UFqps4Zg.mjs → acorex-modules-organization-management-settings.provider-BxoCS3w7.mjs} +2 -2
- package/fesm2022/{acorex-modules-organization-management-settings.provider-UFqps4Zg.mjs.map → acorex-modules-organization-management-settings.provider-BxoCS3w7.mjs.map} +1 -1
- package/fesm2022/acorex-modules-organization-management.mjs +1 -1
- package/fesm2022/acorex-modules-person-core.mjs +0 -6
- package/fesm2022/acorex-modules-person-core.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-DsKPOWpy.mjs → acorex-modules-platform-management-acorex-modules-platform-management-B5hMhQp-.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-DsKPOWpy.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-B5hMhQp-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-Br4nL9zq.mjs → acorex-modules-platform-management-menu-list.component-DcOr1v-f.mjs} +3 -3
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-Br4nL9zq.mjs.map → acorex-modules-platform-management-menu-list.component-DcOr1v-f.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/acorex-modules-product-catalog.mjs +7 -6
- package/fesm2022/acorex-modules-product-catalog.mjs.map +1 -1
- package/fesm2022/acorex-modules-project-management.mjs +1 -1
- package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-DaPEmTm9.mjs → acorex-modules-report-management-report-runner-root-page.component-CgrBAgqq.mjs} +2 -2
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-DaPEmTm9.mjs.map → acorex-modules-report-management-report-runner-root-page.component-CgrBAgqq.mjs.map} +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +7 -7
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-risk-management-preview-risk-matrix-cell.command-CWG3zUBo.mjs +120 -0
- package/fesm2022/acorex-modules-risk-management-preview-risk-matrix-cell.command-CWG3zUBo.mjs.map +1 -0
- package/fesm2022/acorex-modules-risk-management.mjs +13 -0
- package/fesm2022/acorex-modules-risk-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-security-management.mjs +1 -1
- package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-settings-management-setting-view.component-CG-GW2yS.mjs → acorex-modules-settings-management-setting-view.component-BRhZR1br.mjs} +109 -15
- package/fesm2022/acorex-modules-settings-management-setting-view.component-BRhZR1br.mjs.map +1 -0
- package/fesm2022/acorex-modules-settings-management.mjs +1 -1
- package/fesm2022/acorex-modules-supplier-management.mjs +1 -1
- package/fesm2022/acorex-modules-supplier-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-task-management-task-board.page-FFhsAyHF.mjs → acorex-modules-task-management-task-board.page-DTWxd_vG.mjs} +41 -32
- package/fesm2022/acorex-modules-task-management-task-board.page-DTWxd_vG.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +55 -23
- package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-workflow-management-acorex-modules-workflow-management-DJeUheQT.mjs → acorex-modules-workflow-management-acorex-modules-workflow-management-D04WU8wX.mjs} +32 -25
- package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-D04WU8wX.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-index--6gz3uRb.mjs → acorex-modules-workflow-management-index-Bfzsu6VL.mjs} +2 -2
- package/fesm2022/{acorex-modules-workflow-management-index--6gz3uRb.mjs.map → acorex-modules-workflow-management-index-Bfzsu6VL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-index-DV7Uf5hP.mjs → acorex-modules-workflow-management-index-CG1-u2Va.mjs} +3 -3
- package/fesm2022/{acorex-modules-workflow-management-index-DV7Uf5hP.mjs.map → acorex-modules-workflow-management-index-CG1-u2Va.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-index-C702Snjg.mjs → acorex-modules-workflow-management-index-DtKZARCI.mjs} +3 -3
- package/fesm2022/{acorex-modules-workflow-management-index-C702Snjg.mjs.map → acorex-modules-workflow-management-index-DtKZARCI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-C60ABOUE.mjs → acorex-modules-workflow-management-save-workflow-definition-activities.command-80PIS1oE.mjs} +2 -2
- package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-C60ABOUE.mjs.map → acorex-modules-workflow-management-save-workflow-definition-activities.command-80PIS1oE.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-column.component-ChnPuG_J.mjs → acorex-modules-workflow-management-workflow-configurator-widget-column.component-CXhrrqa_.mjs} +2 -2
- package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-column.component-ChnPuG_J.mjs.map → acorex-modules-workflow-management-workflow-configurator-widget-column.component-CXhrrqa_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-edit.component-BqydSkbP.mjs → acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CzPQUA9m.mjs} +47 -25
- package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CzPQUA9m.mjs.map +1 -0
- package/fesm2022/{acorex-modules-workflow-management-workflow-run-history-popup.component-D_yi-Ccp.mjs → acorex-modules-workflow-management-workflow-run-history-popup.component-CTs6Sdm2.mjs} +2 -2
- package/fesm2022/{acorex-modules-workflow-management-workflow-run-history-popup.component-D_yi-Ccp.mjs.map → acorex-modules-workflow-management-workflow-run-history-popup.component-CTs6Sdm2.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-CdvuOzXH.mjs → acorex-modules-workflow-management-workflow-task-popover.component-CaIIzv1r.mjs} +2 -2
- package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-CdvuOzXH.mjs.map → acorex-modules-workflow-management-workflow-task-popover.component-CaIIzv1r.mjs.map} +1 -1
- package/fesm2022/acorex-modules-workflow-management.mjs +1 -1
- package/fesm2022/acorex-modules-workplacesafety-management-hazard-risk-ppe-rule-status.provider-BsRNRZ6z.mjs +42 -0
- package/fesm2022/acorex-modules-workplacesafety-management-hazard-risk-ppe-rule-status.provider-BsRNRZ6z.mjs.map +1 -0
- package/fesm2022/acorex-modules-workplacesafety-management.mjs +494 -294
- package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-asset-management.d.ts +7 -3
- package/types/acorex-modules-contact-core.d.ts +1 -0
- package/types/acorex-modules-conversation.d.ts +898 -161
- package/types/acorex-modules-dashboard-management.d.ts +56 -10
- package/types/acorex-modules-document-management.d.ts +4 -0
- package/types/acorex-modules-report-management.d.ts +2 -0
- package/types/acorex-modules-task-management.d.ts +21 -5
- package/types/acorex-modules-workflow-management.d.ts +9 -4
- package/types/acorex-modules-workplacesafety-management.d.ts +55 -32
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-WGRBHMmQ.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-core-acorex-modules-contact-core-CBMdv1GN.mjs.map +0 -1
- package/fesm2022/acorex-modules-contact-core-menu.provider-C-iEIPGe.mjs.map +0 -1
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-CUjTT3M7.mjs.map +0 -1
- package/fesm2022/acorex-modules-conversation-send-assist-chat-message.command-CqDrZKFK.mjs.map +0 -1
- package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-Lx3VuIg6.mjs.map +0 -1
- package/fesm2022/acorex-modules-data-management-index-CxVSgxTM.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-edit-personal-info.command-8LKMNm4Z.mjs.map +0 -1
- package/fesm2022/acorex-modules-settings-management-setting-view.component-CG-GW2yS.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-FFhsAyHF.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-DJeUheQT.mjs.map +0 -1
- package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-BqydSkbP.mjs.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
|
|
2
|
-
import { AXP_PROTECTED_ROUTE_GUARDS, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_PROVIDER
|
|
3
|
-
import { AXPDataSourceDefinitionProviderService, AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider
|
|
4
|
-
import { AXPStateMessageComponent,
|
|
5
|
-
import { AXPEntityService, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
|
|
2
|
+
import { AXPEntityCommandScope, AXPSettingsService, AXP_PROTECTED_ROUTE_GUARDS, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_MENU_PROVIDER } from '@acorex/platform/common';
|
|
3
|
+
import { AXPDataSourceDefinitionProviderService, AXPDeviceService, AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider } from '@acorex/platform/core';
|
|
4
|
+
import { AXPStateMessageComponent, AXPWidgetPropertyViewerComponent, AXP_PAGE_COMPONENT_PROVIDER, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';
|
|
5
|
+
import { AXPEntityService, cloneLayoutArrays, ensureLayoutSection, ensureLayoutPropertyView, resolveEntityPluginDetailPageOrder, ensureListActions, actionExists, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex/platform/layout/entity';
|
|
6
6
|
import * as i3$2 from '@acorex/platform/layout/widget-core';
|
|
7
|
-
import { AXPBaseWidgetComponent, cloneProperty, AXPWidgetGroupEnum, AXPValueWidgetComponent, createStringProperty, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER
|
|
7
|
+
import { AXPBaseWidgetComponent, cloneProperty, AXPWidgetGroupEnum, AXPValueWidgetComponent, createStringProperty, AXPWidgetRendererDirective, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';
|
|
8
8
|
import { AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_APPEARANCE_PROPERTY_GROUP, AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_COLOR_PROPERTY, AXP_BG_COLOR_PROPERTY, AXPWidgetsModule } from '@acorex/platform/layout/widgets';
|
|
9
9
|
import * as i0 from '@angular/core';
|
|
10
|
-
import { Injectable, inject, DestroyRef, afterNextRender, signal, effect, computed, ChangeDetectionStrategy, Component, InjectionToken, viewChild, input, ElementRef, ChangeDetectorRef, HostBinding, linkedSignal, HostListener,
|
|
11
|
-
import { AXPSystemActionType, AXPWidgetsCatalog, AXPDataGenerator,
|
|
10
|
+
import { Injectable, inject, DestroyRef, afterNextRender, signal, effect, computed, ChangeDetectionStrategy, Component, InjectionToken, viewChild, input, ElementRef, ChangeDetectorRef, HostBinding, linkedSignal, HostListener, output, contentChild, ViewEncapsulation, NgModule, untracked, model } from '@angular/core';
|
|
11
|
+
import { AXPSystemActionType, AXPWidgetsCatalog, AXPDataGenerator, createMultiLanguageString, AXPPlatformScope, AXPWidgetsList } from '@acorex/platform/contracts';
|
|
12
12
|
import { AXPCommonMenuKeys, AXP_GLOBAL_SEARCH_CONFIG_TOKEN } from '@acorex/modules/common';
|
|
13
13
|
import { firstValueFrom, Subject, map, Observable, catchError, throwError, of, finalize, interval, switchMap, fromEvent } from 'rxjs';
|
|
14
14
|
import * as i4 from '@acorex/core/translation';
|
|
@@ -50,21 +50,23 @@ import * as i1$3 from '@acorex/components/wysiwyg';
|
|
|
50
50
|
import { AXWysiwygModule } from '@acorex/components/wysiwyg';
|
|
51
51
|
import * as i2$1 from '@angular/forms';
|
|
52
52
|
import { FormsModule } from '@angular/forms';
|
|
53
|
-
import {
|
|
53
|
+
import { get, isString, isArray, castArray, set } from 'lodash-es';
|
|
54
|
+
import { AXP_WIDGET_PICKER_TAB_CONTEXT, AXPWidgetPickerService, AXPDesignerService } from '@acorex/platform/layout/designer';
|
|
54
55
|
import { RootConfig as RootConfig$1 } from '@acorex/modules/security-management';
|
|
55
56
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
56
|
-
import { AXP_WIDGET_PICKER_TAB_CONTEXT, AXPWidgetPickerService, AXPDesignerService } from '@acorex/platform/layout/designer';
|
|
57
57
|
import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
|
|
58
58
|
import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
|
|
59
59
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
60
|
-
import
|
|
61
|
-
import {
|
|
60
|
+
import * as i1$4 from '@acorex/components/loading';
|
|
61
|
+
import { AXLoadingModule } from '@acorex/components/loading';
|
|
62
62
|
import * as i3$1 from '@acorex/components/dropdown';
|
|
63
63
|
import { AXDropdownModule } from '@acorex/components/dropdown';
|
|
64
|
+
import { ActivatedRoute } from '@angular/router';
|
|
65
|
+
import { createQueryView, entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity-contracts';
|
|
66
|
+
import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
|
|
67
|
+
import { AXButtonGroupModule } from '@acorex/components/button-group';
|
|
64
68
|
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
|
65
69
|
import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
|
|
66
|
-
import * as i1$4 from '@acorex/components/loading';
|
|
67
|
-
import { AXLoadingModule } from '@acorex/components/loading';
|
|
68
70
|
import { AXLabelModule } from '@acorex/components/label';
|
|
69
71
|
import * as i5 from '@acorex/components/select-box';
|
|
70
72
|
import { AXSelectBoxModule } from '@acorex/components/select-box';
|
|
@@ -5040,7 +5042,7 @@ class AXPWeatherWidgetViewComponent extends AXPDashboardWidgetComponent {
|
|
|
5040
5042
|
provide: AXPWeatherApiAbstract,
|
|
5041
5043
|
useClass: AXPWeatherApiService,
|
|
5042
5044
|
},
|
|
5043
|
-
], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Weather Widget Component Template -->\n<div class=\"axp-weather-container\" #containerElement>\n <!-- Loading indicator -->\n @if (isLoading()) {\n <div class=\"axp-weather-loading-overlay\">\n <div class=\"axp-weather-loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading' | translate | async }}</span>\n </div>\n </div>\n }\n\n <!-- Error message -->\n @if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-solid fa-exclamation-triangle\"\n [title]=\"'@dashboard:weather.error.title'\"\n [description]=\"errorMessage()\"\n >\n <button slot=\"actions\" class=\"axp-weather-retry-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.retry' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n\n <!-- Weather content - only show when we have data -->\n @if (weatherData()) {\n <!-- Background decorations based on weather condition -->\n <div class=\"axp-weather-background-decorations\">\n <div class=\"axp-weather-decoration\" [ngClass]=\"weatherData()?.current?.condition?.toLowerCase()\"></div>\n <div class=\"axp-weather-gradient-overlay\"></div>\n </div>\n\n <div class=\"axp-weather-inner\">\n <!-- Location information section -->\n <div class=\"axp-weather-location-info\">\n <div class=\"axp-weather-location-icon\">\n <i class=\"fa-solid fa-location-dot\"></i>\n </div>\n <div class=\"axp-weather-location-text\">\n <h2 class=\"axp-weather-location-name\">{{ city() }}</h2>\n </div>\n </div>\n\n <!-- Current weather conditions section -->\n <div class=\"axp-weather-current-weather\">\n <!-- Weather icon and condition name -->\n @if (showCurrentCondition()) {\n <div class=\"axp-weather-condition\">\n <div class=\"axp-weather-icon-wrapper\">\n <div class=\"axp-weather-icon\">\n <img [src]=\"getConditionIcon(weatherData()?.current?.condition || '')\" />\n </div>\n <div\n class=\"axp-weather-icon-glow\"\n [style.background-color]=\"getConditionColor(weatherData()?.current?.condition || '')\"\n ></div>\n </div>\n <div class=\"axp-weather-condition-name\">\n {{ getCurrentCondition() | translate | async }}\n </div>\n </div>\n }\n\n <!-- Temperature display -->\n @if (showTemperature()) {\n <div class=\"axp-weather-temperature\">\n <span class=\"axp-weather-temperature-value\">{{ getCurrentTemperature() }}</span>\n <span class=\"axp-weather-temperature-unit\">{{ getTemperatureUnit() | translate | async }}</span>\n </div>\n }\n </div>\n\n <!-- Weather details section (humidity and wind) -->\n @if (showHumidity() || showWind()) {\n <div class=\"axp-weather-details\">\n <!-- Humidity information -->\n @if (showHumidity()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-droplet\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.humidity' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">{{ getHumidity() }}%</div>\n </div>\n </div>\n }\n\n <!-- Wind speed information -->\n @if (showWind()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-wind\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.wind' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">\n {{ getWindSpeed() }} {{ getWindSpeedUnit() | translate | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Weather forecast section -->\n @if (showForecast() && weatherData()?.forecast) {\n <div class=\"axp-weather-forecast\">\n <div class=\"axp-weather-forecast-header\">\n <h3 class=\"axp-weather-forecast-title\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n <span class=\"ax-px-1\">{{ '@dashboard:weather.forecast' | translate | async }}</span>\n </h3>\n </div>\n <!-- Loading indicator for forecast -->\n <!-- @if (isForecastLoading()) {\n <div class=\"axp-weather-forecast-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading-forecast' | translate | async }}</span>\n </div>\n } -->\n <!-- Scrollable forecast days display -->\n <div class=\"axp-weather-forecast-items\">\n @for (day of displayedForecast(); track day.day) {\n <div class=\"axp-weather-forecast-day\">\n <div class=\"axp-weather-forecast-day-name\">\n {{ getDayName(parseDate(day.date)) | translate | async }}\n </div>\n <div class=\"axp-weather-forecast-icon\" [title]=\"getConditionName(day.condition) | translate | async\">\n <img [src]=\"getConditionIcon(day.condition || '')\" />\n </div>\n <div class=\"axp-weather-forecast-temps\">\n <span class=\"axp-weather-forecast-low\">\n {{ temperatureUnit() === '\u00B0C' ? day.minTempC : day.minTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n <span class=\"axp-weather-forecast-high\">\n {{ temperatureUnit() === '\u00B0C' ? day.maxTempC : day.maxTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Last updated timestamp -->\n <div class=\"axp-weather-last-updated\">\n <span>{{ '@dashboard:weather.last-updated' | translate | async }}: {{ getLastUpdated() }}</span>\n </div>\n\n <!-- Manual refresh button -->\n <div class=\"axp-weather-refresh-action\">\n <button\n class=\"axp-weather-refresh-button\"\n (click)=\"refreshWeather()\"\n [attr.aria-label]=\"'@dashboard:weather.refresh' | translate | async\"\n [title]=\"'@dashboard:weather.refresh' | translate | async\"\n >\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.refresh' | translate | async }}</span>\n </button>\n </div>\n </div>\n } @else if (!isLoading() && !hasError()) {\n <!-- No data state (not loading, no error) -->\n <axp-state-message\n icon=\"fa-solid fa-cloud-sun\"\n [title]=\"'@dashboard:weather.no-data.title'\"\n [description]=\"'@dashboard:weather.no-data.description'\"\n >\n <button slot=\"actions\" class=\"axp-weather-refresh-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.load-data' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;--primary-gradient-start: #2196f3;--primary-gradient-end: #1976d2;--shadow-color: rgba(0, 0, 0, .2);--glass-bg: rgba(255, 255, 255, .15);--glass-border: rgba(255, 255, 255, .2);--text-primary: rgba(255, 255, 255, .95);--text-secondary: rgba(255, 255, 255, .75);--transition-speed: .3s}.axp-weather-container{width:100%;height:100%;overflow:hidden;position:relative;box-shadow:0 4px 8px #0000001a;min-height:300px}.axp-weather-loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#2c3e50d9;display:flex;justify-content:center;align-items:center;z-index:100}.axp-weather-loading-spinner{text-align:center}.axp-weather-loading-spinner i{font-size:2.5rem;color:#fff;margin-bottom:.5rem}.axp-weather-loading-spinner span{display:block;color:#fff;font-size:1rem}.axp-weather-background-decorations{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.axp-weather-decoration{position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:center}.axp-weather-gradient-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.axp-weather-inner{position:relative;z-index:2;height:100%;padding:1.5rem;display:flex;flex-direction:column;justify-content:space-between}.axp-weather-location-info{display:flex;align-items:center;margin-bottom:1.5rem}.axp-weather-location-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background-color:#fff3;border-radius:50%;margin-right:.75rem}.axp-weather-location-icon i{color:#fff}.axp-weather-location-name{margin:0;font-size:1.5rem;font-weight:500;text-shadow:1px 1px 3px rgba(0,0,0,.2);text-transform:capitalize}.axp-weather-current-weather{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem;flex-wrap:wrap}.axp-weather-condition{display:flex;flex-direction:column;align-items:center}.axp-weather-icon-wrapper{position:relative;margin-bottom:.5rem}.axp-weather-icon{position:relative;z-index:2;scale:2}.axp-weather-icon i{font-size:2.75rem;filter:drop-shadow(0 0 8px rgba(0,0,0,.3))}.axp-weather-icon-glow{position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);width:45px;height:45px;border-radius:50%;filter:blur(15px);opacity:.4}.axp-weather-condition-name{font-size:1.1rem;text-align:center;text-shadow:1px 1px 2px rgba(0,0,0,.2)}.axp-weather-temperature{display:flex;align-items:flex-start;text-shadow:1px 1px 3px rgba(0,0,0,.3)}.axp-weather-temperature-value{font-size:3.5rem;font-weight:500;line-height:1}.axp-weather-temperature-unit{font-size:1.5rem;margin-top:.25rem}.axp-weather-details{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));display:flex;flex-wrap:wrap;gap:1.5rem;margin-bottom:1rem;padding:1rem;border-radius:8px}.axp-weather-detail-item{display:flex;align-items:center;flex:1;min-width:120px}.axp-weather-detail-icon{width:40px;height:40px;border-radius:50%;background-color:#fff3;display:flex;align-items:center;justify-content:center;margin-right:.75rem}.axp-weather-detail-icon i{font-size:1.25rem}.axp-weather-detail-info{display:flex;padding-inline:.25rem;flex-direction:column}.axp-weather-detail-label{font-size:.875rem;margin-bottom:.25rem}.axp-weather-detail-value{font-size:1.125rem;font-weight:500}.axp-weather-forecast{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));margin-bottom:.5rem;border-radius:8px;padding:1rem}.axp-weather-forecast-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.axp-weather-forecast-title{margin:0;font-size:1.125rem;font-weight:500;display:flex;align-items:center}.axp-weather-forecast-title i{margin-right:.5rem;opacity:.8}.axp-weather-scroll-indicator{color:#fff9}.axp-weather-forecast-items{display:flex;overflow-x:auto;gap:.75rem;padding-bottom:.5rem}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#ffffff4d;border-radius:4px}.axp-weather-forecast-items::-webkit-scrollbar-track{background-color:#0000001a;border-radius:4px}.axp-weather-forecast-day{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-surface),var(--tw-bg-opacity, 1));min-width:90px;display:flex;flex-direction:column;align-items:center;padding:.75rem .5rem;border-radius:6px;transition:all .3s ease}.axp-weather-forecast-day:hover{transform:translateY(-2px)}.axp-weather-forecast-day-name{font-size:.875rem;margin-bottom:.5rem;font-weight:500}.axp-weather-forecast-icon{font-size:1.5rem;margin-bottom:.5rem}.axp-weather-forecast-icon i{filter:drop-shadow(0 0 5px rgba(0,0,0,.2))}.axp-weather-forecast-temps{display:flex;flex-direction:row;gap:.75rem;align-items:center;font-size:.775rem}.axp-weather-last-updated{text-align:center;font-size:.75rem;opacity:.7;margin-bottom:.5rem}.axp-weather-refresh-action{text-align:center}.axp-weather-refresh-button{background-color:#fff3;color:#fff;border:none;border-radius:4px;padding:.5rem 1rem;font-size:.875rem;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:.5rem}.axp-weather-refresh-button:hover{background-color:#ffffff4d;transform:translateY(-1px)}.axp-weather-refresh-button i{font-size:.875rem}@media(max-width:576px){.axp-weather-inner{padding:.8rem;gap:.4rem}.axp-weather-location-name{font-size:1.1rem;padding-inline:.25rem}.axp-weather-temperature{font-size:2.5rem}.axp-weather-temperature-unit{font-size:1.1rem}.axp-weather-weather-details{flex-direction:column;gap:.5rem}.axp-weather-forecast-items{flex-wrap:nowrap;overflow-x:auto;padding-bottom:.5rem;margin:0 -.4rem;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:thin;mask-image:linear-gradient(to right,#000 95%,#0000);-webkit-mask-image:linear-gradient(to right,rgb(0,0,0) 95%,rgba(0,0,0,0))}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:4px}.axp-weather-forecast-day{min-width:60px;flex:0 0 auto;padding:.4rem .6rem}.axp-weather-forecast-day-name{font-size:.7rem}.axp-weather-forecast-icon{padding:.3rem;height:1.6rem}.axp-weather-forecast-temps{font-size:.7rem}.axp-weather-scroll-indicator{display:block}}:host-context(.theme-dark){--glass-bg: rgba(0, 0, 0, .3);--glass-border: rgba(255, 255, 255, .1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5045
|
+
], viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Weather Widget Component Template -->\n<div class=\"axp-weather-container\" #containerElement>\n <!-- Loading indicator -->\n @if (isLoading()) {\n <div class=\"axp-weather-loading-overlay\">\n <div class=\"axp-weather-loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading' | translate | async }}</span>\n </div>\n </div>\n }\n\n <!-- Error message -->\n @if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-solid fa-exclamation-triangle\"\n [title]=\"'@dashboard:weather.error.title'\"\n [description]=\"errorMessage()\"\n >\n <button slot=\"actions\" class=\"axp-weather-retry-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.retry' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n\n <!-- Weather content - only show when we have data -->\n @if (weatherData()) {\n <!-- Background decorations based on weather condition -->\n <div class=\"axp-weather-background-decorations\">\n <div class=\"axp-weather-decoration\" [ngClass]=\"weatherData()?.current?.condition?.toLowerCase()\"></div>\n <div class=\"axp-weather-gradient-overlay\"></div>\n </div>\n\n <div class=\"axp-weather-inner\">\n <!-- Location information section -->\n <div class=\"axp-weather-location-info\">\n <div class=\"axp-weather-location-icon\">\n <i class=\"fa-solid fa-location-dot\"></i>\n </div>\n <div class=\"axp-weather-location-text\">\n <h2 class=\"axp-weather-location-name\">{{ city() }}</h2>\n </div>\n </div>\n\n <!-- Current weather conditions section -->\n <div class=\"axp-weather-current-weather\">\n <!-- Weather icon and condition name -->\n @if (showCurrentCondition()) {\n <div class=\"axp-weather-condition\">\n <div class=\"axp-weather-icon-wrapper\">\n <div class=\"axp-weather-icon\">\n <img [src]=\"getConditionIcon(weatherData()?.current?.condition || '')\" />\n </div>\n <div\n class=\"axp-weather-icon-glow\"\n [style.background-color]=\"getConditionColor(weatherData()?.current?.condition || '')\"\n ></div>\n </div>\n <div class=\"axp-weather-condition-name\">\n {{ getCurrentCondition() | translate | async }}\n </div>\n </div>\n }\n\n <!-- Temperature display -->\n @if (showTemperature()) {\n <div class=\"axp-weather-temperature\">\n <span class=\"axp-weather-temperature-value\">{{ getCurrentTemperature() }}</span>\n <span class=\"axp-weather-temperature-unit\">{{ getTemperatureUnit() | translate | async }}</span>\n </div>\n }\n </div>\n\n <!-- Weather details section (humidity and wind) -->\n @if (showHumidity() || showWind()) {\n <div class=\"axp-weather-details\">\n <!-- Humidity information -->\n @if (showHumidity()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-droplet\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.humidity' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">{{ getHumidity() }}%</div>\n </div>\n </div>\n }\n\n <!-- Wind speed information -->\n @if (showWind()) {\n <div class=\"axp-weather-detail-item\">\n <div class=\"axp-weather-detail-icon\">\n <i class=\"fa-solid fa-wind\"></i>\n </div>\n <div class=\"axp-weather-detail-info\">\n <div class=\"axp-weather-detail-label\">\n {{ '@dashboard:weather.wind' | translate | async }}\n </div>\n <div class=\"axp-weather-detail-value\">\n {{ getWindSpeed() }} {{ getWindSpeedUnit() | translate | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Weather forecast section -->\n @if (showForecast() && weatherData()?.forecast) {\n <div class=\"axp-weather-forecast\">\n <div class=\"axp-weather-forecast-header\">\n <h3 class=\"axp-weather-forecast-title\">\n <i class=\"fa-solid fa-calendar-days\"></i>\n <span class=\"ax-px-1\">{{ '@dashboard:weather.forecast' | translate | async }}</span>\n </h3>\n </div>\n <!-- Loading indicator for forecast -->\n <!-- @if (isForecastLoading()) {\n <div class=\"axp-weather-forecast-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>{{ '@dashboard:weather.loading-forecast' | translate | async }}</span>\n </div>\n } -->\n <!-- Scrollable forecast days display -->\n <div class=\"axp-weather-forecast-items\">\n @for (day of displayedForecast(); track day.day) {\n <div class=\"axp-weather-forecast-day\">\n <div class=\"axp-weather-forecast-day-name\">\n {{ getDayName(parseDate(day.date)) | translate | async }}\n </div>\n <div class=\"axp-weather-forecast-icon\" [title]=\"getConditionName(day.condition) | translate | async\">\n <img [src]=\"getConditionIcon(day.condition || '')\" />\n </div>\n <div class=\"axp-weather-forecast-temps\">\n <span class=\"axp-weather-forecast-low\">\n {{ temperatureUnit() === '\u00B0C' ? day.minTempC : day.minTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n <span class=\"axp-weather-forecast-high\">\n {{ temperatureUnit() === '\u00B0C' ? day.maxTempC : day.maxTempF\n }}{{ getTemperatureUnit() | translate | async }}\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Last updated timestamp -->\n <div class=\"axp-weather-last-updated\">\n <span>{{ '@dashboard:weather.last-updated' | translate | async }}: {{ getLastUpdated() }}</span>\n </div>\n\n <!-- Manual refresh button -->\n <div class=\"axp-weather-refresh-action\">\n <button\n class=\"axp-weather-refresh-button\"\n (click)=\"refreshWeather()\"\n [attr.aria-label]=\"'@dashboard:weather.refresh' | translate | async\"\n [title]=\"'@dashboard:weather.refresh' | translate | async\"\n >\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.refresh' | translate | async }}</span>\n </button>\n </div>\n </div>\n } @else if (!isLoading() && !hasError()) {\n <!-- No data state (not loading, no error) -->\n <axp-state-message\n icon=\"fa-solid fa-cloud-sun\"\n [title]=\"'@dashboard:weather.no-data.title'\"\n [description]=\"'@dashboard:weather.no-data.description'\"\n >\n <button slot=\"actions\" class=\"axp-weather-refresh-button\" (click)=\"refreshWeather()\">\n <i class=\"fa-solid fa-sync-alt\"></i>\n <span>{{ '@dashboard:weather.load-data' | translate | async }}</span>\n </button>\n </axp-state-message>\n }\n</div>\n", styles: [":host{display:block;width:100%;height:100%;--primary-gradient-start: #2196f3;--primary-gradient-end: #1976d2;--shadow-color: rgba(0, 0, 0, .2);--glass-bg: rgba(255, 255, 255, .15);--glass-border: rgba(255, 255, 255, .2);--text-primary: rgba(255, 255, 255, .95);--text-secondary: rgba(255, 255, 255, .75);--transition-speed: .3s}.axp-weather-container{width:100%;height:100%;overflow:hidden;position:relative;box-shadow:0 4px 8px #0000001a;min-height:300px}.axp-weather-loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#2c3e50d9;display:flex;justify-content:center;align-items:center;z-index:100}.axp-weather-loading-spinner{text-align:center}.axp-weather-loading-spinner i{font-size:2.5rem;color:#fff;margin-bottom:.5rem}.axp-weather-loading-spinner span{display:block;color:#fff;font-size:1rem}.axp-weather-background-decorations{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.axp-weather-decoration{position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:center}.axp-weather-gradient-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.axp-weather-inner{position:relative;z-index:2;height:100%;padding:1.5rem;display:flex;flex-direction:column;justify-content:space-between}.axp-weather-location-info{display:flex;align-items:center;margin-bottom:1.5rem}.axp-weather-location-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background-color:#fff3;border-radius:50%;margin-right:.75rem}.axp-weather-location-icon i{color:#fff}.axp-weather-location-name{margin:0;font-size:1.5rem;font-weight:500;text-shadow:1px 1px 3px rgba(0,0,0,.2);text-transform:capitalize}.axp-weather-current-weather{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem;flex-wrap:wrap}.axp-weather-condition{display:flex;flex-direction:column;align-items:center}.axp-weather-icon-wrapper{position:relative;margin-bottom:.5rem}.axp-weather-icon{position:relative;z-index:2;scale:2}.axp-weather-icon i{font-size:2.75rem;filter:drop-shadow(0 0 8px rgba(0,0,0,.3))}.axp-weather-icon-glow{position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);width:45px;height:45px;border-radius:50%;filter:blur(15px);opacity:.4}.axp-weather-condition-name{font-size:1.1rem;text-align:center;text-shadow:1px 1px 2px rgba(0,0,0,.2)}.axp-weather-temperature{display:flex;align-items:flex-start;text-shadow:1px 1px 3px rgba(0,0,0,.3)}.axp-weather-temperature-value{font-size:3.5rem;font-weight:500;line-height:1}.axp-weather-temperature-unit{font-size:1.5rem;margin-top:.25rem}.axp-weather-details{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));display:flex;flex-wrap:wrap;gap:1.5rem;margin-bottom:1rem;padding:1rem;border-radius:8px}.axp-weather-detail-item{display:flex;align-items:center;flex:1;min-width:120px}.axp-weather-detail-icon{width:40px;height:40px;border-radius:50%;background-color:#fff3;display:flex;align-items:center;justify-content:center;margin-right:.75rem}.axp-weather-detail-icon i{font-size:1.25rem}.axp-weather-detail-info{display:flex;padding-inline:.25rem;flex-direction:column}.axp-weather-detail-label{font-size:.875rem;margin-bottom:.25rem}.axp-weather-detail-value{font-size:1.125rem;font-weight:500}.axp-weather-forecast{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-darker-surface),var(--tw-bg-opacity, 1));margin-bottom:.5rem;border-radius:8px;padding:1rem}.axp-weather-forecast-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.axp-weather-forecast-title{margin:0;font-size:1.125rem;font-weight:500;display:flex;align-items:center}.axp-weather-forecast-title i{margin-right:.5rem;opacity:.8}.axp-weather-scroll-indicator{color:#fff9}.axp-weather-forecast-items{display:flex;overflow-x:auto;gap:.75rem;padding-bottom:.5rem}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#ffffff4d;border-radius:4px}.axp-weather-forecast-items::-webkit-scrollbar-track{background-color:#0000001a;border-radius:4px}.axp-weather-forecast-day{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-surface),var(--tw-bg-opacity, 1));min-width:90px;display:flex;flex-direction:column;align-items:center;padding:.75rem .5rem;border-radius:6px;transition:all .3s ease}.axp-weather-forecast-day:hover{transform:translateY(-2px)}.axp-weather-forecast-day-name{font-size:.875rem;margin-bottom:.5rem;font-weight:500}.axp-weather-forecast-icon{font-size:1.5rem;margin-bottom:.5rem}.axp-weather-forecast-icon i{filter:drop-shadow(0 0 5px rgba(0,0,0,.2))}.axp-weather-forecast-temps{display:flex;flex-direction:row;gap:.75rem;align-items:center;font-size:.775rem}.axp-weather-last-updated{text-align:center;font-size:.75rem;opacity:.7;margin-bottom:.5rem}.axp-weather-refresh-action{text-align:center}.axp-weather-refresh-button{background-color:#fff3;color:#fff;border:none;border-radius:4px;padding:.5rem 1rem;font-size:.875rem;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:.5rem}.axp-weather-refresh-button:hover{background-color:#ffffff4d;transform:translateY(-1px)}.axp-weather-refresh-button i{font-size:.875rem}@media(max-width:576px){.axp-weather-inner{padding:.8rem;gap:.4rem}.axp-weather-location-name{font-size:1.1rem;padding-inline:.25rem}.axp-weather-temperature{font-size:2.5rem}.axp-weather-temperature-unit{font-size:1.1rem}.axp-weather-weather-details{flex-direction:column;gap:.5rem}.axp-weather-forecast-items{flex-wrap:nowrap;overflow-x:auto;padding-bottom:.5rem;margin:0 -.4rem;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:thin;mask-image:linear-gradient(to right,#000 95%,#0000);-webkit-mask-image:linear-gradient(to right,rgb(0,0,0) 95%,rgba(0,0,0,0))}.axp-weather-forecast-items::-webkit-scrollbar{height:4px}.axp-weather-forecast-items::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:4px}.axp-weather-forecast-day{min-width:60px;flex:0 0 auto;padding:.4rem .6rem}.axp-weather-forecast-day-name{font-size:.7rem}.axp-weather-forecast-icon{padding:.3rem;height:1.6rem}.axp-weather-forecast-temps{font-size:.7rem}.axp-weather-scroll-indicator{display:block}}:host-context(.theme-dark){--glass-bg: rgba(0, 0, 0, .3);--glass-border: rgba(255, 255, 255, .1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: HttpClientModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5044
5046
|
}
|
|
5045
5047
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWeatherWidgetViewComponent, decorators: [{
|
|
5046
5048
|
type: Component,
|
|
@@ -6253,363 +6255,272 @@ const AXPStickyNoteWidget = {
|
|
|
6253
6255
|
},
|
|
6254
6256
|
};
|
|
6255
6257
|
|
|
6258
|
+
//#region ---- Imports ----
|
|
6259
|
+
/** Component key used when display is `page`. Register via {@link AXP_PAGE_COMPONENT_PROVIDER}. */
|
|
6260
|
+
const ENTITY_DASHBOARD_PAGE_COMPONENT_KEY = 'entity-dashboard-page';
|
|
6261
|
+
//#endregion
|
|
6262
|
+
//#region ---- Plugin ----
|
|
6263
|
+
/**
|
|
6264
|
+
* Dashboard plugin.
|
|
6265
|
+
* - When display is `page` (default), adds a page tab with {@link ENTITY_DASHBOARD_PAGE_COMPONENT_KEY}.
|
|
6266
|
+
* - When display is `section`, embeds the dashboard grid in the single layout.
|
|
6267
|
+
* - Adds a list action to open the entity dashboard page.
|
|
6268
|
+
*/
|
|
6269
|
+
const dashboardPlugin = {
|
|
6270
|
+
name: 'dashboard',
|
|
6271
|
+
order: 45,
|
|
6272
|
+
apply: (ctx, options) => {
|
|
6273
|
+
const opts = options ?? {};
|
|
6274
|
+
const displayMode = opts.display ?? 'page';
|
|
6275
|
+
const displayTitle = opts.title?.trim() || '@dashboard-management:dashboards.terms.dashboard';
|
|
6276
|
+
const entityType = `${ctx.entity.module}.${ctx.entity.name}`;
|
|
6277
|
+
//#region ---- Group & Property ----
|
|
6278
|
+
const groups = ctx.groups.list() ?? [];
|
|
6279
|
+
if (!groups.some((g) => g.id === 'dashboard')) {
|
|
6280
|
+
ctx.groups.add({ id: 'dashboard', title: displayTitle });
|
|
6281
|
+
}
|
|
6282
|
+
const props = ctx.properties.list();
|
|
6283
|
+
if (!props.some((p) => p.name === 'entityDashboard')) {
|
|
6284
|
+
ctx.properties.add({
|
|
6285
|
+
name: 'entityDashboard',
|
|
6286
|
+
title: displayTitle,
|
|
6287
|
+
groupId: 'dashboard',
|
|
6288
|
+
schema: {
|
|
6289
|
+
dataType: 'object',
|
|
6290
|
+
interface: {
|
|
6291
|
+
type: 'entity-dashboard',
|
|
6292
|
+
options: {
|
|
6293
|
+
entityType,
|
|
6294
|
+
entityId: '{{ context.eval("id") }}',
|
|
6295
|
+
subject: '{{ context.eval("title", { pipes: ["translate"] }) }}',
|
|
6296
|
+
},
|
|
6297
|
+
},
|
|
6298
|
+
},
|
|
6299
|
+
});
|
|
6300
|
+
}
|
|
6301
|
+
//#endregion
|
|
6302
|
+
//#region ---- Display Mode ----
|
|
6303
|
+
if (displayMode === 'section') {
|
|
6304
|
+
ctx.interfaces.master.single.update((single) => {
|
|
6305
|
+
const next = cloneLayoutArrays((single ?? { title: ctx.entity.title, sections: [], properties: [] }));
|
|
6306
|
+
ensureLayoutSection(next, { id: 'dashboard', title: displayTitle, order: 90 });
|
|
6307
|
+
ensureLayoutPropertyView(next, {
|
|
6308
|
+
name: 'entityDashboard',
|
|
6309
|
+
layout: {
|
|
6310
|
+
label: { visible: false },
|
|
6311
|
+
positions: { lg: { colSpan: 12, order: 6 } },
|
|
6312
|
+
},
|
|
6313
|
+
});
|
|
6314
|
+
return next;
|
|
6315
|
+
});
|
|
6316
|
+
}
|
|
6317
|
+
else {
|
|
6318
|
+
ctx.entity.pages ??= [];
|
|
6319
|
+
const pageExists = ctx.entity.pages.some((p) => p.componentKey === ENTITY_DASHBOARD_PAGE_COMPONENT_KEY);
|
|
6320
|
+
const pageOrder = resolveEntityPluginDetailPageOrder({ relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages }, 'dashboard', {
|
|
6321
|
+
componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,
|
|
6322
|
+
skipPage: pageExists ? { componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY } : undefined,
|
|
6323
|
+
});
|
|
6324
|
+
const page = {
|
|
6325
|
+
componentKey: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,
|
|
6326
|
+
title: displayTitle,
|
|
6327
|
+
icon: opts.icon ?? 'fa-light fa-gauge-high',
|
|
6328
|
+
layout: { order: pageOrder },
|
|
6329
|
+
};
|
|
6330
|
+
if (!pageExists) {
|
|
6331
|
+
ctx.entity.pages.push(page);
|
|
6332
|
+
}
|
|
6333
|
+
else {
|
|
6334
|
+
const pages = ctx.entity.pages;
|
|
6335
|
+
const index = pages.findIndex((p) => p.componentKey === ENTITY_DASHBOARD_PAGE_COMPONENT_KEY);
|
|
6336
|
+
if (index >= 0) {
|
|
6337
|
+
pages[index] = { ...pages[index], ...page };
|
|
6338
|
+
}
|
|
6339
|
+
}
|
|
6340
|
+
}
|
|
6341
|
+
//#endregion
|
|
6342
|
+
//#region ---- List Actions ----
|
|
6343
|
+
ensureListActions(ctx);
|
|
6344
|
+
ctx.interfaces.update((i) => {
|
|
6345
|
+
const actions = i.master.list.actions;
|
|
6346
|
+
const cmdName = 'open-entity-dashboard';
|
|
6347
|
+
if (!actionExists(actions, cmdName)) {
|
|
6348
|
+
actions.push({
|
|
6349
|
+
title: '@dashboard-management:dashboards.actions.open-entity-dashboard',
|
|
6350
|
+
command: {
|
|
6351
|
+
name: cmdName,
|
|
6352
|
+
options: {
|
|
6353
|
+
entityId: '{{ context.eval("id") }}',
|
|
6354
|
+
entityType,
|
|
6355
|
+
},
|
|
6356
|
+
},
|
|
6357
|
+
priority: 'secondary',
|
|
6358
|
+
type: 'dashboard',
|
|
6359
|
+
separated: true,
|
|
6360
|
+
scope: AXPEntityCommandScope.Individual,
|
|
6361
|
+
});
|
|
6362
|
+
}
|
|
6363
|
+
return i;
|
|
6364
|
+
});
|
|
6365
|
+
//#endregion
|
|
6366
|
+
ctx.entity.extensions ??= {};
|
|
6367
|
+
ctx.entity.extensions.dashboard = {
|
|
6368
|
+
entityType,
|
|
6369
|
+
display: displayMode,
|
|
6370
|
+
};
|
|
6371
|
+
},
|
|
6372
|
+
};
|
|
6256
6373
|
//#endregion
|
|
6257
|
-
//#region ---- Dashboard Management Widgets Provider ----
|
|
6258
|
-
const DASHBOARD_WIDGETS = [
|
|
6259
|
-
AXPShortcutWidget,
|
|
6260
|
-
AXPDonutChartWidget,
|
|
6261
|
-
AXPBarChartWidget,
|
|
6262
|
-
AXPLineChartWidget,
|
|
6263
|
-
AXPFunnelChartWidget,
|
|
6264
|
-
AXPHeatmapChartWidget,
|
|
6265
|
-
AXPKpiProgressWidget,
|
|
6266
|
-
AXPKpiSegmentedWidget,
|
|
6267
|
-
AXPKpiDetailsWidget,
|
|
6268
|
-
AXPKpiStatCardWidget,
|
|
6269
|
-
AXPGaugeChartWidget,
|
|
6270
|
-
AXPStickyNoteWidget,
|
|
6271
|
-
AXPMinimalWeatherWidget,
|
|
6272
|
-
AXPAdvancedWeatherWidget,
|
|
6273
|
-
AXPAnalogClockWidget,
|
|
6274
|
-
];
|
|
6275
|
-
class AXMDashboardManagementWidgetsProvider {
|
|
6276
|
-
getWidgets() {
|
|
6277
|
-
return DASHBOARD_WIDGETS;
|
|
6278
|
-
}
|
|
6279
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6280
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider }); }
|
|
6281
|
-
}
|
|
6282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, decorators: [{
|
|
6283
|
-
type: Injectable
|
|
6284
|
-
}] });
|
|
6285
6374
|
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
6375
|
+
//#region ---- Imports ----
|
|
6376
|
+
//#endregion
|
|
6377
|
+
//#region ---- Builders ----
|
|
6378
|
+
function buildUserScopeRef(userId) {
|
|
6379
|
+
return { userId: userId.trim() };
|
|
6380
|
+
}
|
|
6381
|
+
function buildTenantScopeRef(tenantId, roleIds) {
|
|
6289
6382
|
return {
|
|
6290
|
-
|
|
6291
|
-
|
|
6292
|
-
data: { rootLayout: true },
|
|
6293
|
-
loadComponent: () => {
|
|
6294
|
-
return config.viewers.root();
|
|
6295
|
-
},
|
|
6296
|
-
children: [
|
|
6297
|
-
{
|
|
6298
|
-
path: 'dashboard',
|
|
6299
|
-
loadComponent: () => Promise.resolve().then(function () { return homeDashboard; }).then((c) => c.AXMDashboardHomeComponent),
|
|
6300
|
-
},
|
|
6301
|
-
],
|
|
6383
|
+
tenantId: tenantId.trim(),
|
|
6384
|
+
roleIds: [...new Set(roleIds.map((id) => id.trim()).filter(Boolean))],
|
|
6302
6385
|
};
|
|
6303
6386
|
}
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6387
|
+
function buildEntityScopeRef(entityType, entityId) {
|
|
6388
|
+
return {
|
|
6389
|
+
entityType: entityType.trim(),
|
|
6390
|
+
entityId: entityId.trim(),
|
|
6391
|
+
};
|
|
6392
|
+
}
|
|
6393
|
+
//#endregion
|
|
6394
|
+
//#region ---- Readers ----
|
|
6395
|
+
function readScopeUserId(scopeRef) {
|
|
6396
|
+
const userId = get(scopeRef, 'userId');
|
|
6397
|
+
return isString(userId) && userId.trim() ? userId.trim() : undefined;
|
|
6398
|
+
}
|
|
6399
|
+
function readScopeTenantId(scopeRef) {
|
|
6400
|
+
const tenantId = get(scopeRef, 'tenantId');
|
|
6401
|
+
return isString(tenantId) && tenantId.trim() ? tenantId.trim() : undefined;
|
|
6402
|
+
}
|
|
6403
|
+
function readScopeRoleIds(scopeRef) {
|
|
6404
|
+
const roleIds = get(scopeRef, 'roleIds');
|
|
6405
|
+
if (!isArray(roleIds)) {
|
|
6406
|
+
return [];
|
|
6407
|
+
}
|
|
6408
|
+
return roleIds.filter((id) => isString(id) && id.trim().length > 0);
|
|
6409
|
+
}
|
|
6410
|
+
function readScopeEntityRef(scopeRef) {
|
|
6411
|
+
const entityId = get(scopeRef, 'entityId');
|
|
6412
|
+
const entityType = get(scopeRef, 'entityType');
|
|
6413
|
+
if (!isString(entityId) || !entityId.trim() || !isString(entityType) || !entityType.trim()) {
|
|
6414
|
+
return undefined;
|
|
6415
|
+
}
|
|
6416
|
+
return { entityId: entityId.trim(), entityType: entityType.trim() };
|
|
6417
|
+
}
|
|
6418
|
+
//#endregion
|
|
6419
|
+
//#region ---- Normalization ----
|
|
6420
|
+
/**
|
|
6421
|
+
* Ensures {@link scopeRef} matches {@link scope} and strips incompatible keys.
|
|
6422
|
+
*/
|
|
6423
|
+
function normalizeDashboardScopeRef(scope, scopeRef, fallback) {
|
|
6424
|
+
switch (scope) {
|
|
6425
|
+
case 'U':
|
|
6426
|
+
return buildUserScopeRef(readScopeUserId(scopeRef) ?? fallback?.userId ?? '');
|
|
6427
|
+
case 'T':
|
|
6428
|
+
return buildTenantScopeRef(readScopeTenantId(scopeRef) ?? fallback?.tenantId ?? '', readScopeRoleIds(scopeRef).length > 0
|
|
6429
|
+
? readScopeRoleIds(scopeRef)
|
|
6430
|
+
: castArray(fallback?.roleIds ?? []));
|
|
6431
|
+
case 'E':
|
|
6432
|
+
return buildEntityScopeRef(readScopeEntityRef(scopeRef)?.entityType ?? fallback?.entityType ?? '', readScopeEntityRef(scopeRef)?.entityId ?? fallback?.entityId ?? '');
|
|
6433
|
+
default:
|
|
6434
|
+
return buildUserScopeRef(fallback?.userId ?? '');
|
|
6435
|
+
}
|
|
6436
|
+
}
|
|
6437
|
+
//#endregion
|
|
6438
|
+
|
|
6439
|
+
//#region ---- Imports ----
|
|
6440
|
+
//#endregion
|
|
6441
|
+
//#region ---- Service ----
|
|
6442
|
+
/**
|
|
6443
|
+
* Resolves or creates entity-scoped dashboards (`scope: E`).
|
|
6444
|
+
*/
|
|
6445
|
+
class AXMEntityDashboardService {
|
|
6446
|
+
constructor() {
|
|
6447
|
+
//#region ---- Services & Dependencies ----
|
|
6448
|
+
this.entityService = inject(AXPEntityService);
|
|
6449
|
+
this.dashboardData = this.entityService
|
|
6450
|
+
.withEntity(RootConfig.module.name, RootConfig.entities.dashboard.name)
|
|
6451
|
+
.data();
|
|
6452
|
+
}
|
|
6453
|
+
//#endregion
|
|
6454
|
+
//#region ---- Public Methods ----
|
|
6455
|
+
/**
|
|
6456
|
+
* Finds the dashboard bound to an entity record, if one exists.
|
|
6457
|
+
*/
|
|
6458
|
+
async findEntityDashboard(entityType, entityId) {
|
|
6459
|
+
const result = await this.dashboardData.query({
|
|
6460
|
+
skip: 0,
|
|
6461
|
+
take: 1,
|
|
6462
|
+
filter: {
|
|
6463
|
+
logic: 'and',
|
|
6464
|
+
filters: [
|
|
6465
|
+
{ field: 'scope', operator: { type: 'equal' }, value: 'E' },
|
|
6466
|
+
{ field: 'scopeRef.entityType', operator: { type: 'equal' }, value: entityType },
|
|
6467
|
+
{ field: 'scopeRef.entityId', operator: { type: 'equal' }, value: entityId },
|
|
6318
6468
|
],
|
|
6319
6469
|
},
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
6326
|
-
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
|
|
6330
|
-
|
|
6331
|
-
|
|
6332
|
-
|
|
6333
|
-
|
|
6334
|
-
|
|
6335
|
-
|
|
6336
|
-
|
|
6337
|
-
|
|
6338
|
-
|
|
6339
|
-
|
|
6340
|
-
|
|
6341
|
-
|
|
6342
|
-
|
|
6343
|
-
|
|
6344
|
-
|
|
6345
|
-
|
|
6346
|
-
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6470
|
+
});
|
|
6471
|
+
return result.items?.[0] ?? null;
|
|
6472
|
+
}
|
|
6473
|
+
/**
|
|
6474
|
+
* Returns the entity dashboard, creating an empty one when missing.
|
|
6475
|
+
*/
|
|
6476
|
+
async ensureEntityDashboard(entityType, entityId, title) {
|
|
6477
|
+
const existing = await this.findEntityDashboard(entityType, entityId);
|
|
6478
|
+
if (existing) {
|
|
6479
|
+
return existing;
|
|
6480
|
+
}
|
|
6481
|
+
const dashboardTitle = title ?? createMultiLanguageString('Dashboard');
|
|
6482
|
+
const createdId = await this.dashboardData.create({
|
|
6483
|
+
title: dashboardTitle,
|
|
6484
|
+
description: '',
|
|
6485
|
+
widgets: [],
|
|
6486
|
+
scope: 'E',
|
|
6487
|
+
scopeRef: buildEntityScopeRef(entityType, entityId),
|
|
6488
|
+
locked: false,
|
|
6489
|
+
isArchived: false,
|
|
6490
|
+
});
|
|
6491
|
+
const created = await this.dashboardData.byKey(createdId);
|
|
6492
|
+
if (!created) {
|
|
6493
|
+
throw new Error('Failed to create entity dashboard');
|
|
6494
|
+
}
|
|
6495
|
+
return created;
|
|
6496
|
+
}
|
|
6497
|
+
/**
|
|
6498
|
+
* Resolves entity type/id from a host entity detail context.
|
|
6499
|
+
*/
|
|
6500
|
+
resolveEntityRefFromContext(moduleName, entityName, context) {
|
|
6501
|
+
const entityId = get(context, 'id');
|
|
6502
|
+
if (!moduleName || !entityName || typeof entityId !== 'string' || !entityId.trim()) {
|
|
6503
|
+
return null;
|
|
6504
|
+
}
|
|
6505
|
+
return {
|
|
6506
|
+
entityType: `${moduleName}.${entityName}`,
|
|
6507
|
+
entityId: entityId.trim(),
|
|
6508
|
+
};
|
|
6509
|
+
}
|
|
6510
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6511
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardService, providedIn: 'root' }); }
|
|
6350
6512
|
}
|
|
6351
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type:
|
|
6352
|
-
type:
|
|
6353
|
-
args: [{
|
|
6354
|
-
imports: [
|
|
6355
|
-
AXPWidgetCoreModule,
|
|
6356
|
-
// Entity Modules
|
|
6357
|
-
],
|
|
6358
|
-
providers: [
|
|
6359
|
-
{ provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },
|
|
6360
|
-
{
|
|
6361
|
-
provide: AXP_HOME_PAGES,
|
|
6362
|
-
multi: true,
|
|
6363
|
-
useFactory: () => [
|
|
6364
|
-
{
|
|
6365
|
-
key: 'dashboard',
|
|
6366
|
-
title: 'Dashboard',
|
|
6367
|
-
route: createAppRoute(),
|
|
6368
|
-
},
|
|
6369
|
-
],
|
|
6370
|
-
},
|
|
6371
|
-
// Module-specific providers (not part of manifest system)
|
|
6372
|
-
AXPWidgetsModule,
|
|
6373
|
-
{
|
|
6374
|
-
provide: AXP_HOME_PAGE_DEFAULT_KEY,
|
|
6375
|
-
useValue: 'dashboard',
|
|
6376
|
-
},
|
|
6377
|
-
// Module Manifest Provider
|
|
6378
|
-
{
|
|
6379
|
-
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
6380
|
-
useValue: DashboardManagementManifest,
|
|
6381
|
-
multi: true,
|
|
6382
|
-
},
|
|
6383
|
-
// Provider references (now using tokens)
|
|
6384
|
-
{
|
|
6385
|
-
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
6386
|
-
useClass: AXMPermissionDefinitionProvider,
|
|
6387
|
-
multi: true,
|
|
6388
|
-
},
|
|
6389
|
-
{
|
|
6390
|
-
provide: AXP_MENU_PROVIDER,
|
|
6391
|
-
useClass: AXMMenuProvider,
|
|
6392
|
-
multi: true,
|
|
6393
|
-
},
|
|
6394
|
-
{
|
|
6395
|
-
provide: AXP_ENTITY_DEFINITION_LOADER,
|
|
6396
|
-
useClass: AXMEntityProvider,
|
|
6397
|
-
multi: true,
|
|
6398
|
-
},
|
|
6399
|
-
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-modules-dashboard-management-index-DvY9N8FF.mjs').then((m) => m.AXMDashboardLayoutPageComponentProvider)),
|
|
6400
|
-
],
|
|
6401
|
-
}]
|
|
6513
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardService, decorators: [{
|
|
6514
|
+
type: Injectable,
|
|
6515
|
+
args: [{ providedIn: 'root' }]
|
|
6402
6516
|
}] });
|
|
6403
6517
|
|
|
6404
|
-
async function dashboardFactory() {
|
|
6405
|
-
const entityDef = {
|
|
6406
|
-
module: RootConfig.module.name,
|
|
6407
|
-
name: RootConfig.entities.dashboard.name,
|
|
6408
|
-
title: RootConfig.entities.dashboard.title,
|
|
6409
|
-
icon: RootConfig.entities.dashboard.icon,
|
|
6410
|
-
plugins: [{ name: 'category' }, { name: 'archive' }],
|
|
6411
|
-
pages: [
|
|
6412
|
-
{
|
|
6413
|
-
componentKey: DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY,
|
|
6414
|
-
title: '@dashboard-management:dashboards.entities.dashboard.pages.layout.title',
|
|
6415
|
-
description: '@dashboard-management:dashboards.entities.dashboard.pages.layout.description',
|
|
6416
|
-
icon: 'fa-light fa-table-layout',
|
|
6417
|
-
layout: { order: 1, position: 'after' },
|
|
6418
|
-
},
|
|
6419
|
-
],
|
|
6420
|
-
formats: {
|
|
6421
|
-
individual: RootConfig.entities.dashboard.title,
|
|
6422
|
-
plural: RootConfig.entities.dashboard.titlePlural,
|
|
6423
|
-
displayName: '@general:terms.interface.configuration',
|
|
6424
|
-
searchResult: {
|
|
6425
|
-
title: '{{ title }}',
|
|
6426
|
-
description: RootConfig.module.title,
|
|
6427
|
-
},
|
|
6428
|
-
},
|
|
6429
|
-
relatedEntities: [],
|
|
6430
|
-
groups: [
|
|
6431
|
-
{
|
|
6432
|
-
id: 'section',
|
|
6433
|
-
title: RootConfig.entities.dashboard.title,
|
|
6434
|
-
},
|
|
6435
|
-
{
|
|
6436
|
-
id: 'access',
|
|
6437
|
-
title: '@dashboard-management:dashboards.entities.dashboard.groups.access.title',
|
|
6438
|
-
},
|
|
6439
|
-
],
|
|
6440
|
-
properties: [
|
|
6441
|
-
{
|
|
6442
|
-
name: 'id',
|
|
6443
|
-
title: 'ID',
|
|
6444
|
-
groupId: 'section',
|
|
6445
|
-
schema: { dataType: 'uuid', visible: false, nullable: false, readonly: true, unique: { enabled: true } },
|
|
6446
|
-
},
|
|
6447
|
-
{
|
|
6448
|
-
name: 'title',
|
|
6449
|
-
title: '@general:terms.common.title',
|
|
6450
|
-
groupId: 'section',
|
|
6451
|
-
options: {
|
|
6452
|
-
sort: {
|
|
6453
|
-
enabled: true,
|
|
6454
|
-
},
|
|
6455
|
-
filter: {
|
|
6456
|
-
advance: {
|
|
6457
|
-
enabled: true,
|
|
6458
|
-
},
|
|
6459
|
-
inline: {
|
|
6460
|
-
enabled: true,
|
|
6461
|
-
},
|
|
6462
|
-
},
|
|
6463
|
-
},
|
|
6464
|
-
schema: {
|
|
6465
|
-
dataType: 'string',
|
|
6466
|
-
interface: {
|
|
6467
|
-
type: AXPWidgetsList.Editors.TextBox,
|
|
6468
|
-
options: {
|
|
6469
|
-
multiLanguage: true,
|
|
6470
|
-
placeholder: '@general:terms.common.title',
|
|
6471
|
-
},
|
|
6472
|
-
},
|
|
6473
|
-
},
|
|
6474
|
-
validations: [
|
|
6475
|
-
{
|
|
6476
|
-
rule: 'required',
|
|
6477
|
-
},
|
|
6478
|
-
],
|
|
6479
|
-
},
|
|
6480
|
-
{
|
|
6481
|
-
name: 'description',
|
|
6482
|
-
title: '@dashboard-management:dashboards.entities.dashboard.fields.description.title',
|
|
6483
|
-
groupId: 'section',
|
|
6484
|
-
options: {
|
|
6485
|
-
sort: {
|
|
6486
|
-
enabled: false,
|
|
6487
|
-
},
|
|
6488
|
-
filter: {
|
|
6489
|
-
advance: {
|
|
6490
|
-
enabled: false,
|
|
6491
|
-
},
|
|
6492
|
-
inline: {
|
|
6493
|
-
enabled: false,
|
|
6494
|
-
},
|
|
6495
|
-
},
|
|
6496
|
-
},
|
|
6497
|
-
schema: {
|
|
6498
|
-
dataType: 'string',
|
|
6499
|
-
interface: {
|
|
6500
|
-
type: AXPWidgetsList.Editors.LargeTextBox,
|
|
6501
|
-
options: {
|
|
6502
|
-
rows: 3,
|
|
6503
|
-
multiLanguage: true,
|
|
6504
|
-
placeholder: '@general:terms.common.description',
|
|
6505
|
-
},
|
|
6506
|
-
},
|
|
6507
|
-
},
|
|
6508
|
-
},
|
|
6509
|
-
{
|
|
6510
|
-
name: 'scope',
|
|
6511
|
-
title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.title',
|
|
6512
|
-
groupId: 'access',
|
|
6513
|
-
options: {
|
|
6514
|
-
sort: { enabled: true },
|
|
6515
|
-
filter: { advance: { enabled: true }, inline: { enabled: true } },
|
|
6516
|
-
},
|
|
6517
|
-
schema: {
|
|
6518
|
-
dataType: 'string',
|
|
6519
|
-
visible: false,
|
|
6520
|
-
interface: {
|
|
6521
|
-
type: AXPWidgetsList.Editors.SelectBox,
|
|
6522
|
-
options: {
|
|
6523
|
-
valueField: 'id',
|
|
6524
|
-
dataSource: [
|
|
6525
|
-
{
|
|
6526
|
-
id: 'T',
|
|
6527
|
-
title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.tenant',
|
|
6528
|
-
},
|
|
6529
|
-
{
|
|
6530
|
-
id: 'U',
|
|
6531
|
-
title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.personal',
|
|
6532
|
-
},
|
|
6533
|
-
],
|
|
6534
|
-
},
|
|
6535
|
-
},
|
|
6536
|
-
},
|
|
6537
|
-
},
|
|
6538
|
-
{
|
|
6539
|
-
name: 'roleIds',
|
|
6540
|
-
title: '@dashboard:roles',
|
|
6541
|
-
groupId: 'access',
|
|
6542
|
-
schema: {
|
|
6543
|
-
dataType: 'object',
|
|
6544
|
-
visible: `{{ !context.eval("scope") || context.eval("scope") === "T" }}`,
|
|
6545
|
-
interface: {
|
|
6546
|
-
type: AXPWidgetsList.Editors.LookupBox,
|
|
6547
|
-
options: {
|
|
6548
|
-
entity: 'SecurityManagement.Role',
|
|
6549
|
-
multiple: true,
|
|
6550
|
-
look: 'select',
|
|
6551
|
-
},
|
|
6552
|
-
},
|
|
6553
|
-
},
|
|
6554
|
-
},
|
|
6555
|
-
],
|
|
6556
|
-
columns: [{ name: 'title' }, { name: 'description' }],
|
|
6557
|
-
interfaces: {
|
|
6558
|
-
master: {
|
|
6559
|
-
create: {
|
|
6560
|
-
sections: [{ id: 'section' }, { id: 'access' }],
|
|
6561
|
-
properties: [
|
|
6562
|
-
{ name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
|
|
6563
|
-
{ name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
|
|
6564
|
-
{ name: 'roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
|
|
6565
|
-
],
|
|
6566
|
-
},
|
|
6567
|
-
update: {
|
|
6568
|
-
sections: [{ id: 'section' }, { id: 'access' }],
|
|
6569
|
-
properties: [
|
|
6570
|
-
{ name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
|
|
6571
|
-
{ name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
|
|
6572
|
-
{ name: 'roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
|
|
6573
|
-
],
|
|
6574
|
-
},
|
|
6575
|
-
single: {
|
|
6576
|
-
title: '{{title}}',
|
|
6577
|
-
sections: [{ id: 'section', layout: { positions: { lg: { colSpan: 12 } } } }, { id: 'access' }],
|
|
6578
|
-
properties: [
|
|
6579
|
-
{ name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
|
|
6580
|
-
{ name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
|
|
6581
|
-
{ name: 'roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
|
|
6582
|
-
],
|
|
6583
|
-
actions: [...entityMasterRecordActions()],
|
|
6584
|
-
},
|
|
6585
|
-
list: {
|
|
6586
|
-
actions: [...entityMasterCrudActions()],
|
|
6587
|
-
views: [
|
|
6588
|
-
createQueryView('tenant', '@dashboard-management:dashboards.entities.dashboard.views.tenant', true, {
|
|
6589
|
-
sorts: [{ name: 'title', dir: 'asc' }],
|
|
6590
|
-
conditions: [{ name: 'scope', operator: { type: 'equal' }, value: 'T' }],
|
|
6591
|
-
}),
|
|
6592
|
-
],
|
|
6593
|
-
},
|
|
6594
|
-
},
|
|
6595
|
-
},
|
|
6596
|
-
};
|
|
6597
|
-
return entityDef;
|
|
6598
|
-
}
|
|
6599
|
-
|
|
6600
|
-
//#endregion
|
|
6601
|
-
|
|
6602
|
-
var index = /*#__PURE__*/Object.freeze({
|
|
6603
|
-
__proto__: null,
|
|
6604
|
-
dashboardFactory: dashboardFactory
|
|
6605
|
-
});
|
|
6606
|
-
|
|
6607
|
-
// Entity Services
|
|
6608
|
-
// Entity Modules
|
|
6609
|
-
|
|
6610
6518
|
/** When true (provided on the dashboard layout entity tab), the store skips the default list query effect. */
|
|
6611
6519
|
const DASHBOARD_LAYOUT_ENTITY_MODE = new InjectionToken('DASHBOARD_LAYOUT_ENTITY_MODE');
|
|
6612
6520
|
|
|
6521
|
+
/** When true (entity dashboard plugin), layout and widgets are view-only. */
|
|
6522
|
+
const DASHBOARD_READONLY_MODE = new InjectionToken('DASHBOARD_READONLY_MODE');
|
|
6523
|
+
|
|
6613
6524
|
class AXMConfigurationPopup extends AXBasePageComponent {
|
|
6614
6525
|
constructor() {
|
|
6615
6526
|
super(...arguments);
|
|
@@ -6676,7 +6587,9 @@ class AXMDashboardPopupService {
|
|
|
6676
6587
|
this.translateService = inject(AXTranslationService);
|
|
6677
6588
|
this.layoutBuilder = inject(AXPLayoutBuilderService);
|
|
6678
6589
|
this.entityService = inject(AXPEntityService);
|
|
6679
|
-
this.roleService = this.entityService
|
|
6590
|
+
this.roleService = this.entityService
|
|
6591
|
+
.withEntity(RootConfig$1.module.name, RootConfig$1.entities.roles.name)
|
|
6592
|
+
.data();
|
|
6680
6593
|
this.sessionService = inject(AXPSessionService);
|
|
6681
6594
|
}
|
|
6682
6595
|
async generateDashboardLayout(data, isAdmin, dialogOptions) {
|
|
@@ -6696,7 +6609,7 @@ class AXMDashboardPopupService {
|
|
|
6696
6609
|
.setContext({
|
|
6697
6610
|
title: this.normalizeTitleForFormContext(data?.title),
|
|
6698
6611
|
description: this.normalizeDescriptionForFormContext(data?.description),
|
|
6699
|
-
selectedRoleIds: data?.
|
|
6612
|
+
selectedRoleIds: readScopeRoleIds(data?.scopeRef),
|
|
6700
6613
|
locked: data?.locked ?? false,
|
|
6701
6614
|
isAdmin,
|
|
6702
6615
|
})
|
|
@@ -6749,14 +6662,19 @@ class AXMDashboardPopupService {
|
|
|
6749
6662
|
}
|
|
6750
6663
|
const formData = context;
|
|
6751
6664
|
const now = new Date();
|
|
6752
|
-
const userId = this.sessionService.user?.id;
|
|
6665
|
+
const userId = this.sessionService.user?.id ?? '';
|
|
6666
|
+
const tenantId = this.sessionService.tenant?.id ?? '';
|
|
6667
|
+
const scope = (data?.scope ?? (isAdmin ? 'T' : 'U'));
|
|
6668
|
+
const roleIds = showRoleField
|
|
6669
|
+
? (formData['selectedRoleIds'] ?? [])
|
|
6670
|
+
: readScopeRoleIds(data?.scopeRef);
|
|
6753
6671
|
return {
|
|
6754
6672
|
...data,
|
|
6755
6673
|
title: this.normalizeTitleFromFormSubmit(formData['title']),
|
|
6756
6674
|
description: this.normalizeDescriptionFromFormSubmit(formData['description']),
|
|
6757
|
-
|
|
6675
|
+
scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId, roleIds) : buildUserScopeRef(userId),
|
|
6758
6676
|
locked: this.normalizeBooleanInput(formData['locked'], data?.locked ?? false),
|
|
6759
|
-
scope
|
|
6677
|
+
scope,
|
|
6760
6678
|
createdBy: userId,
|
|
6761
6679
|
createdAt: now,
|
|
6762
6680
|
updatedBy: userId,
|
|
@@ -6852,6 +6770,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
6852
6770
|
}] });
|
|
6853
6771
|
|
|
6854
6772
|
//#region ---- Imports ----
|
|
6773
|
+
const readTenantId = (sessionService) => {
|
|
6774
|
+
const tenantId = sessionService.tenant?.id;
|
|
6775
|
+
return typeof tenantId === 'string' && tenantId.trim() ? tenantId.trim() : undefined;
|
|
6776
|
+
};
|
|
6855
6777
|
//#endregion
|
|
6856
6778
|
//#region ---- Utility Functions ----
|
|
6857
6779
|
/** Width threshold for switching between lg (12 col) and md (6 col) breakpoints */
|
|
@@ -6912,6 +6834,7 @@ const createInitialState = () => ({
|
|
|
6912
6834
|
currentBreakpoint: getBreakpointFromWidth(),
|
|
6913
6835
|
isBreakpointTransitioning: false,
|
|
6914
6836
|
entityDetailLayoutLock: false,
|
|
6837
|
+
readonly: false,
|
|
6915
6838
|
});
|
|
6916
6839
|
/**
|
|
6917
6840
|
* Migrates a widget config from the old flat format to the new per-breakpoint format.
|
|
@@ -6946,8 +6869,7 @@ const modelToDashboardLayout = (model) => ({
|
|
|
6946
6869
|
title: model.title,
|
|
6947
6870
|
description: model.description,
|
|
6948
6871
|
widgets: (model.widgets || []).map((widget) => migrateWidgetConfig(widget)),
|
|
6949
|
-
createdBy: model.
|
|
6950
|
-
roleIds: model.roleIds,
|
|
6872
|
+
createdBy: readScopeUserId(model.scopeRef) ?? model.auditInfo?.created?.by?.id,
|
|
6951
6873
|
isArchived: model.isArchived,
|
|
6952
6874
|
archivedAt: model.archivedAt,
|
|
6953
6875
|
locked: model.locked,
|
|
@@ -6955,6 +6877,10 @@ const modelToDashboardLayout = (model) => ({
|
|
|
6955
6877
|
updatedAt: model.auditInfo?.updated?.at,
|
|
6956
6878
|
updatedBy: model.auditInfo?.updated?.by?.id,
|
|
6957
6879
|
scope: model.scope,
|
|
6880
|
+
scopeRef: normalizeDashboardScopeRef(model.scope, model.scopeRef, {
|
|
6881
|
+
userId: readScopeUserId(model.scopeRef) ?? model.auditInfo?.created?.by?.id,
|
|
6882
|
+
roleIds: readScopeRoleIds(model.scopeRef),
|
|
6883
|
+
}),
|
|
6958
6884
|
categoryIds: model.categoryIds,
|
|
6959
6885
|
});
|
|
6960
6886
|
/**
|
|
@@ -6965,12 +6891,15 @@ const dashboardLayoutToModel = (layout) => ({
|
|
|
6965
6891
|
title: layout.title,
|
|
6966
6892
|
description: layout.description ?? '',
|
|
6967
6893
|
widgets: layout.widgets,
|
|
6968
|
-
userId: layout.createdBy,
|
|
6969
|
-
roleIds: layout.roleIds,
|
|
6970
6894
|
isArchived: layout.isArchived,
|
|
6971
6895
|
archivedAt: layout.archivedAt,
|
|
6972
6896
|
locked: layout.locked,
|
|
6973
6897
|
categoryIds: layout.categoryIds,
|
|
6898
|
+
scope: layout.scope,
|
|
6899
|
+
scopeRef: normalizeDashboardScopeRef(layout.scope, layout.scopeRef, {
|
|
6900
|
+
userId: layout.createdBy,
|
|
6901
|
+
roleIds: readScopeRoleIds(layout.scopeRef),
|
|
6902
|
+
}),
|
|
6974
6903
|
auditInfo: {
|
|
6975
6904
|
created: layout.createdAt
|
|
6976
6905
|
? { at: layout.createdAt, by: layout.createdBy ? { id: layout.createdBy, type: 'user' } : undefined }
|
|
@@ -6979,7 +6908,6 @@ const dashboardLayoutToModel = (layout) => ({
|
|
|
6979
6908
|
? { at: layout.updatedAt, by: layout.updatedBy ? { id: layout.updatedBy, type: 'user' } : undefined }
|
|
6980
6909
|
: undefined,
|
|
6981
6910
|
},
|
|
6982
|
-
scope: layout.scope,
|
|
6983
6911
|
});
|
|
6984
6912
|
/**
|
|
6985
6913
|
* Safely reads the current user id from the session service.
|
|
@@ -7016,8 +6944,8 @@ const extractUserRoleIds = (user) => {
|
|
|
7016
6944
|
const hasMatchingRole = (dashboard, userRoleIds) => {
|
|
7017
6945
|
if (userRoleIds.length === 0)
|
|
7018
6946
|
return false;
|
|
7019
|
-
const roleIds = dashboard.
|
|
7020
|
-
return
|
|
6947
|
+
const roleIds = readScopeRoleIds(dashboard.scopeRef);
|
|
6948
|
+
return roleIds.length > 0 && userRoleIds.some((id) => roleIds.includes(id));
|
|
7021
6949
|
};
|
|
7022
6950
|
/**
|
|
7023
6951
|
* Determines whether a personal dashboard belongs to the signed-in user.
|
|
@@ -7038,10 +6966,12 @@ const isTenantDashboardVisibleForUser = (dashboard, userRoleIds) => {
|
|
|
7038
6966
|
* Computes effective layout options based on device, lock, admin and role restrictions.
|
|
7039
6967
|
* Always derives drag/resize state from the dashboard model — never from base options.
|
|
7040
6968
|
*/
|
|
7041
|
-
const deriveLayoutOptions = (baseOptions, dashboard, isAdmin, isDesktop) => {
|
|
6969
|
+
const deriveLayoutOptions = (baseOptions, dashboard, isAdmin, isDesktop, readonly) => {
|
|
7042
6970
|
const { disableDrag: _dd, disableResize: _dr, ...cleanBase } = baseOptions;
|
|
7043
6971
|
if (!dashboard)
|
|
7044
6972
|
return cleanBase;
|
|
6973
|
+
if (readonly)
|
|
6974
|
+
return { ...cleanBase, disableDrag: true, disableResize: true };
|
|
7045
6975
|
if (isAdmin)
|
|
7046
6976
|
return cleanBase;
|
|
7047
6977
|
if (dashboard.locked === true || dashboard.scope === 'T') {
|
|
@@ -7052,9 +6982,11 @@ const deriveLayoutOptions = (baseOptions, dashboard, isAdmin, isDesktop) => {
|
|
|
7052
6982
|
/**
|
|
7053
6983
|
* Checks if a widget is locked for the current user based on dashboard and role context.
|
|
7054
6984
|
*/
|
|
7055
|
-
const isWidgetLockedForUser = (dashboard, isAdmin, userRoleIds) => {
|
|
6985
|
+
const isWidgetLockedForUser = (dashboard, isAdmin, userRoleIds, readonly) => {
|
|
7056
6986
|
if (!dashboard)
|
|
7057
6987
|
return false;
|
|
6988
|
+
if (readonly)
|
|
6989
|
+
return true;
|
|
7058
6990
|
if (isAdmin)
|
|
7059
6991
|
return false;
|
|
7060
6992
|
if (dashboard.locked === true)
|
|
@@ -7064,9 +6996,11 @@ const isWidgetLockedForUser = (dashboard, isAdmin, userRoleIds) => {
|
|
|
7064
6996
|
/**
|
|
7065
6997
|
* Determines if a widget can be configured by the current user.
|
|
7066
6998
|
*/
|
|
7067
|
-
const canConfigureWidgetForUser = (dashboard, isAdmin, userRoleIds, widgetHasConfiguration) => {
|
|
6999
|
+
const canConfigureWidgetForUser = (dashboard, isAdmin, userRoleIds, widgetHasConfiguration, readonly) => {
|
|
7068
7000
|
if (!dashboard)
|
|
7069
7001
|
return true;
|
|
7002
|
+
if (readonly)
|
|
7003
|
+
return false;
|
|
7070
7004
|
if (isAdmin)
|
|
7071
7005
|
return widgetHasConfiguration;
|
|
7072
7006
|
if (dashboard.locked === true)
|
|
@@ -7086,6 +7020,9 @@ const filterDashboardsForUser = (dashboards, isAdmin, userId, userRoleIds) => {
|
|
|
7086
7020
|
return [];
|
|
7087
7021
|
}
|
|
7088
7022
|
return dashboards.filter((d) => {
|
|
7023
|
+
if (d.scope === 'E') {
|
|
7024
|
+
return false;
|
|
7025
|
+
}
|
|
7089
7026
|
const isOwnedPersonalDashboard = isPersonalDashboardOwnedByUser(d, userId);
|
|
7090
7027
|
const isRoleMatchedTenantDashboard = isTenantDashboardVisibleForUser(d, userRoleIds);
|
|
7091
7028
|
return isOwnedPersonalDashboard || isRoleMatchedTenantDashboard;
|
|
@@ -7112,7 +7049,7 @@ withComputed((state, deviceService = inject(AXPDeviceService)) => ({
|
|
|
7112
7049
|
// Dynamically set column count based on the current breakpoint
|
|
7113
7050
|
const bp = state.currentBreakpoint();
|
|
7114
7051
|
const optionsWithColumn = { ...baseOptions, column: getColumnsForBreakpoint(bp) };
|
|
7115
|
-
return deriveLayoutOptions(optionsWithColumn, currentDashboard || undefined, state.isAdmin(), isDesktop);
|
|
7052
|
+
return deriveLayoutOptions(optionsWithColumn, currentDashboard || undefined, state.isAdmin(), isDesktop, state.readonly());
|
|
7116
7053
|
}),
|
|
7117
7054
|
/**
|
|
7118
7055
|
* Returns the current dashboard's widgets with their resolved breakpoint options.
|
|
@@ -7132,11 +7069,11 @@ withComputed((state, deviceService = inject(AXPDeviceService)) => ({
|
|
|
7132
7069
|
canConfigureWidget: computed(() => (widget) => {
|
|
7133
7070
|
const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());
|
|
7134
7071
|
const widgetHasConfiguration = widget.node?.options?.['hasConfiguration'] ?? true;
|
|
7135
|
-
return canConfigureWidgetForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), widgetHasConfiguration);
|
|
7072
|
+
return canConfigureWidgetForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), widgetHasConfiguration, state.readonly());
|
|
7136
7073
|
}),
|
|
7137
7074
|
isWidgetLocked: computed(() => (widget) => {
|
|
7138
7075
|
const currentDashboard = state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId());
|
|
7139
|
-
return isWidgetLockedForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds());
|
|
7076
|
+
return isWidgetLockedForUser(currentDashboard || undefined, state.isAdmin(), state.userRoleIds(), state.readonly());
|
|
7140
7077
|
}),
|
|
7141
7078
|
})),
|
|
7142
7079
|
//#endregion
|
|
@@ -7238,13 +7175,13 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7238
7175
|
operator: null,
|
|
7239
7176
|
filters: [
|
|
7240
7177
|
{ field: 'scope', operator: { type: 'equal' }, value: 'U' },
|
|
7241
|
-
{ field: 'userId', operator: { type: 'equal' }, value: userId },
|
|
7178
|
+
{ field: 'scopeRef.userId', operator: { type: 'equal' }, value: userId },
|
|
7242
7179
|
],
|
|
7243
7180
|
});
|
|
7244
7181
|
}
|
|
7245
7182
|
if (userRoleIds.length > 0) {
|
|
7246
7183
|
const roleMatchFilters = userRoleIds.map((roleId) => ({
|
|
7247
|
-
field: 'roleIds',
|
|
7184
|
+
field: 'scopeRef.roleIds',
|
|
7248
7185
|
operator: { type: 'contains' },
|
|
7249
7186
|
value: roleId,
|
|
7250
7187
|
}));
|
|
@@ -7321,14 +7258,19 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7321
7258
|
if (!newDashboard)
|
|
7322
7259
|
return;
|
|
7323
7260
|
const userId = readUserId(sessionService);
|
|
7261
|
+
const tenantId = readTenantId(sessionService);
|
|
7324
7262
|
const now = new Date();
|
|
7263
|
+
const scope = store.isUserAdmin() ? 'T' : 'U';
|
|
7325
7264
|
const dashboardWithMetadata = {
|
|
7326
7265
|
...newDashboard,
|
|
7327
7266
|
createdBy: userId,
|
|
7328
7267
|
createdAt: now,
|
|
7329
7268
|
updatedBy: userId,
|
|
7330
7269
|
updatedAt: now,
|
|
7331
|
-
scope
|
|
7270
|
+
scope,
|
|
7271
|
+
scopeRef: scope === 'T'
|
|
7272
|
+
? buildTenantScopeRef(tenantId ?? '', readScopeRoleIds(newDashboard.scopeRef))
|
|
7273
|
+
: buildUserScopeRef(userId ?? ''),
|
|
7332
7274
|
widgets: [],
|
|
7333
7275
|
};
|
|
7334
7276
|
const dashboardModel = dashboardLayoutToModel(dashboardWithMetadata);
|
|
@@ -7364,7 +7306,7 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7364
7306
|
const editedDashboard = await dashboardPopup.generateDashboardLayout({
|
|
7365
7307
|
title: currentDashboard.title,
|
|
7366
7308
|
description: currentDashboard.description,
|
|
7367
|
-
|
|
7309
|
+
scopeRef: currentDashboard.scopeRef,
|
|
7368
7310
|
scope: currentDashboard.scope,
|
|
7369
7311
|
isArchived: currentDashboard.isArchived,
|
|
7370
7312
|
locked: currentDashboard.locked,
|
|
@@ -7405,6 +7347,7 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7405
7347
|
return false;
|
|
7406
7348
|
try {
|
|
7407
7349
|
const userId = readUserId(sessionService);
|
|
7350
|
+
const tenantId = readTenantId(sessionService);
|
|
7408
7351
|
const now = new Date();
|
|
7409
7352
|
const updatedDashboard = {
|
|
7410
7353
|
...currentDashboard,
|
|
@@ -7418,7 +7361,9 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7418
7361
|
: typeof form.description === 'object'
|
|
7419
7362
|
? form.description
|
|
7420
7363
|
: form.description.toString().trim(),
|
|
7421
|
-
|
|
7364
|
+
scopeRef: currentDashboard.scope === 'T'
|
|
7365
|
+
? buildTenantScopeRef(tenantId ?? readScopeTenantId(currentDashboard.scopeRef) ?? '', form.roleIds ?? [])
|
|
7366
|
+
: currentDashboard.scopeRef,
|
|
7422
7367
|
isArchived: Boolean(form.isArchived),
|
|
7423
7368
|
locked: Boolean(form.locked),
|
|
7424
7369
|
scope: currentDashboard.scope,
|
|
@@ -7447,6 +7392,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7447
7392
|
* Adds selected widgets to the current dashboard and saves layout.
|
|
7448
7393
|
*/
|
|
7449
7394
|
async addWidget() {
|
|
7395
|
+
if (store.readonly())
|
|
7396
|
+
return;
|
|
7450
7397
|
if (!store.selectedDashboard()) {
|
|
7451
7398
|
console.warn('No current dashboard selected');
|
|
7452
7399
|
return;
|
|
@@ -7567,6 +7514,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7567
7514
|
* Removes a widget from the specified dashboard and persists the change.
|
|
7568
7515
|
*/
|
|
7569
7516
|
async removeWidget(dashboardId, widgetId) {
|
|
7517
|
+
if (store.readonly())
|
|
7518
|
+
return;
|
|
7570
7519
|
const currentDashboard = store.dashboards().find((d) => d.id === dashboardId);
|
|
7571
7520
|
if (!currentDashboard)
|
|
7572
7521
|
return;
|
|
@@ -7601,6 +7550,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7601
7550
|
* Persists immediately with queued writes to prevent concurrent save conflicts.
|
|
7602
7551
|
*/
|
|
7603
7552
|
onGridChange(event) {
|
|
7553
|
+
if (store.readonly())
|
|
7554
|
+
return;
|
|
7604
7555
|
if (!store.selectedDashboard())
|
|
7605
7556
|
return;
|
|
7606
7557
|
// Skip saves during breakpoint transitions to avoid persisting auto-reflowed layouts
|
|
@@ -7656,6 +7607,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7656
7607
|
* Applies widget configuration changes returned from popup.
|
|
7657
7608
|
*/
|
|
7658
7609
|
async handlePopupConfiguration(widgetNode) {
|
|
7610
|
+
if (store.readonly())
|
|
7611
|
+
return;
|
|
7659
7612
|
if (!store.selectedDashboard())
|
|
7660
7613
|
return;
|
|
7661
7614
|
try {
|
|
@@ -7687,6 +7640,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7687
7640
|
* Updates widget value (defaultValue) and persists changes.
|
|
7688
7641
|
*/
|
|
7689
7642
|
async handleValueChanged(widgetNode, data) {
|
|
7643
|
+
if (store.readonly())
|
|
7644
|
+
return;
|
|
7690
7645
|
if (!store.selectedDashboard())
|
|
7691
7646
|
return;
|
|
7692
7647
|
if (!deviceService.isDesktopDevice()) {
|
|
@@ -7718,6 +7673,8 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7718
7673
|
* Merges widget options with provided data and persists changes.
|
|
7719
7674
|
*/
|
|
7720
7675
|
async handleOptionsChanged(widgetNode, data) {
|
|
7676
|
+
if (store.readonly())
|
|
7677
|
+
return;
|
|
7721
7678
|
if (!store.selectedDashboard())
|
|
7722
7679
|
return;
|
|
7723
7680
|
try {
|
|
@@ -7775,7 +7732,7 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7775
7732
|
}
|
|
7776
7733
|
: layout;
|
|
7777
7734
|
patchState(store, {
|
|
7778
|
-
isAdmin:
|
|
7735
|
+
isAdmin: !store.readonly(),
|
|
7779
7736
|
isLoading: false,
|
|
7780
7737
|
allDashboards: [hydratedLayout],
|
|
7781
7738
|
dashboards: [hydratedLayout],
|
|
@@ -7827,17 +7784,18 @@ withMethods((store, dashboardPopup = inject(AXMDashboardPopupService), dialogSer
|
|
|
7827
7784
|
}),
|
|
7828
7785
|
//#endregion
|
|
7829
7786
|
//#region ---- Hooks ----
|
|
7830
|
-
withHooks((store, entityLayoutTab = inject(DASHBOARD_LAYOUT_ENTITY_MODE, { optional: true })) => ({
|
|
7787
|
+
withHooks((store, entityLayoutTab = inject(DASHBOARD_LAYOUT_ENTITY_MODE, { optional: true }), readonlyMode = inject(DASHBOARD_READONLY_MODE, { optional: true })) => ({
|
|
7831
7788
|
onInit() {
|
|
7832
7789
|
if (entityLayoutTab === true) {
|
|
7833
7790
|
patchState(store, { entityDetailLayoutLock: true });
|
|
7834
7791
|
}
|
|
7792
|
+
if (readonlyMode === true) {
|
|
7793
|
+
patchState(store, { readonly: true });
|
|
7794
|
+
}
|
|
7835
7795
|
},
|
|
7836
7796
|
})));
|
|
7837
7797
|
//#endregion
|
|
7838
7798
|
|
|
7839
|
-
//#endregion
|
|
7840
|
-
|
|
7841
7799
|
class AXMDashboardWidgetWrapperComponent {
|
|
7842
7800
|
constructor() {
|
|
7843
7801
|
this.title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
@@ -7919,7 +7877,7 @@ class AXMDashboardGridLayoutSectionComponent {
|
|
|
7919
7877
|
}
|
|
7920
7878
|
}
|
|
7921
7879
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardGridLayoutSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7922
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMDashboardGridLayoutSectionComponent, isStandalone: true, selector: "axm-dashboard-grid-layout-section", inputs: { widgetsContext: { classPropertyName: "widgetsContext", publicName: "widgetsContext", isSignal: true, isRequired: false, transformFunction: null }, loadingVariant: { classPropertyName: "loadingVariant", publicName: "loadingVariant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addWidget: "addWidget" }, ngImport: i0, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n <div slot=\"actions\">\n
|
|
7880
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMDashboardGridLayoutSectionComponent, isStandalone: true, selector: "axm-dashboard-grid-layout-section", inputs: { widgetsContext: { classPropertyName: "widgetsContext", publicName: "widgetsContext", isSignal: true, isRequired: false, transformFunction: null }, loadingVariant: { classPropertyName: "loadingVariant", publicName: "loadingVariant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addWidget: "addWidget" }, ngImport: i0, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n @if (!store.readonly()) {\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"addWidget.emit()\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n }\n </axp-state-message>\n } @else {\n <axp-widgets-container [context]=\"widgetsContext()\">\n <ax-grid-layout-container\n class=\"ax-w-full dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | translate | async;\n @let isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()!.id, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n</div>\n", styles: ["axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i1$4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXGridLayoutBuilderModule }, { kind: "component", type: i2$3.AXGridLayoutContainerComponent, selector: "ax-grid-layout-container", inputs: ["options", "isEmpty"], outputs: ["onAdded", "onRemoved", "onWidgetChange", "onChange", "onRender", "isEmptyChange"] }, { kind: "component", type: i2$3.AXGridLayoutWidgetComponent, selector: "ax-grid-layout-widget", inputs: ["options"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i3$2.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i3$2.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "component", type: AXMDashboardWidgetWrapperComponent, selector: "axm-dashboard-widget-wrapper", inputs: ["title", "hasConfiguration", "isLocked"], outputs: ["onDelete", "onConfiguration", "onValueChanged", "onOptionsChanged"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
7923
7881
|
}
|
|
7924
7882
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardGridLayoutSectionComponent, decorators: [{
|
|
7925
7883
|
type: Component,
|
|
@@ -7932,9 +7890,687 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
7932
7890
|
AXPWidgetCoreModule,
|
|
7933
7891
|
AXPStateMessageComponent,
|
|
7934
7892
|
AXMDashboardWidgetWrapperComponent,
|
|
7935
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n <div slot=\"actions\">\n
|
|
7893
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"axm-dashboard-grid-layout-section ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-w-full\">\n @if (store.isLoading()) {\n @if (loadingVariant() === 'overlay') {\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-absolute ax-z-10 ax-bg-white/80\"\n >\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n } @else {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-w-full ax-flex-1\">\n <ax-loading></ax-loading>\n <p class=\"ax-mt-3 ax-text-gray-600\">{{ '@dashboard:loading' | translate | async }}</p>\n </div>\n }\n } @else if (!store.selectedDashboard()?.widgets?.length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:no-widgets.title'\"\n [description]=\"'@dashboard:no-widgets.description'\"\n >\n @if (!store.readonly()) {\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"addWidget.emit()\" class=\"ax-underline\">\n {{ '@dashboard:add-widget' | translate | async }}\n </button>\n </div>\n }\n </axp-state-message>\n } @else {\n <axp-widgets-container [context]=\"widgetsContext()\">\n <ax-grid-layout-container\n class=\"ax-w-full dark:[--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lighter-surface)] [--ax-comp-grid-layout-stack-item-content-bg-color:var(--ax-sys-color-lightest-surface)]\"\n [options]=\"store.currentLayoutOptions()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for (widget of store.currentWidgets(); track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.resolvedOptions\">\n @let title = (widget.node?.options?.['title'] ?? widget.config.title) | translate | async;\n @let isHeaderTitleVisible = widget.node?.meta?.['title']?.['visible'] ?? true;\n\n <axm-dashboard-widget-wrapper\n [title]=\"isHeaderTitleVisible ? title! : null\"\n [hasConfiguration]=\"store.canConfigureWidget()(widget)\"\n [isLocked]=\"store.isWidgetLocked()(widget)\"\n (onDelete)=\"confirmWidgetDelete(store.selectedDashboard()!.id, widget.config.id!)\"\n (onConfiguration)=\"store.handlePopupConfiguration(widget.node!)\"\n (onValueChanged)=\"store.handleValueChanged(widget?.node!, $event)\"\n (onOptionsChanged)=\"store.handleOptionsChanged(widget?.node!, $event)\"\n >\n @if (widget.node) {\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'view'\"></ng-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n }\n </ax-grid-layout-container>\n </axp-widgets-container>\n }\n</div>\n", styles: ["axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-grid-layout-section ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}\n"] }]
|
|
7936
7894
|
}], propDecorators: { widgetsContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "widgetsContext", required: false }] }], loadingVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingVariant", required: false }] }], addWidget: [{ type: i0.Output, args: ["addWidget"] }] } });
|
|
7937
7895
|
|
|
7896
|
+
//#region ---- Imports ----
|
|
7897
|
+
//#endregion
|
|
7898
|
+
//#region ---- Component ----
|
|
7899
|
+
/**
|
|
7900
|
+
* Shared host that loads an entity-scoped dashboard and renders the grid layout section.
|
|
7901
|
+
*/
|
|
7902
|
+
class AXMEntityDashboardHostComponent {
|
|
7903
|
+
constructor() {
|
|
7904
|
+
//#region ---- Services & Dependencies ----
|
|
7905
|
+
this.store = inject(AXMDashboardStore);
|
|
7906
|
+
this.entityDashboardService = inject(AXMEntityDashboardService);
|
|
7907
|
+
//#endregion
|
|
7908
|
+
//#region ---- Inputs ----
|
|
7909
|
+
this.entityType = input.required(...(ngDevMode ? [{ debugName: "entityType" }] : /* istanbul ignore next */ []));
|
|
7910
|
+
this.entityId = input.required(...(ngDevMode ? [{ debugName: "entityId" }] : /* istanbul ignore next */ []));
|
|
7911
|
+
this.entityTitle = input(...(ngDevMode ? [undefined, { debugName: "entityTitle" }] : /* istanbul ignore next */ []));
|
|
7912
|
+
//#endregion
|
|
7913
|
+
//#region ---- Local State ----
|
|
7914
|
+
this.context = signal({}, ...(ngDevMode ? [{ debugName: "context" }] : /* istanbul ignore next */ []));
|
|
7915
|
+
this.isReady = signal(false, ...(ngDevMode ? [{ debugName: "isReady" }] : /* istanbul ignore next */ []));
|
|
7916
|
+
//#endregion
|
|
7917
|
+
//#region ---- Effects ----
|
|
7918
|
+
this.#loadEntityDashboard = effect(() => {
|
|
7919
|
+
const entityType = this.entityType();
|
|
7920
|
+
const entityId = this.entityId();
|
|
7921
|
+
const entityTitle = this.entityTitle();
|
|
7922
|
+
if (!entityType || !entityId) {
|
|
7923
|
+
return;
|
|
7924
|
+
}
|
|
7925
|
+
void this.entityDashboardService
|
|
7926
|
+
.ensureEntityDashboard(entityType, entityId, entityTitle)
|
|
7927
|
+
.then((model) => {
|
|
7928
|
+
this.store.hydrateFromEntityDetailModel(model);
|
|
7929
|
+
this.context.set({ ...model });
|
|
7930
|
+
this.isReady.set(true);
|
|
7931
|
+
});
|
|
7932
|
+
}, ...(ngDevMode ? [{ debugName: "#loadEntityDashboard" }] : /* istanbul ignore next */ []));
|
|
7933
|
+
}
|
|
7934
|
+
//#endregion
|
|
7935
|
+
//#region ---- Effects ----
|
|
7936
|
+
#loadEntityDashboard;
|
|
7937
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7938
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMEntityDashboardHostComponent, isStandalone: true, selector: "axm-entity-dashboard-host", inputs: { entityType: { classPropertyName: "entityType", publicName: "entityType", isSignal: true, isRequired: true, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: true, transformFunction: null }, entityTitle: { classPropertyName: "entityTitle", publicName: "entityTitle", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
7939
|
+
AXPDesignerService,
|
|
7940
|
+
{ provide: DASHBOARD_LAYOUT_ENTITY_MODE, useValue: true },
|
|
7941
|
+
{ provide: DASHBOARD_READONLY_MODE, useValue: true },
|
|
7942
|
+
AXMDashboardStore,
|
|
7943
|
+
], ngImport: i0, template: `
|
|
7944
|
+
@if (isReady()) {
|
|
7945
|
+
<axm-dashboard-grid-layout-section [widgetsContext]="context()"></axm-dashboard-grid-layout-section>
|
|
7946
|
+
}
|
|
7947
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AXMDashboardGridLayoutSectionComponent, selector: "axm-dashboard-grid-layout-section", inputs: ["widgetsContext", "loadingVariant"], outputs: ["addWidget"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
7948
|
+
}
|
|
7949
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardHostComponent, decorators: [{
|
|
7950
|
+
type: Component,
|
|
7951
|
+
args: [{
|
|
7952
|
+
selector: 'axm-entity-dashboard-host',
|
|
7953
|
+
imports: [AXMDashboardGridLayoutSectionComponent],
|
|
7954
|
+
template: `
|
|
7955
|
+
@if (isReady()) {
|
|
7956
|
+
<axm-dashboard-grid-layout-section [widgetsContext]="context()"></axm-dashboard-grid-layout-section>
|
|
7957
|
+
}
|
|
7958
|
+
`,
|
|
7959
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
7960
|
+
encapsulation: ViewEncapsulation.None,
|
|
7961
|
+
providers: [
|
|
7962
|
+
AXPDesignerService,
|
|
7963
|
+
{ provide: DASHBOARD_LAYOUT_ENTITY_MODE, useValue: true },
|
|
7964
|
+
{ provide: DASHBOARD_READONLY_MODE, useValue: true },
|
|
7965
|
+
AXMDashboardStore,
|
|
7966
|
+
],
|
|
7967
|
+
}]
|
|
7968
|
+
}], propDecorators: { entityType: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityType", required: true }] }], entityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityId", required: true }] }], entityTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityTitle", required: false }] }] } });
|
|
7969
|
+
|
|
7970
|
+
//#region ---- Imports ----
|
|
7971
|
+
//#endregion
|
|
7972
|
+
//#region ---- Widget View ----
|
|
7973
|
+
class AXMEntityDashboardWidgetViewComponent extends AXPValueWidgetComponent {
|
|
7974
|
+
constructor() {
|
|
7975
|
+
super(...arguments);
|
|
7976
|
+
this.entityType = computed(() => {
|
|
7977
|
+
const fromOptions = this.options()?.['entityType'];
|
|
7978
|
+
return typeof fromOptions === 'string' && fromOptions.trim() ? fromOptions.trim() : undefined;
|
|
7979
|
+
}, ...(ngDevMode ? [{ debugName: "entityType" }] : /* istanbul ignore next */ []));
|
|
7980
|
+
this.entityId = computed(() => {
|
|
7981
|
+
const fromOptions = this.options()?.['entityId'];
|
|
7982
|
+
return typeof fromOptions === 'string' && fromOptions.trim() ? fromOptions.trim() : undefined;
|
|
7983
|
+
}, ...(ngDevMode ? [{ debugName: "entityId" }] : /* istanbul ignore next */ []));
|
|
7984
|
+
this.entityTitle = computed(() => {
|
|
7985
|
+
const subject = this.options()?.['subject'];
|
|
7986
|
+
return typeof subject === 'string' ? subject : undefined;
|
|
7987
|
+
}, ...(ngDevMode ? [{ debugName: "entityTitle" }] : /* istanbul ignore next */ []));
|
|
7988
|
+
}
|
|
7989
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
7990
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMEntityDashboardWidgetViewComponent, isStandalone: true, selector: "axm-entity-dashboard-widget-view", usesInheritance: true, ngImport: i0, template: `
|
|
7991
|
+
@if (entityType() && entityId()) {
|
|
7992
|
+
<axm-entity-dashboard-host
|
|
7993
|
+
[entityType]="entityType()!"
|
|
7994
|
+
[entityId]="entityId()!"
|
|
7995
|
+
[entityTitle]="entityTitle()"
|
|
7996
|
+
></axm-entity-dashboard-host>
|
|
7997
|
+
}
|
|
7998
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AXMEntityDashboardHostComponent, selector: "axm-entity-dashboard-host", inputs: ["entityType", "entityId", "entityTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7999
|
+
}
|
|
8000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardWidgetViewComponent, decorators: [{
|
|
8001
|
+
type: Component,
|
|
8002
|
+
args: [{
|
|
8003
|
+
selector: 'axm-entity-dashboard-widget-view',
|
|
8004
|
+
imports: [AXMEntityDashboardHostComponent],
|
|
8005
|
+
template: `
|
|
8006
|
+
@if (entityType() && entityId()) {
|
|
8007
|
+
<axm-entity-dashboard-host
|
|
8008
|
+
[entityType]="entityType()!"
|
|
8009
|
+
[entityId]="entityId()!"
|
|
8010
|
+
[entityTitle]="entityTitle()"
|
|
8011
|
+
></axm-entity-dashboard-host>
|
|
8012
|
+
}
|
|
8013
|
+
`,
|
|
8014
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
8015
|
+
}]
|
|
8016
|
+
}] });
|
|
8017
|
+
//#endregion
|
|
8018
|
+
//#region ---- Page Component ----
|
|
8019
|
+
class AXMEntityDashboardPageComponent extends AXPPageLayoutBaseComponent {
|
|
8020
|
+
constructor() {
|
|
8021
|
+
super(...arguments);
|
|
8022
|
+
//#region ---- Inputs ----
|
|
8023
|
+
this.rootContext = input.required(...(ngDevMode ? [{ debugName: "rootContext" }] : /* istanbul ignore next */ []));
|
|
8024
|
+
this.pageConfig = input(...(ngDevMode ? [undefined, { debugName: "pageConfig" }] : /* istanbul ignore next */ []));
|
|
8025
|
+
//#endregion
|
|
8026
|
+
//#region ---- Services & Dependencies ----
|
|
8027
|
+
this.route = inject(ActivatedRoute);
|
|
8028
|
+
this.entityDashboardService = inject(AXMEntityDashboardService);
|
|
8029
|
+
//#endregion
|
|
8030
|
+
//#region ---- Computed Properties ----
|
|
8031
|
+
this.entityRef = computed(() => {
|
|
8032
|
+
const moduleName = this.route.snapshot.parent?.paramMap.get('module');
|
|
8033
|
+
const entityName = this.route.snapshot.paramMap.get('entity');
|
|
8034
|
+
return this.entityDashboardService.resolveEntityRefFromContext(moduleName, entityName, this.rootContext());
|
|
8035
|
+
}, ...(ngDevMode ? [{ debugName: "entityRef" }] : /* istanbul ignore next */ []));
|
|
8036
|
+
this.entityTitle = computed(() => {
|
|
8037
|
+
const title = get(this.rootContext(), 'title');
|
|
8038
|
+
return typeof title === 'string' ? title : undefined;
|
|
8039
|
+
}, ...(ngDevMode ? [{ debugName: "entityTitle" }] : /* istanbul ignore next */ []));
|
|
8040
|
+
}
|
|
8041
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
8042
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMEntityDashboardPageComponent, isStandalone: true, selector: "axm-entity-dashboard-page", inputs: { rootContext: { classPropertyName: "rootContext", publicName: "rootContext", isSignal: true, isRequired: true, transformFunction: null }, pageConfig: { classPropertyName: "pageConfig", publicName: "pageConfig", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
8043
|
+
{
|
|
8044
|
+
provide: AXPPageLayoutBase,
|
|
8045
|
+
useExisting: AXMEntityDashboardPageComponent,
|
|
8046
|
+
},
|
|
8047
|
+
], usesInheritance: true, ngImport: i0, template: `
|
|
8048
|
+
@if (entityRef(); as ref) {
|
|
8049
|
+
<axm-entity-dashboard-host
|
|
8050
|
+
[entityType]="ref.entityType"
|
|
8051
|
+
[entityId]="ref.entityId"
|
|
8052
|
+
[entityTitle]="entityTitle()"
|
|
8053
|
+
></axm-entity-dashboard-host>
|
|
8054
|
+
}
|
|
8055
|
+
`, isInline: true, styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: AXMEntityDashboardHostComponent, selector: "axm-entity-dashboard-host", inputs: ["entityType", "entityId", "entityTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8056
|
+
}
|
|
8057
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponent, decorators: [{
|
|
8058
|
+
type: Component,
|
|
8059
|
+
args: [{ selector: 'axm-entity-dashboard-page', imports: [AXMEntityDashboardHostComponent], template: `
|
|
8060
|
+
@if (entityRef(); as ref) {
|
|
8061
|
+
<axm-entity-dashboard-host
|
|
8062
|
+
[entityType]="ref.entityType"
|
|
8063
|
+
[entityId]="ref.entityId"
|
|
8064
|
+
[entityTitle]="entityTitle()"
|
|
8065
|
+
></axm-entity-dashboard-host>
|
|
8066
|
+
}
|
|
8067
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
8068
|
+
{
|
|
8069
|
+
provide: AXPPageLayoutBase,
|
|
8070
|
+
useExisting: AXMEntityDashboardPageComponent,
|
|
8071
|
+
},
|
|
8072
|
+
], styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
8073
|
+
}], propDecorators: { rootContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootContext", required: true }] }], pageConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageConfig", required: false }] }] } });
|
|
8074
|
+
|
|
8075
|
+
var entityDashboardPage_component = /*#__PURE__*/Object.freeze({
|
|
8076
|
+
__proto__: null,
|
|
8077
|
+
AXMEntityDashboardPageComponent: AXMEntityDashboardPageComponent,
|
|
8078
|
+
AXMEntityDashboardWidgetViewComponent: AXMEntityDashboardWidgetViewComponent
|
|
8079
|
+
});
|
|
8080
|
+
|
|
8081
|
+
//#region ---- Entity Dashboard Page Provider ----
|
|
8082
|
+
class AXMEntityDashboardPageComponentProvider {
|
|
8083
|
+
async components() {
|
|
8084
|
+
return [
|
|
8085
|
+
{
|
|
8086
|
+
key: ENTITY_DASHBOARD_PAGE_COMPONENT_KEY,
|
|
8087
|
+
loader: () => Promise.resolve().then(function () { return entityDashboardPage_component; }).then((c) => c.AXMEntityDashboardPageComponent),
|
|
8088
|
+
},
|
|
8089
|
+
];
|
|
8090
|
+
}
|
|
8091
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponentProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8092
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponentProvider }); }
|
|
8093
|
+
}
|
|
8094
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityDashboardPageComponentProvider, decorators: [{
|
|
8095
|
+
type: Injectable
|
|
8096
|
+
}] });
|
|
8097
|
+
|
|
8098
|
+
var entityDashboardPageComponent_provider = /*#__PURE__*/Object.freeze({
|
|
8099
|
+
__proto__: null,
|
|
8100
|
+
AXMEntityDashboardPageComponentProvider: AXMEntityDashboardPageComponentProvider
|
|
8101
|
+
});
|
|
8102
|
+
|
|
8103
|
+
const AXPEntityDashboardWidget = {
|
|
8104
|
+
name: 'entity-dashboard',
|
|
8105
|
+
title: '@dashboard-management:dashboards.widget.entity-dashboard.title',
|
|
8106
|
+
description: '@dashboard-management:dashboards.widget.entity-dashboard.description',
|
|
8107
|
+
type: 'view',
|
|
8108
|
+
categories: [],
|
|
8109
|
+
groups: [AXPWidgetGroupEnum.EntityWidget],
|
|
8110
|
+
icon: 'fa-light fa-gauge-high',
|
|
8111
|
+
properties: [],
|
|
8112
|
+
components: {
|
|
8113
|
+
view: {
|
|
8114
|
+
component: () => Promise.resolve().then(function () { return entityDashboardPage_component; }).then((c) => c.AXMEntityDashboardWidgetViewComponent),
|
|
8115
|
+
},
|
|
8116
|
+
edit: {
|
|
8117
|
+
component: () => Promise.resolve().then(function () { return entityDashboardPage_component; }).then((c) => c.AXMEntityDashboardWidgetViewComponent),
|
|
8118
|
+
},
|
|
8119
|
+
},
|
|
8120
|
+
};
|
|
8121
|
+
|
|
8122
|
+
//#endregion
|
|
8123
|
+
//#region ---- Dashboard Management Widgets Provider ----
|
|
8124
|
+
const DASHBOARD_WIDGETS = [
|
|
8125
|
+
AXPEntityDashboardWidget,
|
|
8126
|
+
AXPShortcutWidget,
|
|
8127
|
+
AXPDonutChartWidget,
|
|
8128
|
+
AXPBarChartWidget,
|
|
8129
|
+
AXPLineChartWidget,
|
|
8130
|
+
AXPFunnelChartWidget,
|
|
8131
|
+
AXPHeatmapChartWidget,
|
|
8132
|
+
AXPKpiProgressWidget,
|
|
8133
|
+
AXPKpiSegmentedWidget,
|
|
8134
|
+
AXPKpiDetailsWidget,
|
|
8135
|
+
AXPKpiStatCardWidget,
|
|
8136
|
+
AXPGaugeChartWidget,
|
|
8137
|
+
AXPStickyNoteWidget,
|
|
8138
|
+
AXPMinimalWeatherWidget,
|
|
8139
|
+
AXPAdvancedWeatherWidget,
|
|
8140
|
+
AXPAnalogClockWidget,
|
|
8141
|
+
];
|
|
8142
|
+
class AXMDashboardManagementWidgetsProvider {
|
|
8143
|
+
getWidgets() {
|
|
8144
|
+
return DASHBOARD_WIDGETS;
|
|
8145
|
+
}
|
|
8146
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8147
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider }); }
|
|
8148
|
+
}
|
|
8149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementWidgetsProvider, decorators: [{
|
|
8150
|
+
type: Injectable
|
|
8151
|
+
}] });
|
|
8152
|
+
|
|
8153
|
+
//#region ---- Imports ----
|
|
8154
|
+
//#endregion
|
|
8155
|
+
//#region ---- Constants ----
|
|
8156
|
+
const DASHBOARD_ENTITY_KEY = `${RootConfig.module.name}.${RootConfig.entities.dashboard.name}`;
|
|
8157
|
+
//#endregion
|
|
8158
|
+
//#region ---- Middleware ----
|
|
8159
|
+
/**
|
|
8160
|
+
* Normalizes dashboard scope/scopeRef on create/update and applies tenant lock defaults.
|
|
8161
|
+
*/
|
|
8162
|
+
const dashboardScopeMiddleware = {
|
|
8163
|
+
target: { ops: ['create', 'update'], order: 4 },
|
|
8164
|
+
execute: async (ctx, next) => {
|
|
8165
|
+
if (ctx.entityName !== DASHBOARD_ENTITY_KEY || ctx.data == null || typeof ctx.data !== 'object') {
|
|
8166
|
+
await next();
|
|
8167
|
+
return;
|
|
8168
|
+
}
|
|
8169
|
+
const payload = ctx.data;
|
|
8170
|
+
let scope = payload['scope'];
|
|
8171
|
+
if (!scope) {
|
|
8172
|
+
scope = 'T';
|
|
8173
|
+
payload['scope'] = scope;
|
|
8174
|
+
}
|
|
8175
|
+
const legacyUserId = get(payload, 'userId');
|
|
8176
|
+
const legacyRoleIds = get(payload, 'roleIds');
|
|
8177
|
+
const legacyEntityId = get(payload, 'entityId');
|
|
8178
|
+
const legacyEntityType = get(payload, 'entityType');
|
|
8179
|
+
const legacyTenantId = get(payload, 'tenantId');
|
|
8180
|
+
const scopeRef = normalizeDashboardScopeRef(scope, payload['scopeRef'], {
|
|
8181
|
+
userId: isString(legacyUserId) ? legacyUserId : undefined,
|
|
8182
|
+
tenantId: isString(legacyTenantId) ? legacyTenantId : undefined,
|
|
8183
|
+
roleIds: Array.isArray(legacyRoleIds) ? legacyRoleIds : readScopeRoleIds(payload['scopeRef']),
|
|
8184
|
+
entityId: isString(legacyEntityId) ? legacyEntityId : undefined,
|
|
8185
|
+
entityType: isString(legacyEntityType) ? legacyEntityType : undefined,
|
|
8186
|
+
});
|
|
8187
|
+
set(payload, 'scopeRef', scopeRef);
|
|
8188
|
+
delete payload['userId'];
|
|
8189
|
+
delete payload['roleIds'];
|
|
8190
|
+
delete payload['entityId'];
|
|
8191
|
+
delete payload['entityType'];
|
|
8192
|
+
delete payload['tenantId'];
|
|
8193
|
+
if (scope === 'T') {
|
|
8194
|
+
payload['locked'] = true;
|
|
8195
|
+
}
|
|
8196
|
+
if (scope === 'E') {
|
|
8197
|
+
const entityRef = buildEntityScopeRef(get(scopeRef, 'entityType'), get(scopeRef, 'entityId'));
|
|
8198
|
+
set(payload, 'scopeRef', entityRef);
|
|
8199
|
+
}
|
|
8200
|
+
if (scope === 'U') {
|
|
8201
|
+
set(payload, 'scopeRef', buildUserScopeRef(get(scopeRef, 'userId')));
|
|
8202
|
+
}
|
|
8203
|
+
if (scope === 'T') {
|
|
8204
|
+
set(payload, 'scopeRef', buildTenantScopeRef(get(scopeRef, 'tenantId'), readScopeRoleIds(scopeRef)));
|
|
8205
|
+
}
|
|
8206
|
+
await next();
|
|
8207
|
+
},
|
|
8208
|
+
};
|
|
8209
|
+
//#endregion
|
|
8210
|
+
|
|
8211
|
+
// Entity Modules
|
|
8212
|
+
function createAppRoute() {
|
|
8213
|
+
const config = inject(AXP_ENTITY_CONFIG_TOKEN);
|
|
8214
|
+
return {
|
|
8215
|
+
path: ':app',
|
|
8216
|
+
canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],
|
|
8217
|
+
data: { rootLayout: true },
|
|
8218
|
+
loadComponent: () => {
|
|
8219
|
+
return config.viewers.root();
|
|
8220
|
+
},
|
|
8221
|
+
children: [
|
|
8222
|
+
{
|
|
8223
|
+
path: 'dashboard',
|
|
8224
|
+
loadComponent: () => Promise.resolve().then(function () { return homeDashboard; }).then((c) => c.AXMDashboardHomeComponent),
|
|
8225
|
+
},
|
|
8226
|
+
],
|
|
8227
|
+
};
|
|
8228
|
+
}
|
|
8229
|
+
class AXMDashboardManagementModule {
|
|
8230
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
8231
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, imports: [AXPWidgetCoreModule] }); }
|
|
8232
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, providers: [
|
|
8233
|
+
{ provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },
|
|
8234
|
+
{
|
|
8235
|
+
provide: AXP_HOME_PAGES,
|
|
8236
|
+
multi: true,
|
|
8237
|
+
useFactory: () => [
|
|
8238
|
+
{
|
|
8239
|
+
key: 'dashboard',
|
|
8240
|
+
title: 'Dashboard',
|
|
8241
|
+
route: createAppRoute(),
|
|
8242
|
+
},
|
|
8243
|
+
],
|
|
8244
|
+
},
|
|
8245
|
+
// Module-specific providers (not part of manifest system)
|
|
8246
|
+
AXPWidgetsModule,
|
|
8247
|
+
{
|
|
8248
|
+
provide: AXP_HOME_PAGE_DEFAULT_KEY,
|
|
8249
|
+
useValue: 'dashboard',
|
|
8250
|
+
},
|
|
8251
|
+
// Module Manifest Provider
|
|
8252
|
+
{
|
|
8253
|
+
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
8254
|
+
useValue: DashboardManagementManifest,
|
|
8255
|
+
multi: true,
|
|
8256
|
+
},
|
|
8257
|
+
// Provider references (now using tokens)
|
|
8258
|
+
{
|
|
8259
|
+
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
8260
|
+
useClass: AXMPermissionDefinitionProvider,
|
|
8261
|
+
multi: true,
|
|
8262
|
+
},
|
|
8263
|
+
{
|
|
8264
|
+
provide: AXP_MENU_PROVIDER,
|
|
8265
|
+
useClass: AXMMenuProvider,
|
|
8266
|
+
multi: true,
|
|
8267
|
+
},
|
|
8268
|
+
{
|
|
8269
|
+
provide: AXP_ENTITY_DEFINITION_LOADER,
|
|
8270
|
+
useClass: AXMEntityProvider,
|
|
8271
|
+
multi: true,
|
|
8272
|
+
},
|
|
8273
|
+
{
|
|
8274
|
+
provide: AXP_ENTITY_ACTION_PLUGIN,
|
|
8275
|
+
useValue: dashboardPlugin,
|
|
8276
|
+
multi: true,
|
|
8277
|
+
},
|
|
8278
|
+
{
|
|
8279
|
+
provide: AXP_ENTITY_STORAGE_MIDDLEWARE,
|
|
8280
|
+
useValue: dashboardScopeMiddleware,
|
|
8281
|
+
multi: true,
|
|
8282
|
+
},
|
|
8283
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-modules-dashboard-management-index-gjCiELmH.mjs').then((m) => m.AXMDashboardLayoutPageComponentProvider)),
|
|
8284
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return entityDashboardPageComponent_provider; }).then((m) => m.AXMEntityDashboardPageComponentProvider)),
|
|
8285
|
+
], imports: [AXPWidgetCoreModule] }); }
|
|
8286
|
+
}
|
|
8287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardManagementModule, decorators: [{
|
|
8288
|
+
type: NgModule,
|
|
8289
|
+
args: [{
|
|
8290
|
+
imports: [
|
|
8291
|
+
AXPWidgetCoreModule,
|
|
8292
|
+
// Entity Modules
|
|
8293
|
+
],
|
|
8294
|
+
providers: [
|
|
8295
|
+
{ provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDashboardManagementWidgetsProvider, multi: true },
|
|
8296
|
+
{
|
|
8297
|
+
provide: AXP_HOME_PAGES,
|
|
8298
|
+
multi: true,
|
|
8299
|
+
useFactory: () => [
|
|
8300
|
+
{
|
|
8301
|
+
key: 'dashboard',
|
|
8302
|
+
title: 'Dashboard',
|
|
8303
|
+
route: createAppRoute(),
|
|
8304
|
+
},
|
|
8305
|
+
],
|
|
8306
|
+
},
|
|
8307
|
+
// Module-specific providers (not part of manifest system)
|
|
8308
|
+
AXPWidgetsModule,
|
|
8309
|
+
{
|
|
8310
|
+
provide: AXP_HOME_PAGE_DEFAULT_KEY,
|
|
8311
|
+
useValue: 'dashboard',
|
|
8312
|
+
},
|
|
8313
|
+
// Module Manifest Provider
|
|
8314
|
+
{
|
|
8315
|
+
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
8316
|
+
useValue: DashboardManagementManifest,
|
|
8317
|
+
multi: true,
|
|
8318
|
+
},
|
|
8319
|
+
// Provider references (now using tokens)
|
|
8320
|
+
{
|
|
8321
|
+
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
8322
|
+
useClass: AXMPermissionDefinitionProvider,
|
|
8323
|
+
multi: true,
|
|
8324
|
+
},
|
|
8325
|
+
{
|
|
8326
|
+
provide: AXP_MENU_PROVIDER,
|
|
8327
|
+
useClass: AXMMenuProvider,
|
|
8328
|
+
multi: true,
|
|
8329
|
+
},
|
|
8330
|
+
{
|
|
8331
|
+
provide: AXP_ENTITY_DEFINITION_LOADER,
|
|
8332
|
+
useClass: AXMEntityProvider,
|
|
8333
|
+
multi: true,
|
|
8334
|
+
},
|
|
8335
|
+
{
|
|
8336
|
+
provide: AXP_ENTITY_ACTION_PLUGIN,
|
|
8337
|
+
useValue: dashboardPlugin,
|
|
8338
|
+
multi: true,
|
|
8339
|
+
},
|
|
8340
|
+
{
|
|
8341
|
+
provide: AXP_ENTITY_STORAGE_MIDDLEWARE,
|
|
8342
|
+
useValue: dashboardScopeMiddleware,
|
|
8343
|
+
multi: true,
|
|
8344
|
+
},
|
|
8345
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => import('./acorex-modules-dashboard-management-index-gjCiELmH.mjs').then((m) => m.AXMDashboardLayoutPageComponentProvider)),
|
|
8346
|
+
provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () => Promise.resolve().then(function () { return entityDashboardPageComponent_provider; }).then((m) => m.AXMEntityDashboardPageComponentProvider)),
|
|
8347
|
+
],
|
|
8348
|
+
}]
|
|
8349
|
+
}] });
|
|
8350
|
+
|
|
8351
|
+
async function dashboardFactory() {
|
|
8352
|
+
const entityDef = {
|
|
8353
|
+
module: RootConfig.module.name,
|
|
8354
|
+
name: RootConfig.entities.dashboard.name,
|
|
8355
|
+
title: RootConfig.entities.dashboard.title,
|
|
8356
|
+
icon: RootConfig.entities.dashboard.icon,
|
|
8357
|
+
plugins: [{ name: 'category' }, { name: 'archive' }],
|
|
8358
|
+
pages: [
|
|
8359
|
+
{
|
|
8360
|
+
componentKey: DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY,
|
|
8361
|
+
title: '@dashboard-management:dashboards.entities.dashboard.pages.layout.title',
|
|
8362
|
+
description: '@dashboard-management:dashboards.entities.dashboard.pages.layout.description',
|
|
8363
|
+
icon: 'fa-light fa-table-layout',
|
|
8364
|
+
layout: { order: 1, position: 'after' },
|
|
8365
|
+
},
|
|
8366
|
+
],
|
|
8367
|
+
formats: {
|
|
8368
|
+
individual: RootConfig.entities.dashboard.title,
|
|
8369
|
+
plural: RootConfig.entities.dashboard.titlePlural,
|
|
8370
|
+
displayName: '@general:terms.interface.configuration',
|
|
8371
|
+
searchResult: {
|
|
8372
|
+
title: '{{ title }}',
|
|
8373
|
+
description: RootConfig.module.title,
|
|
8374
|
+
},
|
|
8375
|
+
},
|
|
8376
|
+
relatedEntities: [],
|
|
8377
|
+
groups: [
|
|
8378
|
+
{
|
|
8379
|
+
id: 'section',
|
|
8380
|
+
title: RootConfig.entities.dashboard.title,
|
|
8381
|
+
},
|
|
8382
|
+
{
|
|
8383
|
+
id: 'access',
|
|
8384
|
+
title: '@dashboard-management:dashboards.entities.dashboard.groups.access.title',
|
|
8385
|
+
},
|
|
8386
|
+
],
|
|
8387
|
+
properties: [
|
|
8388
|
+
{
|
|
8389
|
+
name: 'id',
|
|
8390
|
+
title: 'ID',
|
|
8391
|
+
groupId: 'section',
|
|
8392
|
+
schema: { dataType: 'uuid', visible: false, nullable: false, readonly: true, unique: { enabled: true } },
|
|
8393
|
+
},
|
|
8394
|
+
{
|
|
8395
|
+
name: 'title',
|
|
8396
|
+
title: '@general:terms.common.title',
|
|
8397
|
+
groupId: 'section',
|
|
8398
|
+
options: {
|
|
8399
|
+
sort: {
|
|
8400
|
+
enabled: true,
|
|
8401
|
+
},
|
|
8402
|
+
filter: {
|
|
8403
|
+
advance: {
|
|
8404
|
+
enabled: true,
|
|
8405
|
+
},
|
|
8406
|
+
inline: {
|
|
8407
|
+
enabled: true,
|
|
8408
|
+
},
|
|
8409
|
+
},
|
|
8410
|
+
},
|
|
8411
|
+
schema: {
|
|
8412
|
+
dataType: 'string',
|
|
8413
|
+
interface: {
|
|
8414
|
+
type: AXPWidgetsList.Editors.TextBox,
|
|
8415
|
+
options: {
|
|
8416
|
+
multiLanguage: true,
|
|
8417
|
+
placeholder: '@general:terms.common.title',
|
|
8418
|
+
},
|
|
8419
|
+
},
|
|
8420
|
+
},
|
|
8421
|
+
validations: [
|
|
8422
|
+
{
|
|
8423
|
+
rule: 'required',
|
|
8424
|
+
},
|
|
8425
|
+
],
|
|
8426
|
+
},
|
|
8427
|
+
{
|
|
8428
|
+
name: 'description',
|
|
8429
|
+
title: '@dashboard-management:dashboards.entities.dashboard.fields.description.title',
|
|
8430
|
+
groupId: 'section',
|
|
8431
|
+
options: {
|
|
8432
|
+
sort: {
|
|
8433
|
+
enabled: false,
|
|
8434
|
+
},
|
|
8435
|
+
filter: {
|
|
8436
|
+
advance: {
|
|
8437
|
+
enabled: false,
|
|
8438
|
+
},
|
|
8439
|
+
inline: {
|
|
8440
|
+
enabled: false,
|
|
8441
|
+
},
|
|
8442
|
+
},
|
|
8443
|
+
},
|
|
8444
|
+
schema: {
|
|
8445
|
+
dataType: 'string',
|
|
8446
|
+
interface: {
|
|
8447
|
+
type: AXPWidgetsList.Editors.LargeTextBox,
|
|
8448
|
+
options: {
|
|
8449
|
+
rows: 3,
|
|
8450
|
+
multiLanguage: true,
|
|
8451
|
+
placeholder: '@general:terms.common.description',
|
|
8452
|
+
},
|
|
8453
|
+
},
|
|
8454
|
+
},
|
|
8455
|
+
},
|
|
8456
|
+
{
|
|
8457
|
+
name: 'scope',
|
|
8458
|
+
title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.title',
|
|
8459
|
+
groupId: 'access',
|
|
8460
|
+
options: {
|
|
8461
|
+
sort: { enabled: true },
|
|
8462
|
+
filter: { advance: { enabled: true }, inline: { enabled: true } },
|
|
8463
|
+
},
|
|
8464
|
+
schema: {
|
|
8465
|
+
dataType: 'string',
|
|
8466
|
+
visible: false,
|
|
8467
|
+
interface: {
|
|
8468
|
+
type: AXPWidgetsList.Editors.SelectBox,
|
|
8469
|
+
options: {
|
|
8470
|
+
valueField: 'id',
|
|
8471
|
+
dataSource: [
|
|
8472
|
+
{
|
|
8473
|
+
id: 'T',
|
|
8474
|
+
title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.tenant',
|
|
8475
|
+
},
|
|
8476
|
+
{
|
|
8477
|
+
id: 'U',
|
|
8478
|
+
title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.personal',
|
|
8479
|
+
},
|
|
8480
|
+
{
|
|
8481
|
+
id: 'E',
|
|
8482
|
+
title: '@dashboard-management:dashboards.entities.dashboard.fields.scope.options.entity',
|
|
8483
|
+
},
|
|
8484
|
+
],
|
|
8485
|
+
},
|
|
8486
|
+
},
|
|
8487
|
+
},
|
|
8488
|
+
},
|
|
8489
|
+
{
|
|
8490
|
+
name: 'scopeRef.roleIds',
|
|
8491
|
+
title: '@dashboard:roles',
|
|
8492
|
+
groupId: 'access',
|
|
8493
|
+
schema: {
|
|
8494
|
+
dataType: 'object',
|
|
8495
|
+
visible: `{{ !context.eval("scope") || context.eval("scope") === "T" }}`,
|
|
8496
|
+
interface: {
|
|
8497
|
+
type: AXPWidgetsList.Editors.LookupBox,
|
|
8498
|
+
options: {
|
|
8499
|
+
entity: 'SecurityManagement.Role',
|
|
8500
|
+
multiple: true,
|
|
8501
|
+
look: 'select',
|
|
8502
|
+
},
|
|
8503
|
+
},
|
|
8504
|
+
},
|
|
8505
|
+
},
|
|
8506
|
+
],
|
|
8507
|
+
columns: [{ name: 'title' }, { name: 'description' }],
|
|
8508
|
+
interfaces: {
|
|
8509
|
+
master: {
|
|
8510
|
+
create: {
|
|
8511
|
+
sections: [{ id: 'section' }, { id: 'access' }],
|
|
8512
|
+
properties: [
|
|
8513
|
+
{ name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
|
|
8514
|
+
{ name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
|
|
8515
|
+
{ name: 'scopeRef.roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
|
|
8516
|
+
],
|
|
8517
|
+
},
|
|
8518
|
+
update: {
|
|
8519
|
+
sections: [{ id: 'section' }, { id: 'access' }],
|
|
8520
|
+
properties: [
|
|
8521
|
+
{ name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
|
|
8522
|
+
{ name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
|
|
8523
|
+
{ name: 'scopeRef.roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
|
|
8524
|
+
],
|
|
8525
|
+
},
|
|
8526
|
+
single: {
|
|
8527
|
+
title: '{{title}}',
|
|
8528
|
+
sections: [{ id: 'section', layout: { positions: { lg: { colSpan: 12 } } } }, { id: 'access' }],
|
|
8529
|
+
properties: [
|
|
8530
|
+
{ name: 'title', layout: { positions: { lg: { colSpan: 6, order: 1 } } } },
|
|
8531
|
+
{ name: 'description', layout: { positions: { lg: { colSpan: 12, order: 2 } } } },
|
|
8532
|
+
{ name: 'scopeRef.roleIds', layout: { positions: { lg: { colSpan: 12, order: 3 } } } },
|
|
8533
|
+
],
|
|
8534
|
+
actions: [...entityMasterRecordActions()],
|
|
8535
|
+
},
|
|
8536
|
+
list: {
|
|
8537
|
+
actions: [...entityMasterCrudActions()],
|
|
8538
|
+
views: [
|
|
8539
|
+
createQueryView('tenant', '@dashboard-management:dashboards.entities.dashboard.views.tenant', true, {
|
|
8540
|
+
sorts: [{ name: 'title', dir: 'asc' }],
|
|
8541
|
+
conditions: [{ name: 'scope', operator: { type: 'equal' }, value: 'T' }],
|
|
8542
|
+
}),
|
|
8543
|
+
],
|
|
8544
|
+
},
|
|
8545
|
+
},
|
|
8546
|
+
},
|
|
8547
|
+
};
|
|
8548
|
+
return entityDef;
|
|
8549
|
+
}
|
|
8550
|
+
|
|
8551
|
+
//#endregion
|
|
8552
|
+
|
|
8553
|
+
//#region ---- Dashboard Scope Types ----
|
|
8554
|
+
//#endregion
|
|
8555
|
+
|
|
8556
|
+
var index = /*#__PURE__*/Object.freeze({
|
|
8557
|
+
__proto__: null,
|
|
8558
|
+
buildEntityScopeRef: buildEntityScopeRef,
|
|
8559
|
+
buildTenantScopeRef: buildTenantScopeRef,
|
|
8560
|
+
buildUserScopeRef: buildUserScopeRef,
|
|
8561
|
+
dashboardFactory: dashboardFactory,
|
|
8562
|
+
normalizeDashboardScopeRef: normalizeDashboardScopeRef,
|
|
8563
|
+
readScopeEntityRef: readScopeEntityRef,
|
|
8564
|
+
readScopeRoleIds: readScopeRoleIds,
|
|
8565
|
+
readScopeTenantId: readScopeTenantId,
|
|
8566
|
+
readScopeUserId: readScopeUserId
|
|
8567
|
+
});
|
|
8568
|
+
|
|
8569
|
+
// Entity Services
|
|
8570
|
+
// Entity Modules
|
|
8571
|
+
|
|
8572
|
+
//#endregion
|
|
8573
|
+
|
|
7938
8574
|
class AXMDashboardHomeComponent extends AXPPageLayoutBaseComponent {
|
|
7939
8575
|
constructor() {
|
|
7940
8576
|
super(...arguments);
|
|
@@ -8112,7 +8748,7 @@ class AXMDashboardHomeComponent extends AXPPageLayoutBaseComponent {
|
|
|
8112
8748
|
provide: AXPPageLayoutBase,
|
|
8113
8749
|
useExisting: AXMDashboardHomeComponent,
|
|
8114
8750
|
},
|
|
8115
|
-
], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content class=\"ax-relative\">\n @if (store.isLoading()) {\n <div class=\"axm-dashboard-home__skeleton ax-w-full ax-min-h-full\" aria-busy=\"true\" aria-live=\"polite\">\n <div class=\"axm-dashboard-home__skeleton-grid\">\n @for (widget of skeletonWidgets; track widget.id) {\n <article\n class=\"axm-dashboard-home__skeleton-widget\"\n [style.grid-area]=\"widget.area\"\n >\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-title\"></ax-skeleton>\n\n <div class=\"axm-dashboard-home__skeleton-body\">\n @switch (widget.variant) {\n @case ('list') {\n @for (row of skeletonListRows; track row) {\n <div class=\"axm-dashboard-home__skeleton-list-row\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-avatar\"></ax-skeleton>\n <div class=\"axm-dashboard-home__skeleton-list-text\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--wide\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--narrow\"></ax-skeleton>\n </div>\n </div>\n }\n }\n @case ('compact') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-circle\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--medium\"></ax-skeleton>\n }\n @case ('action') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-action\"></ax-skeleton>\n }\n }\n </div>\n </article>\n }\n </div>\n </div>\n } @else if (!store.dashboards().length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:empty-state.title'\"\n [description]=\"'@dashboard:empty-state.description'\"\n >\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"execute({ name: 'new-dashboard' })\" class=\"ax-underline\">\n {{ '@dashboard:add-first-dashboard' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n } @else {\n <axm-dashboard-grid-layout-section\n [widgetsContext]=\"context()\"\n [loadingVariant]=\"'overlay'\"\n (addWidget)=\"execute({ name: 'new-widget' })\"\n ></axm-dashboard-grid-layout-section>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-dashboard-home{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-dashboard-home .placeholder-content{border-radius:.5rem!important;border-width:1px!important;border-style:dashed!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))!important;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5)!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}axm-dashboard-home .axm-dashboard-home__skeleton-grid{display:grid;gap:1rem;padding:1rem;grid-template-columns:repeat(12,minmax(0,1fr));grid-template-rows:repeat(5,minmax(72px,auto));grid-template-areas:\"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"action action action tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\"}axm-dashboard-home .axm-dashboard-home__skeleton-widget{display:flex;min-height:0px;flex-direction:column;gap:.75rem;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-dashboard-home .axm-dashboard-home__skeleton-title{height:1rem;width:8rem;max-width:100%;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-body{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-list-row{display:flex;align-items:center;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-avatar{height:2.5rem;width:2.5rem;flex-shrink:0;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-list-text{display:flex;min-width:0px;flex:1 1 0%;flex-direction:column;gap:.5rem}axm-dashboard-home .axm-dashboard-home__skeleton-line{height:.75rem;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-line--wide{width:100%}axm-dashboard-home .axm-dashboard-home__skeleton-line--medium{width:66.666667%}axm-dashboard-home .axm-dashboard-home__skeleton-line--narrow{width:60%}axm-dashboard-home .axm-dashboard-home__skeleton-circle{height:4rem;width:4rem;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-action{height:2.5rem;width:100%;border-radius:.5rem}@media(max-width:768px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:repeat(6,minmax(0,1fr));grid-template-rows:auto;grid-template-areas:\"clock clock clock notes notes notes\" \"action action action notes notes notes\" \"tasks tasks tasks tasks tasks tasks\" \"notifications notifications notifications notifications notifications notifications\"}}@media(max-width:480px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:\"clock\" \"action\" \"tasks\" \"notifications\" \"notes\"}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: AXMDashboardGridLayoutSectionComponent, selector: "axm-dashboard-grid-layout-section", inputs: ["widgetsContext", "loadingVariant"], outputs: ["addWidget"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
8751
|
+
], usesInheritance: true, ngImport: i0, template: "<axp-page-layout *translate=\"let t\">\n <axp-page-content class=\"ax-relative\">\n @if (store.isLoading()) {\n <div class=\"axm-dashboard-home__skeleton ax-w-full ax-min-h-full\" aria-busy=\"true\" aria-live=\"polite\">\n <div class=\"axm-dashboard-home__skeleton-grid\">\n @for (widget of skeletonWidgets; track widget.id) {\n <article\n class=\"axm-dashboard-home__skeleton-widget\"\n [style.grid-area]=\"widget.area\"\n >\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-title\"></ax-skeleton>\n\n <div class=\"axm-dashboard-home__skeleton-body\">\n @switch (widget.variant) {\n @case ('list') {\n @for (row of skeletonListRows; track row) {\n <div class=\"axm-dashboard-home__skeleton-list-row\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-avatar\"></ax-skeleton>\n <div class=\"axm-dashboard-home__skeleton-list-text\">\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--wide\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--narrow\"></ax-skeleton>\n </div>\n </div>\n }\n }\n @case ('compact') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-circle\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-line axm-dashboard-home__skeleton-line--medium\"></ax-skeleton>\n }\n @case ('action') {\n <ax-skeleton [animated]=\"true\" class=\"axm-dashboard-home__skeleton-action\"></ax-skeleton>\n }\n }\n </div>\n </article>\n }\n </div>\n </div>\n } @else if (!store.dashboards().length) {\n <axp-state-message\n icon=\"fa-light fa-shapes\"\n [title]=\"'@dashboard:empty-state.title'\"\n [description]=\"'@dashboard:empty-state.description'\"\n >\n <div slot=\"actions\">\n <button type=\"button\" (click)=\"execute({ name: 'new-dashboard' })\" class=\"ax-underline\">\n {{ '@dashboard:add-first-dashboard' | translate | async }}\n </button>\n </div>\n </axp-state-message>\n } @else {\n <axm-dashboard-grid-layout-section\n [widgetsContext]=\"context()\"\n [loadingVariant]=\"'overlay'\"\n (addWidget)=\"execute({ name: 'new-widget' })\"\n ></axm-dashboard-grid-layout-section>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["axm-dashboard-home{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-dashboard-home .placeholder-content{border-radius:.5rem!important;border-width:1px!important;border-style:dashed!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))!important;background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5)!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content{border-radius:.5rem!important;border-width:1px!important;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important;background-color:rgb(var(--ax-sys-color-lightest-surface))!important;color:rgb(var(--ax-sys-color-on-lightest-surface))!important;border-color:rgb(var(--ax-sys-color-border-lightest-surface))!important}axm-dashboard-home ax-grid-layout-widget .grid-stack-item-content:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-lighter-surface))!important;color:rgb(var(--ax-sys-color-on-lighter-surface))!important;border-color:rgb(var(--ax-sys-color-border-lighter-surface))!important}axm-dashboard-home .axm-dashboard-home__skeleton-grid{display:grid;gap:1rem;padding:1rem;grid-template-columns:repeat(12,minmax(0,1fr));grid-template-rows:repeat(5,minmax(72px,auto));grid-template-areas:\"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"clock clock clock tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"action action action tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\" \"notes notes notes tasks tasks tasks tasks tasks notifications notifications notifications notifications\"}axm-dashboard-home .axm-dashboard-home__skeleton-widget{display:flex;min-height:0px;flex-direction:column;gap:.75rem;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-dashboard-home .axm-dashboard-home__skeleton-title{height:1rem;width:8rem;max-width:100%;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-body{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-list-row{display:flex;align-items:center;gap:.75rem}axm-dashboard-home .axm-dashboard-home__skeleton-avatar{height:2.5rem;width:2.5rem;flex-shrink:0;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-list-text{display:flex;min-width:0px;flex:1 1 0%;flex-direction:column;gap:.5rem}axm-dashboard-home .axm-dashboard-home__skeleton-line{height:.75rem;border-radius:.25rem}axm-dashboard-home .axm-dashboard-home__skeleton-line--wide{width:100%}axm-dashboard-home .axm-dashboard-home__skeleton-line--medium{width:66.666667%}axm-dashboard-home .axm-dashboard-home__skeleton-line--narrow{width:60%}axm-dashboard-home .axm-dashboard-home__skeleton-circle{height:4rem;width:4rem;border-radius:9999px}axm-dashboard-home .axm-dashboard-home__skeleton-action{height:2.5rem;width:100%;border-radius:.5rem}@media(max-width:768px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:repeat(6,minmax(0,1fr));grid-template-rows:auto;grid-template-areas:\"clock clock clock notes notes notes\" \"action action action notes notes notes\" \"tasks tasks tasks tasks tasks tasks\" \"notifications notifications notifications notifications notifications notifications\"}}@media(max-width:480px){axm-dashboard-home .axm-dashboard-home__skeleton-grid{grid-template-columns:minmax(0,1fr);grid-template-areas:\"clock\" \"action\" \"tasks\" \"notifications\" \"notes\"}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: AXMDashboardGridLayoutSectionComponent, selector: "axm-dashboard-grid-layout-section", inputs: ["widgetsContext", "loadingVariant"], outputs: ["addWidget"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
8116
8752
|
}
|
|
8117
8753
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMDashboardHomeComponent, decorators: [{
|
|
8118
8754
|
type: Component,
|
|
@@ -8213,7 +8849,7 @@ class AXMAddDashboardPopup extends AXBasePageComponent {
|
|
|
8213
8849
|
title: this.multiLanguageResolver.resolve(i.title),
|
|
8214
8850
|
}));
|
|
8215
8851
|
}
|
|
8216
|
-
this.selectedRoleIds.set(this.roles.filter((i) => this.data?.
|
|
8852
|
+
this.selectedRoleIds.set(this.roles.filter((i) => readScopeRoleIds(this.data?.scopeRef).includes(i.id)).map((i) => i.id));
|
|
8217
8853
|
}
|
|
8218
8854
|
catch (error) {
|
|
8219
8855
|
console.error('Error loading roles:', error);
|
|
@@ -8222,16 +8858,19 @@ class AXMAddDashboardPopup extends AXBasePageComponent {
|
|
|
8222
8858
|
}
|
|
8223
8859
|
}
|
|
8224
8860
|
async handleClose(isCanceled = false) {
|
|
8861
|
+
const userId = this.sessionService.user?.id ?? '';
|
|
8862
|
+
const tenantId = this.sessionService.tenant?.id ?? '';
|
|
8863
|
+
const scope = this.showAdminFields() ? 'T' : 'U';
|
|
8225
8864
|
this.close({
|
|
8226
8865
|
title: this.title()?.trim(),
|
|
8227
8866
|
description: this.description()?.trim(),
|
|
8228
|
-
|
|
8867
|
+
scopeRef: scope === 'T' ? buildTenantScopeRef(tenantId, this.selectedRoleIds()) : buildUserScopeRef(userId),
|
|
8229
8868
|
isArchived: this.showAdminFields() ? this.isArchived() : undefined,
|
|
8230
8869
|
locked: this.showAdminFields() ? this.isLocked() : undefined,
|
|
8231
|
-
scope
|
|
8232
|
-
createdBy:
|
|
8870
|
+
scope,
|
|
8871
|
+
createdBy: userId,
|
|
8233
8872
|
createdAt: new Date(),
|
|
8234
|
-
updatedBy:
|
|
8873
|
+
updatedBy: userId,
|
|
8235
8874
|
updatedAt: new Date(),
|
|
8236
8875
|
isCanceled,
|
|
8237
8876
|
});
|
|
@@ -8408,5 +9047,5 @@ var AXPHomeDashboardSetting;
|
|
|
8408
9047
|
* Generated bundle index. Do not edit.
|
|
8409
9048
|
*/
|
|
8410
9049
|
|
|
8411
|
-
export { AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED as $, AXMDashboardStore as A, AXPHeatmapChartWidgetViewComponent as B, AXPHomeDashboardSetting as C, DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY as D, AXPKpiDetailsWidget as E, AXPKpiDetailsWidgetViewComponent as F, AXPKpiProgressWidget as G, AXPKpiProgressWidgetViewComponent as H, AXPKpiSegmentedWidget as I, AXPKpiSegmentedWidgetViewComponent as J, AXPKpiStatCardWidget as K, AXPKpiStatCardWidgetViewComponent as L, AXPLineChartWidget as M, AXPLineChartWidgetViewComponent as N, AXPMinimalWeatherWidget as O, AXPShortcutWidget as P, AXPShortcutWidgetViewComponent as Q, AXPStickyNoteWidget as R, AXPStickyNoteWidgetViewComponent as S, AXPWeatherApiAbstract as T, AXPWeatherApiMockService as U, AXPWeatherApiService as V, AXPWeatherWidget as W, AXPWeatherWidgetViewComponent as X, AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN as Y, AXP_DASHBOARD_SHARED_SUB_CHART_KPI as Z, AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL as _, AXMDashboardGridLayoutSectionComponent as a, AXP_DASHBOARD_SHARED_SUB_UTILITY_NOTES as a0, AXP_DASHBOARD_SHARED_SUB_UTILITY_SHORTCUT as a1, AXP_DASHBOARD_SHARED_SUB_UTILITY_TIME as a2, AXP_DASHBOARD_SHARED_SUB_UTILITY_WEATHER as a3, AXP_DATE_FORMAT_OPTIONS as a4, AXP_TIMEZONE_OPTIONS as a5, AXP_WIDGETS_CHART_CATEGORY as a6, AXP_WIDGETS_UTILITY_CATEGORY as a7, RootConfig as a8,
|
|
8412
|
-
//# sourceMappingURL=acorex-modules-dashboard-management-acorex-modules-dashboard-management-
|
|
9050
|
+
export { AXP_DASHBOARD_SHARED_SUB_CHART_SPECIALIZED as $, AXMDashboardStore as A, AXPHeatmapChartWidgetViewComponent as B, AXPHomeDashboardSetting as C, DASHBOARD_LAYOUT_PAGE_COMPONENT_KEY as D, AXPKpiDetailsWidget as E, AXPKpiDetailsWidgetViewComponent as F, AXPKpiProgressWidget as G, AXPKpiProgressWidgetViewComponent as H, AXPKpiSegmentedWidget as I, AXPKpiSegmentedWidgetViewComponent as J, AXPKpiStatCardWidget as K, AXPKpiStatCardWidgetViewComponent as L, AXPLineChartWidget as M, AXPLineChartWidgetViewComponent as N, AXPMinimalWeatherWidget as O, AXPShortcutWidget as P, AXPShortcutWidgetViewComponent as Q, AXPStickyNoteWidget as R, AXPStickyNoteWidgetViewComponent as S, AXPWeatherApiAbstract as T, AXPWeatherApiMockService as U, AXPWeatherApiService as V, AXPWeatherWidget as W, AXPWeatherWidgetViewComponent as X, AXP_DASHBOARD_SHARED_SUB_CHART_CARTESIAN as Y, AXP_DASHBOARD_SHARED_SUB_CHART_KPI as Z, AXP_DASHBOARD_SHARED_SUB_CHART_RADIAL as _, AXMDashboardGridLayoutSectionComponent as a, AXP_DASHBOARD_SHARED_SUB_UTILITY_NOTES as a0, AXP_DASHBOARD_SHARED_SUB_UTILITY_SHORTCUT as a1, AXP_DASHBOARD_SHARED_SUB_UTILITY_TIME as a2, AXP_DASHBOARD_SHARED_SUB_UTILITY_WEATHER as a3, AXP_DATE_FORMAT_OPTIONS as a4, AXP_TIMEZONE_OPTIONS as a5, AXP_WIDGETS_CHART_CATEGORY as a6, AXP_WIDGETS_UTILITY_CATEGORY as a7, RootConfig as a8, buildEntityScopeRef as a9, buildTenantScopeRef as aa, buildUserScopeRef as ab, dashboardFactory as ac, normalizeDashboardScopeRef as ad, readScopeEntityRef as ae, readScopeRoleIds as af, readScopeTenantId as ag, readScopeUserId as ah, DASHBOARD_LAYOUT_ENTITY_MODE as b, AXMAddDashboardPopup as c, AXMAdvancedWeatherViewComponent as d, AXMAnalogClockComponent as e, AXMClockWidgetViewComponent as f, AXMConfigurationPopup as g, AXMDashboardHomeComponent as h, AXMDashboardManagementModule as i, AXMDashboardPopupService as j, AXMDashboardWidgetWrapperComponent as k, AXMMinimalWeatherViewComponent as l, AXPAdvancedWeatherWidget as m, AXPAnalogClockWidget as n, AXPBarChartWidget as o, AXPBarChartWidgetViewComponent as p, AXPClockCalendarWidget as q, AXPClockCalendarWidgetViewComponent as r, AXPDashboardWidgetComponent as s, AXPDonutChartWidget as t, AXPDonutChartWidgetViewComponent as u, AXPFunnelChartWidget as v, AXPFunnelChartWidgetViewComponent as w, AXPGaugeChartWidget as x, AXPGaugeChartWidgetViewComponent as y, AXPHeatmapChartWidget as z };
|
|
9051
|
+
//# sourceMappingURL=acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map
|