@acorex/modules 21.0.0-next.71 → 21.0.0-next.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/fesm2022/acorex-modules-ai-management.mjs +102 -6
  2. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-BnfSTevp.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-D7bHX4-0.mjs} +50 -39
  4. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-D7bHX4-0.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BWMbcZFT.mjs → acorex-modules-assessment-management-assessment-case.entity-Cpbj5sCP.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BWMbcZFT.mjs.map → acorex-modules-assessment-management-assessment-case.entity-Cpbj5sCP.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-B42XNJUV.mjs → acorex-modules-assessment-management-assessment-session-answers-view.util-ALsxM0ww.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-B42XNJUV.mjs.map → acorex-modules-assessment-management-assessment-session-answers-view.util-ALsxM0ww.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-osEWRiw1.mjs → acorex-modules-assessment-management-assessment-session.entity-CMW7wsoN.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-osEWRiw1.mjs.map → acorex-modules-assessment-management-assessment-session.entity-CMW7wsoN.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs → acorex-modules-assessment-management-fill-assessment-session.command-C-dGKO7p.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-C-dGKO7p.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs → acorex-modules-assessment-management-preview-question.command-CBewUZSF.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs.map → acorex-modules-assessment-management-preview-question.command-CBewUZSF.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BUUnlr7g.mjs → acorex-modules-assessment-management-preview-questionnaire.command-DlwBZ7mO.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BUUnlr7g.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-DlwBZ7mO.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BvqEePUh.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BEhxeR8A.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BvqEePUh.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BEhxeR8A.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DZBQOgAg.mjs → acorex-modules-assessment-management-question-bank-item.entity-CfCWKqN5.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DZBQOgAg.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-CfCWKqN5.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BMv-XkZk.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-C03wF6Oy.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BMv-XkZk.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-C03wF6Oy.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-BGkWU83k.mjs → acorex-modules-assessment-management-questionnaire.entity-CPMGkhGu.mjs} +2 -2
  24. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-BGkWU83k.mjs.map → acorex-modules-assessment-management-questionnaire.entity-CPMGkhGu.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs → acorex-modules-assessment-management-review-assessment-session.command-XK3IK3MH.mjs} +3 -3
  26. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs.map → acorex-modules-assessment-management-review-assessment-session.command-XK3IK3MH.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-2LB7JKZx.mjs → acorex-modules-assessment-management-view-session-answers.command-BPoF0v9C.mjs} +3 -3
  28. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-2LB7JKZx.mjs.map → acorex-modules-assessment-management-view-session-answers.command-BPoF0v9C.mjs.map} +1 -1
  29. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  30. package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BdiaXlkx.mjs → acorex-modules-asset-management-acorex-modules-asset-management-BCs0QS-r.mjs} +11 -8
  31. package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BdiaXlkx.mjs.map → acorex-modules-asset-management-acorex-modules-asset-management-BCs0QS-r.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-Bf9nJTkD.mjs → acorex-modules-asset-management-asset-system-assignment.entity-B0sf4MzL.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-Bf9nJTkD.mjs.map → acorex-modules-asset-management-asset-system-assignment.entity-B0sf4MzL.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-Cbzu3bqC.mjs → acorex-modules-asset-management-asset-system-type.entity-Cpcgr3KS.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-Cbzu3bqC.mjs.map → acorex-modules-asset-management-asset-system-type.entity-Cpcgr3KS.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DA7dO3eE.mjs → acorex-modules-asset-management-asset-system.entity-CEuEjyuQ.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DA7dO3eE.mjs.map → acorex-modules-asset-management-asset-system.entity-CEuEjyuQ.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-C9B-TUQD.mjs → acorex-modules-asset-management-asset-type-section-component.entity-CwaPrUlk.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-C9B-TUQD.mjs.map → acorex-modules-asset-management-asset-type-section-component.entity-CwaPrUlk.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BNz1Zfox.mjs → acorex-modules-asset-management-asset-type-section.entity-CK0dAIU4.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BNz1Zfox.mjs.map → acorex-modules-asset-management-asset-type-section.entity-CK0dAIU4.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-asset-management-asset-type.entity-D_bBxBKI.mjs → acorex-modules-asset-management-asset-type.entity-DexywYoA.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-asset-management-asset-type.entity-D_bBxBKI.mjs.map → acorex-modules-asset-management-asset-type.entity-DexywYoA.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-asset-management-asset.entity-Cf_H7edH.mjs → acorex-modules-asset-management-asset.entity-BNj3kuHC.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-asset-management-asset.entity-Cf_H7edH.mjs.map → acorex-modules-asset-management-asset.entity-BNj3kuHC.mjs.map} +1 -1
  46. package/fesm2022/acorex-modules-asset-management.mjs +1 -1
  47. package/fesm2022/acorex-modules-auth-acorex-modules-auth-JEkso4J7.mjs +1580 -0
  48. package/fesm2022/acorex-modules-auth-acorex-modules-auth-JEkso4J7.mjs.map +1 -0
  49. package/fesm2022/{acorex-modules-auth-app-chooser.component-DTlzE1Rd.mjs → acorex-modules-auth-app-chooser.component-MjGWaBI0.mjs} +5 -6
  50. package/fesm2022/acorex-modules-auth-app-chooser.component-MjGWaBI0.mjs.map +1 -0
  51. package/fesm2022/acorex-modules-auth-change-password.command-Ctyw3WfE.mjs +32 -0
  52. package/fesm2022/acorex-modules-auth-change-password.command-Ctyw3WfE.mjs.map +1 -0
  53. package/fesm2022/acorex-modules-auth-change-photo.command-_vxTFH0X.mjs +32 -0
  54. package/fesm2022/acorex-modules-auth-change-photo.command-_vxTFH0X.mjs.map +1 -0
  55. package/fesm2022/acorex-modules-auth-edit-signature.command-CcTJJwAX.mjs +32 -0
  56. package/fesm2022/acorex-modules-auth-edit-signature.command-CcTJJwAX.mjs.map +1 -0
  57. package/fesm2022/{acorex-modules-auth-login.module-DSQfhKUZ.mjs → acorex-modules-auth-login.module-FJxkiTeX.mjs} +4 -4
  58. package/fesm2022/{acorex-modules-auth-login.module-DSQfhKUZ.mjs.map → acorex-modules-auth-login.module-FJxkiTeX.mjs.map} +1 -1
  59. package/fesm2022/{acorex-modules-auth-master.layout-BDM5XtcM.mjs → acorex-modules-auth-master.layout-B4Vpqg2F.mjs} +2 -2
  60. package/fesm2022/{acorex-modules-auth-master.layout-BDM5XtcM.mjs.map → acorex-modules-auth-master.layout-B4Vpqg2F.mjs.map} +1 -1
  61. package/fesm2022/{acorex-modules-auth-oauth-callback.component-C4Q78fuo.mjs → acorex-modules-auth-oauth-callback.component-It5tkYuf.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-auth-oauth-callback.component-C4Q78fuo.mjs.map → acorex-modules-auth-oauth-callback.component-It5tkYuf.mjs.map} +1 -1
  63. package/fesm2022/{acorex-modules-auth-user-sessions.component-ChF8OYdd.mjs → acorex-modules-auth-open-sessions.command-Qik0eKUR.mjs} +32 -7
  64. package/fesm2022/acorex-modules-auth-open-sessions.command-Qik0eKUR.mjs.map +1 -0
  65. package/fesm2022/{acorex-modules-auth-password.component-C_55t9er.mjs → acorex-modules-auth-password.component-B2BIaXZ_.mjs} +2 -2
  66. package/fesm2022/{acorex-modules-auth-password.component-C_55t9er.mjs.map → acorex-modules-auth-password.component-B2BIaXZ_.mjs.map} +1 -1
  67. package/fesm2022/{acorex-modules-auth-password.component-VwEsbfR1.mjs → acorex-modules-auth-password.component-BRnlp4j1.mjs} +6 -6
  68. package/fesm2022/{acorex-modules-auth-password.component-VwEsbfR1.mjs.map → acorex-modules-auth-password.component-BRnlp4j1.mjs.map} +1 -1
  69. package/fesm2022/acorex-modules-auth-profile-activity-chart.component-CmtkTEI5.mjs +177 -0
  70. package/fesm2022/acorex-modules-auth-profile-activity-chart.component-CmtkTEI5.mjs.map +1 -0
  71. package/fesm2022/acorex-modules-auth-profile-coming-soon.command-DBbFbzAx.mjs +31 -0
  72. package/fesm2022/acorex-modules-auth-profile-coming-soon.command-DBbFbzAx.mjs.map +1 -0
  73. package/fesm2022/acorex-modules-auth-profile-delete-account-danger-zone.component-62K4A_lM.mjs +78 -0
  74. package/fesm2022/acorex-modules-auth-profile-delete-account-danger-zone.component-62K4A_lM.mjs.map +1 -0
  75. package/fesm2022/acorex-modules-auth-profile-page-component.provider-Dz9yFSnA.mjs +27 -0
  76. package/fesm2022/acorex-modules-auth-profile-page-component.provider-Dz9yFSnA.mjs.map +1 -0
  77. package/fesm2022/acorex-modules-auth-profile-page.component-BGkPr1_o.mjs +370 -0
  78. package/fesm2022/acorex-modules-auth-profile-page.component-BGkPr1_o.mjs.map +1 -0
  79. package/fesm2022/{acorex-modules-auth-routes-prPiMAL6.mjs → acorex-modules-auth-routes-D6PLdcTC.mjs} +2 -2
  80. package/fesm2022/{acorex-modules-auth-routes-prPiMAL6.mjs.map → acorex-modules-auth-routes-D6PLdcTC.mjs.map} +1 -1
  81. package/fesm2022/acorex-modules-auth-signout-command-IUSkq50M.mjs +24 -0
  82. package/fesm2022/acorex-modules-auth-signout-command-IUSkq50M.mjs.map +1 -0
  83. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DVyI9cGU.mjs → acorex-modules-auth-tenant-chooser.component-qGfNSQ6H.mjs} +2 -2
  84. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DVyI9cGU.mjs.map → acorex-modules-auth-tenant-chooser.component-qGfNSQ6H.mjs.map} +1 -1
  85. package/fesm2022/{acorex-modules-auth-two-factor.module-C7vZrBHK.mjs → acorex-modules-auth-two-factor.module-DcvqZOIq.mjs} +2 -2
  86. package/fesm2022/{acorex-modules-auth-two-factor.module-C7vZrBHK.mjs.map → acorex-modules-auth-two-factor.module-DcvqZOIq.mjs.map} +1 -1
  87. package/fesm2022/acorex-modules-auth.mjs +1 -1
  88. package/fesm2022/acorex-modules-business-core.mjs +2 -2
  89. package/fesm2022/acorex-modules-business-core.mjs.map +1 -1
  90. package/fesm2022/acorex-modules-calendar-management-datasource.provider-CnxTy81J.mjs +225 -0
  91. package/fesm2022/acorex-modules-calendar-management-datasource.provider-CnxTy81J.mjs.map +1 -0
  92. package/fesm2022/acorex-modules-calendar-management.mjs +481 -392
  93. package/fesm2022/acorex-modules-calendar-management.mjs.map +1 -1
  94. package/fesm2022/acorex-modules-common.mjs +63 -26
  95. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  96. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-B1ijk48q.mjs → acorex-modules-conversation-acorex-modules-conversation-BX09r8Xj.mjs} +178 -35
  97. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-BX09r8Xj.mjs.map +1 -0
  98. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Mlan0ADR.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-hMiSfvL2.mjs} +5 -5
  99. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Mlan0ADR.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-hMiSfvL2.mjs.map} +1 -1
  100. package/fesm2022/{acorex-modules-conversation-comments-page.component--Q5RxEyI.mjs → acorex-modules-conversation-comments-page.component-BJu6CoNR.mjs} +18 -6
  101. package/fesm2022/acorex-modules-conversation-comments-page.component-BJu6CoNR.mjs.map +1 -0
  102. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command--_hCn9Et.mjs → acorex-modules-conversation-send-assist-chat-message.command-B471NQRh.mjs} +2 -2
  103. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command--_hCn9Et.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-B471NQRh.mjs.map} +1 -1
  104. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BE1BPjj2.mjs → acorex-modules-conversation-start-assist-chat.command-CasClVbR.mjs} +2 -2
  105. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BE1BPjj2.mjs.map → acorex-modules-conversation-start-assist-chat.command-CasClVbR.mjs.map} +1 -1
  106. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  107. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DJMJFziT.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-9MoalNjW.mjs} +6 -6
  108. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-9MoalNjW.mjs.map +1 -0
  109. package/fesm2022/{acorex-modules-dashboard-management-index-DoTVg9ro.mjs → acorex-modules-dashboard-management-index-Dsu3Yw8O.mjs} +2 -2
  110. package/fesm2022/{acorex-modules-dashboard-management-index-DoTVg9ro.mjs.map → acorex-modules-dashboard-management-index-Dsu3Yw8O.mjs.map} +1 -1
  111. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  112. package/fesm2022/{acorex-modules-data-management-index-DEm_BsbE.mjs → acorex-modules-data-management-index-CxVSgxTM.mjs} +4 -1
  113. package/fesm2022/acorex-modules-data-management-index-CxVSgxTM.mjs.map +1 -0
  114. package/fesm2022/acorex-modules-data-management.mjs +2 -2
  115. package/fesm2022/acorex-modules-document-management.mjs +6 -3
  116. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  117. package/fesm2022/acorex-modules-financial-core.mjs +7 -7
  118. package/fesm2022/acorex-modules-financial-core.mjs.map +1 -1
  119. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-C1lNgBrC.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-Cb7_mEJt.mjs} +71 -26
  120. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Cb7_mEJt.mjs.map +1 -0
  121. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-CDBhDXr8.mjs → acorex-modules-human-capital-management-approve-leave-request.command-wO2u1IKg.mjs} +2 -2
  122. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-CDBhDXr8.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-wO2u1IKg.mjs.map} +1 -1
  123. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-pz0IOxa3.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-BDesaehJ.mjs} +2 -2
  124. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-pz0IOxa3.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-BDesaehJ.mjs.map} +1 -1
  125. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-Czwdu-nH.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-D8u45bHk.mjs} +2 -2
  126. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-Czwdu-nH.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-D8u45bHk.mjs.map} +1 -1
  127. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-ZTRqQfRv.mjs → acorex-modules-human-capital-management-employee.entity-sq1G--OE.mjs} +3 -3
  128. package/fesm2022/acorex-modules-human-capital-management-employee.entity-sq1G--OE.mjs.map +1 -0
  129. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BIIc7EpP.mjs → acorex-modules-human-capital-management-employment-type.entity-qgNm-AAZ.mjs} +2 -2
  130. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BIIc7EpP.mjs.map → acorex-modules-human-capital-management-employment-type.entity-qgNm-AAZ.mjs.map} +1 -1
  131. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-Bmv7oLAr.mjs → acorex-modules-human-capital-management-leave-request.entity-DcdYnwyN.mjs} +2 -2
  132. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-Bmv7oLAr.mjs.map → acorex-modules-human-capital-management-leave-request.entity-DcdYnwyN.mjs.map} +1 -1
  133. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-OwdxjYKk.mjs → acorex-modules-human-capital-management-leave-type.entity-Dr5YHs8p.mjs} +2 -2
  134. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-OwdxjYKk.mjs.map → acorex-modules-human-capital-management-leave-type.entity-Dr5YHs8p.mjs.map} +1 -1
  135. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event-type.entity-C_XVrmZt.mjs → acorex-modules-human-capital-management-lifecycle-event-type.entity-Bni4vgt5.mjs} +2 -2
  136. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event-type.entity-C_XVrmZt.mjs.map → acorex-modules-human-capital-management-lifecycle-event-type.entity-Bni4vgt5.mjs.map} +1 -1
  137. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event.entity-BwLAEtqA.mjs → acorex-modules-human-capital-management-lifecycle-event.entity-ds4Iq82f.mjs} +5 -5
  138. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-ds4Iq82f.mjs.map +1 -0
  139. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-DdMmiGbn.mjs → acorex-modules-human-capital-management-position-assignment.entity-CalDJQrD.mjs} +2 -2
  140. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-DdMmiGbn.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-CalDJQrD.mjs.map} +1 -1
  141. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Bdwwkcs3.mjs → acorex-modules-human-capital-management-reject-leave-request.command-CshyWVLH.mjs} +2 -2
  142. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-Bdwwkcs3.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-CshyWVLH.mjs.map} +1 -1
  143. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-Cq-aA79w.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-BENxT4Qg.mjs} +2 -2
  144. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-Cq-aA79w.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-BENxT4Qg.mjs.map} +1 -1
  145. package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-Cx9TRMlY.mjs → acorex-modules-human-capital-management-start-leave-request-flow.command-DjkzwxHN.mjs} +17 -5
  146. package/fesm2022/acorex-modules-human-capital-management-start-leave-request-flow.command-DjkzwxHN.mjs.map +1 -0
  147. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DjepuAcu.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-x8J2kneo.mjs} +2 -2
  148. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DjepuAcu.mjs.map → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-x8J2kneo.mjs.map} +1 -1
  149. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  150. package/fesm2022/{acorex-modules-learning-management-course.entity-DUUgeikJ.mjs → acorex-modules-learning-management-course.entity-BG6TaQk4.mjs} +4 -4
  151. package/fesm2022/acorex-modules-learning-management-course.entity-BG6TaQk4.mjs.map +1 -0
  152. package/fesm2022/{acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs → acorex-modules-learning-management-enrollment.entity-DjpUDcLv.mjs} +5 -5
  153. package/fesm2022/acorex-modules-learning-management-enrollment.entity-DjpUDcLv.mjs.map +1 -0
  154. package/fesm2022/{acorex-modules-learning-management-learning-path.entity-Zo--bDto.mjs → acorex-modules-learning-management-learning-path.entity-C2S0VVeq.mjs} +2 -2
  155. package/fesm2022/acorex-modules-learning-management-learning-path.entity-C2S0VVeq.mjs.map +1 -0
  156. package/fesm2022/{acorex-modules-learning-management-skill.entity-VXkLbaD4.mjs → acorex-modules-learning-management-skill.entity-DAM-_nuT.mjs} +2 -2
  157. package/fesm2022/acorex-modules-learning-management-skill.entity-DAM-_nuT.mjs.map +1 -0
  158. package/fesm2022/{acorex-modules-learning-management-training.entity-C4KDv1uh.mjs → acorex-modules-learning-management-training.entity-THsY3DiM.mjs} +4 -4
  159. package/fesm2022/acorex-modules-learning-management-training.entity-THsY3DiM.mjs.map +1 -0
  160. package/fesm2022/acorex-modules-learning-management.mjs +5 -5
  161. package/fesm2022/{acorex-modules-locale-management-profiles-BOveGIcE.mjs → acorex-modules-locale-management-profiles-BYZa_Ti0.mjs} +23 -8
  162. package/fesm2022/acorex-modules-locale-management-profiles-BYZa_Ti0.mjs.map +1 -0
  163. package/fesm2022/acorex-modules-locale-management.mjs +31 -15
  164. package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
  165. package/fesm2022/acorex-modules-location-management.mjs +4 -4
  166. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  167. package/fesm2022/{acorex-modules-maintenance-management-acorex-modules-maintenance-management-DiM2aFgg.mjs → acorex-modules-maintenance-management-acorex-modules-maintenance-management-Xyu3jpEh.mjs} +14 -14
  168. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-Xyu3jpEh.mjs.map +1 -0
  169. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-BCMeHmxS.mjs → acorex-modules-maintenance-management-failure-effect.entity-CYQ3ExC3.mjs} +2 -2
  170. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-BCMeHmxS.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-CYQ3ExC3.mjs.map} +1 -1
  171. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-ByBoVQ8D.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-Cz0tQkwZ.mjs} +2 -2
  172. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-ByBoVQ8D.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-Cz0tQkwZ.mjs.map} +1 -1
  173. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-BJs4KhkU.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-vqX88zIA.mjs} +2 -2
  174. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-BJs4KhkU.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-vqX88zIA.mjs.map} +1 -1
  175. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-rw24sQxb.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-CpefPKAY.mjs} +2 -2
  176. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-rw24sQxb.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-CpefPKAY.mjs.map} +1 -1
  177. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-C_6sjW8z.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-C1_4BQBR.mjs} +2 -2
  178. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-C_6sjW8z.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-C1_4BQBR.mjs.map} +1 -1
  179. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DCIAzSYQ.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-BRssxEl6.mjs} +2 -2
  180. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DCIAzSYQ.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-BRssxEl6.mjs.map} +1 -1
  181. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-DlXr6A4i.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-YyBWG00N.mjs} +2 -2
  182. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-DlXr6A4i.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-YyBWG00N.mjs.map} +1 -1
  183. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4J3um7j.mjs → acorex-modules-maintenance-management-failure-register.entity-CH-C6Q7m.mjs} +2 -2
  184. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4J3um7j.mjs.map → acorex-modules-maintenance-management-failure-register.entity-CH-C6Q7m.mjs.map} +1 -1
  185. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-C-spQtYx.mjs → acorex-modules-maintenance-management-failure-severity.entity-BMoUEcVC.mjs} +2 -2
  186. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-C-spQtYx.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-BMoUEcVC.mjs.map} +1 -1
  187. package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-Huahnjhd.mjs → acorex-modules-maintenance-management-maintenance-template.entity-CBayAtRD.mjs} +2 -2
  188. package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-Huahnjhd.mjs.map → acorex-modules-maintenance-management-maintenance-template.entity-CBayAtRD.mjs.map} +1 -1
  189. package/fesm2022/{acorex-modules-maintenance-management-work-order-list-command-1YsWctqu.mjs → acorex-modules-maintenance-management-work-order-list-command-mMZGiG3q.mjs} +2 -2
  190. package/fesm2022/{acorex-modules-maintenance-management-work-order-list-command-1YsWctqu.mjs.map → acorex-modules-maintenance-management-work-order-list-command-mMZGiG3q.mjs.map} +1 -1
  191. package/fesm2022/acorex-modules-maintenance-management.mjs +1 -1
  192. package/fesm2022/acorex-modules-measurement-core.mjs +4 -4
  193. package/fesm2022/acorex-modules-measurement-core.mjs.map +1 -1
  194. package/fesm2022/acorex-modules-notification-management-acorex-modules-notification-management-BSf1wd6j.mjs +3836 -0
  195. package/fesm2022/acorex-modules-notification-management-acorex-modules-notification-management-BSf1wd6j.mjs.map +1 -0
  196. package/fesm2022/acorex-modules-notification-management-notification-page.component-ATFOFL7C.mjs +548 -0
  197. package/fesm2022/acorex-modules-notification-management-notification-page.component-ATFOFL7C.mjs.map +1 -0
  198. package/fesm2022/acorex-modules-notification-management.mjs +1 -3590
  199. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  200. package/fesm2022/{acorex-modules-order-management-bulk-buy-order-item.entity-DGtHoqqj.mjs → acorex-modules-order-management-bulk-buy-order-item.entity-63BpszqL.mjs} +2 -2
  201. package/fesm2022/acorex-modules-order-management-bulk-buy-order-item.entity-63BpszqL.mjs.map +1 -0
  202. package/fesm2022/{acorex-modules-order-management-entity.provider-DVHBXOCD.mjs → acorex-modules-order-management-entity.provider-DGwVhM91.mjs} +3 -3
  203. package/fesm2022/{acorex-modules-order-management-entity.provider-DVHBXOCD.mjs.map → acorex-modules-order-management-entity.provider-DGwVhM91.mjs.map} +1 -1
  204. package/fesm2022/{acorex-modules-order-management-member-order-line.entity-DZJ90WHI.mjs → acorex-modules-order-management-member-order-line.entity-Czu7qE7i.mjs} +2 -2
  205. package/fesm2022/acorex-modules-order-management-member-order-line.entity-Czu7qE7i.mjs.map +1 -0
  206. package/fesm2022/acorex-modules-order-management.mjs +2 -2
  207. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-Iopv_G-d.mjs → acorex-modules-organization-management-acorex-modules-organization-management-smWojO0l.mjs} +40 -40
  208. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-Iopv_G-d.mjs.map → acorex-modules-organization-management-acorex-modules-organization-management-smWojO0l.mjs.map} +1 -1
  209. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-D7NChP_A.mjs → acorex-modules-organization-management-add-business-unit-to-business-unit.command-BLifgeRF.mjs} +2 -2
  210. package/fesm2022/{acorex-modules-organization-management-add-business-unit-to-business-unit.command-D7NChP_A.mjs.map → acorex-modules-organization-management-add-business-unit-to-business-unit.command-BLifgeRF.mjs.map} +1 -1
  211. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-PkeqXFt1.mjs → acorex-modules-organization-management-add-position-to-business-unit.command-CKFqYBLD.mjs} +2 -2
  212. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-PkeqXFt1.mjs.map → acorex-modules-organization-management-add-position-to-business-unit.command-CKFqYBLD.mjs.map} +1 -1
  213. package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-jalyX-F4.mjs → acorex-modules-organization-management-add-team-to-business-unit.command-DfaLXvTw.mjs} +2 -2
  214. package/fesm2022/{acorex-modules-organization-management-add-team-to-business-unit.command-jalyX-F4.mjs.map → acorex-modules-organization-management-add-team-to-business-unit.command-DfaLXvTw.mjs.map} +1 -1
  215. package/fesm2022/{acorex-modules-organization-management-business-unit.entity-CBjAC9Ip.mjs → acorex-modules-organization-management-business-unit.entity-BkeFPaIT.mjs} +2 -2
  216. package/fesm2022/{acorex-modules-organization-management-business-unit.entity-CBjAC9Ip.mjs.map → acorex-modules-organization-management-business-unit.entity-BkeFPaIT.mjs.map} +1 -1
  217. package/fesm2022/{acorex-modules-organization-management-chart.entity-CaY_5LGN.mjs → acorex-modules-organization-management-chart.entity-bWx4IFSv.mjs} +2 -2
  218. package/fesm2022/{acorex-modules-organization-management-chart.entity-CaY_5LGN.mjs.map → acorex-modules-organization-management-chart.entity-bWx4IFSv.mjs.map} +1 -1
  219. package/fesm2022/{acorex-modules-organization-management-company.entity-BUBhqyCn.mjs → acorex-modules-organization-management-company.entity-yPUVhIzy.mjs} +2 -2
  220. package/fesm2022/{acorex-modules-organization-management-company.entity-BUBhqyCn.mjs.map → acorex-modules-organization-management-company.entity-yPUVhIzy.mjs.map} +1 -1
  221. package/fesm2022/{acorex-modules-organization-management-entity.provider-BZsy_wi6.mjs → acorex-modules-organization-management-entity.provider-IhJwnzd-.mjs} +15 -15
  222. package/fesm2022/{acorex-modules-organization-management-entity.provider-BZsy_wi6.mjs.map → acorex-modules-organization-management-entity.provider-IhJwnzd-.mjs.map} +1 -1
  223. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-CEO1nSFP.mjs → acorex-modules-organization-management-feature-definition.provider-B5yqFa4Z.mjs} +2 -2
  224. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-CEO1nSFP.mjs.map → acorex-modules-organization-management-feature-definition.provider-B5yqFa4Z.mjs.map} +1 -1
  225. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-ChRGp5ZI.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-C51sgWyG.mjs} +3 -3
  226. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-ChRGp5ZI.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-C51sgWyG.mjs.map} +1 -1
  227. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-aWZO09Xw.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-EEWB5VUq.mjs} +8 -3
  228. package/fesm2022/acorex-modules-organization-management-job-definition-responsibilities-page.component-EEWB5VUq.mjs.map +1 -0
  229. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-DJcFhQM9.mjs → acorex-modules-organization-management-job-definition-skills-page.component-L2GmFRra.mjs} +7 -2
  230. package/fesm2022/acorex-modules-organization-management-job-definition-skills-page.component-L2GmFRra.mjs.map +1 -0
  231. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-BoM49wYi.mjs → acorex-modules-organization-management-job-definition.entity-CDXsJADe.mjs} +2 -2
  232. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-BoM49wYi.mjs.map → acorex-modules-organization-management-job-definition.entity-CDXsJADe.mjs.map} +1 -1
  233. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DbQG79uR.mjs → acorex-modules-organization-management-job-level.datasource-C84zFgVo.mjs} +2 -2
  234. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-DbQG79uR.mjs.map → acorex-modules-organization-management-job-level.datasource-C84zFgVo.mjs.map} +1 -1
  235. package/fesm2022/{acorex-modules-organization-management-job-level.entity-XO-NsBG-.mjs → acorex-modules-organization-management-job-level.entity-BqjP04k-.mjs} +2 -2
  236. package/fesm2022/{acorex-modules-organization-management-job-level.entity-XO-NsBG-.mjs.map → acorex-modules-organization-management-job-level.entity-BqjP04k-.mjs.map} +1 -1
  237. package/fesm2022/{acorex-modules-organization-management-menu.provider-DXW6aUIX.mjs → acorex-modules-organization-management-menu.provider-ChR3Rh4W.mjs} +2 -2
  238. package/fesm2022/{acorex-modules-organization-management-menu.provider-DXW6aUIX.mjs.map → acorex-modules-organization-management-menu.provider-ChR3Rh4W.mjs.map} +1 -1
  239. package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-ClKr6K6Y.mjs → acorex-modules-organization-management-org-chart-default-node-contribution.provider-DFVts4Q2.mjs} +2 -2
  240. package/fesm2022/{acorex-modules-organization-management-org-chart-default-node-contribution.provider-ClKr6K6Y.mjs.map → acorex-modules-organization-management-org-chart-default-node-contribution.provider-DFVts4Q2.mjs.map} +1 -1
  241. package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-BjIDzwXF.mjs → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-D1r0YQbL.mjs} +2 -2
  242. package/fesm2022/{acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-BjIDzwXF.mjs.map → acorex-modules-organization-management-org-chart-employee-flyout-contribution.provider-D1r0YQbL.mjs.map} +1 -1
  243. package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-DRAlUmIa.mjs → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Df1x_VF0.mjs} +2 -2
  244. package/fesm2022/{acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-DRAlUmIa.mjs.map → acorex-modules-organization-management-org-chart-position-employee-node-contribution.provider-Df1x_VF0.mjs.map} +1 -1
  245. package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DwSjov_Z.mjs → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BPWFJSx2.mjs} +2 -2
  246. package/fesm2022/{acorex-modules-organization-management-org-chart-ux-node-contribution.provider-DwSjov_Z.mjs.map → acorex-modules-organization-management-org-chart-ux-node-contribution.provider-BPWFJSx2.mjs.map} +1 -1
  247. package/fesm2022/{acorex-modules-organization-management-org-chart.page-CuPEM-_N.mjs → acorex-modules-organization-management-org-chart.page-BzKPjJwY.mjs} +2 -2
  248. package/fesm2022/{acorex-modules-organization-management-org-chart.page-CuPEM-_N.mjs.map → acorex-modules-organization-management-org-chart.page-BzKPjJwY.mjs.map} +1 -1
  249. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BNthP0QV.mjs → acorex-modules-organization-management-permission-definition.provider-DShSa-Wp.mjs} +2 -2
  250. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-BNthP0QV.mjs.map → acorex-modules-organization-management-permission-definition.provider-DShSa-Wp.mjs.map} +1 -1
  251. package/fesm2022/{acorex-modules-organization-management-position.entity-Cja3CYmL.mjs → acorex-modules-organization-management-position.entity-DyF02saN.mjs} +2 -2
  252. package/fesm2022/{acorex-modules-organization-management-position.entity-Cja3CYmL.mjs.map → acorex-modules-organization-management-position.entity-DyF02saN.mjs.map} +1 -1
  253. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-Dm1a6-uO.mjs → acorex-modules-organization-management-remove-position-from-business-unit.command-CGYBDMLJ.mjs} +2 -2
  254. package/fesm2022/{acorex-modules-organization-management-remove-position-from-business-unit.command-Dm1a6-uO.mjs.map → acorex-modules-organization-management-remove-position-from-business-unit.command-CGYBDMLJ.mjs.map} +1 -1
  255. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BWtzQZyW.mjs → acorex-modules-organization-management-replace-position-assignee.command-DgR5-k3v.mjs} +2 -2
  256. package/fesm2022/{acorex-modules-organization-management-replace-position-assignee.command-BWtzQZyW.mjs.map → acorex-modules-organization-management-replace-position-assignee.command-DgR5-k3v.mjs.map} +1 -1
  257. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-C4W0VlL5.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-oqrqfc2t.mjs} +2 -2
  258. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-C4W0VlL5.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-oqrqfc2t.mjs.map} +1 -1
  259. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CaPqjai7.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BEZm8HRq.mjs} +2 -2
  260. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CaPqjai7.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-BEZm8HRq.mjs.map} +1 -1
  261. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-nJuP6fA0.mjs → acorex-modules-organization-management-responsibilities-matrix.component-CBfTsRx4.mjs} +2 -2
  262. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-nJuP6fA0.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-CBfTsRx4.mjs.map} +1 -1
  263. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CvvzIjvE.mjs → acorex-modules-organization-management-responsibility-level.entity-BAm1en5A.mjs} +2 -2
  264. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CvvzIjvE.mjs.map → acorex-modules-organization-management-responsibility-level.entity-BAm1en5A.mjs.map} +1 -1
  265. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-Cc0Ou-hc.mjs → acorex-modules-organization-management-responsibility.entity-DTCMbqNy.mjs} +2 -2
  266. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-Cc0Ou-hc.mjs.map → acorex-modules-organization-management-responsibility.entity-DTCMbqNy.mjs.map} +1 -1
  267. package/fesm2022/{acorex-modules-organization-management-settings.provider-C33ZatCD.mjs → acorex-modules-organization-management-settings.provider-C6op-yff.mjs} +2 -2
  268. package/fesm2022/{acorex-modules-organization-management-settings.provider-C33ZatCD.mjs.map → acorex-modules-organization-management-settings.provider-C6op-yff.mjs.map} +1 -1
  269. package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-DGuF5ux1.mjs → acorex-modules-organization-management-team-business-unit.entity-B4Wra1YB.mjs} +3 -3
  270. package/fesm2022/acorex-modules-organization-management-team-business-unit.entity-B4Wra1YB.mjs.map +1 -0
  271. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-BMXkNavp.mjs → acorex-modules-organization-management-team-member-role.entity-CVH2m8uw.mjs} +2 -2
  272. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-BMXkNavp.mjs.map → acorex-modules-organization-management-team-member-role.entity-CVH2m8uw.mjs.map} +1 -1
  273. package/fesm2022/{acorex-modules-organization-management-team-member.entity-Deem7M3N.mjs → acorex-modules-organization-management-team-member.entity-By97LISn.mjs} +3 -3
  274. package/fesm2022/acorex-modules-organization-management-team-member.entity-By97LISn.mjs.map +1 -0
  275. package/fesm2022/{acorex-modules-organization-management-team.entity-CNmpaJ3F.mjs → acorex-modules-organization-management-team.entity-Cezsw5Vq.mjs} +2 -2
  276. package/fesm2022/{acorex-modules-organization-management-team.entity-CNmpaJ3F.mjs.map → acorex-modules-organization-management-team.entity-Cezsw5Vq.mjs.map} +1 -1
  277. package/fesm2022/acorex-modules-organization-management.mjs +1 -1
  278. package/fesm2022/acorex-modules-person-core.mjs +1 -1
  279. package/fesm2022/acorex-modules-person-core.mjs.map +1 -1
  280. package/fesm2022/acorex-modules-platform-dev-tools.mjs +3 -3
  281. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  282. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs → acorex-modules-platform-management-acorex-modules-platform-management-LJBIjN39.mjs} +5 -5
  283. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-LJBIjN39.mjs.map +1 -0
  284. package/fesm2022/{acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs → acorex-modules-platform-management-menu-list.component-SXuHsuj0.mjs} +3 -3
  285. package/fesm2022/{acorex-modules-platform-management-menu-list.component-DIf_-oaM.mjs.map → acorex-modules-platform-management-menu-list.component-SXuHsuj0.mjs.map} +1 -1
  286. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  287. package/fesm2022/acorex-modules-procurement-management.mjs +2 -2
  288. package/fesm2022/acorex-modules-procurement-management.mjs.map +1 -1
  289. package/fesm2022/{acorex-modules-product-catalog-product-sku.entity-C3ynevYI.mjs → acorex-modules-product-catalog-product-sku.entity-DNgCnDtL.mjs} +2 -2
  290. package/fesm2022/acorex-modules-product-catalog-product-sku.entity-DNgCnDtL.mjs.map +1 -0
  291. package/fesm2022/{acorex-modules-product-catalog-product.entity-BbB7GAg7.mjs → acorex-modules-product-catalog-product.entity-CBwSFTL2.mjs} +2 -2
  292. package/fesm2022/acorex-modules-product-catalog-product.entity-CBwSFTL2.mjs.map +1 -0
  293. package/fesm2022/acorex-modules-product-catalog.mjs +2 -2
  294. package/fesm2022/acorex-modules-report-management.mjs +5 -5
  295. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  296. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs → acorex-modules-reservation-management-acorex-modules-reservation-management-D7YtuAbZ.mjs} +7 -7
  297. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs.map → acorex-modules-reservation-management-acorex-modules-reservation-management-D7YtuAbZ.mjs.map} +1 -1
  298. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs → acorex-modules-reservation-management-reservation-class-status.entity-D4insz8u.mjs} +2 -2
  299. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs.map → acorex-modules-reservation-management-reservation-class-status.entity-D4insz8u.mjs.map} +1 -1
  300. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs → acorex-modules-reservation-management-reservation-resource-type.entity-Dn2CMqO9.mjs} +2 -2
  301. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs.map → acorex-modules-reservation-management-reservation-resource-type.entity-Dn2CMqO9.mjs.map} +1 -1
  302. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs → acorex-modules-reservation-management-reservation-status-transition.entity-CrwUrIrC.mjs} +2 -2
  303. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs.map → acorex-modules-reservation-management-reservation-status-transition.entity-CrwUrIrC.mjs.map} +1 -1
  304. package/fesm2022/acorex-modules-reservation-management.mjs +1 -1
  305. package/fesm2022/acorex-modules-security-management.mjs +4 -4
  306. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  307. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BfbVV7di.mjs → acorex-modules-settings-management-acorex-modules-settings-management-O8kBegUF.mjs} +136 -65
  308. package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-O8kBegUF.mjs.map +1 -0
  309. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-BBb5hqkc.mjs → acorex-modules-settings-management-permission-definition.provider-CU7SEx6v.mjs} +2 -2
  310. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-BBb5hqkc.mjs.map → acorex-modules-settings-management-permission-definition.provider-CU7SEx6v.mjs.map} +1 -1
  311. package/fesm2022/{acorex-modules-settings-management-setting-page.component-Dn8CYgux.mjs → acorex-modules-settings-management-setting-page.component-D8_cjOzW.mjs} +181 -19
  312. package/fesm2022/acorex-modules-settings-management-setting-page.component-D8_cjOzW.mjs.map +1 -0
  313. package/fesm2022/{acorex-modules-settings-management-setting-view.component-B5jpPo9k.mjs → acorex-modules-settings-management-setting-view.component-DIvERzMC.mjs} +65 -17
  314. package/fesm2022/acorex-modules-settings-management-setting-view.component-DIvERzMC.mjs.map +1 -0
  315. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  316. package/fesm2022/acorex-modules-subscription-management.mjs +2 -2
  317. package/fesm2022/acorex-modules-subscription-management.mjs.map +1 -1
  318. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-BB7eeaYX.mjs → acorex-modules-task-management-acorex-modules-task-management-Bp-9vZdR.mjs} +939 -383
  319. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-Bp-9vZdR.mjs.map +1 -0
  320. package/fesm2022/acorex-modules-task-management-task-board.page-Brgg9wJa.mjs +3368 -0
  321. package/fesm2022/acorex-modules-task-management-task-board.page-Brgg9wJa.mjs.map +1 -0
  322. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  323. package/fesm2022/acorex-modules-tenant-management.mjs +2 -2
  324. package/fesm2022/acorex-modules-tenant-management.mjs.map +1 -1
  325. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-gXP-srRO.mjs +5600 -0
  326. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-gXP-srRO.mjs.map +1 -0
  327. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BW6kK9Av.mjs} +3 -3
  328. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-B4DLmioy.mjs.map → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BW6kK9Av.mjs.map} +1 -1
  329. package/fesm2022/{acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs → acorex-modules-workflow-management-activity-definition.entity-BlK-sL_3.mjs} +2 -2
  330. package/fesm2022/{acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs.map → acorex-modules-workflow-management-activity-definition.entity-BlK-sL_3.mjs.map} +1 -1
  331. package/fesm2022/{acorex-modules-workflow-management-automation.entity-BigK8yE2.mjs → acorex-modules-workflow-management-automation.entity-C9q24TPu.mjs} +3 -3
  332. package/fesm2022/acorex-modules-workflow-management-automation.entity-C9q24TPu.mjs.map +1 -0
  333. package/fesm2022/{acorex-modules-workflow-management-index-1B7oRAKX.mjs → acorex-modules-workflow-management-index-BFdyFvcu.mjs} +8 -5
  334. package/fesm2022/acorex-modules-workflow-management-index-BFdyFvcu.mjs.map +1 -0
  335. package/fesm2022/{acorex-modules-workflow-management-index-DC_9M9dk.mjs → acorex-modules-workflow-management-index-BbVGViSE.mjs} +7 -163
  336. package/fesm2022/acorex-modules-workflow-management-index-BbVGViSE.mjs.map +1 -0
  337. package/fesm2022/{acorex-modules-workflow-management-index-34UZrsxw.mjs → acorex-modules-workflow-management-index-Bq5tBgif.mjs} +2 -2
  338. package/fesm2022/{acorex-modules-workflow-management-index-34UZrsxw.mjs.map → acorex-modules-workflow-management-index-Bq5tBgif.mjs.map} +1 -1
  339. package/fesm2022/{acorex-modules-workflow-management-index-CztICioV.mjs → acorex-modules-workflow-management-index-CIV7Abnc.mjs} +53 -5
  340. package/fesm2022/acorex-modules-workflow-management-index-CIV7Abnc.mjs.map +1 -0
  341. package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-CGNwslcn.mjs → acorex-modules-workflow-management-save-workflow-definition-activities.command-B_tjSneV.mjs} +2 -2
  342. package/fesm2022/{acorex-modules-workflow-management-save-workflow-definition-activities.command-CGNwslcn.mjs.map → acorex-modules-workflow-management-save-workflow-definition-activities.command-B_tjSneV.mjs.map} +1 -1
  343. package/fesm2022/acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs +172 -0
  344. package/fesm2022/acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs.map +1 -0
  345. package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-column.component-Cpi0Pq3n.mjs → acorex-modules-workflow-management-workflow-configurator-widget-column.component-CPOQZxsq.mjs} +2 -2
  346. package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-column.component-Cpi0Pq3n.mjs.map → acorex-modules-workflow-management-workflow-configurator-widget-column.component-CPOQZxsq.mjs.map} +1 -1
  347. package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-edit.component-RbwX6Nd_.mjs → acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CqF3z8Xq.mjs} +2 -2
  348. package/fesm2022/{acorex-modules-workflow-management-workflow-configurator-widget-edit.component-RbwX6Nd_.mjs.map → acorex-modules-workflow-management-workflow-configurator-widget-edit.component-CqF3z8Xq.mjs.map} +1 -1
  349. package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-BfACGpo4.mjs → acorex-modules-workflow-management-workflow-definition.entity-BbnGGXZs.mjs} +2 -2
  350. package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-BfACGpo4.mjs.map → acorex-modules-workflow-management-workflow-definition.entity-BbnGGXZs.mjs.map} +1 -1
  351. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs → acorex-modules-workflow-management-workflow-instance.entity-Ci6c4VoI.mjs} +3 -3
  352. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-BnKT3Wgh.mjs.map → acorex-modules-workflow-management-workflow-instance.entity-Ci6c4VoI.mjs.map} +1 -1
  353. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-popup.component-CJ0cRwUE.mjs +579 -0
  354. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-popup.component-CJ0cRwUE.mjs.map +1 -0
  355. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-CHv2_W75.mjs +285 -0
  356. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-CHv2_W75.mjs.map +1 -0
  357. package/fesm2022/acorex-modules-workflow-management.mjs +1 -5358
  358. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  359. package/fesm2022/acorex-modules-workplacesafety-management-hazard-ppe-rule-status.provider-D1a0CBhs.mjs +42 -0
  360. package/fesm2022/acorex-modules-workplacesafety-management-hazard-ppe-rule-status.provider-D1a0CBhs.mjs.map +1 -0
  361. package/fesm2022/acorex-modules-workplacesafety-management-ppe-item-status.provider-VH_Bp0l5.mjs +70 -0
  362. package/fesm2022/acorex-modules-workplacesafety-management-ppe-item-status.provider-VH_Bp0l5.mjs.map +1 -0
  363. package/fesm2022/acorex-modules-workplacesafety-management.mjs +1229 -67
  364. package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
  365. package/package.json +2 -2
  366. package/types/acorex-modules-ai-management.d.ts +21 -2
  367. package/types/acorex-modules-asset-management.d.ts +1 -0
  368. package/types/acorex-modules-calendar-management.d.ts +61 -33
  369. package/types/acorex-modules-common.d.ts +1 -1
  370. package/types/acorex-modules-conversation.d.ts +40 -6
  371. package/types/acorex-modules-document-management.d.ts +2 -0
  372. package/types/acorex-modules-notification-management.d.ts +32 -3
  373. package/types/acorex-modules-settings-management.d.ts +12 -2
  374. package/types/acorex-modules-task-management.d.ts +196 -47
  375. package/types/acorex-modules-workflow-management.d.ts +23 -28
  376. package/types/acorex-modules-workplacesafety-management.d.ts +124 -4
  377. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-BnfSTevp.mjs.map +0 -1
  378. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BKMD5v6t.mjs +0 -807
  379. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BKMD5v6t.mjs.map +0 -1
  380. package/fesm2022/acorex-modules-auth-app-chooser.component-DTlzE1Rd.mjs.map +0 -1
  381. package/fesm2022/acorex-modules-auth-user-sessions.component-ChF8OYdd.mjs.map +0 -1
  382. package/fesm2022/acorex-modules-calendar-management-datasource.provider-C_iazC89.mjs +0 -95
  383. package/fesm2022/acorex-modules-calendar-management-datasource.provider-C_iazC89.mjs.map +0 -1
  384. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B1ijk48q.mjs.map +0 -1
  385. package/fesm2022/acorex-modules-conversation-comments-page.component--Q5RxEyI.mjs.map +0 -1
  386. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DJMJFziT.mjs.map +0 -1
  387. package/fesm2022/acorex-modules-data-management-index-DEm_BsbE.mjs.map +0 -1
  388. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-C1lNgBrC.mjs.map +0 -1
  389. package/fesm2022/acorex-modules-human-capital-management-employee.entity-ZTRqQfRv.mjs.map +0 -1
  390. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-BwLAEtqA.mjs.map +0 -1
  391. package/fesm2022/acorex-modules-human-capital-management-start-leave-request-flow.command-Cx9TRMlY.mjs.map +0 -1
  392. package/fesm2022/acorex-modules-learning-management-course.entity-DUUgeikJ.mjs.map +0 -1
  393. package/fesm2022/acorex-modules-learning-management-enrollment.entity-CdJafrUh.mjs.map +0 -1
  394. package/fesm2022/acorex-modules-learning-management-learning-path.entity-Zo--bDto.mjs.map +0 -1
  395. package/fesm2022/acorex-modules-learning-management-skill.entity-VXkLbaD4.mjs.map +0 -1
  396. package/fesm2022/acorex-modules-learning-management-training.entity-C4KDv1uh.mjs.map +0 -1
  397. package/fesm2022/acorex-modules-locale-management-profiles-BOveGIcE.mjs.map +0 -1
  398. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DiM2aFgg.mjs.map +0 -1
  399. package/fesm2022/acorex-modules-notification-management-notification-page.component-6YOiGgKm.mjs +0 -858
  400. package/fesm2022/acorex-modules-notification-management-notification-page.component-6YOiGgKm.mjs.map +0 -1
  401. package/fesm2022/acorex-modules-order-management-bulk-buy-order-item.entity-DGtHoqqj.mjs.map +0 -1
  402. package/fesm2022/acorex-modules-order-management-member-order-line.entity-DZJ90WHI.mjs.map +0 -1
  403. package/fesm2022/acorex-modules-organization-management-job-definition-responsibilities-page.component-aWZO09Xw.mjs.map +0 -1
  404. package/fesm2022/acorex-modules-organization-management-job-definition-skills-page.component-DJcFhQM9.mjs.map +0 -1
  405. package/fesm2022/acorex-modules-organization-management-team-business-unit.entity-DGuF5ux1.mjs.map +0 -1
  406. package/fesm2022/acorex-modules-organization-management-team-member.entity-Deem7M3N.mjs.map +0 -1
  407. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-Cbf1rlEK.mjs.map +0 -1
  408. package/fesm2022/acorex-modules-product-catalog-product-sku.entity-C3ynevYI.mjs.map +0 -1
  409. package/fesm2022/acorex-modules-product-catalog-product.entity-BbB7GAg7.mjs.map +0 -1
  410. package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-BfbVV7di.mjs.map +0 -1
  411. package/fesm2022/acorex-modules-settings-management-setting-page.component-Dn8CYgux.mjs.map +0 -1
  412. package/fesm2022/acorex-modules-settings-management-setting-view.component-B5jpPo9k.mjs.map +0 -1
  413. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-BB7eeaYX.mjs.map +0 -1
  414. package/fesm2022/acorex-modules-task-management-task-board.page-BmUIngWk.mjs +0 -2284
  415. package/fesm2022/acorex-modules-task-management-task-board.page-BmUIngWk.mjs.map +0 -1
  416. package/fesm2022/acorex-modules-workflow-management-automation.entity-BigK8yE2.mjs.map +0 -1
  417. package/fesm2022/acorex-modules-workflow-management-index-1B7oRAKX.mjs.map +0 -1
  418. package/fesm2022/acorex-modules-workflow-management-index-CztICioV.mjs.map +0 -1
  419. package/fesm2022/acorex-modules-workflow-management-index-DC_9M9dk.mjs.map +0 -1
  420. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-B4hEv2-a.mjs +0 -255
  421. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-B4hEv2-a.mjs.map +0 -1
@@ -1,3591 +1,2 @@
1
- import { createAllQueryView, AXPEntityQueryType, AXP_MENU_PROVIDER, AXPEntityCommandScope } from '@acorex/platform/common';
2
- import { AXPWidgetsCatalog, AXPValueWidgetComponent, cloneProperty, AXPWidgetGroupEnum, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';
3
- import { AXMEntityCrudServiceImpl, entityMasterCrudActions, entityMasterRecordActions, AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService, AXP_ENTITY_DEFINITION_LOADER, AXPEntityStorageService, AXPEntityDataProviderImpl } from '@acorex/platform/layout/entity';
4
- import * as i0 from '@angular/core';
5
- import { Injectable, NgModule, inject, signal, DestroyRef, computed, effect, Injector, InjectionToken, viewChild, ViewContainerRef, input, output, afterNextRender, inputBinding, outputBinding, ChangeDetectionStrategy, Component, ViewEncapsulation, ChangeDetectorRef } from '@angular/core';
6
- import { AXPSessionService, AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';
7
- import { firstValueFrom, Subject, debounceTime } from 'rxjs';
8
- import { AXPUserAvatarComponent, AXPStateMessageComponent, AXP_TASK_BADGE_PROVIDERS } from '@acorex/platform/layout/components';
9
- import * as i1$1 from '@acorex/platform/core';
10
- import { AXPComponentSlotModule, AXP_MODULE_MANIFEST_PROVIDER, AXPDataGenerator } from '@acorex/platform/core';
11
- import { AXPRootLayoutComponent } from '@acorex/platform/themes/default';
12
- import { Router, ROUTES } from '@angular/router';
13
- import { AXPCommandService, provideCommandSetups } from '@acorex/platform/runtime';
14
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
15
- import * as i5 from '@acorex/core/translation';
16
- import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
17
- import * as i3 from '@acorex/components/badge';
18
- import { AXBadgeModule } from '@acorex/components/badge';
19
- import * as i6 from '@acorex/components/button';
20
- import { AXButtonModule } from '@acorex/components/button';
21
- import * as i1 from '@acorex/components/decorators';
22
- import { AXDecoratorModule } from '@acorex/components/decorators';
23
- import * as i4 from '@acorex/components/popover';
24
- import { AXPopoverModule, AXPopoverComponent } from '@acorex/components/popover';
25
- import * as i2$2 from '@acorex/components/tabs';
26
- import { AXTabsModule } from '@acorex/components/tabs';
27
- import { AXToastService } from '@acorex/components/toast';
28
- import * as i2$1 from '@acorex/core/format';
29
- import { AXFormatModule } from '@acorex/core/format';
30
- import { AXImageModule } from '@acorex/components/image';
31
- import * as i2 from '@angular/common';
32
- import { CommonModule, DatePipe } from '@angular/common';
33
- import { AXP_WIDGETS_UTILITY_CATEGORY } from '@acorex/modules/dashboard-management';
34
- import { AXP_APPEARANCE_PROPERTY_GROUP, AXP_STYLING_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY } from '@acorex/platform/layout/widgets';
35
- import { AXC_TEXT_TEMPLATE_RENDER_COMMAND_KEY } from '@acorex/modules/content-management';
36
- import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
37
- import { RootConfig as RootConfig$1 } from '@acorex/modules/form-template-management';
38
- import { AXPWidgetsList } from '@acorex/modules/common';
39
-
40
- const config = {
41
- i18n: 'notification-management',
42
- route: 'notifications',
43
- module: 'NotificationManagement',
44
- };
45
- /** Dashboard widget type ids for notification-management-hosted widgets (`{module}:Widget:Dashboard:{Segment}`). */
46
- const dashboardWidgetId = (segment) => `${config.module}:Widget:Dashboard:${segment}`;
47
- const RootConfig = {
48
- config,
49
- module: {
50
- route: 'notification-management',
51
- name: config.module,
52
- title: `@${config.i18n}:module.title`,
53
- icon: 'fa-light fa-bell',
54
- },
55
- entities: {
56
- channel: {
57
- name: 'Channels',
58
- title: `t("channel", {scope:"${config.i18n}"})`,
59
- icon: 'fa-light fa-list',
60
- },
61
- template: {
62
- name: 'Templates',
63
- title: `t("template",{scope:"${config.i18n}"})`,
64
- icon: 'fa-light fa-file-code',
65
- },
66
- notification: {
67
- name: 'Notifications',
68
- title: `t("notification",{scope:"${config.i18n}"})`,
69
- icon: 'fa-light fa-file-code',
70
- },
71
- },
72
- widgets: {
73
- myNotificationDashboard: dashboardWidgetId('MyNotificationDashboard'),
74
- },
75
- };
76
-
77
- class AXMNotificationEntityService extends AXMEntityCrudServiceImpl {
78
- }
79
- class AXMNotificationEntityServiceImpl extends AXMNotificationEntityService {
80
- getList() {
81
- throw new Error('Method not implemented.');
82
- }
83
- markAsRead(payload) {
84
- throw new Error('Method not implemented.');
85
- }
86
- markAllAsRead() {
87
- throw new Error('Method not implemented.');
88
- }
89
- create(payload) {
90
- throw new Error('Method not implemented.');
91
- }
92
- constructor() {
93
- super(`${RootConfig.module.name}.${RootConfig.entities.notification.name}`);
94
- }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEntityServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
96
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEntityServiceImpl }); }
97
- }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEntityServiceImpl, decorators: [{
99
- type: Injectable
100
- }], ctorParameters: () => [] });
101
-
102
- async function notificationEntityFactory(injector) {
103
- const dataService = injector.get(AXMNotificationEntityService);
104
- const entityDef = {
105
- module: RootConfig.module.name,
106
- name: RootConfig.entities.notification.name,
107
- title: RootConfig.entities.notification.title,
108
- icon: RootConfig.entities.notification.icon,
109
- formats: {
110
- individual: '@notification-management:entities.notification.title',
111
- plural: '@notification-management:entities.notification.plural',
112
- },
113
- relatedEntities: [
114
- {
115
- entity: 'notification-management.notificationLog',
116
- columns: ['title', 'status'],
117
- },
118
- ],
119
- groups: [
120
- {
121
- id: 'notification',
122
- title: 'Notification',
123
- },
124
- ],
125
- properties: [
126
- {
127
- name: 'name',
128
- title: '@notification-management:entities.notification.fields.name.title',
129
- groupId: 'notification',
130
- schema: {
131
- dataType: 'string',
132
- interface: {
133
- type: AXPWidgetsCatalog.text,
134
- },
135
- },
136
- validations: [
137
- {
138
- rule: 'required',
139
- },
140
- ],
141
- },
142
- {
143
- name: 'title',
144
- title: '@notification-management:entities.notification.fields.title.title',
145
- groupId: 'notification',
146
- schema: {
147
- dataType: 'string',
148
- interface: {
149
- type: AXPWidgetsCatalog.text,
150
- },
151
- },
152
- validations: [
153
- {
154
- rule: 'required',
155
- },
156
- ],
157
- },
158
- {
159
- name: 'body',
160
- title: '@notification-management:entities.notification.fields.body.title',
161
- groupId: 'notification',
162
- schema: {
163
- dataType: 'string',
164
- interface: {
165
- type: AXPWidgetsCatalog.richText,
166
- },
167
- },
168
- validations: [
169
- {
170
- rule: 'required',
171
- },
172
- ],
173
- },
174
- {
175
- name: 'channel',
176
- title: '@notification-management:entities.notification.fields.channel.title',
177
- groupId: 'notification',
178
- schema: {
179
- dataType: 'string',
180
- interface: {
181
- type: AXPWidgetsCatalog.text,
182
- },
183
- },
184
- },
185
- {
186
- name: 'user.name',
187
- title: '@notification-management:entities.notification.fields.user-name.title',
188
- groupId: 'notification',
189
- schema: {
190
- dataType: 'string',
191
- interface: {
192
- type: AXPWidgetsCatalog.text,
193
- },
194
- },
195
- },
196
- ],
197
- columns: [{ name: 'title' }, { name: 'body' }, { name: 'user.name' }, { name: 'channel' }],
198
- queries: {
199
- byKey: {
200
- execute: async (id) => {
201
- return new Promise((resolve) => {
202
- setTimeout(async () => {
203
- const entity = await dataService.getOne(id);
204
- resolve(entity);
205
- }, 500);
206
- });
207
- },
208
- type: AXPEntityQueryType.Single,
209
- },
210
- list: {
211
- execute: async (e) => {
212
- return await dataService.query(e);
213
- },
214
- type: AXPEntityQueryType.List,
215
- },
216
- },
217
- interfaces: {
218
- master: {
219
- single: {
220
- title: '{{title}}',
221
- sections: [
222
- {
223
- id: 'notification',
224
- layout: {
225
- positions: {
226
- lg: {
227
- colSpan: 12,
228
- },
229
- },
230
- },
231
- },
232
- ],
233
- properties: [
234
- {
235
- name: 'name',
236
- layout: {
237
- positions: {
238
- lg: {
239
- colSpan: 6,
240
- },
241
- },
242
- },
243
- },
244
- {
245
- name: 'user.name',
246
- layout: {
247
- positions: {
248
- lg: {
249
- colSpan: 6,
250
- },
251
- },
252
- },
253
- },
254
- {
255
- name: 'title',
256
- layout: {
257
- positions: {
258
- lg: {
259
- colSpan: 12,
260
- },
261
- },
262
- },
263
- },
264
- {
265
- name: 'body',
266
- layout: {
267
- positions: {
268
- lg: {
269
- colSpan: 12,
270
- },
271
- },
272
- },
273
- },
274
- {
275
- name: 'channel',
276
- layout: {
277
- positions: {
278
- lg: {
279
- colSpan: 6,
280
- },
281
- },
282
- },
283
- },
284
- ],
285
- actions: [...entityMasterRecordActions()],
286
- },
287
- list: {
288
- actions: [...entityMasterCrudActions()],
289
- views: [createAllQueryView()],
290
- },
291
- },
292
- },
293
- };
294
- return entityDef;
295
- }
296
-
297
- var notification_entity = /*#__PURE__*/Object.freeze({
298
- __proto__: null,
299
- notificationEntityFactory: notificationEntityFactory
300
- });
301
-
302
- async function notificationTemplateEntityFactory(injector) {
303
- const i18n = RootConfig.config.i18n;
304
- const entityDef = {
305
- module: RootConfig.module.name,
306
- name: RootConfig.entities.template.name,
307
- title: RootConfig.entities.template.title,
308
- icon: RootConfig.entities.template.icon,
309
- formats: {
310
- individual: 't("template",{scope: "notification-management"})',
311
- plural: 't("template",{scope: "notification-management"})',
312
- },
313
- relatedEntities: [
314
- {
315
- entity: `${RootConfig.module.name}.${RootConfig.entities.channel.name}`,
316
- columns: ['title', 'body', 'channel'],
317
- conditions: [
318
- {
319
- name: 'notificationId',
320
- operator: {
321
- type: 'equal',
322
- },
323
- value: 'id',
324
- },
325
- ],
326
- },
327
- ],
328
- groups: [
329
- {
330
- id: 'notification',
331
- title: '@general:terms.common.title',
332
- },
333
- ],
334
- properties: [
335
- {
336
- name: 'name',
337
- title: '@general:terms.common.name',
338
- groupId: 'notification',
339
- schema: {
340
- dataType: 'string',
341
- interface: {
342
- type: AXPWidgetsCatalog.text,
343
- },
344
- },
345
- validations: [
346
- {
347
- rule: 'required',
348
- },
349
- ],
350
- },
351
- {
352
- name: 'title',
353
- title: '@general:terms.common.title',
354
- groupId: 'notification',
355
- schema: {
356
- dataType: 'string',
357
- interface: {
358
- type: AXPWidgetsCatalog.text,
359
- },
360
- },
361
- validations: [
362
- {
363
- rule: 'required',
364
- },
365
- ],
366
- },
367
- {
368
- name: 'description',
369
- title: '@general:terms.common.description',
370
- groupId: 'notification',
371
- schema: {
372
- dataType: 'string',
373
- interface: {
374
- type: AXPWidgetsCatalog.text,
375
- },
376
- },
377
- validations: [
378
- {
379
- rule: 'required',
380
- },
381
- ],
382
- },
383
- ],
384
- columns: [{ name: 'name' }, { name: 'title' }],
385
- interfaces: {
386
- master: {
387
- create: {
388
- sections: [
389
- {
390
- id: 'notification',
391
- },
392
- ],
393
- properties: [
394
- {
395
- name: 'name',
396
- layout: {
397
- positions: {
398
- lg: {
399
- colSpan: 6,
400
- },
401
- },
402
- },
403
- },
404
- {
405
- name: 'title',
406
- layout: {
407
- positions: {
408
- lg: {
409
- colSpan: 6,
410
- },
411
- },
412
- },
413
- },
414
- {
415
- name: 'description',
416
- layout: {
417
- positions: {
418
- lg: {
419
- colSpan: 12,
420
- },
421
- },
422
- },
423
- },
424
- ],
425
- },
426
- update: {
427
- sections: [
428
- {
429
- id: 'notification',
430
- },
431
- ],
432
- properties: [
433
- {
434
- name: 'name',
435
- layout: {
436
- positions: {
437
- lg: {
438
- colSpan: 6,
439
- },
440
- },
441
- },
442
- },
443
- {
444
- name: 'title',
445
- layout: {
446
- positions: {
447
- lg: {
448
- colSpan: 6,
449
- },
450
- },
451
- },
452
- },
453
- {
454
- name: 'description',
455
- layout: {
456
- positions: {
457
- lg: {
458
- colSpan: 12,
459
- },
460
- },
461
- },
462
- },
463
- ],
464
- },
465
- single: {
466
- title: '{{title}}',
467
- sections: [
468
- {
469
- id: 'notification',
470
- layout: {
471
- positions: {
472
- lg: {
473
- colSpan: 12,
474
- },
475
- },
476
- },
477
- },
478
- ],
479
- properties: [
480
- {
481
- name: 'name',
482
- layout: {
483
- positions: {
484
- lg: {
485
- colSpan: 6,
486
- },
487
- },
488
- },
489
- },
490
- {
491
- name: 'title',
492
- layout: {
493
- positions: {
494
- lg: {
495
- colSpan: 6,
496
- },
497
- },
498
- },
499
- },
500
- {
501
- name: 'description',
502
- layout: {
503
- positions: {
504
- lg: {
505
- colSpan: 12,
506
- },
507
- },
508
- },
509
- },
510
- ],
511
- actions: [...entityMasterRecordActions()],
512
- },
513
- list: {
514
- actions: [...entityMasterCrudActions()],
515
- views: [createAllQueryView()],
516
- },
517
- },
518
- },
519
- };
520
- return entityDef;
521
- }
522
-
523
- var template_entity = /*#__PURE__*/Object.freeze({
524
- __proto__: null,
525
- notificationTemplateEntityFactory: notificationTemplateEntityFactory
526
- });
527
-
528
- class AXMNotificationManagementTemplateEntityService extends AXMEntityCrudServiceImpl {
529
- }
530
- class AXMNotificationManagementTemplateEntityServiceImpl extends AXMNotificationManagementTemplateEntityService {
531
- constructor() {
532
- super(`${RootConfig.module.name}.${RootConfig.entities.template.name}`);
533
- }
534
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementTemplateEntityServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
535
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementTemplateEntityServiceImpl }); }
536
- }
537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementTemplateEntityServiceImpl, decorators: [{
538
- type: Injectable
539
- }], ctorParameters: () => [] });
540
-
541
- class AXMNotificationTemplateEntityModule {
542
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationTemplateEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
543
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationTemplateEntityModule }); }
544
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationTemplateEntityModule, providers: [
545
- {
546
- provide: AXMNotificationManagementTemplateEntityService,
547
- useClass: AXMNotificationManagementTemplateEntityServiceImpl,
548
- },
549
- ] }); }
550
- }
551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationTemplateEntityModule, decorators: [{
552
- type: NgModule,
553
- args: [{
554
- imports: [],
555
- exports: [],
556
- declarations: [],
557
- providers: [
558
- {
559
- provide: AXMNotificationManagementTemplateEntityService,
560
- useClass: AXMNotificationManagementTemplateEntityServiceImpl,
561
- },
562
- ],
563
- }]
564
- }] });
565
-
566
- async function notificationChannelEntityFactory(injector) {
567
- const i18n = RootConfig.config.i18n;
568
- const entityDef = {
569
- module: RootConfig.module.name,
570
- name: RootConfig.entities.channel.name,
571
- title: RootConfig.entities.channel.title,
572
- icon: RootConfig.entities.channel.icon,
573
- formats: {
574
- individual: `@${i18n}:channel`,
575
- plural: `@${i18n}:channels`,
576
- },
577
- relatedEntities: [],
578
- groups: [
579
- {
580
- id: 'notificationChannel',
581
- title: 'Notification Channel',
582
- },
583
- {
584
- id: 'in-app',
585
- title: 'In App',
586
- },
587
- ],
588
- properties: [
589
- {
590
- name: 'title',
591
- title: '@general:terms.common.title',
592
- groupId: 'notificationChannel',
593
- schema: {
594
- dataType: 'string',
595
- interface: {
596
- type: AXPWidgetsCatalog.text,
597
- },
598
- },
599
- validations: [
600
- {
601
- rule: 'required',
602
- },
603
- ],
604
- },
605
- {
606
- name: 'template',
607
- title: `@${i18n}:template`,
608
- groupId: 'notificationChannel',
609
- schema: {
610
- dataType: 'string',
611
- interface: {
612
- type: AXPWidgetsCatalog.richText,
613
- },
614
- },
615
- },
616
- {
617
- name: 'body',
618
- title: `@${i18n}:body`,
619
- groupId: 'notificationChannel',
620
- schema: {
621
- dataType: 'string',
622
- interface: {
623
- type: AXPWidgetsCatalog.richText,
624
- },
625
- },
626
- validations: [
627
- {
628
- rule: 'required',
629
- },
630
- ],
631
- },
632
- {
633
- name: 'imageId',
634
- title: `@${i18n}:body`,
635
- groupId: 'notificationChannel',
636
- schema: {
637
- dataType: 'string',
638
- interface: {
639
- type: AXPWidgetsCatalog.attachments,
640
- options: {
641
- multiple: false,
642
- },
643
- },
644
- },
645
- },
646
- {
647
- name: 'channel',
648
- title: `@${i18n}:channel`,
649
- groupId: 'notificationChannel',
650
- schema: {
651
- dataType: 'string',
652
- interface: {
653
- type: AXPWidgetsCatalog.select,
654
- options: {
655
- valueField: 'name',
656
- textField: 'title',
657
- dataSource: [
658
- { title: 'SMS', name: 'sms' },
659
- { title: 'Email', name: 'email' },
660
- { title: 'In App', name: 'inApp' },
661
- ],
662
- direction: 'horizontal',
663
- multiple: false,
664
- },
665
- },
666
- },
667
- validations: [
668
- {
669
- rule: 'required',
670
- },
671
- ],
672
- },
673
- {
674
- name: 'type',
675
- title: `@${i18n}:type`,
676
- groupId: 'in-app',
677
- schema: {
678
- dataType: 'string',
679
- interface: {
680
- type: AXPWidgetsCatalog.select,
681
- options: {
682
- valueField: 'name',
683
- textField: 'title',
684
- dataSource: [
685
- { title: 'Notification', name: 'notification' },
686
- { title: 'Promotion', name: 'promotion' },
687
- { title: 'PopUp', name: 'popup' },
688
- ],
689
- direction: 'horizontal',
690
- multiple: false,
691
- },
692
- },
693
- },
694
- },
695
- {
696
- name: 'contentType',
697
- title: `@${i18n}:contentType`,
698
- groupId: 'in-app',
699
- schema: {
700
- dataType: 'string',
701
- interface: {
702
- type: AXPWidgetsCatalog.select,
703
- options: {
704
- valueField: 'name',
705
- textField: 'title',
706
- dataSource: [
707
- { title: 'Media', name: 'media' },
708
- { title: 'Text', name: 'text' },
709
- ],
710
- direction: 'horizontal',
711
- multiple: false,
712
- },
713
- },
714
- },
715
- validations: [
716
- {
717
- rule: 'required',
718
- },
719
- ],
720
- },
721
- {
722
- name: 'shape',
723
- title: `@${i18n}:shape`,
724
- groupId: 'in-app',
725
- schema: {
726
- dataType: 'string',
727
- interface: {
728
- type: AXPWidgetsCatalog.select,
729
- options: {
730
- valueField: 'name',
731
- textField: 'title',
732
- dataSource: [
733
- { title: 'Circle', name: 'circle' },
734
- { title: 'Square', name: 'square' },
735
- ],
736
- direction: 'horizontal',
737
- multiple: false,
738
- },
739
- },
740
- },
741
- validations: [
742
- {
743
- rule: 'required',
744
- },
745
- ],
746
- },
747
- {
748
- name: 'placement',
749
- title: `t("placement", { scope: "${i18n}" })`,
750
- groupId: 'in-app',
751
- schema: {
752
- dataType: 'string',
753
- interface: {
754
- type: AXPWidgetsCatalog.select,
755
- options: {
756
- valueField: 'name',
757
- textField: 'title',
758
- dataSource: [
759
- { title: 'Side Menu Footer', name: 'side-menu-footer' },
760
- { title: 'Side Menu Header', name: 'side-menu-header' },
761
- ],
762
- direction: 'horizontal',
763
- multiple: false,
764
- },
765
- },
766
- },
767
- validations: [
768
- {
769
- rule: 'required',
770
- },
771
- ],
772
- },
773
- {
774
- name: 'pin',
775
- title: `t("pin", { scope: "${i18n}" })`,
776
- groupId: 'in-app',
777
- schema: {
778
- dataType: 'string',
779
- interface: {
780
- type: AXPWidgetsCatalog.checkbox,
781
- },
782
- },
783
- validations: [
784
- {
785
- rule: 'required',
786
- },
787
- ],
788
- },
789
- {
790
- name: 'trigger',
791
- title: `t("trigger", { scope: "${i18n}" })`,
792
- groupId: 'notificationChannel',
793
- schema: {
794
- dataType: 'string',
795
- interface: {
796
- type: AXPWidgetsCatalog.cronJob,
797
- },
798
- },
799
- validations: [
800
- {
801
- rule: 'required',
802
- },
803
- ],
804
- },
805
- ],
806
- columns: [{ name: 'title' }, { name: 'body' }, { name: 'channel' }],
807
- interfaces: {
808
- master: {
809
- create: {
810
- sections: [
811
- {
812
- id: 'notificationChannel',
813
- },
814
- {
815
- id: 'in-app',
816
- },
817
- ],
818
- properties: [
819
- {
820
- name: 'title',
821
- layout: {
822
- positions: {
823
- lg: {
824
- colSpan: 12,
825
- order: 1,
826
- },
827
- },
828
- },
829
- },
830
- {
831
- name: 'body',
832
- layout: {
833
- positions: {
834
- lg: {
835
- colSpan: 12,
836
- order: 2,
837
- },
838
- },
839
- },
840
- },
841
- {
842
- name: 'imageId',
843
- layout: {
844
- positions: {
845
- lg: {
846
- colSpan: 12,
847
- order: 2,
848
- },
849
- },
850
- },
851
- },
852
- {
853
- name: 'template',
854
- layout: {
855
- positions: {
856
- lg: {
857
- colSpan: 12,
858
- },
859
- },
860
- },
861
- },
862
- {
863
- name: 'trigger',
864
- layout: {
865
- positions: {
866
- lg: {
867
- colSpan: 12,
868
- order: 10,
869
- },
870
- },
871
- },
872
- },
873
- {
874
- name: 'channel',
875
- layout: {
876
- positions: {
877
- lg: {
878
- colSpan: 12,
879
- },
880
- },
881
- },
882
- },
883
- {
884
- name: 'type',
885
- layout: {
886
- positions: {
887
- lg: {
888
- colSpan: 12,
889
- order: 3,
890
- },
891
- },
892
- },
893
- },
894
- {
895
- name: 'contentType',
896
- layout: {
897
- positions: {
898
- lg: {
899
- colSpan: 4,
900
- order: 4,
901
- },
902
- },
903
- },
904
- },
905
- {
906
- name: 'shape',
907
- layout: {
908
- positions: {
909
- lg: {
910
- colSpan: 4,
911
- order: 5,
912
- },
913
- },
914
- },
915
- },
916
- {
917
- name: 'placement',
918
- layout: {
919
- positions: {
920
- lg: {
921
- colSpan: 4,
922
- order: 6,
923
- },
924
- },
925
- },
926
- },
927
- {
928
- name: 'pin',
929
- layout: {
930
- positions: {
931
- lg: {
932
- colSpan: 4,
933
- },
934
- },
935
- },
936
- },
937
- ],
938
- },
939
- update: {
940
- sections: [
941
- {
942
- id: 'notificationChannel',
943
- },
944
- {
945
- id: 'in-app',
946
- },
947
- ],
948
- properties: [
949
- {
950
- name: 'title',
951
- layout: {
952
- positions: {
953
- lg: {
954
- colSpan: 12,
955
- order: 1,
956
- },
957
- },
958
- },
959
- },
960
- {
961
- name: 'body',
962
- layout: {
963
- positions: {
964
- lg: {
965
- colSpan: 12,
966
- order: 2,
967
- },
968
- },
969
- },
970
- },
971
- {
972
- name: 'imageId',
973
- layout: {
974
- positions: {
975
- lg: {
976
- colSpan: 12,
977
- order: 2,
978
- },
979
- },
980
- },
981
- },
982
- {
983
- name: 'template',
984
- layout: {
985
- positions: {
986
- lg: {
987
- colSpan: 12,
988
- },
989
- },
990
- },
991
- },
992
- {
993
- name: 'trigger',
994
- layout: {
995
- positions: {
996
- lg: {
997
- colSpan: 12,
998
- order: 10,
999
- },
1000
- },
1001
- },
1002
- },
1003
- {
1004
- name: 'channel',
1005
- layout: {
1006
- positions: {
1007
- lg: {
1008
- colSpan: 12,
1009
- },
1010
- },
1011
- },
1012
- },
1013
- {
1014
- name: 'type',
1015
- layout: {
1016
- positions: {
1017
- lg: {
1018
- colSpan: 12,
1019
- order: 3,
1020
- },
1021
- },
1022
- },
1023
- },
1024
- {
1025
- name: 'contentType',
1026
- layout: {
1027
- positions: {
1028
- lg: {
1029
- colSpan: 4,
1030
- order: 4,
1031
- },
1032
- },
1033
- },
1034
- },
1035
- {
1036
- name: 'shape',
1037
- layout: {
1038
- positions: {
1039
- lg: {
1040
- colSpan: 4,
1041
- order: 5,
1042
- },
1043
- },
1044
- },
1045
- },
1046
- {
1047
- name: 'placement',
1048
- layout: {
1049
- positions: {
1050
- lg: {
1051
- colSpan: 4,
1052
- order: 6,
1053
- },
1054
- },
1055
- },
1056
- },
1057
- {
1058
- name: 'pin',
1059
- layout: {
1060
- positions: {
1061
- lg: {
1062
- colSpan: 4,
1063
- },
1064
- },
1065
- },
1066
- },
1067
- ],
1068
- },
1069
- single: {
1070
- title: '{{title}}',
1071
- sections: [
1072
- {
1073
- id: 'notificationChannel',
1074
- },
1075
- {
1076
- id: 'in-app',
1077
- },
1078
- ],
1079
- properties: [
1080
- {
1081
- name: 'title',
1082
- layout: {
1083
- positions: {
1084
- lg: {
1085
- colSpan: 6,
1086
- },
1087
- },
1088
- },
1089
- },
1090
- {
1091
- name: 'body',
1092
- layout: {
1093
- positions: {
1094
- lg: {
1095
- colSpan: 6,
1096
- },
1097
- },
1098
- },
1099
- },
1100
- {
1101
- name: 'imageId',
1102
- layout: {
1103
- positions: {
1104
- lg: {
1105
- colSpan: 12,
1106
- order: 2,
1107
- },
1108
- },
1109
- },
1110
- },
1111
- {
1112
- name: 'channel',
1113
- layout: {
1114
- positions: {
1115
- lg: {
1116
- colSpan: 12,
1117
- },
1118
- },
1119
- },
1120
- },
1121
- {
1122
- name: 'template',
1123
- layout: {
1124
- positions: {
1125
- lg: {
1126
- colSpan: 12,
1127
- },
1128
- },
1129
- },
1130
- },
1131
- {
1132
- name: 'trigger',
1133
- layout: {
1134
- positions: {
1135
- lg: {
1136
- colSpan: 12,
1137
- order: 10,
1138
- },
1139
- },
1140
- },
1141
- },
1142
- {
1143
- name: 'channel',
1144
- layout: {
1145
- positions: {
1146
- lg: {
1147
- colSpan: 12,
1148
- },
1149
- },
1150
- },
1151
- },
1152
- {
1153
- name: 'type',
1154
- layout: {
1155
- positions: {
1156
- lg: {
1157
- colSpan: 12,
1158
- order: 3,
1159
- },
1160
- },
1161
- },
1162
- },
1163
- {
1164
- name: 'contentType',
1165
- layout: {
1166
- positions: {
1167
- lg: {
1168
- colSpan: 4,
1169
- order: 4,
1170
- },
1171
- },
1172
- },
1173
- },
1174
- {
1175
- name: 'shape',
1176
- layout: {
1177
- positions: {
1178
- lg: {
1179
- colSpan: 4,
1180
- order: 5,
1181
- },
1182
- },
1183
- },
1184
- },
1185
- {
1186
- name: 'placement',
1187
- layout: {
1188
- positions: {
1189
- lg: {
1190
- colSpan: 4,
1191
- order: 6,
1192
- },
1193
- },
1194
- },
1195
- },
1196
- {
1197
- name: 'pin',
1198
- layout: {
1199
- positions: {
1200
- lg: {
1201
- colSpan: 4,
1202
- },
1203
- },
1204
- },
1205
- },
1206
- ],
1207
- actions: [...entityMasterRecordActions()],
1208
- },
1209
- list: {
1210
- actions: [...entityMasterCrudActions()],
1211
- views: [
1212
- {
1213
- name: 'all',
1214
- title: '@general:terms.interface.selection.all-items',
1215
- fixed: true,
1216
- columns: [],
1217
- conditions: [],
1218
- sorts: [],
1219
- },
1220
- ],
1221
- },
1222
- },
1223
- },
1224
- };
1225
- return entityDef;
1226
- }
1227
-
1228
- var channel_entity = /*#__PURE__*/Object.freeze({
1229
- __proto__: null,
1230
- notificationChannelEntityFactory: notificationChannelEntityFactory
1231
- });
1232
-
1233
- class AXMNotificationManagementChannelEntityService extends AXMEntityCrudServiceImpl {
1234
- }
1235
- class AXMNotificationManagementChannelEntityServiceImpl extends AXMNotificationManagementChannelEntityService {
1236
- constructor() {
1237
- super(`${RootConfig.module.name}.${RootConfig.entities.channel.name}`);
1238
- }
1239
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementChannelEntityServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1240
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementChannelEntityServiceImpl }); }
1241
- }
1242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementChannelEntityServiceImpl, decorators: [{
1243
- type: Injectable
1244
- }], ctorParameters: () => [] });
1245
-
1246
- class AXMNotificationEntityModule {
1247
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1248
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEntityModule }); }
1249
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEntityModule, providers: [
1250
- {
1251
- provide: AXMNotificationEntityService,
1252
- useClass: AXMNotificationEntityServiceImpl,
1253
- },
1254
- ] }); }
1255
- }
1256
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEntityModule, decorators: [{
1257
- type: NgModule,
1258
- args: [{
1259
- imports: [],
1260
- exports: [],
1261
- declarations: [],
1262
- providers: [
1263
- {
1264
- provide: AXMNotificationEntityService,
1265
- useClass: AXMNotificationEntityServiceImpl,
1266
- },
1267
- ],
1268
- }]
1269
- }] });
1270
-
1271
- class AXMNotificationChannelEntityModule {
1272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationChannelEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1273
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationChannelEntityModule }); }
1274
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationChannelEntityModule, providers: [
1275
- {
1276
- provide: AXMNotificationManagementChannelEntityService,
1277
- useClass: AXMNotificationManagementChannelEntityServiceImpl,
1278
- },
1279
- ] }); }
1280
- }
1281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationChannelEntityModule, decorators: [{
1282
- type: NgModule,
1283
- args: [{
1284
- imports: [],
1285
- exports: [],
1286
- declarations: [],
1287
- providers: [
1288
- {
1289
- provide: AXMNotificationManagementChannelEntityService,
1290
- useClass: AXMNotificationManagementChannelEntityServiceImpl,
1291
- },
1292
- ],
1293
- }]
1294
- }] });
1295
-
1296
- // Entity Services
1297
-
1298
- class AXMMenuProvider {
1299
- constructor() {
1300
- this.sessionService = inject(AXPSessionService);
1301
- }
1302
- async provide(context) {
1303
- const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);
1304
- if (!isAuthorized) {
1305
- return;
1306
- }
1307
- }
1308
- }
1309
-
1310
- //#region ---- Imports ----
1311
- //#endregion
1312
- //#region ---- Manifest Definition ----
1313
- /**
1314
- * Notification Management Module Manifest.
1315
- * Defines module metadata, features, and provider references.
1316
- */
1317
- const NotificationManagementManifest = {
1318
- name: RootConfig.module.name,
1319
- version: '1.0.0',
1320
- title: RootConfig.module.title,
1321
- icon: RootConfig.module.icon,
1322
- i18n: RootConfig.config.i18n,
1323
- required: true,
1324
- // Module dependencies (optional)
1325
- };
1326
- //#endregion
1327
-
1328
- class AXMNotificationRealtimeService {
1329
- constructor() {
1330
- this.changedSubject = new Subject();
1331
- this.changed$ = this.changedSubject.asObservable();
1332
- }
1333
- notifyChanged(event) {
1334
- this.changedSubject.next(event);
1335
- }
1336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationRealtimeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1337
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationRealtimeService, providedIn: 'root' }); }
1338
- }
1339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationRealtimeService, decorators: [{
1340
- type: Injectable,
1341
- args: [{
1342
- providedIn: 'root',
1343
- }]
1344
- }] });
1345
-
1346
- //#region ---- Core Imports ----
1347
- /**
1348
- * Service to display OS-level notifications using the browser's Notification API.
1349
- */
1350
- class AXMOsNotificationService {
1351
- constructor() {
1352
- this.isSupported = signal(false, ...(ngDevMode ? [{ debugName: "isSupported" }] : /* istanbul ignore next */ []));
1353
- this.permission = signal(false, ...(ngDevMode ? [{ debugName: "permission" }] : /* istanbul ignore next */ []));
1354
- this.isSupported.set('Notification' in window);
1355
- }
1356
- /**
1357
- * Requests permission from the user to display desktop notifications.
1358
- * @returns A promise that resolves to true if permission is granted, false otherwise.
1359
- */
1360
- async requestPermission() {
1361
- if (!this.isSupported()) {
1362
- console.warn('This browser does not support desktop notifications.');
1363
- return false;
1364
- }
1365
- switch (Notification.permission) {
1366
- case 'granted':
1367
- this.permission.set(true);
1368
- return true;
1369
- case 'default':
1370
- const permission = await Notification.requestPermission();
1371
- this.permission.set(permission === 'granted');
1372
- return this.permission();
1373
- default:
1374
- this.permission.set(false);
1375
- return false;
1376
- }
1377
- }
1378
- /**
1379
- * Shows a desktop notification.
1380
- * This method should be called after ensuring permission has been granted via requestPermission().
1381
- *
1382
- * @param title The title of the notification.
1383
- * @param options Optional notification options including an onClick handler and window focusing.
1384
- * @returns The Notification object if displayed, otherwise null.
1385
- */
1386
- show(title, options) {
1387
- if (!this.isSupported()) {
1388
- console.warn('This browser does not support desktop notifications.');
1389
- return null;
1390
- }
1391
- if (!this.permission()) {
1392
- console.warn(`Notification permission is ${Notification.permission}. Call requestPermission() first.`);
1393
- return null;
1394
- }
1395
- const notification = new Notification(title, options);
1396
- if (options?.onClick) {
1397
- notification.onclick = () => {
1398
- if (options.activeWindow) {
1399
- window.focus();
1400
- }
1401
- options.onClick();
1402
- };
1403
- }
1404
- return notification;
1405
- }
1406
- /**
1407
- * Dismisses all active notifications or a specific one.
1408
- * @param notification Optional. Pass a specific notification to close it; otherwise closes all.
1409
- */
1410
- dismiss(notification) {
1411
- if (notification) {
1412
- notification.close();
1413
- }
1414
- }
1415
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMOsNotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1416
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMOsNotificationService, providedIn: 'root' }); }
1417
- }
1418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMOsNotificationService, decorators: [{
1419
- type: Injectable,
1420
- args: [{
1421
- providedIn: 'root',
1422
- }]
1423
- }], ctorParameters: () => [] });
1424
-
1425
- /**
1426
- * Signal store that provides a reactive interface for notification-related operations
1427
- * Acts as a layer between notification components and the entity service
1428
- */
1429
- class AXMNotificationConnectorService {
1430
- // Effects
1431
- constructor() {
1432
- this.notificationService = inject(AXMNotificationEntityService);
1433
- this.osNotificationService = inject(AXMOsNotificationService);
1434
- this.notificationRealtime = inject(AXMNotificationRealtimeService);
1435
- this.destroyRef = inject(DestroyRef);
1436
- this.osNotifiedIds = new Set();
1437
- // State signals
1438
- this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
1439
- this.error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
1440
- this.notifications = signal([], ...(ngDevMode ? [{ debugName: "notifications" }] : /* istanbul ignore next */ []));
1441
- this.totalCount = signal(0, ...(ngDevMode ? [{ debugName: "totalCount" }] : /* istanbul ignore next */ []));
1442
- // Public computed signals
1443
- this.loading = computed(() => this.isLoading(), ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
1444
- this.errorMessage = computed(() => this.error(), ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
1445
- this.notificationList = computed(() => this.notifications(), ...(ngDevMode ? [{ debugName: "notificationList" }] : /* istanbul ignore next */ []));
1446
- this.total = computed(() => this.totalCount(), ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
1447
- this.unreadCount = computed(() => this.notifications().filter((notification) => notification.readAt === null).length, ...(ngDevMode ? [{ debugName: "unreadCount" }] : /* istanbul ignore next */ []));
1448
- // Auto-fetch notifications when service is initialized
1449
- effect(() => {
1450
- this.getList();
1451
- });
1452
- this.notificationRealtime.changed$
1453
- .pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))
1454
- .subscribe((event) => {
1455
- if (event.type === 'created' && event.notification) {
1456
- void this.showOsNotificationForItem(event.notification);
1457
- }
1458
- // Read paths already sync `notifications` in markAsRead / markAllAsRead; refetch would duplicate work.
1459
- if (event.type === 'read') {
1460
- return;
1461
- }
1462
- if (!this.isLoading()) {
1463
- void this.getList();
1464
- }
1465
- });
1466
- }
1467
- // Methods from entity service with additional state management
1468
- /**
1469
- * Get list of notifications
1470
- */
1471
- async getList() {
1472
- try {
1473
- this.isLoading.set(true);
1474
- this.error.set(null);
1475
- const response = await this.notificationService.getList();
1476
- // Sort notifications by createAt date in descending order (newest first)
1477
- const sortedItems = [...response.items].sort((a, b) => {
1478
- const dateA = new Date(a.createAt).getTime();
1479
- const dateB = new Date(b.createAt).getTime();
1480
- return dateB - dateA;
1481
- });
1482
- this.notifications.set(sortedItems);
1483
- this.totalCount.set(response.total);
1484
- return {
1485
- ...response,
1486
- items: sortedItems,
1487
- };
1488
- }
1489
- catch (err) {
1490
- this.error.set(err instanceof Error ? err.message : 'Failed to fetch notifications');
1491
- return { total: 0, items: [] };
1492
- }
1493
- finally {
1494
- this.isLoading.set(false);
1495
- }
1496
- }
1497
- /**
1498
- * Mark notifications as read
1499
- * If no specific IDs are provided, mark all unread notifications as read
1500
- * If specific IDs are provided, set readAt only when it is currently null (no toggling)
1501
- */
1502
- async markAsRead(payload = { id: [] }) {
1503
- try {
1504
- // this.isLoading.set(true);
1505
- this.error.set(null);
1506
- await this.notificationService.markAsRead(payload);
1507
- // Update local state to reflect read status without toggling
1508
- if (payload?.id?.length) {
1509
- // Set readAt for specific notifications only if currently unread
1510
- this.notifications.update((notifications) => notifications.map((notification) => {
1511
- if (payload.id.includes(notification.id)) {
1512
- // Only set readAt when it is null (no toggling to unread)
1513
- return notification.readAt === null ? { ...notification, readAt: new Date() } : notification;
1514
- }
1515
- return notification;
1516
- }));
1517
- }
1518
- else {
1519
- // If no specific IDs are provided, mark all unread notifications as read
1520
- this.notifications.update((notifications) => notifications.map((notification) => notification.readAt ? notification : { ...notification, readAt: new Date() }));
1521
- }
1522
- }
1523
- catch (err) {
1524
- this.error.set(err instanceof Error ? err.message : 'Failed to mark notifications as read');
1525
- }
1526
- finally {
1527
- // this.isLoading.set(false);
1528
- }
1529
- }
1530
- async markAllAsRead() {
1531
- try {
1532
- this.error.set(null);
1533
- await this.notificationService.markAllAsRead();
1534
- const readAt = new Date();
1535
- this.notifications.update((notifications) => notifications.map((notification) => notification.readAt ? notification : { ...notification, readAt }));
1536
- }
1537
- catch (err) {
1538
- this.error.set(err instanceof Error ? err.message : 'Failed to mark all notifications as read');
1539
- }
1540
- }
1541
- /**
1542
- * Create a new notification
1543
- */
1544
- async create(payload, options) {
1545
- this.isLoading.set(true);
1546
- this.error.set(null);
1547
- //send os notification
1548
- const isPermissionGranted = await this.osNotificationService.requestPermission();
1549
- if (payload && isPermissionGranted) {
1550
- this.osNotificationService.show(payload.title || 'Notification', {
1551
- body: payload.body || 'No body',
1552
- ...options,
1553
- });
1554
- this.osNotifiedIds.add(payload.id);
1555
- }
1556
- const createdNotification = await this.notificationService.create(payload);
1557
- // Refresh list after creating a notification
1558
- this.notifications.update((notifications) => {
1559
- const newNotifications = [createdNotification, ...notifications];
1560
- return newNotifications.sort((a, b) => new Date(b.createAt).getTime() - new Date(a.createAt).getTime());
1561
- });
1562
- this.totalCount.update((count) => count + 1);
1563
- await this.getList();
1564
- this.isLoading.set(false);
1565
- }
1566
- async showOsNotificationForItem(notification, options) {
1567
- if (!notification.id || this.osNotifiedIds.has(notification.id)) {
1568
- return;
1569
- }
1570
- const isPermissionGranted = await this.osNotificationService.requestPermission();
1571
- if (!isPermissionGranted) {
1572
- return;
1573
- }
1574
- this.osNotificationService.show(notification.title || 'Notification', {
1575
- body: notification.body || 'No body',
1576
- ...options,
1577
- });
1578
- this.osNotifiedIds.add(notification.id);
1579
- }
1580
- // Methods from AXMEntityCrudServiceImpl
1581
- /**
1582
- * Insert one notification
1583
- */
1584
- async insertOne(request) {
1585
- try {
1586
- this.isLoading.set(true);
1587
- this.error.set(null);
1588
- const id = await this.notificationService.insertOne(request);
1589
- // Refresh list after inserting
1590
- await this.getList();
1591
- return id;
1592
- }
1593
- catch (err) {
1594
- this.error.set(err instanceof Error ? err.message : 'Failed to insert notification');
1595
- throw err;
1596
- }
1597
- finally {
1598
- this.isLoading.set(false);
1599
- }
1600
- }
1601
- /**
1602
- * Get one notification by id
1603
- */
1604
- async getOne(id) {
1605
- try {
1606
- this.isLoading.set(true);
1607
- this.error.set(null);
1608
- return await this.notificationService.getOne(id);
1609
- }
1610
- catch (err) {
1611
- this.error.set(err instanceof Error ? err.message : `Failed to get notification with id ${id}`);
1612
- throw err;
1613
- }
1614
- finally {
1615
- this.isLoading.set(false);
1616
- }
1617
- }
1618
- /**
1619
- * Delete one notification
1620
- */
1621
- async deleteOne(id) {
1622
- try {
1623
- // this.isLoading.set(true);
1624
- this.error.set(null);
1625
- await this.notificationService.deleteOne(id);
1626
- // Update local state to remove deleted notification
1627
- this.notifications.update((notifications) => notifications.filter((notification) => notification.id !== id));
1628
- // Update total count
1629
- this.totalCount.update((count) => count - 1);
1630
- }
1631
- catch (err) {
1632
- this.error.set(err instanceof Error ? err.message : `Failed to delete notification with id ${id}`);
1633
- throw err;
1634
- }
1635
- finally {
1636
- // this.isLoading.set(false);
1637
- }
1638
- }
1639
- /**
1640
- * Update one notification
1641
- */
1642
- async updateOne(id, values) {
1643
- try {
1644
- this.isLoading.set(true);
1645
- this.error.set(null);
1646
- const updated = await this.notificationService.updateOne(id, values);
1647
- // Update local state to reflect changes
1648
- this.notifications.update((notifications) => notifications.map((notification) => notification.id === id ? { ...notification, ...values } : notification));
1649
- return updated;
1650
- }
1651
- catch (err) {
1652
- this.error.set(err instanceof Error ? err.message : `Failed to update notification with id ${id}`);
1653
- throw err;
1654
- }
1655
- finally {
1656
- this.isLoading.set(false);
1657
- }
1658
- }
1659
- /**
1660
- * Query notifications
1661
- */
1662
- async query(request = { skip: 0, take: 100 }) {
1663
- try {
1664
- this.isLoading.set(true);
1665
- this.error.set(null);
1666
- const result = await this.notificationService.query(request);
1667
- // Update local state with query results
1668
- this.notifications.set(result.items);
1669
- this.totalCount.set(result.total);
1670
- return result;
1671
- }
1672
- catch (err) {
1673
- this.error.set(err instanceof Error ? err.message : 'Failed to query notifications');
1674
- throw err;
1675
- }
1676
- finally {
1677
- this.isLoading.set(false);
1678
- }
1679
- }
1680
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationConnectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1681
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationConnectorService, providedIn: 'root' }); }
1682
- }
1683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationConnectorService, decorators: [{
1684
- type: Injectable,
1685
- args: [{
1686
- providedIn: 'root',
1687
- }]
1688
- }], ctorParameters: () => [] });
1689
-
1690
- // Provides a live unread notifications count for header/task badges
1691
- class AXMNotificationBadgeProvider {
1692
- constructor() {
1693
- this.notificationService = inject(AXMNotificationConnectorService);
1694
- this.key = 'badge-notification';
1695
- this.count = computed(() => this.notificationService.unreadCount(), ...(ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []));
1696
- }
1697
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationBadgeProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1698
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationBadgeProvider }); }
1699
- }
1700
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationBadgeProvider, decorators: [{
1701
- type: Injectable
1702
- }] });
1703
-
1704
- //#region ---- Permission Keys ----
1705
- const AXPNotificationManagementPermissionKeys = {
1706
- NotificationManagement: {
1707
- Management: 'NotificationManagement:Permission:Management',
1708
- Email: {
1709
- ShowDialog: 'NotificationManagement:Permission:Email.ShowDialog',
1710
- Send: 'NotificationManagement:Permission:Email.Send',
1711
- },
1712
- },
1713
- };
1714
- //#endregion
1715
-
1716
- class AXMPermissionDefinitionProvider {
1717
- constructor() {
1718
- this.translateService = inject(AXTranslationService);
1719
- }
1720
- async define(context) {
1721
- const trans = async (key) => await this.translateService.translateAsync(`@notification-management:permissions.${key}`);
1722
- const keys = AXPNotificationManagementPermissionKeys.NotificationManagement;
1723
- context
1724
- .addGroup(RootConfig.module.name, await trans('manage.title'), await trans('manage.description'))
1725
- .addPermission(keys.Management, await trans('manage.permission.title'), await trans('manage.permission.description'))
1726
- .endPermission()
1727
- .addPermission(keys.Email.ShowDialog, await trans('email.show-dialog.title'), await trans('email.show-dialog.description'))
1728
- .endPermission()
1729
- .addPermission(keys.Email.Send, await trans('email.send.title'), await trans('email.send.description'))
1730
- .endPermission()
1731
- .endGroup();
1732
- }
1733
- }
1734
-
1735
- class AXMEntityLoader {
1736
- constructor() {
1737
- this.injector = inject(Injector);
1738
- }
1739
- preload() {
1740
- const module = RootConfig.module.name;
1741
- return Array.from(Object.values(RootConfig.entities)).map((entity) => ({
1742
- module: module,
1743
- entity: entity.name,
1744
- }));
1745
- }
1746
- async get(moduleName, entityName) {
1747
- if (moduleName == RootConfig.module.name) {
1748
- return new Promise(async (resolve) => {
1749
- switch (entityName) {
1750
- case RootConfig.entities.template.name: {
1751
- const entity = (await Promise.resolve().then(function () { return template_entity; })).notificationTemplateEntityFactory;
1752
- resolve(entity(this.injector));
1753
- break;
1754
- }
1755
- case RootConfig.entities.channel.name: {
1756
- const entity = (await Promise.resolve().then(function () { return channel_entity; })).notificationChannelEntityFactory;
1757
- resolve(entity(this.injector));
1758
- break;
1759
- }
1760
- //TODO: Add your custom entity here
1761
- case 'my-notification': {
1762
- const entity = (await Promise.resolve().then(function () { return myNotification; })).myNotificationEntityFactory;
1763
- resolve(entity(this.injector));
1764
- break;
1765
- }
1766
- case RootConfig.entities.notification.name: {
1767
- const entity = (await Promise.resolve().then(function () { return notification_entity; })).notificationEntityFactory;
1768
- resolve(entity(this.injector));
1769
- break;
1770
- }
1771
- default:
1772
- resolve(null);
1773
- }
1774
- });
1775
- }
1776
- return null;
1777
- }
1778
- async list() {
1779
- const m = RootConfig.module.name;
1780
- return Promise.resolve(Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m })));
1781
- }
1782
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1783
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityLoader }); }
1784
- }
1785
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMEntityLoader, decorators: [{
1786
- type: Injectable
1787
- }] });
1788
-
1789
- class AXPNotificationDefinitionProvider {
1790
- }
1791
- const DEFAULT_NOTIFICATION_DEFINITION = [
1792
- // {
1793
- // name: 'File',
1794
- // title: 'Email',
1795
- // icon: 'fa-solid fa-envelope',
1796
- // async execute(command: AXPExecuteCommand, item: AXMNotificationItem): Promise<void> {
1797
- // console.log('Execute for email', item);
1798
- // // In a real implementation, you would perform an action
1799
- // return Promise.resolve();
1800
- // },
1801
- // },
1802
- // {
1803
- // name: 'Chat',
1804
- // title: 'SMS',
1805
- // icon: 'fa-solid fa-comment-sms',
1806
- // async execute(command: AXPExecuteCommand, item: AXMNotificationItem): Promise<void> {
1807
- // console.log('Execute for sms', item);
1808
- // // In a real implementation, you would perform an action
1809
- // return Promise.resolve();
1810
- // },
1811
- // },
1812
- // {
1813
- // name: 'Comment',
1814
- // title: 'Comment',
1815
- // icon: 'fa-solid fa-comment'
1816
- // async execute(command: AXPExecuteCommand, item: AXMNotificationItem): Promise<void> {
1817
- // console.log('Execute for comment', item);
1818
- // // In a real implementation, you would perform an action
1819
- // return Promise.resolve();
1820
- // },
1821
- // },
1822
- // {
1823
- // name: 'Log',
1824
- // title: 'Log',
1825
- // icon: 'fa-solid fa-file-lines',
1826
- // async execute(command: AXPExecuteCommand, item: AXMNotificationItem): Promise<void> {
1827
- // console.log('Execute for log', item);
1828
- // // In a real implementation, you would perform an action
1829
- // return Promise.resolve();
1830
- // },
1831
- // },
1832
- ];
1833
- class AXPNotificationDefinitionProviderDefault extends AXPNotificationDefinitionProvider {
1834
- async provide() {
1835
- return DEFAULT_NOTIFICATION_DEFINITION;
1836
- }
1837
- }
1838
- const AXP_NOTIFICATION_DEFINITION_PROVIDER = new InjectionToken('AXP_NOTIFICATION_DEFINITION_PROVIDER');
1839
- class AXPNotificationDefinitionService {
1840
- constructor() {
1841
- this.providers = inject(AXP_NOTIFICATION_DEFINITION_PROVIDER, { optional: true });
1842
- }
1843
- getProviders() {
1844
- return this.providers?.flat() ?? [];
1845
- }
1846
- resolve(name) {
1847
- return this.getProviders()?.find((p) => p.name === name) ?? null;
1848
- }
1849
- execute(command, item) {
1850
- const provider = this.getProviders()?.find((p) => p.name === item.type);
1851
- if (!provider) {
1852
- throw new Error('Notification provider not found');
1853
- }
1854
- provider.execute(command, item);
1855
- }
1856
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPNotificationDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1857
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPNotificationDefinitionService, providedIn: 'root' }); }
1858
- }
1859
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPNotificationDefinitionService, decorators: [{
1860
- type: Injectable,
1861
- args: [{ providedIn: 'root' }]
1862
- }] });
1863
-
1864
- class AXMAdminNotificationItemComponent {
1865
- constructor() {
1866
- //#region ---- Services & Dependencies ----
1867
- this.notificationDefinitionService = inject(AXPNotificationDefinitionService);
1868
- //#endregion
1869
- //#region ---- View Queries ----
1870
- this.div = viewChild('component', { ...(ngDevMode ? { debugName: "div" } : /* istanbul ignore next */ {}), read: ViewContainerRef });
1871
- //#endregion
1872
- //#region ---- Inputs & Outputs ----
1873
- this.data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
1874
- this.onPressNotificationItem = output();
1875
- /** Emits when the popover should be closed (e.g., after clicking an item or action) */
1876
- this.onClosePopover = output();
1877
- this.#af = afterNextRender(() => this.renderComponent());
1878
- }
1879
- //#endregion
1880
- //#region ---- Event Handlers ----
1881
- pressNotificationItem(id) {
1882
- this.onPressNotificationItem.emit(id);
1883
- this.getNotificationProvider()?.execute({ name: 'click' }, this.data());
1884
- this.onClosePopover.emit();
1885
- }
1886
- onAction(command) {
1887
- this.getNotificationProvider()?.execute(command, this.data());
1888
- this.onClosePopover.emit();
1889
- }
1890
- //#endregion
1891
- //#region ---- Utility Methods ----
1892
- getNotificationProvider() {
1893
- return this.notificationDefinitionService.resolve(this.data().type);
1894
- }
1895
- getNotificationContent() {
1896
- const provider = this.getNotificationProvider();
1897
- return provider?.content?.();
1898
- }
1899
- async renderComponent() {
1900
- if (this.getNotificationContent() && this.getNotificationProvider()) {
1901
- const component = await this.getNotificationContent();
1902
- if (component) {
1903
- this.div()?.createComponent(component, {
1904
- bindings: [
1905
- inputBinding('item', this.data),
1906
- outputBinding('execute', (e) => this.onAction(e)),
1907
- ],
1908
- });
1909
- }
1910
- }
1911
- }
1912
- #af;
1913
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAdminNotificationItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1914
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAdminNotificationItemComponent, isStandalone: true, selector: "axp-master-notification-item", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onPressNotificationItem: "onPressNotificationItem", onClosePopover: "onClosePopover" }, viewQueries: [{ propertyName: "div", first: true, predicate: ["component"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "<div\n class=\"notification-item ax-text-start\"\n [id]=\"data().id\"\n (click)=\"pressNotificationItem(data().id)\"\n [class]=\"[data().template.prority, data().readAt ? 'read' : 'unread']\"\n>\n <div class=\"notification-avatar\">\n <axp-user-avatar [size]=\"48\" [userId]=\"data().sender.id\"></axp-user-avatar>\n @if (!data().readAt) {\n <!-- <div class=\"unread-badge\"></div> -->\n }\n </div>\n\n <div class=\"notification-content\">\n <div class=\"notification-header\">\n <div class=\"notification-title\">{{ data().sender.fullName || data().title }}</div>\n <div class=\"notification-meta\">\n <!-- @if (data().template.isPinned) {\n <div class=\"pin-notification\">\n <ax-icon>\n <i class=\"fa-solid fa-thumbtack\"></i>\n </ax-icon>\n </div>\n } -->\n <div class=\"notification-time\">{{ data().createAt | format: 'timeleft' | async }}</div>\n </div>\n </div>\n @if (this.getNotificationContent() && this.getNotificationProvider()) {\n <div #component></div>\n } @else {\n <div class=\"notification-body\">{{ data().body }}</div>\n }\n </div>\n</div>\n", styles: [".notification-item{position:relative;margin-top:2px;margin-bottom:2px;display:flex;cursor:pointer;gap:1rem;border-radius:.125rem;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;backdrop-filter:blur(8px)}.notification-item.read{background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.notification-item.unread{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))}.notification-item:hover{background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}.notification-item.Notice:before,.notification-item.Danger:before,.notification-item.Warning:before{content:\"\";position:absolute;top:.5rem;bottom:.5rem;inset-inline-start:0px;width:.125rem;border-radius:9999px}.notification-item.Notice:before{background:rgb(var(--ax-sys-color-success-500))}.notification-item.Danger:before{background:rgb(var(--ax-sys-color-danger-500))}.notification-item.Warning:before{background:rgb(var(--ax-sys-color-warning-500))}.notification-item .notification-avatar{position:relative}.notification-item .notification-avatar .unread-badge{position:absolute;bottom:.25rem;inset-inline-end:.25rem;width:10px;height:10px;background:rgb(var(--ax-sys-color-primary-500));border:2px solid rgb(var(--ax-sys-color-surface));border-radius:50%}.notification-item .notification-content{min-width:0px;flex:1 1 0%}.notification-item .notification-content .notification-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.notification-item .notification-content .notification-header .notification-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1rem;line-height:1.5rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.notification-item .notification-content .notification-header .notification-meta{display:flex;align-items:center;gap:.5rem}.notification-item .notification-content .notification-header .notification-meta .notification-time{white-space:nowrap;font-size:.75rem;line-height:1rem;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .notification-content .notification-body{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-align:start;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .pin-notification{border-radius:9999px;padding:.375rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .pin-notification i{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1915
- }
1916
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAdminNotificationItemComponent, decorators: [{
1917
- type: Component,
1918
- args: [{ selector: 'axp-master-notification-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1919
- CommonModule,
1920
- AXButtonModule,
1921
- AXDecoratorModule,
1922
- AXPUserAvatarComponent,
1923
- AXImageModule,
1924
- AXBadgeModule,
1925
- AXFormatModule,
1926
- ], template: "<div\n class=\"notification-item ax-text-start\"\n [id]=\"data().id\"\n (click)=\"pressNotificationItem(data().id)\"\n [class]=\"[data().template.prority, data().readAt ? 'read' : 'unread']\"\n>\n <div class=\"notification-avatar\">\n <axp-user-avatar [size]=\"48\" [userId]=\"data().sender.id\"></axp-user-avatar>\n @if (!data().readAt) {\n <!-- <div class=\"unread-badge\"></div> -->\n }\n </div>\n\n <div class=\"notification-content\">\n <div class=\"notification-header\">\n <div class=\"notification-title\">{{ data().sender.fullName || data().title }}</div>\n <div class=\"notification-meta\">\n <!-- @if (data().template.isPinned) {\n <div class=\"pin-notification\">\n <ax-icon>\n <i class=\"fa-solid fa-thumbtack\"></i>\n </ax-icon>\n </div>\n } -->\n <div class=\"notification-time\">{{ data().createAt | format: 'timeleft' | async }}</div>\n </div>\n </div>\n @if (this.getNotificationContent() && this.getNotificationProvider()) {\n <div #component></div>\n } @else {\n <div class=\"notification-body\">{{ data().body }}</div>\n }\n </div>\n</div>\n", styles: [".notification-item{position:relative;margin-top:2px;margin-bottom:2px;display:flex;cursor:pointer;gap:1rem;border-radius:.125rem;padding:1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;backdrop-filter:blur(8px)}.notification-item.read{background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.notification-item.unread{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))}.notification-item:hover{background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}.notification-item.Notice:before,.notification-item.Danger:before,.notification-item.Warning:before{content:\"\";position:absolute;top:.5rem;bottom:.5rem;inset-inline-start:0px;width:.125rem;border-radius:9999px}.notification-item.Notice:before{background:rgb(var(--ax-sys-color-success-500))}.notification-item.Danger:before{background:rgb(var(--ax-sys-color-danger-500))}.notification-item.Warning:before{background:rgb(var(--ax-sys-color-warning-500))}.notification-item .notification-avatar{position:relative}.notification-item .notification-avatar .unread-badge{position:absolute;bottom:.25rem;inset-inline-end:.25rem;width:10px;height:10px;background:rgb(var(--ax-sys-color-primary-500));border:2px solid rgb(var(--ax-sys-color-surface));border-radius:50%}.notification-item .notification-content{min-width:0px;flex:1 1 0%}.notification-item .notification-content .notification-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.notification-item .notification-content .notification-header .notification-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1rem;line-height:1.5rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.notification-item .notification-content .notification-header .notification-meta{display:flex;align-items:center;gap:.5rem}.notification-item .notification-content .notification-header .notification-meta .notification-time{white-space:nowrap;font-size:.75rem;line-height:1rem;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .notification-content .notification-body{margin-top:.25rem;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;text-align:start;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .pin-notification{border-radius:9999px;padding:.375rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .pin-notification i{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}\n"] }]
1927
- }], propDecorators: { div: [{ type: i0.ViewChild, args: ['component', { ...{ read: ViewContainerRef }, isSignal: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], onPressNotificationItem: [{ type: i0.Output, args: ["onPressNotificationItem"] }], onClosePopover: [{ type: i0.Output, args: ["onClosePopover"] }] } });
1928
-
1929
- class AXMAdminNotificationPanelComponent {
1930
- constructor() {
1931
- //#region ---- Outputs ----
1932
- this.onNewNotification = output();
1933
- /** Emits when the popover should be closed (bubbled from item components) */
1934
- this.onClosePopover = output();
1935
- //#endregion
1936
- //#region ---- Services & Dependencies ----
1937
- this.notificationConnector = inject(AXMNotificationConnectorService);
1938
- this.toastService = inject(AXToastService);
1939
- this.router = inject(Router);
1940
- this.sessionService = inject(AXPSessionService);
1941
- //#endregion
1942
- //#region ---- Signals & Inputs ----
1943
- /**
1944
- * Tabs provided by the parent (custom categories). The component will prepend
1945
- * "Unread" and "All" before these tabs.
1946
- */
1947
- this.providedTabs = input([], ...(ngDevMode ? [{ debugName: "providedTabs" }] : /* istanbul ignore next */ []));
1948
- // Use store's signals directly
1949
- this.notifications = this.notificationConnector.notificationList;
1950
- this.totalNotifications = this.notificationConnector.total;
1951
- this.isLoading = this.notificationConnector.loading;
1952
- this.errorMessage = this.notificationConnector.errorMessage;
1953
- // Default active tab is Unread
1954
- this.activeTab = signal('Unread', ...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
1955
- //#endregion
1956
- //#region ---- Computed Properties ----
1957
- this.tabItems = computed(() => this.getTabItems(this.notifications(), this.providedTabs()), { ...(ngDevMode ? { debugName: "tabItems" } : /* istanbul ignore next */ {}), equal: (a, b) => JSON.stringify(a) === JSON.stringify(b) });
1958
- this.NewNotification = computed(() => this.getNewNotification(this.tabItems()), ...(ngDevMode ? [{ debugName: "NewNotification" }] : /* istanbul ignore next */ []));
1959
- this.NewNotificationEffect = effect(() => this.onNewNotification.emit(this.NewNotification()), ...(ngDevMode ? [{ debugName: "NewNotificationEffect" }] : /* istanbul ignore next */ []));
1960
- }
1961
- changeActiveTab(tab) {
1962
- this.activeTab.set(tab);
1963
- }
1964
- //#endregion
1965
- ngOnInit() {
1966
- this.loadNotification();
1967
- }
1968
- async loadNotification() {
1969
- try {
1970
- await this.notificationConnector.getList();
1971
- }
1972
- catch (error) {
1973
- this.toastService.show({
1974
- content: typeof error === 'string' ? error : 'Failed to load notifications!',
1975
- color: 'danger',
1976
- location: 'bottom-center',
1977
- closeButton: true,
1978
- timeOut: 3000,
1979
- timeOutProgress: true,
1980
- });
1981
- }
1982
- }
1983
- //#region ---- Utility Methods ----
1984
- getTabItems(notifications, userTabs) {
1985
- // Base when no notifications loaded yet
1986
- if (!notifications) {
1987
- const base = [
1988
- { text: 'Unread', count: 0 },
1989
- { text: 'All', count: 0 },
1990
- ];
1991
- return base.concat((userTabs ?? []).map((t) => ({ text: t, count: 0 })));
1992
- }
1993
- // Count unread by category
1994
- const unreadCountByCategory = new Map();
1995
- for (const notification of notifications) {
1996
- const category = notification.template.category;
1997
- if (!unreadCountByCategory.has(category)) {
1998
- unreadCountByCategory.set(category, 0);
1999
- }
2000
- if (!notification.readAt) {
2001
- unreadCountByCategory.set(category, (unreadCountByCategory.get(category) ?? 0) + 1);
2002
- }
2003
- }
2004
- const unreadTotal = Array.from(unreadCountByCategory.values()).reduce((a, b) => a + b, 0);
2005
- // Keep previous behavior: 'All' badge shows total UNREAD across all categories
2006
- const allTotal = unreadTotal;
2007
- // Determine which tabs to show after Unread and All
2008
- let finalUserTabs = userTabs ?? [];
2009
- if (finalUserTabs.length === 0) {
2010
- // Fallback to discovered categories if parent has not provided tabs
2011
- finalUserTabs = Array.from(unreadCountByCategory.keys());
2012
- }
2013
- // Ensure uniqueness and preserve provided order
2014
- const seen = new Set(['Unread', 'All']);
2015
- const userCategoryTabs = finalUserTabs.filter((t) => {
2016
- if (seen.has(t))
2017
- return false;
2018
- seen.add(t);
2019
- return true;
2020
- });
2021
- const result = [
2022
- { text: 'Unread', count: unreadTotal },
2023
- { text: 'All', count: allTotal },
2024
- ...userCategoryTabs.map((category) => ({
2025
- text: category,
2026
- count: unreadCountByCategory.get(category) ?? 0,
2027
- })),
2028
- ];
2029
- return result;
2030
- }
2031
- getNewNotification(data) {
2032
- // Use the Unread tab as the single source of truth for new notifications
2033
- return data.find((tab) => tab.text === 'Unread')?.count ?? 0;
2034
- }
2035
- getNotificationItems(category) {
2036
- const list = this.notifications();
2037
- if (!list)
2038
- return [];
2039
- if (category === 'All') {
2040
- return list;
2041
- }
2042
- if (category === 'Unread') {
2043
- return list.filter((item) => !item.readAt);
2044
- }
2045
- return list.filter((item) => item.template.category === category);
2046
- }
2047
- /**
2048
- * Mark a notification as read or unread (toggle read status)
2049
- */
2050
- async markAsRead(id) {
2051
- try {
2052
- await this.notificationConnector.markAsRead({ id: [id] });
2053
- }
2054
- catch (error) {
2055
- console.error('Failed to toggle notification read status:', error);
2056
- }
2057
- }
2058
- /**
2059
- * Mark all unread notifications as read
2060
- */
2061
- async markAllAsRead() {
2062
- try {
2063
- await this.notificationConnector.markAllAsRead();
2064
- }
2065
- catch (error) {
2066
- console.error('Failed to mark all notifications as read:', error);
2067
- }
2068
- }
2069
- viewAllNotifications() {
2070
- this.router.navigate([`${this.sessionService.application?.name}/notifications`]);
2071
- }
2072
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAdminNotificationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2073
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAdminNotificationPanelComponent, isStandalone: true, selector: "axm-admin-notification-panel", inputs: { providedTabs: { classPropertyName: "providedTabs", publicName: "providedTabs", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onNewNotification: "onNewNotification", onClosePopover: "onClosePopover" }, ngImport: i0, template: "<div class=\"ax-p-4 ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-xl\">Notifications</span>\n <ax-button color=\"default\" look=\"blank\">\n <ax-icon>\n <i class=\"fa-regular fa-gear fa-lg\"></i>\n </ax-icon>\n </ax-button>\n</div>\n<ax-tabs [content]=\"cons\" look=\"with-line\" location=\"bottom\">\n @for (tab of tabItems(); track tab.text) {\n <ax-tab-item [text]=\"tab.text\" [active]=\"activeTab() === tab.text\" (activeChange)=\"changeActiveTab(tab.text)\">\n <ax-suffix>\n @if (tab.count && tab.text === 'Unread') {\n <ax-badge [color]=\"activeTab() === tab.text ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"ax-max-h-[50vh] md:ax-w-[32rem] ax-overflow-y-auto\">\n @if (getNotificationItems(tab.text).length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-gap-2 ax-p-6\">\n <i class=\"fa-regular fa-bell-slash ax-text-2xl\"></i>\n <div class=\"ax-text-sm\">No notifications</div>\n </div>\n } @else {\n @for (notif of getNotificationItems(tab.text); track notif.id) {\n <axp-master-notification-item\n [data]=\"notif\"\n (onPressNotificationItem)=\"markAsRead($event)\"\n (onClosePopover)=\"onClosePopover.emit()\"\n ></axp-master-notification-item>\n }\n }\n </div>\n <div class=\"ax-flex ax-gap-4 ax-justify-between ax-p-4 ax-border-t ax-border-default\">\n <ax-button\n [disabled]=\"NewNotification() === 0\"\n [color]=\"'default'\"\n text=\"Mark all as read\"\n (onClick)=\"markAllAsRead()\"\n ></ax-button>\n <ax-button color=\"primary\" text=\"View all notifications\" (onClick)=\"viewAllNotifications()\"></ax-button>\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #cons=\"axTabContent\"></ng-template>\n", dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "directive", type: i2$2.AXTabContentDirective, selector: "[axTabContent]", inputs: ["axTabContent"], exportAs: ["axTabContent"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i3.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: AXMAdminNotificationItemComponent, selector: "axp-master-notification-item", inputs: ["data"], outputs: ["onPressNotificationItem", "onClosePopover"] }, { kind: "ngmodule", type: AXFormatModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2074
- }
2075
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAdminNotificationPanelComponent, decorators: [{
2076
- type: Component,
2077
- args: [{ selector: 'axm-admin-notification-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
2078
- AXButtonModule,
2079
- AXTabsModule,
2080
- AXDecoratorModule,
2081
- AXBadgeModule,
2082
- AXPopoverModule,
2083
- AXMAdminNotificationItemComponent,
2084
- AXFormatModule,
2085
- ], template: "<div class=\"ax-p-4 ax-flex ax-justify-between ax-items-center\">\n <span class=\"ax-text-xl\">Notifications</span>\n <ax-button color=\"default\" look=\"blank\">\n <ax-icon>\n <i class=\"fa-regular fa-gear fa-lg\"></i>\n </ax-icon>\n </ax-button>\n</div>\n<ax-tabs [content]=\"cons\" look=\"with-line\" location=\"bottom\">\n @for (tab of tabItems(); track tab.text) {\n <ax-tab-item [text]=\"tab.text\" [active]=\"activeTab() === tab.text\" (activeChange)=\"changeActiveTab(tab.text)\">\n <ax-suffix>\n @if (tab.count && tab.text === 'Unread') {\n <ax-badge [color]=\"activeTab() === tab.text ? 'primary' : 'ghost'\" [text]=\"tab.count.toString()\"></ax-badge>\n }\n </ax-suffix>\n <ax-content>\n <div class=\"ax-max-h-[50vh] md:ax-w-[32rem] ax-overflow-y-auto\">\n @if (getNotificationItems(tab.text).length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-gap-2 ax-p-6\">\n <i class=\"fa-regular fa-bell-slash ax-text-2xl\"></i>\n <div class=\"ax-text-sm\">No notifications</div>\n </div>\n } @else {\n @for (notif of getNotificationItems(tab.text); track notif.id) {\n <axp-master-notification-item\n [data]=\"notif\"\n (onPressNotificationItem)=\"markAsRead($event)\"\n (onClosePopover)=\"onClosePopover.emit()\"\n ></axp-master-notification-item>\n }\n }\n </div>\n <div class=\"ax-flex ax-gap-4 ax-justify-between ax-p-4 ax-border-t ax-border-default\">\n <ax-button\n [disabled]=\"NewNotification() === 0\"\n [color]=\"'default'\"\n text=\"Mark all as read\"\n (onClick)=\"markAllAsRead()\"\n ></ax-button>\n <ax-button color=\"primary\" text=\"View all notifications\" (onClick)=\"viewAllNotifications()\"></ax-button>\n </div>\n </ax-content>\n </ax-tab-item>\n }\n</ax-tabs>\n\n<ng-template [axTabContent] #cons=\"axTabContent\"></ng-template>\n" }]
2086
- }], propDecorators: { onNewNotification: [{ type: i0.Output, args: ["onNewNotification"] }], onClosePopover: [{ type: i0.Output, args: ["onClosePopover"] }], providedTabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "providedTabs", required: false }] }] } });
2087
-
2088
- class AXMAdminNotificationSlotComponent {
2089
- constructor() {
2090
- //#region ---- Signals ----
2091
- this.totalNewNotification = signal(0, ...(ngDevMode ? [{ debugName: "totalNewNotification" }] : /* istanbul ignore next */ []));
2092
- this.badgeDisplay = computed(() => {
2093
- const total = this.totalNewNotification();
2094
- if (total <= 0) {
2095
- return '';
2096
- }
2097
- return total > 50 ? '50+' : total.toString();
2098
- }, ...(ngDevMode ? [{ debugName: "badgeDisplay" }] : /* istanbul ignore next */ []));
2099
- //#endregion
2100
- //#region ---- View Queries ----
2101
- this.popover = viewChild(AXPopoverComponent, ...(ngDevMode ? [{ debugName: "popover" }] : /* istanbul ignore next */ []));
2102
- }
2103
- //#endregion
2104
- //#region ---- Event Handlers ----
2105
- setTotalNewNotification(value) {
2106
- this.totalNewNotification.set(value);
2107
- }
2108
- closePopover() {
2109
- this.popover()?.close();
2110
- }
2111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAdminNotificationSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2112
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAdminNotificationSlotComponent, isStandalone: true, selector: "axm-admin-notification-slot", viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-button class=\"ax-relative\" color=\"primary\" #notification>\n <ax-icon>\n <i class=\"fa-regular fa-bell\"></i>\n </ax-icon>\n\n</ax-button>\n<div class=\"__badge\" [class.--xs]=\"badgeDisplay().length > 2\">\n @if (badgeDisplay()) {\n <ax-badge color=\"danger\" [text]=\"badgeDisplay()\"></ax-badge>\n }\n</div>\n<ax-popover [target]=\"notification\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-w-full\">\n <axm-admin-notification-panel (onNewNotification)=\"setTotalNewNotification($event)\"\n (onClosePopover)=\"closePopover()\">\n </axm-admin-notification-panel>\n </div>\n</ax-popover>", styles: ["axm-admin-notification-slot{position:relative}axm-admin-notification-slot .__badge{position:absolute;top:-.25rem;inset-inline-end:-.25rem;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i6.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i3.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXMAdminNotificationPanelComponent, selector: "axm-admin-notification-panel", inputs: ["providedTabs"], outputs: ["onNewNotification", "onClosePopover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
2113
- }
2114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAdminNotificationSlotComponent, decorators: [{
2115
- type: Component,
2116
- args: [{ selector: 'axm-admin-notification-slot', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule, AXBadgeModule, AXPopoverModule, AXMAdminNotificationPanelComponent], encapsulation: ViewEncapsulation.None, template: "<ax-button class=\"ax-relative\" color=\"primary\" #notification>\n <ax-icon>\n <i class=\"fa-regular fa-bell\"></i>\n </ax-icon>\n\n</ax-button>\n<div class=\"__badge\" [class.--xs]=\"badgeDisplay().length > 2\">\n @if (badgeDisplay()) {\n <ax-badge color=\"danger\" [text]=\"badgeDisplay()\"></ax-badge>\n }\n</div>\n<ax-popover [target]=\"notification\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-w-full\">\n <axm-admin-notification-panel (onNewNotification)=\"setTotalNewNotification($event)\"\n (onClosePopover)=\"closePopover()\">\n </axm-admin-notification-panel>\n </div>\n</ax-popover>", styles: ["axm-admin-notification-slot{position:relative}axm-admin-notification-slot .__badge{position:absolute;top:-.25rem;inset-inline-end:-.25rem;pointer-events:none}\n"] }]
2117
- }], propDecorators: { popover: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPopoverComponent), { isSignal: true }] }] } });
2118
-
2119
- /**
2120
- * Notification Widget Component
2121
- * Displays notifications in a card with tabs
2122
- */
2123
- class AXPNotificationWidgetViewComponent extends AXPValueWidgetComponent {
2124
- constructor() {
2125
- super();
2126
- // Outputs
2127
- this.notificationClick = output();
2128
- this.markAsRead = output();
2129
- // Dependencies
2130
- this.cdr = inject(ChangeDetectorRef);
2131
- this.datePipe = inject(DatePipe);
2132
- this.notificationConnector = inject(AXMNotificationConnectorService);
2133
- this.toastService = inject(AXToastService);
2134
- // State
2135
- this.activeTab = signal('unread', ...(ngDevMode ? [{ debugName: "activeTab" }] : /* istanbul ignore next */ []));
2136
- this.refreshTimerId = null;
2137
- // Configuration
2138
- this.maxItems = computed(() => this.options()?.['maxItems'] ?? 10, ...(ngDevMode ? [{ debugName: "maxItems" }] : /* istanbul ignore next */ []));
2139
- this.showAvatar = computed(() => this.options()?.['showAvatar'] ?? true, ...(ngDevMode ? [{ debugName: "showAvatar" }] : /* istanbul ignore next */ []));
2140
- this.showDate = computed(() => this.options()?.['showDate'] ?? true, ...(ngDevMode ? [{ debugName: "showDate" }] : /* istanbul ignore next */ []));
2141
- this.autoRefresh = computed(() => this.options()?.['autoRefresh'] ?? true, ...(ngDevMode ? [{ debugName: "autoRefresh" }] : /* istanbul ignore next */ []));
2142
- this.refreshInterval = computed(() => (this.options()?.['refreshInterval'] ?? 60) * 1000, ...(ngDevMode ? [{ debugName: "refreshInterval" }] : /* istanbul ignore next */ [])); // Convert to milliseconds
2143
- // Use store's signals directly
2144
- this.notifications = this.notificationConnector.notificationList;
2145
- this.totalNotifications = this.notificationConnector.total;
2146
- this.isLoading = this.notificationConnector.loading;
2147
- // Computed data
2148
- this.notificationItems = computed(() => {
2149
- const items = this.notifications();
2150
- if (!items?.length)
2151
- return [];
2152
- // Sort by pinned status and date
2153
- const sortedItems = [...items].sort((a, b) => {
2154
- if (a.template.isPinned === b.template.isPinned) {
2155
- return new Date(b.createAt).getTime() - new Date(a.createAt).getTime();
2156
- }
2157
- return a.template.isPinned ? -1 : 1;
2158
- });
2159
- // Filter by active tab
2160
- const filtered = this.activeTab() === 'unread' ? sortedItems.filter((n) => !n.readAt) : sortedItems;
2161
- return filtered.slice(0, this.maxItems());
2162
- }, ...(ngDevMode ? [{ debugName: "notificationItems" }] : /* istanbul ignore next */ []));
2163
- /**
2164
- * Bridge click from admin item (emits notification id)
2165
- */
2166
- this.onAdminItemClick = (id) => {
2167
- return;
2168
- // const item = this.notifications().find((n) => n.id === id);
2169
- // if (!item) return;
2170
- // this.onNotificationClick(item);
2171
- };
2172
- // Watch for changes to auto-refresh settings
2173
- effect(() => {
2174
- this.setupAutoRefresh();
2175
- });
2176
- }
2177
- ngOnInit() {
2178
- this.loadNotifications();
2179
- }
2180
- ngOnDestroy() {
2181
- this.clearRefreshTimer();
2182
- }
2183
- /**
2184
- * Set up auto-refresh timer based on configuration
2185
- */
2186
- setupAutoRefresh() {
2187
- this.clearRefreshTimer();
2188
- if (this.autoRefresh()) {
2189
- const interval = this.refreshInterval();
2190
- this.refreshTimerId = setInterval(() => {
2191
- this.loadNotifications();
2192
- }, interval);
2193
- }
2194
- }
2195
- /**
2196
- * Clear the refresh timer if it exists
2197
- */
2198
- clearRefreshTimer() {
2199
- if (this.refreshTimerId !== null) {
2200
- clearInterval(this.refreshTimerId);
2201
- this.refreshTimerId = null;
2202
- }
2203
- }
2204
- /**
2205
- * Load notifications data from service
2206
- */
2207
- async loadNotifications() {
2208
- try {
2209
- await this.notificationConnector.getList();
2210
- this.cdr.detectChanges();
2211
- }
2212
- catch (error) {
2213
- this.toastService.show({
2214
- content: typeof error === 'string' ? error : 'Failed to load notifications!',
2215
- color: 'danger',
2216
- location: 'bottom-center',
2217
- closeButton: true,
2218
- timeOut: 3000,
2219
- timeOutProgress: true,
2220
- });
2221
- }
2222
- }
2223
- /**
2224
- * Manually refresh notifications
2225
- */
2226
- refreshNotifications() {
2227
- this.loadNotifications();
2228
- }
2229
- /**
2230
- * Get the count of new messages for the badge
2231
- */
2232
- getNewMessageCount() {
2233
- const items = this.notifications();
2234
- if (!items?.length)
2235
- return 0;
2236
- return items.filter((n) => !n.readAt).length;
2237
- }
2238
- /**
2239
- * Handle tab change event from ax-tabs component
2240
- * @param data The tab change event data
2241
- */
2242
- handleTabChange(data) {
2243
- const index = data.index;
2244
- // Map index to tab name: 0 = 'unread', 1 = 'all'
2245
- const tabName = index === 0 ? 'unread' : 'all';
2246
- this.onTabChange(tabName);
2247
- }
2248
- /**
2249
- * Mark all notifications as read
2250
- */
2251
- async markAllAsRead() {
2252
- try {
2253
- await this.notificationConnector.markAsRead({ id: [] });
2254
- this.cdr.detectChanges();
2255
- }
2256
- catch (error) {
2257
- this.toastService.show({
2258
- content: 'Failed to mark notifications as read',
2259
- color: 'danger',
2260
- location: 'bottom-center',
2261
- closeButton: true,
2262
- timeOut: 3000,
2263
- });
2264
- }
2265
- }
2266
- /**
2267
- * Change the active tab
2268
- */
2269
- onTabChange(tabName) {
2270
- this.activeTab.set(tabName);
2271
- this.cdr.detectChanges();
2272
- }
2273
- /**
2274
- * Handle notification click event
2275
- */
2276
- onNotificationClick(notification) {
2277
- this.markAsReadIfNeeded(notification);
2278
- this.notificationClick.emit(notification);
2279
- }
2280
- /**
2281
- * Format the timestamp in a user-friendly way
2282
- */
2283
- formatTime(date) {
2284
- if (!date)
2285
- return '';
2286
- const dateObj = typeof date === 'string' ? new Date(date) : date;
2287
- const diffDays = this.getDaysDifference(dateObj);
2288
- // Format based on how recent the date is
2289
- if (diffDays === 0)
2290
- return this.datePipe.transform(dateObj, 'h:mm a') || ''; // Today
2291
- if (diffDays === 1)
2292
- return 'Yesterday';
2293
- if (diffDays < 7)
2294
- return this.datePipe.transform(dateObj, 'EEE') || ''; // Day of week
2295
- return this.datePipe.transform(dateObj, 'MM/DD/YYYY') || ''; // Older date
2296
- }
2297
- /**
2298
- * Mark notification as read if needed
2299
- */
2300
- async markAsReadIfNeeded(notification) {
2301
- try {
2302
- // Always mark as read on click if unread, but don't toggle back to unread
2303
- if (notification.readAt)
2304
- return;
2305
- await this.notificationConnector.markAsRead({ id: [notification.id] });
2306
- // Emit the updated notification with readAt set
2307
- // It will be read now because we only call this for unread notifications
2308
- const updatedNotification = {
2309
- ...notification,
2310
- readAt: new Date(),
2311
- };
2312
- this.markAsRead.emit(updatedNotification);
2313
- this.cdr.detectChanges();
2314
- }
2315
- catch (error) {
2316
- console.error('Failed to mark notification as read:', error);
2317
- }
2318
- }
2319
- /**
2320
- * Calculate days difference from now
2321
- */
2322
- getDaysDifference(date) {
2323
- const now = new Date();
2324
- const diffMs = now.getTime() - date.getTime();
2325
- return Math.floor(diffMs / (1000 * 60 * 60 * 24));
2326
- }
2327
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPNotificationWidgetViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2328
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPNotificationWidgetViewComponent, isStandalone: true, selector: "ng-component", outputs: { notificationClick: "notificationClick", markAsRead: "markAsRead" }, providers: [
2329
- DatePipe,
2330
- // Provide a lightweight stub for AXMAdminNotificationSlotComponent so the admin item can inject it
2331
- {
2332
- provide: AXMAdminNotificationSlotComponent,
2333
- useValue: {
2334
- popover: () => ({ close: () => { } }),
2335
- },
2336
- },
2337
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-p-2 ax-size-full ax-flex ax-flex-col ax-gap-2\">\n <ax-tabs\n class=\"ax-bg-light-start ax-border-b ax-border-default ax-shrink-0\"\n [fitParent]=\"true\"\n location=\"bottom\"\n (onActiveTabChanged)=\"handleTabChange($event)\"\n >\n <ax-tab-item [text]=\"('@notification-management:unread' | translate | async) ?? 'Unread'\" class=\"ax-font-medium\">\n <ax-suffix>\n @if (getNewMessageCount() > 0) {\n <ax-badge color=\"primary\" [text]=\"getNewMessageCount().toString()\" size=\"sm\" class=\"ax-ml-1\"></ax-badge>\n }\n </ax-suffix>\n </ax-tab-item>\n <ax-tab-item\n [text]=\"('@notification-management:all' | translate | async) ?? 'All'\"\n class=\"ax-font-medium\"\n ></ax-tab-item>\n </ax-tabs>\n <div class=\"ax-space-y-1 ax-overflow-auto\">\n @for (item of notificationItems(); track item.id) {\n <axp-master-notification-item [data]=\"item\" (onPressNotificationItem)=\"onAdminItemClick($event)\" />\n } @empty {\n <axp-state-message\n icon=\"fa-light fa-bell-slash\"\n [title]=\"'@notification-management:no-notifications.title'\"\n [description]=\"'@notification-management:no-notifications.description'\"\n >\n </axp-state-message>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.notification-item{position:relative;margin-top:2px;margin-bottom:2px;display:flex;cursor:pointer;gap:1rem;border-radius:1rem;padding:.5rem;text-align:start;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));animation-duration:.2s}.notification-item .notification-avatar{position:relative}.notification-item .notification-avatar .unread-badge{position:absolute;bottom:.25rem;inset-inline-end:.25rem;width:10px;height:10px;background:rgb(var(--ax-sys-color-primary-500));border:2px solid rgb(var(--ax-sys-color-surface));border-radius:50%}.notification-item .notification-content{min-width:0px;flex:1 1 0%}.notification-item .notification-content .notification-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.notification-item .notification-content .notification-header .notification-title{font-size:1rem;line-height:1.5rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.notification-item .notification-content .notification-header .notification-time{white-space:nowrap;font-size:.75rem;line-height:1rem;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .notification-content .notification-body{margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i3.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXMAdminNotificationItemComponent, selector: "axp-master-notification-item", inputs: ["data"], outputs: ["onPressNotificationItem", "onClosePopover"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2338
- }
2339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPNotificationWidgetViewComponent, decorators: [{
2340
- type: Component,
2341
- args: [{ standalone: true, imports: [
2342
- CommonModule,
2343
- AXTabsModule,
2344
- AXDecoratorModule,
2345
- AXButtonModule,
2346
- AXBadgeModule,
2347
- AXTranslationModule,
2348
- AXMAdminNotificationItemComponent,
2349
- AXPStateMessageComponent,
2350
- ], providers: [
2351
- DatePipe,
2352
- // Provide a lightweight stub for AXMAdminNotificationSlotComponent so the admin item can inject it
2353
- {
2354
- provide: AXMAdminNotificationSlotComponent,
2355
- useValue: {
2356
- popover: () => ({ close: () => { } }),
2357
- },
2358
- },
2359
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-p-2 ax-size-full ax-flex ax-flex-col ax-gap-2\">\n <ax-tabs\n class=\"ax-bg-light-start ax-border-b ax-border-default ax-shrink-0\"\n [fitParent]=\"true\"\n location=\"bottom\"\n (onActiveTabChanged)=\"handleTabChange($event)\"\n >\n <ax-tab-item [text]=\"('@notification-management:unread' | translate | async) ?? 'Unread'\" class=\"ax-font-medium\">\n <ax-suffix>\n @if (getNewMessageCount() > 0) {\n <ax-badge color=\"primary\" [text]=\"getNewMessageCount().toString()\" size=\"sm\" class=\"ax-ml-1\"></ax-badge>\n }\n </ax-suffix>\n </ax-tab-item>\n <ax-tab-item\n [text]=\"('@notification-management:all' | translate | async) ?? 'All'\"\n class=\"ax-font-medium\"\n ></ax-tab-item>\n </ax-tabs>\n <div class=\"ax-space-y-1 ax-overflow-auto\">\n @for (item of notificationItems(); track item.id) {\n <axp-master-notification-item [data]=\"item\" (onPressNotificationItem)=\"onAdminItemClick($event)\" />\n } @empty {\n <axp-state-message\n icon=\"fa-light fa-bell-slash\"\n [title]=\"'@notification-management:no-notifications.title'\"\n [description]=\"'@notification-management:no-notifications.description'\"\n >\n </axp-state-message>\n }\n </div>\n</div>\n", styles: [":host{display:block;width:100%;height:100%}.notification-item{position:relative;margin-top:2px;margin-bottom:2px;display:flex;cursor:pointer;gap:1rem;border-radius:1rem;padding:.5rem;text-align:start;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));animation-duration:.2s}.notification-item .notification-avatar{position:relative}.notification-item .notification-avatar .unread-badge{position:absolute;bottom:.25rem;inset-inline-end:.25rem;width:10px;height:10px;background:rgb(var(--ax-sys-color-primary-500));border:2px solid rgb(var(--ax-sys-color-surface));border-radius:50%}.notification-item .notification-content{min-width:0px;flex:1 1 0%}.notification-item .notification-content .notification-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.notification-item .notification-content .notification-header .notification-title{font-size:1rem;line-height:1.5rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.notification-item .notification-content .notification-header .notification-time{white-space:nowrap;font-size:.75rem;line-height:1rem;color:rgb(var(--ax-sys-color-on-surface-variant))}.notification-item .notification-content .notification-body{margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}\n"] }]
2360
- }], ctorParameters: () => [], propDecorators: { notificationClick: [{ type: i0.Output, args: ["notificationClick"] }], markAsRead: [{ type: i0.Output, args: ["markAsRead"] }] } });
2361
-
2362
- var notificationWidget_component = /*#__PURE__*/Object.freeze({
2363
- __proto__: null,
2364
- AXPNotificationWidgetViewComponent: AXPNotificationWidgetViewComponent
2365
- });
2366
-
2367
- /**
2368
- * Configuration for the Notification Widget
2369
- */
2370
- const AXPMyNotificationDashboardWidget = {
2371
- name: RootConfig.widgets.myNotificationDashboard,
2372
- title: '@dashboard:widgets.my-notification.widget-title',
2373
- categories: [AXP_WIDGETS_UTILITY_CATEGORY],
2374
- groups: [AXPWidgetGroupEnum.DashboardWidget],
2375
- type: 'dashboard',
2376
- description: '@dashboard:widgets.my-notification.widget-description',
2377
- icon: 'fa-regular fa-bell',
2378
- properties: [
2379
- cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),
2380
- // ====== Title ======
2381
- {
2382
- name: 'title',
2383
- title: '@notification-management:widgets.my-notification-dashboard.chart-title',
2384
- group: AXP_APPEARANCE_PROPERTY_GROUP,
2385
- schema: {
2386
- defaultValue: '',
2387
- dataType: 'string',
2388
- interface: {
2389
- name: 'title',
2390
- path: 'options.title',
2391
- type: AXPWidgetsCatalog.text,
2392
- options: {
2393
- placeholder: '@dashboard:widgets.my-notification.title-placeholder',
2394
- },
2395
- },
2396
- },
2397
- visible: true,
2398
- },
2399
- {
2400
- name: 'maxItems',
2401
- title: '@notification-management:widgets.my-notification-dashboard.max-items',
2402
- description: 'Maximum number of notification items to display',
2403
- group: AXP_STYLING_PROPERTY_GROUP,
2404
- schema: {
2405
- defaultValue: 10,
2406
- dataType: 'number',
2407
- interface: {
2408
- name: 'maxItems',
2409
- path: 'options.maxItems',
2410
- type: AXPWidgetsCatalog.number,
2411
- options: {
2412
- minValue: 1,
2413
- maxValue: 100,
2414
- },
2415
- },
2416
- },
2417
- visible: true,
2418
- },
2419
- {
2420
- name: 'showAvatar',
2421
- title: '@notification-management:widgets.my-notification-dashboard.show-avatar',
2422
- description: 'Whether to show avatars in notifications',
2423
- group: AXP_APPEARANCE_PROPERTY_GROUP,
2424
- schema: {
2425
- defaultValue: true,
2426
- dataType: 'boolean',
2427
- interface: {
2428
- name: 'showAvatar',
2429
- path: 'options.showAvatar',
2430
- type: AXPWidgetsCatalog.toggle,
2431
- },
2432
- },
2433
- visible: true,
2434
- },
2435
- {
2436
- name: 'showDate',
2437
- title: '@notification-management:widgets.my-notification-dashboard.show-date',
2438
- description: 'Whether to show date in notifications',
2439
- group: AXP_APPEARANCE_PROPERTY_GROUP,
2440
- schema: {
2441
- defaultValue: true,
2442
- dataType: 'boolean',
2443
- interface: {
2444
- name: 'showDate',
2445
- path: 'options.showDate',
2446
- type: AXPWidgetsCatalog.toggle,
2447
- },
2448
- },
2449
- visible: true,
2450
- },
2451
- {
2452
- name: 'autoRefresh',
2453
- title: '@notification-management:widgets.my-notification-dashboard.auto-refresh',
2454
- description: 'Automatically refresh notifications at regular intervals',
2455
- group: AXP_APPEARANCE_PROPERTY_GROUP,
2456
- schema: {
2457
- defaultValue: true,
2458
- dataType: 'boolean',
2459
- interface: {
2460
- name: 'autoRefresh',
2461
- path: 'options.autoRefresh',
2462
- type: AXPWidgetsCatalog.toggle,
2463
- },
2464
- },
2465
- visible: true,
2466
- },
2467
- {
2468
- name: 'refreshInterval',
2469
- title: '@notification-management:widgets.my-notification-dashboard.refresh-interval',
2470
- description: 'Interval in seconds between automatic refreshes',
2471
- group: AXP_APPEARANCE_PROPERTY_GROUP,
2472
- schema: {
2473
- defaultValue: 60,
2474
- dataType: 'number',
2475
- interface: {
2476
- name: 'refreshInterval',
2477
- path: 'options.refreshInterval',
2478
- type: AXPWidgetsCatalog.number,
2479
- options: {
2480
- minValue: 10,
2481
- maxValue: 3600,
2482
- },
2483
- },
2484
- },
2485
- visible: true,
2486
- },
2487
- ],
2488
- components: {
2489
- view: {
2490
- component: () => Promise.resolve().then(function () { return notificationWidget_component; }).then((c) => c.AXPNotificationWidgetViewComponent),
2491
- },
2492
- },
2493
- meta: {
2494
- dimensions: {
2495
- lg: {
2496
- width: 3,
2497
- height: 5,
2498
- minWidth: 2,
2499
- minHeight: 4,
2500
- maxWidth: 4,
2501
- maxHeight: 7,
2502
- },
2503
- md: {
2504
- width: 3,
2505
- height: 5,
2506
- minWidth: 2,
2507
- minHeight: 4,
2508
- maxWidth: 4,
2509
- maxHeight: 7,
2510
- },
2511
- sm: {
2512
- height: 5,
2513
- minHeight: 4,
2514
- maxHeight: 7,
2515
- },
2516
- },
2517
- },
2518
- };
2519
-
2520
- //#endregion
2521
- //#region ---- Notification Management Widgets Provider ----
2522
- class AXMNotificationManagementWidgetsProvider {
2523
- getWidgets() {
2524
- return [AXPMyNotificationDashboardWidget];
2525
- }
2526
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2527
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementWidgetsProvider }); }
2528
- }
2529
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementWidgetsProvider, decorators: [{
2530
- type: Injectable
2531
- }] });
2532
-
2533
- //#region ---- Command keys ----
2534
- const NOTIFICATION_MANAGEMENT_EMAIL_SHOW_DIALOG_COMMAND_KEY = 'NotificationManagement:Email:ShowDialog';
2535
- const NOTIFICATION_MANAGEMENT_EMAIL_SEND_COMMAND_KEY = 'NotificationManagement:Email:Send';
2536
- //#endregion
2537
-
2538
- //#region ---- Types ----
2539
- //#endregion
2540
-
2541
- //#endregion
2542
- //#region ---- Helpers ----
2543
- function normalizeTextTemplateId(value) {
2544
- if (typeof value === 'string') {
2545
- const t = value.trim();
2546
- return t || undefined;
2547
- }
2548
- if (value != null && typeof value === 'object' && 'id' in value) {
2549
- const id = value.id;
2550
- if (typeof id === 'string' && id.trim())
2551
- return id.trim();
2552
- }
2553
- return undefined;
2554
- }
2555
- function parseMergeRecord(value) {
2556
- if (value == null)
2557
- return {};
2558
- if (typeof value === 'object' && !Array.isArray(value)) {
2559
- const out = {};
2560
- for (const [k, v] of Object.entries(value)) {
2561
- out[k] = v == null ? '' : String(v);
2562
- }
2563
- return out;
2564
- }
2565
- return {};
2566
- }
2567
- /**
2568
- * True when HTML/plain body has no user-visible text (handles empty `<p><br></p>` etc.).
2569
- */
2570
- function isEffectivelyEmptyRichTextBody(value) {
2571
- const trimmed = value.trim();
2572
- if (!trimmed) {
2573
- return true;
2574
- }
2575
- const withoutTags = trimmed
2576
- .replace(/<[^>]+>/g, ' ')
2577
- .replace(/&nbsp;/gi, ' ')
2578
- .replace(/\s+/g, ' ')
2579
- .trim();
2580
- return withoutTags.length === 0;
2581
- }
2582
- /** Resolved entity module for the text-template data selector. */
2583
- const TEXT_TEMPLATE_ENTITY_MODULE = 'ContentManagement';
2584
- /** Resolved entity name for the text-template data selector. */
2585
- const TEXT_TEMPLATE_ENTITY_NAME = 'TextTemplate';
2586
- /** List filter: only templates with a non-empty `channels.email.body` (excludes SMS-only rows). */
2587
- const TEXT_TEMPLATE_LIST_EMAIL_BODY_FILTER = {
2588
- field: 'channels.email.body',
2589
- operator: { type: 'isNotEmpty' },
2590
- };
2591
- //#endregion
2592
- //#region ---- Service ----
2593
- /**
2594
- * Opens the send-email dialog built with the layout dialog builder and delegates send to
2595
- * {@link NOTIFICATION_MANAGEMENT_EMAIL_SEND_COMMAND_KEY}.
2596
- */
2597
- class AXMNotificationEmailComposerService {
2598
- constructor() {
2599
- this.layoutBuilder = inject(AXPLayoutBuilderService);
2600
- this.translationService = inject(AXTranslationService);
2601
- this.commandService = inject(AXPCommandService);
2602
- this.entityDataSelector = inject(AXPEntityDataSelectorService);
2603
- this.entityRegistry = inject(AXPEntityDefinitionRegistryService);
2604
- }
2605
- /**
2606
- * Shows the compose dialog; on submit runs the send command with the dialog context.
2607
- * When {@link NotificationManagementEmailShowDialogInput.textTemplateId} is not set, the standard
2608
- * entity data selector ({@link AXPEntityDataSelectorService}) runs first; the compose dialog has no template field.
2609
- */
2610
- async openSendEmailDialog(input) {
2611
- const merge = parseMergeRecord(input.merge);
2612
- let textTemplateId = input.textTemplateId?.trim() ?? '';
2613
- if (!textTemplateId) {
2614
- const picked = await this.openTextTemplatePickerDialog();
2615
- if (picked === null) {
2616
- return { success: false, data: null };
2617
- }
2618
- textTemplateId = picked;
2619
- }
2620
- let subject = input.subject ?? '';
2621
- let body = input.body ?? '';
2622
- if (textTemplateId) {
2623
- const rendered = await this.commandService.execute(AXC_TEXT_TEMPLATE_RENDER_COMMAND_KEY, {
2624
- textTemplateId,
2625
- channel: 'email',
2626
- merge,
2627
- locale: this.translationService.getActiveLang() ?? 'en-US',
2628
- });
2629
- if (rendered?.success && rendered.data) {
2630
- subject = rendered.data.subject ?? subject;
2631
- body = rendered.data.body ?? body;
2632
- }
2633
- }
2634
- const defaultTitle = await this.translationService.translateAsync('@notification-management:email.dialog.title');
2635
- const title = input.dialogTitle?.trim()
2636
- ? await this.translationService.translateAsync(input.dialogTitle)
2637
- : defaultTitle;
2638
- try {
2639
- const result = await this.layoutBuilder
2640
- .create()
2641
- .dialog((dialog) => {
2642
- dialog
2643
- .setTitle(title)
2644
- .setSize('lg')
2645
- .setCloseButton(true)
2646
- .setContext({
2647
- to: input.to ?? '',
2648
- cc: input.cc ?? '',
2649
- bcc: input.bcc ?? '',
2650
- subject,
2651
- body,
2652
- textTemplateId,
2653
- })
2654
- .content((flex) => {
2655
- flex
2656
- .setDirection('column')
2657
- .setGap('16px')
2658
- .formField('@notification-management:email.dialog.fields.to.title', (field) => {
2659
- field.path('to');
2660
- field.textBox({
2661
- validations: [{ rule: 'required' }],
2662
- placeholder: '@notification-management:email.dialog.fields.to.placeholder',
2663
- });
2664
- })
2665
- .formField('@notification-management:email.dialog.fields.cc.title', (field) => {
2666
- field.path('cc');
2667
- field.textBox({
2668
- placeholder: '@notification-management:email.dialog.fields.cc.placeholder',
2669
- });
2670
- })
2671
- .formField('@notification-management:email.dialog.fields.bcc.title', (field) => {
2672
- field.path('bcc');
2673
- field.textBox({
2674
- placeholder: '@notification-management:email.dialog.fields.bcc.placeholder',
2675
- });
2676
- })
2677
- .formField('@notification-management:email.dialog.fields.subject.title', (field) => {
2678
- field.path('subject');
2679
- field.textBox({
2680
- validations: [{ rule: 'required' }],
2681
- placeholder: '@notification-management:email.dialog.fields.subject.placeholder',
2682
- });
2683
- })
2684
- .formField('@notification-management:email.dialog.fields.body.title', (field) => {
2685
- field.path('body');
2686
- field.richText({
2687
- validations: [{ rule: 'required' }],
2688
- placeholder: '@notification-management:email.dialog.fields.body.placeholder',
2689
- });
2690
- });
2691
- })
2692
- .setActions((actions) => {
2693
- actions.cancel('@general:actions.cancel.title').submit('@general:actions.send.title');
2694
- })
2695
- .onAction(async (dialogRef) => {
2696
- const context = dialogRef.context();
2697
- const action = dialogRef.action();
2698
- if (!context || action === 'cancel') {
2699
- return { success: false, data: null };
2700
- }
2701
- const to = String(context['to'] ?? '').trim();
2702
- const subjectOut = String(context['subject'] ?? '').trim();
2703
- const bodyOut = String(context['body'] ?? '');
2704
- if (!to || !subjectOut || isEffectivelyEmptyRichTextBody(bodyOut)) {
2705
- return {
2706
- success: false,
2707
- message: {
2708
- text: await this.translationService.translateAsync('@notification-management:email.dialog.messages.required-fields'),
2709
- },
2710
- data: null,
2711
- };
2712
- }
2713
- const sendInput = {
2714
- to,
2715
- cc: String(context['cc'] ?? '').trim() || undefined,
2716
- bcc: String(context['bcc'] ?? '').trim() || undefined,
2717
- subject: subjectOut,
2718
- body: bodyOut.trim(),
2719
- textTemplateId: normalizeTextTemplateId(context['textTemplateId']),
2720
- };
2721
- const sendResult = await this.commandService.execute(NOTIFICATION_MANAGEMENT_EMAIL_SEND_COMMAND_KEY, sendInput);
2722
- return (sendResult ?? {
2723
- success: false,
2724
- message: { text: 'Send command did not return a result.' },
2725
- data: null,
2726
- });
2727
- });
2728
- })
2729
- .show();
2730
- return result;
2731
- }
2732
- catch (e) {
2733
- return {
2734
- success: false,
2735
- message: {
2736
- text: e instanceof Error ? e.message : 'Failed to open send email dialog.',
2737
- },
2738
- data: null,
2739
- };
2740
- }
2741
- }
2742
- /**
2743
- * Opens {@link AXPEntityDataSelectorService} for `ContentManagement.TextTemplate`. Returns `null` if
2744
- * the selector is dismissed without applying, `''` if the user applies with no row selected (compose
2745
- * without a template), or the selected template id.
2746
- */
2747
- async openTextTemplatePickerDialog() {
2748
- const entity = await this.entityRegistry.resolve(TEXT_TEMPLATE_ENTITY_MODULE, TEXT_TEMPLATE_ENTITY_NAME);
2749
- if (!entity) {
2750
- return null;
2751
- }
2752
- const title = await this.translationService.translateAsync('@notification-management:email.template-picker.title');
2753
- try {
2754
- const result = await this.entityDataSelector.open({
2755
- entity,
2756
- title,
2757
- allowMultiple: false,
2758
- allowCreate: 'none',
2759
- filters: TEXT_TEMPLATE_LIST_EMAIL_BODY_FILTER,
2760
- columns: ['title', 'name'],
2761
- searchFields: ['title', 'name'],
2762
- });
2763
- if (result == null) {
2764
- return null;
2765
- }
2766
- const items = result.items ?? [];
2767
- if (items.length === 0) {
2768
- return '';
2769
- }
2770
- const rawId = items[0]['id'];
2771
- if (rawId != null && String(rawId).trim() !== '') {
2772
- return String(rawId).trim();
2773
- }
2774
- return '';
2775
- }
2776
- catch {
2777
- return null;
2778
- }
2779
- }
2780
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEmailComposerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2781
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEmailComposerService, providedIn: 'root' }); }
2782
- }
2783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationEmailComposerService, decorators: [{
2784
- type: Injectable,
2785
- args: [{
2786
- providedIn: 'root',
2787
- }]
2788
- }] });
2789
-
2790
- //#endregion
2791
- //#region ---- Command ----
2792
- class NotificationManagementEmailShowDialogCommand {
2793
- constructor() {
2794
- this.composer = inject(AXMNotificationEmailComposerService);
2795
- }
2796
- async execute(input) {
2797
- const raw = input;
2798
- const { __context__: _workflowContext, ...rest } = raw;
2799
- const contextOptions = _workflowContext?.options;
2800
- const evaluated = {
2801
- ...(contextOptions ?? {}),
2802
- ...rest,
2803
- };
2804
- return this.composer.openSendEmailDialog(evaluated);
2805
- }
2806
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NotificationManagementEmailShowDialogCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2807
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NotificationManagementEmailShowDialogCommand, providedIn: 'root' }); }
2808
- }
2809
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: NotificationManagementEmailShowDialogCommand, decorators: [{
2810
- type: Injectable,
2811
- args: [{
2812
- providedIn: 'root',
2813
- }]
2814
- }] });
2815
-
2816
- var showEmailDialog_command = /*#__PURE__*/Object.freeze({
2817
- __proto__: null,
2818
- NotificationManagementEmailShowDialogCommand: NotificationManagementEmailShowDialogCommand
2819
- });
2820
-
2821
- function routesFactory() {
2822
- const routes = [
2823
- {
2824
- path: ':app/notifications',
2825
- canActivate: [AXPAuthGuard],
2826
- loadComponent: () => {
2827
- return AXPRootLayoutComponent;
2828
- },
2829
- title: 'Notifications',
2830
- children: [
2831
- {
2832
- path: '',
2833
- loadComponent: () => import('./acorex-modules-notification-management-notification-page.component-6YOiGgKm.mjs').then((c) => c.AXMNotificationPageComponent),
2834
- data: { reuse: true },
2835
- },
2836
- ],
2837
- },
2838
- ];
2839
- return routes;
2840
- }
2841
- class AXMNotificationManagementModule {
2842
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2843
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementModule, imports: [i1$1.AXPComponentSlotModule, AXPWidgetCoreModule,
2844
- // Entity Modules
2845
- AXMNotificationEntityModule,
2846
- AXMNotificationTemplateEntityModule,
2847
- AXMNotificationChannelEntityModule] }); }
2848
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementModule, providers: [
2849
- // Module-specific providers (not part of manifest system)
2850
- {
2851
- provide: ROUTES,
2852
- multi: true,
2853
- useFactory: routesFactory,
2854
- },
2855
- {
2856
- provide: AXP_TASK_BADGE_PROVIDERS,
2857
- useClass: AXMNotificationBadgeProvider,
2858
- multi: true,
2859
- },
2860
- // Module Manifest Provider
2861
- {
2862
- provide: AXP_MODULE_MANIFEST_PROVIDER,
2863
- useValue: NotificationManagementManifest,
2864
- multi: true,
2865
- },
2866
- // Provider references (now using tokens)
2867
- {
2868
- provide: AXP_PERMISSION_DEFINITION_PROVIDER,
2869
- useClass: AXMPermissionDefinitionProvider,
2870
- multi: true,
2871
- },
2872
- {
2873
- provide: AXP_MENU_PROVIDER,
2874
- useClass: AXMMenuProvider,
2875
- multi: true,
2876
- },
2877
- {
2878
- provide: AXP_ENTITY_DEFINITION_LOADER,
2879
- useClass: AXMEntityLoader,
2880
- multi: true,
2881
- },
2882
- {
2883
- provide: AXP_WIDGET_DEFINITION_PROVIDER,
2884
- useClass: AXMNotificationManagementWidgetsProvider,
2885
- multi: true,
2886
- },
2887
- provideCommandSetups([
2888
- {
2889
- key: NOTIFICATION_MANAGEMENT_EMAIL_SHOW_DIALOG_COMMAND_KEY,
2890
- command: () => Promise.resolve().then(function () { return showEmailDialog_command; }).then((m) => m.NotificationManagementEmailShowDialogCommand),
2891
- },
2892
- ]),
2893
- ], imports: [AXPComponentSlotModule.forChild({
2894
- 'root-header-end': [
2895
- {
2896
- name: 'notification',
2897
- component: AXMAdminNotificationSlotComponent,
2898
- },
2899
- ],
2900
- }),
2901
- AXPWidgetCoreModule,
2902
- // Entity Modules
2903
- AXMNotificationEntityModule,
2904
- AXMNotificationTemplateEntityModule,
2905
- AXMNotificationChannelEntityModule] }); }
2906
- }
2907
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMNotificationManagementModule, decorators: [{
2908
- type: NgModule,
2909
- args: [{
2910
- imports: [
2911
- AXPComponentSlotModule.forChild({
2912
- 'root-header-end': [
2913
- {
2914
- name: 'notification',
2915
- component: AXMAdminNotificationSlotComponent,
2916
- },
2917
- ],
2918
- }),
2919
- AXPWidgetCoreModule,
2920
- // Entity Modules
2921
- AXMNotificationEntityModule,
2922
- AXMNotificationTemplateEntityModule,
2923
- AXMNotificationChannelEntityModule,
2924
- ],
2925
- exports: [],
2926
- declarations: [],
2927
- providers: [
2928
- // Module-specific providers (not part of manifest system)
2929
- {
2930
- provide: ROUTES,
2931
- multi: true,
2932
- useFactory: routesFactory,
2933
- },
2934
- {
2935
- provide: AXP_TASK_BADGE_PROVIDERS,
2936
- useClass: AXMNotificationBadgeProvider,
2937
- multi: true,
2938
- },
2939
- // Module Manifest Provider
2940
- {
2941
- provide: AXP_MODULE_MANIFEST_PROVIDER,
2942
- useValue: NotificationManagementManifest,
2943
- multi: true,
2944
- },
2945
- // Provider references (now using tokens)
2946
- {
2947
- provide: AXP_PERMISSION_DEFINITION_PROVIDER,
2948
- useClass: AXMPermissionDefinitionProvider,
2949
- multi: true,
2950
- },
2951
- {
2952
- provide: AXP_MENU_PROVIDER,
2953
- useClass: AXMMenuProvider,
2954
- multi: true,
2955
- },
2956
- {
2957
- provide: AXP_ENTITY_DEFINITION_LOADER,
2958
- useClass: AXMEntityLoader,
2959
- multi: true,
2960
- },
2961
- {
2962
- provide: AXP_WIDGET_DEFINITION_PROVIDER,
2963
- useClass: AXMNotificationManagementWidgetsProvider,
2964
- multi: true,
2965
- },
2966
- provideCommandSetups([
2967
- {
2968
- key: NOTIFICATION_MANAGEMENT_EMAIL_SHOW_DIALOG_COMMAND_KEY,
2969
- command: () => Promise.resolve().then(function () { return showEmailDialog_command; }).then((m) => m.NotificationManagementEmailShowDialogCommand),
2970
- },
2971
- ]),
2972
- ],
2973
- }]
2974
- }] });
2975
-
2976
- var AXPSettingKeys;
2977
- (function (AXPSettingKeys) {
2978
- // Email Settings
2979
- AXPSettingKeys["Server"] = "NotificationManagement:Setting:Email.Server";
2980
- AXPSettingKeys["Port"] = "NotificationManagement:Setting:Email.Port";
2981
- AXPSettingKeys["Username"] = "NotificationManagement:Setting:Email.Username";
2982
- AXPSettingKeys["Password"] = "NotificationManagement:Setting:Email.Password";
2983
- AXPSettingKeys["FromAddress"] = "NotificationManagement:Setting:Email.FromAddress";
2984
- AXPSettingKeys["UseSSL"] = "NotificationManagement:Setting:Email.UseSSL";
2985
- AXPSettingKeys["UseTLS"] = "NotificationManagement:Setting:Email.UseTLS";
2986
- // Telegram Settings
2987
- AXPSettingKeys["TelegramToken"] = "NotificationManagement:Setting:Telegram.Token";
2988
- AXPSettingKeys["TelegramChatId"] = "NotificationManagement:Setting:Telegram.ChatId";
2989
- // WhatsApp Settings
2990
- AXPSettingKeys["WhatsAppApiUrl"] = "NotificationManagement:Setting:WhatsApp.ApiUrl";
2991
- AXPSettingKeys["WhatsAppAuthToken"] = "NotificationManagement:Setting:WhatsApp.AuthToken";
2992
- // Firebase Settings
2993
- AXPSettingKeys["FirebaseApiKey"] = "NotificationManagement:Setting:Firebase.ApiKey";
2994
- AXPSettingKeys["FirebaseProjectId"] = "NotificationManagement:Setting:Firebase.ProjectId";
2995
- AXPSettingKeys["FirebaseSenderId"] = "NotificationManagement:Setting:Firebase.SenderId";
2996
- AXPSettingKeys["FirebaseAppId"] = "NotificationManagement:Setting:Firebase.AppId";
2997
- })(AXPSettingKeys || (AXPSettingKeys = {}));
2998
-
2999
- const I18N = '@notification-management:settings.notification-settings';
3000
- class AXMSettingProvider {
3001
- async provide(context) {
3002
- context
3003
- // Add Notification Settings Group
3004
- .addGroup('notification-settings', `${I18N}.nav-title`, `${I18N}.description`, RootConfig$1.module.icon, `${I18N}.title`, 95)
3005
- // SMTP Settings Section
3006
- .addSection('smtp-settings', `${I18N}.smtp.title`, `${I18N}.smtp.description`)
3007
- .addSetting({
3008
- key: AXPSettingKeys.Server,
3009
- title: `${I18N}.smtp.server.title`,
3010
- scope: 'T',
3011
- isInherited: true,
3012
- defaultValue: '',
3013
- widget: {
3014
- type: AXPWidgetsList.Editors.TextBox,
3015
- },
3016
- description: `${I18N}.smtp.server.description`,
3017
- })
3018
- .addSetting({
3019
- key: AXPSettingKeys.Port,
3020
- title: `${I18N}.smtp.port.title`,
3021
- scope: 'T',
3022
- isInherited: true,
3023
- defaultValue: 587,
3024
- widget: {
3025
- type: AXPWidgetsList.Editors.NumberBox,
3026
- options: {
3027
- minValue: 1,
3028
- maxValue: 65535,
3029
- },
3030
- },
3031
- description: `${I18N}.smtp.port.description`,
3032
- })
3033
- .addSetting({
3034
- key: AXPSettingKeys.Username,
3035
- title: `${I18N}.smtp.username.title`,
3036
- scope: 'T',
3037
- isInherited: true,
3038
- defaultValue: '',
3039
- widget: {
3040
- type: AXPWidgetsList.Editors.TextBox,
3041
- },
3042
- description: `${I18N}.smtp.username.description`,
3043
- })
3044
- .addSetting({
3045
- key: AXPSettingKeys.Password,
3046
- title: `${I18N}.smtp.password.title`,
3047
- scope: 'T',
3048
- isInherited: true,
3049
- defaultValue: '',
3050
- widget: {
3051
- type: AXPWidgetsList.Editors.PasswordBox,
3052
- },
3053
- description: `${I18N}.smtp.password.description`,
3054
- })
3055
- .addSetting({
3056
- key: AXPSettingKeys.UseSSL,
3057
- title: `${I18N}.smtp.ssl.title`,
3058
- scope: 'T',
3059
- isInherited: true,
3060
- defaultValue: false,
3061
- widget: {
3062
- type: AXPWidgetsList.Editors.ToggleSwitch,
3063
- },
3064
- description: `${I18N}.smtp.ssl.description`,
3065
- })
3066
- .addSetting({
3067
- key: AXPSettingKeys.UseTLS,
3068
- title: `${I18N}.smtp.tls.title`,
3069
- scope: 'T',
3070
- isInherited: true,
3071
- defaultValue: true,
3072
- widget: {
3073
- type: AXPWidgetsList.Editors.ToggleSwitch,
3074
- },
3075
- description: `${I18N}.smtp.tls.description`,
3076
- })
3077
- .endSection()
3078
- // Telegram Settings Section
3079
- .addSection('telegram-settings', `${I18N}.telegram.title`, `${I18N}.telegram.description`)
3080
- .addSetting({
3081
- key: AXPSettingKeys.TelegramToken,
3082
- title: `${I18N}.telegram.token.title`,
3083
- scope: 'T',
3084
- isInherited: true,
3085
- defaultValue: '',
3086
- widget: {
3087
- type: AXPWidgetsList.Editors.TextBox,
3088
- },
3089
- description: `${I18N}.telegram.token.description`,
3090
- })
3091
- .addSetting({
3092
- key: AXPSettingKeys.TelegramChatId,
3093
- title: `${I18N}.telegram.chat-id.title`,
3094
- scope: 'T',
3095
- isInherited: true,
3096
- defaultValue: '',
3097
- widget: {
3098
- type: AXPWidgetsList.Editors.TextBox,
3099
- },
3100
- description: `${I18N}.telegram.chat-id.description`,
3101
- })
3102
- .endSection()
3103
- // WhatsApp Settings Section
3104
- .addSection('whatsapp-settings', `${I18N}.whatsapp.title`, `${I18N}.whatsapp.description`)
3105
- .addSetting({
3106
- key: AXPSettingKeys.WhatsAppApiUrl,
3107
- title: `${I18N}.whatsapp.api-url.title`,
3108
- scope: 'T',
3109
- isInherited: true,
3110
- defaultValue: '',
3111
- widget: {
3112
- type: AXPWidgetsList.Editors.TextBox,
3113
- },
3114
- description: `${I18N}.whatsapp.api-url.description`,
3115
- })
3116
- .addSetting({
3117
- key: AXPSettingKeys.WhatsAppAuthToken,
3118
- title: `${I18N}.whatsapp.auth-token.title`,
3119
- scope: 'T',
3120
- isInherited: true,
3121
- defaultValue: '',
3122
- widget: {
3123
- type: AXPWidgetsList.Editors.PasswordBox,
3124
- },
3125
- description: `${I18N}.whatsapp.auth-token.description`,
3126
- })
3127
- .endSection()
3128
- // Firebase Settings Section
3129
- .addSection('firebase-settings', `${I18N}.firebase.title`, `${I18N}.firebase.description`)
3130
- .addSetting({
3131
- key: AXPSettingKeys.FirebaseApiKey,
3132
- title: `${I18N}.firebase.api-key.title`,
3133
- scope: 'T',
3134
- isInherited: true,
3135
- defaultValue: '',
3136
- widget: {
3137
- type: AXPWidgetsList.Editors.TextBox,
3138
- },
3139
- description: `${I18N}.firebase.api-key.description`,
3140
- })
3141
- .addSetting({
3142
- key: AXPSettingKeys.FirebaseProjectId,
3143
- title: `${I18N}.firebase.project-id.title`,
3144
- scope: 'T',
3145
- isInherited: true,
3146
- defaultValue: '',
3147
- widget: {
3148
- type: AXPWidgetsList.Editors.TextBox,
3149
- },
3150
- description: `${I18N}.firebase.project-id.description`,
3151
- })
3152
- .addSetting({
3153
- key: AXPSettingKeys.FirebaseSenderId,
3154
- title: `${I18N}.firebase.sender-id.title`,
3155
- scope: 'T',
3156
- isInherited: true,
3157
- defaultValue: '',
3158
- widget: {
3159
- type: AXPWidgetsList.Editors.TextBox,
3160
- },
3161
- description: `${I18N}.firebase.sender-id.description`,
3162
- })
3163
- .addSetting({
3164
- key: AXPSettingKeys.FirebaseAppId,
3165
- title: `${I18N}.firebase.app-id.title`,
3166
- scope: 'T',
3167
- isInherited: true,
3168
- defaultValue: '',
3169
- widget: {
3170
- type: AXPWidgetsList.Editors.TextBox,
3171
- },
3172
- description: `${I18N}.firebase.app-id.description`,
3173
- })
3174
- .endSection()
3175
- // End Notification Settings Group
3176
- .endGroup();
3177
- }
3178
- }
3179
-
3180
- async function myNotificationEntityFactory(injector) {
3181
- const storageService = injector.get(AXPEntityStorageService);
3182
- const dataProvider = new AXPEntityDataProviderImpl(storageService, 'notifications');
3183
- const moduleName = 'notification-management';
3184
- const scope = `#${moduleName}`;
3185
- const entityDef = {
3186
- module: moduleName,
3187
- name: 'notification',
3188
- title: '@notification-management:my',
3189
- formats: {
3190
- individual: '@notification-management:my',
3191
- plural: '@notification-management:my',
3192
- },
3193
- groups: [
3194
- { id: 'data', title: 'Data' },
3195
- { id: 'content', title: 'Content' },
3196
- { id: 'action', title: 'Action' },
3197
- { id: 'user', title: 'User' },
3198
- { id: 'template', title: 'Template' },
3199
- ],
3200
- properties: [
3201
- {
3202
- name: 'id',
3203
- title: 'ID',
3204
- groupId: 'data',
3205
- schema: {
3206
- dataType: 'string',
3207
- visible: false,
3208
- nullable: false,
3209
- readonly: true,
3210
- unique: { enabled: true },
3211
- },
3212
- },
3213
- {
3214
- name: 'title',
3215
- title: '@general:terms.common.title',
3216
- groupId: 'data',
3217
- schema: {
3218
- dataType: 'string',
3219
- interface: {
3220
- type: AXPWidgetsCatalog.text,
3221
- },
3222
- },
3223
- },
3224
- {
3225
- name: 'body',
3226
- title: '@general:terms.body',
3227
- groupId: 'data',
3228
- schema: {
3229
- dataType: 'string',
3230
- interface: {
3231
- type: AXPWidgetsCatalog.largeText,
3232
- },
3233
- },
3234
- },
3235
- {
3236
- name: 'channel',
3237
- title: '@notification-management:channel',
3238
- groupId: 'data',
3239
- schema: {
3240
- dataType: 'string',
3241
- interface: {
3242
- type: AXPWidgetsCatalog.select,
3243
- options: { dataSource: ['InApp', 'Email', 'SMS'], multiple: false },
3244
- },
3245
- },
3246
- },
3247
- {
3248
- name: 'content.type',
3249
- title: '@notification-management:content.type',
3250
- groupId: 'content',
3251
- schema: {
3252
- dataType: 'object',
3253
- interface: {
3254
- type: AXPWidgetsCatalog.richText,
3255
- },
3256
- },
3257
- },
3258
- {
3259
- name: 'action.type',
3260
- title: '@general:terms.workflow.action.type',
3261
- groupId: 'action',
3262
- schema: {
3263
- dataType: 'string',
3264
- interface: {
3265
- type: AXPWidgetsCatalog.select,
3266
- options: { dataSource: ['Link', 'Entity', 'Popup'], multiple: false },
3267
- },
3268
- },
3269
- },
3270
- {
3271
- name: 'User.name',
3272
- title: '@general:terms.people.user',
3273
- groupId: 'user',
3274
- schema: {
3275
- dataType: 'string',
3276
- interface: {
3277
- type: AXPWidgetsCatalog.text,
3278
- },
3279
- },
3280
- },
3281
- {
3282
- name: 'template.category',
3283
- title: '@notification-management:template.category',
3284
- groupId: 'template',
3285
- schema: {
3286
- dataType: 'string',
3287
- interface: {
3288
- type: AXPWidgetsCatalog.select,
3289
- options: { dataSource: ['Inbox', 'Archive'], multiple: false },
3290
- },
3291
- },
3292
- },
3293
- {
3294
- name: 'template.prority',
3295
- title: '@notification-management:template.priority',
3296
- groupId: 'template',
3297
- schema: {
3298
- dataType: 'string',
3299
- interface: {
3300
- type: AXPWidgetsCatalog.select,
3301
- options: { dataSource: ['Warning', 'Danger', 'Notice'], multiple: false },
3302
- },
3303
- },
3304
- },
3305
- {
3306
- name: 'template.isPinned',
3307
- title: '@notification-management:template.isPinned',
3308
- groupId: 'template',
3309
- schema: {
3310
- dataType: 'boolean',
3311
- interface: {
3312
- type: AXPWidgetsCatalog.checkbox,
3313
- options: {
3314
- label: 'Is Pinned',
3315
- },
3316
- },
3317
- },
3318
- },
3319
- {
3320
- name: 'readAt',
3321
- title: '@notification-management:readAt',
3322
- groupId: 'data',
3323
- schema: {
3324
- dataType: 'datetime',
3325
- interface: {
3326
- type: AXPWidgetsCatalog.dateTime,
3327
- options: { format: 'date' },
3328
- },
3329
- },
3330
- },
3331
- {
3332
- name: 'createAt',
3333
- title: '@notification-management:createAt',
3334
- groupId: 'data',
3335
- schema: {
3336
- dataType: 'datetime',
3337
- interface: {
3338
- type: AXPWidgetsCatalog.dateTime,
3339
- options: { format: 'date' },
3340
- },
3341
- },
3342
- },
3343
- ],
3344
- columns: [
3345
- { name: 'title' },
3346
- { name: 'body' },
3347
- { name: 'channel' },
3348
- { name: 'user.name' },
3349
- { name: 'template.category' },
3350
- { name: 'template.prority' },
3351
- { name: 'createAt' },
3352
- { name: 'readAt' },
3353
- ],
3354
- commands: {
3355
- create: {
3356
- execute: async (data) => {
3357
- const entity = Object.assign(data, { id: AXPDataGenerator.uuid() });
3358
- await dataProvider.insertOne(entity);
3359
- return entity;
3360
- },
3361
- },
3362
- delete: {
3363
- execute: async (id) => {
3364
- await dataProvider.deleteOne(id);
3365
- },
3366
- },
3367
- update: {
3368
- execute: async (data) => {
3369
- await dataProvider.updateOne(data.id, data);
3370
- },
3371
- },
3372
- },
3373
- queries: {
3374
- byKey: {
3375
- execute: async (id) => {
3376
- return await dataProvider.getOne(id);
3377
- },
3378
- type: AXPEntityQueryType.Single,
3379
- },
3380
- list: {
3381
- execute: async (e) => {
3382
- const list = await dataProvider.getAll();
3383
- return {
3384
- total: list.length,
3385
- items: list.slice(e.skip, e.skip + e.take),
3386
- };
3387
- },
3388
- type: AXPEntityQueryType.List,
3389
- },
3390
- },
3391
- interfaces: {
3392
- master: {
3393
- list: {
3394
- actions: [
3395
- {
3396
- title: 'Delete',
3397
- command: 'delete-entity',
3398
- priority: 'primary',
3399
- type: 'delete',
3400
- scope: AXPEntityCommandScope.Selected,
3401
- },
3402
- ],
3403
- views: [{ name: 'all', title: 'All Notifications', fixed: true, columns: [], conditions: [], sorts: [] }],
3404
- },
3405
- },
3406
- },
3407
- };
3408
- return entityDef;
3409
- }
3410
-
3411
- var myNotification = /*#__PURE__*/Object.freeze({
3412
- __proto__: null,
3413
- myNotificationEntityFactory: myNotificationEntityFactory
3414
- });
3415
-
3416
- async function notificationLogEntityFactory(injector) {
3417
- const dataService = injector.get(AXMNotificationManagementChannelEntityService);
3418
- const i18n = RootConfig.config.i18n;
3419
- const entityDef = {
3420
- module: 'notification-management',
3421
- name: 'notification',
3422
- title: 'Notification',
3423
- formats: {
3424
- individual: 'NotificationLog',
3425
- plural: 'NotificationLogs',
3426
- },
3427
- relatedEntities: [],
3428
- groups: [
3429
- {
3430
- id: 'notification',
3431
- title: 'Notification',
3432
- },
3433
- ],
3434
- properties: [
3435
- {
3436
- name: 'name',
3437
- title: `t("name", { scope: "${i18n}" })`,
3438
- groupId: 'notification',
3439
- schema: {
3440
- dataType: 'string',
3441
- interface: {
3442
- type: AXPWidgetsCatalog.text,
3443
- },
3444
- },
3445
- },
3446
- {
3447
- name: 'title',
3448
- title: `t("title", { scope: "${i18n}" })`,
3449
- groupId: 'notification',
3450
- schema: {
3451
- dataType: 'string',
3452
- interface: {
3453
- type: AXPWidgetsCatalog.text,
3454
- },
3455
- },
3456
- },
3457
- {
3458
- name: 'status',
3459
- title: `t("status", { scope: "${i18n}" })`,
3460
- groupId: 'notification',
3461
- schema: {
3462
- dataType: 'string',
3463
- interface: {
3464
- type: AXPWidgetsCatalog.richText,
3465
- },
3466
- },
3467
- },
3468
- ],
3469
- columns: [{ name: 'name' }, { name: 'title' }, { name: 'body' }, { name: 'user.name' }, { name: 'channel' }],
3470
- queries: {
3471
- byKey: {
3472
- execute: async (id) => {
3473
- return new Promise((resolve) => {
3474
- setTimeout(async () => {
3475
- const entity = await dataService.getOne(id);
3476
- resolve(entity);
3477
- }, 500);
3478
- });
3479
- },
3480
- type: AXPEntityQueryType.Single,
3481
- },
3482
- list: {
3483
- execute: async (e) => {
3484
- return await dataService.query(e);
3485
- },
3486
- type: AXPEntityQueryType.List,
3487
- },
3488
- },
3489
- interfaces: {
3490
- master: {
3491
- single: {
3492
- title: '{{title}}',
3493
- sections: [
3494
- {
3495
- id: 'notification',
3496
- layout: {
3497
- positions: {
3498
- lg: {
3499
- colSpan: 12,
3500
- },
3501
- },
3502
- },
3503
- },
3504
- ],
3505
- properties: [
3506
- {
3507
- name: 'name',
3508
- layout: {
3509
- positions: {
3510
- lg: {
3511
- colSpan: 6,
3512
- },
3513
- },
3514
- },
3515
- },
3516
- {
3517
- name: 'user.name',
3518
- layout: {
3519
- positions: {
3520
- lg: {
3521
- colSpan: 6,
3522
- },
3523
- },
3524
- },
3525
- },
3526
- {
3527
- name: 'title',
3528
- layout: {
3529
- positions: {
3530
- lg: {
3531
- colSpan: 12,
3532
- },
3533
- },
3534
- },
3535
- },
3536
- {
3537
- name: 'body',
3538
- layout: {
3539
- positions: {
3540
- lg: {
3541
- colSpan: 12,
3542
- },
3543
- },
3544
- },
3545
- },
3546
- {
3547
- name: 'channel',
3548
- layout: {
3549
- positions: {
3550
- lg: {
3551
- colSpan: 6,
3552
- },
3553
- },
3554
- },
3555
- },
3556
- ],
3557
- actions: [],
3558
- },
3559
- list: {
3560
- actions: [
3561
- {
3562
- title: '@general:actions.detail.title',
3563
- command: 'open-entity',
3564
- priority: 'primary',
3565
- type: 'view',
3566
- scope: AXPEntityCommandScope.Individual,
3567
- },
3568
- ],
3569
- views: [
3570
- {
3571
- name: 'all',
3572
- title: '@general:terms.interface.selection.all-items',
3573
- fixed: true,
3574
- columns: [],
3575
- conditions: [],
3576
- sorts: [],
3577
- },
3578
- ],
3579
- },
3580
- },
3581
- },
3582
- };
3583
- return entityDef;
3584
- }
3585
-
3586
- /**
3587
- * Generated bundle index. Do not edit.
3588
- */
3589
-
3590
- export { AXMMenuProvider, AXMNotificationChannelEntityModule, AXMNotificationConnectorService, AXMNotificationEmailComposerService, AXMNotificationEntityModule, AXMNotificationEntityService, AXMNotificationEntityServiceImpl, AXMNotificationManagementChannelEntityService, AXMNotificationManagementChannelEntityServiceImpl, AXMNotificationManagementModule, AXMNotificationManagementTemplateEntityService, AXMNotificationManagementTemplateEntityServiceImpl, AXMNotificationRealtimeService, AXMNotificationTemplateEntityModule, AXMOsNotificationService, AXMSettingProvider, AXPMyNotificationDashboardWidget, AXPNotificationDefinitionProvider, AXPNotificationDefinitionProviderDefault, AXPNotificationDefinitionService, AXPNotificationWidgetViewComponent, AXP_NOTIFICATION_DEFINITION_PROVIDER, NOTIFICATION_MANAGEMENT_EMAIL_SEND_COMMAND_KEY, NOTIFICATION_MANAGEMENT_EMAIL_SHOW_DIALOG_COMMAND_KEY, NotificationManagementEmailShowDialogCommand, RootConfig, myNotificationEntityFactory, notificationChannelEntityFactory, notificationEntityFactory, notificationLogEntityFactory, notificationTemplateEntityFactory };
1
+ export { b as AXMMenuProvider, c as AXMNotificationChannelEntityModule, A as AXMNotificationConnectorService, d as AXMNotificationEmailComposerService, e as AXMNotificationEntityModule, f as AXMNotificationEntityService, g as AXMNotificationEntityServiceImpl, h as AXMNotificationManagementChannelEntityService, i as AXMNotificationManagementChannelEntityServiceImpl, j as AXMNotificationManagementModule, k as AXMNotificationManagementTemplateEntityService, l as AXMNotificationManagementTemplateEntityServiceImpl, m as AXMNotificationRealtimeService, n as AXMNotificationTemplateEntityModule, o as AXMOsNotificationService, p as AXMSettingProvider, q as AXPMyNotificationDashboardWidget, r as AXPNotificationDefinitionProvider, s as AXPNotificationDefinitionProviderDefault, t as AXPNotificationDefinitionService, u as AXPNotificationWidgetViewComponent, v as AXP_NOTIFICATION_DEFINITION_PROVIDER, N as NOTIFICATION_LIST_SORT, w as NOTIFICATION_MANAGEMENT_EMAIL_SEND_COMMAND_KEY, x as NOTIFICATION_MANAGEMENT_EMAIL_SHOW_DIALOG_COMMAND_KEY, y as NotificationManagementEmailShowDialogCommand, R as RootConfig, z as buildNotificationPageQuery, B as compareNotificationsByPinnedThenDate, C as myNotificationEntityFactory, D as notificationChannelEntityFactory, E as notificationEntityFactory, F as notificationLogEntityFactory, G as notificationTemplateEntityFactory, H as sortNotificationsByPinnedThenDate } from './acorex-modules-notification-management-acorex-modules-notification-management-BSf1wd6j.mjs';
3591
2
  //# sourceMappingURL=acorex-modules-notification-management.mjs.map