import * as React from "react"; import { useAuth, AuthPage } from "../react-auth"; import { UploadProvider } from "./providers/UploadProvider"; import AdminLayout from "./components/AdminLayout"; import ResourceView from "./components/ResourceView"; import { getAppConfig } from "./config"; import { initializeApiClients } from "./api/client"; import { AppConfig } from "./types/config"; import { Box, Typography, Paper, CircularProgress } from "@mui/material"; import { Routes, Route, useNavigate, useParams, } from "react-router-dom"; import { ConfigContext } from "./providers/ConfigContext"; function Dashboard({ basePath }: { basePath: string }) { const config = React.useContext(ConfigContext); const navigate = useNavigate(); const resources = config?.resources || []; const visibleResources = resources.filter((res) => !res.hidden); return ( Welcome to the Admin Panel Select a resource from the sidebar to manage data. {visibleResources.map((res) => ( navigate(`/admin/${res.name}`)} > {res.pluralLabel} Manage {res.pluralLabel.toLowerCase()} ))} ); } import ProfileView from "./components/ProfileView"; function AdminApp({ basePath }: { basePath: string }) { const { currentUser, login, logout, loading, error } = useAuth(); const config = React.useContext(ConfigContext); const navigate = useNavigate(); const resources = config?.resources || []; const visibleResources = resources.filter((res) => !res.hidden); if (!currentUser) { return ( {}} // Disable registration for Admin loading={loading} error={error} onSwitchMode={() => {}} onBack={() => {}} currentUser={null} /> ); } return ( navigate(`/admin/${name}`)} resources={visibleResources} > } /> } /> } /> } /> } /> } /> ); } function ResourceRouteWrapper() { const { resourceName } = useParams(); const config = React.useContext(ConfigContext); const selectedResource = config?.resources.find((r) => r.name === resourceName); if (!selectedResource) return Resource not found; return ; } interface AdminProps { basePath?: string; resourceOverrides?: Record; profileConfig?: any; } export default function Admin({ basePath = "/admin", resourceOverrides = {}, profileConfig = {} }: AdminProps) { const existingConfig = React.useContext(ConfigContext); const [config, setConfig] = React.useState(existingConfig); React.useEffect(() => { if (!existingConfig) { getAppConfig(resourceOverrides, profileConfig).then((cfg) => { initializeApiClients(cfg.baseUrl, cfg.authBaseUrl); setConfig(cfg); }); } }, [resourceOverrides, profileConfig, existingConfig]); if (!config) { return ( ); } const content = ( ); // If we have an existing config, we are already inside a Provider and QueryClient if (existingConfig) { return content; } // Fallback for standalone usage return ( {content} ); }