Lazy load pages
This commit is contained in:
parent
53c1921a87
commit
4c16a971a2
|
|
@ -1,4 +1,4 @@
|
||||||
import { useState } from 'react';
|
import { useState, Suspense, lazy } from 'react';
|
||||||
import {
|
import {
|
||||||
BrowserRouter,
|
BrowserRouter,
|
||||||
Switch,
|
Switch,
|
||||||
|
|
@ -6,14 +6,13 @@ import {
|
||||||
} from 'react-router-dom';
|
} from 'react-router-dom';
|
||||||
import { ThemeProvider, Global } from '@emotion/react';
|
import { ThemeProvider, Global } from '@emotion/react';
|
||||||
|
|
||||||
import { Settings } from 'components';
|
import { Settings, Loading } from 'components';
|
||||||
import {
|
|
||||||
Home,
|
|
||||||
Event,
|
|
||||||
} from 'pages';
|
|
||||||
|
|
||||||
import theme from 'theme';
|
import theme from 'theme';
|
||||||
|
|
||||||
|
const Home = lazy(() => import('pages/Home/Home'));
|
||||||
|
const Event = lazy(() => import('pages/Event/Event'));
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
||||||
const [isDark, setIsDark] = useState(darkQuery.matches);
|
const [isDark, setIsDark] = useState(darkQuery.matches);
|
||||||
|
|
@ -61,8 +60,16 @@ const App = () => {
|
||||||
})}
|
})}
|
||||||
/>
|
/>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route path="/" component={Home} exact />
|
<Route path="/" exact render={props => (
|
||||||
<Route path="/:id" component={Event} exact />
|
<Suspense fallback={<Loading />}>
|
||||||
|
<Home {...props} />
|
||||||
|
</Suspense>
|
||||||
|
)} />
|
||||||
|
<Route path="/:id" exact render={props => (
|
||||||
|
<Suspense fallback={<Loading />}>
|
||||||
|
<Event {...props} />
|
||||||
|
</Suspense>
|
||||||
|
)} />
|
||||||
</Switch>
|
</Switch>
|
||||||
|
|
||||||
<Settings />
|
<Settings />
|
||||||
|
|
|
||||||
12
crabfit-frontend/src/components/Loading/Loading.tsx
Normal file
12
crabfit-frontend/src/components/Loading/Loading.tsx
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
import {
|
||||||
|
Wrapper,
|
||||||
|
Loader,
|
||||||
|
} from './loadingStyle';
|
||||||
|
|
||||||
|
const Loading = () => (
|
||||||
|
<Wrapper>
|
||||||
|
<Loader />
|
||||||
|
</Wrapper>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default Loading;
|
||||||
26
crabfit-frontend/src/components/Loading/loadingStyle.ts
Normal file
26
crabfit-frontend/src/components/Loading/loadingStyle.ts
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
import styled from '@emotion/styled';
|
||||||
|
|
||||||
|
export const Wrapper = styled.main`
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const Loader = styled.div`
|
||||||
|
@keyframes load {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
border: 3px solid ${props => props.theme.primary};
|
||||||
|
border-left-color: transparent;
|
||||||
|
border-radius: 100px;
|
||||||
|
animation: load .5s linear infinite;
|
||||||
|
`;
|
||||||
|
|
@ -9,6 +9,7 @@ export { default as Legend } from './Legend/Legend';
|
||||||
export { default as AvailabilityViewer } from './AvailabilityViewer/AvailabilityViewer';
|
export { default as AvailabilityViewer } from './AvailabilityViewer/AvailabilityViewer';
|
||||||
export { default as AvailabilityEditor } from './AvailabilityEditor/AvailabilityEditor';
|
export { default as AvailabilityEditor } from './AvailabilityEditor/AvailabilityEditor';
|
||||||
export { default as Error } from './Error/Error';
|
export { default as Error } from './Error/Error';
|
||||||
|
export { default as Loading } from './Loading/Loading';
|
||||||
|
|
||||||
export { default as Center } from './Center/Center';
|
export { default as Center } from './Center/Center';
|
||||||
export { default as Donate } from './Donate/Donate';
|
export { default as Donate } from './Donate/Donate';
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue