import { BrowserRouter, Routes, Route, NavLink, useLocation, } from "react-router-dom"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ThemeProvider } from "@mui/material/styles"; import { AppBar, Typography, Box, Tabs, Tab, Container, CssBaseline, Chip, useMediaQuery, Button, Stack, Card, CardContent, CircularProgress, } from "@mui/material"; import { useEffect, useMemo } from "react"; import { AuthProvider, useAuth } from "react-oidc-context"; import { Dashboard } from "./pages/Dashboard"; import { Monitoring } from "./pages/Monitoring"; import { Media } from "./pages/Media"; import { UsersPage } from "./pages/Users"; import { FileBrowser } from "./pages/FileBrowser"; import { getAppTheme } from "./theme"; import { getOidcConfig, isOidcConfigured, setAccessToken } from "./auth"; const queryClient = new QueryClient({ defaultOptions: { queries: { retry: 1, refetchOnWindowFocus: false } }, }); function Shell({ darkMode, authLabel, onSignOut, }: { darkMode: boolean; authLabel?: string; onSignOut?: () => void; }) { const location = useLocation(); const current = location.pathname; const isMobile = useMediaQuery("(max-width: 900px)"); return ( <> M Manage Media operations dashboard {authLabel && ( )} {onSignOut && ( )} } /> } /> } /> } /> } /> ); } function LoadingScreen({ label }: { label: string }) { return ( {label} ); } function SignInScreen({ onSignIn }: { onSignIn: () => void }) { return ( Sign in required Use your Authentik account to access Manage. ); } function AuthenticatedApp({ darkMode }: { darkMode: boolean }) { const auth = useAuth(); useEffect(() => { setAccessToken(auth.user?.access_token ?? null); }, [auth.user?.access_token]); const authLabel = useMemo(() => { const profile = auth.user?.profile as Record | undefined; return String( profile?.name ?? profile?.preferred_username ?? profile?.email ?? auth.user?.profile?.sub ?? "Authenticated", ); }, [auth.user]); if (auth.isLoading || auth.activeNavigator) { return ; } if (auth.error) { return ( ); } if (!auth.isAuthenticated) { return void auth.signinRedirect()} />; } return ( void auth.signoutRedirect()} /> ); } function AppInner() { const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); const theme = useMemo( () => getAppTheme(prefersDarkMode ? "dark" : "light"), [prefersDarkMode], ); return ( {isOidcConfigured() ? ( ) : ( )} ); } export default function App() { return ; }