@atlashub/smartstack 3.21.0 → 3.25.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.
- package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js → AgentSkillsPage-BWQSCYl-.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-7si3Ng8e.js.map → AgentSkillsPage-BWQSCYl-.js.map} +1 -1
- package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js → AgentSkillsPage-IQcMnBaD.js} +2 -2
- package/dist/chunks/{AgentSkillsPage-D0cD1QdM.js.map → AgentSkillsPage-IQcMnBaD.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js → AgentWorkloadPage-DqrjkvWL.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-H_7ze33H.js.map → AgentWorkloadPage-DqrjkvWL.js.map} +1 -1
- package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js → AgentWorkloadPage-w-HiyFYP.js} +2 -2
- package/dist/chunks/{AgentWorkloadPage-D4d86cdV.js.map → AgentWorkloadPage-w-HiyFYP.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js → ApiCatalogDetailPage-D3L8Yf4G.js} +3 -3
- package/dist/chunks/{ApiCatalogDetailPage-2ktkRrCb.js.map → ApiCatalogDetailPage-D3L8Yf4G.js.map} +1 -1
- package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js → ApiCatalogDetailPage-MPT3Kz6H.js} +2 -2
- package/dist/chunks/{ApiCatalogDetailPage-BQ53xuwD.js.map → ApiCatalogDetailPage-MPT3Kz6H.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js → ApiCatalogPage-D4Hg3uiS.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-BEqTDJz8.js.map → ApiCatalogPage-D4Hg3uiS.js.map} +1 -1
- package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js → ApiCatalogPage-DRg5Cz0r.js} +2 -2
- package/dist/chunks/{ApiCatalogPage-BBkWSLI8.js.map → ApiCatalogPage-DRg5Cz0r.js.map} +1 -1
- package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js → ApplicationDetailPage-Caizuyn2.js} +2 -2
- package/dist/chunks/{ApplicationDetailPage-BYJ2YMPq.js.map → ApplicationDetailPage-Caizuyn2.js.map} +1 -1
- package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js → ApplicationDetailPage-CuCW6aMB.js} +4 -4
- package/dist/chunks/{ApplicationDetailPage-D8-bf1as.js.map → ApplicationDetailPage-CuCW6aMB.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js → ApplicationsDashboardPage-B2MW8-Kc.js} +2 -2
- package/dist/chunks/{ApplicationsDashboardPage-BBlLms2r.js.map → ApplicationsDashboardPage-B2MW8-Kc.js.map} +1 -1
- package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js → ApplicationsDashboardPage-BDIjFIYZ.js} +3 -3
- package/dist/chunks/{ApplicationsDashboardPage-DTWZxJJM.js.map → ApplicationsDashboardPage-BDIjFIYZ.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js → ApplicationsGridPage-DV-FihKj.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-BQaMsK1K.js.map → ApplicationsGridPage-DV-FihKj.js.map} +1 -1
- package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js → ApplicationsGridPage-DXsTfXPI.js} +2 -2
- package/dist/chunks/{ApplicationsGridPage-DbVcvezt.js.map → ApplicationsGridPage-DXsTfXPI.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js → ApplicationsListPage--CGkyBuJ.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-DYKM2Yeo.js.map → ApplicationsListPage--CGkyBuJ.js.map} +1 -1
- package/dist/chunks/{ApplicationsListPage-C91v2rZt.js → ApplicationsListPage-JUX823bh.js} +2 -2
- package/dist/chunks/{ApplicationsListPage-C91v2rZt.js.map → ApplicationsListPage-JUX823bh.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-BCbgotIx.js → ApplicationsPage-6zgFye6w.js} +2 -2
- package/dist/chunks/{ApplicationsPage-BCbgotIx.js.map → ApplicationsPage-6zgFye6w.js.map} +1 -1
- package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js → ApplicationsPage-CQPuuiO6.js} +4 -4
- package/dist/chunks/{ApplicationsPage-CW3-Hjlu.js.map → ApplicationsPage-CQPuuiO6.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js → AssignmentRulesPage-CFffeEbo.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-D8vfGDBN.js.map → AssignmentRulesPage-CFffeEbo.js.map} +1 -1
- package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js → AssignmentRulesPage-D78UeUId.js} +2 -2
- package/dist/chunks/{AssignmentRulesPage-CxktlEMB.js.map → AssignmentRulesPage-D78UeUId.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-DmfBYQAD.js → AssignmentsPage-Cww2ifZF.js} +2 -2
- package/dist/chunks/{AssignmentsPage-DmfBYQAD.js.map → AssignmentsPage-Cww2ifZF.js.map} +1 -1
- package/dist/chunks/{AssignmentsPage-sRCCBmRc.js → AssignmentsPage-DE_QS2LO.js} +2 -2
- package/dist/chunks/{AssignmentsPage-sRCCBmRc.js.map → AssignmentsPage-DE_QS2LO.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js → AuthCallbackPage-CA2nO6DG.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-C7XiZxKb.js.map → AuthCallbackPage-CA2nO6DG.js.map} +1 -1
- package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js → AuthCallbackPage-CDUAoX-N.js} +2 -2
- package/dist/chunks/{AuthCallbackPage-BCe_bwJM.js.map → AuthCallbackPage-CDUAoX-N.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js → ConfirmEmailPage-BqsILAYH.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-BUfGSqxF.js.map → ConfirmEmailPage-BqsILAYH.js.map} +1 -1
- package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js → ConfirmEmailPage-INeHCuMB.js} +2 -2
- package/dist/chunks/{ConfirmEmailPage-Buj4x-rx.js.map → ConfirmEmailPage-INeHCuMB.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js → CreateSupportTicketPage-BWeuV2aU.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-CKDX_HQm.js.map → CreateSupportTicketPage-BWeuV2aU.js.map} +1 -1
- package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js → CreateSupportTicketPage-OBwF4v7b.js} +2 -2
- package/dist/chunks/{CreateSupportTicketPage-0LgY-_pu.js.map → CreateSupportTicketPage-OBwF4v7b.js.map} +1 -1
- package/dist/chunks/{DashboardPage-CUZ80NGV.js → DashboardPage-CKHqWrdS.js} +3 -3
- package/dist/chunks/{DashboardPage-CUZ80NGV.js.map → DashboardPage-CKHqWrdS.js.map} +1 -1
- package/dist/chunks/{DashboardPage-CaNOAstg.js → DashboardPage-COmc9b__.js} +3 -3
- package/dist/chunks/{DashboardPage-CaNOAstg.js.map → DashboardPage-COmc9b__.js.map} +1 -1
- package/dist/chunks/{DashboardPage-B48_rQFi.js → DashboardPage-CfKZHiSj.js} +2 -2
- package/dist/chunks/{DashboardPage-B48_rQFi.js.map → DashboardPage-CfKZHiSj.js.map} +1 -1
- package/dist/chunks/{DashboardPage-CUZV1J9t.js → DashboardPage-CwEZZ3jx.js} +2 -2
- package/dist/chunks/{DashboardPage-CUZV1J9t.js.map → DashboardPage-CwEZZ3jx.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js → EscalationConfigPage--7lgZ0kJ.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-CdzAbnGy.js.map → EscalationConfigPage--7lgZ0kJ.js.map} +1 -1
- package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js → EscalationConfigPage-DPyiBcqV.js} +2 -2
- package/dist/chunks/{EscalationConfigPage-CYGIl_e6.js.map → EscalationConfigPage-DPyiBcqV.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js → ForceChangePasswordPage-BE-6umub.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-lRpkwcX7.js.map → ForceChangePasswordPage-BE-6umub.js.map} +1 -1
- package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js → ForceChangePasswordPage-CnsYoWmV.js} +2 -2
- package/dist/chunks/{ForceChangePasswordPage-CvmYAV3r.js.map → ForceChangePasswordPage-CnsYoWmV.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js → ForgotPasswordPage-CSq4DnFF.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage-0u49E4Pw.js.map → ForgotPasswordPage-CSq4DnFF.js.map} +1 -1
- package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js → ForgotPasswordPage-DZLVolAC.js} +2 -2
- package/dist/chunks/{ForgotPasswordPage-CxQUqKOm.js.map → ForgotPasswordPage-DZLVolAC.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-DFBvVO1S.js → GroupDetailPage-Bf9Wb_2j.js} +5 -5
- package/dist/chunks/{GroupDetailPage-DFBvVO1S.js.map → GroupDetailPage-Bf9Wb_2j.js.map} +1 -1
- package/dist/chunks/{GroupDetailPage-B2FkKrGG.js → GroupDetailPage-R-hf3rJ7.js} +2 -2
- package/dist/chunks/{GroupDetailPage-B2FkKrGG.js.map → GroupDetailPage-R-hf3rJ7.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js → MyAccessRequestsPage-BIisvWM6.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-C9IX4c0K.js.map → MyAccessRequestsPage-BIisvWM6.js.map} +1 -1
- package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js → MyAccessRequestsPage-BLSV7Tbx.js} +2 -2
- package/dist/chunks/{MyAccessRequestsPage-D6pVULNM.js.map → MyAccessRequestsPage-BLSV7Tbx.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-BEcYYdGR.js → MyTenantsPage-D-7k9CP1.js} +3 -3
- package/dist/chunks/{MyTenantsPage-BEcYYdGR.js.map → MyTenantsPage-D-7k9CP1.js.map} +1 -1
- package/dist/chunks/{MyTenantsPage-D9f85zjF.js → MyTenantsPage-DqGW6aDt.js} +2 -2
- package/dist/chunks/{MyTenantsPage-D9f85zjF.js.map → MyTenantsPage-DqGW6aDt.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-DJR8h6y1.js → MyTicketsPage--DgDsnZA.js} +2 -2
- package/dist/chunks/{MyTicketsPage-DJR8h6y1.js.map → MyTicketsPage--DgDsnZA.js.map} +1 -1
- package/dist/chunks/{MyTicketsPage-DiOUExKJ.js → MyTicketsPage-CqJ3Aqob.js} +2 -2
- package/dist/chunks/{MyTicketsPage-DiOUExKJ.js.map → MyTicketsPage-CqJ3Aqob.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js → NavigationAppsPage-Bebis_RT.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-CeHbxfZw.js.map → NavigationAppsPage-Bebis_RT.js.map} +1 -1
- package/dist/chunks/{NavigationAppsPage-If7tmCFY.js → NavigationAppsPage-THNPOAjv.js} +2 -2
- package/dist/chunks/{NavigationAppsPage-If7tmCFY.js.map → NavigationAppsPage-THNPOAjv.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-C29Lln5o.js → NotificationsPage-CAbNW_Cn.js} +2 -2
- package/dist/chunks/{NotificationsPage-C29Lln5o.js.map → NotificationsPage-CAbNW_Cn.js.map} +1 -1
- package/dist/chunks/{NotificationsPage-BiaLRb0s.js → NotificationsPage-DxwizUhL.js} +2 -2
- package/dist/chunks/{NotificationsPage-BiaLRb0s.js.map → NotificationsPage-DxwizUhL.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js → OnboardingWizardPage-C6HlbJ3K.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-DQrBKNBq.js.map → OnboardingWizardPage-C6HlbJ3K.js.map} +1 -1
- package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js → OnboardingWizardPage-CyC2zONO.js} +2 -2
- package/dist/chunks/{OnboardingWizardPage-BQah4cI8.js.map → OnboardingWizardPage-CyC2zONO.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js → PermissionDetailPage-BDHiNgky.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-Ckjdjvf9.js.map → PermissionDetailPage-BDHiNgky.js.map} +1 -1
- package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js → PermissionDetailPage-C5K17ydY.js} +2 -2
- package/dist/chunks/{PermissionDetailPage-Dh8v7mGj.js.map → PermissionDetailPage-C5K17ydY.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-l0PnY-EE.js → PermissionsPage-COI5LJPo.js} +2 -2
- package/dist/chunks/{PermissionsPage-l0PnY-EE.js.map → PermissionsPage-COI5LJPo.js.map} +1 -1
- package/dist/chunks/{PermissionsPage-DLy9U3P3.js → PermissionsPage-CkOwH2_d.js} +2 -2
- package/dist/chunks/{PermissionsPage-DLy9U3P3.js.map → PermissionsPage-CkOwH2_d.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-DFBx38-x.js → PortalDashboardPage-CoEC4CmC.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-DFBx38-x.js.map → PortalDashboardPage-CoEC4CmC.js.map} +1 -1
- package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js → PortalDashboardPage-DrYymEf-.js} +2 -2
- package/dist/chunks/{PortalDashboardPage-rQYhrX0q.js.map → PortalDashboardPage-DrYymEf-.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-BBu8yZQB.js → PreferencesPage-CJRaU3ba.js} +2 -2
- package/dist/chunks/{PreferencesPage-BBu8yZQB.js.map → PreferencesPage-CJRaU3ba.js.map} +1 -1
- package/dist/chunks/{PreferencesPage-B81MsNV1.js → PreferencesPage-Cqr9mAab.js} +2 -2
- package/dist/chunks/{PreferencesPage-B81MsNV1.js.map → PreferencesPage-Cqr9mAab.js.map} +1 -1
- package/dist/chunks/{ProfilePage-DDrl10zj.js → ProfilePage-BZVpg6-l.js} +2 -2
- package/dist/chunks/{ProfilePage-DDrl10zj.js.map → ProfilePage-BZVpg6-l.js.map} +1 -1
- package/dist/chunks/{ProfilePage-DPoXwdnc.js → ProfilePage-Cu_FITeL.js} +2 -2
- package/dist/chunks/{ProfilePage-DPoXwdnc.js.map → ProfilePage-Cu_FITeL.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js → ReferencesManagementPage-DUlVk9Ps.js} +3 -3
- package/dist/chunks/{ReferencesManagementPage-eFsKjIEK.js.map → ReferencesManagementPage-DUlVk9Ps.js.map} +1 -1
- package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js → ReferencesManagementPage-ZCuYtqd7.js} +2 -2
- package/dist/chunks/{ReferencesManagementPage-DhVsuElE.js.map → ReferencesManagementPage-ZCuYtqd7.js.map} +1 -1
- package/dist/chunks/{RegisterPage-CiQib3-6.js → RegisterPage-C4xmVwh9.js} +2 -2
- package/dist/chunks/{RegisterPage-CiQib3-6.js.map → RegisterPage-C4xmVwh9.js.map} +1 -1
- package/dist/chunks/{RegisterPage-bXCcJD88.js → RegisterPage-DGyzoIHT.js} +2 -2
- package/dist/chunks/{RegisterPage-bXCcJD88.js.map → RegisterPage-DGyzoIHT.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js → ResetPasswordPage-DqDD6VPR.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-Dqiahhnj.js.map → ResetPasswordPage-DqDD6VPR.js.map} +1 -1
- package/dist/chunks/{ResetPasswordPage-CubPG3yv.js → ResetPasswordPage-Glu-aeqv.js} +2 -2
- package/dist/chunks/{ResetPasswordPage-CubPG3yv.js.map → ResetPasswordPage-Glu-aeqv.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-Bg7XZmR1.js → ResolutionModal-CxjANAOP.js} +2 -2
- package/dist/chunks/{ResolutionModal-Bg7XZmR1.js.map → ResolutionModal-CxjANAOP.js.map} +1 -1
- package/dist/chunks/{ResolutionModal-DqRk_T0n.js → ResolutionModal-Duat18qV.js} +2 -2
- package/dist/chunks/{ResolutionModal-DqRk_T0n.js.map → ResolutionModal-Duat18qV.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-Blau6_4c.js → RoleDetailPage-BQffUSnt.js} +3 -3
- package/dist/chunks/{RoleDetailPage-Blau6_4c.js.map → RoleDetailPage-BQffUSnt.js.map} +1 -1
- package/dist/chunks/{RoleDetailPage-CiRVxxIP.js → RoleDetailPage-JTm5lD1_.js} +2 -2
- package/dist/chunks/{RoleDetailPage-CiRVxxIP.js.map → RoleDetailPage-JTm5lD1_.js.map} +1 -1
- package/dist/chunks/{RolesPage-Pm-RN3lP.js → RolesPage-B9rRzciI.js} +2 -2
- package/dist/chunks/{RolesPage-Pm-RN3lP.js.map → RolesPage-B9rRzciI.js.map} +1 -1
- package/dist/chunks/{RolesPage-Cb8joqdJ.js → RolesPage-BN8_zMOC.js} +2 -2
- package/dist/chunks/{RolesPage-Cb8joqdJ.js.map → RolesPage-BN8_zMOC.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-B86McKM6.js → SlaConfigPage-B7kZNig4.js} +2 -2
- package/dist/chunks/{SlaConfigPage-B86McKM6.js.map → SlaConfigPage-B7kZNig4.js.map} +1 -1
- package/dist/chunks/{SlaConfigPage-BY7gvYU6.js → SlaConfigPage-okvZfA_K.js} +2 -2
- package/dist/chunks/{SlaConfigPage-BY7gvYU6.js.map → SlaConfigPage-okvZfA_K.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js → SupportPermissionsPage-DGAPqJbl.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-BYxcLMSd.js.map → SupportPermissionsPage-DGAPqJbl.js.map} +1 -1
- package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js → SupportPermissionsPage-Dg_wLOme.js} +2 -2
- package/dist/chunks/{SupportPermissionsPage-MXqXNJIZ.js.map → SupportPermissionsPage-Dg_wLOme.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-BDguJ401.js → TemplatesPage-DT9fhlAU.js} +2 -2
- package/dist/chunks/{TemplatesPage-BDguJ401.js.map → TemplatesPage-DT9fhlAU.js.map} +1 -1
- package/dist/chunks/{TemplatesPage-DdnGgioU.js → TemplatesPage-DiEk538p.js} +2 -2
- package/dist/chunks/{TemplatesPage-DdnGgioU.js.map → TemplatesPage-DiEk538p.js.map} +1 -1
- package/dist/chunks/{TenantCard-ffwWsgFQ.js → TenantCard-BbSYk9_Z.js} +2 -2
- package/dist/chunks/{TenantCard-ffwWsgFQ.js.map → TenantCard-BbSYk9_Z.js.map} +1 -1
- package/dist/chunks/{TenantCard-CUjb6og9.js → TenantCard-CEkiKxcZ.js} +2 -2
- package/dist/chunks/{TenantCard-CUjb6og9.js.map → TenantCard-CEkiKxcZ.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js → TenantScopeSelector-BWfYxvEa.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-Dz7i1I43.js.map → TenantScopeSelector-BWfYxvEa.js.map} +1 -1
- package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js → TenantScopeSelector-D-BKgQPV.js} +2 -2
- package/dist/chunks/{TenantScopeSelector-Cym_Zyps.js.map → TenantScopeSelector-D-BKgQPV.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-GOh9GX7E.js → TicketDetailPage-C1mNS9Up.js} +2 -2
- package/dist/chunks/{TicketDetailPage-GOh9GX7E.js.map → TicketDetailPage-C1mNS9Up.js.map} +1 -1
- package/dist/chunks/{TicketDetailPage-Du8WMyqf.js → TicketDetailPage-ieVDRh42.js} +2 -2
- package/dist/chunks/{TicketDetailPage-Du8WMyqf.js.map → TicketDetailPage-ieVDRh42.js.map} +1 -1
- package/dist/chunks/{TicketsPage-Bqd6moQy.js → TicketsPage-CnuWsnIW.js} +2 -2
- package/dist/chunks/{TicketsPage-Bqd6moQy.js.map → TicketsPage-CnuWsnIW.js.map} +1 -1
- package/dist/chunks/{TicketsPage-WdU4Bb7M.js → TicketsPage-jjyY15_D.js} +2 -2
- package/dist/chunks/{TicketsPage-WdU4Bb7M.js.map → TicketsPage-jjyY15_D.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js → UserCreateTicketPage-B8Tvf-ag.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-Cm1emgwR.js.map → UserCreateTicketPage-B8Tvf-ag.js.map} +1 -1
- package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js → UserCreateTicketPage-DnOsDlfO.js} +2 -2
- package/dist/chunks/{UserCreateTicketPage-BPw-5Y_D.js.map → UserCreateTicketPage-DnOsDlfO.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-BP5WeXPS.js → UserDashboardPage-BrtkJ-NB.js} +2 -2
- package/dist/chunks/{UserDashboardPage-BP5WeXPS.js.map → UserDashboardPage-BrtkJ-NB.js.map} +1 -1
- package/dist/chunks/{UserDashboardPage-B53C8fUq.js → UserDashboardPage-KLB5CQP5.js} +2 -2
- package/dist/chunks/{UserDashboardPage-B53C8fUq.js.map → UserDashboardPage-KLB5CQP5.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-B110bmGX.js → UserDetailPage-U7smBQoF.js} +5 -5
- package/dist/chunks/{UserDetailPage-B110bmGX.js.map → UserDetailPage-U7smBQoF.js.map} +1 -1
- package/dist/chunks/{UserDetailPage-CV2VCE46.js → UserDetailPage-_J6lcKAU.js} +2 -2
- package/dist/chunks/{UserDetailPage-CV2VCE46.js.map → UserDetailPage-_J6lcKAU.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js → UserTicketDetailPage-CWoYQgH-.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-CCNJON1V.js.map → UserTicketDetailPage-CWoYQgH-.js.map} +1 -1
- package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js → UserTicketDetailPage-DkufSlvZ.js} +2 -2
- package/dist/chunks/{UserTicketDetailPage-V0mLXrox.js.map → UserTicketDetailPage-DkufSlvZ.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js → UsersGroupsPage-C38s2-Rq.js} +3 -3
- package/dist/chunks/{UsersGroupsPage-CmdaU-z-.js.map → UsersGroupsPage-C38s2-Rq.js.map} +1 -1
- package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js → UsersGroupsPage-Dq3rAteo.js} +2 -2
- package/dist/chunks/{UsersGroupsPage-BgfAMgEP.js.map → UsersGroupsPage-Dq3rAteo.js.map} +1 -1
- package/dist/chunks/{UsersPage-Bg7033pp.js → UsersPage-B5C5KEUR.js} +2 -2
- package/dist/chunks/{UsersPage-Bg7033pp.js.map → UsersPage-B5C5KEUR.js.map} +1 -1
- package/dist/chunks/{UsersPage-TYAfwPY1.js → UsersPage-CXC9Hvq6.js} +2 -2
- package/dist/chunks/{UsersPage-TYAfwPY1.js.map → UsersPage-CXC9Hvq6.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-DZeDvzwv.js → accessRequestsApi-B-4TJ5_U.js} +2 -2
- package/dist/chunks/{accessRequestsApi-DZeDvzwv.js.map → accessRequestsApi-B-4TJ5_U.js.map} +1 -1
- package/dist/chunks/{accessRequestsApi-ZXFPCid2.js → accessRequestsApi-DZSfThpd.js} +2 -2
- package/dist/chunks/{accessRequestsApi-ZXFPCid2.js.map → accessRequestsApi-DZSfThpd.js.map} +1 -1
- package/dist/chunks/{aiApi-CsH8DXgs.js → aiApi-B20Teu2v.js} +2 -2
- package/dist/chunks/{aiApi-CsH8DXgs.js.map → aiApi-B20Teu2v.js.map} +1 -1
- package/dist/chunks/{aiApi-CVPzFTXa.js → aiApi-DMGz-RPM.js} +2 -2
- package/dist/chunks/{aiApi-CVPzFTXa.js.map → aiApi-DMGz-RPM.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js → applicationAnalyticsApi-Bwa75Fzd.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-B8AhFYLr.js.map → applicationAnalyticsApi-Bwa75Fzd.js.map} +1 -1
- package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js → applicationAnalyticsApi-CLBqRPfN.js} +2 -2
- package/dist/chunks/{applicationAnalyticsApi-Ce_1qOk-.js.map → applicationAnalyticsApi-CLBqRPfN.js.map} +1 -1
- package/dist/chunks/{groupsApi-BgCk2fsp.js → groupsApi-QzXI-5xu.js} +2 -2
- package/dist/chunks/{groupsApi-BgCk2fsp.js.map → groupsApi-QzXI-5xu.js.map} +1 -1
- package/dist/chunks/{groupsApi-BIbG665N.js → groupsApi-hB9kSWEd.js} +2 -2
- package/dist/chunks/{groupsApi-BIbG665N.js.map → groupsApi-hB9kSWEd.js.map} +1 -1
- package/dist/chunks/{index-Cb3LotuT.js → index--NGcBYUu.js} +3 -3
- package/dist/chunks/{index-Cb3LotuT.js.map → index--NGcBYUu.js.map} +1 -1
- package/dist/chunks/{index-C33zcyF4.js → index--aPwOFjF.js} +2 -2
- package/dist/chunks/{index-C33zcyF4.js.map → index--aPwOFjF.js.map} +1 -1
- package/dist/chunks/{index-sMr9qND_.js → index-0VrOtwP0.js} +2 -2
- package/dist/chunks/{index-sMr9qND_.js.map → index-0VrOtwP0.js.map} +1 -1
- package/dist/chunks/{index-DDKetfKq.js → index-37U271aw.js} +2 -2
- package/dist/chunks/{index-DDKetfKq.js.map → index-37U271aw.js.map} +1 -1
- package/dist/chunks/{index-B9fS7ir6.js → index-B7qZTuQ-.js} +2 -2
- package/dist/chunks/{index-B9fS7ir6.js.map → index-B7qZTuQ-.js.map} +1 -1
- package/dist/chunks/{index-CdjBY7L8.js → index-Bedzmqr-.js} +2 -2
- package/dist/chunks/{index-CdjBY7L8.js.map → index-Bedzmqr-.js.map} +1 -1
- package/dist/chunks/{index-CHG_O1fS.js → index-Betxo5g5.js} +2 -2
- package/dist/chunks/{index-CHG_O1fS.js.map → index-Betxo5g5.js.map} +1 -1
- package/dist/chunks/{index-jiGu-H8x.js → index-BmaJz475.js} +2 -2
- package/dist/chunks/{index-jiGu-H8x.js.map → index-BmaJz475.js.map} +1 -1
- package/dist/chunks/{index-C53JoVNk.js → index-Buhqag3v.js} +2 -2
- package/dist/chunks/{index-C53JoVNk.js.map → index-Buhqag3v.js.map} +1 -1
- package/dist/chunks/{index-DO0Rw7hX.js → index-C3VxlfKq.js} +2 -2
- package/dist/chunks/{index-DO0Rw7hX.js.map → index-C3VxlfKq.js.map} +1 -1
- package/dist/chunks/{index-CSQ60fpG.js → index-CgpRo8Oe.js} +2 -2
- package/dist/chunks/{index-CSQ60fpG.js.map → index-CgpRo8Oe.js.map} +1 -1
- package/dist/chunks/{index-B-e-ELsf.js → index-DOY0w8Iu.js} +8 -8
- package/dist/chunks/{index-B-e-ELsf.js.map → index-DOY0w8Iu.js.map} +1 -1
- package/dist/chunks/{index-D2REDIRX.js → index-DwuvIOrQ.js} +2 -2
- package/dist/chunks/{index-D2REDIRX.js.map → index-DwuvIOrQ.js.map} +1 -1
- package/dist/chunks/{index-DCcl7Qof.js → index-DzedSLdI.js} +2 -2
- package/dist/chunks/{index-DCcl7Qof.js.map → index-DzedSLdI.js.map} +1 -1
- package/dist/chunks/{index-2wUhd9Lu.js → index-IgLVXPg8.js} +10 -10
- package/dist/chunks/index-IgLVXPg8.js.map +1 -0
- package/dist/chunks/{index-CwSaRXXg.js → index-lpIzhufD.js} +1916 -1900
- package/dist/chunks/index-lpIzhufD.js.map +1 -0
- package/dist/chunks/{index-Cuwn2q-f.js → index-mLUKwbGl.js} +4 -4
- package/dist/chunks/{index-Cuwn2q-f.js.map → index-mLUKwbGl.js.map} +1 -1
- package/dist/chunks/{index-B0mk2tNY.js → index-tO6MMIFB.js} +2 -2
- package/dist/chunks/{index-B0mk2tNY.js.map → index-tO6MMIFB.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-BpNANQ5s.js → tenantIconMap-BQD9byc8.js} +2 -2
- package/dist/chunks/{tenantIconMap-BpNANQ5s.js.map → tenantIconMap-BQD9byc8.js.map} +1 -1
- package/dist/chunks/{tenantIconMap-DtdUgvJO.js → tenantIconMap-CTMuSt18.js} +2 -2
- package/dist/chunks/{tenantIconMap-DtdUgvJO.js.map → tenantIconMap-CTMuSt18.js.map} +1 -1
- package/dist/chunks/{ticketingApi-Bu4rKwLl.js → ticketingApi-BNIdox5t.js} +2 -2
- package/dist/chunks/{ticketingApi-Bu4rKwLl.js.map → ticketingApi-BNIdox5t.js.map} +1 -1
- package/dist/chunks/{ticketingApi-r4Avm9iS.js → ticketingApi-J0vC_t7r.js} +2 -2
- package/dist/chunks/{ticketingApi-r4Avm9iS.js.map → ticketingApi-J0vC_t7r.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-B9bF4swg.js → useAccessRequests-DCNNLnxk.js} +3 -3
- package/dist/chunks/{useAccessRequests-B9bF4swg.js.map → useAccessRequests-DCNNLnxk.js.map} +1 -1
- package/dist/chunks/{useAccessRequests-JyPUX3Om.js → useAccessRequests-DT7X4FAK.js} +2 -2
- package/dist/chunks/{useAccessRequests-JyPUX3Om.js.map → useAccessRequests-DT7X4FAK.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-DjPQenC2.js → useUserAccessRequests-BYbmG4c7.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-DjPQenC2.js.map → useUserAccessRequests-BYbmG4c7.js.map} +1 -1
- package/dist/chunks/{useUserAccessRequests-BB6FHW14.js → useUserAccessRequests-CylKxRN6.js} +2 -2
- package/dist/chunks/{useUserAccessRequests-BB6FHW14.js.map → useUserAccessRequests-CylKxRN6.js.map} +1 -1
- package/dist/hooks/useCollapsibleState.d.ts +5 -2
- package/dist/hooks/useCollapsibleState.d.ts.map +1 -1
- package/dist/i18n/config.d.ts +1 -0
- package/dist/i18n/config.d.ts.map +1 -1
- package/dist/main.d.ts +0 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/smartstack.cjs +1 -1
- package/dist/smartstack.js +1 -1
- package/dist/utils/permissions.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/index-2wUhd9Lu.js.map +0 -1
- package/dist/chunks/index-CwSaRXXg.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferencesManagementPage-eFsKjIEK.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","History","Plus","Loader2","Fragment","Check","MoreHorizontal","Edit2","Trash2","p","_","i","pageNum","entry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReferencesManagementPage-DUlVk9Ps.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","History","Plus","Loader2","Fragment","Check","MoreHorizontal","Edit2","Trash2","p","_","i","pageNum","entry"],"mappings":"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"}
|