fix(client): do not unmount default layout on navigate
This commit is contained in:
parent
a284b296fc
commit
28ee458ceb
@ -5,6 +5,7 @@ import { Provider } from 'react-redux';
|
||||
import { createStore } from './src/redux/createStore';
|
||||
import AppMountNotifier from './src/components/AppMountNotifier';
|
||||
import GuideNavContextProvider from './src/contexts/GuideNavigationContext';
|
||||
import DefaultLayout from './src/components/layouts/Default';
|
||||
|
||||
const store = createStore();
|
||||
|
||||
@ -21,3 +22,23 @@ export const wrapRootElement = ({ element }) => {
|
||||
wrapRootElement.propTypes = {
|
||||
element: PropTypes.any
|
||||
};
|
||||
|
||||
export const wrapPageElement = ({ element, props }) => {
|
||||
const {
|
||||
location: { pathname }
|
||||
} = props;
|
||||
if (pathname === '/') {
|
||||
return (
|
||||
<DefaultLayout disableSettings={true} landingPage={true}>
|
||||
{element}
|
||||
</DefaultLayout>
|
||||
);
|
||||
}
|
||||
return <DefaultLayout>{element}</DefaultLayout>;
|
||||
};
|
||||
|
||||
wrapPageElement.propTypes = {
|
||||
element: PropTypes.any,
|
||||
location: PropTypes.objectOf({ pathname: PropTypes.string }),
|
||||
props: PropTypes.any
|
||||
};
|
||||
|
@ -7,6 +7,7 @@ import headComponents from './src/head';
|
||||
import { createStore } from './src/redux/createStore';
|
||||
|
||||
import GuideNavContextProvider from './src/contexts/GuideNavigationContext';
|
||||
import DefaultLayout from './src/components/layouts/Default';
|
||||
|
||||
const store = createStore();
|
||||
|
||||
@ -22,6 +23,26 @@ wrapRootElement.propTypes = {
|
||||
element: PropTypes.any
|
||||
};
|
||||
|
||||
export const wrapPageElement = ({ element, props }) => {
|
||||
const {
|
||||
location: { pathname }
|
||||
} = props;
|
||||
if (pathname === '/') {
|
||||
return (
|
||||
<DefaultLayout disableSettings={true} landingPage={true}>
|
||||
{element}
|
||||
</DefaultLayout>
|
||||
);
|
||||
}
|
||||
return <DefaultLayout>{element}</DefaultLayout>;
|
||||
};
|
||||
|
||||
wrapPageElement.propTypes = {
|
||||
element: PropTypes.any,
|
||||
location: PropTypes.objectOf({ pathname: PropTypes.string }),
|
||||
props: PropTypes.any
|
||||
};
|
||||
|
||||
export const onRenderBody = ({ setHeadComponents, setPostBodyComponents }) => {
|
||||
setHeadComponents([...headComponents]);
|
||||
setPostBodyComponents(
|
||||
|
@ -5,7 +5,6 @@ import { connect } from 'react-redux';
|
||||
import { isEmpty } from 'lodash';
|
||||
|
||||
import Loader from '../components/helpers/Loader';
|
||||
import Layout from '../components/layouts/Default';
|
||||
import {
|
||||
userByNameSelector,
|
||||
userProfileFetchStateSelector,
|
||||
@ -61,11 +60,9 @@ class ShowFourOhFour extends Component {
|
||||
// We don't know if /:maybeUser is a user or not, we will show the loader
|
||||
// until we get a response from the API
|
||||
return (
|
||||
<Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
</Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
if (isEmpty(requestedUser)) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
@ -16,7 +16,6 @@ import {
|
||||
import { submitNewAbout, updateUserFlag, verifyCert } from '../redux/settings';
|
||||
import { createFlashMessage } from '../components/Flash/redux';
|
||||
|
||||
import Layout from '../components/layouts/Default';
|
||||
import Spacer from '../components/helpers/Spacer';
|
||||
import Loader from '../components/helpers/Loader';
|
||||
import FullWidthRow from '../components/helpers/FullWidthRow';
|
||||
@ -167,11 +166,9 @@ function ShowSettings(props) {
|
||||
|
||||
if (showLoading) {
|
||||
return (
|
||||
<Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
</Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -180,7 +177,7 @@ function ShowSettings(props) {
|
||||
}
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Settings | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -264,7 +261,7 @@ function ShowSettings(props) {
|
||||
{/* <DangerZone /> */}
|
||||
</main>
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,9 @@
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Grid, Panel, Button } from '@freecodecamp/react-bootstrap';
|
||||
import Helmet from 'react-helmet';
|
||||
|
||||
import env from '../../config/env.json';
|
||||
import Layout from '../components/layouts/Default';
|
||||
import FullWidthRow from '../components/helpers/FullWidthRow';
|
||||
import { Spacer } from '../components/helpers';
|
||||
|
||||
@ -12,7 +11,7 @@ const { apiLocation } = env;
|
||||
|
||||
function ShowUnsubscribed({ unsubscribeId }) {
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>You have been unsubscribed | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -41,7 +40,7 @@ function ShowUnsubscribed({ unsubscribeId }) {
|
||||
) : null}
|
||||
</main>
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { Component } from 'react';
|
||||
import React, { Component, Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { Link, navigate } from 'gatsby';
|
||||
@ -20,7 +20,6 @@ import {
|
||||
userSelector,
|
||||
reportUser
|
||||
} from '../redux';
|
||||
import Layout from '../components/layouts/Default';
|
||||
import { Spacer, Loader, FullWidthRow } from '../components/helpers';
|
||||
|
||||
const propTypes = {
|
||||
@ -91,52 +90,48 @@ class ShowUser extends Component {
|
||||
const { pending, complete, errored } = userFetchState;
|
||||
if (pending && !complete) {
|
||||
return (
|
||||
<Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
</Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if ((complete || errored) && !isSignedIn) {
|
||||
this.setNavigationTimer();
|
||||
return (
|
||||
<Layout>
|
||||
<main>
|
||||
<FullWidthRow>
|
||||
<Spacer />
|
||||
<Spacer />
|
||||
<Panel bsStyle='info'>
|
||||
<Panel.Heading>
|
||||
<Panel.Title componentClass='h3'>
|
||||
You need to be signed in to report a user
|
||||
</Panel.Title>
|
||||
</Panel.Heading>
|
||||
<Panel.Body className='text-center'>
|
||||
<Spacer />
|
||||
<p>
|
||||
You will be redirected to sign in to freeCodeCamp.org
|
||||
automatically in 5 seconds
|
||||
</p>
|
||||
<p>
|
||||
<Link to='/signin'>
|
||||
Or you can here if you do not want to wait
|
||||
</Link>
|
||||
</p>
|
||||
<Spacer />
|
||||
</Panel.Body>
|
||||
</Panel>
|
||||
</FullWidthRow>
|
||||
</main>
|
||||
</Layout>
|
||||
<main>
|
||||
<FullWidthRow>
|
||||
<Spacer />
|
||||
<Spacer />
|
||||
<Panel bsStyle='info'>
|
||||
<Panel.Heading>
|
||||
<Panel.Title componentClass='h3'>
|
||||
You need to be signed in to report a user
|
||||
</Panel.Title>
|
||||
</Panel.Heading>
|
||||
<Panel.Body className='text-center'>
|
||||
<Spacer />
|
||||
<p>
|
||||
You will be redirected to sign in to freeCodeCamp.org
|
||||
automatically in 5 seconds
|
||||
</p>
|
||||
<p>
|
||||
<Link to='/signin'>
|
||||
Or you can here if you do not want to wait
|
||||
</Link>
|
||||
</p>
|
||||
<Spacer />
|
||||
</Panel.Body>
|
||||
</Panel>
|
||||
</FullWidthRow>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
||||
const { textarea } = this.state;
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Report a users profile | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -170,7 +165,7 @@ class ShowUser extends Component {
|
||||
</form>
|
||||
</Col>
|
||||
</FullWidthRow>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -3,8 +3,6 @@ import Helmet from 'react-helmet';
|
||||
import Spinner from 'react-spinkit';
|
||||
import { Link } from 'gatsby';
|
||||
|
||||
import Layout from '../layouts/Default';
|
||||
|
||||
import notFoundLogo from '../../images/freeCodeCamp-404.svg';
|
||||
import { quotes } from '../../resources/quotes.json';
|
||||
|
||||
@ -30,33 +28,31 @@ class NotFoundPage extends Component {
|
||||
|
||||
render() {
|
||||
return (
|
||||
<Layout>
|
||||
<div className='notfound-page-wrapper'>
|
||||
<Helmet title='Page Not Found | freeCodeCamp' />
|
||||
<img alt='404 Not Found' src={notFoundLogo} />
|
||||
<h1>NOT FOUND</h1>
|
||||
{this.state.randomQuote ? (
|
||||
<div>
|
||||
<p>
|
||||
We couldn't find what you were looking for, but here is a
|
||||
quote:
|
||||
<div className='notfound-page-wrapper'>
|
||||
<Helmet title='Page Not Found | freeCodeCamp' />
|
||||
<img alt='404 Not Found' src={notFoundLogo} />
|
||||
<h1>NOT FOUND</h1>
|
||||
{this.state.randomQuote ? (
|
||||
<div>
|
||||
<p>
|
||||
We couldn't find what you were looking for, but here is a
|
||||
quote:
|
||||
</p>
|
||||
<div className='quote-wrapper'>
|
||||
<p className='quote'>
|
||||
<span>“</span>
|
||||
{this.state.randomQuote.quote}
|
||||
</p>
|
||||
<div className='quote-wrapper'>
|
||||
<p className='quote'>
|
||||
<span>“</span>
|
||||
{this.state.randomQuote.quote}
|
||||
</p>
|
||||
<p className='author'>- {this.state.randomQuote.author}</p>
|
||||
</div>
|
||||
<p className='author'>- {this.state.randomQuote.author}</p>
|
||||
</div>
|
||||
) : (
|
||||
<Spinner color='#006400' name='ball-clip-rotate-multiple' />
|
||||
)}
|
||||
<Link className='btn-curriculum' to='/learn'>
|
||||
View the Curriculum
|
||||
</Link>
|
||||
</div>
|
||||
</Layout>
|
||||
</div>
|
||||
) : (
|
||||
<Spinner color='#006400' name='ball-clip-rotate-multiple' />
|
||||
)}
|
||||
<Link className='btn-curriculum' to='/learn'>
|
||||
View the Curriculum
|
||||
</Link>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,9 @@
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { StaticQuery, graphql } from 'gatsby';
|
||||
import { Grid, Col, Row } from '@freecodecamp/react-bootstrap';
|
||||
|
||||
import { NavigationContext } from '../../contexts/GuideNavigationContext';
|
||||
import DefaultLayout from './Default';
|
||||
import SideNav from './components/guide/SideNav';
|
||||
import Spacer from '../helpers/Spacer';
|
||||
|
||||
@ -59,7 +58,7 @@ const Layout = ({ children }) => (
|
||||
expandedState,
|
||||
toggleExpandedState
|
||||
}) => (
|
||||
<DefaultLayout>
|
||||
<Fragment>
|
||||
<Spacer size={2} />
|
||||
<Grid>
|
||||
<Row>
|
||||
@ -87,7 +86,7 @@ const Layout = ({ children }) => (
|
||||
</Col>
|
||||
</Row>
|
||||
</Grid>
|
||||
</DefaultLayout>
|
||||
</Fragment>
|
||||
)}
|
||||
</NavigationContext>
|
||||
);
|
||||
|
@ -1,7 +1,6 @@
|
||||
import React, { Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import DefaultLayout from './Default';
|
||||
import DonationModal from '../Donation';
|
||||
|
||||
import 'prismjs/themes/prism.css';
|
||||
@ -11,9 +10,7 @@ import './learn.css';
|
||||
function LearnLayout({ children }) {
|
||||
return (
|
||||
<Fragment>
|
||||
<DefaultLayout>
|
||||
<main id='learn-app-wrapper'>{children}</main>
|
||||
</DefaultLayout>
|
||||
<main id='learn-app-wrapper'>{children}</main>
|
||||
<DonationModal />
|
||||
</Fragment>
|
||||
);
|
||||
|
@ -4,7 +4,6 @@ import { Alert, Button, Grid, Row, Col } from '@freecodecamp/react-bootstrap';
|
||||
import Helmet from 'react-helmet';
|
||||
import { Link } from 'gatsby';
|
||||
|
||||
import Layout from '../layouts/Default';
|
||||
import CurrentChallengeLink from '../helpers/CurrentChallengeLink';
|
||||
import FullWidthRow from '../helpers/FullWidthRow';
|
||||
import Spacer from '../helpers/Spacer';
|
||||
@ -44,7 +43,7 @@ function TakeMeToTheChallenges() {
|
||||
|
||||
function renderIsLocked(username) {
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>{username} | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -67,7 +66,7 @@ function renderIsLocked(username) {
|
||||
<TakeMeToTheChallenges />
|
||||
</FullWidthRow>
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
@ -131,7 +130,7 @@ function Profile({ user, isSessionUser }) {
|
||||
return renderIsLocked(username);
|
||||
}
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>{username} | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -166,7 +165,7 @@ function Profile({ user, isSessionUser }) {
|
||||
/>
|
||||
) : null}
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,16 +1,15 @@
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
import { Grid } from '@freecodecamp/react-bootstrap';
|
||||
import Helmet from 'react-helmet';
|
||||
|
||||
import honesty from '../resources/honesty-policy';
|
||||
|
||||
import Layout from '../components/layouts/Default';
|
||||
import Spacer from '../components/helpers/Spacer';
|
||||
import FullWidthRow from '../components/helpers/FullWidthRow';
|
||||
|
||||
function AcademicHonesty() {
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Academic Honesty Policy | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -22,7 +21,7 @@ function AcademicHonesty() {
|
||||
{honesty}
|
||||
</FullWidthRow>
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { Component } from 'react';
|
||||
import React, { Component, Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
@ -13,7 +13,6 @@ import {
|
||||
} from '@freecodecamp/react-bootstrap';
|
||||
import Helmet from 'react-helmet';
|
||||
|
||||
import Layout from '../components/layouts/Default';
|
||||
import { ButtonSpacer, Spacer } from '../components/helpers';
|
||||
import { acceptTerms, userSelector } from '../redux';
|
||||
import { createSelector } from 'reselect';
|
||||
@ -71,7 +70,7 @@ class AcceptPrivacyTerms extends Component {
|
||||
}
|
||||
const { privacyPolicy, termsOfService, quincyEmail } = this.state;
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Privacy Policy and Terms of Service | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -165,7 +164,7 @@ class AcceptPrivacyTerms extends Component {
|
||||
</Col>
|
||||
</Row>
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
import { Grid, Row, Col, Image } from '@freecodecamp/react-bootstrap';
|
||||
import FontAwesomeIcon from '@fortawesome/react-fontawesome';
|
||||
import {
|
||||
@ -13,7 +13,6 @@ import { faDatabase } from '@fortawesome/free-solid-svg-icons';
|
||||
import Helmet from 'react-helmet';
|
||||
|
||||
import { Spacer } from '../components/helpers';
|
||||
import Layout from '../components/layouts/Default';
|
||||
import Login from '../components/Header/components/Login';
|
||||
|
||||
import './index.css';
|
||||
@ -27,7 +26,7 @@ const BigCallToAction = () => (
|
||||
);
|
||||
|
||||
const IndexPage = () => (
|
||||
<Layout disableSettings={true} landingPage={true}>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Learn to code | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -246,7 +245,7 @@ const IndexPage = () => (
|
||||
<Spacer />
|
||||
<Spacer />
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
|
||||
export default IndexPage;
|
||||
|
@ -1,14 +1,13 @@
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
import { Grid } from '@freecodecamp/react-bootstrap';
|
||||
import Helmet from 'react-helmet';
|
||||
|
||||
import Layout from '../components/layouts/Default';
|
||||
import FullWidthRow from '../components/helpers/FullWidthRow';
|
||||
import { Spacer } from '../components/helpers';
|
||||
|
||||
function SoftwareResourcesForNonProfits() {
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Software Resources for Nonprofits | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -312,7 +311,7 @@ function SoftwareResourcesForNonProfits() {
|
||||
</ul>
|
||||
</FullWidthRow>
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React, { Component } from 'react';
|
||||
import React, { Component, Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Link } from 'gatsby';
|
||||
import { bindActionCreators } from 'redux';
|
||||
@ -18,7 +18,6 @@ import Helmet from 'react-helmet';
|
||||
import isEmail from 'validator/lib/isEmail';
|
||||
import { isString } from 'lodash';
|
||||
|
||||
import Layout from '../components/layouts/Default';
|
||||
import { Spacer } from '../components/helpers';
|
||||
import './update-email.css';
|
||||
import { userSelector } from '../redux';
|
||||
@ -79,7 +78,7 @@ class UpdateEmail extends Component {
|
||||
render() {
|
||||
const { isNewEmail } = this.props;
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Update your email address | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -127,7 +126,7 @@ class UpdateEmail extends Component {
|
||||
</Col>
|
||||
</Row>
|
||||
</Grid>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { navigate } from 'gatsby';
|
||||
import { bindActionCreators } from 'redux';
|
||||
@ -9,7 +9,6 @@ import Helmet from 'react-helmet';
|
||||
|
||||
import { Loader, Spacer } from '../components/helpers';
|
||||
import CurrentChallengeLink from '../components/helpers/CurrentChallengeLink';
|
||||
import Layout from '../components/layouts/Default';
|
||||
import Supporters from '../components/Supporters';
|
||||
import {
|
||||
userSelector,
|
||||
@ -70,11 +69,9 @@ function Welcome({
|
||||
}) {
|
||||
if (pending && !complete) {
|
||||
return (
|
||||
<Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
</Layout>
|
||||
<div className='loader-wrapper'>
|
||||
<Loader />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -90,7 +87,7 @@ function Welcome({
|
||||
|
||||
const { quote, author } = randomQuote();
|
||||
return (
|
||||
<Layout>
|
||||
<Fragment>
|
||||
<Helmet>
|
||||
<title>Welcome {name ? name : 'Camper'} | freeCodeCamp.org</title>
|
||||
</Helmet>
|
||||
@ -147,17 +144,17 @@ function Welcome({
|
||||
<Spacer />
|
||||
<Row>
|
||||
<Col sm={8} smOffset={2} xs={12}>
|
||||
<CurrentChallengeLink>
|
||||
<Button block={true} bsStyle='primary' className='btn-cta-big'>
|
||||
Go to my next challenge
|
||||
</Button>
|
||||
</CurrentChallengeLink>
|
||||
<CurrentChallengeLink>
|
||||
<Button block={true} bsStyle='primary' className='btn-cta-big'>
|
||||
Go to my next challenge
|
||||
</Button>
|
||||
</CurrentChallengeLink>
|
||||
</Col>
|
||||
</Row>
|
||||
<Spacer size={4} />
|
||||
</Grid>
|
||||
</main>
|
||||
</Layout>
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user