Przeglądaj źródła

created mock quiz data and logic changes to quiz component

develop
Ajay_S 3 lat temu
rodzic
commit
22450e8d60
8 zmienionych plików z 117 dodań i 29 usunięć
  1. +57
    -0
      src/mockData/QuizDetails.tsx
  2. +2
    -2
      src/mockData/StepDetails.tsx
  3. +1
    -0
      src/pages/interviewRounds/Steps.module.scss
  4. +16
    -0
      src/pages/quiz/Options.module.scss
  5. +11
    -6
      src/pages/quiz/Options.tsx
  6. +9
    -1
      src/pages/quiz/Question.tsx
  7. +4
    -0
      src/pages/quiz/Quiz.module.scss
  8. +17
    -20
      src/pages/quiz/Quiz.tsx

+ 57
- 0
src/mockData/QuizDetails.tsx Wyświetl plik

@@ -0,0 +1,57 @@
interface QuizDetails {
question: string;
options?: string[];
answer: string[];
result: boolean;
timeLimit: number;
}


let quizDetails: QuizDetails[] = [
{
question: "How would you correctly display, “Hello, how are you?”?",
options: [
"System.out.println('Hello, how are you?');",
"println('Hello, how are you?');",
"out.print(Hello, how are you?);",
"System.out.println(Hello, how are you?);"
],
answer: ["System.out.println('Hello, how are you?');"],
result: false,
timeLimit: 0.1
},
{
question: "How do you write 'Hello World' in an alert box?",
options: [
"msgBox('Hello World')",
"alertBox('Hello World');",
"msg('Hello World');",
"alert('Hello World');"
],
answer: ["alert('Hello World');"],
result: false,
timeLimit: 0.2
},
{
question: "is javascript",
options: [
"A",
"B",
"C",
"D"
],
answer: ["B", "C"],
result: false,
timeLimit: 1
},
{
question: "Is javascript single threaded or multi threaded? enter the answer in the below box ",
options: [],
answer: ["single threaded"],
result: false,
timeLimit: 1
}
];


export default quizDetails;

+ 2
- 2
src/mockData/StepDetails.tsx Wyświetl plik

@@ -7,7 +7,7 @@ import closingDocs from '../assets/icons/Closing_Docs.svg';
import joiningLetter from '../assets/icons/Joining_Letter.svg'; import joiningLetter from '../assets/icons/Joining_Letter.svg';
import Celebrations from '../assets/icons/Celebrations.svg'; import Celebrations from '../assets/icons/Celebrations.svg';


interface stepDetail {
interface StepDetail {
stepNumber: number; stepNumber: number;
stepName: string; stepName: string;
descriptionImage: string; descriptionImage: string;
@@ -18,7 +18,7 @@ interface stepDetail {
} }




let steps: stepDetail[] = [
let steps: StepDetail[] = [
{ {
stepNumber: 1, stepNumber: 1,
stepName: "Skill Information", stepName: "Skill Information",


+ 1
- 0
src/pages/interviewRounds/Steps.module.scss Wyświetl plik

@@ -38,6 +38,7 @@ ion-item {
font-size: 1.4rem; font-size: 1.4rem;
font-weight: 600; font-weight: 600;
} }
.heading { .heading {
margin: 0; margin: 0;
color: #363636; color: #363636;


+ 16
- 0
src/pages/quiz/Options.module.scss Wyświetl plik

@@ -36,5 +36,21 @@
} }
} }


.button {
text-decoration: none;
width: 100%;
margin-top: 4rem;
ion-button {
--background: #DDDDDD;
width: 90%;
margin: 0 auto;
}
}

.active {
ion-button {
--background: var(--primary-button-color);
}
}


} }

+ 11
- 6
src/pages/quiz/Options.tsx Wyświetl plik

@@ -1,19 +1,19 @@
import { IonItem, IonLabel, IonList, IonRadio, IonRadioGroup } from '@ionic/react';
import { IonButton, IonItem, IonLabel, IonList, IonRadio, IonRadioGroup } from '@ionic/react';
import { useState } from 'react'; import { useState } from 'react';
import styles from './Options.module.scss'; import styles from './Options.module.scss';


interface OwnProps { interface OwnProps {
options: string[];
isSelected: (option: string) => void;
options: string[] | undefined;
updateQuestionNumber: () => void;
} }


const Options: React.FC<OwnProps> = (props) => { const Options: React.FC<OwnProps> = (props) => {


const [selected, setSelected] = useState<string>("null");
const [selected, setSelected] = useState<string | undefined>(undefined);


if (selected !== "null") props.isSelected(selected);
// console.log(selected);


const options = props.options.map((option, key) => {
const options = props.options!.map((option, key) => {
return ( return (
<IonItem lines='none' key={key} className={(option === selected) ? styles.highlighted : ""}> <IonItem lines='none' key={key} className={(option === selected) ? styles.highlighted : ""}>
<IonLabel>{option}</IonLabel> <IonLabel>{option}</IonLabel>
@@ -29,6 +29,11 @@ const Options: React.FC<OwnProps> = (props) => {
{options} {options}
</IonRadioGroup> </IonRadioGroup>
</IonList> </IonList>

<div className={styles.button + " " + (selected ? styles.active : "")}
onClick={() => props.updateQuestionNumber()}>
<IonButton shape="round" expand='block'>Next</IonButton>
</div>
</div> </div>
); );
} }


+ 9
- 1
src/pages/quiz/Question.tsx Wyświetl plik

@@ -7,6 +7,7 @@ interface OwnProp {
questionNumber: number; questionNumber: number;
question: string; question: string;
timeLimit: number; timeLimit: number;
updateQuestionNumber: () => void;
} }




@@ -31,9 +32,16 @@ const Question: React.FC<OwnProp> = (props) => {
clearTimeout(timeout); clearTimeout(timeout);
} }


return () => clearTimeout(timeout);;
console.log(seconds);

if (seconds === 0) {
props.updateQuestionNumber();
}

return () => clearTimeout(timeout);
}, [seconds]); }, [seconds]);



const renderTime = () => { const renderTime = () => {
return ( return (
<div className={styles.time}> <div className={styles.time}>


+ 4
- 0
src/pages/quiz/Quiz.module.scss Wyświetl plik

@@ -72,6 +72,10 @@
} }
} }


// ion-activated {
// --background: var(--primary-button-color);
// }

.active { .active {
ion-button { ion-button {
--background: var(--primary-button-color); --background: var(--primary-button-color);


+ 17
- 20
src/pages/quiz/Quiz.tsx Wyświetl plik

@@ -4,28 +4,23 @@ import { IonButton, IonIcon } from '@ionic/react';
import Options from './Options'; import Options from './Options';
import { closeOutline } from 'ionicons/icons' import { closeOutline } from 'ionicons/icons'
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { useState } from 'react';
import { useEffect, useState } from 'react';
import Question from './Question'; import Question from './Question';

// move to mock data
const options: string[] = [
"System.out.println(“Hello, how are you?”);",
"println('Hello, how are you?');",
"out.print(Hello, how are you?);",
"System.out.println(Hello, how are you?);"
];
import quizDetails from '../../mockData/QuizDetails';


const Quiz: React.FC = () => { const Quiz: React.FC = () => {


const [selected, setSelected] = useState<boolean>(false);

const isSelected = (option: string) => {
const [questionNumber, setQuestionNumber] = useState<number>(1);


if (option !== "null") {
setSelected(true);
const updateQuestionNumber = () => {
console.log("update")
if (quizDetails.length > questionNumber) {
setQuestionNumber((questionNumber) => questionNumber + 1);
} }
} }


console.log("no", questionNumber);

return ( return (
<div className={styles.quizContainer}> <div className={styles.quizContainer}>
<div className={styles.upfold}> <div className={styles.upfold}>
@@ -36,20 +31,22 @@ const Quiz: React.FC = () => {
</Link> </Link>
</header> </header>


<Question question='How would you correctly display, “Hello, how are you?”?'
questionNumber={1}
timeLimit={2.5} />
<Question question={quizDetails[questionNumber - 1].question}
questionNumber={questionNumber}
timeLimit={quizDetails[questionNumber - 1].timeLimit}
updateQuestionNumber={updateQuestionNumber} />


</div> </div>


<div className={styles.quizOptions}> <div className={styles.quizOptions}>
<div className={styles.options}> <div className={styles.options}>
<Options options={options} isSelected={isSelected} />
<Options options={quizDetails[questionNumber - 1].options} updateQuestionNumber={updateQuestionNumber} />
</div> </div>


<Link to="/" className={styles.button + " " + (selected ? styles.active : "")}>
{/* <Link to="/" className={styles.button + " " + (selected ? styles.active : "")}>
<IonButton shape="round" expand='block'>Next</IonButton> <IonButton shape="round" expand='block'>Next</IonButton>
</Link>
</Link> */}

</div> </div>


</div> </div>


Ładowanie…
Anuluj
Zapisz