@@ -1,33 +1,22 @@ | |||
import { IonButton, IonContent, IonIcon, IonPage } from "@ionic/react"; | |||
import styles from "./TimeSlot.module.scss"; | |||
import { chevronBack, key } from 'ionicons/icons' | |||
import { chevronBack } from 'ionicons/icons' | |||
import { Link } from "react-router-dom"; | |||
import { useState } from "react"; | |||
import { addDays, format } from "date-fns"; | |||
// singular | |||
interface dates { | |||
date: string; | |||
day: string; | |||
} | |||
import { format } from "date-fns"; | |||
import { Dates, TimeSlots } from "../../mockData/TimeSlotDetails"; | |||
interface OwnProps { | |||
month: string; | |||
dates: dates[]; | |||
timeSlots: string[]; | |||
getDate: (date: string) => void; | |||
} | |||
const TimeSlot: React.FC<OwnProps> = (props) => { | |||
const [highlightedDate, setHighlightedDate] = useState<dates>(); | |||
const [highlightedDate, setHighlightedDate] = useState<Date>(); | |||
const [highlightedTime, setHighlightedTime] = useState<string>(""); | |||
const dates = props.dates.map((date, key) => { | |||
const currentDate = new Date(); | |||
let day = addDays(currentDate, key + 1); | |||
const dates = Dates.map((date, key) => { | |||
return ( | |||
<div | |||
className={styles.date + " " + (date === highlightedDate ? styles.active : "")} | |||
@@ -35,17 +24,18 @@ const TimeSlot: React.FC<OwnProps> = (props) => { | |||
onClick={() => setHighlightedDate(date)}> | |||
<div className={styles.day}> | |||
{format(day, 'eee')} | |||
{format(date, 'eee')} | |||
</div> | |||
<div> | |||
{format(day, 'e')} | |||
{format(date, 'e')} | |||
</div> | |||
</div> | |||
); | |||
}); | |||
const timeSlots = props.timeSlots.map((timeSlot, key) => { | |||
const timeSlots = TimeSlots.map((timeSlot, key) => { | |||
return ( | |||
<div | |||
className={styles.time + " " + (timeSlot === highlightedTime ? styles.activeTime : "")} | |||
@@ -17,7 +17,7 @@ let quizDetails: QuizDetails[] = [ | |||
], | |||
answer: ["System.out.println('Hello, how are you?');"], | |||
result: false, | |||
timeLimit: 0.1 | |||
timeLimit: 10 | |||
}, | |||
{ | |||
question: "How do you write 'Hello World' in an alert box?", | |||
@@ -29,7 +29,7 @@ let quizDetails: QuizDetails[] = [ | |||
], | |||
answer: ["alert('Hello World');"], | |||
result: false, | |||
timeLimit: 0.2 | |||
timeLimit: 25 | |||
}, | |||
{ | |||
question: "is javascript", | |||
@@ -41,14 +41,14 @@ let quizDetails: QuizDetails[] = [ | |||
], | |||
answer: ["B", "C"], | |||
result: false, | |||
timeLimit: 1 | |||
timeLimit: 35 | |||
}, | |||
{ | |||
question: "Is javascript single threaded or multi threaded? enter the answer in the below box ", | |||
options: [], | |||
answer: ["single threaded"], | |||
result: false, | |||
timeLimit: 1 | |||
timeLimit: 40 | |||
} | |||
]; | |||
@@ -0,0 +1,7 @@ | |||
import { addBusinessDays, format } from "date-fns"; | |||
const currentDate = new Date(); | |||
export const Dates = [addBusinessDays(currentDate, 1), addBusinessDays(currentDate, 2), addBusinessDays(currentDate, 3), addBusinessDays(currentDate, 4)]; | |||
export const TimeSlots = ["11:00 AM - 1:00 pm", "1:00 PM - 3:00 pm", "3:00 PM - 5:00 pm"]; |
@@ -10,11 +10,6 @@ import TimeSlot from "../../components/timeSlot/TimeSlot"; | |||
import { useCountdown } from "../../components/CountDownTimer/useCountdown"; | |||
import { addDays } from "date-fns"; | |||
interface dates { | |||
date: string; | |||
day: string; | |||
} | |||
const FinalInterview: React.FC = () => { | |||
const [isDateSet, setDate] = useState<boolean>(false); | |||
@@ -22,27 +17,6 @@ const FinalInterview: React.FC = () => { | |||
const [days, hours, minutes, seconds] = useCountdown(addDays(new Date(), 3)); | |||
const timeSlots = ["11:00 AM - 1:00 pm", "1:00 PM - 3:00 pm", "3:00 PM - 5:00 pm"]; | |||
const dates: dates[] = [ | |||
{ | |||
date: "27", | |||
day: "Tue" | |||
}, | |||
{ | |||
date: "29", | |||
day: "Sat" | |||
}, | |||
{ | |||
date: "01", | |||
day: "Mon" | |||
}, | |||
{ | |||
date: "03", | |||
day: "Wed" | |||
}, | |||
]; | |||
const getDate = (date: string) => { | |||
console.log(date); | |||
setTimeSlot(false); | |||
@@ -103,8 +77,6 @@ const FinalInterview: React.FC = () => { | |||
isTimeSlot && | |||
<TimeSlot | |||
month="April-May" | |||
dates={dates} | |||
timeSlots={timeSlots} | |||
getDate={getDate} /> | |||
} | |||
@@ -49,9 +49,15 @@ const StepsDescription: React.FC<Props> = (props) => { | |||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. | |||
</p> | |||
<Link to={props.link} className={styles.button}> | |||
<IonButton shape="round" expand='block'>{props.buttonText}</IonButton> | |||
</Link> | |||
{props.isRoundCompleted ? | |||
<Link to="/interviewRounds" className={styles.button}> | |||
<IonButton shape="round" expand='block'>Completed</IonButton> | |||
</Link> | |||
: | |||
<Link to={props.link} className={styles.button}> | |||
<IonButton shape="round" expand='block'>{props.buttonText}</IonButton> | |||
</Link> | |||
} | |||
</div> | |||
); | |||
@@ -47,7 +47,7 @@ const PreliminaryRound: React.FC = () => { | |||
</div> | |||
</IonContent> | |||
</IonPage> | |||
) | |||
); | |||
} | |||
export default PreliminaryRound; |
@@ -1,7 +1,7 @@ | |||
import { useEffect, useState } from "react"; | |||
import styles from "./Question.module.scss"; | |||
import { CountdownCircleTimer } from 'react-countdown-circle-timer'; | |||
import { secondsToMinutes } from "date-fns"; | |||
interface OwnProp { | |||
questionNumber: number; | |||
@@ -14,38 +14,30 @@ interface OwnProp { | |||
let timeout: NodeJS.Timeout; | |||
const Question: React.FC<OwnProp> = (props) => { | |||
const COUNTDOWN_AMOUNT_TOTAL = props.timeLimit * 60; | |||
const [seconds, setSeconds] = useState<number>(COUNTDOWN_AMOUNT_TOTAL); | |||
const [seconds, setSeconds] = useState<number>(props.timeLimit); | |||
const displaySeconds = seconds % 60; | |||
const displayMinutes = Math.floor(seconds / 60); | |||
useEffect(() => { | |||
if (seconds > 0) { | |||
timeout = setTimeout(() => { | |||
setSeconds((state) => state - 1); | |||
}, 1000); | |||
} else { | |||
clearTimeout(timeout); | |||
} | |||
console.log(seconds); | |||
if (seconds === 0) { | |||
props.updateQuestionNumber(); | |||
} | |||
return () => clearTimeout(timeout); | |||
setTimeout(() => { | |||
if (seconds <= 0) { | |||
props.updateQuestionNumber(); | |||
console.log(props.timeLimit); | |||
setSeconds(5) | |||
} else { | |||
setSeconds(seconds - 1); | |||
} | |||
}, 500); | |||
}, [seconds]); | |||
const renderTime = () => { | |||
return ( | |||
<div className={styles.time}> | |||
{`${displayMinutes < 10 ? "0" : ""}${displayMinutes}:${displaySeconds < 10 ? "0" : ""}${displaySeconds}`} | |||
{ | |||
`${secondsToMinutes(seconds).toString().padStart(2, '0')}: | |||
${displaySeconds.toString().padStart(2, '0')}` | |||
} | |||
</div> | |||
); | |||
} | |||
@@ -64,9 +56,14 @@ const Question: React.FC<OwnProp> = (props) => { | |||
<CountdownCircleTimer | |||
isPlaying | |||
duration={COUNTDOWN_AMOUNT_TOTAL} | |||
duration={props.timeLimit} | |||
colors={'#6BD534'} | |||
size={60} | |||
onComplete={() => { | |||
// setSeconds(COUNTDOWN_AMOUNT_TOTAL); | |||
// props.updateQuestionNumber(); | |||
return { shouldRepeat: true } | |||
}} | |||
strokeWidth={5} > | |||
{renderTime} | |||
@@ -18,8 +18,8 @@ const Quiz: React.FC = () => { | |||
setQuestionNumber((questionNumber) => questionNumber + 1); | |||
} | |||
} | |||
console.log("no", questionNumber); | |||
console.log(quizDetails[questionNumber - 1]); | |||
return ( | |||
<div className={styles.quizContainer}> | |||
@@ -24,33 +24,6 @@ const TechnicalInterview: React.FC = () => { | |||
const [days, hours, minutes, seconds] = useCountdown(addDays(new Date(), 3)); | |||
console.log(days, hours, minutes, seconds); | |||
// useEffect(() => { | |||
// console.log("render"); | |||
// }, [seconds]); | |||
const timeSlots = ["11:00 AM - 1:00 pm", "1:00 PM - 3:00 pm", "3:00 PM - 5:00 pm"]; | |||
const dates: dates[] = [ | |||
{ | |||
date: "27", | |||
day: "Tue" | |||
}, | |||
{ | |||
date: "29", | |||
day: "Sat" | |||
}, | |||
{ | |||
date: "01", | |||
day: "Mon" | |||
}, | |||
{ | |||
date: "03", | |||
day: "Wed" | |||
}, | |||
]; | |||
const getDate = (date: string) => { | |||
setTimeSlot(false); | |||
setDate(true); | |||
@@ -115,8 +88,6 @@ const TechnicalInterview: React.FC = () => { | |||
isTimeSlot && | |||
<TimeSlot | |||
month="April-May" | |||
dates={dates} | |||
timeSlots={timeSlots} | |||
getDate={getDate} /> | |||
} | |||