-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.tsx
More file actions
73 lines (68 loc) · 2.61 KB
/
Copy pathApp.tsx
File metadata and controls
73 lines (68 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import { useEffect } from "react";
import { Routes, Route, Navigate, useNavigate, useParams } from "react-router-dom";
import { Header } from "./components/Header";
import { NewEntryPill } from "./components/NewEntryPill";
import { SSEProvider } from "./SSEContext";
import { CatalogPage } from "./pages/CatalogPage";
import { NotebookPage } from "./pages/NotebookPage";
import { LineagePage } from "./pages/LineagePage";
import { LineageEntryPage } from "./pages/LineageEntryPage";
import { DiffPage } from "./pages/DiffPage";
import { CachePage } from "./pages/CachePage";
import { CustomizationsPage } from "./pages/CustomizationsPage";
import { EmptyStatePage } from "./pages/EmptyStatePage";
import { ProjectsPage } from "./pages/ProjectsPage";
import { api } from "./api";
function RootRedirect() {
const navigate = useNavigate();
useEffect(() => {
api
.projects()
.then(({ active }) => {
if (active) navigate(`/${active}/catalog`, { replace: true });
})
.catch(() => {});
}, [navigate]);
return <EmptyStatePage />;
}
function ProjectLayout({ children }: { children: React.ReactNode }) {
const { project } = useParams<{ project: string }>();
return (
<SSEProvider project={project ?? null}>
{project && <NewEntryPill project={project} />}
{children}
</SSEProvider>
);
}
export default function App() {
return (
<>
<Routes>
<Route
path="/:project/*"
element={
<ProjectLayout>
<Header />
<Routes>
<Route path="catalog" element={<CatalogPage />} />
<Route path="catalog/:hash" element={<CatalogPage />} />
<Route path="errors/:errorId" element={<CatalogPage />} />
<Route path="notebook" element={<NotebookPage />} />
<Route path="lineage" element={<LineagePage />} />
<Route path="lineage/:hash" element={<LineageEntryPage />} />
<Route path="cache" element={<CachePage />} />
<Route path="customizations" element={<CustomizationsPage />} />
<Route path="diff/:alias" element={<DiffPage />} />
<Route path="diff/:alias/:va/:vb" element={<DiffPage />} />
<Route path="*" element={<Navigate to="catalog" replace />} />
</Routes>
</ProjectLayout>
}
/>
<Route path="/projects" element={<><Header /><ProjectsPage /></>} />
<Route path="/" element={<><Header /><RootRedirect /></>} />
<Route path="*" element={<><Header /><EmptyStatePage /></>} />
</Routes>
</>
);
}