sectionRender in Challenge component

This commit is contained in:
mattyl006 2022-07-15 10:58:53 +02:00
parent 5317dc9625
commit 757cf72e12
7 changed files with 138 additions and 37 deletions

View File

@ -1,9 +1,39 @@
import React from "react"; import React from "react";
import {FlexRow} from "../../utils/containers";
import styled from "styled-components";
import {Medium} from "../../utils/fonts";
const MobileChallengeMenu = () => { const MenuOption = styled(Medium)`
cursor: pointer;
transition: color 0.3s ease-in-out;
&:hover {
color: ${({theme}) => theme.colors.green};
}
`;
const MobileChallengeMenu = (props) => {
return ( return (
<> <>
<FlexRow gap='32px'>
<MenuOption as='button' to='/' onClick={() => props.setSection(0)}>
Leaderboard
</MenuOption>
<MenuOption as='button' to='/' onClick={() => props.setSection(1)}>
Readme
</MenuOption>
<MenuOption as='button' to='/' onClick={() => props.setSection(2)}>
How to
</MenuOption>
</FlexRow>
<FlexRow gap='36px'>
<MenuOption as='button' to='/' onClick={() => props.setSection(4)}>
My entries
</MenuOption>
<MenuOption as='button' to='/' onClick={() => props.setSection(3)}>
Submit
</MenuOption>
</FlexRow>
</> </>
); );
} }

View File

@ -0,0 +1,15 @@
import React from "react";
import {FlexColumn} from "../../utils/containers";
import {H2} from "../../utils/fonts";
const HowTo = () => {
return (
<FlexColumn padding='24px'>
<H2>
How to
</H2>
</FlexColumn>
);
}
export default HowTo;

View File

@ -0,0 +1,15 @@
import React from "react";
import {FlexColumn} from "../../utils/containers";
import {H2} from "../../utils/fonts";
const Leaderboard = () => {
return (
<FlexColumn padding='24px'>
<H2>
Leaderboard
</H2>
</FlexColumn>
);
}
export default Leaderboard;

View File

@ -0,0 +1,15 @@
import React from "react";
import {FlexColumn} from "../../utils/containers";
import {H2} from "../../utils/fonts";
const MyEntries = () => {
return (
<FlexColumn padding='24px'>
<H2>
My entries
</H2>
</FlexColumn>
);
}
export default MyEntries;

View File

@ -0,0 +1,15 @@
import React from "react";
import {FlexColumn} from "../../utils/containers";
import {H2} from "../../utils/fonts";
const Readme = () => {
return (
<FlexColumn padding='24px'>
<H2>
Readme
</H2>
</FlexColumn>
);
}
export default Readme;

View File

@ -0,0 +1,15 @@
import React from "react";
import {FlexColumn} from "../../utils/containers";
import {H2} from "../../utils/fonts";
const Submit = () => {
return (
<FlexColumn padding='24px'>
<H2>
Submit
</H2>
</FlexColumn>
);
}
export default Submit;

View File

@ -1,24 +1,24 @@
import React from "react"; import React from "react";
import {Container, FlexColumn, FlexRow} from "../utils/containers"; import {Container, FlexColumn, FlexRow} from "../utils/containers";
import {Link, useParams} from "react-router-dom"; import {useParams} from "react-router-dom";
import {H1, Medium} from "../utils/fonts"; import {H1} from "../utils/fonts";
import getChallenges from "../api/getChallenges"; import getChallenges from "../api/getChallenges";
import theme from "../utils/theme"; import theme from "../utils/theme";
import styled from "styled-components"; import MobileChallengeMenu from "../components/elements/MobileChallengeMenu";
import Leaderboard from "../components/sections/Leaderboard";
const ChallengeLink = styled(Medium)` import Readme from "../components/sections/Readme";
cursor: pointer; import HowTo from "../components/sections/HowTo";
transition: color 0.3s ease-in-out; import MyEntries from "../components/sections/MyEntries";
import Submit from "../components/sections/Submit";
&:hover {
color: ${({theme}) => theme.colors.green};
}
`;
const Challenge = () => { const Challenge = () => {
const challengeName = useParams().challengeId; const challengeName = useParams().challengeId;
const [challenges, setChallenges] = React.useState([]); const [challenges, setChallenges] = React.useState([]);
const [section, setSection] = React.useState([0]);
React.useEffect(() => {
getChallenges(setChallenges);
}, []);
const getChallenge = () => { const getChallenge = () => {
if (challenges.length !== 0) { if (challenges.length !== 0) {
@ -30,35 +30,31 @@ const Challenge = () => {
return ''; return '';
} }
React.useEffect(() => { const sectionRender = () => {
getChallenges(setChallenges); switch (section) {
}, []); case 0:
return <Leaderboard/>
case 1:
return <Readme/>
case 2:
return <HowTo/>
case 3:
return <MyEntries/>
case 4:
return <Submit/>
default:
return <Leaderboard/>
}
}
return ( return (
<FlexColumn minHeight='100vh' gap='12px' alignmentY='flex-start' padding='66px 0 0 0'> <FlexColumn minHeight='100vh' gap='12px' alignmentY='flex-start' padding='66px 0 0 0'>
<H1 margin='0 0 8px 0'> <H1 margin='0 0 8px 0'>
{getChallenge().title} {getChallenge().title}
</H1> </H1>
<FlexRow gap='32px'> <MobileChallengeMenu setSection={setSection}/>
<ChallengeLink as={Link} to='/'>
Leaderboard
</ChallengeLink>
<ChallengeLink as={Link} to='/'>
Readme
</ChallengeLink>
<ChallengeLink as={Link} to='/'>
How to
</ChallengeLink>
</FlexRow>
<FlexRow gap='32px'>
<ChallengeLink as={Link} to='/'>
Submit
</ChallengeLink>
<ChallengeLink as={Link} to='/'>
My entries
</ChallengeLink>
</FlexRow>
<Container width='75%' height='1px' backgroundColor={theme.colors.dark}/> <Container width='75%' height='1px' backgroundColor={theme.colors.dark}/>
{sectionRender()}
</FlexColumn> </FlexColumn>
); );
} }