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