Skip to content

Commit

Permalink
deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
EdgarJMesquita committed Aug 28, 2021
1 parent 4b2ba7a commit 190b971
Show file tree
Hide file tree
Showing 9 changed files with 184 additions and 31 deletions.
27 changes: 27 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
"lint": "next lint"
},
"dependencies": {
"js-cookie": "^3.0.0",
"next": "11.1.0",
"react": "17.0.2",
"react-dom": "17.0.2",
"sass": "^1.38.1"
},
"devDependencies": {
"@types/js-cookie": "^2.2.7",
"@types/react": "^17.0.19",
"@types/react-dom": "^17.0.9",
"eslint": "7.32.0",
Expand Down
3 changes: 3 additions & 0 deletions public/icons/close.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/icons/modalIcon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions src/components/LevelUpModal/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import useChallenge from '../../hooks/useChallenge';
import styles from './styles.module.scss';

export function LevelUpModal(){
const { level, setIsLevelUpModalOpen } = useChallenge();

return(
<div className={styles.overlay}>
<div className={styles.container}>
<header>{level}</header>

<strong>Parabéns</strong>

<p>Você alcançou um novo level.</p>

<button type="button" onClick={()=>setIsLevelUpModalOpen(false)}>
<img src="/icons/close.svg" alt="Fechar" />
</button>
</div>
</div>
);
}
52 changes: 52 additions & 0 deletions src/components/LevelUpModal/styles.module.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@

.overlay {
background-color: rgba(242, 243, 245, 0.8);
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;

display: flex;
justify-content: center;
align-items: center;

.container {
background-color: var(--white);
width: 100%;
max-width: 400px;
padding: 2rem 3rem;
border-radius: 5px;
box-shadow: 0 0 60px rgba(0, 0, 0, 0.05);
text-align: center;
position: relative;

header {
font-size: 8.75rem;
font-weight: 600;
color: var(--blue);
background: url('/icons/modalIcon.svg') no-repeat center;
background-size: contain;
}

strong {
font-size: 2.25rem;
color: var(--text);
}

p {
font-size: 1.25rem;
color: var(--text);
margin-top: 0.25rem;
}

button {
position: absolute;
right: 0.5rem;
top: 0.5rem;
background: transparent;
border: 0;
font-size: 0;
}
}
}
32 changes: 24 additions & 8 deletions src/context/ChallengeContext.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import challenges from '../../challenges.json';

import { createContext, ReactNode, useEffect, useState } from 'react';
import useCountdown from '../hooks/useCountdown';
import { LevelUpModal } from '../components/LevelUpModal';
import challenges from '../../challenges.json';
import Cookies from 'js-cookie';

type ReactChildrenProps = {
children: ReactNode;
level: number;
currentXP: number;
challengesCompleted: number;
}

type ChallengeProps = {
Expand All @@ -19,6 +22,8 @@ type ChallengeContextProps = {
challengesCompleted: number;
currentChallenge: ChallengeProps | null;
experienceToNextLevel: number;
isLevelUpModalOpen: boolean;
setIsLevelUpModalOpen: (key:boolean)=>void;
levelUp: ()=>void;
startNewChallenge: ()=>void;
resetChallenge: ()=>void;
Expand All @@ -27,21 +32,29 @@ type ChallengeContextProps = {

const ChallengeContext = createContext({} as ChallengeContextProps);


function ChallengeContextProvider({children}:ReactChildrenProps){
const [level, setLevel] = useState(1);
const [currentXP, setCurrentXP] = useState(0);
const [challengesCompleted, setChallengesCompleted] = useState(0);
function ChallengeContextProvider({children, ...rest}:ReactChildrenProps){
const [level, setLevel] = useState(rest.level?? 1);
const [currentXP, setCurrentXP] = useState(rest.currentXP?? 0);
const [challengesCompleted, setChallengesCompleted] = useState(rest.challengesCompleted?? 0);
const [currentChallenge, setCurrentChallenge] = useState<ChallengeProps>(null);
const [ isLevelUpModalOpen, setIsLevelUpModalOpen ] = useState(false);

const experienceToNextLevel = Math.pow((level + 1) * 4, 2)

useEffect(() => {
Notification.requestPermission();
}, [])

useEffect(() => {
Cookies.set('level', String(level));
Cookies.set('currentXP', String(currentXP));
Cookies.set('challengesCompleted', String(challengesCompleted));

}, [level, currentXP, challengesCompleted])

function levelUp(){
setLevel(prev=>(prev+1));
setIsLevelUpModalOpen(true);
}

function startNewChallenge(){
Expand Down Expand Up @@ -91,12 +104,15 @@ function ChallengeContextProvider({children}:ReactChildrenProps){
challengesCompleted,
currentChallenge,
experienceToNextLevel,
isLevelUpModalOpen,
setIsLevelUpModalOpen,
levelUp,
startNewChallenge,
resetChallenge,
completeChallenge
}}>
{children}
{isLevelUpModalOpen && <LevelUpModal />}
</ChallengeContext.Provider>
)
}
Expand Down
4 changes: 1 addition & 3 deletions src/pages/_app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ import '../styles/globals.scss';

function MyApp({ Component, pageProps }) {
return(
<ChallengeContextProvider>
<Component {...pageProps} />
</ChallengeContextProvider>
<Component {...pageProps} />
)
}

Expand Down
64 changes: 44 additions & 20 deletions src/pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,52 @@ import Head from 'next/head';

import styles from '../styles/pages/Home.module.scss';
import { CountdownContextProvider } from '../context/CountdownContext';
import { GetServerSideProps } from 'next';
import Cookies from 'js-cookie';
import { ChallengeContextProvider } from '../context/ChallengeContext';

type HomeProps = {
level: number;
currentXP: number;
challengesCompleted: number;
}

export default function Home({level,currentXP,challengesCompleted}:HomeProps) {

export default function Home() {
return (
<div className={styles.container}>
<Head>
<title>Home | Moveit</title>
</Head>
<ChallengeContextProvider level={level} currentXP={currentXP} challengesCompleted={challengesCompleted}>
<div className={styles.container}>
<Head>
<title>Home | Moveit</title>
</Head>

<ExperienceBar />

<CountdownContextProvider>
<section>
<div>
<Profile />
<CompletedChallenges />
<Countdown />
</div>
<div>
<ChallengeBox />
</div>
</section>
</CountdownContextProvider>
</div>
<ExperienceBar />

<CountdownContextProvider>
<section>
<div>
<Profile />
<CompletedChallenges />
<Countdown />
</div>
<div>
<ChallengeBox />
</div>
</section>
</CountdownContextProvider>
</div>
</ChallengeContextProvider>
)
}

export const getServerSideProps:GetServerSideProps = async ({req}) => {
const {level, currentXP, challengesCompleted} = req.cookies;

return{
props:{
level: Number(level),
currentXP: Number(currentXP),
challengesCompleted: Number(challengesCompleted)
}
}
}

0 comments on commit 190b971

Please sign in to comment.