import { usePermission, useSetModal, useCurrentModal, useRouter, useRouteParameter, useSettingStructure } from '@rocket.chat/ui-contexts'; import { memo, useEffect, useLayoutEffect } from 'react'; import { useTranslation } from 'react-i18next'; import AdminABACPage from './AdminABACPage'; import type { ABACTab } from './hooks/useABACTabPermissions'; import { ABAC_TAB_ORDER, useABACTabPermissions } from './hooks/useABACTabPermissions'; import { useIsExternalAttributeStore } from './hooks/useIsExternalAttributeStore'; import ABACUpsellModal from '../../../components/ABAC/ABACUpsellModal/ABACUpsellModal'; import { useUpsellActions } from '../../../components/GenericUpsellModal/hooks'; import PageSkeleton from '../../../components/PageSkeleton'; import { useHasLicenseModule } from '../../../hooks/useHasLicenseModule'; import SettingsProvider from '../../../providers/SettingsProvider'; import NotAuthorizedPage from '../../notAuthorized/NotAuthorizedPage'; import EditableSettingsProvider from '../settings/EditableSettingsProvider'; const AdminABACRoute = () => { const { t } = useTranslation(); const canViewABACPage = usePermission('abac-management'); const { data: hasABAC = false } = useHasLicenseModule('abac'); const isModalOpen = !!useCurrentModal(); const tab = useRouteParameter('tab'); const router = useRouter(); const tabPermissions = useABACTabPermissions(); const isExternalStore = useIsExternalAttributeStore(); const firstAllowedTab = ABAC_TAB_ORDER.find((t) => tabPermissions[t] && !(t === 'room-attributes' && isExternalStore)); const isAllowedTab = (ABAC_TAB_ORDER as readonly string[]).includes(tab ?? '') && tabPermissions[tab as ABACTab] && !(tab === 'room-attributes' && isExternalStore); const ABACEnabledSetting = useSettingStructure('ABAC_Enabled'); useLayoutEffect(() => { if (firstAllowedTab && !isAllowedTab) { router.navigate( { name: 'admin-ABAC', params: { tab: firstAllowedTab }, }, { replace: true }, ); } }, [router, firstAllowedTab, isAllowedTab]); const { shouldShowUpsell, handleManageSubscription } = useUpsellActions(hasABAC); const setModal = useSetModal(); useEffect(() => { // WS has never activated ABAC if (shouldShowUpsell && ABACEnabledSetting === undefined) { setModal( setModal(null)} onConfirm={handleManageSubscription} />); } }, [shouldShowUpsell, setModal, t, handleManageSubscription, ABACEnabledSetting]); if (isModalOpen) { return ; } if (!canViewABACPage || !firstAllowedTab || (ABACEnabledSetting === undefined && !hasABAC)) { return ; } return ( ); }; export default memo(AdminABACRoute);