Skip to content

Commit

Permalink
aula05
Browse files Browse the repository at this point in the history
  • Loading branch information
guilhermecapitao committed Feb 26, 2021
1 parent b972168 commit 1e43ea8
Show file tree
Hide file tree
Showing 9 changed files with 201 additions and 42 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,5 @@ yarn-error.log*

# vercel
.vercel

.vercel
50 changes: 37 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
</h1>

<p align="center">
<a href="#rocket-tecnologias">Tecnologias</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#-projeto">Projeto</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#rocket-tecnologias">Technologies</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#-preview">Preview</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#-layout">Getting started</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#-projeto">Project</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#-layout">Layout</a>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
<a href="#memo-licença">Licença</a>
<a href="#-licença">License</a>
</p>

<p align="center">
Expand All @@ -23,32 +25,54 @@
<img alt="Moveit" src=".github/icon.svg" width="120px">
</p>

## 🚀 Tecnologias
## 🧪 Technologies

Esse projeto foi desenvolvido utilizando as seguintes tecnologias:
This project was developed using the following technologies:

- [Next.js](https://nextjs.org/)
- [React](https://reactjs.org)
- [TypeScript](https://www.typescriptlang.org/)

## 💻 Projeto
## 🔥 Preview

O Move.it veio para te lembrar de se exercitar sempre! 💜
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fguilhermecapitao%2Fnlw-04-reactjs-moveit)

Este é um projeto desenvolvido durante a **[Next Level Week](https://nextlevelweek.com/)**, realizada pela **[@Rocketseat](https://github.com/Rocketseat)** durante os dias 22 a 28 de Fevereiro de 2021.
## 🚀 Getting started

Clone the project and access the folder

```bash
$ git clone https://github.com/guilhermecapitao/nlw04-moveit-web.git && cd nlw04-moveit-web
```

Follow the steps below
```bash
# Install the dependencies
$ yarn

# Start the project
$ yarn dev
```

## 💻 Project

[Move.it](https://move-it-guilhermecapitao.vercel.app/) came to remind you to exercise always! 💜

This is a project developed during the **[Next Level Week](https://nextlevelweek.com/)**, presented by **[@Rocketseat](https://github.com/Rocketseat)** during February 22-28, 2021.

## 🔖 Layout

Você pode visualizar o layout do projeto através dos links abaixo:
You can view the project layout through the links below:

- [Layout Web](https://www.figma.com/file/ge20pu3ofMOKoliUyKx1Nl/Move.it-1.0)

Lembrando que você precisa ter uma conta no [Figma](http://figma.com/) para acessá-lo.
Remembering that you need to have a [Figma](http://figma.com/) account to access it.

## 📝 License

## 📝 Licença
This project is licensed under the MIT License. See the [LICENSE](LICENSE.md) file for details.

Esse projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE.md) para mais detalhes.

---

<p align="center">Desenvolvido com 💜 por Guilherme Capitão</p>
<p align="center">Made with 💜 by Guilherme Capitão</p>
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@
"start": "next start"
},
"dependencies": {
"js-cookie": "^2.2.1",
"next": "10.0.7",
"react": "17.0.1",
"react-dom": "17.0.1"
},
"devDependencies": {
"@types/js-cookie": "^2.2.6",
"@types/node": "^14.14.31",
"@types/react": "^17.0.2",
"@types/react-dom": "^17.0.1",
Expand Down
22 changes: 22 additions & 0 deletions src/components/LevelUpMoodal.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { useContext } from 'react'
import { ChallengesContext } from '../contexts/ChallengesContext'
import styles from '../styles/components/LevelUpModal.module.css'

export function LevelUpModal() {
const { level, closeLevelUpModal } = useContext(ChallengesContext)

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={closeLevelUpModal}>
<img src="/icons/close.svg" alt="Fechar modal"/>
</button>
</div>
</div>
)
}
31 changes: 26 additions & 5 deletions src/contexts/ChallengesContext.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { createContext, ReactNode, useEffect, useState } from 'react'
import Cookies from 'js-cookie'

import challenges from '../../challenges.json'
import { LevelUpModal } from '../components/LevelUpMoodal'

interface Challenge {
type: 'body' | 'eye';
Expand All @@ -18,18 +20,23 @@ interface ChallengesContextData {
startNewChallenge: () => void;
resetChallenge: () => void;
completeChallenge: () => void;
closeLevelUpModal: () => void;
}

interface ChallengesProviderProps {
children: ReactNode
level: number;
currentExperience: number;
challengesCompleted: number;
}

export const ChallengesContext = createContext({} as ChallengesContextData)

export function ChallengesProvider({ children }: ChallengesProviderProps) {
const [level, setLevel] = useState(1)
const [currentExperience, setCurrentExperience] = useState(0)
const [challengesCompleted, setChallengesCompleted] = useState(0)
export function ChallengesProvider({ children, ...rest }: ChallengesProviderProps) {
const [level, setLevel] = useState(rest.level ?? 1)
const [currentExperience, setCurrentExperience] = useState(rest.currentExperience ?? 0)
const [challengesCompleted, setChallengesCompleted] = useState(rest.challengesCompleted ?? 0)
const [isLevelUpModalOpen, setIsLevelUpModalOpen] = useState(false)

const [activeChallenge, setActiveChallenge] = useState(null)

Expand All @@ -39,8 +46,20 @@ export function ChallengesProvider({ children }: ChallengesProviderProps) {
Notification.requestPermission()
}, [])

useEffect(() => {
Cookies.set('level', String(level))
Cookies.set('currentExperience', String(currentExperience))
Cookies.set('challengesCompleted', String(challengesCompleted))
}, [level, currentExperience, challengesCompleted])

function levelUp() {
setLevel(level + 1)

setIsLevelUpModalOpen(true)
}

function closeLevelUpModal() {
setIsLevelUpModalOpen(false)
}

function startNewChallenge() {
Expand Down Expand Up @@ -89,10 +108,12 @@ export function ChallengesProvider({ children }: ChallengesProviderProps) {
levelUp,
startNewChallenge,
resetChallenge,
completeChallenge
completeChallenge,
closeLevelUpModal
}}
>
{ children }
{ isLevelUpModalOpen && <LevelUpModal />}
</ChallengesContext.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 @@ -6,9 +6,7 @@ function MyApp({ Component, pageProps }) {


return (
<ChallengesProvider>
<Component {...pageProps} />
</ChallengesProvider>
<Component {...pageProps} />
)
}

Expand Down
71 changes: 50 additions & 21 deletions src/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Head from 'next/head'
import { GetServerSideProps } from 'next'

import { CompletedChallenges } from '../components/CompletedChallenges'
import { ExperienceBar } from '../components/ExperienceBar'
Expand All @@ -8,28 +9,56 @@ import { Profile } from '../components/Profile'

import styles from '../styles/pages/Home.module.css'
import { CountdownProvider } from '../contexts/CountdownContext'
import { ChallengesProvider } from '../contexts/ChallengesContext'

interface HomeProps {
level: number;
currentExperience: number;
challengesCompleted: number;
}

export default function Home(props: HomeProps) {

export default function Home() {
return (
<div className={styles.container}>
<Head>
<title>Início | move.it</title>
</Head>

<ExperienceBar />

<CountdownProvider>
<section>
<div>
<Profile />
<CompletedChallenges />
<Countdown />
</div>
<div>
<ChallengeBox />
</div>
</section>
</CountdownProvider>
</div>
<ChallengesProvider
level={props.level}
currentExperience={props.currentExperience}
challengesCompleted={props.challengesCompleted}
>
<div className={styles.container}>
<Head>
<title>Início | move.it</title>
</Head>

<ExperienceBar />

<CountdownProvider>
<section>
<div>
<Profile />
<CompletedChallenges />
<Countdown />
</div>
<div>
<ChallengeBox />
</div>
</section>
</CountdownProvider>
</div>
</ChallengesProvider>
)
}

export const getServerSideProps: GetServerSideProps = async (ctx) => {

const { level, currentExperience, challengesCompleted } = ctx.req.cookies


return {
props: {
level: Number(level),
currentExperience: Number(currentExperience),
challengesCompleted: Number(challengesCompleted)
}
}
}
51 changes: 51 additions & 0 deletions src/styles/components/LevelUpModal.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
.overlay {
background: rgba(242, 243, 245, 0.8);
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;

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

.container {
background: 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;
}

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

.container strong {
font-size: 2.25rem;
color: var(--title);
}

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

.container button {
position: absolute;
right: 0.5rem;
top: 0.5rem;
background: transparent;
border: 0;
font-size: 0;
}
10 changes: 10 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,11 @@
resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001"
integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==

"@types/js-cookie@^2.2.6":
version "2.2.6"
resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f"
integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw==

"@types/node@^14.14.31":
version "14.14.31"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055"
Expand Down Expand Up @@ -939,6 +944,11 @@ [email protected]:
merge-stream "^2.0.0"
supports-color "^6.1.0"

js-cookie@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==

"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
Expand Down

0 comments on commit 1e43ea8

Please sign in to comment.