File size: 1,709 Bytes
2eb87e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { Layout } from "./components/Layout";
import { ProductHomePage } from "./features/home/ProductHomePage";
import { SubmitPage } from "./features/submit/SubmitPage";
import { ProjectPage } from "./features/project/ProjectPage";
import { AboutPage } from "./features/about/AboutPage";
import { MyProjectsPage } from "./features/my/MyProjectsPage";
import { PopupCallbackPage } from "./features/auth/PopupCallbackPage";

const qc = new QueryClient({
  defaultOptions: {
    queries: {
      retry: 1,
      refetchOnWindowFocus: false,
    },
  },
});

/** 单着陆页:深色 deck(task-5ee34751 融合定稿)。 */
const Landing = ProductHomePage;

export function App() {
  return (
    <QueryClientProvider client={qc}>
      <BrowserRouter future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
        <Routes>
          <Route element={<Layout />}>
            <Route index element={<Landing />} />
            <Route path="pulse" element={<Navigate to="/" replace />} />
            <Route path="submit" element={<SubmitPage />} />
            <Route path="p/:owner/:repo" element={<ProjectPage />} />
            <Route path="my" element={<MyProjectsPage />} />
            <Route path="about" element={<AboutPage />} />
            <Route path="*" element={<Navigate to="/" replace />} />
          </Route>
          {/* Popup OAuth callback — standalone (no Layout) */}
          <Route path="/auth/popup-callback" element={<PopupCallbackPage />} />
        </Routes>
      </BrowserRouter>
    </QueryClientProvider>
  );
}