11import classNames from 'classnames' ;
22import { useEffect , useRef } from 'react' ;
33import { ErrorBoundary } from 'react-error-boundary' ;
4- import { Outlet , useLocation , useParams } from 'react-router-dom' ;
4+ import { Outlet , useLocation , useNavigate , useParams } from 'react-router-dom' ;
55import { BarLoader } from 'react-spinners' ;
66import { ErrorFallback , LastFetchedAt , NoteBox , NotifyCompRemoteBar } from '@/components' ;
77import { Container } from '@/components/Container' ;
@@ -15,6 +15,7 @@ export function CompetitionLayout() {
1515 const { online } = useApp ( ) ;
1616 const { competitionId } = useParams ( ) ;
1717 const { pathname } = useLocation ( ) ;
18+ const navigate = useNavigate ( ) ;
1819
1920 const ref = useRef < HTMLDivElement > ( null ) ;
2021
@@ -31,8 +32,28 @@ export function CompetitionLayout() {
3132
3233 const Header = (
3334 < nav className = "z-10 flex justify-center w-full shadow-md shadow-tertiary-dark print:hidden bg-panel" >
34- < Container className = "justify-between md:flex-row" >
35- < div className = "flex" >
35+ < Container className = "justify-between md:flex-row space-y-2 md:space-y-0" >
36+ < div className = "flex md:hidden w-full p-2" >
37+ < label className = "flex w-full items-center space-x-2" htmlFor = "competition-section-nav" >
38+ < span className = "type-meta text-muted" > Section</ span >
39+ < select
40+ className = "w-full rounded-md border border-tertiary-weak bg-panel p-2"
41+ id = "competition-section-nav"
42+ onChange = { ( event ) => {
43+ void navigate ( event . target . value ) ;
44+ } }
45+ value = { pathname } >
46+ { tabs
47+ . filter ( ( tab ) => ! tab . hiddenOnMobile )
48+ . map ( ( tab ) => (
49+ < option key = { tab . href } value = { tab . href } >
50+ { tab . text }
51+ </ option >
52+ ) ) }
53+ </ select >
54+ </ label >
55+ </ div >
56+ < div className = "hidden md:flex" >
3657 { tabs . map ( ( i ) => (
3758 < StyledNavLink
3859 key = { i . href }
0 commit comments