| @@ -26,6 +26,9 @@ import Quiz from './pages/Quiz/Quiz'; | |||
| import PreliminaryRoundResults from './pages/preliminaryRoundResults/PreliminaryRoundResults'; | |||
| import TechnicalInterview from './pages/technicalInterview/TechnicalInterview'; | |||
| import TimeSlot from './components/timeSlot/TimeSlot'; | |||
| import Assignment from './pages/assignment/Assignment'; | |||
| import AssignmentDetails from './pages/assignment/AssignmentDetails'; | |||
| import SubmitAssignment from './pages/assignment/SubmitAssignment'; | |||
| @@ -53,6 +56,16 @@ const App: React.FC = () => ( | |||
| <Route exact path="/technicalInterview"> | |||
| <TechnicalInterview /> | |||
| </Route> | |||
| <Route exact path="/assignment"> | |||
| <Assignment /> | |||
| </Route> | |||
| <Route exact path="/assignmentDetails"> | |||
| <AssignmentDetails /> | |||
| </Route> | |||
| <Route exact path="/SubmitAssignment"> | |||
| <SubmitAssignment /> | |||
| </Route> | |||
| <Route exact path="/"> | |||
| <Redirect to="/interviewRounds" /> | |||
| </Route> | |||
| @@ -17,8 +17,8 @@ $dim-grey: #696969; | |||
| } | |||
| ion-icon { | |||
| width: 1rem; | |||
| height: 1rem; | |||
| width: 1.5rem; | |||
| height: 1.5rem; | |||
| } | |||
| ion-input { | |||
| @@ -2,6 +2,7 @@ import styles from './StepHeader.module.scss'; | |||
| import { IonHeader, IonIcon } from '@ionic/react'; | |||
| import { closeOutline } from 'ionicons/icons' | |||
| import { Link } from 'react-router-dom'; | |||
| interface Props { | |||
| stepNumber: number; | |||
| @@ -15,7 +16,9 @@ const StepHeader: React.FC<Props> = (props) => { | |||
| <div className={styles.step}>Step {props.stepNumber}</div> | |||
| <h3 className={styles.roundName}>{props.roundName}</h3> | |||
| </div> | |||
| {/* <Link to="/interviewRounds"> */} | |||
| <IonIcon icon={closeOutline}></IonIcon> | |||
| {/* </Link> */} | |||
| </header> | |||
| ) | |||
| } | |||
| @@ -1,6 +1,6 @@ | |||
| import styles from './Quiz.module.scss'; | |||
| import { IonButton, IonCheckbox, IonIcon, IonItem, IonLabel, IonPage, IonRadio } from '@ionic/react'; | |||
| import { IonButton, IonIcon } from '@ionic/react'; | |||
| import Options from './Options'; | |||
| import { closeOutline } from 'ionicons/icons' | |||
| import { Link } from 'react-router-dom'; | |||
| @@ -0,0 +1,46 @@ | |||
| .assignment { | |||
| .description { | |||
| .icon { | |||
| margin-top: 4rem; | |||
| display: flex; | |||
| justify-content: center; | |||
| ion-icon { | |||
| width: 10rem; | |||
| height: 10rem; | |||
| } | |||
| } | |||
| .stepDescription { | |||
| h4 { | |||
| color: #363636; | |||
| text-align: center; | |||
| font-size: 2.4rem; | |||
| font-weight: 300; | |||
| letter-spacing: 0.024rem; | |||
| margin-top: 3rem; | |||
| } | |||
| p { | |||
| color: #868686; | |||
| font-size: 1.4rem; | |||
| text-align: center; | |||
| width: 90%; | |||
| margin: 0 auto; | |||
| margin-top: 2rem; | |||
| line-height: 1.8; | |||
| } | |||
| } | |||
| } | |||
| .assignmentButton { | |||
| text-decoration: none; | |||
| ion-button { | |||
| width: 95%; | |||
| margin: 0 auto; | |||
| margin-top: 35vh; | |||
| margin-bottom: 0; | |||
| --background: var(--primary-button-color); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| import { IonButton, IonContent, IonIcon, IonPage } from "@ionic/react"; | |||
| import StepHeader from "../../components/stepsHeader/StepHeader"; | |||
| import assignmentImage from "../../assets/icons/Assignment.svg"; | |||
| import styles from "./Assignment.module.scss"; | |||
| import { Link } from "react-router-dom"; | |||
| const Assignment: React.FC = () => { | |||
| return ( | |||
| <IonPage> | |||
| <StepHeader stepNumber={4} roundName="Assignment" /> | |||
| <IonContent className={styles.assignment}> | |||
| <div className={styles.description}> | |||
| <div className={styles.icon}> | |||
| <IonIcon src={assignmentImage} /> | |||
| </div> | |||
| <div className={styles.stepDescription}> | |||
| <h4>You are one step ahead to the final round</h4> | |||
| <p> | |||
| Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. | |||
| </p> | |||
| </div> | |||
| </div> | |||
| <Link to="/assignmentDetails" | |||
| className={styles.assignmentButton}> | |||
| <IonButton shape="round" expand='block'>Show Details</IonButton> | |||
| </Link> | |||
| </IonContent> | |||
| </IonPage> | |||
| ); | |||
| } | |||
| export default Assignment; | |||
| @@ -0,0 +1,90 @@ | |||
| .assignmentDetails { | |||
| .assignmentTask { | |||
| display: flex; | |||
| flex-direction: column; | |||
| align-items: center; | |||
| text-align: center; | |||
| justify-content: space-around; | |||
| height: 44vh; | |||
| width: 90%; | |||
| margin: 0 auto; | |||
| .heading { | |||
| color: #363636; | |||
| font-weight: 300; | |||
| font-size: 2.4rem; | |||
| } | |||
| .description { | |||
| color: #868686; | |||
| font-size: 1.4rem; | |||
| line-height: 2.8rem; | |||
| } | |||
| } | |||
| .taskDescription { | |||
| height: 44vh; | |||
| display: flex; | |||
| flex-direction: column; | |||
| justify-content: space-around; | |||
| background-color: #151515; | |||
| background-image: url("../../assets/icons/desktop-particles-2.svg"); | |||
| background-repeat: no-repeat; | |||
| background-position: 25% 30%; | |||
| border-top-right-radius: 75%; | |||
| &::before { | |||
| position: absolute; | |||
| content:" "; | |||
| top: 50%; | |||
| right: 0; | |||
| left: 0; | |||
| bottom: 0; | |||
| background-color: #151515; | |||
| height: 30vh; | |||
| transform: skewY(5deg); | |||
| z-index: -1; | |||
| } | |||
| .heading { | |||
| color: #BCBCBC; | |||
| font-weight: 300; | |||
| letter-spacing: 0.024rem; | |||
| font-size: 2.4rem; | |||
| margin-left: 2rem; | |||
| } | |||
| .description { | |||
| margin-left: 2rem; | |||
| .textHolder { | |||
| display: flex; | |||
| margin-bottom: 2rem; | |||
| .text { | |||
| color: #E5E5E5; | |||
| font-size: 1.4rem; | |||
| font-weight: 600; | |||
| margin-left: 2rem; | |||
| } | |||
| } | |||
| } | |||
| a { | |||
| text-decoration: none; | |||
| } | |||
| ion-button { | |||
| --background: var(--primary-button-color); | |||
| font-weight: 500; | |||
| font-family: 'Poppins', sans-serif; | |||
| width: 90%; | |||
| margin: 0 auto; | |||
| } | |||
| .wish { | |||
| color: #E5E5E5; | |||
| font-size: 1.8rem; | |||
| text-align: center; | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,49 @@ | |||
| import { IonButton, IonContent, IonIcon, IonPage } from "@ionic/react"; | |||
| import StepHeader from "../../components/stepsHeader/StepHeader"; | |||
| import questionIcon from '../../assets/icons/question-circle-fill.svg'; | |||
| import checkIcon from '../../assets/icons/check-circle-fill.svg'; | |||
| import timeIcon from '../../assets/icons/time.svg'; | |||
| import styles from "./AssignmentDetails.module.scss"; | |||
| import { Link } from "react-router-dom"; | |||
| const AssignmentDetails: React.FC = () => { | |||
| return ( | |||
| <IonPage> | |||
| <StepHeader roundName="Assignment" stepNumber={4} /> | |||
| <IonContent className={styles.assignmentDetails}> | |||
| <div className={styles.assignmentTask}> | |||
| <h4 className={styles.heading}>Make a text analyser from a text file</h4> | |||
| <p className={styles.description}> | |||
| Make an api with Node which accepts a text file and I was supposed to return the most repeated words in it. A huge text file (around 7 mb) was given to me as an example. Here is the code if anywants to know how I built it https://github.com/fayazara/text-analyser | |||
| </p> | |||
| </div> | |||
| <div className={styles.taskDescription}> | |||
| <h4 className={styles.heading}>Details</h4> | |||
| <div className={styles.description}> | |||
| <div className={styles.textHolder}> | |||
| <IonIcon src={questionIcon}></IonIcon> | |||
| <div className={styles.text}>Weekend Project</div> | |||
| </div> | |||
| <div className={styles.textHolder}> | |||
| <IonIcon src={timeIcon}></IonIcon> | |||
| <div className={styles.text}>Before Monday, 01 May 2021</div> | |||
| </div> | |||
| <div className={styles.textHolder}> | |||
| <IonIcon src={checkIcon}></IonIcon> | |||
| <div className={styles.text}>Note: 85% of results minimum</div> | |||
| </div> | |||
| </div> | |||
| <Link to="./SubmitAssignment"> | |||
| <IonButton shape="round" expand='block'>Accept</IonButton> | |||
| </Link> | |||
| <div className={styles.wish}>All the best!</div> | |||
| </div> | |||
| </IonContent> | |||
| </IonPage> | |||
| ); | |||
| }; | |||
| export default AssignmentDetails; | |||
| @@ -0,0 +1,9 @@ | |||
| const ReviewAssignment: React.FC = () => { | |||
| return ( | |||
| <div> | |||
| </div> | |||
| ); | |||
| } | |||
| export default ReviewAssignment; | |||
| @@ -0,0 +1,45 @@ | |||
| .submitAssignment { | |||
| .description { | |||
| .icon { | |||
| margin-top: 4rem; | |||
| display: flex; | |||
| justify-content: center; | |||
| ion-icon { | |||
| width: 10rem; | |||
| height: 10rem; | |||
| } | |||
| } | |||
| .stepDescription { | |||
| h4 { | |||
| color: #363636; | |||
| text-align: center; | |||
| font-size: 2.4rem; | |||
| font-weight: 300; | |||
| letter-spacing: 0.024rem; | |||
| margin-top: 3rem; | |||
| } | |||
| p { | |||
| color: #868686; | |||
| font-size: 1.4rem; | |||
| text-align: center; | |||
| width: 90%; | |||
| margin: 0 auto; | |||
| margin-top: 2rem; | |||
| line-height: 1.8; | |||
| } | |||
| } | |||
| } | |||
| .inputHolder { | |||
| margin-top: 5rem; | |||
| } | |||
| .submitAssigment { | |||
| text-decoration: none; | |||
| ion-button { | |||
| width: 90%; | |||
| margin: 0 auto; | |||
| margin-top: 12rem; | |||
| --background: var(--primary-button-color); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,45 @@ | |||
| import styles from "./SubmitAssignment.module.scss"; | |||
| import { IonButton, IonContent, IonIcon, IonPage } from "@ionic/react" | |||
| import assignmentImage from "../../assets/icons/Assignment.svg"; | |||
| import StepHeader from "../../components/stepsHeader/StepHeader"; | |||
| import Input from "../../components/formInput/Input"; | |||
| import linkIcon from "../../assets/icons/link.svg"; | |||
| import time from "../../assets/icons/time.svg"; | |||
| import { linkOutline } from 'ionicons/icons' | |||
| import { Link } from "react-router-dom"; | |||
| const SubmitAssignment: React.FC = () => { | |||
| return ( | |||
| <IonPage> | |||
| <StepHeader roundName="Assignment" stepNumber={4} /> | |||
| <IonContent className={styles.submitAssignment}> | |||
| <div className={styles.description}> | |||
| <div className={styles.icon}> | |||
| <IonIcon src={assignmentImage} /> | |||
| </div> | |||
| <div className={styles.stepDescription}> | |||
| <h4>Submit your Assignment</h4> | |||
| <p> | |||
| Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. | |||
| </p> | |||
| </div> | |||
| </div> | |||
| <div className={styles.inputHolder}> | |||
| <Input placeholder="Insert the project Link" icon={linkOutline} /> | |||
| </div> | |||
| <Link to="/assignmentDetails" | |||
| className={styles.submitAssigment}> | |||
| <IonButton shape="round" expand='block'>Submit</IonButton> | |||
| </Link> | |||
| </IonContent> | |||
| </IonPage> | |||
| ); | |||
| } | |||
| export default SubmitAssignment; | |||
| @@ -19,6 +19,7 @@ interface stepDetail { | |||
| descriptionImage: string; | |||
| buttonText: string; | |||
| isUnlocked: boolean; | |||
| link: string; | |||
| } | |||
| const InterviewRounds: React.FC = () => { | |||
| @@ -29,56 +30,64 @@ const InterviewRounds: React.FC = () => { | |||
| stepName: "Skill Information", | |||
| descriptionImage: skillInfo, | |||
| buttonText: "Let's start now", | |||
| isUnlocked: true | |||
| isUnlocked: true, | |||
| link: "/skillInformationStep" | |||
| }, | |||
| { | |||
| stepNumber: 2, | |||
| stepName: "Preliminary Round", | |||
| descriptionImage: preliminaryRound, | |||
| buttonText: "Let's do this", | |||
| isUnlocked: false | |||
| isUnlocked: false, | |||
| link: "/preliminaryRound" | |||
| }, | |||
| { | |||
| stepNumber: 3, | |||
| stepName: "Technical Interview", | |||
| descriptionImage: technicalInterview, | |||
| buttonText: "Schedule meeting", | |||
| isUnlocked: false | |||
| isUnlocked: false, | |||
| link: "/technicalInterview" | |||
| }, | |||
| { | |||
| stepNumber: 4, | |||
| stepName: "Assignment", | |||
| descriptionImage: assignment, | |||
| buttonText: "Show details", | |||
| isUnlocked: false | |||
| isUnlocked: false, | |||
| link: "/assignment" | |||
| }, | |||
| { | |||
| stepNumber: 5, | |||
| stepName: "Final Interview", | |||
| descriptionImage: finalInterview, | |||
| buttonText: "Schedule meeting", | |||
| isUnlocked: false | |||
| isUnlocked: false, | |||
| link: "/assignment" | |||
| }, | |||
| { | |||
| stepNumber: 6, | |||
| stepName: "Closing Docs", | |||
| descriptionImage: closingDocs, | |||
| buttonText: "Upload docs", | |||
| isUnlocked: false | |||
| isUnlocked: false, | |||
| link: "/assignment" | |||
| }, | |||
| { | |||
| stepNumber: 7, | |||
| stepName: "Joining Letter", | |||
| descriptionImage: joiningLetter, | |||
| buttonText: "Show details", | |||
| isUnlocked: false | |||
| isUnlocked: false, | |||
| link: "/assignment" | |||
| }, | |||
| { | |||
| stepNumber: 8, | |||
| stepName: "Celebrations", | |||
| descriptionImage: Celebrations, | |||
| buttonText: "Join Workex", | |||
| isUnlocked: false | |||
| isUnlocked: false, | |||
| link: "/assignment" | |||
| }, | |||
| ]; | |||
| @@ -98,7 +107,8 @@ const InterviewRounds: React.FC = () => { | |||
| descriptionImage={step.descriptionImage} | |||
| buttonText={step.buttonText} | |||
| setDescription={setDescription} | |||
| showDescription={(stepNo === step.stepNumber) ? true : false} /> | |||
| showDescription={(stepNo === step.stepNumber) ? true : false} | |||
| link={step.link} /> | |||
| ); | |||
| }); | |||
| @@ -56,6 +56,7 @@ | |||
| animation-fill-mode: forwards; | |||
| } | |||
| .button { | |||
| text-decoration: none; | |||
| animation: fadeInAnimation ease 0.2s; | |||
| animation-iteration-count: 1; | |||
| animation-fill-mode: forwards; | |||
| @@ -1,8 +1,9 @@ | |||
| import styles from './StepDescreption.module.scss'; | |||
| import { IonButton, IonIcon } from '@ionic/react'; | |||
| import { lockOpen, lockClosed } from 'ionicons/icons' | |||
| import { lockOpen, lockClosed } from 'ionicons/icons'; | |||
| import { useEffect, useRef } from 'react'; | |||
| import { Link } from 'react-router-dom'; | |||
| interface Props { | |||
| stepNumber: number; | |||
| @@ -10,6 +11,7 @@ interface Props { | |||
| isUnlocked: boolean; | |||
| buttonText: string; | |||
| descriptionImage: string; | |||
| link: string; | |||
| } | |||
| const StepsDescription: React.FC<Props> = (props) => { | |||
| @@ -42,9 +44,9 @@ 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> | |||
| <div className={styles.button}> | |||
| <Link to={props.link} className={styles.button}> | |||
| <IonButton shape="round" expand='block'>{props.buttonText}</IonButton> | |||
| </div> | |||
| </Link> | |||
| </div> | |||
| ); | |||
| @@ -10,6 +10,7 @@ interface Props { | |||
| showDescription?: boolean; | |||
| buttonText: string; | |||
| descriptionImage: string; | |||
| link: string; | |||
| setDescription: (stepNumber: number) => void; | |||
| // rename to select step | |||
| } | |||
| @@ -24,7 +25,8 @@ const Steps: React.FC<Props> = (props) => { | |||
| roundName={props.roundName} | |||
| isUnlocked={props.isUnlocked} | |||
| buttonText={props.buttonText} | |||
| descriptionImage={props.descriptionImage} /> : | |||
| descriptionImage={props.descriptionImage} | |||
| link={props.link} /> : | |||
| <div className={styles.stepHolder}> | |||
| <IonIcon icon={props.isUnlocked ? lockOpen : lockClosed} color={props.isUnlocked ? '' : "dark"} ></IonIcon> | |||
| @@ -3,8 +3,6 @@ import styles from "./PreliminaryRoundResults.module.scss" | |||
| import { IonButton, IonContent, IonIcon, IonPage } from "@ionic/react"; | |||
| import StepHeader from "../../components/stepsHeader/StepHeader"; | |||
| import checkIcon from "../../assets/icons/check-circle-fill.svg"; | |||
| import closeIcon from "../../assets/icons/close-filled.svg"; | |||
| import goodJobIcon from "../../assets/icons/good_job.svg"; | |||
| import { closeCircle, checkmarkCircle } from "ionicons/icons"; | |||
| @@ -86,10 +86,10 @@ const TechnicalInterview: React.FC = () => { | |||
| </div> | |||
| : | |||
| <div className={styles.buttonHolder}> | |||
| <Link to="/" className={styles.dashboardButton}> | |||
| <Link to="/interviewRounds" className={styles.dashboardButton}> | |||
| <IonButton shape="round">Goto Dashboard</IonButton> | |||
| </Link> | |||
| <Link to="/" className={styles.nextStepButton}> | |||
| <Link to="/assignment" className={styles.nextStepButton}> | |||
| <IonButton shape="round">Goto Next Step</IonButton> | |||
| </Link> | |||
| </div> | |||