@atlashub/smartstack 3.30.0 → 3.32.0

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 (280) hide show
  1. package/dist/chunks/{AgentSkillsPage-DJb49NMA.js → AgentSkillsPage-BMxOA-nm.js} +2 -2
  2. package/dist/chunks/{AgentSkillsPage-DJb49NMA.js.map → AgentSkillsPage-BMxOA-nm.js.map} +1 -1
  3. package/dist/chunks/{AgentSkillsPage-CVq3qZoe.js → AgentSkillsPage-DSwfoazB.js} +2 -2
  4. package/dist/chunks/{AgentSkillsPage-CVq3qZoe.js.map → AgentSkillsPage-DSwfoazB.js.map} +1 -1
  5. package/dist/chunks/{AgentWorkloadPage-oHEi-sFh.js → AgentWorkloadPage-B_emq8kd.js} +2 -2
  6. package/dist/chunks/{AgentWorkloadPage-oHEi-sFh.js.map → AgentWorkloadPage-B_emq8kd.js.map} +1 -1
  7. package/dist/chunks/{AgentWorkloadPage-D_nk3gKj.js → AgentWorkloadPage-_USTeYWz.js} +2 -2
  8. package/dist/chunks/{AgentWorkloadPage-D_nk3gKj.js.map → AgentWorkloadPage-_USTeYWz.js.map} +1 -1
  9. package/dist/chunks/{ApiCatalogDetailPage-Cr0q2HnB.js → ApiCatalogDetailPage-BC_HxVu5.js} +3 -3
  10. package/dist/chunks/{ApiCatalogDetailPage-Cr0q2HnB.js.map → ApiCatalogDetailPage-BC_HxVu5.js.map} +1 -1
  11. package/dist/chunks/{ApiCatalogDetailPage-DX8buBkV.js → ApiCatalogDetailPage-BI7zyZAd.js} +2 -2
  12. package/dist/chunks/{ApiCatalogDetailPage-DX8buBkV.js.map → ApiCatalogDetailPage-BI7zyZAd.js.map} +1 -1
  13. package/dist/chunks/{ApiCatalogPage-DqboIzZE.js → ApiCatalogPage-CutaHo5K.js} +2 -2
  14. package/dist/chunks/{ApiCatalogPage-DqboIzZE.js.map → ApiCatalogPage-CutaHo5K.js.map} +1 -1
  15. package/dist/chunks/{ApiCatalogPage-DN7sazvI.js → ApiCatalogPage-M80MorHU.js} +2 -2
  16. package/dist/chunks/{ApiCatalogPage-DN7sazvI.js.map → ApiCatalogPage-M80MorHU.js.map} +1 -1
  17. package/dist/chunks/{ApplicationDetailPage--9YwwS5A.js → ApplicationDetailPage-DVY0wua0.js} +2 -2
  18. package/dist/chunks/{ApplicationDetailPage--9YwwS5A.js.map → ApplicationDetailPage-DVY0wua0.js.map} +1 -1
  19. package/dist/chunks/{ApplicationDetailPage-CCNjr64K.js → ApplicationDetailPage-DzszwaIZ.js} +4 -4
  20. package/dist/chunks/{ApplicationDetailPage-CCNjr64K.js.map → ApplicationDetailPage-DzszwaIZ.js.map} +1 -1
  21. package/dist/chunks/{ApplicationsDashboardPage-Bs-Xgca4.js → ApplicationsDashboardPage-B3ptvnJz.js} +3 -3
  22. package/dist/chunks/{ApplicationsDashboardPage-Bs-Xgca4.js.map → ApplicationsDashboardPage-B3ptvnJz.js.map} +1 -1
  23. package/dist/chunks/{ApplicationsDashboardPage-BSsHN3Yj.js → ApplicationsDashboardPage-D0pxqbEc.js} +2 -2
  24. package/dist/chunks/{ApplicationsDashboardPage-BSsHN3Yj.js.map → ApplicationsDashboardPage-D0pxqbEc.js.map} +1 -1
  25. package/dist/chunks/{ApplicationsGridPage-DDysNWJ5.js → ApplicationsGridPage-Ca23FBSP.js} +2 -2
  26. package/dist/chunks/{ApplicationsGridPage-DDysNWJ5.js.map → ApplicationsGridPage-Ca23FBSP.js.map} +1 -1
  27. package/dist/chunks/{ApplicationsGridPage-s1WEzOXS.js → ApplicationsGridPage-qi2UCD24.js} +2 -2
  28. package/dist/chunks/{ApplicationsGridPage-s1WEzOXS.js.map → ApplicationsGridPage-qi2UCD24.js.map} +1 -1
  29. package/dist/chunks/{ApplicationsListPage-B3CSMiV0.js → ApplicationsListPage-CEUmBXN0.js} +2 -2
  30. package/dist/chunks/{ApplicationsListPage-B3CSMiV0.js.map → ApplicationsListPage-CEUmBXN0.js.map} +1 -1
  31. package/dist/chunks/{ApplicationsListPage-B6ZCecIl.js → ApplicationsListPage-cE82bv8j.js} +2 -2
  32. package/dist/chunks/{ApplicationsListPage-B6ZCecIl.js.map → ApplicationsListPage-cE82bv8j.js.map} +1 -1
  33. package/dist/chunks/{ApplicationsPage-ztPwoAGt.js → ApplicationsPage-DW1BrVVN.js} +4 -4
  34. package/dist/chunks/{ApplicationsPage-ztPwoAGt.js.map → ApplicationsPage-DW1BrVVN.js.map} +1 -1
  35. package/dist/chunks/{ApplicationsPage-BBaiBM--.js → ApplicationsPage-RAqTs5HI.js} +2 -2
  36. package/dist/chunks/{ApplicationsPage-BBaiBM--.js.map → ApplicationsPage-RAqTs5HI.js.map} +1 -1
  37. package/dist/chunks/{AssignmentRulesPage-CK4L4rBO.js → AssignmentRulesPage-C0qnk3oR.js} +2 -2
  38. package/dist/chunks/{AssignmentRulesPage-CK4L4rBO.js.map → AssignmentRulesPage-C0qnk3oR.js.map} +1 -1
  39. package/dist/chunks/{AssignmentRulesPage-DFSVFFXr.js → AssignmentRulesPage-CVgFmhEs.js} +2 -2
  40. package/dist/chunks/{AssignmentRulesPage-DFSVFFXr.js.map → AssignmentRulesPage-CVgFmhEs.js.map} +1 -1
  41. package/dist/chunks/{AssignmentsPage-JCLpyg94.js → AssignmentsPage-Bv9HYtYN.js} +2 -2
  42. package/dist/chunks/{AssignmentsPage-JCLpyg94.js.map → AssignmentsPage-Bv9HYtYN.js.map} +1 -1
  43. package/dist/chunks/{AssignmentsPage-Bp7oQD7Q.js → AssignmentsPage-z1q1C9Uz.js} +2 -2
  44. package/dist/chunks/{AssignmentsPage-Bp7oQD7Q.js.map → AssignmentsPage-z1q1C9Uz.js.map} +1 -1
  45. package/dist/chunks/{AuthCallbackPage-Bl9xlJ3h.js → AuthCallbackPage-CcteN6Kv.js} +2 -2
  46. package/dist/chunks/{AuthCallbackPage-Bl9xlJ3h.js.map → AuthCallbackPage-CcteN6Kv.js.map} +1 -1
  47. package/dist/chunks/{AuthCallbackPage-CzMHz4jy.js → AuthCallbackPage-DL5PJUYJ.js} +2 -2
  48. package/dist/chunks/{AuthCallbackPage-CzMHz4jy.js.map → AuthCallbackPage-DL5PJUYJ.js.map} +1 -1
  49. package/dist/chunks/{ConfirmEmailPage-D_8T1vqV.js → ConfirmEmailPage-BP8VUz-A.js} +2 -2
  50. package/dist/chunks/{ConfirmEmailPage-D_8T1vqV.js.map → ConfirmEmailPage-BP8VUz-A.js.map} +1 -1
  51. package/dist/chunks/{ConfirmEmailPage-M7mJgXvn.js → ConfirmEmailPage-CeflKXpN.js} +2 -2
  52. package/dist/chunks/{ConfirmEmailPage-M7mJgXvn.js.map → ConfirmEmailPage-CeflKXpN.js.map} +1 -1
  53. package/dist/chunks/{CreateSupportTicketPage-BNEGavlu.js → CreateSupportTicketPage-BAdvWb_8.js} +2 -2
  54. package/dist/chunks/{CreateSupportTicketPage-BNEGavlu.js.map → CreateSupportTicketPage-BAdvWb_8.js.map} +1 -1
  55. package/dist/chunks/{CreateSupportTicketPage-C2X2mfds.js → CreateSupportTicketPage-DDiv79-p.js} +2 -2
  56. package/dist/chunks/{CreateSupportTicketPage-C2X2mfds.js.map → CreateSupportTicketPage-DDiv79-p.js.map} +1 -1
  57. package/dist/chunks/{DashboardPage-4oy2YqvT.js → DashboardPage-B_uyyRRE.js} +2 -2
  58. package/dist/chunks/{DashboardPage-4oy2YqvT.js.map → DashboardPage-B_uyyRRE.js.map} +1 -1
  59. package/dist/chunks/{DashboardPage-CPArUG-S.js → DashboardPage-CpoduSu7.js} +2 -2
  60. package/dist/chunks/{DashboardPage-CPArUG-S.js.map → DashboardPage-CpoduSu7.js.map} +1 -1
  61. package/dist/chunks/{DashboardPage-CO-8B8EI.js → DashboardPage-D4pyUgdM.js} +3 -3
  62. package/dist/chunks/{DashboardPage-CO-8B8EI.js.map → DashboardPage-D4pyUgdM.js.map} +1 -1
  63. package/dist/chunks/{DashboardPage-D5MRMxEV.js → DashboardPage-Kp-MCxW4.js} +3 -3
  64. package/dist/chunks/{DashboardPage-D5MRMxEV.js.map → DashboardPage-Kp-MCxW4.js.map} +1 -1
  65. package/dist/chunks/{EscalationConfigPage-DnjLFXnL.js → EscalationConfigPage-D-WCN6YS.js} +2 -2
  66. package/dist/chunks/{EscalationConfigPage-DnjLFXnL.js.map → EscalationConfigPage-D-WCN6YS.js.map} +1 -1
  67. package/dist/chunks/{EscalationConfigPage-CwdnfJbJ.js → EscalationConfigPage-UrLJarSI.js} +2 -2
  68. package/dist/chunks/{EscalationConfigPage-CwdnfJbJ.js.map → EscalationConfigPage-UrLJarSI.js.map} +1 -1
  69. package/dist/chunks/{ForceChangePasswordPage-sh-3h_H9.js → ForceChangePasswordPage-BIh1SF5C.js} +2 -2
  70. package/dist/chunks/{ForceChangePasswordPage-sh-3h_H9.js.map → ForceChangePasswordPage-BIh1SF5C.js.map} +1 -1
  71. package/dist/chunks/{ForceChangePasswordPage-ZEIfyqwE.js → ForceChangePasswordPage-FFZZRpU7.js} +2 -2
  72. package/dist/chunks/{ForceChangePasswordPage-ZEIfyqwE.js.map → ForceChangePasswordPage-FFZZRpU7.js.map} +1 -1
  73. package/dist/chunks/{ForgotPasswordPage-B4M6-xeM.js → ForgotPasswordPage-BKqRF7SF.js} +2 -2
  74. package/dist/chunks/{ForgotPasswordPage-B4M6-xeM.js.map → ForgotPasswordPage-BKqRF7SF.js.map} +1 -1
  75. package/dist/chunks/{ForgotPasswordPage-MIu-U7p0.js → ForgotPasswordPage-BXp8qQUX.js} +2 -2
  76. package/dist/chunks/{ForgotPasswordPage-MIu-U7p0.js.map → ForgotPasswordPage-BXp8qQUX.js.map} +1 -1
  77. package/dist/chunks/{GroupDetailPage-4XK3Bs_r.js → GroupDetailPage-a0hBx-LO.js} +5 -5
  78. package/dist/chunks/{GroupDetailPage-4XK3Bs_r.js.map → GroupDetailPage-a0hBx-LO.js.map} +1 -1
  79. package/dist/chunks/{GroupDetailPage-C-kvtd2T.js → GroupDetailPage-eGGJCqgq.js} +2 -2
  80. package/dist/chunks/{GroupDetailPage-C-kvtd2T.js.map → GroupDetailPage-eGGJCqgq.js.map} +1 -1
  81. package/dist/chunks/{MyAccessRequestsPage-CP41FzHi.js → MyAccessRequestsPage-BgQSyy5d.js} +2 -2
  82. package/dist/chunks/{MyAccessRequestsPage-CP41FzHi.js.map → MyAccessRequestsPage-BgQSyy5d.js.map} +1 -1
  83. package/dist/chunks/{MyAccessRequestsPage-DzrXTrVi.js → MyAccessRequestsPage-Dmb0rUHO.js} +2 -2
  84. package/dist/chunks/{MyAccessRequestsPage-DzrXTrVi.js.map → MyAccessRequestsPage-Dmb0rUHO.js.map} +1 -1
  85. package/dist/chunks/{MyTenantsPage-V_SwYio2.js → MyTenantsPage-BZTeqyDr.js} +3 -3
  86. package/dist/chunks/{MyTenantsPage-V_SwYio2.js.map → MyTenantsPage-BZTeqyDr.js.map} +1 -1
  87. package/dist/chunks/{MyTenantsPage-CZRkMbh8.js → MyTenantsPage-kCHBF2uA.js} +2 -2
  88. package/dist/chunks/{MyTenantsPage-CZRkMbh8.js.map → MyTenantsPage-kCHBF2uA.js.map} +1 -1
  89. package/dist/chunks/{MyTicketsPage-DOUhaLal.js → MyTicketsPage-BwNIqpCE.js} +2 -2
  90. package/dist/chunks/{MyTicketsPage-DOUhaLal.js.map → MyTicketsPage-BwNIqpCE.js.map} +1 -1
  91. package/dist/chunks/{MyTicketsPage-DnvAIeyr.js → MyTicketsPage-CTpjkA5t.js} +2 -2
  92. package/dist/chunks/{MyTicketsPage-DnvAIeyr.js.map → MyTicketsPage-CTpjkA5t.js.map} +1 -1
  93. package/dist/chunks/{NavigationAppsPage-DfTa4jCG.js → NavigationAppsPage-DO5bTibb.js} +2 -2
  94. package/dist/chunks/{NavigationAppsPage-DfTa4jCG.js.map → NavigationAppsPage-DO5bTibb.js.map} +1 -1
  95. package/dist/chunks/{NavigationAppsPage-DXvpLsbt.js → NavigationAppsPage-vx_n07SD.js} +2 -2
  96. package/dist/chunks/{NavigationAppsPage-DXvpLsbt.js.map → NavigationAppsPage-vx_n07SD.js.map} +1 -1
  97. package/dist/chunks/{NotificationsPage-I1yCk7tk.js → NotificationsPage-Br9sb9AQ.js} +2 -2
  98. package/dist/chunks/{NotificationsPage-I1yCk7tk.js.map → NotificationsPage-Br9sb9AQ.js.map} +1 -1
  99. package/dist/chunks/{NotificationsPage-D76MdAs-.js → NotificationsPage-CRhd752L.js} +2 -2
  100. package/dist/chunks/{NotificationsPage-D76MdAs-.js.map → NotificationsPage-CRhd752L.js.map} +1 -1
  101. package/dist/chunks/{OnboardingWizardPage-DtWUPCh3.js → OnboardingWizardPage-BIl3Usew.js} +2 -2
  102. package/dist/chunks/{OnboardingWizardPage-DtWUPCh3.js.map → OnboardingWizardPage-BIl3Usew.js.map} +1 -1
  103. package/dist/chunks/{OnboardingWizardPage-BRUzcl1A.js → OnboardingWizardPage-CjqxWX7h.js} +2 -2
  104. package/dist/chunks/{OnboardingWizardPage-BRUzcl1A.js.map → OnboardingWizardPage-CjqxWX7h.js.map} +1 -1
  105. package/dist/chunks/{PermissionDetailPage-DJJGbXoX.js → PermissionDetailPage-COIuJXH-.js} +2 -2
  106. package/dist/chunks/{PermissionDetailPage-DJJGbXoX.js.map → PermissionDetailPage-COIuJXH-.js.map} +1 -1
  107. package/dist/chunks/{PermissionDetailPage-CUNKbl7t.js → PermissionDetailPage-P_d6xnY0.js} +2 -2
  108. package/dist/chunks/{PermissionDetailPage-CUNKbl7t.js.map → PermissionDetailPage-P_d6xnY0.js.map} +1 -1
  109. package/dist/chunks/{PermissionsPage-B8wmawPV.js → PermissionsPage-BhjnMyFY.js} +2 -2
  110. package/dist/chunks/{PermissionsPage-B8wmawPV.js.map → PermissionsPage-BhjnMyFY.js.map} +1 -1
  111. package/dist/chunks/{PermissionsPage-Dbjcctuh.js → PermissionsPage-CHYy8XFr.js} +2 -2
  112. package/dist/chunks/{PermissionsPage-Dbjcctuh.js.map → PermissionsPage-CHYy8XFr.js.map} +1 -1
  113. package/dist/chunks/{PortalDashboardPage-zii0ll57.js → PortalDashboardPage-BwQ4NQrH.js} +2 -2
  114. package/dist/chunks/{PortalDashboardPage-zii0ll57.js.map → PortalDashboardPage-BwQ4NQrH.js.map} +1 -1
  115. package/dist/chunks/{PortalDashboardPage-BeNfBZmb.js → PortalDashboardPage-hLJcfGnT.js} +2 -2
  116. package/dist/chunks/{PortalDashboardPage-BeNfBZmb.js.map → PortalDashboardPage-hLJcfGnT.js.map} +1 -1
  117. package/dist/chunks/{PreferencesPage-BmvrBaAD.js → PreferencesPage-DYYqisR0.js} +2 -2
  118. package/dist/chunks/{PreferencesPage-BmvrBaAD.js.map → PreferencesPage-DYYqisR0.js.map} +1 -1
  119. package/dist/chunks/{PreferencesPage-BCpuIGzv.js → PreferencesPage-DzpM-lpD.js} +2 -2
  120. package/dist/chunks/{PreferencesPage-BCpuIGzv.js.map → PreferencesPage-DzpM-lpD.js.map} +1 -1
  121. package/dist/chunks/{ProfilePage-eowQd59_.js → ProfilePage-D98bvXeT.js} +2 -2
  122. package/dist/chunks/{ProfilePage-eowQd59_.js.map → ProfilePage-D98bvXeT.js.map} +1 -1
  123. package/dist/chunks/{ProfilePage-mf5wI0-n.js → ProfilePage-DWRDN0fo.js} +2 -2
  124. package/dist/chunks/{ProfilePage-mf5wI0-n.js.map → ProfilePage-DWRDN0fo.js.map} +1 -1
  125. package/dist/chunks/{ReferencesManagementPage-CLsaUNqA.js → ReferencesManagementPage-B0Cq9BHS.js} +2 -2
  126. package/dist/chunks/{ReferencesManagementPage-CLsaUNqA.js.map → ReferencesManagementPage-B0Cq9BHS.js.map} +1 -1
  127. package/dist/chunks/{ReferencesManagementPage-8UPgkVE8.js → ReferencesManagementPage-CxbfOBs2.js} +3 -3
  128. package/dist/chunks/{ReferencesManagementPage-8UPgkVE8.js.map → ReferencesManagementPage-CxbfOBs2.js.map} +1 -1
  129. package/dist/chunks/{RegisterPage-57X-ILDb.js → RegisterPage-DMeq3GzW.js} +2 -2
  130. package/dist/chunks/{RegisterPage-57X-ILDb.js.map → RegisterPage-DMeq3GzW.js.map} +1 -1
  131. package/dist/chunks/{RegisterPage-CNyHSbqs.js → RegisterPage-DvG2Php7.js} +2 -2
  132. package/dist/chunks/{RegisterPage-CNyHSbqs.js.map → RegisterPage-DvG2Php7.js.map} +1 -1
  133. package/dist/chunks/{ResetPasswordPage-JW8-mh_k.js → ResetPasswordPage-DOTswepm.js} +2 -2
  134. package/dist/chunks/{ResetPasswordPage-JW8-mh_k.js.map → ResetPasswordPage-DOTswepm.js.map} +1 -1
  135. package/dist/chunks/{ResetPasswordPage-CyV8l-Zo.js → ResetPasswordPage-ntMMFvDo.js} +2 -2
  136. package/dist/chunks/{ResetPasswordPage-CyV8l-Zo.js.map → ResetPasswordPage-ntMMFvDo.js.map} +1 -1
  137. package/dist/chunks/{ResolutionModal-wddG59kg.js → ResolutionModal-CKt73sIZ.js} +2 -2
  138. package/dist/chunks/{ResolutionModal-wddG59kg.js.map → ResolutionModal-CKt73sIZ.js.map} +1 -1
  139. package/dist/chunks/{ResolutionModal-CjwE73NX.js → ResolutionModal-XGHCELez.js} +2 -2
  140. package/dist/chunks/{ResolutionModal-CjwE73NX.js.map → ResolutionModal-XGHCELez.js.map} +1 -1
  141. package/dist/chunks/{RoleDetailPage-CrioVHFI.js → RoleDetailPage-BtnYTVN6.js} +3 -3
  142. package/dist/chunks/{RoleDetailPage-CrioVHFI.js.map → RoleDetailPage-BtnYTVN6.js.map} +1 -1
  143. package/dist/chunks/{RoleDetailPage-TUOGR1ow.js → RoleDetailPage-DAp65p0d.js} +2 -2
  144. package/dist/chunks/{RoleDetailPage-TUOGR1ow.js.map → RoleDetailPage-DAp65p0d.js.map} +1 -1
  145. package/dist/chunks/{RolesPage-CAcols3D.js → RolesPage-DyEhJHxw.js} +2 -2
  146. package/dist/chunks/{RolesPage-CAcols3D.js.map → RolesPage-DyEhJHxw.js.map} +1 -1
  147. package/dist/chunks/{RolesPage-sJBWaNff.js → RolesPage-FmZCLEYo.js} +2 -2
  148. package/dist/chunks/{RolesPage-sJBWaNff.js.map → RolesPage-FmZCLEYo.js.map} +1 -1
  149. package/dist/chunks/{SlaConfigPage-BPGRloOS.js → SlaConfigPage-DTtP2Q4t.js} +2 -2
  150. package/dist/chunks/{SlaConfigPage-BPGRloOS.js.map → SlaConfigPage-DTtP2Q4t.js.map} +1 -1
  151. package/dist/chunks/{SlaConfigPage-D5TRn7Ir.js → SlaConfigPage-LpVD_ai4.js} +2 -2
  152. package/dist/chunks/{SlaConfigPage-D5TRn7Ir.js.map → SlaConfigPage-LpVD_ai4.js.map} +1 -1
  153. package/dist/chunks/{SupportPermissionsPage-UXmYLrIq.js → SupportPermissionsPage-BV8F_Tl3.js} +2 -2
  154. package/dist/chunks/{SupportPermissionsPage-UXmYLrIq.js.map → SupportPermissionsPage-BV8F_Tl3.js.map} +1 -1
  155. package/dist/chunks/{SupportPermissionsPage-Dc2bWTzG.js → SupportPermissionsPage-Bzfq6pKf.js} +2 -2
  156. package/dist/chunks/{SupportPermissionsPage-Dc2bWTzG.js.map → SupportPermissionsPage-Bzfq6pKf.js.map} +1 -1
  157. package/dist/chunks/{TemplatesPage-nTY85sNA.js → TemplatesPage-CYHH5WlP.js} +2 -2
  158. package/dist/chunks/{TemplatesPage-nTY85sNA.js.map → TemplatesPage-CYHH5WlP.js.map} +1 -1
  159. package/dist/chunks/{TemplatesPage-dmPlqqiD.js → TemplatesPage-czt_RH5f.js} +2 -2
  160. package/dist/chunks/{TemplatesPage-dmPlqqiD.js.map → TemplatesPage-czt_RH5f.js.map} +1 -1
  161. package/dist/chunks/{TenantCard-BhT-31ls.js → TenantCard-Bqh5PGJx.js} +2 -2
  162. package/dist/chunks/{TenantCard-BhT-31ls.js.map → TenantCard-Bqh5PGJx.js.map} +1 -1
  163. package/dist/chunks/{TenantCard-BUXfstRZ.js → TenantCard-C6qKD480.js} +2 -2
  164. package/dist/chunks/{TenantCard-BUXfstRZ.js.map → TenantCard-C6qKD480.js.map} +1 -1
  165. package/dist/chunks/{TenantScopeSelector-B-SRDR2R.js → TenantScopeSelector-DWUP8Le7.js} +2 -2
  166. package/dist/chunks/{TenantScopeSelector-B-SRDR2R.js.map → TenantScopeSelector-DWUP8Le7.js.map} +1 -1
  167. package/dist/chunks/{TenantScopeSelector-3_mzBLNI.js → TenantScopeSelector-DxQ7HNbh.js} +2 -2
  168. package/dist/chunks/{TenantScopeSelector-3_mzBLNI.js.map → TenantScopeSelector-DxQ7HNbh.js.map} +1 -1
  169. package/dist/chunks/{TicketDetailPage-xN3wPnFL.js → TicketDetailPage-BuxXLcJi.js} +2 -2
  170. package/dist/chunks/{TicketDetailPage-xN3wPnFL.js.map → TicketDetailPage-BuxXLcJi.js.map} +1 -1
  171. package/dist/chunks/{TicketDetailPage-B4cR3rOC.js → TicketDetailPage-Dy4pg33-.js} +2 -2
  172. package/dist/chunks/{TicketDetailPage-B4cR3rOC.js.map → TicketDetailPage-Dy4pg33-.js.map} +1 -1
  173. package/dist/chunks/{TicketsPage-CkHgXSxU.js → TicketsPage-Ck-HUgte.js} +2 -2
  174. package/dist/chunks/{TicketsPage-CkHgXSxU.js.map → TicketsPage-Ck-HUgte.js.map} +1 -1
  175. package/dist/chunks/{TicketsPage-Dwi2xpMI.js → TicketsPage-jlN9JDzm.js} +2 -2
  176. package/dist/chunks/{TicketsPage-Dwi2xpMI.js.map → TicketsPage-jlN9JDzm.js.map} +1 -1
  177. package/dist/chunks/{UserCreateTicketPage-D2a3EOey.js → UserCreateTicketPage-BrRZyXMn.js} +2 -2
  178. package/dist/chunks/{UserCreateTicketPage-D2a3EOey.js.map → UserCreateTicketPage-BrRZyXMn.js.map} +1 -1
  179. package/dist/chunks/{UserCreateTicketPage-bcbSLglE.js → UserCreateTicketPage-D58Ro4Nb.js} +2 -2
  180. package/dist/chunks/{UserCreateTicketPage-bcbSLglE.js.map → UserCreateTicketPage-D58Ro4Nb.js.map} +1 -1
  181. package/dist/chunks/{UserDashboardPage-DwnDRNoW.js → UserDashboardPage-C5ulSzaI.js} +2 -2
  182. package/dist/chunks/{UserDashboardPage-DwnDRNoW.js.map → UserDashboardPage-C5ulSzaI.js.map} +1 -1
  183. package/dist/chunks/{UserDashboardPage-ZMsx8LWw.js → UserDashboardPage-CjAx5OHh.js} +2 -2
  184. package/dist/chunks/{UserDashboardPage-ZMsx8LWw.js.map → UserDashboardPage-CjAx5OHh.js.map} +1 -1
  185. package/dist/chunks/{UserDetailPage-BRFowOFL.js → UserDetailPage-Bhpry9xq.js} +2 -2
  186. package/dist/chunks/{UserDetailPage-BRFowOFL.js.map → UserDetailPage-Bhpry9xq.js.map} +1 -1
  187. package/dist/chunks/{UserDetailPage-CZyV-zsg.js → UserDetailPage-DUu2mA_n.js} +5 -5
  188. package/dist/chunks/{UserDetailPage-CZyV-zsg.js.map → UserDetailPage-DUu2mA_n.js.map} +1 -1
  189. package/dist/chunks/{UserTicketDetailPage-DzB_pELt.js → UserTicketDetailPage-DpFFjIso.js} +2 -2
  190. package/dist/chunks/{UserTicketDetailPage-DzB_pELt.js.map → UserTicketDetailPage-DpFFjIso.js.map} +1 -1
  191. package/dist/chunks/{UserTicketDetailPage-BstGk_BP.js → UserTicketDetailPage-YJvBWFEu.js} +2 -2
  192. package/dist/chunks/{UserTicketDetailPage-BstGk_BP.js.map → UserTicketDetailPage-YJvBWFEu.js.map} +1 -1
  193. package/dist/chunks/{UsersGroupsPage-DTmhzttW.js → UsersGroupsPage-b2PTQX_m.js} +2 -2
  194. package/dist/chunks/{UsersGroupsPage-DTmhzttW.js.map → UsersGroupsPage-b2PTQX_m.js.map} +1 -1
  195. package/dist/chunks/{UsersGroupsPage-BygTv_kK.js → UsersGroupsPage-l33K3Nca.js} +3 -3
  196. package/dist/chunks/{UsersGroupsPage-BygTv_kK.js.map → UsersGroupsPage-l33K3Nca.js.map} +1 -1
  197. package/dist/chunks/{UsersPage-TIqSHgHj.js → UsersPage-BjC5ZqTa.js} +2 -2
  198. package/dist/chunks/{UsersPage-TIqSHgHj.js.map → UsersPage-BjC5ZqTa.js.map} +1 -1
  199. package/dist/chunks/{UsersPage-DcwLyMAX.js → UsersPage-NsTukS8m.js} +2 -2
  200. package/dist/chunks/{UsersPage-DcwLyMAX.js.map → UsersPage-NsTukS8m.js.map} +1 -1
  201. package/dist/chunks/{accessRequestsApi-B6dsJzvH.js → accessRequestsApi-C2usKVGJ.js} +2 -2
  202. package/dist/chunks/{accessRequestsApi-B6dsJzvH.js.map → accessRequestsApi-C2usKVGJ.js.map} +1 -1
  203. package/dist/chunks/{accessRequestsApi-3FjMFbpa.js → accessRequestsApi-LuovcP6l.js} +2 -2
  204. package/dist/chunks/{accessRequestsApi-3FjMFbpa.js.map → accessRequestsApi-LuovcP6l.js.map} +1 -1
  205. package/dist/chunks/{aiApi-DXOdsoxr.js → aiApi-B03u3zUH.js} +2 -2
  206. package/dist/chunks/{aiApi-DXOdsoxr.js.map → aiApi-B03u3zUH.js.map} +1 -1
  207. package/dist/chunks/{aiApi-9G4wG_mT.js → aiApi-Cwg0B8PJ.js} +2 -2
  208. package/dist/chunks/{aiApi-9G4wG_mT.js.map → aiApi-Cwg0B8PJ.js.map} +1 -1
  209. package/dist/chunks/{applicationAnalyticsApi-DhOd6idI.js → applicationAnalyticsApi-BobBdehV.js} +2 -2
  210. package/dist/chunks/{applicationAnalyticsApi-DhOd6idI.js.map → applicationAnalyticsApi-BobBdehV.js.map} +1 -1
  211. package/dist/chunks/{applicationAnalyticsApi-D0DEp9Y-.js → applicationAnalyticsApi-jCZhWKOx.js} +2 -2
  212. package/dist/chunks/{applicationAnalyticsApi-D0DEp9Y-.js.map → applicationAnalyticsApi-jCZhWKOx.js.map} +1 -1
  213. package/dist/chunks/{groupsApi-Db8G2lLs.js → groupsApi-CoxnW9vH.js} +2 -2
  214. package/dist/chunks/{groupsApi-Db8G2lLs.js.map → groupsApi-CoxnW9vH.js.map} +1 -1
  215. package/dist/chunks/{groupsApi-lbxNsHFv.js → groupsApi-D2lFFcgu.js} +2 -2
  216. package/dist/chunks/{groupsApi-lbxNsHFv.js.map → groupsApi-D2lFFcgu.js.map} +1 -1
  217. package/dist/chunks/{index-xhRXN1Jq.js → index-B5U_Jp0-.js} +2 -2
  218. package/dist/chunks/{index-xhRXN1Jq.js.map → index-B5U_Jp0-.js.map} +1 -1
  219. package/dist/chunks/{index-Bn8HzILk.js → index-BDB_a-p7.js} +4 -4
  220. package/dist/chunks/{index-Bn8HzILk.js.map → index-BDB_a-p7.js.map} +1 -1
  221. package/dist/chunks/{index-DF93KQFR.js → index-BbHRJz-n.js} +2 -2
  222. package/dist/chunks/{index-DF93KQFR.js.map → index-BbHRJz-n.js.map} +1 -1
  223. package/dist/chunks/{index-DqbVFB1H.js → index-CI2WU5ZZ.js} +2 -2
  224. package/dist/chunks/{index-DqbVFB1H.js.map → index-CI2WU5ZZ.js.map} +1 -1
  225. package/dist/chunks/{index-DjC1u2hI.js → index-CLk9ClC2.js} +3 -3
  226. package/dist/chunks/{index-DjC1u2hI.js.map → index-CLk9ClC2.js.map} +1 -1
  227. package/dist/chunks/{index-CgtbaFf5.js → index-CmTKGOa_.js} +2 -2
  228. package/dist/chunks/{index-CgtbaFf5.js.map → index-CmTKGOa_.js.map} +1 -1
  229. package/dist/chunks/{index-DwqLhQ8S.js → index-D5oIr6PO.js} +2 -2
  230. package/dist/chunks/{index-DwqLhQ8S.js.map → index-D5oIr6PO.js.map} +1 -1
  231. package/dist/chunks/{index-CTGSmYvs.js → index-DC6TBJV_.js} +2 -2
  232. package/dist/chunks/{index-CTGSmYvs.js.map → index-DC6TBJV_.js.map} +1 -1
  233. package/dist/chunks/{index-CN2WRyg1.js → index-DN97bp_f.js} +1145 -1108
  234. package/dist/chunks/index-DN97bp_f.js.map +1 -0
  235. package/dist/chunks/{index-DUS-tunb.js → index-DRW5qV_L.js} +2 -2
  236. package/dist/chunks/{index-DUS-tunb.js.map → index-DRW5qV_L.js.map} +1 -1
  237. package/dist/chunks/{index-DLekpNSE.js → index-DcLZao1q.js} +2 -2
  238. package/dist/chunks/{index-DLekpNSE.js.map → index-DcLZao1q.js.map} +1 -1
  239. package/dist/chunks/{index-HsAOBno4.js → index-DcMOmGtX.js} +2 -2
  240. package/dist/chunks/{index-HsAOBno4.js.map → index-DcMOmGtX.js.map} +1 -1
  241. package/dist/chunks/{index-cAikSVW0.js → index-DnML-nfd.js} +10 -10
  242. package/dist/chunks/index-DnML-nfd.js.map +1 -0
  243. package/dist/chunks/{index-DEtq-xUL.js → index-Drd59qAP.js} +8 -8
  244. package/dist/chunks/{index-DEtq-xUL.js.map → index-Drd59qAP.js.map} +1 -1
  245. package/dist/chunks/{index-TiWOcC0g.js → index-EiIHjIgi.js} +2 -2
  246. package/dist/chunks/{index-TiWOcC0g.js.map → index-EiIHjIgi.js.map} +1 -1
  247. package/dist/chunks/{index-D0HS542b.js → index-axYz6ptj.js} +2 -2
  248. package/dist/chunks/{index-D0HS542b.js.map → index-axYz6ptj.js.map} +1 -1
  249. package/dist/chunks/{index-BI2dc1FS.js → index-lXrXnhFc.js} +2 -2
  250. package/dist/chunks/{index-BI2dc1FS.js.map → index-lXrXnhFc.js.map} +1 -1
  251. package/dist/chunks/{index-CUICSveU.js → index-rI-1r6c2.js} +2 -2
  252. package/dist/chunks/{index-CUICSveU.js.map → index-rI-1r6c2.js.map} +1 -1
  253. package/dist/chunks/{tenantIconMap-__FKj6CN.js → tenantIconMap-B4wAYGWP.js} +2 -2
  254. package/dist/chunks/{tenantIconMap-__FKj6CN.js.map → tenantIconMap-B4wAYGWP.js.map} +1 -1
  255. package/dist/chunks/{tenantIconMap-CHeS7oLt.js → tenantIconMap-Cfm15HwB.js} +2 -2
  256. package/dist/chunks/{tenantIconMap-CHeS7oLt.js.map → tenantIconMap-Cfm15HwB.js.map} +1 -1
  257. package/dist/chunks/{ticketingApi-DF4RwD_6.js → ticketingApi-CLMAPZDw.js} +2 -2
  258. package/dist/chunks/{ticketingApi-DF4RwD_6.js.map → ticketingApi-CLMAPZDw.js.map} +1 -1
  259. package/dist/chunks/{ticketingApi-Cj239hYB.js → ticketingApi-CTap4NdE.js} +2 -2
  260. package/dist/chunks/{ticketingApi-Cj239hYB.js.map → ticketingApi-CTap4NdE.js.map} +1 -1
  261. package/dist/chunks/{useAccessRequests-CViOUwyF.js → useAccessRequests-CBpDkq9o.js} +2 -2
  262. package/dist/chunks/{useAccessRequests-CViOUwyF.js.map → useAccessRequests-CBpDkq9o.js.map} +1 -1
  263. package/dist/chunks/{useAccessRequests-CFam8zFR.js → useAccessRequests-Cj2-OoAW.js} +3 -3
  264. package/dist/chunks/{useAccessRequests-CFam8zFR.js.map → useAccessRequests-Cj2-OoAW.js.map} +1 -1
  265. package/dist/chunks/{useUserAccessRequests-CslSQeBJ.js → useUserAccessRequests-C6l2VMe1.js} +2 -2
  266. package/dist/chunks/{useUserAccessRequests-CslSQeBJ.js.map → useUserAccessRequests-C6l2VMe1.js.map} +1 -1
  267. package/dist/chunks/{useUserAccessRequests-B-Cs6NX1.js → useUserAccessRequests-Ds3K-ENU.js} +2 -2
  268. package/dist/chunks/{useUserAccessRequests-B-Cs6NX1.js.map → useUserAccessRequests-Ds3K-ENU.js.map} +1 -1
  269. package/dist/components/routing/DynamicRouter.d.ts.map +1 -1
  270. package/dist/contexts/AuthContext.d.ts.map +1 -1
  271. package/dist/contexts/NavigationContext.d.ts.map +1 -1
  272. package/dist/extensions/PageRegistry.d.ts +2 -0
  273. package/dist/extensions/PageRegistry.d.ts.map +1 -1
  274. package/dist/services/api/adminApi/settings.d.ts +8 -3
  275. package/dist/services/api/adminApi/settings.d.ts.map +1 -1
  276. package/dist/smartstack.cjs +1 -1
  277. package/dist/smartstack.js +1 -1
  278. package/package.json +1 -1
  279. package/dist/chunks/index-CN2WRyg1.js.map +0 -1
  280. package/dist/chunks/index-cAikSVW0.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ReferencesManagementPage-CLsaUNqA.js","sources":["../../src/services/api/referencesApi.ts","../../src/pages/platform/administration/users/ReferencesManagementPage.tsx"],"sourcesContent":["import { api, apiClient } from './apiClient';\r\nimport type { PaginatedResult } from '../../types/pagination';\r\n\r\n/**\r\n * Creates API methods with a specific tenant context.\r\n */\r\nconst withTenantContext = (tenantSlug?: string) => ({\r\n get: <T>(url: string, config?: Parameters<typeof apiClient.get>[1]) =>\r\n apiClient.get<T>(url, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n post: <T>(url: string, data?: unknown, config?: Parameters<typeof apiClient.post>[2]) =>\r\n apiClient.post<T>(url, data, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n put: <T>(url: string, data?: unknown, config?: Parameters<typeof apiClient.put>[2]) =>\r\n apiClient.put<T>(url, data, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n patch: <T>(url: string, data?: unknown, config?: Parameters<typeof apiClient.patch>[2]) =>\r\n apiClient.patch<T>(url, data, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n delete: <T>(url: string, config?: Parameters<typeof apiClient.delete>[1]) =>\r\n apiClient.delete<T>(url, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n});\r\n\r\n// Reference types\r\nexport const ReferenceType = {\r\n Company: 0,\r\n Department: 1,\r\n JobTitle: 2,\r\n Office: 3,\r\n} as const;\r\nexport type ReferenceType = typeof ReferenceType[keyof typeof ReferenceType];\r\n\r\n// Types\r\nexport interface ReferenceListDto {\r\n id: string;\r\n code: string;\r\n name: string;\r\n shortName: string | null;\r\n description: string | null;\r\n isActive: boolean;\r\n isMerged: boolean;\r\n mergedIntoId: string | null;\r\n isFromEntra: boolean;\r\n entraValue: string | null;\r\n userCount: number;\r\n createdAt: string;\r\n tenantId: string | null;\r\n tenantName: string | null;\r\n}\r\n\r\nexport interface OfficeListDto extends ReferenceListDto {\r\n address: string | null;\r\n city: string | null;\r\n country: string | null;\r\n}\r\n\r\nexport interface CreateReferenceRequest {\r\n code: string;\r\n name: string;\r\n shortName?: string | null;\r\n description?: string | null;\r\n}\r\n\r\nexport interface CreateOfficeRequest extends CreateReferenceRequest {\r\n address?: string | null;\r\n city?: string | null;\r\n country?: string | null;\r\n}\r\n\r\nexport interface UpdateReferenceRequest {\r\n name: string;\r\n shortName?: string | null;\r\n description?: string | null;\r\n}\r\n\r\nexport interface UpdateOfficeRequest extends UpdateReferenceRequest {\r\n address?: string | null;\r\n city?: string | null;\r\n country?: string | null;\r\n}\r\n\r\n// Merge Types\r\nexport interface MergeReferencesRequest {\r\n tenantId?: string | null;\r\n referenceType: ReferenceType;\r\n targetId: string;\r\n sourceIds: string[];\r\n reason?: string | null;\r\n}\r\n\r\nexport interface MergePreviewRequest {\r\n tenantId?: string | null;\r\n referenceType: ReferenceType;\r\n sourceIds: string[];\r\n}\r\n\r\nexport interface MergeResultDto {\r\n targetId: string;\r\n targetName: string;\r\n totalSourcesMerged: number;\r\n totalUsersReassigned: number;\r\n sourceResults: MergeSourceResultDto[];\r\n}\r\n\r\nexport interface MergeSourceResultDto {\r\n sourceId: string;\r\n sourceName: string;\r\n sourceCode: string;\r\n usersReassigned: number;\r\n}\r\n\r\nexport interface MergePreviewDto {\r\n sources: MergeSourcePreviewDto[];\r\n totalUsersAffected: number;\r\n}\r\n\r\nexport interface MergeSourcePreviewDto {\r\n id: string;\r\n code: string;\r\n name: string;\r\n shortName: string | null;\r\n userCount: number;\r\n}\r\n\r\nexport interface MergeHistoryDto {\r\n id: string;\r\n tenantId: string | null;\r\n referenceType: ReferenceType;\r\n targetReferenceId: string;\r\n targetReferenceName: string;\r\n sourceReferenceId: string;\r\n sourceReferenceName: string;\r\n sourceReferenceCode: string;\r\n sourceReferenceShortName: string | null;\r\n affectedUserCount: number;\r\n mergedByUserId: string;\r\n mergedByUserName: string;\r\n mergeReason: string | null;\r\n mergedAt: string;\r\n}\r\n\r\n\r\nconst BASE_URL = '/api/administration/users/references';\r\n\r\n/**\r\n * Factory function to create references API with explicit tenant context.\r\n * @param tenantSlug - Optional tenant slug to use for all requests\r\n */\r\nconst _createReferencesApi = (tenantSlug?: string) => {\r\n const apiContext = tenantSlug ? withTenantContext(tenantSlug) : api;\r\n\r\n const buildUrl = (path: string, tenantId?: string | null, params?: Record<string, string | boolean | number | undefined>) => {\r\n const urlParams = new URLSearchParams();\r\n if (tenantId) urlParams.append('tenantId', tenantId);\r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined) urlParams.append(key, String(value));\r\n });\r\n }\r\n const queryString = urlParams.toString();\r\n return queryString ? `${BASE_URL}/${path}?${queryString}` : `${BASE_URL}/${path}`;\r\n };\r\n\r\n return {\r\n // === COMPANIES ===\r\n companies: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<ReferenceListDto>> => {\r\n const url = buildUrl('companies', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<ReferenceListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateReferenceRequest): Promise<ReferenceListDto> => {\r\n const url = buildUrl('companies', tenantId);\r\n return apiContext.post<ReferenceListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateReferenceRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/companies/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/companies/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/companies/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/companies/${id}`);\r\n },\r\n },\r\n\r\n // === DEPARTMENTS ===\r\n departments: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<ReferenceListDto>> => {\r\n const url = buildUrl('departments', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<ReferenceListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateReferenceRequest): Promise<ReferenceListDto> => {\r\n const url = buildUrl('departments', tenantId);\r\n return apiContext.post<ReferenceListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateReferenceRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/departments/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/departments/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/departments/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/departments/${id}`);\r\n },\r\n },\r\n\r\n // === JOB TITLES ===\r\n jobTitles: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<ReferenceListDto>> => {\r\n const url = buildUrl('job-titles', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<ReferenceListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateReferenceRequest): Promise<ReferenceListDto> => {\r\n const url = buildUrl('job-titles', tenantId);\r\n return apiContext.post<ReferenceListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateReferenceRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/job-titles/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/job-titles/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/job-titles/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/job-titles/${id}`);\r\n },\r\n },\r\n\r\n // === OFFICES ===\r\n offices: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<OfficeListDto>> => {\r\n const url = buildUrl('offices', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<OfficeListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateOfficeRequest): Promise<OfficeListDto> => {\r\n const url = buildUrl('offices', tenantId);\r\n return apiContext.post<OfficeListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateOfficeRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/offices/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/offices/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/offices/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/offices/${id}`);\r\n },\r\n },\r\n\r\n // === MERGE OPERATIONS ===\r\n merge: {\r\n execute: async (request: MergeReferencesRequest): Promise<MergeResultDto> => {\r\n return apiContext.post<MergeResultDto>(`${BASE_URL}/merge`, request);\r\n },\r\n\r\n preview: async (request: MergePreviewRequest): Promise<MergePreviewDto> => {\r\n return apiContext.post<MergePreviewDto>(`${BASE_URL}/merge/preview`, request);\r\n },\r\n\r\n getHistory: async (\r\n tenantId?: string | null,\r\n referenceType?: ReferenceType,\r\n from?: string,\r\n to?: string\r\n ): Promise<MergeHistoryDto[]> => {\r\n const params = new URLSearchParams();\r\n if (tenantId) params.append('tenantId', tenantId);\r\n if (referenceType !== undefined) params.append('referenceType', String(referenceType));\r\n if (from) params.append('from', from);\r\n if (to) params.append('to', to);\r\n\r\n const queryString = params.toString();\r\n const url = queryString ? `${BASE_URL}/merge/history?${queryString}` : `${BASE_URL}/merge/history`;\r\n return apiContext.get<MergeHistoryDto[]>(url);\r\n },\r\n },\r\n };\r\n};\r\nexport type ReferencesApi = ReturnType<typeof _createReferencesApi>;\r\nexport const createReferencesApi: (tenantSlug?: string) => ReferencesApi = _createReferencesApi;\r\n\r\n// Default export uses localStorage tenant slug (backward compatible)\r\nexport const referencesApi = createReferencesApi();\r\n","import { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Building2, Briefcase, MapPin, Users, Search, Plus, Edit2, Trash2, GitMerge, MoreHorizontal, X, Loader2, History, Check, AlertCircle, Globe } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport { useTenant } from '@/contexts/TenantContext';\r\nimport { useAdminTenants } from '@/hooks/useAdminTenants';\r\nimport { TenantScopeSelector, type ScopeValue } from '@/components/ui/TenantScopeSelector';\r\nimport {\r\n createReferencesApi,\r\n ReferenceType,\r\n} from '@/services/api/referencesApi';\r\nimport type {\r\n ReferenceListDto,\r\n MergePreviewDto,\r\n MergeHistoryDto,\r\n CreateReferenceRequest,\r\n UpdateReferenceRequest,\r\n} from '@/services/api/referencesApi';\r\n\r\ntype TabType = 'companies' | 'departments' | 'jobTitles' | 'offices';\r\n\r\ninterface Tab {\r\n id: TabType;\r\n label: string;\r\n icon: React.ElementType;\r\n referenceType: ReferenceType;\r\n}\r\n\r\nexport function ReferencesManagementPage(): ReactElement | null {\r\n const { t } = useTranslation('admin');\r\n const { currentTenant, userTenants, switchTenant } = useTenant();\r\n const { tenants: adminTenantsList } = useAdminTenants();\r\n\r\n // Tenant scope selector state\r\n const [selectedScope, setSelectedScope] = useState<ScopeValue>(\r\n currentTenant ? { tenantId: currentTenant.id, tenantSlug: currentTenant.slug, tenantUserId: '', tenantName: currentTenant.name } : 'global'\r\n );\r\n const isGlobalScope = selectedScope === 'global';\r\n const selectedTenantId = isGlobalScope ? null : selectedScope.tenantId;\r\n const tenantSlug = isGlobalScope ? undefined : selectedScope.tenantSlug;\r\n const api = useMemo(() => createReferencesApi(tenantSlug), [tenantSlug]);\r\n\r\n // State\r\n const [activeTab, setActiveTab] = useState<TabType>('departments');\r\n const [items, setItems] = useState<ReferenceListDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [search, setSearch] = useState('');\r\n const [showInactive, setShowInactive] = useState(false);\r\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\r\n\r\n // Pagination state\r\n const [page, setPage] = useState(1);\r\n const [pageSize] = useState(20);\r\n const [totalCount, setTotalCount] = useState(0);\r\n const [totalPages, setTotalPages] = useState(0);\r\n\r\n // Modal states\r\n const [showCreateModal, setShowCreateModal] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showMergeModal, setShowMergeModal] = useState(false);\r\n const [showHistoryModal, setShowHistoryModal] = useState(false);\r\n const [editingItem, setEditingItem] = useState<ReferenceListDto | null>(null);\r\n const [mergePreview, setMergePreview] = useState<MergePreviewDto | null>(null);\r\n const [mergeHistory, setMergeHistory] = useState<MergeHistoryDto[]>([]);\r\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\r\n\r\n // Form states\r\n const [formData, setFormData] = useState<CreateReferenceRequest>({ code: '', name: '' });\r\n const [mergeTargetId, setMergeTargetId] = useState<string | null>(null);\r\n const [mergeReason, setMergeReason] = useState('');\r\n const [saving, setSaving] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const tabs: Tab[] = [\r\n { id: 'departments', label: t('references.tabs.departments', 'Departments'), icon: Users, referenceType: ReferenceType.Department },\r\n { id: 'companies', label: t('references.tabs.companies', 'Companies'), icon: Building2, referenceType: ReferenceType.Company },\r\n { id: 'jobTitles', label: t('references.tabs.jobTitles', 'Job Titles'), icon: Briefcase, referenceType: ReferenceType.JobTitle },\r\n { id: 'offices', label: t('references.tabs.offices', 'Offices'), icon: MapPin, referenceType: ReferenceType.Office },\r\n ];\r\n\r\n const currentTab = tabs.find(tab => tab.id === activeTab)!;\r\n const tenantId = selectedTenantId;\r\n\r\n const loadItems = useCallback(async () => {\r\n try {\r\n setLoading(true);\r\n // Create API instance inside callback to avoid dependency loop\r\n const apiInstance = createReferencesApi(tenantSlug ?? undefined);\r\n\r\n const isActiveFilter = showInactive ? undefined : true;\r\n\r\n let paginatedResult;\r\n\r\n switch (activeTab) {\r\n case 'companies':\r\n paginatedResult = await apiInstance.companies.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n case 'departments':\r\n paginatedResult = await apiInstance.departments.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n case 'jobTitles':\r\n paginatedResult = await apiInstance.jobTitles.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n case 'offices':\r\n paginatedResult = await apiInstance.offices.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n default:\r\n paginatedResult = { items: [], totalCount: 0, page: 1, pageSize: 20, totalPages: 0, hasPreviousPage: false, hasNextPage: false };\r\n }\r\n\r\n setItems(paginatedResult.items);\r\n setTotalCount(paginatedResult.totalCount);\r\n setTotalPages(paginatedResult.totalPages);\r\n setSelectedIds(new Set());\r\n } catch (err) {\r\n console.error('Failed to load references:', err);\r\n setError('Failed to load references');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [tenantSlug, activeTab, tenantId, search, showInactive, page, pageSize]);\r\n\r\n useEffect(() => {\r\n loadItems();\r\n }, [loadItems]);\r\n\r\n // Reset to page 1 when filters change\r\n useEffect(() => {\r\n setPage(1);\r\n }, [activeTab, search, showInactive, selectedScope]);\r\n\r\n // Selection handlers\r\n const toggleSelection = (id: string) => {\r\n const newSelected = new Set(selectedIds);\r\n if (newSelected.has(id)) {\r\n newSelected.delete(id);\r\n } else {\r\n newSelected.add(id);\r\n }\r\n setSelectedIds(newSelected);\r\n };\r\n\r\n const toggleSelectAll = () => {\r\n if (selectedIds.size === items.length) {\r\n setSelectedIds(new Set());\r\n } else {\r\n setSelectedIds(new Set(items.map(item => item.id)));\r\n }\r\n };\r\n\r\n // Switch to a specific tenant from global view\r\n const handleSwitchToTenant = async (itemTenantId: string) => {\r\n try {\r\n await switchTenant(itemTenantId);\r\n const tenant = userTenants.find(t => t.id === itemTenantId);\r\n if (tenant) {\r\n setSelectedScope({ tenantId: tenant.id, tenantSlug: tenant.slug, tenantUserId: '', tenantName: tenant.name });\r\n }\r\n } catch (err) {\r\n console.error('Failed to switch tenant:', err);\r\n }\r\n };\r\n\r\n // CRUD handlers\r\n const handleCreate = async () => {\r\n if (!tenantId) return;\r\n\r\n try {\r\n setSaving(true);\r\n setError(null);\r\n\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.create(tenantId, formData);\r\n break;\r\n case 'departments':\r\n await api.departments.create(tenantId, formData);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.create(tenantId, formData);\r\n break;\r\n case 'offices':\r\n await api.offices.create(tenantId, formData);\r\n break;\r\n }\r\n\r\n setShowCreateModal(false);\r\n setFormData({ code: '', name: '' });\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to create';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleUpdate = async () => {\r\n if (!editingItem) return;\r\n\r\n try {\r\n setSaving(true);\r\n setError(null);\r\n\r\n const updateData: UpdateReferenceRequest = {\r\n name: formData.name,\r\n shortName: formData.shortName,\r\n description: formData.description,\r\n };\r\n\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.update(editingItem.id, updateData);\r\n break;\r\n case 'departments':\r\n await api.departments.update(editingItem.id, updateData);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.update(editingItem.id, updateData);\r\n break;\r\n case 'offices':\r\n await api.offices.update(editingItem.id, updateData);\r\n break;\r\n }\r\n\r\n setShowEditModal(false);\r\n setEditingItem(null);\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to update';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleDelete = async (id: string) => {\r\n if (!confirm(t('references.confirmDelete', 'Are you sure you want to delete this reference?'))) return;\r\n\r\n try {\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.delete(id);\r\n break;\r\n case 'departments':\r\n await api.departments.delete(id);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.delete(id);\r\n break;\r\n case 'offices':\r\n await api.offices.delete(id);\r\n break;\r\n }\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to delete';\r\n setError(message);\r\n }\r\n };\r\n\r\n const handleToggleActive = async (item: ReferenceListDto) => {\r\n try {\r\n if (item.isActive) {\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.deactivate(item.id);\r\n break;\r\n case 'departments':\r\n await api.departments.deactivate(item.id);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.deactivate(item.id);\r\n break;\r\n case 'offices':\r\n await api.offices.deactivate(item.id);\r\n break;\r\n }\r\n } else {\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.activate(item.id);\r\n break;\r\n case 'departments':\r\n await api.departments.activate(item.id);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.activate(item.id);\r\n break;\r\n case 'offices':\r\n await api.offices.activate(item.id);\r\n break;\r\n }\r\n }\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to toggle status';\r\n setError(message);\r\n }\r\n };\r\n\r\n // Merge handlers\r\n const openMergeModal = async () => {\r\n if (selectedIds.size < 2) return;\r\n\r\n try {\r\n const preview = await api.merge.preview({\r\n tenantId,\r\n referenceType: currentTab.referenceType,\r\n sourceIds: Array.from(selectedIds),\r\n });\r\n\r\n setMergePreview(preview);\r\n setMergeTargetId(null);\r\n setMergeReason('');\r\n setShowMergeModal(true);\r\n } catch (err) {\r\n console.error('Failed to get merge preview:', err);\r\n setError('Failed to preview merge');\r\n }\r\n };\r\n\r\n const handleMerge = async () => {\r\n if (!mergeTargetId || !mergePreview) return;\r\n\r\n const sourceIds = Array.from(selectedIds).filter(id => id !== mergeTargetId);\r\n\r\n try {\r\n setSaving(true);\r\n setError(null);\r\n\r\n await api.merge.execute({\r\n tenantId,\r\n referenceType: currentTab.referenceType,\r\n targetId: mergeTargetId,\r\n sourceIds,\r\n reason: mergeReason || undefined,\r\n });\r\n\r\n setShowMergeModal(false);\r\n setSelectedIds(new Set());\r\n setMergePreview(null);\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to merge';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const openHistoryModal = async () => {\r\n try {\r\n const history = await api.merge.getHistory(tenantId, currentTab.referenceType);\r\n setMergeHistory(history);\r\n setShowHistoryModal(true);\r\n } catch (err) {\r\n console.error('Failed to load merge history:', err);\r\n setError('Failed to load merge history');\r\n }\r\n };\r\n\r\n // Edit modal opener\r\n const openEditModal = (item: ReferenceListDto) => {\r\n setEditingItem(item);\r\n setFormData({\r\n code: item.code,\r\n name: item.name,\r\n shortName: item.shortName,\r\n description: item.description,\r\n });\r\n setShowEditModal(true);\r\n setMenuOpen(null);\r\n };\r\n\r\n // Render helpers\r\n const renderStatusBadge = (item: ReferenceListDto) => {\r\n if (item.isMerged) {\r\n return (\r\n <span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)]\">\r\n <GitMerge className=\"w-3 h-3\" />\r\n {t('references.merged', 'Merged')}\r\n </span>\r\n );\r\n }\r\n if (!item.isActive) {\r\n return (\r\n <span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--bg-secondary)] text-[var(--text-secondary)]\">\r\n {t('references.inactive', 'Inactive')}\r\n </span>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n <div className=\"p-6\">\r\n <div className=\"mb-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('admin.title', 'Administration'), href: '/administration' },\r\n { label: t('users.title', 'Users'), href: '/administration/users' },\r\n { label: t('references.title', 'References') },\r\n ]}\r\n />\r\n </div>\r\n\r\n {/* Header */}\r\n <div className=\"mb-6\">\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {t('references.title', 'Reference Data Management')}\r\n </h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">\r\n {t('references.description', 'Manage companies, departments, job titles, and offices for your organization')}\r\n </p>\r\n\r\n {/* Tenant Scope Selector */}\r\n <div className=\"mt-4\">\r\n <TenantScopeSelector\r\n value={selectedScope}\r\n onChange={setSelectedScope}\r\n adminTenants={adminTenantsList.map(ut => ({\r\n tenantId: ut.id,\r\n tenantSlug: ut.slug,\r\n tenantName: ut.name,\r\n tenantType: ut.type\r\n }))}\r\n />\r\n {isGlobalScope && (\r\n <p className=\"mt-2 text-sm text-[var(--text-secondary)] flex items-center gap-1.5\">\r\n <Globe className=\"w-4 h-4\" />\r\n {t('references.globalModeInfo', 'Showing references from all tenants. Select a tenant to manage its data.')}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Error message */}\r\n {error && (\r\n <div className=\"mb-4 p-4 bg-[var(--error-bg)] border border-[var(--error-border)] rounded-[var(--radius-card)]\">\r\n <div className=\"flex items-center\">\r\n <AlertCircle className=\"w-5 h-5 text-[var(--error-text)]\" />\r\n <span className=\"ml-2 text-[var(--error-text)]\">{error}</span>\r\n <button onClick={() => setError(null)} className=\"ml-auto text-[var(--error-text)]\">\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <button\r\n onClick={() => loadItems()}\r\n className=\"mt-2 text-sm text-[var(--error-text)] hover:opacity-80 underline\"\r\n >\r\n {t('common.retry', 'Retry')}\r\n </button>\r\n </div>\r\n )}\r\n\r\n {/* Tabs */}\r\n <div className=\"border-b border-[var(--border-color)] mb-6\">\r\n <nav className=\"flex gap-4 -mb-px\">\r\n {tabs.map(tab => {\r\n const Icon = tab.icon;\r\n const isActive = activeTab === tab.id;\r\n return (\r\n <button\r\n key={tab.id}\r\n onClick={() => {\r\n setActiveTab(tab.id);\r\n setSelectedIds(new Set());\r\n }}\r\n className={`flex items-center gap-2 px-4 py-3 border-b-2 font-medium text-sm transition-colors ${\r\n isActive\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-600)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]'\r\n }`}\r\n >\r\n <Icon className=\"w-4 h-4\" />\r\n {tab.label}\r\n </button>\r\n );\r\n })}\r\n </nav>\r\n </div>\r\n\r\n {/* Actions bar */}\r\n <div className=\"flex items-center justify-between gap-4 mb-4\">\r\n <div className=\"flex items-center gap-4\">\r\n {/* Search */}\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-tertiary)]\" />\r\n <input\r\n type=\"text\"\r\n value={search}\r\n onChange={e => setSearch(e.target.value)}\r\n placeholder={t('common.search', 'Search...')}\r\n className=\"pl-10 pr-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n {/* Show inactive toggle */}\r\n <label className=\"flex items-center gap-2 text-sm text-[var(--text-secondary)]\">\r\n <input\r\n type=\"checkbox\"\r\n checked={showInactive}\r\n onChange={e => setShowInactive(e.target.checked)}\r\n className=\"rounded border-[var(--border-color)]\"\r\n />\r\n {t('references.showInactive', 'Show inactive')}\r\n </label>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n {/* Merge button */}\r\n {selectedIds.size >= 2 && !isGlobalScope && (\r\n <button\r\n onClick={openMergeModal}\r\n className=\"flex items-center gap-2 px-4 py-2 bg-[var(--info-dot)] text-white rounded-[var(--radius-button)] hover:opacity-90 transition-opacity\"\r\n >\r\n <GitMerge className=\"w-4 h-4\" />\r\n {t('references.merge', 'Merge')} ({selectedIds.size})\r\n </button>\r\n )}\r\n\r\n {/* History button */}\r\n {!isGlobalScope && (\r\n <button\r\n onClick={openHistoryModal}\r\n className=\"flex items-center gap-2 px-4 py-2 border border-[var(--border-color)] text-[var(--text-primary)] rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <History className=\"w-4 h-4\" />\r\n {t('references.history', 'History')}\r\n </button>\r\n )}\r\n\r\n {/* Create button */}\r\n <button\r\n onClick={() => {\r\n setFormData({ code: '', name: '' });\r\n setShowCreateModal(true);\r\n }}\r\n disabled={isGlobalScope}\r\n title={isGlobalScope ? t('references.selectTenantToCreate', 'Select a tenant to create a reference') : undefined}\r\n className={`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] transition-colors ${\r\n isGlobalScope\r\n ? 'bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed'\r\n : 'bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]'\r\n }`}\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n {t('common.create', 'Create')}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <div className=\"card overflow-hidden\">\r\n {loading && (\r\n <div className=\"flex items-center justify-center py-12\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n )}\r\n {!loading && items.length === 0 && (\r\n <div className=\"text-center py-12 text-[var(--text-secondary)]\">\r\n {t('references.noItems', 'No items found')}\r\n </div>\r\n )}\r\n {!loading && items.length > 0 && (\r\n <>\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)] border-b border-[var(--border-color)]\">\r\n <tr>\r\n <th className=\"w-12 px-4 py-3\">\r\n {!isGlobalScope && (\r\n <input\r\n type=\"checkbox\"\r\n checked={selectedIds.size === items.length && items.length > 0}\r\n onChange={toggleSelectAll}\r\n className=\"rounded border-[var(--border-color)]\"\r\n />\r\n )}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.code', 'Code')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.name', 'Name')}\r\n </th>\r\n {isGlobalScope && (\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.tenant', 'Tenant')}\r\n </th>\r\n )}\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.shortName', 'Short Name')}\r\n </th>\r\n <th className=\"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.users', 'Users')}\r\n </th>\r\n <th className=\"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.status', 'Status')}\r\n </th>\r\n <th className=\"w-20 px-4 py-3\"></th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {items.map(item => (\r\n <tr\r\n key={item.id}\r\n className={`hover:bg-[var(--bg-hover)] transition-colors ${\r\n selectedIds.has(item.id) ? 'bg-[var(--info-bg)]' : ''\r\n } ${item.isMerged ? 'opacity-60' : ''}`}\r\n >\r\n <td className=\"px-4 py-3\">\r\n {!isGlobalScope && (\r\n <input\r\n type=\"checkbox\"\r\n checked={selectedIds.has(item.id)}\r\n onChange={() => toggleSelection(item.id)}\r\n disabled={item.isMerged}\r\n className=\"rounded border-[var(--border-color)]\"\r\n />\r\n )}\r\n </td>\r\n <td className=\"px-4 py-3 font-mono text-sm text-[var(--text-primary)]\">\r\n {item.code}\r\n </td>\r\n <td className=\"px-4 py-3 text-[var(--text-primary)]\">\r\n {item.name}\r\n </td>\r\n {isGlobalScope && (\r\n <td className=\"px-4 py-3\">\r\n {item.tenantName ? (\r\n <button\r\n onClick={() => item.tenantId && handleSwitchToTenant(item.tenantId)}\r\n className=\"inline-flex items-center gap-1.5 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)] hover:opacity-80 transition-opacity\"\r\n title={t('references.switchToTenant', 'Switch to this tenant')}\r\n >\r\n <Building2 className=\"w-3 h-3\" />\r\n {item.tenantName}\r\n </button>\r\n ) : (\r\n <span className=\"text-[var(--text-tertiary)]\">-</span>\r\n )}\r\n </td>\r\n )}\r\n <td className=\"px-4 py-3 text-[var(--text-secondary)]\">\r\n {item.shortName || '-'}\r\n </td>\r\n <td className=\"px-4 py-3 text-center\">\r\n <span className=\"inline-flex items-center gap-1 text-[var(--text-secondary)]\">\r\n <Users className=\"w-4 h-4\" />\r\n {item.userCount}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3 text-center\">\r\n {renderStatusBadge(item)}\r\n {item.isActive && !item.isMerged && (\r\n <span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--success-bg)] text-[var(--success-text)]\">\r\n <Check className=\"w-3 h-3\" />\r\n {t('references.active', 'Active')}\r\n </span>\r\n )}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"relative\">\r\n <button\r\n onClick={() => setMenuOpen(menuOpen === item.id ? null : item.id)}\r\n className=\"p-2 hover:bg-[var(--bg-secondary)] rounded-[var(--radius-button)] transition-colors\"\r\n disabled={item.isMerged || isGlobalScope}\r\n >\r\n <MoreHorizontal className=\"w-4 h-4\" />\r\n </button>\r\n\r\n {menuOpen === item.id && (\r\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-card)] shadow-lg z-10\">\r\n <button\r\n onClick={() => openEditModal(item)}\r\n className=\"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\r\n >\r\n <Edit2 className=\"w-4 h-4\" />\r\n {t('common.edit', 'Edit')}\r\n </button>\r\n <button\r\n onClick={() => {\r\n handleToggleActive(item);\r\n setMenuOpen(null);\r\n }}\r\n className=\"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\r\n >\r\n {item.isActive ? t('common.deactivate', 'Deactivate') : t('common.activate', 'Activate')}\r\n </button>\r\n {item.userCount === 0 && (\r\n <button\r\n onClick={() => {\r\n handleDelete(item.id);\r\n setMenuOpen(null);\r\n }}\r\n className=\"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--error-text)] hover:bg-[var(--error-bg)]\"\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n {t('common.delete', 'Delete')}\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n\r\n {/* Pagination Controls */}\r\n <div className=\"flex items-center justify-between px-6 py-4 border-t border-[var(--border-color)] bg-[var(--bg-secondary)]\">\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {t('references.showing', 'Showing')} {((page - 1) * pageSize) + 1} {t('references.to', 'to')} {Math.min(page * pageSize, totalCount)} {t('references.of', 'of')} {totalCount} {t('references.results', 'results')}\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => setPage(p => Math.max(1, p - 1))}\r\n disabled={page === 1}\r\n className=\"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\r\n >\r\n {t('common.previous', 'Previous')}\r\n </button>\r\n <div className=\"flex items-center gap-1\">\r\n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\r\n let pageNum;\r\n if (totalPages <= 5) {\r\n pageNum = i + 1;\r\n } else if (page <= 3) {\r\n pageNum = i + 1;\r\n } else if (page >= totalPages - 2) {\r\n pageNum = totalPages - 4 + i;\r\n } else {\r\n pageNum = page - 2 + i;\r\n }\r\n return (\r\n <button\r\n key={pageNum}\r\n onClick={() => setPage(pageNum)}\r\n className={`px-3 py-1.5 rounded-[var(--radius-button)] transition-colors ${\r\n page === pageNum\r\n ? 'bg-[var(--color-accent-600)] text-white'\r\n : 'border border-[var(--border-color)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n >\r\n {pageNum}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n <button\r\n onClick={() => setPage(p => Math.min(totalPages, p + 1))}\r\n disabled={page === totalPages}\r\n className=\"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\r\n >\r\n {t('common.next', 'Next')}\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Create Modal */}\r\n {showCreateModal && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-md p-6 m-4\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">\r\n {t('references.createTitle', 'Create Reference')}\r\n </h2>\r\n <button onClick={() => setShowCreateModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.code', 'Code')} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.code}\r\n onChange={e => setFormData({ ...formData, code: e.target.value })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.name', 'Name')} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.name}\r\n onChange={e => setFormData({ ...formData, name: e.target.value })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.shortName', 'Short Name')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.shortName || ''}\r\n onChange={e => setFormData({ ...formData, shortName: e.target.value || null })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.description', 'Description')}\r\n </label>\r\n <textarea\r\n value={formData.description || ''}\r\n onChange={e => setFormData({ ...formData, description: e.target.value || null })}\r\n rows={3}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-3 mt-6\">\r\n <button\r\n onClick={() => setShowCreateModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.cancel', 'Cancel')}\r\n </button>\r\n <button\r\n onClick={handleCreate}\r\n disabled={saving || !formData.code || !formData.name}\r\n className=\"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.create', 'Create')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Edit Modal */}\r\n {showEditModal && editingItem && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-md p-6 m-4\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">\r\n {t('references.editTitle', 'Edit Reference')}\r\n </h2>\r\n <button onClick={() => setShowEditModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.code', 'Code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.code}\r\n disabled\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.name', 'Name')} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.name}\r\n onChange={e => setFormData({ ...formData, name: e.target.value })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.shortName', 'Short Name')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.shortName || ''}\r\n onChange={e => setFormData({ ...formData, shortName: e.target.value || null })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.description', 'Description')}\r\n </label>\r\n <textarea\r\n value={formData.description || ''}\r\n onChange={e => setFormData({ ...formData, description: e.target.value || null })}\r\n rows={3}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-3 mt-6\">\r\n <button\r\n onClick={() => setShowEditModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.cancel', 'Cancel')}\r\n </button>\r\n <button\r\n onClick={handleUpdate}\r\n disabled={saving || !formData.name}\r\n className=\"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save', 'Save')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Merge Modal */}\r\n {showMergeModal && mergePreview && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-lg p-6 m-4\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2\">\r\n <GitMerge className=\"w-5 h-5 text-[var(--info-dot)]\" />\r\n {t('references.mergeTitle', 'Merge References')}\r\n </h2>\r\n <button onClick={() => setShowMergeModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <p className=\"text-sm text-[var(--text-secondary)] mb-4\">\r\n {t('references.mergeDescription', 'Select the target reference. All other selected references will be merged into it and their users will be reassigned.')}\r\n </p>\r\n\r\n <div className=\"space-y-2 mb-4\">\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.selectTarget', 'Select target reference')}\r\n </label>\r\n {mergePreview.sources.map(source => (\r\n <label\r\n key={source.id}\r\n className={`flex items-center gap-3 p-3 border rounded-[var(--radius-card)] cursor-pointer transition-colors ${\r\n mergeTargetId === source.id\r\n ? 'border-[var(--info-dot)] bg-[var(--info-bg)]'\r\n : 'border-[var(--border-color)] hover:border-[var(--color-accent-500)]'\r\n }`}\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"mergeTarget\"\r\n value={source.id}\r\n checked={mergeTargetId === source.id}\r\n onChange={() => setMergeTargetId(source.id)}\r\n className=\"text-[var(--info-dot)]\"\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-medium text-[var(--text-primary)]\">{source.name}</div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {source.code} {source.shortName && `(${source.shortName})`}\r\n </div>\r\n </div>\r\n <span className=\"text-sm text-[var(--text-secondary)]\">\r\n {source.userCount} {t('references.users', 'users')}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n\r\n <div className=\"mb-4\">\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.mergeReason', 'Reason (optional)')}\r\n </label>\r\n <textarea\r\n value={mergeReason}\r\n onChange={e => setMergeReason(e.target.value)}\r\n rows={2}\r\n placeholder={t('references.mergeReasonPlaceholder', 'Why are you merging these references?')}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div className=\"p-3 bg-[var(--warning-bg)] border border-[var(--warning-border)] rounded-[var(--radius-card)] mb-4\">\r\n <p className=\"text-sm text-[var(--warning-text)]\">\r\n <strong>{mergePreview.totalUsersAffected}</strong> {t('references.usersWillBeReassigned', 'users will be reassigned')}\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-3\">\r\n <button\r\n onClick={() => setShowMergeModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.cancel', 'Cancel')}\r\n </button>\r\n <button\r\n onClick={handleMerge}\r\n disabled={saving || !mergeTargetId}\r\n className=\"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--info-dot)] text-white hover:opacity-90 transition-opacity disabled:opacity-50\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n <GitMerge className=\"w-4 h-4\" />\r\n {t('references.merge', 'Merge')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* History Modal */}\r\n {showHistoryModal && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-2xl p-6 m-4 max-h-[80vh] overflow-hidden flex flex-col\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2\">\r\n <History className=\"w-5 h-5\" />\r\n {t('references.historyTitle', 'Merge History')}\r\n </h2>\r\n <button onClick={() => setShowHistoryModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"overflow-y-auto flex-1\">\r\n {mergeHistory.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {t('references.noHistory', 'No merge history found')}\r\n </div>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {mergeHistory.map(entry => (\r\n <div\r\n key={entry.id}\r\n className=\"p-4 border border-[var(--border-color)] rounded-[var(--radius-card)]\"\r\n >\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <GitMerge className=\"w-4 h-4 text-[var(--info-dot)]\" />\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {entry.sourceReferenceName}\r\n </span>\r\n <span className=\"text-[var(--text-secondary)]\">→</span>\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {entry.targetReferenceName}\r\n </span>\r\n </div>\r\n <div className=\"text-sm text-[var(--text-secondary)] space-y-1\">\r\n <div>{entry.affectedUserCount} users reassigned</div>\r\n <div>By {entry.mergedByUserName}</div>\r\n <div>{new Date(entry.mergedAt).toLocaleString()}</div>\r\n {entry.mergeReason && (\r\n <div className=\"italic\">\"{entry.mergeReason}\"</div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex justify-end mt-4 pt-4 border-t border-[var(--border-color)]\">\r\n <button\r\n onClick={() => setShowHistoryModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.close', 'Close')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Click outside handler for menu */}\r\n {menuOpen && (\r\n <button\r\n type=\"button\"\r\n className=\"fixed inset-0 z-0\"\r\n onClick={() => setMenuOpen(null)}\r\n aria-label=\"Close menu\"\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["withTenantContext","tenantSlug","url","config","apiClient","res","data","ReferenceType","BASE_URL","_createReferencesApi","apiContext","api","buildUrl","path","tenantId","params","urlParams","key","value","queryString","search","isActive","source","page","pageSize","id","request","referenceType","from","to","createReferencesApi","ReferencesManagementPage","t","useTranslation","currentTenant","userTenants","switchTenant","useTenant","adminTenantsList","useAdminTenants","selectedScope","setSelectedScope","useState","isGlobalScope","selectedTenantId","useMemo","activeTab","setActiveTab","items","setItems","loading","setLoading","setSearch","showInactive","setShowInactive","selectedIds","setSelectedIds","setPage","totalCount","setTotalCount","totalPages","setTotalPages","showCreateModal","setShowCreateModal","showEditModal","setShowEditModal","showMergeModal","setShowMergeModal","showHistoryModal","setShowHistoryModal","editingItem","setEditingItem","mergePreview","setMergePreview","mergeHistory","setMergeHistory","menuOpen","setMenuOpen","formData","setFormData","mergeTargetId","setMergeTargetId","mergeReason","setMergeReason","saving","setSaving","error","setError","tabs","Users","Building2","Briefcase","MapPin","currentTab","tab","loadItems","useCallback","apiInstance","isActiveFilter","paginatedResult","err","useEffect","toggleSelection","newSelected","toggleSelectAll","item","handleSwitchToTenant","itemTenantId","tenant","handleCreate","message","handleUpdate","updateData","handleDelete","handleToggleActive","openMergeModal","preview","handleMerge","sourceIds","openHistoryModal","history","openEditModal","renderStatusBadge","jsxs","jsx","GitMerge","Breadcrumb","TenantScopeSelector","ut","Globe","AlertCircle","X","Icon","Search","e","History","Plus","Loader2","Fragment","Check","MoreHorizontal","Edit2","Trash2","p","_","i","pageNum","entry"],"mappings":"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"}
1
+ {"version":3,"file":"ReferencesManagementPage-B0Cq9BHS.js","sources":["../../src/services/api/referencesApi.ts","../../src/pages/platform/administration/users/ReferencesManagementPage.tsx"],"sourcesContent":["import { api, apiClient } from './apiClient';\r\nimport type { PaginatedResult } from '../../types/pagination';\r\n\r\n/**\r\n * Creates API methods with a specific tenant context.\r\n */\r\nconst withTenantContext = (tenantSlug?: string) => ({\r\n get: <T>(url: string, config?: Parameters<typeof apiClient.get>[1]) =>\r\n apiClient.get<T>(url, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n post: <T>(url: string, data?: unknown, config?: Parameters<typeof apiClient.post>[2]) =>\r\n apiClient.post<T>(url, data, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n put: <T>(url: string, data?: unknown, config?: Parameters<typeof apiClient.put>[2]) =>\r\n apiClient.put<T>(url, data, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n patch: <T>(url: string, data?: unknown, config?: Parameters<typeof apiClient.patch>[2]) =>\r\n apiClient.patch<T>(url, data, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n\r\n delete: <T>(url: string, config?: Parameters<typeof apiClient.delete>[1]) =>\r\n apiClient.delete<T>(url, {\r\n ...config,\r\n headers: tenantSlug ? { ...config?.headers, 'X-Tenant-Slug': tenantSlug } : config?.headers,\r\n }).then(res => res.data),\r\n});\r\n\r\n// Reference types\r\nexport const ReferenceType = {\r\n Company: 0,\r\n Department: 1,\r\n JobTitle: 2,\r\n Office: 3,\r\n} as const;\r\nexport type ReferenceType = typeof ReferenceType[keyof typeof ReferenceType];\r\n\r\n// Types\r\nexport interface ReferenceListDto {\r\n id: string;\r\n code: string;\r\n name: string;\r\n shortName: string | null;\r\n description: string | null;\r\n isActive: boolean;\r\n isMerged: boolean;\r\n mergedIntoId: string | null;\r\n isFromEntra: boolean;\r\n entraValue: string | null;\r\n userCount: number;\r\n createdAt: string;\r\n tenantId: string | null;\r\n tenantName: string | null;\r\n}\r\n\r\nexport interface OfficeListDto extends ReferenceListDto {\r\n address: string | null;\r\n city: string | null;\r\n country: string | null;\r\n}\r\n\r\nexport interface CreateReferenceRequest {\r\n code: string;\r\n name: string;\r\n shortName?: string | null;\r\n description?: string | null;\r\n}\r\n\r\nexport interface CreateOfficeRequest extends CreateReferenceRequest {\r\n address?: string | null;\r\n city?: string | null;\r\n country?: string | null;\r\n}\r\n\r\nexport interface UpdateReferenceRequest {\r\n name: string;\r\n shortName?: string | null;\r\n description?: string | null;\r\n}\r\n\r\nexport interface UpdateOfficeRequest extends UpdateReferenceRequest {\r\n address?: string | null;\r\n city?: string | null;\r\n country?: string | null;\r\n}\r\n\r\n// Merge Types\r\nexport interface MergeReferencesRequest {\r\n tenantId?: string | null;\r\n referenceType: ReferenceType;\r\n targetId: string;\r\n sourceIds: string[];\r\n reason?: string | null;\r\n}\r\n\r\nexport interface MergePreviewRequest {\r\n tenantId?: string | null;\r\n referenceType: ReferenceType;\r\n sourceIds: string[];\r\n}\r\n\r\nexport interface MergeResultDto {\r\n targetId: string;\r\n targetName: string;\r\n totalSourcesMerged: number;\r\n totalUsersReassigned: number;\r\n sourceResults: MergeSourceResultDto[];\r\n}\r\n\r\nexport interface MergeSourceResultDto {\r\n sourceId: string;\r\n sourceName: string;\r\n sourceCode: string;\r\n usersReassigned: number;\r\n}\r\n\r\nexport interface MergePreviewDto {\r\n sources: MergeSourcePreviewDto[];\r\n totalUsersAffected: number;\r\n}\r\n\r\nexport interface MergeSourcePreviewDto {\r\n id: string;\r\n code: string;\r\n name: string;\r\n shortName: string | null;\r\n userCount: number;\r\n}\r\n\r\nexport interface MergeHistoryDto {\r\n id: string;\r\n tenantId: string | null;\r\n referenceType: ReferenceType;\r\n targetReferenceId: string;\r\n targetReferenceName: string;\r\n sourceReferenceId: string;\r\n sourceReferenceName: string;\r\n sourceReferenceCode: string;\r\n sourceReferenceShortName: string | null;\r\n affectedUserCount: number;\r\n mergedByUserId: string;\r\n mergedByUserName: string;\r\n mergeReason: string | null;\r\n mergedAt: string;\r\n}\r\n\r\n\r\nconst BASE_URL = '/api/administration/users/references';\r\n\r\n/**\r\n * Factory function to create references API with explicit tenant context.\r\n * @param tenantSlug - Optional tenant slug to use for all requests\r\n */\r\nconst _createReferencesApi = (tenantSlug?: string) => {\r\n const apiContext = tenantSlug ? withTenantContext(tenantSlug) : api;\r\n\r\n const buildUrl = (path: string, tenantId?: string | null, params?: Record<string, string | boolean | number | undefined>) => {\r\n const urlParams = new URLSearchParams();\r\n if (tenantId) urlParams.append('tenantId', tenantId);\r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined) urlParams.append(key, String(value));\r\n });\r\n }\r\n const queryString = urlParams.toString();\r\n return queryString ? `${BASE_URL}/${path}?${queryString}` : `${BASE_URL}/${path}`;\r\n };\r\n\r\n return {\r\n // === COMPANIES ===\r\n companies: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<ReferenceListDto>> => {\r\n const url = buildUrl('companies', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<ReferenceListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateReferenceRequest): Promise<ReferenceListDto> => {\r\n const url = buildUrl('companies', tenantId);\r\n return apiContext.post<ReferenceListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateReferenceRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/companies/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/companies/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/companies/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/companies/${id}`);\r\n },\r\n },\r\n\r\n // === DEPARTMENTS ===\r\n departments: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<ReferenceListDto>> => {\r\n const url = buildUrl('departments', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<ReferenceListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateReferenceRequest): Promise<ReferenceListDto> => {\r\n const url = buildUrl('departments', tenantId);\r\n return apiContext.post<ReferenceListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateReferenceRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/departments/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/departments/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/departments/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/departments/${id}`);\r\n },\r\n },\r\n\r\n // === JOB TITLES ===\r\n jobTitles: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<ReferenceListDto>> => {\r\n const url = buildUrl('job-titles', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<ReferenceListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateReferenceRequest): Promise<ReferenceListDto> => {\r\n const url = buildUrl('job-titles', tenantId);\r\n return apiContext.post<ReferenceListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateReferenceRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/job-titles/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/job-titles/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/job-titles/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/job-titles/${id}`);\r\n },\r\n },\r\n\r\n // === OFFICES ===\r\n offices: {\r\n getAll: async (tenantId?: string | null, search?: string, isActive?: boolean, source?: 'entra' | 'manual', page: number = 1, pageSize: number = 20): Promise<PaginatedResult<OfficeListDto>> => {\r\n const url = buildUrl('offices', tenantId, { search, isActive, source, page, pageSize });\r\n return apiContext.get<PaginatedResult<OfficeListDto>>(url);\r\n },\r\n\r\n create: async (tenantId: string | null, data: CreateOfficeRequest): Promise<OfficeListDto> => {\r\n const url = buildUrl('offices', tenantId);\r\n return apiContext.post<OfficeListDto>(url, data);\r\n },\r\n\r\n update: async (id: string, data: UpdateOfficeRequest): Promise<void> => {\r\n await apiContext.put(`${BASE_URL}/offices/${id}`, data);\r\n },\r\n\r\n activate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/offices/${id}/activate`);\r\n },\r\n\r\n deactivate: async (id: string): Promise<void> => {\r\n await apiContext.patch(`${BASE_URL}/offices/${id}/deactivate`);\r\n },\r\n\r\n delete: async (id: string): Promise<void> => {\r\n await apiContext.delete(`${BASE_URL}/offices/${id}`);\r\n },\r\n },\r\n\r\n // === MERGE OPERATIONS ===\r\n merge: {\r\n execute: async (request: MergeReferencesRequest): Promise<MergeResultDto> => {\r\n return apiContext.post<MergeResultDto>(`${BASE_URL}/merge`, request);\r\n },\r\n\r\n preview: async (request: MergePreviewRequest): Promise<MergePreviewDto> => {\r\n return apiContext.post<MergePreviewDto>(`${BASE_URL}/merge/preview`, request);\r\n },\r\n\r\n getHistory: async (\r\n tenantId?: string | null,\r\n referenceType?: ReferenceType,\r\n from?: string,\r\n to?: string\r\n ): Promise<MergeHistoryDto[]> => {\r\n const params = new URLSearchParams();\r\n if (tenantId) params.append('tenantId', tenantId);\r\n if (referenceType !== undefined) params.append('referenceType', String(referenceType));\r\n if (from) params.append('from', from);\r\n if (to) params.append('to', to);\r\n\r\n const queryString = params.toString();\r\n const url = queryString ? `${BASE_URL}/merge/history?${queryString}` : `${BASE_URL}/merge/history`;\r\n return apiContext.get<MergeHistoryDto[]>(url);\r\n },\r\n },\r\n };\r\n};\r\nexport type ReferencesApi = ReturnType<typeof _createReferencesApi>;\r\nexport const createReferencesApi: (tenantSlug?: string) => ReferencesApi = _createReferencesApi;\r\n\r\n// Default export uses localStorage tenant slug (backward compatible)\r\nexport const referencesApi = createReferencesApi();\r\n","import { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport type { ReactElement } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Building2, Briefcase, MapPin, Users, Search, Plus, Edit2, Trash2, GitMerge, MoreHorizontal, X, Loader2, History, Check, AlertCircle, Globe } from 'lucide-react';\r\nimport { Breadcrumb } from '@/components/ui/Breadcrumb';\r\nimport { useTenant } from '@/contexts/TenantContext';\r\nimport { useAdminTenants } from '@/hooks/useAdminTenants';\r\nimport { TenantScopeSelector, type ScopeValue } from '@/components/ui/TenantScopeSelector';\r\nimport {\r\n createReferencesApi,\r\n ReferenceType,\r\n} from '@/services/api/referencesApi';\r\nimport type {\r\n ReferenceListDto,\r\n MergePreviewDto,\r\n MergeHistoryDto,\r\n CreateReferenceRequest,\r\n UpdateReferenceRequest,\r\n} from '@/services/api/referencesApi';\r\n\r\ntype TabType = 'companies' | 'departments' | 'jobTitles' | 'offices';\r\n\r\ninterface Tab {\r\n id: TabType;\r\n label: string;\r\n icon: React.ElementType;\r\n referenceType: ReferenceType;\r\n}\r\n\r\nexport function ReferencesManagementPage(): ReactElement | null {\r\n const { t } = useTranslation('admin');\r\n const { currentTenant, userTenants, switchTenant } = useTenant();\r\n const { tenants: adminTenantsList } = useAdminTenants();\r\n\r\n // Tenant scope selector state\r\n const [selectedScope, setSelectedScope] = useState<ScopeValue>(\r\n currentTenant ? { tenantId: currentTenant.id, tenantSlug: currentTenant.slug, tenantUserId: '', tenantName: currentTenant.name } : 'global'\r\n );\r\n const isGlobalScope = selectedScope === 'global';\r\n const selectedTenantId = isGlobalScope ? null : selectedScope.tenantId;\r\n const tenantSlug = isGlobalScope ? undefined : selectedScope.tenantSlug;\r\n const api = useMemo(() => createReferencesApi(tenantSlug), [tenantSlug]);\r\n\r\n // State\r\n const [activeTab, setActiveTab] = useState<TabType>('departments');\r\n const [items, setItems] = useState<ReferenceListDto[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [search, setSearch] = useState('');\r\n const [showInactive, setShowInactive] = useState(false);\r\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\r\n\r\n // Pagination state\r\n const [page, setPage] = useState(1);\r\n const [pageSize] = useState(20);\r\n const [totalCount, setTotalCount] = useState(0);\r\n const [totalPages, setTotalPages] = useState(0);\r\n\r\n // Modal states\r\n const [showCreateModal, setShowCreateModal] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showMergeModal, setShowMergeModal] = useState(false);\r\n const [showHistoryModal, setShowHistoryModal] = useState(false);\r\n const [editingItem, setEditingItem] = useState<ReferenceListDto | null>(null);\r\n const [mergePreview, setMergePreview] = useState<MergePreviewDto | null>(null);\r\n const [mergeHistory, setMergeHistory] = useState<MergeHistoryDto[]>([]);\r\n const [menuOpen, setMenuOpen] = useState<string | null>(null);\r\n\r\n // Form states\r\n const [formData, setFormData] = useState<CreateReferenceRequest>({ code: '', name: '' });\r\n const [mergeTargetId, setMergeTargetId] = useState<string | null>(null);\r\n const [mergeReason, setMergeReason] = useState('');\r\n const [saving, setSaving] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const tabs: Tab[] = [\r\n { id: 'departments', label: t('references.tabs.departments', 'Departments'), icon: Users, referenceType: ReferenceType.Department },\r\n { id: 'companies', label: t('references.tabs.companies', 'Companies'), icon: Building2, referenceType: ReferenceType.Company },\r\n { id: 'jobTitles', label: t('references.tabs.jobTitles', 'Job Titles'), icon: Briefcase, referenceType: ReferenceType.JobTitle },\r\n { id: 'offices', label: t('references.tabs.offices', 'Offices'), icon: MapPin, referenceType: ReferenceType.Office },\r\n ];\r\n\r\n const currentTab = tabs.find(tab => tab.id === activeTab)!;\r\n const tenantId = selectedTenantId;\r\n\r\n const loadItems = useCallback(async () => {\r\n try {\r\n setLoading(true);\r\n // Create API instance inside callback to avoid dependency loop\r\n const apiInstance = createReferencesApi(tenantSlug ?? undefined);\r\n\r\n const isActiveFilter = showInactive ? undefined : true;\r\n\r\n let paginatedResult;\r\n\r\n switch (activeTab) {\r\n case 'companies':\r\n paginatedResult = await apiInstance.companies.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n case 'departments':\r\n paginatedResult = await apiInstance.departments.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n case 'jobTitles':\r\n paginatedResult = await apiInstance.jobTitles.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n case 'offices':\r\n paginatedResult = await apiInstance.offices.getAll(tenantId, search || undefined, isActiveFilter, undefined, page, pageSize);\r\n break;\r\n default:\r\n paginatedResult = { items: [], totalCount: 0, page: 1, pageSize: 20, totalPages: 0, hasPreviousPage: false, hasNextPage: false };\r\n }\r\n\r\n setItems(paginatedResult.items);\r\n setTotalCount(paginatedResult.totalCount);\r\n setTotalPages(paginatedResult.totalPages);\r\n setSelectedIds(new Set());\r\n } catch (err) {\r\n console.error('Failed to load references:', err);\r\n setError('Failed to load references');\r\n } finally {\r\n setLoading(false);\r\n }\r\n }, [tenantSlug, activeTab, tenantId, search, showInactive, page, pageSize]);\r\n\r\n useEffect(() => {\r\n loadItems();\r\n }, [loadItems]);\r\n\r\n // Reset to page 1 when filters change\r\n useEffect(() => {\r\n setPage(1);\r\n }, [activeTab, search, showInactive, selectedScope]);\r\n\r\n // Selection handlers\r\n const toggleSelection = (id: string) => {\r\n const newSelected = new Set(selectedIds);\r\n if (newSelected.has(id)) {\r\n newSelected.delete(id);\r\n } else {\r\n newSelected.add(id);\r\n }\r\n setSelectedIds(newSelected);\r\n };\r\n\r\n const toggleSelectAll = () => {\r\n if (selectedIds.size === items.length) {\r\n setSelectedIds(new Set());\r\n } else {\r\n setSelectedIds(new Set(items.map(item => item.id)));\r\n }\r\n };\r\n\r\n // Switch to a specific tenant from global view\r\n const handleSwitchToTenant = async (itemTenantId: string) => {\r\n try {\r\n await switchTenant(itemTenantId);\r\n const tenant = userTenants.find(t => t.id === itemTenantId);\r\n if (tenant) {\r\n setSelectedScope({ tenantId: tenant.id, tenantSlug: tenant.slug, tenantUserId: '', tenantName: tenant.name });\r\n }\r\n } catch (err) {\r\n console.error('Failed to switch tenant:', err);\r\n }\r\n };\r\n\r\n // CRUD handlers\r\n const handleCreate = async () => {\r\n if (!tenantId) return;\r\n\r\n try {\r\n setSaving(true);\r\n setError(null);\r\n\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.create(tenantId, formData);\r\n break;\r\n case 'departments':\r\n await api.departments.create(tenantId, formData);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.create(tenantId, formData);\r\n break;\r\n case 'offices':\r\n await api.offices.create(tenantId, formData);\r\n break;\r\n }\r\n\r\n setShowCreateModal(false);\r\n setFormData({ code: '', name: '' });\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to create';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleUpdate = async () => {\r\n if (!editingItem) return;\r\n\r\n try {\r\n setSaving(true);\r\n setError(null);\r\n\r\n const updateData: UpdateReferenceRequest = {\r\n name: formData.name,\r\n shortName: formData.shortName,\r\n description: formData.description,\r\n };\r\n\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.update(editingItem.id, updateData);\r\n break;\r\n case 'departments':\r\n await api.departments.update(editingItem.id, updateData);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.update(editingItem.id, updateData);\r\n break;\r\n case 'offices':\r\n await api.offices.update(editingItem.id, updateData);\r\n break;\r\n }\r\n\r\n setShowEditModal(false);\r\n setEditingItem(null);\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to update';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const handleDelete = async (id: string) => {\r\n if (!confirm(t('references.confirmDelete', 'Are you sure you want to delete this reference?'))) return;\r\n\r\n try {\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.delete(id);\r\n break;\r\n case 'departments':\r\n await api.departments.delete(id);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.delete(id);\r\n break;\r\n case 'offices':\r\n await api.offices.delete(id);\r\n break;\r\n }\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to delete';\r\n setError(message);\r\n }\r\n };\r\n\r\n const handleToggleActive = async (item: ReferenceListDto) => {\r\n try {\r\n if (item.isActive) {\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.deactivate(item.id);\r\n break;\r\n case 'departments':\r\n await api.departments.deactivate(item.id);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.deactivate(item.id);\r\n break;\r\n case 'offices':\r\n await api.offices.deactivate(item.id);\r\n break;\r\n }\r\n } else {\r\n switch (activeTab) {\r\n case 'companies':\r\n await api.companies.activate(item.id);\r\n break;\r\n case 'departments':\r\n await api.departments.activate(item.id);\r\n break;\r\n case 'jobTitles':\r\n await api.jobTitles.activate(item.id);\r\n break;\r\n case 'offices':\r\n await api.offices.activate(item.id);\r\n break;\r\n }\r\n }\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to toggle status';\r\n setError(message);\r\n }\r\n };\r\n\r\n // Merge handlers\r\n const openMergeModal = async () => {\r\n if (selectedIds.size < 2) return;\r\n\r\n try {\r\n const preview = await api.merge.preview({\r\n tenantId,\r\n referenceType: currentTab.referenceType,\r\n sourceIds: Array.from(selectedIds),\r\n });\r\n\r\n setMergePreview(preview);\r\n setMergeTargetId(null);\r\n setMergeReason('');\r\n setShowMergeModal(true);\r\n } catch (err) {\r\n console.error('Failed to get merge preview:', err);\r\n setError('Failed to preview merge');\r\n }\r\n };\r\n\r\n const handleMerge = async () => {\r\n if (!mergeTargetId || !mergePreview) return;\r\n\r\n const sourceIds = Array.from(selectedIds).filter(id => id !== mergeTargetId);\r\n\r\n try {\r\n setSaving(true);\r\n setError(null);\r\n\r\n await api.merge.execute({\r\n tenantId,\r\n referenceType: currentTab.referenceType,\r\n targetId: mergeTargetId,\r\n sourceIds,\r\n reason: mergeReason || undefined,\r\n });\r\n\r\n setShowMergeModal(false);\r\n setSelectedIds(new Set());\r\n setMergePreview(null);\r\n loadItems();\r\n } catch (err: unknown) {\r\n const message = err instanceof Error ? err.message : 'Failed to merge';\r\n setError(message);\r\n } finally {\r\n setSaving(false);\r\n }\r\n };\r\n\r\n const openHistoryModal = async () => {\r\n try {\r\n const history = await api.merge.getHistory(tenantId, currentTab.referenceType);\r\n setMergeHistory(history);\r\n setShowHistoryModal(true);\r\n } catch (err) {\r\n console.error('Failed to load merge history:', err);\r\n setError('Failed to load merge history');\r\n }\r\n };\r\n\r\n // Edit modal opener\r\n const openEditModal = (item: ReferenceListDto) => {\r\n setEditingItem(item);\r\n setFormData({\r\n code: item.code,\r\n name: item.name,\r\n shortName: item.shortName,\r\n description: item.description,\r\n });\r\n setShowEditModal(true);\r\n setMenuOpen(null);\r\n };\r\n\r\n // Render helpers\r\n const renderStatusBadge = (item: ReferenceListDto) => {\r\n if (item.isMerged) {\r\n return (\r\n <span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)]\">\r\n <GitMerge className=\"w-3 h-3\" />\r\n {t('references.merged', 'Merged')}\r\n </span>\r\n );\r\n }\r\n if (!item.isActive) {\r\n return (\r\n <span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--bg-secondary)] text-[var(--text-secondary)]\">\r\n {t('references.inactive', 'Inactive')}\r\n </span>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n <div className=\"p-6\">\r\n <div className=\"mb-6\">\r\n <Breadcrumb\r\n items={[\r\n { label: t('admin.title', 'Administration'), href: '/administration' },\r\n { label: t('users.title', 'Users'), href: '/administration/users' },\r\n { label: t('references.title', 'References') },\r\n ]}\r\n />\r\n </div>\r\n\r\n {/* Header */}\r\n <div className=\"mb-6\">\r\n <h1 className=\"text-2xl font-bold text-[var(--text-primary)]\">\r\n {t('references.title', 'Reference Data Management')}\r\n </h1>\r\n <p className=\"text-[var(--text-secondary)] mt-1\">\r\n {t('references.description', 'Manage companies, departments, job titles, and offices for your organization')}\r\n </p>\r\n\r\n {/* Tenant Scope Selector */}\r\n <div className=\"mt-4\">\r\n <TenantScopeSelector\r\n value={selectedScope}\r\n onChange={setSelectedScope}\r\n adminTenants={adminTenantsList.map(ut => ({\r\n tenantId: ut.id,\r\n tenantSlug: ut.slug,\r\n tenantName: ut.name,\r\n tenantType: ut.type\r\n }))}\r\n />\r\n {isGlobalScope && (\r\n <p className=\"mt-2 text-sm text-[var(--text-secondary)] flex items-center gap-1.5\">\r\n <Globe className=\"w-4 h-4\" />\r\n {t('references.globalModeInfo', 'Showing references from all tenants. Select a tenant to manage its data.')}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Error message */}\r\n {error && (\r\n <div className=\"mb-4 p-4 bg-[var(--error-bg)] border border-[var(--error-border)] rounded-[var(--radius-card)]\">\r\n <div className=\"flex items-center\">\r\n <AlertCircle className=\"w-5 h-5 text-[var(--error-text)]\" />\r\n <span className=\"ml-2 text-[var(--error-text)]\">{error}</span>\r\n <button onClick={() => setError(null)} className=\"ml-auto text-[var(--error-text)]\">\r\n <X className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n <button\r\n onClick={() => loadItems()}\r\n className=\"mt-2 text-sm text-[var(--error-text)] hover:opacity-80 underline\"\r\n >\r\n {t('common.retry', 'Retry')}\r\n </button>\r\n </div>\r\n )}\r\n\r\n {/* Tabs */}\r\n <div className=\"border-b border-[var(--border-color)] mb-6\">\r\n <nav className=\"flex gap-4 -mb-px\">\r\n {tabs.map(tab => {\r\n const Icon = tab.icon;\r\n const isActive = activeTab === tab.id;\r\n return (\r\n <button\r\n key={tab.id}\r\n onClick={() => {\r\n setActiveTab(tab.id);\r\n setSelectedIds(new Set());\r\n }}\r\n className={`flex items-center gap-2 px-4 py-3 border-b-2 font-medium text-sm transition-colors ${\r\n isActive\r\n ? 'border-[var(--color-accent-500)] text-[var(--color-accent-600)]'\r\n : 'border-transparent text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:border-[var(--border-color)]'\r\n }`}\r\n >\r\n <Icon className=\"w-4 h-4\" />\r\n {tab.label}\r\n </button>\r\n );\r\n })}\r\n </nav>\r\n </div>\r\n\r\n {/* Actions bar */}\r\n <div className=\"flex items-center justify-between gap-4 mb-4\">\r\n <div className=\"flex items-center gap-4\">\r\n {/* Search */}\r\n <div className=\"relative\">\r\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[var(--text-tertiary)]\" />\r\n <input\r\n type=\"text\"\r\n value={search}\r\n onChange={e => setSearch(e.target.value)}\r\n placeholder={t('common.search', 'Search...')}\r\n className=\"pl-10 pr-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n {/* Show inactive toggle */}\r\n <label className=\"flex items-center gap-2 text-sm text-[var(--text-secondary)]\">\r\n <input\r\n type=\"checkbox\"\r\n checked={showInactive}\r\n onChange={e => setShowInactive(e.target.checked)}\r\n className=\"rounded border-[var(--border-color)]\"\r\n />\r\n {t('references.showInactive', 'Show inactive')}\r\n </label>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n {/* Merge button */}\r\n {selectedIds.size >= 2 && !isGlobalScope && (\r\n <button\r\n onClick={openMergeModal}\r\n className=\"flex items-center gap-2 px-4 py-2 bg-[var(--info-dot)] text-white rounded-[var(--radius-button)] hover:opacity-90 transition-opacity\"\r\n >\r\n <GitMerge className=\"w-4 h-4\" />\r\n {t('references.merge', 'Merge')} ({selectedIds.size})\r\n </button>\r\n )}\r\n\r\n {/* History button */}\r\n {!isGlobalScope && (\r\n <button\r\n onClick={openHistoryModal}\r\n className=\"flex items-center gap-2 px-4 py-2 border border-[var(--border-color)] text-[var(--text-primary)] rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n <History className=\"w-4 h-4\" />\r\n {t('references.history', 'History')}\r\n </button>\r\n )}\r\n\r\n {/* Create button */}\r\n <button\r\n onClick={() => {\r\n setFormData({ code: '', name: '' });\r\n setShowCreateModal(true);\r\n }}\r\n disabled={isGlobalScope}\r\n title={isGlobalScope ? t('references.selectTenantToCreate', 'Select a tenant to create a reference') : undefined}\r\n className={`flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] transition-colors ${\r\n isGlobalScope\r\n ? 'bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed'\r\n : 'bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]'\r\n }`}\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n {t('common.create', 'Create')}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Table */}\r\n <div className=\"card overflow-hidden\">\r\n {loading && (\r\n <div className=\"flex items-center justify-center py-12\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[var(--color-accent-500)]\" />\r\n </div>\r\n )}\r\n {!loading && items.length === 0 && (\r\n <div className=\"text-center py-12 text-[var(--text-secondary)]\">\r\n {t('references.noItems', 'No items found')}\r\n </div>\r\n )}\r\n {!loading && items.length > 0 && (\r\n <>\r\n <table className=\"w-full\">\r\n <thead className=\"bg-[var(--bg-secondary)] border-b border-[var(--border-color)]\">\r\n <tr>\r\n <th className=\"w-12 px-4 py-3\">\r\n {!isGlobalScope && (\r\n <input\r\n type=\"checkbox\"\r\n checked={selectedIds.size === items.length && items.length > 0}\r\n onChange={toggleSelectAll}\r\n className=\"rounded border-[var(--border-color)]\"\r\n />\r\n )}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.code', 'Code')}\r\n </th>\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.name', 'Name')}\r\n </th>\r\n {isGlobalScope && (\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.tenant', 'Tenant')}\r\n </th>\r\n )}\r\n <th className=\"px-4 py-3 text-left text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.shortName', 'Short Name')}\r\n </th>\r\n <th className=\"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.users', 'Users')}\r\n </th>\r\n <th className=\"px-4 py-3 text-center text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.status', 'Status')}\r\n </th>\r\n <th className=\"w-20 px-4 py-3\"></th>\r\n </tr>\r\n </thead>\r\n <tbody className=\"divide-y divide-[var(--border-color)]\">\r\n {items.map(item => (\r\n <tr\r\n key={item.id}\r\n className={`hover:bg-[var(--bg-hover)] transition-colors ${\r\n selectedIds.has(item.id) ? 'bg-[var(--info-bg)]' : ''\r\n } ${item.isMerged ? 'opacity-60' : ''}`}\r\n >\r\n <td className=\"px-4 py-3\">\r\n {!isGlobalScope && (\r\n <input\r\n type=\"checkbox\"\r\n checked={selectedIds.has(item.id)}\r\n onChange={() => toggleSelection(item.id)}\r\n disabled={item.isMerged}\r\n className=\"rounded border-[var(--border-color)]\"\r\n />\r\n )}\r\n </td>\r\n <td className=\"px-4 py-3 font-mono text-sm text-[var(--text-primary)]\">\r\n {item.code}\r\n </td>\r\n <td className=\"px-4 py-3 text-[var(--text-primary)]\">\r\n {item.name}\r\n </td>\r\n {isGlobalScope && (\r\n <td className=\"px-4 py-3\">\r\n {item.tenantName ? (\r\n <button\r\n onClick={() => item.tenantId && handleSwitchToTenant(item.tenantId)}\r\n className=\"inline-flex items-center gap-1.5 px-2 py-1 text-xs font-medium rounded-full bg-[var(--info-bg)] text-[var(--info-text)] hover:opacity-80 transition-opacity\"\r\n title={t('references.switchToTenant', 'Switch to this tenant')}\r\n >\r\n <Building2 className=\"w-3 h-3\" />\r\n {item.tenantName}\r\n </button>\r\n ) : (\r\n <span className=\"text-[var(--text-tertiary)]\">-</span>\r\n )}\r\n </td>\r\n )}\r\n <td className=\"px-4 py-3 text-[var(--text-secondary)]\">\r\n {item.shortName || '-'}\r\n </td>\r\n <td className=\"px-4 py-3 text-center\">\r\n <span className=\"inline-flex items-center gap-1 text-[var(--text-secondary)]\">\r\n <Users className=\"w-4 h-4\" />\r\n {item.userCount}\r\n </span>\r\n </td>\r\n <td className=\"px-4 py-3 text-center\">\r\n {renderStatusBadge(item)}\r\n {item.isActive && !item.isMerged && (\r\n <span className=\"inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full bg-[var(--success-bg)] text-[var(--success-text)]\">\r\n <Check className=\"w-3 h-3\" />\r\n {t('references.active', 'Active')}\r\n </span>\r\n )}\r\n </td>\r\n <td className=\"px-4 py-3\">\r\n <div className=\"relative\">\r\n <button\r\n onClick={() => setMenuOpen(menuOpen === item.id ? null : item.id)}\r\n className=\"p-2 hover:bg-[var(--bg-secondary)] rounded-[var(--radius-button)] transition-colors\"\r\n disabled={item.isMerged || isGlobalScope}\r\n >\r\n <MoreHorizontal className=\"w-4 h-4\" />\r\n </button>\r\n\r\n {menuOpen === item.id && (\r\n <div className=\"absolute right-0 top-full mt-1 w-48 bg-[var(--bg-primary)] border border-[var(--border-color)] rounded-[var(--radius-card)] shadow-lg z-10\">\r\n <button\r\n onClick={() => openEditModal(item)}\r\n className=\"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\r\n >\r\n <Edit2 className=\"w-4 h-4\" />\r\n {t('common.edit', 'Edit')}\r\n </button>\r\n <button\r\n onClick={() => {\r\n handleToggleActive(item);\r\n setMenuOpen(null);\r\n }}\r\n className=\"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--text-primary)] hover:bg-[var(--bg-hover)]\"\r\n >\r\n {item.isActive ? t('common.deactivate', 'Deactivate') : t('common.activate', 'Activate')}\r\n </button>\r\n {item.userCount === 0 && (\r\n <button\r\n onClick={() => {\r\n handleDelete(item.id);\r\n setMenuOpen(null);\r\n }}\r\n className=\"flex items-center gap-2 w-full px-4 py-2 text-left text-sm text-[var(--error-text)] hover:bg-[var(--error-bg)]\"\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n {t('common.delete', 'Delete')}\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n\r\n {/* Pagination Controls */}\r\n <div className=\"flex items-center justify-between px-6 py-4 border-t border-[var(--border-color)] bg-[var(--bg-secondary)]\">\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {t('references.showing', 'Showing')} {((page - 1) * pageSize) + 1} {t('references.to', 'to')} {Math.min(page * pageSize, totalCount)} {t('references.of', 'of')} {totalCount} {t('references.results', 'results')}\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => setPage(p => Math.max(1, p - 1))}\r\n disabled={page === 1}\r\n className=\"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\r\n >\r\n {t('common.previous', 'Previous')}\r\n </button>\r\n <div className=\"flex items-center gap-1\">\r\n {Array.from({ length: Math.min(5, totalPages) }, (_, i) => {\r\n let pageNum;\r\n if (totalPages <= 5) {\r\n pageNum = i + 1;\r\n } else if (page <= 3) {\r\n pageNum = i + 1;\r\n } else if (page >= totalPages - 2) {\r\n pageNum = totalPages - 4 + i;\r\n } else {\r\n pageNum = page - 2 + i;\r\n }\r\n return (\r\n <button\r\n key={pageNum}\r\n onClick={() => setPage(pageNum)}\r\n className={`px-3 py-1.5 rounded-[var(--radius-button)] transition-colors ${\r\n page === pageNum\r\n ? 'bg-[var(--color-accent-600)] text-white'\r\n : 'border border-[var(--border-color)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)]'\r\n }`}\r\n >\r\n {pageNum}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n <button\r\n onClick={() => setPage(p => Math.min(totalPages, p + 1))}\r\n disabled={page === totalPages}\r\n className=\"px-3 py-1.5 border border-[var(--border-color)] rounded-[var(--radius-button)] text-[var(--text-primary)] hover:bg-[var(--bg-hover)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\r\n >\r\n {t('common.next', 'Next')}\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n\r\n {/* Create Modal */}\r\n {showCreateModal && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-md p-6 m-4\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">\r\n {t('references.createTitle', 'Create Reference')}\r\n </h2>\r\n <button onClick={() => setShowCreateModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.code', 'Code')} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.code}\r\n onChange={e => setFormData({ ...formData, code: e.target.value })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.name', 'Name')} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.name}\r\n onChange={e => setFormData({ ...formData, name: e.target.value })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.shortName', 'Short Name')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.shortName || ''}\r\n onChange={e => setFormData({ ...formData, shortName: e.target.value || null })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.description', 'Description')}\r\n </label>\r\n <textarea\r\n value={formData.description || ''}\r\n onChange={e => setFormData({ ...formData, description: e.target.value || null })}\r\n rows={3}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-3 mt-6\">\r\n <button\r\n onClick={() => setShowCreateModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.cancel', 'Cancel')}\r\n </button>\r\n <button\r\n onClick={handleCreate}\r\n disabled={saving || !formData.code || !formData.name}\r\n className=\"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.create', 'Create')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Edit Modal */}\r\n {showEditModal && editingItem && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-md p-6 m-4\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)]\">\r\n {t('references.editTitle', 'Edit Reference')}\r\n </h2>\r\n <button onClick={() => setShowEditModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-4\">\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.code', 'Code')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.code}\r\n disabled\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-secondary)] text-[var(--text-tertiary)] cursor-not-allowed\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.name', 'Name')} *\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.name}\r\n onChange={e => setFormData({ ...formData, name: e.target.value })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.shortName', 'Short Name')}\r\n </label>\r\n <input\r\n type=\"text\"\r\n value={formData.shortName || ''}\r\n onChange={e => setFormData({ ...formData, shortName: e.target.value || null })}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.description', 'Description')}\r\n </label>\r\n <textarea\r\n value={formData.description || ''}\r\n onChange={e => setFormData({ ...formData, description: e.target.value || null })}\r\n rows={3}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-3 mt-6\">\r\n <button\r\n onClick={() => setShowEditModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.cancel', 'Cancel')}\r\n </button>\r\n <button\r\n onClick={handleUpdate}\r\n disabled={saving || !formData.name}\r\n className=\"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)] transition-colors disabled:opacity-50\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n {t('common.save', 'Save')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Merge Modal */}\r\n {showMergeModal && mergePreview && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-lg p-6 m-4\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2\">\r\n <GitMerge className=\"w-5 h-5 text-[var(--info-dot)]\" />\r\n {t('references.mergeTitle', 'Merge References')}\r\n </h2>\r\n <button onClick={() => setShowMergeModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <p className=\"text-sm text-[var(--text-secondary)] mb-4\">\r\n {t('references.mergeDescription', 'Select the target reference. All other selected references will be merged into it and their users will be reassigned.')}\r\n </p>\r\n\r\n <div className=\"space-y-2 mb-4\">\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)]\">\r\n {t('references.selectTarget', 'Select target reference')}\r\n </label>\r\n {mergePreview.sources.map(source => (\r\n <label\r\n key={source.id}\r\n className={`flex items-center gap-3 p-3 border rounded-[var(--radius-card)] cursor-pointer transition-colors ${\r\n mergeTargetId === source.id\r\n ? 'border-[var(--info-dot)] bg-[var(--info-bg)]'\r\n : 'border-[var(--border-color)] hover:border-[var(--color-accent-500)]'\r\n }`}\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"mergeTarget\"\r\n value={source.id}\r\n checked={mergeTargetId === source.id}\r\n onChange={() => setMergeTargetId(source.id)}\r\n className=\"text-[var(--info-dot)]\"\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-medium text-[var(--text-primary)]\">{source.name}</div>\r\n <div className=\"text-sm text-[var(--text-secondary)]\">\r\n {source.code} {source.shortName && `(${source.shortName})`}\r\n </div>\r\n </div>\r\n <span className=\"text-sm text-[var(--text-secondary)]\">\r\n {source.userCount} {t('references.users', 'users')}\r\n </span>\r\n </label>\r\n ))}\r\n </div>\r\n\r\n <div className=\"mb-4\">\r\n <label className=\"block text-sm font-medium text-[var(--text-secondary)] mb-1\">\r\n {t('references.mergeReason', 'Reason (optional)')}\r\n </label>\r\n <textarea\r\n value={mergeReason}\r\n onChange={e => setMergeReason(e.target.value)}\r\n rows={2}\r\n placeholder={t('references.mergeReasonPlaceholder', 'Why are you merging these references?')}\r\n className=\"w-full px-4 py-2 border border-[var(--border-color)] rounded-[var(--radius-input)] bg-[var(--bg-primary)] text-[var(--text-primary)] focus:outline-none focus:ring-2 focus:ring-[var(--color-accent-500)]\"\r\n />\r\n </div>\r\n\r\n <div className=\"p-3 bg-[var(--warning-bg)] border border-[var(--warning-border)] rounded-[var(--radius-card)] mb-4\">\r\n <p className=\"text-sm text-[var(--warning-text)]\">\r\n <strong>{mergePreview.totalUsersAffected}</strong> {t('references.usersWillBeReassigned', 'users will be reassigned')}\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-3\">\r\n <button\r\n onClick={() => setShowMergeModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.cancel', 'Cancel')}\r\n </button>\r\n <button\r\n onClick={handleMerge}\r\n disabled={saving || !mergeTargetId}\r\n className=\"flex items-center gap-2 px-4 py-2 rounded-[var(--radius-button)] bg-[var(--info-dot)] text-white hover:opacity-90 transition-opacity disabled:opacity-50\"\r\n >\r\n {saving && <Loader2 className=\"w-4 h-4 animate-spin\" />}\r\n <GitMerge className=\"w-4 h-4\" />\r\n {t('references.merge', 'Merge')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* History Modal */}\r\n {showHistoryModal && (\r\n <div className=\"fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50\">\r\n <div className=\"card w-full max-w-2xl p-6 m-4 max-h-[80vh] overflow-hidden flex flex-col\">\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-xl font-semibold text-[var(--text-primary)] flex items-center gap-2\">\r\n <History className=\"w-5 h-5\" />\r\n {t('references.historyTitle', 'Merge History')}\r\n </h2>\r\n <button onClick={() => setShowHistoryModal(false)} className=\"text-[var(--text-tertiary)] hover:text-[var(--text-primary)]\">\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <div className=\"overflow-y-auto flex-1\">\r\n {mergeHistory.length === 0 ? (\r\n <div className=\"text-center py-8 text-[var(--text-secondary)]\">\r\n {t('references.noHistory', 'No merge history found')}\r\n </div>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {mergeHistory.map(entry => (\r\n <div\r\n key={entry.id}\r\n className=\"p-4 border border-[var(--border-color)] rounded-[var(--radius-card)]\"\r\n >\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <GitMerge className=\"w-4 h-4 text-[var(--info-dot)]\" />\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {entry.sourceReferenceName}\r\n </span>\r\n <span className=\"text-[var(--text-secondary)]\">→</span>\r\n <span className=\"font-medium text-[var(--text-primary)]\">\r\n {entry.targetReferenceName}\r\n </span>\r\n </div>\r\n <div className=\"text-sm text-[var(--text-secondary)] space-y-1\">\r\n <div>{entry.affectedUserCount} users reassigned</div>\r\n <div>By {entry.mergedByUserName}</div>\r\n <div>{new Date(entry.mergedAt).toLocaleString()}</div>\r\n {entry.mergeReason && (\r\n <div className=\"italic\">\"{entry.mergeReason}\"</div>\r\n )}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex justify-end mt-4 pt-4 border-t border-[var(--border-color)]\">\r\n <button\r\n onClick={() => setShowHistoryModal(false)}\r\n className=\"px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)] transition-colors\"\r\n >\r\n {t('common.close', 'Close')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Click outside handler for menu */}\r\n {menuOpen && (\r\n <button\r\n type=\"button\"\r\n className=\"fixed inset-0 z-0\"\r\n onClick={() => setMenuOpen(null)}\r\n aria-label=\"Close menu\"\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"names":["withTenantContext","tenantSlug","url","config","apiClient","res","data","ReferenceType","BASE_URL","_createReferencesApi","apiContext","api","buildUrl","path","tenantId","params","urlParams","key","value","queryString","search","isActive","source","page","pageSize","id","request","referenceType","from","to","createReferencesApi","ReferencesManagementPage","t","useTranslation","currentTenant","userTenants","switchTenant","useTenant","adminTenantsList","useAdminTenants","selectedScope","setSelectedScope","useState","isGlobalScope","selectedTenantId","useMemo","activeTab","setActiveTab","items","setItems","loading","setLoading","setSearch","showInactive","setShowInactive","selectedIds","setSelectedIds","setPage","totalCount","setTotalCount","totalPages","setTotalPages","showCreateModal","setShowCreateModal","showEditModal","setShowEditModal","showMergeModal","setShowMergeModal","showHistoryModal","setShowHistoryModal","editingItem","setEditingItem","mergePreview","setMergePreview","mergeHistory","setMergeHistory","menuOpen","setMenuOpen","formData","setFormData","mergeTargetId","setMergeTargetId","mergeReason","setMergeReason","saving","setSaving","error","setError","tabs","Users","Building2","Briefcase","MapPin","currentTab","tab","loadItems","useCallback","apiInstance","isActiveFilter","paginatedResult","err","useEffect","toggleSelection","newSelected","toggleSelectAll","item","handleSwitchToTenant","itemTenantId","tenant","handleCreate","message","handleUpdate","updateData","handleDelete","handleToggleActive","openMergeModal","preview","handleMerge","sourceIds","openHistoryModal","history","openEditModal","renderStatusBadge","jsxs","jsx","GitMerge","Breadcrumb","TenantScopeSelector","ut","Globe","AlertCircle","X","Icon","Search","e","History","Plus","Loader2","Fragment","Check","MoreHorizontal","Edit2","Trash2","p","_","i","pageNum","entry"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { jsxs as s, jsx as t, Fragment as ze } from "react/jsx-runtime";
2
2
  import { useState as v, useMemo as De, useCallback as Fe, useEffect as oe } from "react";
3
3
  import { useTranslation as Ue } from "react-i18next";
4
4
  import { Users as ie, Building2 as le, Briefcase as He, MapPin as Be, Globe as Le, AlertCircle as Oe, X as D, Search as Xe, GitMerge as F, History as de, Plus as Ge, Loader2 as J, Check as Je, MoreHorizontal as _e, Edit2 as qe, Trash2 as We } from "lucide-react";
5
- import { j as U, i as Ke, a as Qe, B as Ve } from "./index-CN2WRyg1.js";
6
- import { u as Ye, T as Ze } from "./TenantScopeSelector-B-SRDR2R.js";
5
+ import { j as U, i as Ke, a as Qe, B as Ve } from "./index-DN97bp_f.js";
6
+ import { u as Ye, T as Ze } from "./TenantScopeSelector-DWUP8Le7.js";
7
7
  const et = (a) => ({
8
8
  get: (n, p) => U.get(n, {
9
9
  ...p,
@@ -977,4 +977,4 @@ function it() {
977
977
  export {
978
978
  it as ReferencesManagementPage
979
979
  };
980
- //# sourceMappingURL=ReferencesManagementPage-8UPgkVE8.js.map
980
+ //# sourceMappingURL=ReferencesManagementPage-CxbfOBs2.js.map