From a0bf7aa225919fa77c04e9ac518ef9d15998f77b Mon Sep 17 00:00:00 2001 From: Angryman18 Date: Sat, 14 May 2022 16:00:41 +0530 Subject: [PATCH 1/6] fun quiz app --- src/meta/play-meta.js | 14 ++ src/plays/fun-quiz/EndScreen.jsx | 76 ++++++++++ src/plays/fun-quiz/FrontScreen.jsx | 159 ++++++++++++++++++++ src/plays/fun-quiz/FrontScreen.scss | 174 ++++++++++++++++++++++ src/plays/fun-quiz/FunQuiz.jsx | 74 ++++++++++ src/plays/fun-quiz/FunQuiz.scss | 6 + src/plays/fun-quiz/QuizScreen.jsx | 179 ++++++++++++++++++++++ src/plays/fun-quiz/QuizScreen.scss | 222 ++++++++++++++++++++++++++++ src/plays/fun-quiz/Readme.md | 1 + src/plays/fun-quiz/confuse.gif | Bin 0 -> 128269 bytes src/plays/index.js | 1 + 11 files changed, 906 insertions(+) create mode 100644 src/plays/fun-quiz/EndScreen.jsx create mode 100644 src/plays/fun-quiz/FrontScreen.jsx create mode 100644 src/plays/fun-quiz/FrontScreen.scss create mode 100644 src/plays/fun-quiz/FunQuiz.jsx create mode 100644 src/plays/fun-quiz/FunQuiz.scss create mode 100644 src/plays/fun-quiz/QuizScreen.jsx create mode 100644 src/plays/fun-quiz/QuizScreen.scss create mode 100644 src/plays/fun-quiz/Readme.md create mode 100644 src/plays/fun-quiz/confuse.gif diff --git a/src/meta/play-meta.js b/src/meta/play-meta.js index f701e1c8ad..b6145694b5 100644 --- a/src/meta/play-meta.js +++ b/src/meta/play-meta.js @@ -15,6 +15,7 @@ import { PasswordGenerator, WhyTypescript, NetlifyCardGame, +FunQuiz, //import play here } from "plays"; @@ -230,5 +231,18 @@ export const plays = [ video: '', language: 'js', featured: true, + }, { + id: 'pl-fun-quiz', + name: 'Fun Quiz', + description: 'its a fun quiz app where people can take serious quiz or also do cheating as intended.', + component: () => {return }, + path: '/plays/fun-quiz', + level: 'Intermediate', + tags: 'QuizApp,FunQuiz,API', + github: 'Angryman18', + cover: 'https://cdn.pixabay.com/photo/2019/05/22/22/28/brainstorm-4222728_960_720.jpg', + blog: 'https://hashnode.com/@imsmahanta', + video: '', + language: 'js' }, //replace new play item here ]; diff --git a/src/plays/fun-quiz/EndScreen.jsx b/src/plays/fun-quiz/EndScreen.jsx new file mode 100644 index 0000000000..e9eb1c9424 --- /dev/null +++ b/src/plays/fun-quiz/EndScreen.jsx @@ -0,0 +1,76 @@ +// vendors +import { Fragment, useState } from "react"; + +//css +import "./FrontScreen.scss"; + +const EndScreen = ({ quizSummary, redirectHome }) => { + const { correctAnswers, cheatedAnswers, wrongAnswers, result } = quizSummary; + const [currentQuestion, setCurrentQuestion] = useState({}); + + const ShowCurrentQuestionDetails = ({currentQuestion}) => { + if (!Object.keys(currentQuestion).length) return false; + return ( +
+
Question: {currentQuestion?.qNo}
+
  • + Ans: ${currentQuestion?.correct_answer}
    `, + }} + /> + Your Answer: ${currentQuestion?.your_answer}`, + }} + /> +
  • + ); + }; + + return ( + +
    +
    +

    Quiz Summary

    + {!cheatedAnswers &&

    Congratulations!

    } + {!!cheatedAnswers &&

    You Cheated!

    } +
    +

    + Correct Answer(s): {correctAnswers}{" "} + {!!cheatedAnswers && ( + ({cheatedAnswers} cheated) + )} +

    +

    Wrong Answer(s): {wrongAnswers}

    +
    +
    + +
    +
    + {result.map((item, index) => { + return ( +
    setCurrentQuestion({...item, qNo: index+1})} + > + {index + 1} +
    + ); + })} +
    + +
    +
    +
    +
    + ); +}; + +export default EndScreen; diff --git a/src/plays/fun-quiz/FrontScreen.jsx b/src/plays/fun-quiz/FrontScreen.jsx new file mode 100644 index 0000000000..976d025f71 --- /dev/null +++ b/src/plays/fun-quiz/FrontScreen.jsx @@ -0,0 +1,159 @@ +import { useState } from "react"; + +// css +import "./FrontScreen.scss"; + +const options = [ + { + name: "All", + id: "all", + }, + { + name: "Books", + id: 10, + }, + { + name: "General Knwoledge", + id: 9, + }, + { + name: "Film", + id: 11, + }, + { + name: "Music", + id: 12, + }, + { + name: "Television", + id: 14, + }, + { + name: "Video Games", + id: 15, + }, + { + name: "Computers", + id: 18, + }, + { + name: "Mathematics", + id: 19, + }, + { + name: "Sports", + id: 21, + }, + { + name: "Geography", + id: 22, + }, + { + name: "History", + id: 23, + }, + { + name: "Politics", + id: 24, + }, + { + name: "Celebrities", + id: 26, + }, + { + name: "Science & Nature", + id: 17, + }, +]; + +const CATEGORY_SELECTION = "CATEGORY_SELECTION"; +const RULES_DISPLAY = "RULES_DISPLAY"; + +const QuizSelectionScreen = ({ getSelectedCategory }) => { + const [selectedOption, setSelectedOption] = useState(""); + const [view, setView] = useState(CATEGORY_SELECTION); + + const letMeInHandler = () => { + if (!selectedOption) return; + setView(RULES_DISPLAY); + }; + + const RulesComponent = () => { + return ( + <> +

    1. There will be 20 Unique Questions.

    +

    2. Every Question will have 4 multiple choices to chooose.

    +

    + 3. Among 4 options only one option will be correct answer of the + Question. +

    +

    + 4. Answer selection isn't mandatory. You can skip choosing any answer + and it will be counted as incorrect answer. +

    +

    + 5. After answer confirmation you cannot go back to previous question + or donot refresh the page otherwise you will lose you progress. +

    +

    + 6. You will be given 30 seconds to answer each question and timeup is + considered as an incorrect answer and next question will be displayed. +

    +

    7. You can use cheats to cheat the answer.

    +
    + +
    +
    + +
    + + ); + }; + + const CategorySelector = () => { + return ( + <> +

    + The Quiz app reqires to have a specefic category in order to start + with. Select one of the below options in which you have expertise in. +

    +
    + {options.map((option) => { + return ( +
    setSelectedOption(option.id)} + className={`single-selection ${ + selectedOption === option.id && "active-selected" + }`} + > + {option.name} +
    + ); + })} +
    +
    + +
    + + ); + }; + + const renderView = view === CATEGORY_SELECTION; + + return ( +
    +
    +

    {!renderView ? "Quiz Rules" : "Quiz App"}

    + {renderView && } + {!renderView && } +
    +
    + ); +}; + +export default QuizSelectionScreen; diff --git a/src/plays/fun-quiz/FrontScreen.scss b/src/plays/fun-quiz/FrontScreen.scss new file mode 100644 index 0000000000..4ba1150366 --- /dev/null +++ b/src/plays/fun-quiz/FrontScreen.scss @@ -0,0 +1,174 @@ + +@import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700&display=swap'); + +.fun-quiz-main { + overflow: hidden; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-family: 'Quicksand', sans-serif; + + .main-child { + width: 500px; + + h1 { + margin-top: 20px; + display: inline-block; + margin-bottom: 40px; + + &::after { + content: ""; + display: block; + width: 100%; + margin-top: 5px; + border: 2px solid rgba(242,49,127,1); + border-radius: 20px; + } + } + + p { + font-size: 1rem; + font-weight: normal; + margin-top: -25px; + margin-bottom: 25px; + color: rgba(0, 154, 49, 1); + line-height: 1.5; + } + + .selectable-options { + display: flex; + gap: 10px 15px; + width: 100%; + flex-wrap: wrap; + + .single-selection { + background-color: rgba(242, 244, 246, 1); + box-shadow: inset 0px 0px 1px 1px rgba(218, 218, 218, 0.4); + padding: 8px 16px; + cursor: pointer; + border-radius: 20px; + color: #444444; + font-weight: bold; + + &:hover { + background-color: #444444; + color: white; + box-shadow: none; + transition: 75ms ease-in; + } + } + + .active-selected { + background-color: #444444; + color: white; + box-shadow: none; + } + } + + .front-footer { + margin: 2rem 0; + + button { + outline: none; + border: none; + cursor: pointer; + background: #444444; + width: 100%; + padding: 12px 0; + font-size: 1rem; + color: white; + border-radius: 40px; + font-weight: bold; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); + font-family: 'Quicksand', sans-serif; + + &:hover { + background-color: #333333; + } + } + } + + .congrats { + color: green; + } + .cheated { + color: red; + } + + .circle-area { + display: flex; + flex-wrap: wrap; + gap: 10px; + + .circle-correct { + width: 50px; + aspect-ratio: 1/1; + border-radius: 50%; + background-color: green; + color: #fff; + display: grid; + place-items: center; + cursor: pointer; + } + + .circle-incorrect { + width: 50px; + aspect-ratio: 1/1; + border-radius: 50%; + background-color: rgba(246,0,60,1); + color: #fff; + display: grid; + place-items: center; + cursor: pointer; + } + + } + + .display-question { + margin: 1.5rem 0; + width: 100%; + padding: 12px; + border-radius: 10px; + border: 1px solid #ccc; + color: white; + position: relative; + } + + .correct { + background-color: green; + } + + .incorrect { + background-color: rgba(246,0,60,1); + } + + .question-number { + position: absolute; + top: -10px; + right: 20px; + background-color: #444444; + padding: 0 10px; + border-radius: 20px; + color: white; + } + + .back { + outline: none; + border: none; + background-color: transparent; + font-weight: bold; + font-size: 1rem; + color: #0a66c2; + cursor: pointer; + } + + } + + @media screen and (max-width: 600px) { + .main-child { + width: calc(100% - 2rem); + } + } +} + diff --git a/src/plays/fun-quiz/FunQuiz.jsx b/src/plays/fun-quiz/FunQuiz.jsx new file mode 100644 index 0000000000..fd2467f71b --- /dev/null +++ b/src/plays/fun-quiz/FunQuiz.jsx @@ -0,0 +1,74 @@ +import { getPlayById } from "meta/play-meta-util"; +import { useState } from "react"; + +import PlayHeader from "common/playlists/PlayHeader"; +import QuizScreen from "./QuizScreen"; +import QuizSelectionScreen from "./FrontScreen"; +import EndScreen from "./EndScreen"; + +// css +import './FunQuiz.scss' + +function FunQuiz(props) { + // Do not remove the below lines. + // The following code is to fetch the current play from the URL + const { id } = props; + const play = getPlayById(id); + + // Your Code Start below. + const [category, setCategory] = useState(""); + const [quizCompleted, setQuizCompleted] = useState(false); + const [quizSummary, setQuizSummary] = useState({}); + + const [maintenance] = useState(false); + + const calculateBooleanValues = (array = [], key) => { + return array.reduce((a, b) => (a += b[key] ? 1 : 0), 0); + }; + + const getQuizSummary = (result = []) => { + if (result.length === 20) { + setQuizCompleted(true); + const correctAnswers = calculateBooleanValues(result, "correct"); + const cheatedAnswers = calculateBooleanValues(result, "cheated"); + const wrongAnswers = 20 - correctAnswers; + return setQuizSummary({ + correctAnswers, + cheatedAnswers, + wrongAnswers, + result, + }); + } + return; + }; + + const redirectHome = () => { + setQuizCompleted(false); + setCategory(""); + }; + + if (maintenance) return

    This Page is under Maintenance

    ; + + return ( + <> +
    + +
    + {/* Your Code Starts Here */} + {!category && !quizCompleted && ( + + )} + {category && !quizCompleted && ( + + )} + {quizCompleted && ( + + )} + {/* Your Code Ends Here */} +
    +
    + + ); +} + +export default FunQuiz; diff --git a/src/plays/fun-quiz/FunQuiz.scss b/src/plays/fun-quiz/FunQuiz.scss new file mode 100644 index 0000000000..49cfd474cc --- /dev/null +++ b/src/plays/fun-quiz/FunQuiz.scss @@ -0,0 +1,6 @@ + + +.fun-quiz { + width: 100%; + overflow: hidden; +} \ No newline at end of file diff --git a/src/plays/fun-quiz/QuizScreen.jsx b/src/plays/fun-quiz/QuizScreen.jsx new file mode 100644 index 0000000000..815ea36831 --- /dev/null +++ b/src/plays/fun-quiz/QuizScreen.jsx @@ -0,0 +1,179 @@ +import { useEffect, useState, useCallback } from "react"; + +import "./QuizScreen.scss"; + +// assets +import confuseIcon from "./confuse.gif"; + +const answerState = { + answer: "", + cheat: false, + cheated: false, +}; + +function QuizScreen({ category, getQuizSummary }) { + const [quizData, setQuizData] = useState({ loading: false, data: [] }); + const [answer, setAnswer] = useState({ ...answerState }); + const [result, setResult] = useState([]); + const [questionNumber, setQuestionNumber] = useState(0); + const [timer, setTimer] = useState(30); + + const formatCategoryText = category !== "all" ? `&category=${category}` : ""; + const currentQuestion = quizData?.data?.[questionNumber]; + + useEffect(() => { + (async () => { + try { + setQuizData({ ...quizData, loading: true }); + const response = await fetch( + `https://opentdb.com/api.php?amount=20${formatCategoryText}&type=multiple` + ); + const { results } = await response.json(); + const createOptions = results.map((result) => { + const { incorrect_answers, correct_answer } = result; + const options = [...incorrect_answers]; + options?.splice( + Math.floor(Math.random() * (options.length + 1)), + 0, + correct_answer + ); + return { ...result, options }; + }); + return setQuizData({ data: createOptions, loading: false }); + } catch (err) { + setQuizData({ ...quizData, loading: false }); + } + })(); + }, []); + + // select and deselect the answer + const handleAnswerClick = (val) => (e) => { + setAnswer( + !!answer.answer && answer.answer === val + ? answerState + : { ...answer, answer: val } + ); + }; + + // handling the confirm button click + const handleConfirm = useCallback( + (skipped = false) => { + const updateResult = () => { + console.log("skip status", skipped); + const manageSkippedAnswer = !skipped ? answer.answer : ""; + setResult((pre) => [ + ...pre, + { + question: currentQuestion.question, + correct: currentQuestion.correct_answer === manageSkippedAnswer, + your_answer: manageSkippedAnswer, + correct_answer: currentQuestion.correct_answer, + cheated: answer.cheated, + }, + ]); + }; + + if (questionNumber === 19) { + updateResult(); + return getQuizSummary([ + ...result, + { + question: currentQuestion.question, + correct: currentQuestion.correct_answer === answer.answer, + your_answer: answer.answer, + correct_answer: currentQuestion.correct_answer, + cheated: answer.cheated, + }, + ]); + } + updateResult(); + setAnswer(answerState); + setTimer(30); + setQuestionNumber(questionNumber + 1); + }, + [answer, questionNumber, currentQuestion, result, getQuizSummary] + ); + + useEffect(() => { + if (timer !== -1 && !!quizData.data.length) { + const setTiming = setInterval(() => { + setTimer(timer - 1); + }, 1000); + return () => clearInterval(setTiming); + } else if (!!quizData.data.length) { + setAnswer('') + handleConfirm(true); + } + }, [timer, handleConfirm, quizData.data]); + + const cheatHandler = (e) => { + setAnswer({ + cheat: true, + cheated: true, + answer: currentQuestion.correct_answer, + }); + const showCheat = setTimeout(() => { + setAnswer({ ...answerState, cheated: true }); + clearTimeout(showCheat); + }, 500); + }; + + const itemClassDisplayController = (option) => { + if (answer.cheat && answer.answer === option) + return "option-button blinking-options"; + if (answer.answer === option && !answer.cheat) + return "option-button active-option"; + return "option-button"; + }; + + return ( +
    + {quizData.loading && ( +
    + loading +
    + )} + {!quizData.loading && ( +
    +
    {timer}
    +
    Question: {questionNumber + 1}
    +
    +

    +

    +
    + {currentQuestion?.options?.map((option, index) => { + return ( +
    +
    +
    + ); + })} +
    +
    + + {answer.answer && !answer.cheat && ( + + )} + {!answer.answer && ( + + )} +
    +
    + )} +
    + ); +} + +export default QuizScreen; diff --git a/src/plays/fun-quiz/QuizScreen.scss b/src/plays/fun-quiz/QuizScreen.scss new file mode 100644 index 0000000000..e65e22eb15 --- /dev/null +++ b/src/plays/fun-quiz/QuizScreen.scss @@ -0,0 +1,222 @@ +@import url("https://fonts.googleapis.com/css2?family=Russo+One&display=swap"); // russo one + +$text-color: rgba(32, 73, 105, 1); + +.fun-quiz { + .fun-quiz-screen { + margin-top: 4rem; + width: 100%; + overflow: hidden; + position: relative; + color: black; + display: block; + font-family: "Quicksand", sans-serif; + position: relative; + + @media screen and (max-width: 1366px) { + .App { + margin-top: 0rem; + } + } + + .loading-overlay { + display: flex; + justify-content: center; + align-items: center; + + } + + .timer { + border: 1px solid #444444; + border-radius: 50%; + width: 100px; + aspect-ratio: 1/1; + display: grid; + place-items: center; + font-family: "Russo One", sans-serif; + font-size: 3rem; + color: #444444; + margin-bottom: 2rem; + } + + .caution { + color: red; + } + + .video { + min-height: 100%; + min-width: 100%; + width: 100%; + object-position: center; + object-fit: cover; + aspect-ratio: 16/9; + } + + .section { + height: inherit; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + + .question-info { + background-color: #444444; + color: white; + padding: 8px 1rem; + margin: 1rem; + border-radius: 30px; + margin-top: -8px; + font-weight: bold; + } + + .question { + max-width: calc(820px - 50px); + margin: 0 10px 1rem 10px; + background-color: rgba(255, 247, 247, 1); + box-shadow: inset 0px 0px 10px 1px rgba(255, 247, 255, 1); + border-radius: 20px; + border: 1px solid #ccc; + + + h1 { + margin: 0.5rem 2rem; + color: $text-color; + font-size: clamp(1rem, 5vw, 1.5rem); + } + } + + .options { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, 1fr); + row-gap: 30px; + column-gap: 30px; + margin-top: 1rem; + + .single-opt { + margin: 0; + padding: 0; + width: 250px; + display: grid; + place-items: center; + } + + .option-button { + display: flex; + align-items: center; + min-width: 250px; + min-height: 60px; + font-size: 1rem; + padding: 0.5rem 1.5rem; + background-color: rgba(234,227,227,1); + border-radius: 40px; + transition: 100ms ease-in-out; + text-align: left; + vertical-align: middle; + + &:hover { + cursor: pointer; + background-color: rgba(0, 160, 62, 1); + color: white; + } + } + + .blinking-options { + animation: blinker 0.2s linear infinite; + background-color: rgba(242, 244, 246, 1); + color: #444444; + + @keyframes blinker { + from { + background-color: rgba(242, 244, 246, 1); + color: #444444; + } + 50% { + background-color: rgba(0, 160, 62, 1); + color: white; + } + to { + background-color: rgba(242, 244, 246, 1); + color: #444444; + } + } + } + + .active-option { + background-color: rgba(0, 160, 62, 1); + box-shadow: inset 0px 0px 10px 2px rgba(0, 0, 0, 0.1); + color: white; + } + } + + .confirm-button { + outline: none; + padding: 10px 2rem; + font-size: 1.1rem; + background-color: #0a66c2; + cursor: pointer; + border: none; + border-radius: 30px; + color: white; + color: #ffffff; + font-weight: 600; + + &:hover { + background-color: #16437e; + box-shadow: inset 0px 0px 10px 2px rgba(0, 0, 0, 0.1); + } + } + + .cheat-button { + outline: none; + border: none; + background-color: transparent; + font-weight: normal; + color: #0a66c2; + text-decoration: underline; + cursor: pointer; + } + + @media screen and (max-width: 600px) { + .options { + grid-template-columns: 0fr; + grid-template-rows: repeat(4, 1fr); + row-gap: 20px; + column-gap: 20px; + } + .question { + width: calc(100%-30px); + overflow: hidden; + } + } + + .footer { + margin: 1rem 0; + width: 540px; + height: 50px; + display: flex; + justify-content: space-between; + align-items: center; + + + + .link { + outline: none; + border: none; + background-color: transparent; + font-size: 1rem; + color: #0a66c2; + cursor: pointer; + font-weight: 600; + } + @media screen and (max-width: 600px) { + width: 100%; + height: 100px; + flex-direction: column; + justify-content: center; + gap: 1rem; + } + } + } + } +} diff --git a/src/plays/fun-quiz/Readme.md b/src/plays/fun-quiz/Readme.md new file mode 100644 index 0000000000..e8cf9db5a8 --- /dev/null +++ b/src/plays/fun-quiz/Readme.md @@ -0,0 +1 @@ +# Fun Quiz \ No newline at end of file diff --git a/src/plays/fun-quiz/confuse.gif b/src/plays/fun-quiz/confuse.gif new file mode 100644 index 0000000000000000000000000000000000000000..12ee81360107e67af187c3789c3a8c7c261ce8ef GIT binary patch literal 128269 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 literal 0 HcmV?d00001 diff --git a/src/plays/index.js b/src/plays/index.js index 1c7b1d71ce..d6acba309d 100644 --- a/src/plays/index.js +++ b/src/plays/index.js @@ -17,4 +17,5 @@ export { default as AnalogClock } from 'plays/analog-clock/AnalogClock'; export { default as PasswordGenerator } from 'plays/password-generator/PasswordGenerator'; export { default as WhyTypescript } from 'plays/why-typescript/WhyTypescript'; export { default as NetlifyCardGame } from 'plays/memory-game/NetlifyCardGame'; +export { default as FunQuiz } from 'plays/fun-quiz/FunQuiz'; //add export here From 34e92fb908e6bb1c73dfaf36759b86f533245737 Mon Sep 17 00:00:00 2001 From: Angryman18 Date: Sun, 15 May 2022 13:29:23 +0530 Subject: [PATCH 2/6] map key was missing fixed --- src/plays/fun-quiz/EndScreen.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plays/fun-quiz/EndScreen.jsx b/src/plays/fun-quiz/EndScreen.jsx index e9eb1c9424..87202a1408 100644 --- a/src/plays/fun-quiz/EndScreen.jsx +++ b/src/plays/fun-quiz/EndScreen.jsx @@ -55,6 +55,7 @@ const EndScreen = ({ quizSummary, redirectHome }) => { {result.map((item, index) => { return (
    Date: Tue, 17 May 2022 09:45:27 +0530 Subject: [PATCH 3/6] font removed --- src/plays/fun-quiz/FrontScreen.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plays/fun-quiz/FrontScreen.scss b/src/plays/fun-quiz/FrontScreen.scss index 4ba1150366..4228c5d991 100644 --- a/src/plays/fun-quiz/FrontScreen.scss +++ b/src/plays/fun-quiz/FrontScreen.scss @@ -1,5 +1,4 @@ -@import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700&display=swap'); .fun-quiz-main { overflow: hidden; @@ -7,7 +6,6 @@ flex-direction: column; align-items: center; justify-content: center; - font-family: 'Quicksand', sans-serif; .main-child { width: 500px; From 84df18a63c4713cd6e75c04b0728cfa8fec8d597 Mon Sep 17 00:00:00 2001 From: Angryman18 Date: Wed, 18 May 2022 20:31:32 +0530 Subject: [PATCH 4/6] required changes --- src/meta/play-meta.js | 2 +- src/plays/fun-quiz/EndScreen.jsx | 8 ++-- src/plays/fun-quiz/FrontScreen.jsx | 64 +----------------------------- src/plays/fun-quiz/QuizScreen.jsx | 2 +- src/plays/fun-quiz/QuizScreen.scss | 48 ++++++++++++---------- src/plays/fun-quiz/Readme.md | 12 +++++- src/plays/fun-quiz/options.json | 62 +++++++++++++++++++++++++++++ 7 files changed, 105 insertions(+), 93 deletions(-) create mode 100644 src/plays/fun-quiz/options.json diff --git a/src/meta/play-meta.js b/src/meta/play-meta.js index b6145694b5..c4f72248b7 100644 --- a/src/meta/play-meta.js +++ b/src/meta/play-meta.js @@ -234,7 +234,7 @@ export const plays = [ }, { id: 'pl-fun-quiz', name: 'Fun Quiz', - description: 'its a fun quiz app where people can take serious quiz or also do cheating as intended.', + description: 'Its a Fun Quiz app which lets player to choose desirable category to answer 20 unique question with 4 options and pick the correct one.', component: () => {return }, path: '/plays/fun-quiz', level: 'Intermediate', diff --git a/src/plays/fun-quiz/EndScreen.jsx b/src/plays/fun-quiz/EndScreen.jsx index 87202a1408..e867adc185 100644 --- a/src/plays/fun-quiz/EndScreen.jsx +++ b/src/plays/fun-quiz/EndScreen.jsx @@ -37,11 +37,10 @@ const EndScreen = ({ quizSummary, redirectHome }) => {

    Quiz Summary

    - {!cheatedAnswers &&

    Congratulations!

    } - {!!cheatedAnswers &&

    You Cheated!

    } + {!cheatedAnswers ?

    Congratulations!

    :

    You Cheated!

    }

    - Correct Answer(s): {correctAnswers}{" "} + Correct Answer(s): {correctAnswers} {!!cheatedAnswers && ( ({cheatedAnswers} cheated) )} @@ -55,7 +54,7 @@ const EndScreen = ({ quizSummary, redirectHome }) => { {result.map((item, index) => { return (
    {

    -
    ); }; diff --git a/src/plays/fun-quiz/FrontScreen.jsx b/src/plays/fun-quiz/FrontScreen.jsx index 976d025f71..938fd14c91 100644 --- a/src/plays/fun-quiz/FrontScreen.jsx +++ b/src/plays/fun-quiz/FrontScreen.jsx @@ -2,69 +2,7 @@ import { useState } from "react"; // css import "./FrontScreen.scss"; - -const options = [ - { - name: "All", - id: "all", - }, - { - name: "Books", - id: 10, - }, - { - name: "General Knwoledge", - id: 9, - }, - { - name: "Film", - id: 11, - }, - { - name: "Music", - id: 12, - }, - { - name: "Television", - id: 14, - }, - { - name: "Video Games", - id: 15, - }, - { - name: "Computers", - id: 18, - }, - { - name: "Mathematics", - id: 19, - }, - { - name: "Sports", - id: 21, - }, - { - name: "Geography", - id: 22, - }, - { - name: "History", - id: 23, - }, - { - name: "Politics", - id: 24, - }, - { - name: "Celebrities", - id: 26, - }, - { - name: "Science & Nature", - id: 17, - }, -]; +import options from './options.json' const CATEGORY_SELECTION = "CATEGORY_SELECTION"; const RULES_DISPLAY = "RULES_DISPLAY"; diff --git a/src/plays/fun-quiz/QuizScreen.jsx b/src/plays/fun-quiz/QuizScreen.jsx index 815ea36831..6382283833 100644 --- a/src/plays/fun-quiz/QuizScreen.jsx +++ b/src/plays/fun-quiz/QuizScreen.jsx @@ -18,7 +18,7 @@ function QuizScreen({ category, getQuizSummary }) { const [questionNumber, setQuestionNumber] = useState(0); const [timer, setTimer] = useState(30); - const formatCategoryText = category !== "all" ? `&category=${category}` : ""; + const formatCategoryText = !category ? "" : `&category=${category}`; const currentQuestion = quizData?.data?.[questionNumber]; useEffect(() => { diff --git a/src/plays/fun-quiz/QuizScreen.scss b/src/plays/fun-quiz/QuizScreen.scss index e65e22eb15..e2b03fb41a 100644 --- a/src/plays/fun-quiz/QuizScreen.scss +++ b/src/plays/fun-quiz/QuizScreen.scss @@ -1,16 +1,20 @@ @import url("https://fonts.googleapis.com/css2?family=Russo+One&display=swap"); // russo one -$text-color: rgba(32, 73, 105, 1); +$quiz-app-text-color: rgba(32, 73, 105, 1); +$quiz-app-black-color: #444444; +$quiz-app-white-color: #ffffff; +$quiz-app-green-color: rgba(0, 160, 62, 1); +$quiz-app-light-gray: rgba(242, 244, 246, 1); +$quiz-app-border-color: #ccc; .fun-quiz { - .fun-quiz-screen { + &-screen { margin-top: 4rem; width: 100%; overflow: hidden; position: relative; color: black; display: block; - font-family: "Quicksand", sans-serif; position: relative; @media screen and (max-width: 1366px) { @@ -27,7 +31,7 @@ $text-color: rgba(32, 73, 105, 1); } .timer { - border: 1px solid #444444; + border: 1px solid $quiz-app-black-color; border-radius: 50%; width: 100px; aspect-ratio: 1/1; @@ -35,7 +39,7 @@ $text-color: rgba(32, 73, 105, 1); place-items: center; font-family: "Russo One", sans-serif; font-size: 3rem; - color: #444444; + color: $quiz-app-black-color; margin-bottom: 2rem; } @@ -60,8 +64,8 @@ $text-color: rgba(32, 73, 105, 1); flex-direction: column; .question-info { - background-color: #444444; - color: white; + background-color: $quiz-app-black-color; + color: $quiz-app-white-color; padding: 8px 1rem; margin: 1rem; border-radius: 30px; @@ -75,12 +79,12 @@ $text-color: rgba(32, 73, 105, 1); background-color: rgba(255, 247, 247, 1); box-shadow: inset 0px 0px 10px 1px rgba(255, 247, 255, 1); border-radius: 20px; - border: 1px solid #ccc; + border: 1px solid $quiz-app-border-color; h1 { margin: 0.5rem 2rem; - color: $text-color; + color: $quiz-app-text-color; font-size: clamp(1rem, 5vw, 1.5rem); } } @@ -116,36 +120,36 @@ $text-color: rgba(32, 73, 105, 1); &:hover { cursor: pointer; - background-color: rgba(0, 160, 62, 1); - color: white; + background-color: $quiz-app-green-color; + color: $quiz-app-white-color; } } .blinking-options { animation: blinker 0.2s linear infinite; - background-color: rgba(242, 244, 246, 1); - color: #444444; + background-color: $quiz-app-light-gray; + color: $quiz-app-black-color; @keyframes blinker { from { - background-color: rgba(242, 244, 246, 1); - color: #444444; + background-color: $quiz-app-light-gray; + color: $quiz-app-black-color; } 50% { - background-color: rgba(0, 160, 62, 1); - color: white; + background-color: $quiz-app-green-color; + color: $quiz-app-white-color; } to { - background-color: rgba(242, 244, 246, 1); - color: #444444; + background-color: $quiz-app-light-gray; + color: $quiz-app-black-color; } } } .active-option { - background-color: rgba(0, 160, 62, 1); + background-color: $quiz-app-green-color; box-shadow: inset 0px 0px 10px 2px rgba(0, 0, 0, 0.1); - color: white; + color: $quiz-app-white-color; } } @@ -157,7 +161,7 @@ $text-color: rgba(32, 73, 105, 1); cursor: pointer; border: none; border-radius: 30px; - color: white; + color: $quiz-app-white-color; color: #ffffff; font-weight: 600; diff --git a/src/plays/fun-quiz/Readme.md b/src/plays/fun-quiz/Readme.md index e8cf9db5a8..18e406382f 100644 --- a/src/plays/fun-quiz/Readme.md +++ b/src/plays/fun-quiz/Readme.md @@ -1 +1,11 @@ -# Fun Quiz \ No newline at end of file +# Fun Quiz + +The `Fun Quiz` is a very fun play build with ReactJS & moreover its a quiz game where you will be asked 20 unique question and player have to choose one answer out of 4 options. + + +There is some key things we can also learn from projects are + +- Handling complex logics in ReactJS. +- using useEffect for api call and handling data using useState hook. +- Managing Complex and Nested States. +- use of scss in ReactJS. diff --git a/src/plays/fun-quiz/options.json b/src/plays/fun-quiz/options.json new file mode 100644 index 0000000000..6dbaa37302 --- /dev/null +++ b/src/plays/fun-quiz/options.json @@ -0,0 +1,62 @@ +[ + { + "name": "All", + "id": 0 + }, + { + "name": "Books", + "id": 10 + }, + { + "name": "General Knwoledge", + "id": 9 + }, + { + "name": "Films", + "id": 11 + }, + { + "name": "Musics", + "id": 12 + }, + { + "name": "Television", + "id": 14 + }, + { + "name": "Video Games", + "id": 15 + }, + { + "name": "Computers", + "id": 18 + }, + { + "name": "Mathematics", + "id": 19 + }, + { + "name": "Sports", + "id": 21 + }, + { + "name": "Geography", + "id": 22 + }, + { + "name": "History", + "id": 23 + }, + { + "name": "Politics", + "id": 24 + }, + { + "name": "Celebrities", + "id": 26 + }, + { + "name": "Science & Nature", + "id": 17 + } +] From fce4aeea33ae0ccc35e6c664999d4249c3431394 Mon Sep 17 00:00:00 2001 From: Angryman18 Date: Wed, 18 May 2022 20:39:29 +0530 Subject: [PATCH 5/6] little fix --- src/plays/fun-quiz/QuizScreen.jsx | 2 +- src/plays/fun-quiz/options.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plays/fun-quiz/QuizScreen.jsx b/src/plays/fun-quiz/QuizScreen.jsx index 6382283833..6ec680aad0 100644 --- a/src/plays/fun-quiz/QuizScreen.jsx +++ b/src/plays/fun-quiz/QuizScreen.jsx @@ -18,7 +18,7 @@ function QuizScreen({ category, getQuizSummary }) { const [questionNumber, setQuestionNumber] = useState(0); const [timer, setTimer] = useState(30); - const formatCategoryText = !category ? "" : `&category=${category}`; + const formatCategoryText = category === "all" ? "" : `&category=${category}`; const currentQuestion = quizData?.data?.[questionNumber]; useEffect(() => { diff --git a/src/plays/fun-quiz/options.json b/src/plays/fun-quiz/options.json index 6dbaa37302..499e3ae75d 100644 --- a/src/plays/fun-quiz/options.json +++ b/src/plays/fun-quiz/options.json @@ -1,7 +1,7 @@ [ { "name": "All", - "id": 0 + "id": "all" }, { "name": "Books", From 9c9f35b1d1e18859494a046118088327cabee6e2 Mon Sep 17 00:00:00 2001 From: Angryman18 Date: Sat, 21 May 2022 11:37:31 +0530 Subject: [PATCH 6/6] required changes --- src/plays/fun-quiz/EndScreen.jsx | 38 +++++++--- src/plays/fun-quiz/FrontScreen.jsx | 7 +- src/plays/fun-quiz/FrontScreen.scss | 107 +++++++++++++++++++++------- src/plays/fun-quiz/QuizScreen.jsx | 14 ++-- src/plays/fun-quiz/QuizScreen.scss | 34 ++++----- src/plays/fun-quiz/_variables.scss | 27 +++++++ 6 files changed, 165 insertions(+), 62 deletions(-) create mode 100644 src/plays/fun-quiz/_variables.scss diff --git a/src/plays/fun-quiz/EndScreen.jsx b/src/plays/fun-quiz/EndScreen.jsx index e867adc185..f8fdaf908c 100644 --- a/src/plays/fun-quiz/EndScreen.jsx +++ b/src/plays/fun-quiz/EndScreen.jsx @@ -8,11 +8,15 @@ const EndScreen = ({ quizSummary, redirectHome }) => { const { correctAnswers, cheatedAnswers, wrongAnswers, result } = quizSummary; const [currentQuestion, setCurrentQuestion] = useState({}); - const ShowCurrentQuestionDetails = ({currentQuestion}) => { + const ShowCurrentQuestionDetails = ({ currentQuestion }) => { if (!Object.keys(currentQuestion).length) return false; return ( -
    -
    Question: {currentQuestion?.qNo}
    +
    +
    Question: {currentQuestion?.qNo}
  • {

    Quiz Summary

    - {!cheatedAnswers ?

    Congratulations!

    :

    You Cheated!

    } + {!cheatedAnswers ? ( +

    Congratulations!

    + ) : ( +

    You Cheated!

    + )}
    -

    - Correct Answer(s): {correctAnswers} +
    +

    + {correctAnswers} + Correct Answers +

    {!!cheatedAnswers && ( - ({cheatedAnswers} cheated) +

    ({cheatedAnswers} cheated)

    )} -

    -

    Wrong Answer(s): {wrongAnswers}

    +
    +
    + {wrongAnswers} + Wrong Answers +
    @@ -54,11 +68,13 @@ const EndScreen = ({ quizSummary, redirectHome }) => { {result.map((item, index) => { return (
    setCurrentQuestion({...item, qNo: index+1})} + onClick={() => + setCurrentQuestion({ ...item, qNo: index + 1 }) + } > {index + 1}
    diff --git a/src/plays/fun-quiz/FrontScreen.jsx b/src/plays/fun-quiz/FrontScreen.jsx index 938fd14c91..6f9d091502 100644 --- a/src/plays/fun-quiz/FrontScreen.jsx +++ b/src/plays/fun-quiz/FrontScreen.jsx @@ -37,7 +37,10 @@ const QuizSelectionScreen = ({ getSelectedCategory }) => { 6. You will be given 30 seconds to answer each question and timeup is considered as an incorrect answer and next question will be displayed.

    -

    7. You can use cheats to cheat the answer.

    +

    + 7. After selecting an option you can click on selected option to unselect it. +

    +

    8. You can use cheats to cheat the answer.