Files
qwerty-learner/src/index.tsx
2024-09-06 12:50:25 +08:00

61 lines
2.1 KiB
TypeScript

import Loading from './components/Loading'
import './index.css'
import { ErrorBook } from './pages/ErrorBook'
import MobilePage from './pages/Mobile'
import TypingPage from './pages/Typing'
import { isOpenDarkModeAtom } from '@/store'
import 'animate.css'
import { useAtomValue } from 'jotai'
import React, { Suspense, lazy, useEffect, useState } from 'react'
import 'react-app-polyfill/stable'
import { createRoot } from 'react-dom/client'
import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'
const AnalysisPage = lazy(() => import('./pages/Analysis'))
const GalleryPage = lazy(() => import('./pages/Gallery-N'))
function Root() {
const darkMode = useAtomValue(isOpenDarkModeAtom)
useEffect(() => {
darkMode ? document.documentElement.classList.add('dark') : document.documentElement.classList.remove('dark')
}, [darkMode])
const [isMobile, setIsMobile] = useState(window.innerWidth <= 600)
useEffect(() => {
const handleResize = () => {
setIsMobile(window.innerWidth <= 600)
}
window.addEventListener('resize', handleResize)
return () => window.removeEventListener('resize', handleResize)
}, [])
return (
<React.StrictMode>
<BrowserRouter basename={REACT_APP_DEPLOY_ENV === 'pages' ? '/qwerty-learner' : ''}>
<Suspense fallback={<Loading />}>
<Routes>
{isMobile ? (
<Route path="/*" element={<Navigate to="/mobile" />} />
) : (
<>
<Route index element={<TypingPage />} />
<Route path="/gallery" element={<GalleryPage />} />
<Route path="/analysis" element={<AnalysisPage />} />
<Route path="/error-book" element={<ErrorBook />} />
<Route path="/*" element={<Navigate to="/" />} />
</>
)}
<Route path="/mobile" element={<MobilePage />} />
</Routes>
</Suspense>
</BrowserRouter>
</React.StrictMode>
)
}
const container = document.getElementById('root')
container && createRoot(container).render(<Root />)