| @@ -22,7 +22,7 @@ import './App.scss'; | |||||
| import InterviewRounds from './pages/interviewRounds/InterviewRounds'; | import InterviewRounds from './pages/interviewRounds/InterviewRounds'; | ||||
| import SkillInformationStep from './pages/skillInformationStep/SkillInformationStep'; | import SkillInformationStep from './pages/skillInformationStep/SkillInformationStep'; | ||||
| import PreliminaryRound from './pages/preliminaryRound/PreliminaryRound'; | import PreliminaryRound from './pages/preliminaryRound/PreliminaryRound'; | ||||
| import Quiz from './pages/Quiz/Quiz'; | |||||
| import Quiz from './pages/quiz/Quiz'; | |||||
| import PreliminaryRoundResults from './pages/preliminaryRoundResults/PreliminaryRoundResults'; | import PreliminaryRoundResults from './pages/preliminaryRoundResults/PreliminaryRoundResults'; | ||||
| import TechnicalInterview from './pages/technicalInterview/TechnicalInterview'; | import TechnicalInterview from './pages/technicalInterview/TechnicalInterview'; | ||||
| import Assignment from './pages/assignment/Assignment'; | import Assignment from './pages/assignment/Assignment'; | ||||
| @@ -30,8 +30,8 @@ import AssignmentDetails from './pages/assignment/AssignmentDetails'; | |||||
| import SubmitAssignment from './pages/assignment/SubmitAssignment'; | import SubmitAssignment from './pages/assignment/SubmitAssignment'; | ||||
| import ReviewAssignment from './pages/assignment/ReviewAssignment'; | import ReviewAssignment from './pages/assignment/ReviewAssignment'; | ||||
| import AssignmentCompleted from './pages/assignment/AssignmentCompleted'; | import AssignmentCompleted from './pages/assignment/AssignmentCompleted'; | ||||
| import FinalInterview from './pages/FinalInterview/FinalInterview'; | |||||
| import FinalInterviewResult from './pages/FinalInterview/FinalInterviewResult'; | |||||
| import FinalInterview from './pages/finalInterview/FinalInterview'; | |||||
| import FinalInterviewResult from './pages/finalInterview/FinalInterviewResult'; | |||||
| import ClosingDocs from './pages/closingDocs/ClosingDocs'; | import ClosingDocs from './pages/closingDocs/ClosingDocs'; | ||||
| import VerifiedDocs from './pages/closingDocs/VerifiedDocs'; | import VerifiedDocs from './pages/closingDocs/VerifiedDocs'; | ||||
| import JoiningLetter from './pages/joiningLetter/JoiningLetter'; | import JoiningLetter from './pages/joiningLetter/JoiningLetter'; | ||||
| @@ -5,7 +5,7 @@ import { Link } from "react-router-dom"; | |||||
| import { useState } from "react"; | import { useState } from "react"; | ||||
| import { addDays } from "date-fns"; | import { addDays } from "date-fns"; | ||||
| // singular | |||||
| interface dates { | interface dates { | ||||
| date: string; | date: string; | ||||
| day: string; | day: string; | ||||
| @@ -24,16 +24,18 @@ const TimeSlot: React.FC<OwnProps> = (props) => { | |||||
| const [highlightedDate, setHighlightedDate] = useState<dates>(); | const [highlightedDate, setHighlightedDate] = useState<dates>(); | ||||
| const [highlightedTime, setHighlightedTime] = useState<string>(""); | const [highlightedTime, setHighlightedTime] = useState<string>(""); | ||||
| // use object insted of map | |||||
| const daysMap = new Map([[0, "Sun"], [1, "Mon"], [2, "Tue"], [3, "Wed"], [4, "Thu"], [5, "Fri"], [6, "Sat"]]); | const daysMap = new Map([[0, "Sun"], [1, "Mon"], [2, "Tue"], [3, "Wed"], [4, "Thu"], [5, "Fri"], [6, "Sat"]]); | ||||
| const dates = props.dates.map((date, key) => { | const dates = props.dates.map((date, key) => { | ||||
| const currentDate = new Date(); | const currentDate = new Date(); | ||||
| let day = addDays(currentDate, key + 1) | |||||
| let day = addDays(currentDate, key + 1); | |||||
| // if (daysMap.get(day) === "Thu") { // sat | // if (daysMap.get(day) === "Thu") { // sat | ||||
| // day = addDays(currentDate, key + 3).getDay(); | // day = addDays(currentDate, key + 3).getDay(); | ||||
| // } else if (daysMap.get(day) === "Fri") { | // } else if (daysMap.get(day) === "Fri") { | ||||
| // day = addDays(currentDate, key + 3).getDay(); | // day = addDays(currentDate, key + 3).getDay(); | ||||
| // } | // } | ||||
| console.log(highlightedDate); | |||||
| return ( | return ( | ||||
| <div | <div | ||||
| className={styles.date + " " + (date === highlightedDate ? styles.active : "")} | className={styles.date + " " + (date === highlightedDate ? styles.active : "")} | ||||
| @@ -0,0 +1,96 @@ | |||||
| import skillInfo from '../assets/icons/skill_Information.svg'; | |||||
| import preliminaryRound from '../assets/icons/Preliminary_Round.svg'; | |||||
| import technicalInterview from '../assets/icons/Technical_Interview.svg'; | |||||
| import assignment from '../assets/icons/Assignment.svg'; | |||||
| import finalInterview from '../assets/icons/Final_Interview.svg'; | |||||
| import closingDocs from '../assets/icons/Closing_Docs.svg'; | |||||
| import joiningLetter from '../assets/icons/Joining_Letter.svg'; | |||||
| import Celebrations from '../assets/icons/Celebrations.svg'; | |||||
| interface stepDetail { | |||||
| stepNumber: number; | |||||
| stepName: string; | |||||
| descriptionImage: string; | |||||
| buttonText: string; | |||||
| isUnlocked: boolean; | |||||
| link: string; | |||||
| isRoundCompleted: boolean; | |||||
| } | |||||
| let steps: stepDetail[] = [ | |||||
| { | |||||
| stepNumber: 1, | |||||
| stepName: "Skill Information", | |||||
| descriptionImage: skillInfo, | |||||
| buttonText: "Let's start now", | |||||
| isUnlocked: true, | |||||
| link: "/skillInformationStep", | |||||
| isRoundCompleted: true | |||||
| }, | |||||
| { | |||||
| stepNumber: 2, | |||||
| stepName: "Preliminary Round", | |||||
| descriptionImage: preliminaryRound, | |||||
| buttonText: "Let's do this", | |||||
| isUnlocked: true, | |||||
| link: "/preliminaryRound", | |||||
| isRoundCompleted: true | |||||
| }, | |||||
| { | |||||
| stepNumber: 3, | |||||
| stepName: "Technical Interview", | |||||
| descriptionImage: technicalInterview, | |||||
| buttonText: "Schedule meeting", | |||||
| isUnlocked: true, | |||||
| link: "/technicalInterview", | |||||
| isRoundCompleted: false | |||||
| }, | |||||
| { | |||||
| stepNumber: 4, | |||||
| stepName: "Assignment", | |||||
| descriptionImage: assignment, | |||||
| buttonText: "Show details", | |||||
| isUnlocked: false, | |||||
| link: "/assignment", | |||||
| isRoundCompleted: false | |||||
| }, | |||||
| { | |||||
| stepNumber: 5, | |||||
| stepName: "Final Interview", | |||||
| descriptionImage: finalInterview, | |||||
| buttonText: "Schedule meeting", | |||||
| isUnlocked: false, | |||||
| link: "/finalInterview", | |||||
| isRoundCompleted: false | |||||
| }, | |||||
| { | |||||
| stepNumber: 6, | |||||
| stepName: "Closing Docs", | |||||
| descriptionImage: closingDocs, | |||||
| buttonText: "Upload docs", | |||||
| isUnlocked: false, | |||||
| link: "/closingDocs", | |||||
| isRoundCompleted: false | |||||
| }, | |||||
| { | |||||
| stepNumber: 7, | |||||
| stepName: "Joining Letter", | |||||
| descriptionImage: joiningLetter, | |||||
| buttonText: "Show details", | |||||
| isUnlocked: false, | |||||
| link: "/joiningLetter", | |||||
| isRoundCompleted: false | |||||
| }, | |||||
| { | |||||
| stepNumber: 8, | |||||
| stepName: "Celebrations", | |||||
| descriptionImage: Celebrations, | |||||
| buttonText: "Join Workex", | |||||
| isUnlocked: false, | |||||
| link: "/celebration", | |||||
| isRoundCompleted: false | |||||
| }, | |||||
| ]; | |||||
| export default steps; | |||||
| @@ -1,3 +1,5 @@ | |||||
| $matt-black: #151515; | |||||
| .assignmentDetails { | .assignmentDetails { | ||||
| .assignmentTask { | .assignmentTask { | ||||
| @@ -29,7 +31,7 @@ | |||||
| display: flex; | display: flex; | ||||
| flex-direction: column; | flex-direction: column; | ||||
| justify-content: space-around; | justify-content: space-around; | ||||
| background-color: #151515; | |||||
| background-color: $matt-black; | |||||
| background-image: url("../../assets/icons/desktop-particles-2.svg"); | background-image: url("../../assets/icons/desktop-particles-2.svg"); | ||||
| background-repeat: no-repeat; | background-repeat: no-repeat; | ||||
| background-position: 25% 30%; | background-position: 25% 30%; | ||||
| @@ -43,7 +45,7 @@ | |||||
| right: 0; | right: 0; | ||||
| left: 0; | left: 0; | ||||
| bottom: 0; | bottom: 0; | ||||
| background-color: #151515; | |||||
| background-color: $matt-black; | |||||
| height: 30vh; | height: 30vh; | ||||
| transform: skewY(5deg); | transform: skewY(5deg); | ||||
| z-index: -1; | z-index: -1; | ||||
| @@ -32,7 +32,6 @@ | |||||
| } | } | ||||
| } | } | ||||
| .inputHolder { | .inputHolder { | ||||
| // margin-top: 5rem; | |||||
| width: 95%; | width: 95%; | ||||
| margin: 0 auto; | margin: 0 auto; | ||||
| } | } | ||||
| @@ -4,92 +4,11 @@ import { useState } from 'react'; | |||||
| import Header from "./Header"; | import Header from "./Header"; | ||||
| import { IonContent, IonPage } from '@ionic/react'; | import { IonContent, IonPage } from '@ionic/react'; | ||||
| import Steps from './Steps'; | import Steps from './Steps'; | ||||
| import skillInfo from '../../assets/icons/skill_Information.svg'; | |||||
| import preliminaryRound from '../../assets/icons/Preliminary_Round.svg'; | |||||
| import technicalInterview from '../../assets/icons/Technical_Interview.svg'; | |||||
| import assignment from '../../assets/icons/Assignment.svg'; | |||||
| import finalInterview from '../../assets/icons/Final_Interview.svg'; | |||||
| import closingDocs from '../../assets/icons/Closing_Docs.svg'; | |||||
| import joiningLetter from '../../assets/icons/Joining_Letter.svg'; | |||||
| import Celebrations from '../../assets/icons/Celebrations.svg'; | |||||
| interface stepDetail { | |||||
| stepNumber: number; | |||||
| stepName: string; | |||||
| descriptionImage: string; | |||||
| buttonText: string; | |||||
| isUnlocked: boolean; | |||||
| link: string; | |||||
| } | |||||
| import steps from "../../mockData/StepDetails"; | |||||
| const InterviewRounds: React.FC = () => { | |||||
| let steps: stepDetail[] = [ | |||||
| { | |||||
| stepNumber: 1, | |||||
| stepName: "Skill Information", | |||||
| descriptionImage: skillInfo, | |||||
| buttonText: "Let's start now", | |||||
| isUnlocked: true, | |||||
| link: "/skillInformationStep" | |||||
| }, | |||||
| { | |||||
| stepNumber: 2, | |||||
| stepName: "Preliminary Round", | |||||
| descriptionImage: preliminaryRound, | |||||
| buttonText: "Let's do this", | |||||
| isUnlocked: false, | |||||
| link: "/preliminaryRound" | |||||
| }, | |||||
| { | |||||
| stepNumber: 3, | |||||
| stepName: "Technical Interview", | |||||
| descriptionImage: technicalInterview, | |||||
| buttonText: "Schedule meeting", | |||||
| isUnlocked: false, | |||||
| link: "/technicalInterview" | |||||
| }, | |||||
| { | |||||
| stepNumber: 4, | |||||
| stepName: "Assignment", | |||||
| descriptionImage: assignment, | |||||
| buttonText: "Show details", | |||||
| isUnlocked: false, | |||||
| link: "/assignment" | |||||
| }, | |||||
| { | |||||
| stepNumber: 5, | |||||
| stepName: "Final Interview", | |||||
| descriptionImage: finalInterview, | |||||
| buttonText: "Schedule meeting", | |||||
| isUnlocked: false, | |||||
| link: "/finalInterview" | |||||
| }, | |||||
| { | |||||
| stepNumber: 6, | |||||
| stepName: "Closing Docs", | |||||
| descriptionImage: closingDocs, | |||||
| buttonText: "Upload docs", | |||||
| isUnlocked: false, | |||||
| link: "/closingDocs" | |||||
| }, | |||||
| { | |||||
| stepNumber: 7, | |||||
| stepName: "Joining Letter", | |||||
| descriptionImage: joiningLetter, | |||||
| buttonText: "Show details", | |||||
| isUnlocked: false, | |||||
| link: "/joiningLetter" | |||||
| }, | |||||
| { | |||||
| stepNumber: 8, | |||||
| stepName: "Celebrations", | |||||
| descriptionImage: Celebrations, | |||||
| buttonText: "Join Workex", | |||||
| isUnlocked: false, | |||||
| link: "/celebration" | |||||
| }, | |||||
| ]; | |||||
| const InterviewRounds: React.FC = () => { | |||||
| const [stepNo, setStep] = useState(1); | const [stepNo, setStep] = useState(1); | ||||
| @@ -107,8 +26,9 @@ const InterviewRounds: React.FC = () => { | |||||
| descriptionImage={step.descriptionImage} | descriptionImage={step.descriptionImage} | ||||
| buttonText={step.buttonText} | buttonText={step.buttonText} | ||||
| setDescription={setDescription} | setDescription={setDescription} | ||||
| showDescription={(stepNo === step.stepNumber) ? true : false} | |||||
| showDescription={(stepNo === step.stepNumber && step.isUnlocked === true) ? true : false} | |||||
| link={step.link} | link={step.link} | ||||
| isRoundCompleted={step.isRoundCompleted} | |||||
| /> | /> | ||||
| ); | ); | ||||
| }); | }); | ||||
| @@ -17,6 +17,17 @@ | |||||
| animation-iteration-count: 1; | animation-iteration-count: 1; | ||||
| animation-fill-mode: forwards; | animation-fill-mode: forwards; | ||||
| ion-icon { | |||||
| color: var(--primary-button-color); | |||||
| width: 1.5rem; | |||||
| height: 1.5rem; | |||||
| } | |||||
| .checkIcon { | |||||
| width: 2rem; | |||||
| height: 2rem; | |||||
| } | |||||
| .stepName { | .stepName { | ||||
| display: flex; | display: flex; | ||||
| justify-content: center; | justify-content: center; | ||||
| @@ -72,14 +83,6 @@ | |||||
| } | } | ||||
| } | } | ||||
| ion-icon { | |||||
| color: var(--primary-button-color); | |||||
| width: 1.5rem; | |||||
| height: 1.5rem; | |||||
| } | |||||
| @keyframes fadeInAnimation { | @keyframes fadeInAnimation { | ||||
| 0% { | 0% { | ||||
| @@ -1,7 +1,7 @@ | |||||
| import styles from './StepDescreption.module.scss'; | import styles from './StepDescreption.module.scss'; | ||||
| import { IonButton, IonIcon } from '@ionic/react'; | import { IonButton, IonIcon } from '@ionic/react'; | ||||
| import { lockOpen, lockClosed } from 'ionicons/icons'; | |||||
| import { lockOpen, lockClosed, checkmarkCircle } from 'ionicons/icons'; | |||||
| import { useEffect, useRef } from 'react'; | import { useEffect, useRef } from 'react'; | ||||
| import { Link } from 'react-router-dom'; | import { Link } from 'react-router-dom'; | ||||
| @@ -12,6 +12,7 @@ interface Props { | |||||
| buttonText: string; | buttonText: string; | ||||
| descriptionImage: string; | descriptionImage: string; | ||||
| link: string; | link: string; | ||||
| isRoundCompleted: boolean; | |||||
| } | } | ||||
| const StepsDescription: React.FC<Props> = (props) => { | const StepsDescription: React.FC<Props> = (props) => { | ||||
| @@ -29,7 +30,11 @@ const StepsDescription: React.FC<Props> = (props) => { | |||||
| <div className={styles.stepDescription} ref={itemRef}> | <div className={styles.stepDescription} ref={itemRef}> | ||||
| <div className={styles.header}> | <div className={styles.header}> | ||||
| {props.isUnlocked ? <IonIcon icon={lockOpen} /> : <IonIcon icon={lockClosed} color="dark" />} | |||||
| { | |||||
| props.isRoundCompleted ? | |||||
| <IonIcon icon={checkmarkCircle} className={styles.checkIcon} /> | |||||
| : | |||||
| <IonIcon icon={lockOpen} />} | |||||
| <div className={styles.stepName}> | <div className={styles.stepName}> | ||||
| <div className={styles.step}>step {props.stepNumber}</div> | <div className={styles.step}>step {props.stepNumber}</div> | ||||
| @@ -19,6 +19,12 @@ ion-item { | |||||
| width: 1.5rem; | width: 1.5rem; | ||||
| height: 1.5rem; | height: 1.5rem; | ||||
| } | } | ||||
| .checkIcon { | |||||
| width: 1.8rem; | |||||
| height: 1.8rem; | |||||
| color: var(--primary-button-color); | |||||
| } | |||||
| .stepName { | .stepName { | ||||
| display: flex; | display: flex; | ||||
| @@ -1,9 +1,9 @@ | |||||
| import styles from './Steps.module.scss'; | import styles from './Steps.module.scss'; | ||||
| import { lockOpen, lockClosed } from 'ionicons/icons'; | |||||
| import { lockOpen, lockClosed, checkmarkCircle } from 'ionicons/icons'; | |||||
| import { IonIcon, IonItem } from '@ionic/react'; | import { IonIcon, IonItem } from '@ionic/react'; | ||||
| import StepDescription from './StepDescreption'; | import StepDescription from './StepDescreption'; | ||||
| interface Props { | |||||
| interface OwnProps { | |||||
| stepNumber: number; | stepNumber: number; | ||||
| roundName: string; | roundName: string; | ||||
| isUnlocked: boolean; | isUnlocked: boolean; | ||||
| @@ -11,11 +11,12 @@ interface Props { | |||||
| buttonText: string; | buttonText: string; | ||||
| descriptionImage: string; | descriptionImage: string; | ||||
| link: string; | link: string; | ||||
| isRoundCompleted: boolean; | |||||
| setDescription: (stepNumber: number) => void; | setDescription: (stepNumber: number) => void; | ||||
| // rename to select step | // rename to select step | ||||
| } | } | ||||
| const Steps: React.FC<Props> = (props) => { | |||||
| const Steps: React.FC<OwnProps> = (props) => { | |||||
| return ( | return ( | ||||
| <IonItem lines='none' onClick={() => props.setDescription(props.stepNumber)}> | <IonItem lines='none' onClick={() => props.setDescription(props.stepNumber)}> | ||||
| @@ -27,9 +28,13 @@ const Steps: React.FC<Props> = (props) => { | |||||
| buttonText={props.buttonText} | buttonText={props.buttonText} | ||||
| descriptionImage={props.descriptionImage} | descriptionImage={props.descriptionImage} | ||||
| link={props.link} | link={props.link} | ||||
| isRoundCompleted={props.isRoundCompleted} | |||||
| /> : | /> : | ||||
| <div className={styles.stepHolder}> | <div className={styles.stepHolder}> | ||||
| <IonIcon icon={props.isUnlocked ? lockOpen : lockClosed} color={props.isUnlocked ? '' : "dark"} ></IonIcon> | |||||
| {/* <IonIcon icon={props.isUnlocked ? lockOpen : lockClosed} color={props.isUnlocked ? '' : "dark"} ></IonIcon> */} | |||||
| {props.isUnlocked && !props.isRoundCompleted && <IonIcon icon={lockOpen}></IonIcon>} | |||||
| {!props.isUnlocked && <IonIcon icon={lockClosed} color='dark'></IonIcon>} | |||||
| {props.isRoundCompleted && <IonIcon icon={checkmarkCircle} className={styles.checkIcon}></IonIcon>} | |||||
| <div className={styles.stepName}> | <div className={styles.stepName}> | ||||
| <div className={styles.step}>step {props.stepNumber}</div> | <div className={styles.step}>step {props.stepNumber}</div> | ||||
| @@ -7,7 +7,7 @@ import { Link } from 'react-router-dom'; | |||||
| import { useState } from 'react'; | import { useState } from 'react'; | ||||
| import Question from './Question'; | import Question from './Question'; | ||||
| // move to mock data | |||||
| const options: string[] = [ | const options: string[] = [ | ||||
| "System.out.println(“Hello, how are you?”);", | "System.out.println(“Hello, how are you?”);", | ||||
| "println('Hello, how are you?');", | "println('Hello, how are you?');", | ||||
| @@ -38,7 +38,7 @@ const Quiz: React.FC = () => { | |||||
| <Question question='How would you correctly display, “Hello, how are you?”?' | <Question question='How would you correctly display, “Hello, how are you?”?' | ||||
| questionNumber={1} | questionNumber={1} | ||||
| timeLimit={1} /> | |||||
| timeLimit={2.5} /> | |||||
| </div> | </div> | ||||