1- import { createBrowserRouter , RouterProvider } from 'react-router' ;
1+ import { createBrowserRouter , Navigate , RouterProvider } from 'react-router' ;
22import { TooltipProvider } from '@/components/ui/tooltip' ;
33import { AppShell } from '@/components/AppShell' ;
44import { NetworkErrorProvider } from '@/components/NetworkErrorBanner' ;
55import { AuthProvider } from '@/hooks/useAuth' ;
6- import { HomeStub } from '@/pages/HomeStub' ;
6+ import { ApiQueryClientProvider } from '@/lib/queryClient' ;
7+ import { Home } from '@/screens/Home' ;
8+ import { ProjectsIndex } from '@/screens/ProjectsIndex' ;
9+ import { ProjectDetail } from '@/screens/ProjectDetail' ;
10+ import { PeopleIndex } from '@/screens/PeopleIndex' ;
11+ import { PersonDetail } from '@/screens/PersonDetail' ;
12+ import { HelpWantedIndex } from '@/screens/HelpWantedIndex' ;
13+ import { ProjectUpdatesFeed } from '@/screens/ProjectUpdatesFeed' ;
14+ import { ProjectBuzzFeed } from '@/screens/ProjectBuzzFeed' ;
15+ import { TagsOverview } from '@/screens/TagsOverview' ;
16+ import { TagsNamespace } from '@/screens/TagsNamespace' ;
17+ import { TagDetail } from '@/screens/TagDetail' ;
18+ import { Volunteer } from '@/screens/Volunteer' ;
19+ import { Sponsor } from '@/screens/Sponsor' ;
720import { ComingSoon } from '@/pages/ComingSoon' ;
821import { NotFound } from '@/pages/NotFound' ;
922import { LoginPlaceholder } from '@/pages/LoginPlaceholder' ;
@@ -12,35 +25,51 @@ const router = createBrowserRouter([
1225 {
1326 element : < AppShell /> ,
1427 children : [
15- { path : '/' , element : < HomeStub /> } ,
16- { path : '/projects' , element : < ComingSoon /> } ,
28+ { path : '/' , element : < Home /> } ,
29+ { path : '/projects' , element : < ProjectsIndex /> } ,
1730 { path : '/projects/create' , element : < ComingSoon /> } ,
18- { path : '/projects/:slug' , element : < ComingSoon /> } ,
31+ { path : '/projects/:slug' , element : < ProjectDetail /> } ,
1932 { path : '/projects/:slug/edit' , element : < ComingSoon /> } ,
20- { path : '/help-wanted' , element : < ComingSoon /> } ,
21- { path : '/members' , element : < ComingSoon /> } ,
22- { path : '/members/:slug' , element : < ComingSoon /> } ,
23- { path : '/volunteer' , element : < ComingSoon /> } ,
24- { path : '/sponsor' , element : < ComingSoon /> } ,
33+ { path : '/projects/:slug/updates/:number' , element : < ProjectDetail anchor = "update" /> } ,
34+ { path : '/projects/:slug/buzz/:buzzSlug' , element : < ProjectDetail anchor = "buzz" /> } ,
35+ { path : '/projects/:slug/buzz/new' , element : < ComingSoon /> } ,
36+ { path : '/help-wanted' , element : < HelpWantedIndex /> } ,
37+ { path : '/people' , element : < Navigate to = "/members" replace /> } ,
38+ { path : '/members' , element : < PeopleIndex /> } ,
39+ { path : '/members/:slug' , element : < PersonDetail /> } ,
40+ { path : '/members/:slug/edit' , element : < ComingSoon /> } ,
41+ { path : '/project-updates' , element : < ProjectUpdatesFeed /> } ,
42+ { path : '/project-buzz' , element : < ProjectBuzzFeed /> } ,
43+ { path : '/tags' , element : < TagsOverview /> } ,
44+ { path : '/tags/:namespace' , element : < TagsNamespace /> } ,
45+ { path : '/tags/:namespace/:slug' , element : < TagDetail /> } ,
46+ { path : '/volunteer' , element : < Volunteer /> } ,
47+ { path : '/sponsor' , element : < Sponsor /> } ,
2548 { path : '/account' , element : < ComingSoon /> } ,
26- { path : '/chat' , element : < ComingSoon /> } ,
27- { path : '/search' , element : < ComingSoon /> } ,
49+ { path : '/search' , element : < SearchRedirect /> } ,
2850 { path : '/pages/:slug' , element : < ComingSoon /> } ,
2951 { path : '/contact' , element : < ComingSoon /> } ,
30- { path : '/tags/:namespace/:slug' , element : < ComingSoon /> } ,
3152 { path : '/login' , element : < LoginPlaceholder /> } ,
3253 { path : '*' , element : < NotFound /> } ,
3354 ] ,
3455 } ,
3556] ) ;
3657
58+ // /search?q=… isn't a separate page in v1 — redirect to /projects with the query preserved.
59+ function SearchRedirect ( ) {
60+ const q = new URLSearchParams ( window . location . search ) . get ( 'q' ) ;
61+ return < Navigate to = { `/projects${ q ? `?q=${ encodeURIComponent ( q ) } ` : '' } ` } replace /> ;
62+ }
63+
3764export function App ( ) {
3865 return (
3966 < TooltipProvider >
4067 < NetworkErrorProvider >
41- < AuthProvider >
42- < RouterProvider router = { router } />
43- </ AuthProvider >
68+ < ApiQueryClientProvider >
69+ < AuthProvider >
70+ < RouterProvider router = { router } />
71+ </ AuthProvider >
72+ </ ApiQueryClientProvider >
4473 </ NetworkErrorProvider >
4574 </ TooltipProvider >
4675 ) ;
0 commit comments