mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 13:28:11 +00:00
fix ui
This commit is contained in:
@@ -1,276 +0,0 @@
|
||||
import type { ReactElement } from "react";
|
||||
import { Navigate, Outlet, Route } from "react-router-dom";
|
||||
|
||||
import { useAuth } from "@/auth/useAuth";
|
||||
import { isSuperAdmin } from "@/lib/permissions";
|
||||
import { WithPermission } from "@/shared/hooks/useHas";
|
||||
import PendingExternalUsers from "@/super-admin/components/externalUsers/PendingExternalUsers";
|
||||
import TemplatePage from "@/super-admin/components/templates/components/templates";
|
||||
import UserManagementPage from "@/pages/dashboard/user-management/UserManagementPage";
|
||||
|
||||
import CreatePositionPage from "./pages/position-management/create";
|
||||
import EditPositionPage from "./pages/position-management/edit";
|
||||
import PositionManagementPage from "./pages/position-management";
|
||||
import MigratedDataManagementPage from "./pages/position-management/MigratedDataManagementPage";
|
||||
import UserPositionApprovalPage from "./pages/UserPositionApprovalPage";
|
||||
import ViewMigratedDataPage from "./components/MigratedRecords/ViewMigratedDataPage";
|
||||
import ContentManagement from "./components/content/ContentManagement";
|
||||
import { BulkUserUpload } from "./bulkUpload/bulkUpload";
|
||||
import AllRecordsPage from "./all-records/pages/AllRecordsPage";
|
||||
import AllRecordDetailsPage from "./all-records/pages/AllRecordDetailsPage";
|
||||
import Branding from "./web-Management/Branding/Branding";
|
||||
import { WebManagementHomePage } from "./web-Management/webManagement";
|
||||
import { AppLayout } from "./Applayout";
|
||||
|
||||
/**
|
||||
* Layout wrapper for the user-management route subtree. Self-contained (the
|
||||
* original vendored AppLayout was removed when the folder was re-copied and it
|
||||
* pulled the un-migrated @/record-management chrome). Just renders the matched
|
||||
* child route; swap in the real IAM shell later if desired.
|
||||
*/
|
||||
function UmLayout(): ReactElement {
|
||||
return <Outlet />;
|
||||
}
|
||||
|
||||
/**
|
||||
* Role gate for the nested super-admin / org-admin route groups. Renders child
|
||||
* routes via <Outlet /> only when the user holds an allowed role (super admins
|
||||
* always pass); otherwise bounces to the overview.
|
||||
*/
|
||||
function PrivateRoute({ allowedRoles }: { allowedRoles: string[] }): ReactElement {
|
||||
const { user } = useAuth();
|
||||
const roleKeys = (user?.roles ?? [])
|
||||
.map((r) => r.key)
|
||||
.filter((k): k is string => Boolean(k));
|
||||
const allowed =
|
||||
isSuperAdmin(user) || allowedRoles.some((r) => roleKeys.includes(r));
|
||||
return allowed ? <Outlet /> : <Navigate to="/dashboard/overview" replace />;
|
||||
}
|
||||
|
||||
export const UserManagementRedirect = () => {
|
||||
const { user } = useAuth();
|
||||
const roles = user?.roles?.map((r) => r.key) || [];
|
||||
|
||||
if (roles.includes("super_admin")) {
|
||||
return <Navigate to="/user-management/dashboard" replace />;
|
||||
}
|
||||
|
||||
if (roles.includes("admin") || roles.includes("unit_admin")) {
|
||||
return <Navigate to="/user-management/user_management-dashboard" replace />;
|
||||
}
|
||||
|
||||
return <Navigate to="/" replace />; // fallback
|
||||
};
|
||||
|
||||
/**
|
||||
* Placeholder for user-management pages present in the source IAM app's route
|
||||
* map but not yet migrated into this backoffice. Keeps the route live and
|
||||
* honest instead of failing the build. See the `TODO(um-migration)` markers.
|
||||
*/
|
||||
/**
|
||||
* User-management route subtree. Mount inside the app's <Routes>:
|
||||
* <Routes>{UserManagementRoutes()}</Routes>
|
||||
* Child paths are relative (RRv6 forbids absolute paths on nested routes), so
|
||||
* they serve at /user-management/* under the app root.
|
||||
*/
|
||||
export function UserManagementRoutes(): ReactElement {
|
||||
return (
|
||||
<Route element={<AppLayout />}>
|
||||
<Route
|
||||
path="user-management"
|
||||
element={
|
||||
<div className="w-full flex flex-col p-4">
|
||||
<UserManagementRedirect />
|
||||
</div>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="/user-management/archive/edit/:id"
|
||||
element={<UserProfileEditPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/position-management"
|
||||
element={<PositionManagementPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/migrated-records-management"
|
||||
element={<MigratedDataManagementPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/position-management/edit/:id"
|
||||
element={<EditPositionPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/position-management/new"
|
||||
element={<CreatePositionPage />}
|
||||
/>
|
||||
|
||||
{/* Super Admin */}
|
||||
<Route
|
||||
element={
|
||||
<PrivateRoute allowedRoles={["super_admin"]} />
|
||||
}
|
||||
>
|
||||
<Route
|
||||
path="user-management/dashboard"
|
||||
element={<DashboardPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organizations"
|
||||
element={<OrganizationsPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organizations/detail/:id"
|
||||
element={<OrganizationDetailPage />}
|
||||
/>
|
||||
<Route
|
||||
path="super-admin/organizations/:id"
|
||||
element={<OrganizationDetailPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organizations/new"
|
||||
element={<NewOrganizationPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organizations/edit/:id"
|
||||
element={<EditOrganizationPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/external_users"
|
||||
element={<PendingExternalUsers />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/migrated-records-management/view/:id"
|
||||
element={<ViewMigratedDataPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/external_users/view/:id"
|
||||
element={<UploadedDocumentViewPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/external_users/edit/:id"
|
||||
element={<UserProfileEditPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organization_admins"
|
||||
element={<OrganizationAdminsPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/add_admin"
|
||||
element={<AdminRegistrationPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/activity_log"
|
||||
element={<ActivityLogPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/settings"
|
||||
element={<SettingsPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/archive-users"
|
||||
element={<SuperAdminArchiveUsersPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/archived-organizations"
|
||||
element={<SuperAdminArchivedPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/templates"
|
||||
element={<TemplatePage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/add-site"
|
||||
element={<AddSitePage />}
|
||||
/>
|
||||
<Route
|
||||
path="/user-management/web-management/Branding/Branding/:siteId"
|
||||
element={<Branding />}
|
||||
/>
|
||||
</Route>
|
||||
|
||||
{/* Org Admin */}
|
||||
<Route
|
||||
element={
|
||||
<PrivateRoute
|
||||
allowedRoles={[
|
||||
"admin",
|
||||
"organization_admin",
|
||||
"unit_admin",
|
||||
]}
|
||||
/>
|
||||
}
|
||||
>
|
||||
<Route
|
||||
path="user-management/user_management-dashboard"
|
||||
element={<OrgAdminDashboard />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/user_management"
|
||||
element={<UserManagementPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/user-position-approval"
|
||||
element={
|
||||
// <WithPermission
|
||||
// perms={["can:activateEmployee"]}
|
||||
// fallback={<Navigate to="/" replace />}
|
||||
// >
|
||||
<UserPositionApprovalPage />
|
||||
// </WithPermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/all-records"
|
||||
element={
|
||||
<WithPermission
|
||||
perms={["can:viewAllRecords"]}
|
||||
fallback={<Navigate to="/" replace />}
|
||||
>
|
||||
<AllRecordsPage />
|
||||
</WithPermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/all-records/:id"
|
||||
element={
|
||||
<WithPermission
|
||||
perms={["can:viewAllRecords"]}
|
||||
fallback={<Navigate to="/" replace />}
|
||||
>
|
||||
<AllRecordDetailsPage />
|
||||
</WithPermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/content-management"
|
||||
element={<ContentManagementPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/bulk-upload"
|
||||
element={<BulkUploadPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/web-management/*"
|
||||
element={<WebManagement />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/archives"
|
||||
element={<ArchiveUsersPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/sector-reports"
|
||||
element={<SectorReportsPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/archived"
|
||||
element={<ArchivedUnitsPositionsPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organization-settings"
|
||||
element={<ConfigurationPage />}
|
||||
/>
|
||||
</Route>
|
||||
</Route>
|
||||
);
|
||||
}
|
||||
@@ -1,272 +0,0 @@
|
||||
import type { ReactElement } from "react";
|
||||
import { Navigate, Outlet, Route } from "react-router-dom";
|
||||
|
||||
import { useAuth } from "@/auth/useAuth";
|
||||
import { isSuperAdmin } from "@/lib/permissions";
|
||||
import { WithPermission } from "@/shared/hooks/useHas";
|
||||
import PendingExternalUsers from "@/super-admin/components/externalUsers/PendingExternalUsers";
|
||||
import TemplatePage from "@/super-admin/components/templates/components/templates";
|
||||
import UserManagementPage from "@/pages/dashboard/user-management/UserManagementPage";
|
||||
|
||||
import CreatePositionPage from "./pages/position-management/create";
|
||||
import EditPositionPage from "./pages/position-management/edit";
|
||||
import PositionManagementPage from "./pages/position-management";
|
||||
import MigratedDataManagementPage from "./pages/position-management/MigratedDataManagementPage";
|
||||
import UserPositionApprovalPage from "./pages/UserPositionApprovalPage";
|
||||
import ViewMigratedDataPage from "./components/MigratedRecords/ViewMigratedDataPage";
|
||||
import ContentManagement from "./components/content/ContentManagement";
|
||||
import { BulkUserUpload } from "./bulkUpload/bulkUpload";
|
||||
import AllRecordsPage from "./all-records/pages/AllRecordsPage";
|
||||
import AllRecordDetailsPage from "./all-records/pages/AllRecordDetailsPage";
|
||||
import Branding from "./web-Management/Branding/Branding";
|
||||
import { WebManagementHomePage } from "./web-Management/webManagement";
|
||||
|
||||
/**
|
||||
* Layout wrapper for the user-management route subtree. Self-contained (the
|
||||
* original vendored AppLayout was removed when the folder was re-copied and it
|
||||
* pulled the un-migrated @/record-management chrome). Just renders the matched
|
||||
* child route; swap in the real IAM shell later if desired.
|
||||
*/
|
||||
function UmLayout(): ReactElement {
|
||||
return <Outlet />;
|
||||
}
|
||||
|
||||
/**
|
||||
* Role gate for the nested super-admin / org-admin route groups. Renders child
|
||||
* routes via <Outlet /> only when the user holds an allowed role (super admins
|
||||
* always pass); otherwise bounces to the overview.
|
||||
*/
|
||||
function PrivateRoute({ allowedRoles }: { allowedRoles: string[] }): ReactElement {
|
||||
const { user } = useAuth();
|
||||
const roleKeys = (user?.roles ?? [])
|
||||
.map((r) => r.key)
|
||||
.filter((k): k is string => Boolean(k));
|
||||
const allowed =
|
||||
isSuperAdmin(user) || allowedRoles.some((r) => roleKeys.includes(r));
|
||||
return allowed ? <Outlet /> : <Navigate to="/dashboard/overview" replace />;
|
||||
}
|
||||
|
||||
/**
|
||||
* Placeholder for user-management pages present in the source IAM app's route
|
||||
* map but not yet migrated into this backoffice. Keeps the route live and
|
||||
* honest instead of failing the build. See the `TODO(um-migration)` markers.
|
||||
*/
|
||||
function Placeholder({ name }: { name: string }): ReactElement {
|
||||
return (
|
||||
<div className="w-full p-6 text-sm text-gray-500">
|
||||
<p className="font-semibold text-gray-700">{name}</p>
|
||||
<p>This user-management page has not been migrated into the backoffice yet.</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* User-management route subtree. Mount inside the app's <Routes>:
|
||||
* <Routes>{UserManagementRoutes()}</Routes>
|
||||
* Child paths are relative (RRv6 forbids absolute paths on nested routes), so
|
||||
* they serve at /user-management/* under the app root.
|
||||
*/
|
||||
export function UserManagementRoutes(): ReactElement {
|
||||
return (
|
||||
<Route element={<UmLayout />}>
|
||||
<Route
|
||||
path="user-management"
|
||||
element={
|
||||
<div className="w-full flex flex-col p-4">
|
||||
{/* TODO(um-migration): UserManagementRedirect not migrated */}
|
||||
<Placeholder name="UserManagementRedirect" />
|
||||
</div>
|
||||
}
|
||||
/>
|
||||
{/* TODO(um-migration): UserProfileEditPage not migrated */}
|
||||
<Route
|
||||
path="user-management/archive/edit/:id"
|
||||
element={<Placeholder name="UserProfileEditPage" />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/position-management"
|
||||
element={<PositionManagementPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/migrated-records-management"
|
||||
element={<MigratedDataManagementPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/position-management/edit/:id"
|
||||
element={<EditPositionPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/position-management/new"
|
||||
element={<CreatePositionPage />}
|
||||
/>
|
||||
|
||||
{/* Super Admin */}
|
||||
<Route element={<PrivateRoute allowedRoles={["super_admin"]} />}>
|
||||
{/* TODO(um-migration): DashboardPage not migrated */}
|
||||
<Route
|
||||
path="user-management/dashboard"
|
||||
element={<Placeholder name="DashboardPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): OrganizationsPage not migrated */}
|
||||
<Route
|
||||
path="user-management/organizations"
|
||||
element={<Placeholder name="OrganizationsPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): OrganizationDetailPage not migrated */}
|
||||
<Route
|
||||
path="user-management/organizations/detail/:id"
|
||||
element={<Placeholder name="OrganizationDetailPage" />}
|
||||
/>
|
||||
<Route
|
||||
path="super-admin/organizations/:id"
|
||||
element={<Placeholder name="OrganizationDetailPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): NewOrganizationPage not migrated */}
|
||||
<Route
|
||||
path="user-management/organizations/new"
|
||||
element={<Placeholder name="NewOrganizationPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): EditOrganizationPage not migrated */}
|
||||
<Route
|
||||
path="user-management/organizations/edit/:id"
|
||||
element={<Placeholder name="EditOrganizationPage" />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/external_users"
|
||||
element={<PendingExternalUsers />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/migrated-records-management/view/:id"
|
||||
element={<ViewMigratedDataPage />}
|
||||
/>
|
||||
{/* TODO(um-migration): UploadedDocumentViewPage not migrated */}
|
||||
<Route
|
||||
path="user-management/external_users/view/:id"
|
||||
element={<Placeholder name="UploadedDocumentViewPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): UserProfileEditPage not migrated */}
|
||||
<Route
|
||||
path="user-management/external_users/edit/:id"
|
||||
element={<Placeholder name="UserProfileEditPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): OrganizationAdminsPage not migrated */}
|
||||
<Route
|
||||
path="user-management/organization_admins"
|
||||
element={<Placeholder name="OrganizationAdminsPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): AdminRegistrationPage not migrated */}
|
||||
<Route
|
||||
path="user-management/add_admin"
|
||||
element={<Placeholder name="AdminRegistrationPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): ActivityLogPage not migrated */}
|
||||
<Route
|
||||
path="user-management/activity_log"
|
||||
element={<Placeholder name="ActivityLogPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): SettingsPage not migrated */}
|
||||
<Route
|
||||
path="user-management/settings"
|
||||
element={<Placeholder name="SettingsPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): SuperAdminArchiveUsersPage not migrated */}
|
||||
<Route
|
||||
path="user-management/archive-users"
|
||||
element={<Placeholder name="SuperAdminArchiveUsersPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): SuperAdminArchivedPage not migrated */}
|
||||
<Route
|
||||
path="user-management/archived-organizations"
|
||||
element={<Placeholder name="SuperAdminArchivedPage" />}
|
||||
/>
|
||||
<Route path="user-management/templates" element={<TemplatePage />} />
|
||||
{/* TODO(um-migration): AddSitePage not migrated */}
|
||||
<Route
|
||||
path="user-management/add-site"
|
||||
element={<Placeholder name="AddSitePage" />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/web-management/Branding/Branding/:siteId"
|
||||
element={<Branding />}
|
||||
/>
|
||||
</Route>
|
||||
|
||||
{/* Org Admin */}
|
||||
<Route
|
||||
element={
|
||||
<PrivateRoute
|
||||
allowedRoles={["admin", "organization_admin", "unit_admin"]}
|
||||
/>
|
||||
}
|
||||
>
|
||||
{/* TODO(um-migration): OrgAdminDashboard not migrated */}
|
||||
<Route
|
||||
path="user-management/user_management-dashboard"
|
||||
element={<Placeholder name="OrgAdminDashboard" />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/user_management"
|
||||
element={<UserManagementPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/user-position-approval"
|
||||
element={<UserPositionApprovalPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/all-records"
|
||||
element={
|
||||
<WithPermission
|
||||
perms={["can:viewAllRecords"]}
|
||||
fallback={<Navigate to="/" replace />}
|
||||
>
|
||||
<AllRecordsPage />
|
||||
</WithPermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/all-records/:id"
|
||||
element={
|
||||
<WithPermission
|
||||
perms={["can:viewAllRecords"]}
|
||||
fallback={<Navigate to="/" replace />}
|
||||
>
|
||||
<AllRecordDetailsPage />
|
||||
</WithPermission>
|
||||
}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/content-management"
|
||||
element={<ContentManagement />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/bulk-upload"
|
||||
element={<BulkUserUpload />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/web-management/*"
|
||||
element={<WebManagementHomePage />}
|
||||
/>
|
||||
{/* TODO(um-migration): ArchiveUsersPage not migrated */}
|
||||
<Route
|
||||
path="user-management/archives"
|
||||
element={<Placeholder name="ArchiveUsersPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): SectorReportsPage not migrated */}
|
||||
<Route
|
||||
path="user-management/sector-reports"
|
||||
element={<Placeholder name="SectorReportsPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): ArchivedUnitsPositionsPage not migrated */}
|
||||
<Route
|
||||
path="user-management/archived"
|
||||
element={<Placeholder name="ArchivedUnitsPositionsPage" />}
|
||||
/>
|
||||
{/* TODO(um-migration): ConfigurationPage not migrated */}
|
||||
<Route
|
||||
path="user-management/organization-settings"
|
||||
element={<Placeholder name="ConfigurationPage" />}
|
||||
/>
|
||||
</Route>
|
||||
</Route>
|
||||
);
|
||||
}
|
||||
@@ -21,6 +21,28 @@ import AllRecordDetailsPage from "./all-records/pages/AllRecordDetailsPage";
|
||||
import Branding from "./web-Management/Branding/Branding";
|
||||
import { WebManagementHomePage } from "./web-Management/webManagement";
|
||||
import { AppLayout } from "./Applayout";
|
||||
import ActivityLogPage from "@/pages/ActivityLogPage";
|
||||
import AdminRegistrationPage from "@/pages/Organizations/AdminRegistrationPage";
|
||||
import OrganizationAdminsPage from "@/pages/OrganizationAdminsPage";
|
||||
import UserProfileEditPage from "@/pages/UserProfileEditPage";
|
||||
import UploadedDocumentViewPage from "@/pages/UploadedDocumentViewPage";
|
||||
import EditOrganizationPage from "@/pages/Organizations/EditOrganizationPage";
|
||||
import NewOrganizationPage from "@/pages/Organizations/NewOrganizationPage";
|
||||
import OrganizationDetailPage from "@/pages/Organizations/OrganizationDetailPage";
|
||||
import OrganizationsPage from "@/pages/Organizations/OrganizationsPage";
|
||||
import DashboardPage from "@/pages/DashboardPage";
|
||||
import AddSitePage from "@/pages/AddSitePage";
|
||||
import SuperAdminArchivedPage from "@/pages/SuperAdminArchivedPage";
|
||||
import SuperAdminArchiveUsersPage from "@/pages/SuperAdminArchiveUsersPage";
|
||||
import SettingsPage from "@/pages/SettingsPage";
|
||||
import OrgAdminDashboard from "@/pages/OrgAdminDashboard";
|
||||
import ContentManagementPage from "@/pages/ContentManagementPage";
|
||||
import BulkUploadPage from "@/pages/BulkUploadPage";
|
||||
import WebManagement from "@/pages/WebManagementPage";
|
||||
import ArchiveUsersPage from "@/pages/ArchiveUsersPage";
|
||||
import SectorReportsPage from "@/record-management/pages/User/sectorReports";
|
||||
import ArchivedUnitsPositionsPage from "@/pages/ArchivedUnitsPositionsPage";
|
||||
import ConfigurationPage from "@/pages/ConfigurationPage";
|
||||
import { SidebarProvider } from "@/shared/common/ui/sidebar";
|
||||
|
||||
/**
|
||||
@@ -29,9 +51,6 @@ import { SidebarProvider } from "@/shared/common/ui/sidebar";
|
||||
* pulled the un-migrated @/record-management chrome). Just renders the matched
|
||||
* child route; swap in the real IAM shell later if desired.
|
||||
*/
|
||||
function UmLayout(): ReactElement {
|
||||
return <Outlet />;
|
||||
}
|
||||
|
||||
/**
|
||||
* Role gate for the nested super-admin / org-admin route groups. Renders child
|
||||
@@ -48,20 +67,26 @@ function PrivateRoute({ allowedRoles }: { allowedRoles: string[] }): ReactElemen
|
||||
return allowed ? <Outlet /> : <Navigate to="/dashboard/overview" replace />;
|
||||
}
|
||||
|
||||
export const UserManagementRedirect = () => {
|
||||
const { user } = useAuth();
|
||||
const roles = user?.roles?.map((r) => r.key) || [];
|
||||
|
||||
if (roles.includes("super_admin")) {
|
||||
return <Navigate to="/user-management/dashboard" replace />;
|
||||
}
|
||||
|
||||
if (roles.includes("admin") || roles.includes("unit_admin")) {
|
||||
return <Navigate to="/user-management/user_management-dashboard" replace />;
|
||||
}
|
||||
|
||||
return <Navigate to="/" replace />; // fallback
|
||||
};
|
||||
|
||||
/**
|
||||
* Placeholder for user-management pages present in the source IAM app's route
|
||||
* map but not yet migrated into this backoffice. Keeps the route live and
|
||||
* honest instead of failing the build. See the `TODO(um-migration)` markers.
|
||||
*/
|
||||
function Placeholder({ name }: { name: string }): ReactElement {
|
||||
return (
|
||||
<div className="w-full p-6 text-sm text-gray-500">
|
||||
<p className="font-semibold text-gray-700">{name}</p>
|
||||
<p>This user-management page has not been migrated into the backoffice yet.</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* User-management route subtree. Mount inside the app's <Routes>:
|
||||
* <Routes>{UserManagementRoutes()}</Routes>
|
||||
@@ -71,13 +96,13 @@ function Placeholder({ name }: { name: string }): ReactElement {
|
||||
export function UserManagementRoutes(): ReactElement {
|
||||
return (
|
||||
<Route
|
||||
element={
|
||||
<SidebarProvider>
|
||||
<AppLayout />
|
||||
</SidebarProvider>
|
||||
}
|
||||
>
|
||||
{/* <Route
|
||||
element={
|
||||
<SidebarProvider>
|
||||
<AppLayout />
|
||||
</SidebarProvider>
|
||||
}
|
||||
>
|
||||
<Route
|
||||
path="user-management"
|
||||
element={
|
||||
<div className="w-full flex flex-col p-4">
|
||||
@@ -88,7 +113,7 @@ export function UserManagementRoutes(): ReactElement {
|
||||
<Route
|
||||
path="/user-management/archive/edit/:id"
|
||||
element={<UserProfileEditPage />}
|
||||
/> */}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/position-management"
|
||||
element={<PositionManagementPage />}
|
||||
@@ -112,15 +137,15 @@ export function UserManagementRoutes(): ReactElement {
|
||||
<PrivateRoute allowedRoles={["super_admin"]} />
|
||||
}
|
||||
>
|
||||
{/* <Route
|
||||
<Route
|
||||
path="user-management/dashboard"
|
||||
element={<DashboardPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organizations"
|
||||
element={<OrganizationsPage />}
|
||||
/> */}
|
||||
{/* <Route
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organizations/detail/:id"
|
||||
element={<OrganizationDetailPage />}
|
||||
/>
|
||||
@@ -131,11 +156,11 @@ export function UserManagementRoutes(): ReactElement {
|
||||
<Route
|
||||
path="user-management/organizations/new"
|
||||
element={<NewOrganizationPage />}
|
||||
/> */}
|
||||
{/* <Route
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organizations/edit/:id"
|
||||
element={<EditOrganizationPage />}
|
||||
/> */}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/external_users"
|
||||
element={<PendingExternalUsers />}
|
||||
@@ -144,15 +169,15 @@ export function UserManagementRoutes(): ReactElement {
|
||||
path="user-management/migrated-records-management/view/:id"
|
||||
element={<ViewMigratedDataPage />}
|
||||
/>
|
||||
{/* <Route
|
||||
<Route
|
||||
path="user-management/external_users/view/:id"
|
||||
element={<UploadedDocumentViewPage />}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/external_users/edit/:id"
|
||||
element={<UserProfileEditPage />}
|
||||
/> */}
|
||||
{/* <Route
|
||||
/>
|
||||
<Route
|
||||
path="user-management/organization_admins"
|
||||
element={<OrganizationAdminsPage />}
|
||||
/>
|
||||
@@ -163,8 +188,8 @@ export function UserManagementRoutes(): ReactElement {
|
||||
<Route
|
||||
path="user-management/activity_log"
|
||||
element={<ActivityLogPage />}
|
||||
/> */}
|
||||
{/* <Route
|
||||
/>
|
||||
<Route
|
||||
path="user-management/settings"
|
||||
element={<SettingsPage />}
|
||||
/>
|
||||
@@ -175,15 +200,15 @@ export function UserManagementRoutes(): ReactElement {
|
||||
<Route
|
||||
path="user-management/archived-organizations"
|
||||
element={<SuperAdminArchivedPage />}
|
||||
/> */}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/templates"
|
||||
element={<TemplatePage />}
|
||||
/>
|
||||
{/* <Route
|
||||
<Route
|
||||
path="user-management/add-site"
|
||||
element={<AddSitePage />}
|
||||
/> */}
|
||||
/>
|
||||
<Route
|
||||
path="/user-management/web-management/Branding/Branding/:siteId"
|
||||
element={<Branding />}
|
||||
@@ -202,10 +227,10 @@ export function UserManagementRoutes(): ReactElement {
|
||||
/>
|
||||
}
|
||||
>
|
||||
{/* <Route
|
||||
<Route
|
||||
path="user-management/user_management-dashboard"
|
||||
element={<OrgAdminDashboard />}
|
||||
/> */}
|
||||
/>
|
||||
<Route
|
||||
path="user-management/user_management"
|
||||
element={<UserManagementPage />}
|
||||
@@ -243,7 +268,7 @@ export function UserManagementRoutes(): ReactElement {
|
||||
</WithPermission>
|
||||
}
|
||||
/>
|
||||
{/* <Route
|
||||
<Route
|
||||
path="user-management/content-management"
|
||||
element={<ContentManagementPage />}
|
||||
/>
|
||||
@@ -254,8 +279,8 @@ export function UserManagementRoutes(): ReactElement {
|
||||
<Route
|
||||
path="user-management/web-management/*"
|
||||
element={<WebManagement />}
|
||||
/> */}
|
||||
{/* <Route
|
||||
/>
|
||||
<Route
|
||||
path="user-management/archives"
|
||||
element={<ArchiveUsersPage />}
|
||||
/>
|
||||
@@ -270,7 +295,7 @@ export function UserManagementRoutes(): ReactElement {
|
||||
<Route
|
||||
path="user-management/organization-settings"
|
||||
element={<ConfigurationPage />}
|
||||
/> */}
|
||||
/>
|
||||
</Route>
|
||||
</Route>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user