@@ -39,7 +39,6 @@ import Celebration from './pages/celebration/Celebration'; | |||
import SignaturePhoto from './pages/joiningLetter/SignaturePhoto'; | |||
import TechinicalInterviewResults from './pages/technicalInterview/TechinicalInterviewResults'; | |||
setupIonicReact(); | |||
const App: React.FC = () => ( | |||
@@ -0,0 +1,29 @@ | |||
.radioHolder { | |||
display: flex; | |||
align-items: center; | |||
min-width: 33.5rem; | |||
margin: 0 auto; | |||
--background: white; | |||
border: 1px solid #DBDBDB; | |||
border-radius: 25px; | |||
height: 4rem; | |||
.icon { | |||
width: 2rem; | |||
height: 2rem; | |||
margin-left: 1.5rem; | |||
} | |||
.option { | |||
margin-left: 2rem; | |||
color: #626262; | |||
font-size: 1.2rem; | |||
font-weight: 200; | |||
} | |||
&.highlighted { | |||
box-shadow: 0px 0px 10px #00000029; | |||
.icon { | |||
color: var(--primary-button-color); | |||
} | |||
} | |||
} |
@@ -0,0 +1,35 @@ | |||
import styles from "./RadioButton.module.scss"; | |||
import { radioButtonOff, radioButtonOn } from "ionicons/icons"; | |||
import { IonIcon } from "@ionic/react"; | |||
import { useEffect, useState } from "react"; | |||
interface OwnProps { | |||
option: string; | |||
isChecked: boolean; | |||
isHighlighted?: boolean; | |||
} | |||
const RadioButton: React.FC<OwnProps> = (props) => { | |||
const [icon, setIcon] = useState(radioButtonOff); | |||
useEffect(() => { | |||
if (props.isChecked) { | |||
setIcon(radioButtonOn); | |||
} else { | |||
setIcon(radioButtonOff); | |||
} | |||
}, [props.isChecked]); | |||
return ( | |||
<div className={styles.radioContent}> | |||
<div className={styles.radioHolder + " " + (props.isChecked ? styles.highlighted : "")}> | |||
<IonIcon icon={icon} className={styles.icon} /> | |||
<div className={styles.option}>{props.option}</div> | |||
</div> | |||
</div> | |||
); | |||
} | |||
export default RadioButton; |
@@ -12,7 +12,7 @@ const QUIZ_DETAILS: QuizDetails[] = [ | |||
], | |||
answer: ["System.out.println('Hello, how are you?');"], | |||
result: false, | |||
timeLimit: 5, | |||
timeLimit: 5000, | |||
type: OptionType.SINGLE_SELECT | |||
}, | |||
{ | |||
@@ -25,7 +25,7 @@ const QUIZ_DETAILS: QuizDetails[] = [ | |||
], | |||
answer: ["alert('Hello World');"], | |||
result: false, | |||
timeLimit: 10, | |||
timeLimit: 5, | |||
type: OptionType.SINGLE_SELECT | |||
}, | |||
@@ -63,6 +63,19 @@ const QUIZ_DETAILS: QuizDetails[] = [ | |||
timeLimit: 35, | |||
type: OptionType.MULTI_SELECT | |||
}, | |||
{ | |||
question: "is javascript", | |||
options: [ | |||
"A", | |||
"B", | |||
"C", | |||
"D" | |||
], | |||
answer: ["B", "C"], | |||
result: false, | |||
timeLimit: 35, | |||
type: OptionType.MULTI_SELECT | |||
} | |||
]; | |||
export default QUIZ_DETAILS; |
@@ -3,6 +3,7 @@ import { useEffect, useRef, useState } from 'react'; | |||
import { Link } from 'react-router-dom'; | |||
import styles from './Options.module.scss'; | |||
import { OptionType } from '../../models/QuizDetails' | |||
import RadioButton from '../../components/RadioButton/RadioButton'; | |||
interface OwnProps { | |||
options: string[] | undefined; | |||
@@ -22,10 +23,11 @@ const Options: React.FC<OwnProps> = (props) => { | |||
const inputRef = useRef<HTMLTextAreaElement>(null); | |||
useEffect(() => { | |||
setSelected(undefined); | |||
setSelected(""); | |||
setSelectedOptions([]); | |||
setTextInput(""); | |||
}, [props.options]); | |||
}, [props.questionNumber]); | |||
const selectChecked = (option: string) => { | |||
let newOption: string[] = []; | |||
@@ -43,7 +45,8 @@ const Options: React.FC<OwnProps> = (props) => { | |||
setAnswers(answers + 1); | |||
} | |||
} else if (props.type === "multiSelect") { | |||
if (props.answer.length === selectedOptions.length && props.answer.sort().join(',') === selectedOptions.sort().join(',')) { | |||
if (props.answer.length === selectedOptions.length && | |||
props.answer.sort().join(',') === selectedOptions.sort().join(',')) { | |||
setAnswers(answers + 1); | |||
} | |||
@@ -55,21 +58,22 @@ const Options: React.FC<OwnProps> = (props) => { | |||
} | |||
const handleInput = () => { | |||
setTextInput(inputRef.current?.value!) | |||
setTextInput(inputRef.current?.value!); | |||
} | |||
const setAnswer = () => { | |||
localStorage.setItem("answer", answers.toString()); | |||
} | |||
const getAnswer = () => { | |||
} | |||
const options = props.options!.map((option, key) => { | |||
return ( | |||
<IonItem lines='none' key={key} className={(option === selected) ? styles.highlighted : ""}> | |||
<IonLabel>{option}</IonLabel> | |||
<IonRadio mode='md' slot="start" value={option} /> | |||
</IonItem> | |||
<div key={key} onClick={() => setSelected(option)}> | |||
<RadioButton option={option} isChecked={selected === option} /> | |||
</div> | |||
); | |||
}); | |||
@@ -92,9 +96,9 @@ const Options: React.FC<OwnProps> = (props) => { | |||
<div className={styles.optionHolder}> | |||
<IonList> | |||
{props.type === "singleSelect" && | |||
<IonRadioGroup onIonChange={e => setSelected(e.detail.value)} allowEmptySelection={true} className={styles.options}> | |||
<div className={styles.options}> | |||
{options} | |||
</IonRadioGroup> | |||
</div> | |||
} | |||
{props.type === "multiSelect" && | |||
<div className={styles.options}> | |||