import Home from '@components/features/Home';
import Navigate from '@lib/plume-admin-router/Navigate.tsx';
import {
useRequireAccess,
} from '@lib/plume-admin-redirect/RequiredAccessHooks';
import { usersGroup } from '@lib/plume-admin-users/router/UsersRouter';
import UsersModule from '@lib/plume-admin-users/UsersModule';
import Permission from '@services/session/Permission';
import SessionService from '@services/session/SessionService';
import { useObservable } from 'micro-observables';
import { getGlobalInstance } from 'plume-ts-di';
import { JSX } from 'react';
import {
LOGIN,
REDIRECT_PARAM,
ROUTE_HOME,
routes,
session,
useRoute,
UseRoute,
} from './RouterDefinition';
export default function AuthenticatedRouter(): JSX.Element | null {
const sessionService: SessionService = getGlobalInstance(SessionService);
const canManageUsers: boolean = useObservable(sessionService.hasPermission(Permission.MANAGE_USERS));
const isAuthenticated: boolean = useObservable(sessionService.isAuthenticated());
const route: UseRoute = useRoute();
const { allowed } = useRequireAccess({
hasAccess: isAuthenticated,
currentUrl: location.pathname + location.search,
fallbackUrl: LOGIN,
paramName: REDIRECT_PARAM,
useQueryParam: route.name !== LOGIN, // only append redirect param if not already on the login page
shouldRedirect: route.name !== LOGIN,
navigate: (url: string) => session.push(url),
});
if (!allowed) {
return null;
}
if (route.name === ROUTE_HOME) {
return ;
}
if (usersGroup.has(route) && canManageUsers) {
return ;
}
return ;
}