Skip to content

Commit

Permalink
Pagina quiz mudando as perguntas'
Browse files Browse the repository at this point in the history
  • Loading branch information
williamdlm committed Oct 8, 2021
1 parent 3ef5d70 commit 30ae42f
Show file tree
Hide file tree
Showing 9 changed files with 363 additions and 100 deletions.
106 changes: 22 additions & 84 deletions db.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,94 +3,28 @@
"description": "Teste os seus conhecimentos sobre Harry Potter e vamos ver quantos feitiços você vai conseguir conjurar",
"questions": [
{
"image": "https://media.giphy.com/media/NoBXm9gmqzx96/giphy.gif",
"title": "Qual é o nome da loja de piadas de Fred e Jorge?",
"description": "Se for irmão é 20 galeões",
"answer": 1,
"image": "https://res.cloudinary.com/dhmkfekt2/image/upload/v1633060616/a_vccpv5.gif",
"title": "Quais o menor e o maior país do mundo??",
"description": "Essa é para aquecer...",
"answer": 0,
"alternatives": [
"Empório de Piadas Weasley",
"Gemialidades Weasley",
"Empório do Fred e George",
"Loja de piadas de Zonko"
"Vaticano e Rússia",
"Nauru e China",
"Mônaco e Canadá",
"Malta e Estados Unidos"
]
},
{
"image": "https://media.giphy.com/media/BlmtmL4aP1WYE/giphy.gif",
"title": "Quem vigia a entrada da sala comunal da Grifinória?",
"description": "Disse Gryffindor:' Nós vamos ensinar a todos aqueles com os bravos feitos do seu nome.",
"answer": 3,
"image": "https://cdn.dribbble.com/users/1129235/screenshots/3123420/media/6802b1a795f43fb038aa3c7f60c88ee8.gif",
"title": "De acordo com a teoria da evolução humana os primeiros hominídeos pertenciam ao grupo dos:",
"description": "'O ser humano só evolui a partir da necessidade.' -Vivaldo Neto",
"answer": 4,
"alternatives": [
"A Dama Cinzenta",
"O Frade Gordo",
"O Barão Sangrento",
"A Mulher Gorda"
]
},
{
"image": "https://media.giphy.com/media/hujejOtss7zG0/giphy.gif",
"title": "De qual plataforma King's Cross sai o Expresso de Hogwarts?",
"description": "Me desculpe senhor(a), você pode me dizer aonde eu posso encontrar a plataforma...??",
"answer": 1,
"alternatives": [
"Oito e um quarto",
"Nove e três quartos",
"Cinco anos e meio",
"Onze"
]
},
{
"image": "https://ahaslides.com/wp-content/uploads/2020/05/original.gif",
"title": "Qual é o modelo da primeira vassoura que Harry já recebeu?",
"description": "Não é uma vassoura velha qualquer, é uma...",
"answer": 3,
"alternatives": ["Cleansweep One", "Aspirador", "Firebolt", "Nimbus 2000"]
},
{
"image": "https://media.giphy.com/media/PcfozPlZSzARO/giphy.gif",
"title": "O que o feitiço “Obliviate” faz?",
"description": "...",
"answer": 2,
"alternatives": [
"Destrói objetos",
"Envia alguém para o reino inferior",
"Remove partes da memória de alguém",
"Torna os objetos invisíveis"
]
},
{
"image": "https://media.giphy.com/media/X9JE4J2qYDDO0/giphy.gif",
"title": "Qual dessas NÃO é uma das Maldições Imperdoáveis?",
"description": "Se usar uma delas vai ganhar uma passagem só ida para Azkaban!",
"answer": 2,
"alternatives": [
"Maldição Cruciatus",
"Maldição Imperius",
"Sectumsempra",
"Avada kedavra"
]
},
{
"image": "https://media.giphy.com/media/IIJpyNVX37NAI/giphy.gif",
"title": "Como Harry consegue respirar debaixo d'água durante a segunda tarefa do Torneio Tribruxo?",
"description": "Nevil: 'Eu Matei Harry Potter'",
"answer": 2,
"alternatives": [
"Ele transfigura em um tubarão",
"Ele beija uma sereia",
"Ele come guelricho",
"Ele executa um charme de cabeça de bolha"
]
},
{
"image": "https://media.giphy.com/media/720g7C1jz13wI/giphy.gif",
"title": "Qual é o nome completo de Alvo Dumbledore?",
"description": "E eu achava que meu nome era grande",
"answer": 1,
"alternatives": [
"Alvo Wulfrico Percival Brian Dumbledore",
"Alvo Percival Wulfrico Brian Dumbledore",
"Alvo Brian Percival Wulfrico Dumbledore",
"Alvo Brian Percival Wulfrico Dumbledor"
"Homo habilis",
"Homo erectus",
"Homo ergaster",
"Homo sapiens",
"Australopithecus"
]
}
],
Expand All @@ -112,7 +46,11 @@
"secondary": "#192a46",
"contrastText": "#FFFFFF",
"wrong": "#FF5722",
"success": "#4CAF50"
"success": "#4CAF50",
"red": "#F93B7A",
"green": "#37D1AC",
"blue": "#5766DA",
"yellow": "#FBC94B"
},
"borderRadius": "4px"
}
Expand Down
6 changes: 5 additions & 1 deletion pages/_app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import { createGlobalStyle, ThemeProvider } from "styled-components";
import db from "../db.json";

const GlobalStyle = createGlobalStyle`
@import url('https://fonts.googleapis.com/css?family=Roboto:400,500&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap');
* {
box-sizing: border-box;
}
Expand All @@ -10,7 +13,8 @@ const GlobalStyle = createGlobalStyle`
padding: 0;
display: flex;
flex-direction: column;
font-family: 'Lato', sans-serif;
font-family: 'Poppins', sans-serif;
//font-family: 'Lato', sans-serif;
// Deixa branco no começo
color: ${({ theme }) => theme.colors.contrastText};
}
Expand Down
40 changes: 36 additions & 4 deletions pages/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import Header from "../src/components/Header";
import Main from "../src/components/Main";
import Background from "../src/components/Background";
import Head from "next/head";
import { useRouter } from "next/router";

export default function Home() {
const router = useRouter();
return (
<Background>
<Head>
<title>TCC</title>
</Head>
<Header>
<Header.Stats>
<Header.StatsPicture />
Expand All @@ -28,10 +34,36 @@ export default function Home() {
</Header>
<Main>
<Main.PlayerArea>
<Main.MiniCard />
<Main.MiniCard />
<Main.MiniCard />
<Main.MiniCard />
<Main.MiniCard>
<img
className="icon classic"
src="https://res.cloudinary.com/dhmkfekt2/image/upload/v1633396500/swords_rktxam.svg"
onClick={() => {
router.push(`/quiz`);
console.log("hello world");
}}
/>
<p>Classic</p>
</Main.MiniCard>
<Main.MiniCard>
<img
className="icon"
src="https://res.cloudinary.com/dhmkfekt2/image/upload/v1633054930/scroll_jbw9wv.png"
/>
<p>About</p>
</Main.MiniCard>
<Main.MiniCard>
<img
className="icon"
src="https://res.cloudinary.com/dhmkfekt2/image/upload/v1633054930/lock_l5sw35.png"
/>
</Main.MiniCard>
<Main.MiniCard>
<img
className="icon"
src="https://res.cloudinary.com/dhmkfekt2/image/upload/v1633054930/lock_l5sw35.png"
/>
</Main.MiniCard>
</Main.PlayerArea>
<Main.Ranking />
</Main>
Expand Down
145 changes: 145 additions & 0 deletions pages/quiz.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
import React from "react";
import Head from "next/dist/shared/lib/head";
import Background from "../src/components/Background";
import Header from "../src/components/Header";
import Widget from "../src/components/Widget";
import db from "../db.json";
import QuizContainer from "../src/components/QuizContainer";
import Button from "../src/components/Button";

function LoadingWidget() {
return (
<Widget>
<Widget.Header>Carregando...</Widget.Header>
<Widget.Content>[Desafio do Loading]</Widget.Content>
</Widget>
);
}

function QuestionWidget({ question, totalQuestions, questionIndex, onSubmit }) {
const questId = `question__${questionIndex}`;
return (
<>
<Widget>
<Widget.Header>
{/* <BackLinkArrow href="/" /> */}
<h3>
Pergunta {`${questionIndex + 1}`} de {`${totalQuestions}`}
</h3>
</Widget.Header>

<img
alt="Descrição"
style={{
width: "100%",
height: "200px",
objectFit: "cover",
}}
src={question.image}
/>

<Widget.Content>
<h2>{question.title}</h2>
<p>{question.description}</p>

<form
onSubmit={(event) => {
event.preventDefault();
onSubmit();
}}
>
{question.alternatives.map((alternative, alternativeIndex) => {
const alternativeId = `alternative__${alternativeIndex}`;
return (
<Widget.Topic
as="label"
htmlFor={alternativeId}
key={alternativeId}
>
<input
// style={{
// display: "none",
// }}
id={alternativeId}
type="radio"
name={questId}
/>
{alternative}
</Widget.Topic>
);
})}
<Button type="submit">Confirmar</Button>
</form>
{/* <pre>{JSON.stringify(question, null, 4)}</pre> */}
</Widget.Content>
</Widget>
</>
);
}

const screenStates = {
QUIZ: "QUIZ",
LOADING: "LOADING",
RESULT: "RESULT",
};

export default function QuizPage() {
const [screenState, setScreenState] = React.useState(screenStates.LOADING);
const [currentQuestion, setCurrentQuestion] = React.useState(0);
const questionIndex = currentQuestion;
const question = db.questions[questionIndex];
const totalQuestions = db.questions.length;
React.useEffect(() => {
setTimeout(() => {
setScreenState(screenStates.QUIZ);
}, 1 * 100);
}, []);

function handleSubmitQuiz() {
const nextQuestion = questionIndex + 1;
if (nextQuestion < totalQuestions) {
setCurrentQuestion(nextQuestion);
} else {
setScreenState(screenStates.RESULT);
}
}
return (
<Background>
<Header>
<Header.Stats>
<Header.StatsPicture />
<Header.StatsInfo>
<p>William Mota</p>
<p>Level 24</p>
<p>xp 220</p>
</Header.StatsInfo>
</Header.Stats>
<Header.Infos>
<Header.InfoBar>
<p>Title:</p>
<p>The Lord of Logic</p>
</Header.InfoBar>
<Header.InfoBar>
<p>Class:</p>
<p>Human</p>
</Header.InfoBar>
</Header.Infos>
<Header.ExperienceBar />
</Header>
<QuizContainer>
{screenState === screenStates.QUIZ && (
<QuestionWidget
question={question}
totalQuestions={totalQuestions}
questionIndex={questionIndex}
onSubmit={handleSubmitQuiz}
/>
)}
{screenState === screenStates.LOADING && <LoadingWidget />}
{screenState === screenStates.RESULT && (
<div>Você acertou X questões, parabens!</div>
)}
</QuizContainer>
</Background>
);
}
27 changes: 27 additions & 0 deletions src/components/Button/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import styled from "styled-components";

const Button = styled.button`
background-color: ${({ theme }) => theme.colors.secondary};
color: ${({ theme }) => theme.colors.contrastText};
border-radius: ${({ theme }) => theme.borderRadius};
border: 0;
width: 100%;
padding: 10px 16px;
font-weight: bold;
font-size: 14px;
line-height: 1;
text-transform: uppercase;
outline: 0;
transition: 0.3s;
cursor: pointer;
&:hover,
&:focus {
opacity: 0.5;
}
&:disabled {
background-color: #979797;
cursor: not-allowed;
}
`;

export default Button;
Loading

0 comments on commit 30ae42f

Please sign in to comment.