{"version":3,"sources":["actions/types.ts","actions/learning.ts","actions/index.ts","actions/hazard.ts","api/myldc.ts","components/FullscreenButton.tsx","components/HazardPerception/Video.tsx","components/HazardPerception/Overlay.tsx","components/HazardPerception/VideoPlayer.tsx","components/HazardPerception/ScoreWindow.tsx","components/HazardPerception/Flags.tsx","components/HazardPerception/Review.tsx","components/HazardPerception/VideoProgress.tsx","components/HazardPerception/VideoReviewControls.tsx","components/Spinner.tsx","components/HazardPerception/HazardPerception.tsx","components/TestReview.tsx","components/HazardPerception/HazardPerceptionOverview.tsx","components/TheoryTest/Countdown.tsx","components/TheoryTest/TextToSpeech.tsx","components/TheoryTest/TestOverview.tsx","components/TheoryTest/Progress.tsx","components/TheoryTest/TestResults.tsx","components/TheoryTest/AlertBanner.tsx","components/TheoryTest/QuestionOptions.tsx","components/TheoryTest/Button.tsx","components/TheoryTest/TestButtons.tsx","components/TheoryTest/QuestionImage.tsx","components/TheoryTest/MarkNumAnswers.tsx","components/TheoryTest/TestQuestionReviewButtons.tsx","components/TheoryTest/QuestionCase.tsx","components/TheoryTest/TheoryTest.tsx","components/TheoryTest/TheoryTestOverview.tsx","components/LearningProgram/LearningButtons.tsx","components/LearningProgram/Study.tsx","components/LearningProgram/TheoryLearning.tsx","components/LearningProgram/SectionList.tsx","components/Card.tsx","components/HighwayCode/Rule.tsx","components/Button.tsx","components/HighwayCode/RuleList.tsx","components/Input.tsx","components/Login.tsx","components/Instructors/ListPupils.tsx","helpers/index.ts","components/Search.tsx","components/Instructors/InstructorInfo.tsx","components/Instructors/ListInstructors.tsx","App.tsx","reducers/theoryTestReducer.ts","reducers/hazardPerceptionReducer.ts","reducers/learningProgramReducer.ts","reducers/index.ts","index.tsx"],"names":["SET_TEST_NO","SET_QUESTIONS","NEXT_QUESTION","PREV_QUESTION","GO_TO_QUESTION","FLAG_QUESTION","TOGGLE_SOUND","ADD_ANSWER","REMOVE_ANSWER","REVIEW_ALL","REVIEW_FLAGGED","REVIEW_INCOMPLETE","REVIEW_ANSWERS","REVIEW_SUMMARY","REVIEW_TEST","END_TEST","SET_SECTION","SET_SECTION_NUMBER","SKIP_CORRECT","SET_STUDY","ADD_LP_ANSWER","REMOVE_LP_ANSWER","NEXT_LP_QUESTION","PREV_LP_QUESTION","SET_HP_TEST","SET_VIDEOS","NEXT_VIDEO","PREV_VIDEO","GO_TO_VIDEO","ADD_CLICK_TIME","EXIT_HP_TEST","PLAY_VIDEO","PAUSE_VIDEO","PLAY_PAUSE_VIDEO","PLAYBACK_RATE","SET_DURATION","SET_PLAYED","SET_ERROR","SCORE_PAUSE","SEEK_CHANGE","SEEK_START","SEEK_END","BUFFERING","VIDEO_READY","VIDEO_ENDED","RESET_TEST","REVIEW_HP_TEST","setSectionNumber","id","type","payload","setTestNo","testNo","toggleVoiceover","endTest","secondsRemaining","setHPTest","addVideoClick","time","exitHPTest","playVideo","instance","axios","create","baseURL","interceptors","request","use","config","a","localStorage","getItem","token","headers","Authorization","err","Promise","reject","FullscreenButton","handle","document","fullscreenEnabled","mozFullscreenEnabled","webkitFullscreenEnabled","msFullscreenEnabled","active","onClick","enter","icon","faExpandArrowsAlt","exit","faCompress","Video","props","player","dash","isReady","isPlaying","isLoading","seekOnPlay","progressTimeout","prevPlayed","prevLoaded","isiOS","includes","navigator","platform","userAgent","progress","url","current","playedSeconds","getCurrentTime","loadedSeconds","getSecondsLoaded","duration","getDuration","played","loaded","onProgress","setTimeout","progressInterval","createRef","dashjs","MediaPlayer","this","initializeVideo","clearTimeout","srcObject","prevProps","playing","playbackRate","loop","play","pause","JSON","stringify","reset","attachView","attachSource","video","onReady","onBuffer","onEnded","onDuration","onPlay","onError","oncanplaythrough","onwaiting","buffering","readyState","onended","onloadedmetadata","event","onerror","initialize","src","addEventListeners","volume","disablePictureInPicture","currentTime","buffered","length","end","amount","console","warn","className","controls","width","height","style","ref","autoPlay","preload","controlsList","muted","playsInline","Array","map","Component","mapDispatchToProps","connect","state","hazard","ended","videoStatus","numVideos","currentVideo","tamper","tamperTestInfo","faPowerOff","fixedWidth","faPlay","pauseVideo","setDuration","setPlayed","e","setBuffering","setError","setVideoReady","setVideoEnded","videos","videoClicks","useRef","seeking","seekTo","ratio","replace","maxHeight","onPause","ScoreWindow","videoInfo","marginLeft","prehazard","five","secondMarginLeft","nohazards","prehazard2","ten","endseq","toFixed","four","three","two","one","nine","eight","seven","six","endseq2","Flags","flag","faFlag","Review","scores","passMark","clicks","goToVideo","totalScore","reduce","b","averageScore","backgroundColor","score","useEffect","index","title","title2","left","_","compact","filter","x","setSeekChange","target","value","setSeekStart","setSeekEnd","min","max","step","onMouseDown","onChange","onMouseUp","playPauseVideo","setPlaybackRate","rate","setPauseOnScore","playbackButtonStyles","faPause","windowPause","faCheck","scoreWindow","Spinner","color","setVideos","testId","nextVideo","prevVideo","resetHPTest","ownProps","review","useFullScreenHandle","useBeforeunload","myLDC","get","then","response","data","faAngleLeft","faAngleRight","faTimes","description","description2","TestReview","noTests","testName","takeTest","reviewTest","userData","rows","tableRows","i","push","status","createTestRow","row","colSpan","reviewHPTest","complete","test","useParams","zeroPad","num","places","String","padStart","secondsToHms","d","Number","h","Math","floor","m","s","Countdown","seconds","remaining","useState","counter","setCounter","timer","setInterval","clearInterval","styles","container","display","float","zIndex","text","hover","button","cursor","pointerEvents","stop","outline","border","borderRadius","resume","TextToSpeech","voiceOver","faVolumeUp","size","stopPropagation","displayText","textAsButton","voice","question","correct","incorrect","numQuestions","flagged","dvsa","ProgressBar","percentage","bgColor","savedData","parse","sections","setSections","setItem","date","taken","Progress","section","name","AlertBanner","QuestionOptions","options","selected","addAnswer","removeAnswer","learning","fullScreenAvailable","format","times","fromCharCode","toUpperCase","dsacat","faCheckCircle","dangerouslySetInnerHTML","__html","prim","toLowerCase","alt","Button","fn","iconClass","disabled","nextQuestion","prevQuestion","flagQuestion","reviewAll","reviewFlagged","reviewIncomplete","reviewSummary","reviewAnswers","myProps","currentQuestion","overview","incomplete","faQuestion","QuestionImage","questionInfo","dsaimageid","MarkNumAnswers","mark","goToQuestion","questionNo","questions","keys","parseInt","QuestionCase","case","situation","setQuestions","answer","answers","setRemaining","SaveProgress","answerletters","tickamount","faVolumeMute","setStudy","setSkipCorrect","currentSection","skipCorrect","study","faBookOpen","faForward","Study","explanation","visible","setSection","addLPAnswer","removeLPAnswer","preventDefault","dsaexplanation","list","theory","sectionList","sectionCorrect","sectionIncorrect","num_questions","Card","children","rest","Rule","image","imagefooter","RuleList","buttonColor","loading","setLoading","setCurrentSection","rules","setRules","getSection","navButtons","rule","imagetitle1","imagefooter1","hcrule","hcno","sec_no","Input","Login","username","setUsername","password","setPassword","error","handleSubmit","post","onSuccess","catch","log","onSubmit","role","autoFocus","placeholder","ListPupils","isAuthenticated","setIsAuthenticated","pupils","setPupils","removeItem","pupil","firstname","lastname","Search","searchEvent","search","setSearch","InstructorInfo","gender","trainee","headerareas","ListInstructors","instructors","setInstructors","encodeURIComponent","instructor","to","path","INITIAL_STATE","theoryTestReducer","action","from","flaggedIndex","indexOf","findIndex","incompleteIndex","currentFlagged","pull","concat","uniq","isArray","Date","toLocaleDateString","maxClicks","clickScore","hazardPerceptionReducer","timePlayed","currentScore","scoreWindows","currentVid","without","rapidClicking","second","clickDifferences","repetitiveClicking","slice","n","LP_INITIAL_STATE","LearningProgramReducer","pullAll","currentAnswers","currentCorrect","currentIncorrect","combineReducers","composeEnhancers","window","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","localStorageName","localStorageInfo","persistedState","store","createStore","reducers","applyMiddleware","subscribe","getState","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.bd200cef.chunk.js","sourcesContent":["// Theory Test\r\nexport const SET_TEST_NO = 'SET_TEST_NO'\r\nexport const SET_QUESTIONS = 'SET_QUESTIONS';\r\nexport const NEXT_QUESTION = 'NEXT_QUESTION';\r\nexport const PREV_QUESTION = 'PREV_QUESTION';\r\nexport const GO_TO_QUESTION = 'GO_TO_QUESTION';\r\nexport const FLAG_QUESTION = 'FLAG_QUESTION';\r\nexport const TOGGLE_SOUND = 'TOGGLE_SOUND';\r\nexport const ADD_ANSWER = 'ADD_ANSWER';\r\nexport const REMOVE_ANSWER = 'REMOVE_ANSWER';\r\nexport const REVIEW_ALL = 'REVIEW_ALL';\r\nexport const REVIEW_FLAGGED = 'REVIEW_FLAGGED';\r\nexport const REVIEW_INCOMPLETE = 'REVIEW_INCOMPLETE';\r\nexport const REVIEW_ANSWERS = 'REVIEW_ANSWERS';\r\nexport const REVIEW_SUMMARY = 'REVIEW_SUMMARY';\r\nexport const REVIEW_TEST = 'REVIEW_TEST';\r\nexport const END_TEST = 'END_TEST';\r\n\r\n// Learning Program\r\nexport const SET_SECTION = 'SET_SECTION';\r\nexport const SET_SECTION_NUMBER = 'SET_SECTION_NUMBER';\r\nexport const SKIP_CORRECT = 'SKIP_CORRECT';\r\nexport const SET_STUDY = 'SET_STUDY';\r\nexport const ADD_LP_ANSWER = 'ADD_LP_ANSWER';\r\nexport const REMOVE_LP_ANSWER = 'REMOVE_LP_ANSWER';\r\nexport const NEXT_LP_QUESTION = 'NEXT_LP_QUESTION';\r\nexport const PREV_LP_QUESTION = 'PREV_LP_QUESTION';\r\n\r\n// Hazard Perception\r\nexport const SET_HP_TEST = 'SET_HP_TEST';\r\nexport const SET_VIDEOS = 'SET_VIDEOS';\r\nexport const NEXT_VIDEO = 'NEXT_VIDEO';\r\nexport const PREV_VIDEO = 'PREV_VIDEO';\r\nexport const GO_TO_VIDEO = 'GO_TO_VIDEO';\r\nexport const ADD_CLICK_TIME = 'ADD_CLICK_TIME';\r\nexport const EXIT_HP_TEST = 'EXIT_HP_TEST';\r\nexport const PLAY_VIDEO = 'PLAY_VIDEO';\r\nexport const PAUSE_VIDEO = 'PAUSE_VIDEO';\r\nexport const PLAY_PAUSE_VIDEO = 'PLAY_PAUSE_VIDEO';\r\nexport const PLAYBACK_RATE = 'PLAYBACK_RATE';\r\nexport const SET_DURATION = 'SET_DURATION';\r\nexport const SET_PLAYED = 'SET_PLAYED';\r\nexport const SET_ERROR = 'SET_ERROR';\r\nexport const SCORE_PAUSE = 'SCORE_PAUSE';\r\nexport const SEEK_CHANGE = 'SEEK_CHANGE';\r\nexport const SEEK_START = 'SEEK_START';\r\nexport const SEEK_END = 'SEEK_END';\r\nexport const BUFFERING = 'BUFFERING';\r\nexport const VIDEO_READY = 'VIDEO_READY';\r\nexport const VIDEO_ENDED = 'VIDEO_ENDED';\r\nexport const RESET_TEST = 'RESET_TEST';\r\nexport const REVIEW_HP_TEST = 'REVIEW_HP_TEST';","import {\r\n SET_SECTION,\r\n SET_SECTION_NUMBER,\r\n SKIP_CORRECT,\r\n SET_STUDY,\r\n ADD_LP_ANSWER,\r\n REMOVE_LP_ANSWER,\r\n NEXT_LP_QUESTION,\r\n PREV_LP_QUESTION\r\n} from \"./types\";\r\n\r\nexport const nextQuestion = () => {\r\n return {\r\n type: NEXT_LP_QUESTION,\r\n };\r\n};\r\n\r\nexport const prevQuestion = () => {\r\n return {\r\n type: PREV_LP_QUESTION,\r\n };\r\n};\r\n\r\nexport const setSection = (section: [], id: number) => {\r\n return {\r\n type: SET_SECTION,\r\n payload: {\r\n section,\r\n id\r\n }\r\n };\r\n};\r\n\r\nexport const setSectionNumber = (id: number) => {\r\n return {\r\n type: SET_SECTION_NUMBER,\r\n payload: id\r\n };\r\n}\r\n\r\nexport const setSkipCorrect = () => {\r\n return {\r\n type: SKIP_CORRECT,\r\n }\r\n}\r\n\r\nexport const setStudy = () => {\r\n return {\r\n type: SET_STUDY,\r\n }\r\n}\r\n\r\nexport const addLPAnswer = (answer: string, correct: string, dvsa: number | null) => {\r\n return {\r\n type: ADD_LP_ANSWER,\r\n payload: {\r\n answer,\r\n correct,\r\n dvsa,\r\n },\r\n };\r\n};\r\n\r\nexport const removeLPAnswer = (answer: string, dvsa: number | null) => {\r\n return {\r\n type: REMOVE_LP_ANSWER,\r\n payload: {\r\n answer: answer,\r\n dvsa: dvsa\r\n }\r\n };\r\n};","import {\r\n NEXT_QUESTION,\r\n PREV_QUESTION,\r\n FLAG_QUESTION,\r\n TOGGLE_SOUND,\r\n GO_TO_QUESTION,\r\n REMOVE_ANSWER,\r\n ADD_ANSWER,\r\n REVIEW_ALL,\r\n REVIEW_FLAGGED,\r\n REVIEW_INCOMPLETE,\r\n REVIEW_SUMMARY,\r\n REVIEW_ANSWERS,\r\n REVIEW_TEST,\r\n END_TEST,\r\n SET_QUESTIONS,\r\n SET_TEST_NO\r\n} from \"./types\";\r\n\r\nexport const setTestNo = (testNo: number) => {\r\n return {\r\n type: SET_TEST_NO,\r\n payload: testNo\r\n }\r\n}\r\n\r\nexport const setQuestions = (questions: [], testNo: number) => {\r\n return {\r\n type: SET_QUESTIONS,\r\n payload: {\r\n questions,\r\n testNo\r\n }\r\n };\r\n};\r\n\r\nexport const nextQuestion = () => {\r\n return {\r\n type: NEXT_QUESTION,\r\n };\r\n};\r\n\r\nexport const prevQuestion = () => {\r\n return {\r\n type: PREV_QUESTION,\r\n };\r\n};\r\n\r\nexport const goToQuestion = (questionNo: number) => {\r\n return {\r\n type: GO_TO_QUESTION,\r\n payload: questionNo,\r\n };\r\n};\r\n\r\nexport const flagQuestion = () => {\r\n return {\r\n type: FLAG_QUESTION,\r\n };\r\n};\r\n\r\nexport const toggleVoiceover = () => {\r\n return {\r\n type: TOGGLE_SOUND,\r\n };\r\n};\r\n\r\nexport const addAnswer = (answer: string, correct: string, dvsa: number | null) => {\r\n return {\r\n type: ADD_ANSWER,\r\n payload: {\r\n answer: answer,\r\n correct: correct,\r\n dvsa: dvsa,\r\n },\r\n };\r\n};\r\n\r\nexport const removeAnswer = (answer: string, dvsa: number| null) => {\r\n return {\r\n type: REMOVE_ANSWER,\r\n payload: {\r\n answer: answer,\r\n dvsa: dvsa\r\n }\r\n };\r\n};\r\n\r\nexport const reviewAll = () => {\r\n return {\r\n type: REVIEW_ALL,\r\n };\r\n};\r\n\r\nexport const reviewFlagged = () => {\r\n return {\r\n type: REVIEW_FLAGGED,\r\n };\r\n};\r\n\r\nexport const reviewSummary = () => {\r\n return {\r\n type: REVIEW_SUMMARY,\r\n };\r\n};\r\n\r\nexport const reviewIncomplete = () => {\r\n return {\r\n type: REVIEW_INCOMPLETE,\r\n };\r\n};\r\n\r\nexport const endTest = (secondsRemaining?: number) => {\r\n return {\r\n type: END_TEST,\r\n payload: secondsRemaining\r\n };\r\n};\r\n\r\nexport const reviewAnswers = () => {\r\n return {\r\n type: REVIEW_ANSWERS,\r\n };\r\n};\r\n\r\nexport const reviewTest = (testNo: number) => {\r\n return {\r\n type: REVIEW_TEST,\r\n payload: testNo\r\n }\r\n}","import {\r\n SET_HP_TEST,\r\n SET_VIDEOS,\r\n NEXT_VIDEO,\r\n PREV_VIDEO,\r\n GO_TO_VIDEO,\r\n ADD_CLICK_TIME,\r\n EXIT_HP_TEST,\r\n PLAY_VIDEO,\r\n PAUSE_VIDEO,\r\n PLAY_PAUSE_VIDEO,\r\n PLAYBACK_RATE,\r\n SET_DURATION,\r\n SET_ERROR,\r\n SCORE_PAUSE,\r\n SEEK_CHANGE,\r\n SEEK_START,\r\n SEEK_END,\r\n SET_PLAYED,\r\n BUFFERING,\r\n VIDEO_READY,\r\n VIDEO_ENDED,\r\n RESET_TEST,\r\n REVIEW_HP_TEST\r\n} from \"./types\";\r\n\r\nexport const setHPTest = (testNo: number) => {\r\n return {\r\n type: SET_HP_TEST,\r\n payload: testNo\r\n };\r\n}\r\n\r\nexport const setVideos = (videos: any[], testId: number) => {\r\n return {\r\n type: SET_VIDEOS,\r\n payload: {\r\n videos,\r\n testId\r\n },\r\n };\r\n};\r\n\r\nexport const nextVideo = () => {\r\n return {\r\n type: NEXT_VIDEO,\r\n };\r\n};\r\n\r\nexport const prevVideo = () => {\r\n return {\r\n type: PREV_VIDEO,\r\n };\r\n};\r\n\r\nexport const goToVideo = (video: number) => {\r\n return {\r\n type: GO_TO_VIDEO,\r\n payload: video\r\n };\r\n};\r\n\r\nexport const addVideoClick = (time: number) => {\r\n return {\r\n type: ADD_CLICK_TIME,\r\n payload: time,\r\n };\r\n};\r\n\r\nexport const exitHPTest = () => {\r\n return {\r\n type: EXIT_HP_TEST\r\n };\r\n};\r\n\r\nexport const playPauseVideo = () => {\r\n return {\r\n type: PLAY_PAUSE_VIDEO\r\n }\r\n}\r\n\r\nexport const playVideo = () => {\r\n return {\r\n type: PLAY_VIDEO\r\n }\r\n}\r\n\r\nexport const pauseVideo = () => {\r\n return {\r\n type: PAUSE_VIDEO\r\n }\r\n}\r\n\r\nexport const setError = () => {\r\n return {\r\n type: SET_ERROR\r\n }\r\n}\r\n\r\nexport const setDuration = (duration: number) => {\r\n return {\r\n type: SET_DURATION,\r\n payload: duration\r\n }\r\n}\r\n\r\nexport const setPlayed = (e: any) => {\r\n return {\r\n type: SET_PLAYED,\r\n payload: e.played\r\n }\r\n}\r\n\r\nexport const setPlaybackRate = (rate: number) => {\r\n return {\r\n type: PLAYBACK_RATE,\r\n payload: rate\r\n }\r\n}\r\n\r\nexport const setPauseOnScore = () => {\r\n return {\r\n type: SCORE_PAUSE\r\n }\r\n}\r\n\r\nexport const setSeekChange = (e: {target: HTMLInputElement}) => {\r\n return {\r\n type: SEEK_CHANGE,\r\n payload: e.target.value\r\n }\r\n}\r\n\r\nexport const setSeekStart = () => {\r\n return {\r\n type: SEEK_START\r\n }\r\n}\r\n\r\nexport const setSeekEnd = () => {\r\n return {\r\n type: SEEK_END\r\n }\r\n}\r\n\r\nexport const setBuffering = () => {\r\n return {\r\n type: BUFFERING\r\n }\r\n}\r\n\r\nexport const setVideoReady = () => {\r\n return {\r\n type: VIDEO_READY\r\n }\r\n}\r\n\r\nexport const setVideoEnded = () => {\r\n return {\r\n type: VIDEO_ENDED\r\n }\r\n}\r\n\r\nexport const resetHPTest = () => {\r\n return {\r\n type: RESET_TEST\r\n }\r\n}\r\n\r\nexport const reviewHPTest = (testNo: number) => {\r\n return {\r\n type: REVIEW_HP_TEST,\r\n payload: testNo\r\n }\r\n}","import axios from 'axios';\r\n\r\nconst instance = axios.create({\r\n baseURL: 'https://www.myldc.co.uk/api/'\r\n});\r\n\r\ninstance.interceptors.request.use(\r\n async (config) => {\r\n const token = await localStorage.getItem('token');\r\n if (token) {\r\n config.headers!.Authorization = `Bearer ${token}`\r\n }\r\n return config\r\n },\r\n (err) => {\r\n return Promise.reject(err)\r\n }\r\n)\r\n\r\nexport default instance;","\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {faExpandArrowsAlt, faCompress} from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nexport default function FullscreenButton({handle}: {handle: any}) {\r\n // @ts-ignore\r\n const fullScreenAvailable = document.fullscreenEnabled || document.mozFullscreenEnabled || document.webkitFullscreenEnabled || document.msFullscreenEnabled;\r\n\r\n if(fullScreenAvailable) {\r\n if(handle.active !== true){\r\n return \r\n } else {\r\n return \r\n }\r\n }\r\n return null;\r\n}","import React, { Component, createRef } from \"react\";\r\nimport dashjs from \"dashjs\";\r\n\r\ntype VideoArray = {\r\n url: string;\r\n type: string;\r\n};\r\n\r\ntype PropTypes = {\r\n url: string | VideoArray[];\r\n className?: string;\r\n playing?: boolean;\r\n loop?: boolean;\r\n controls?: boolean;\r\n playbackRate?: number;\r\n width?: string;\r\n height?: string;\r\n style?: object;\r\n progressInterval?: number;\r\n onReady?: Function;\r\n onStart?: Function;\r\n onPlay?: Function;\r\n onPause?: Function;\r\n onProgress?: Function;\r\n onDuration?: Function;\r\n onBuffer?: Function;\r\n onSeek?: Function;\r\n onEnded?: Function;\r\n onError?: Function;\r\n onClick?: Function;\r\n};\r\n\r\ntype defaultProps = {\r\n playing: false;\r\n loop: false;\r\n controls: false;\r\n playbackRate: 1;\r\n width: \"640px\";\r\n height: \"360px\";\r\n style: {};\r\n progressInterval: 200;\r\n wrapper: \"div\";\r\n onReady: () => {};\r\n onStart: () => {};\r\n onPlay: () => {};\r\n onPause: () => {};\r\n onBuffer: () => {};\r\n onEnded: () => {};\r\n onError: () => {};\r\n onDuration: () => {};\r\n onSeek: () => {};\r\n onPlaybackRateChange: () => {};\r\n onProgress: () => {};\r\n};\r\n\r\nexport default class Video extends Component {\r\n player: React.RefObject;\r\n dash;\r\n isReady: boolean = false;\r\n isPlaying: boolean = false; // Track playing state internally to prevent bugs\r\n isLoading: boolean = true; // Use isLoading to prevent onPause when switching URL\r\n seekOnPlay: number | null = null;\r\n progressTimeout: number = 0;\r\n prevPlayed: number = 0;\r\n prevLoaded: number = 0;\r\n\r\n isiOS = () => {\r\n return ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) || (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\r\n }\r\n\r\n constructor(props: PropTypes) {\r\n super(props);\r\n this.player = createRef();\r\n this.dash = dashjs.MediaPlayer().create();\r\n }\r\n\r\n componentDidMount() {\r\n this.initializeVideo()\r\n }\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.progressTimeout);\r\n this.player.current!.srcObject = null;\r\n }\r\n\r\n componentDidUpdate(prevProps: any) {\r\n if (!this.player.current) {\r\n return null;\r\n }\r\n const { playing, playbackRate, loop, url } = this.props;\r\n if (!prevProps.playing && playing && !this.isPlaying) {\r\n this.player.current.play();\r\n this.isPlaying = true;\r\n }\r\n if (prevProps.playing && !playing && this.isPlaying) {\r\n this.player.current.pause();\r\n this.isPlaying = false;\r\n }\r\n if (prevProps.playbackRate !== playbackRate && playbackRate) {\r\n this.player.current.playbackRate = playbackRate;\r\n }\r\n if (prevProps.loop !== loop) {\r\n this.player.current.loop = loop!;\r\n }\r\n if (JSON.stringify(prevProps.url) !== JSON.stringify(url)) {\r\n if(typeof(this.dash) === 'object'){\r\n if(this.isiOS()) {\r\n this.dash = dashjs.MediaPlayer().create()\r\n this.initializeVideo()\r\n }\r\n else{\r\n this.dash.reset()\r\n this.dash.attachView(this.player.current)\r\n this.dash.attachSource(\r\n typeof this.props.url === \"string\"\r\n ? this.props.url\r\n : this.props.url[0].url\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n addEventListeners(video: HTMLVideoElement) {\r\n const { onReady, onBuffer, onEnded, onDuration, onPlay, onError } = this.props;\r\n\r\n video.pause()\r\n \r\n video.oncanplaythrough = () => {\r\n this.isReady = true;\r\n onReady!();\r\n };\r\n video.onwaiting = () => {\r\n this.isReady = false;\r\n onBuffer!();\r\n var buffering = setTimeout(() => {\r\n if (this.player.current) {\r\n if (this.player.current.readyState > 2) {\r\n this.isReady = true;\r\n onPlay!();\r\n clearTimeout(buffering);\r\n }\r\n }\r\n }, 500);\r\n };\r\n\r\n video.onended = () => onEnded!();\r\n video.onloadedmetadata = (event) => onDuration!(this.player.current!.duration);\r\n video.onerror = (event) => onError!();\r\n }\r\n\r\n initializeVideo() {\r\n if (this.player.current) {\r\n this.dash.initialize(\r\n this.player.current,\r\n typeof this.props.url === \"string\"\r\n ? this.props.url\r\n : this.props.url[0].url,\r\n false\r\n );\r\n if(this.isiOS() && this.props.url){\r\n this.player.current.src = typeof this.props.url === \"string\" ? this.props.url : this.props.url[1].url\r\n }\r\n this.addEventListeners(this.player.current);\r\n this.player.current.volume = 0;\r\n this.player.current.disablePictureInPicture = true;\r\n this.progress();\r\n }\r\n }\r\n\r\n getDuration() {\r\n if (!this.player.current) return null;\r\n return this.player.current.duration;\r\n }\r\n\r\n getCurrentTime() {\r\n if (!this.player.current) return null;\r\n return this.player.current.currentTime;\r\n }\r\n\r\n getSecondsLoaded() {\r\n if (!this.player.current) return null;\r\n const { buffered } = this.player.current;\r\n if (buffered.length === 0) {\r\n return 0;\r\n }\r\n const end = buffered.end(buffered.length - 1);\r\n const duration = this.getDuration()!;\r\n if (end > duration) {\r\n return duration;\r\n }\r\n return end;\r\n }\r\n\r\n progress = () => {\r\n if (this.props.url && this.player.current && this.isReady) {\r\n const playedSeconds = this.getCurrentTime() || 0;\r\n const loadedSeconds = this.getSecondsLoaded();\r\n const duration = this.getDuration();\r\n if (duration) {\r\n let progress = {\r\n playedSeconds,\r\n played: playedSeconds / duration,\r\n loadedSeconds,\r\n loaded: loadedSeconds ? loadedSeconds / duration : 0\r\n };\r\n if (\r\n progress.playedSeconds !== this.prevPlayed ||\r\n progress.loadedSeconds !== this.prevLoaded\r\n ) {\r\n this.props.onProgress!(progress);\r\n }\r\n this.prevPlayed = progress.playedSeconds;\r\n this.prevLoaded = progress.loadedSeconds!;\r\n }\r\n }\r\n this.progressTimeout = setTimeout(\r\n this.progress,\r\n this.props.progressInterval\r\n );\r\n };\r\n\r\n seekTo(amount: number, type: string) {\r\n if (!this.isReady && amount !== 0) {\r\n this.seekOnPlay = amount;\r\n setTimeout(() => {\r\n this.seekOnPlay = null;\r\n }, 5000);\r\n return;\r\n }\r\n const isFraction = !type\r\n ? amount > 0 && amount < 1\r\n : type === \"fraction\";\r\n if (isFraction) {\r\n const duration = this.getDuration();\r\n if (!duration) {\r\n console.warn(\r\n \"Could not seek using fraction – duration not yet available\"\r\n );\r\n return;\r\n }\r\n this.player.current!.currentTime = duration * amount;\r\n return;\r\n }\r\n this.player.current!.currentTime = amount;\r\n }\r\n\r\n render() {\r\n const {\r\n url,\r\n className,\r\n controls,\r\n loop,\r\n onClick,\r\n width,\r\n height,\r\n style\r\n } = this.props;\r\n return (\r\n
\r\n onClick!()}\r\n >\r\n {url instanceof Array ? (\r\n url.map((video) => {\r\n return (\r\n \r\n );\r\n })\r\n ) : (\r\n \r\n )}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import { connect } from \"react-redux\";\r\nimport { Hazard } from \"./hazard\";\r\nimport { playVideo, exitHPTest } from \"../../actions/hazard\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faPlay, faPowerOff } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nfunction Overlay({ testNo, ended, videoStatus, numVideos, currentVideo, tamper, playVideo, exitHPTest }: Hazard) {\r\n const tamperTitle : { [key: string]: string } = {\r\n 'Rapid clicking': 'Rapid clicking detected',\r\n 'Too many clicks': 'You clicked too may times',\r\n 'Click pattern': 'A pattern was detected with your clicks'\r\n };\r\n\r\n const tamperTestInfo = tamper[testNo] ? tamper[testNo] : [];\r\n\r\n return ended === true || videoStatus.playing ? (\r\n <>\r\n ) : (\r\n <>\r\n
\r\n
\r\n \r\n

{tamperTestInfo[currentVideo - 2] && videoStatus.played < 0.001 ? tamperTitle[tamperTestInfo[currentVideo - 2]] : `Clip ${currentVideo} of ${numVideos[testNo]}`}

\r\n {videoStatus.played > 0.004 ?\r\n <>\r\n

Buffering...

\r\n \r\n : currentVideo !== 1 ? \r\n <>\r\n {tamperTestInfo[currentVideo - 2] && videoStatus.played < 0.001\r\n ?

You will score zero for this clip

\r\n :

You've completed {currentVideo - 1} out of {numVideos[testNo]} clips

\r\n }\r\n \r\n : (\r\n <>\r\n

This test contains {numVideos[testNo]} clips. {numVideos[testNo] - 1} clips contain 1 developing hazard and 1 clip contains two where you will score points for both developing hazards.

\r\n

Click or tap anywhere on the video when you see a developing hazard. This is something that will cause you to take action such as changing speed or direction.

\r\n

A red flag will appear at the bottom of the screen to show your response has been registered. You can score up to 5 points for each developing hazard so the earlier you recognise and respond to them the better.

\r\n

You won’t lose points for responding to things may not develop into a hazard. But don’t click too often, or in a pattern, otherwise you may see a warning message and you won’t score any points for that clip.

\r\n \r\n )}\r\n \r\n {currentVideo !== 1 ? \r\n \r\n {\" \"}Exit Test\r\n : ''}\r\n {videoStatus.loaded ? {\" \"}\r\n {videoStatus.played > 0.004 ? 'Continue' : currentVideo !== 1 ? 'Start Next Clip' : 'Start Test'} \r\n : }\r\n
\r\n \r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any): Hazard => {\r\n return {\r\n ...state,\r\n testNo: state.hazard.testNo,\r\n ended: state.hazard.ended,\r\n videoStatus: state.hazard.videoStatus,\r\n numVideos: state.hazard.numVideos,\r\n currentVideo: state.hazard.currentVideo,\r\n tamper: state.hazard.tamper\r\n };\r\n}\r\n\r\nconst mapDispatchToProps = { playVideo, exitHPTest }\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Overlay);\r\n","import { useRef } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport Video from \"./Video\";\r\nimport { Hazard } from \"./hazard\";\r\nimport {\r\n playVideo,\r\n pauseVideo,\r\n setDuration,\r\n setPlayed,\r\n addVideoClick,\r\n setBuffering,\r\n setError,\r\n setVideoReady,\r\n setVideoEnded\r\n} from \"../../actions/hazard\";\r\nimport Overlay from \"./Overlay\";\r\n\r\nfunction VideoPlayer(props: Hazard) {\r\n const player: any = useRef();\r\n\r\n const {\r\n testNo,\r\n videos,\r\n videoStatus,\r\n currentVideo,\r\n playVideo,\r\n pauseVideo,\r\n setDuration,\r\n setPlayed,\r\n addVideoClick,\r\n setBuffering,\r\n setError,\r\n setVideoReady,\r\n setVideoEnded\r\n }: Hazard = props;\r\n\r\n if (videoStatus.seeking === true) {\r\n player.current.seekTo(videoStatus.played, \"fraction\");\r\n }\r\n\r\n const handleClick = (e: any) => {\r\n addVideoClick(player.current.getCurrentTime());\r\n };\r\n\r\n return (\r\n
\r\n setPlayed(e)}\r\n onDuration={setDuration}\r\n onError={setError}\r\n onClick={handleClick}\r\n />\r\n \r\n
\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any): Hazard => {\r\n return {\r\n ...state,\r\n testNo: state.hazard.testNo,\r\n videos: state.hazard.videos,\r\n videoClicks: state.hazard.videoClicks,\r\n currentVideo: state.hazard.currentVideo,\r\n videoStatus: state.hazard.videoStatus\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n playVideo,\r\n pauseVideo,\r\n setDuration,\r\n setPlayed,\r\n addVideoClick,\r\n setBuffering,\r\n setError,\r\n setVideoReady,\r\n setVideoEnded\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(VideoPlayer);\r\n","import { Videos } from './hazard';\r\n\r\ntype Props = {\r\n videoInfo: Videos,\r\n duration: number\r\n}\r\n\r\nfunction ScoreWindow({videoInfo, duration}: Props) {\r\n \r\n const marginLeft = (((videoInfo.prehazard ? videoInfo.prehazard : videoInfo.five) / duration) * 100);\r\n const secondMarginLeft = videoInfo.nohazards > 1 ? ((((videoInfo.prehazard2 ? videoInfo.prehazard2! : videoInfo.ten!) - videoInfo.endseq) / duration) * 100) : 0;\r\n\r\n return (\r\n
\r\n {videoInfo.prehazard ?
: ''}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {videoInfo.nohazards > 1 ? \r\n \r\n {videoInfo.prehazard2 ?
: null}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n : ''\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default ScoreWindow\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faFlag } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\ninterface FlagProps {\r\n videoClicks: number[];\r\n duration: number;\r\n ended: boolean | void;\r\n}\r\n\r\nexport default function Flags({ videoClicks, duration, ended }: FlagProps) {\r\n return (\r\n
\r\n {videoClicks\r\n ? videoClicks.map((flag: number) => {\r\n return (\r\n \r\n );\r\n })\r\n : \"\"}\r\n
\r\n );\r\n}\r\n","import { useEffect } from 'react';\r\nimport { Videos } from './hazard'\r\nimport _ from 'lodash'\r\n\r\ninterface ReviewProps{\r\n videos: Videos[],\r\n scores: number[],\r\n tamper: string[],\r\n clicks: number[][],\r\n passMark: number,\r\n goToVideo: Function,\r\n testNo: number;\r\n}\r\n\r\nfunction Review({videos, scores, tamper, clicks, passMark, goToVideo, testNo}: ReviewProps) {\r\n const availableScores = [0, 1, 2, 3, 4, 5];\r\n const totalScore = scores.length ? scores.reduce((a, b) => a + b) : 0\r\n const averageScore = scores.length ? (totalScore / (videos.length + 1)).toFixed(1) : 0;\r\n const backgroundColor = (score: number) => {\r\n if(score === 5){return 'five'}\r\n else if(score === 4){return 'four'}\r\n else if(score === 3){return 'three'}\r\n else if(score === 2){return 'two'}\r\n else if(score === 1){return 'one'}\r\n else{return 'bg-white'}\r\n }\r\n\r\n useEffect(() => {\r\n\r\n }, []);\r\n\r\n return (\r\n
\r\n {totalScore >= passMark ?

Congratulations you've passed!

:

Sorry, you have failed this time!

}\r\n

You have scored {totalScore ? totalScore : '0'} points out of a possible {(videos.length + 1) * 5}, the pass mark is {passMark}

\r\n

To replay and review any of the following clips in more detail please select the appropriate item in the menu list below:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {videos.map((video: Videos, index: number) => {\r\n return goToVideo(index + 1)}>\r\n \r\n \r\n \r\n \r\n \r\n })}\r\n \r\n
DescriptionScoreStatus
{index + 1}{video.title}{video.nohazards > 1 ? ` & ${video.title2}` : ''}{scores[index] >= 1 ? scores[index] : '0'}{video.nohazards > 1 ? ` + ${scores[videos.length + 1] ? scores[videos.length + 1] : '0'}` : ''}{tamper[index] ? tamper[index] : ''}
\r\n
\r\n
\r\n

Analysis of all clips by score

\r\n
\r\n
{averageScore} per clip
\r\n {availableScores.map((score, index) => {\r\n return
\r\n {score === 0\r\n ? (_.compact(scores).filter(x => x === score).length + ((videos.length + 1) - _.compact(scores).length))\r\n : scores.filter(x => x === score).length}\r\n
\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Review\r\n","import { connect } from \"react-redux\";\r\nimport { Hazard } from \"./hazard\";\r\nimport { setSeekChange, setSeekStart, setSeekEnd } from \"../../actions/hazard\";\r\n\r\nfunction VideoProgress({\r\n videoStatus,\r\n setSeekStart,\r\n setSeekChange,\r\n setSeekEnd,\r\n}: Hazard) {\r\n return (\r\n setSeekChange(e)}\r\n onMouseUp={setSeekEnd}\r\n className=\"block w-full px-1\"\r\n />\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any): Hazard => {\r\n return {\r\n ...state,\r\n videoStatus: state.hazard.videoStatus,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSeekChange,\r\n setSeekStart,\r\n setSeekEnd\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(VideoProgress);\r\n","import { connect } from \"react-redux\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faPlay, faPause, faCheck } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { Hazard } from \"./hazard\";\r\nimport {\r\n playPauseVideo,\r\n setPlaybackRate,\r\n setPauseOnScore,\r\n} from \"../../actions/hazard\";\r\n\r\nfunction VideoReviewControls({ videoStatus, playPauseVideo, setPlaybackRate, setPauseOnScore }: Hazard) {\r\n const playbackButtonStyles = 'flex-1 py-2 px-4 mr-1 font-semibold rounded-lg';\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {\" \"}\r\n Pause 5,4,3,2,1\r\n \r\n
\r\n
Score Window
{videoStatus.scoreWindow}
\r\n
\r\n
\r\n setPlaybackRate(0.25)}\r\n className={`${videoStatus.playbackRate === 0.25 ? 'bg-blue-700' : 'bg-red-500 hover:bg-red-700'} text-white ${playbackButtonStyles}`}\r\n >\r\n 0.25x\r\n \r\n setPlaybackRate(0.5)}\r\n className={`${videoStatus.playbackRate === 0.5 ? 'bg-blue-700' : 'bg-red-500 hover:bg-red-700'} text-white ${playbackButtonStyles}`}\r\n >\r\n 0.5x\r\n \r\n setPlaybackRate(1)}\r\n className={`${videoStatus.playbackRate === 1 ? 'bg-blue-700' : 'bg-red-500 hover:bg-red-700'} text-white ${playbackButtonStyles}`}\r\n >\r\n 1x\r\n \r\n setPlaybackRate(1.5)}\r\n className={`${videoStatus.playbackRate === 1.5 ? 'bg-blue-700' : 'bg-red-500 hover:bg-red-700'} text-white ${playbackButtonStyles}`}\r\n >\r\n 1.5x\r\n \r\n setPlaybackRate(2)}\r\n className={`${videoStatus.playbackRate === 2 ? 'bg-blue-700' : 'bg-red-500 hover:bg-red-700'} text-white ${playbackButtonStyles}`}\r\n >\r\n 2x\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any): Hazard => {\r\n return {\r\n ...state,\r\n videos: state.hazard.videos,\r\n videoStatus: state.hazard.videoStatus,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n playPauseVideo,\r\n setPlaybackRate,\r\n setPauseOnScore,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(VideoReviewControls);\r\n","import { Oval } from \"react-loader-spinner\"\r\n\r\nexport default function Spinner() {\r\n const width = 80;\r\n const height = 80;\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import { useEffect } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { FullScreen, useFullScreenHandle } from \"react-full-screen\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faAngleRight, faAngleLeft, faTimes } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { useBeforeunload } from 'react-beforeunload';\r\n\r\nimport \"./HazardPerception.css\";\r\nimport myLDC from \"../../api/myldc\";\r\nimport FullscreenButton from \"../FullscreenButton\";\r\nimport { Hazard } from \"./hazard\";\r\nimport VideoPlayer from \"./VideoPlayer\";\r\nimport ScoreWindow from \"./ScoreWindow\";\r\nimport Flags from \"./Flags\";\r\nimport Review from \"./Review\";\r\nimport VideoProgress from \"./VideoProgress\";\r\nimport VideoReviewControls from \"./VideoReviewControls\";\r\nimport {\r\n setVideos,\r\n nextVideo,\r\n prevVideo,\r\n goToVideo,\r\n addVideoClick,\r\n exitHPTest,\r\n resetHPTest\r\n} from \"../../actions/hazard\";\r\nimport Spinner from \"../Spinner\";\r\n\r\nfunction HazardPerception(props: Hazard) {\r\n const {\r\n testNo,\r\n review,\r\n videos,\r\n passMark,\r\n numVideos,\r\n currentVideo,\r\n scores,\r\n ended,\r\n videoStatus,\r\n videoClicks,\r\n tamper,\r\n setVideos,\r\n prevVideo,\r\n nextVideo,\r\n exitHPTest,\r\n goToVideo,\r\n resetHPTest\r\n } = props;\r\n const handle = useFullScreenHandle();\r\n\r\n const SaveProgress = () => {\r\n // localStorage.setItem('HelloWorld', 'mydata');\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n SaveProgress();\r\n }\r\n }, [])\r\n\r\n useBeforeunload((event: MouseEvent) => {\r\n SaveProgress();\r\n });\r\n\r\n if (typeof(numVideos[testNo]) === 'undefined' || numVideos[testNo] <= 0) {\r\n myLDC.get(`hazard/${testNo}`).then((response: AxiosResponse) => {\r\n setVideos!(response.data, testNo);\r\n });\r\n return ;;\r\n }\r\n\r\n return (\r\n \r\n {!review ? (\r\n
\r\n
\r\n
\r\n {currentVideo}/{numVideos[testNo]}\r\n
\r\n
\r\n {\" \"}\r\n {ended ? (\r\n <>\r\n You scored{\" \"}\r\n {scores[testNo][currentVideo - 1]\r\n ? scores[testNo][currentVideo - 1]\r\n : 0}{\" \"}\r\n {videos[testNo][currentVideo - 1].nohazards > 1\r\n ? `for the first hazard and ${\r\n scores[testNo][videos.length + 1]\r\n ? scores[testNo][videos[testNo].length + 1]\r\n : 0\r\n } for the second hazard`\r\n : \"for this hazard\"}\r\n \r\n ) : null}\r\n
\r\n
\r\n
\r\n
\r\n {ended ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {videos[testNo][currentVideo - 1].title}\r\n
\r\n {videos[testNo][currentVideo - 1].description}{\" \"}\r\n {videos[testNo][currentVideo - 1].description2}\r\n
\r\n ) : null}\r\n \r\n \r\n \r\n {ended ? (\r\n <>\r\n \r\n \r\n \r\n ) : null}\r\n
\r\n {ended ? (\r\n
\r\n {tamper[testNo][currentVideo - 1] ? (\r\n
\r\n {tamper[testNo][currentVideo - 1]} Detected\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n \r\n ) : (\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n )}\r\n \r\n );\r\n}\r\n\r\ninterface PassedProps {\r\n testNo: number\r\n}\r\n\r\nconst mapStateToProps = (state: any, ownProps?: any): Hazard => {\r\n return {\r\n ...state,\r\n testNo: ownProps.testNo,\r\n videos: state.hazard.videos,\r\n videoClicks: state.hazard.videoClicks,\r\n currentVideo: state.hazard.currentVideo,\r\n videoStatus: state.hazard.videoStatus,\r\n numVideos: state.hazard.numVideos,\r\n passMark: state.hazard.passMark,\r\n scores: state.hazard.scores,\r\n tamper: state.hazard.tamper,\r\n review: state.hazard.review,\r\n ended: state.hazard.ended,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setVideos,\r\n nextVideo,\r\n prevVideo,\r\n goToVideo,\r\n addVideoClick,\r\n exitHPTest,\r\n resetHPTest\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(HazardPerception);\r\n","interface TestReviewProps {\r\n noTests: number,\r\n score: number,\r\n takeTest: Function,\r\n reviewTest: Function,\r\n userData: any[],\r\n testName?: string\r\n}\r\n\r\nconst TestReview = (props: TestReviewProps) => {\r\n const { noTests, score, testName, takeTest, reviewTest, userData} = props;\r\n\r\n const createTestRow = (rows: number) => {\r\n let tableRows = [];\r\n for (let i = 0; i < rows; i++){\r\n \r\n tableRows.push(\r\n \r\n {userData[i+1] ? userData[i+1].totalScore : 0} / {score}\r\n {userData[i+1] ? userData[i+1].status === 1 ? 'Passed' : userData[i+1].status === 2 ? 'Incomplete' : 'Failed' : null}\r\n {userData[i+1] ? : null}\r\n )\r\n }\r\n return tableRows;\r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {noTests >= 1 ? (\r\n createTestRow(noTests).map(row => row)\r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n
MarkStatusReview
There are currently no tests available
\r\n );\r\n};\r\n\r\nexport default TestReview;","import { useEffect } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { Hazard } from \"./hazard\";\r\nimport { setHPTest, reviewHPTest } from \"../../actions/hazard\";\r\nimport HazardPerception from './HazardPerception';\r\nimport TestReview from \"../TestReview\";\r\n\r\ntype GetParams = {\r\n test: string | undefined;\r\n}\r\n\r\nfunction HazardPerceptionOverview(props: Hazard) {\r\n const { testNo, complete, setHPTest, reviewHPTest } = props;\r\n const { test } = useParams();\r\n\r\n useEffect(() => {\r\n \r\n }, [])\r\n\r\n if (testNo >= 1) {\r\n return <>{test}\r\n } else {\r\n return <>Test No: {test}
\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any): Hazard => {\r\n return {\r\n ...state,\r\n testNo: state.hazard.testNo,\r\n complete: state.hazard.complete\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setHPTest,\r\n reviewHPTest\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(HazardPerceptionOverview);\r\n","import { useState, useEffect } from \"react\";\r\n\r\nconst zeroPad = (num: number, places: any) => String(num).padStart(places, \"0\");\r\n\r\nconst secondsToHms = (d: number) => {\r\n d = Number(d);\r\n const h = Math.floor(d / 3600);\r\n const m = Math.floor((d % 3600) / 60);\r\n const s = Math.floor((d % 3600) % 60);\r\n\r\n const hDisplay = h > 0 ? zeroPad(h, 2) + \":\" : \"\";\r\n const mDisplay = m > 0 ? zeroPad(m, 2) + \":\" : \"00:\";\r\n const sDisplay = s > 0 ? zeroPad(s, 2) : \"00\";\r\n return hDisplay + mDisplay + sDisplay;\r\n};\r\n\r\nconst Countdown = ({\r\n seconds,\r\n endTest,\r\n remaining\r\n}: {\r\n seconds: number;\r\n endTest: Function;\r\n remaining: Function;\r\n}) => {\r\n const [counter, setCounter] = useState(seconds);\r\n\r\n useEffect(() => {\r\n const timer = counter > 0 && setInterval(() => setCounter(counter - 1), 1000);\r\n remaining(secondsToHms(seconds - counter));\r\n if (counter <= 0) {\r\n endTest(secondsToHms(seconds - counter));\r\n }\r\n if (timer !== false) {\r\n return () => clearInterval(timer);\r\n }\r\n }, [counter, endTest, remaining, seconds]);\r\n\r\n return (\r\n <>\r\n Time
 Remaining
:{\" \"}\r\n {secondsToHms(counter)}\r\n \r\n );\r\n};\r\n\r\nexport default Countdown;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faVolumeUp } from \"@fortawesome/free-solid-svg-icons\";\r\nimport Speech from \"react-speech\";\r\n\r\nconst styles = {\r\n container: {\r\n display: \"block\",\r\n float: \"right\",\r\n zIndex: 100000\r\n },\r\n text: {\r\n width: \"100%\",\r\n display: \"\"\r\n },\r\n play: {\r\n hover: {\r\n color: \"#666\"\r\n },\r\n button: {\r\n width: \"34\",\r\n height: \"34\",\r\n cursor: \"pointer\",\r\n pointerEvents: \"none\",\r\n float: \"right\"\r\n }\r\n },\r\n stop: {\r\n hover: {\r\n backgroundColor: \"GhostWhite\"\r\n },\r\n button: {\r\n width: \"34\",\r\n height: \"34\",\r\n cursor: \"pointer\",\r\n pointerEvents: \"none\",\r\n outline: \"none\",\r\n backgroundColor: \"Gainsboro\",\r\n border: \"solid 1px rgba(255,255,255,1)\",\r\n borderRadius: 6\r\n }\r\n },\r\n pause: {\r\n hover: {\r\n backgroundColor: \"GhostWhite\"\r\n },\r\n button: {\r\n width: \"34\",\r\n height: \"34\",\r\n cursor: \"pointer\",\r\n pointerEvents: \"none\",\r\n outline: \"none\",\r\n backgroundColor: \"Gainsboro\",\r\n border: \"solid 1px rgba(255,255,255,1)\",\r\n borderRadius: 6\r\n }\r\n },\r\n resume: {\r\n hover: {\r\n backgroundColor: \"GhostWhite\"\r\n },\r\n button: {\r\n width: \"34\",\r\n height: \"34\",\r\n cursor: \"pointer\",\r\n pointerEvents: \"none\",\r\n outline: \"none\",\r\n backgroundColor: \"Gainsboro\",\r\n border: \"solid 1px rgba(255,255,255,1)\",\r\n borderRadius: 6\r\n }\r\n }\r\n};\r\n\r\nexport default function TextToSpeech(props: { text: any; voiceOver: boolean }) {\r\n if (props.voiceOver !== true) {\r\n return <>;\r\n }\r\n const icon = ;\r\n return (\r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n \r\n \r\n );\r\n}\r\n","import { connect } from \"react-redux\";\r\nimport { TheoryProps } from '../../types/theory';\r\n\r\nfunction TestOverview(props: TheoryProps) {\r\n return (\r\n
\r\n
{props.numQuestions[props.testNo]}
Number of tTest questions:
\r\n
{props.correct[props.testNo].length + props.incorrect[props.testNo].length}
Number of cCompleted questions:
\r\n
{props.numQuestions[props.testNo] - (props.correct[props.testNo].length + props.incorrect[props.testNo].length)}
Number of iIncomplete questions:
\r\n
{props.flagged[props.testNo].length}
Number of fFlagged questions:
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any): TheoryProps => {\r\n return {\r\n ...state,\r\n testNo: state.question.testNo,\r\n correct: state.question.correct,\r\n incorrect: state.question.incorrect,\r\n numQuestions: state.question.numQuestions,\r\n flagged: state.question.flagged,\r\n dvsa: state.question.dvsa\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, {})(TestOverview);","const ProgressBar = (props: { percentage: number, bgColor?: string }) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t{props.percentage}%
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default ProgressBar;","import { useState, useEffect } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport ProgressBar from \"./Progress\";\r\nimport { TheoryProps } from \"../../types/theory\";\r\nimport myLDC from \"../../api/myldc\";\r\n\r\ninterface SectionResults {\r\n section: number,\r\n name: string,\r\n free: number,\r\n num_questions: number\r\n}\r\n\r\nfunction TestResults(props: TheoryProps) {\r\n const { testNo, numQuestions, passMark, correct, incorrect, flagged, dvsa, complete } = props;\r\n const [sections, setSections] = useState(() => {\r\n const savedData = localStorage.getItem('dvsa_sections');\r\n const values = savedData ? JSON.parse(savedData) : null;\r\n return values || [];\r\n });\r\n\r\n useEffect(() => {\r\n\r\n }, []);\r\n\r\n if (sections.length === 0) {\r\n myLDC.get(\"learning/list\").then((response: AxiosResponse) => {\r\n setSections(response.data);\r\n localStorage.setItem('dvsa_sections', JSON.stringify(response.data))\r\n })\r\n }\r\n\r\n return (\r\n
\r\n

Theory Test {testNo} Report

\r\n {correct[testNo].length >= passMark\r\n ?

Congratulations, you've passed

\r\n :

Sorry, but you've failed the test this time

\r\n }\r\n

\r\n You answered {correct[testNo].length} out of{\" \"}\r\n {numQuestions[testNo]} questions correctly, the pass rate is{\" \"}\r\n {passMark} out of {numQuestions[testNo]}\r\n

\r\n

\r\n Date:{\" \" + complete[testNo].date}\r\n

\r\n

\r\n Questions: {numQuestions[testNo]}\r\n

\r\n

\r\n Status:{\" \"}\r\n = passMark\r\n ? \"text-green-600\"\r\n : \"text-red-600\"\r\n }`}\r\n >\r\n Failed\r\n \r\n

\r\n

\r\n Time Taken:{\" \" + complete[testNo].taken}\r\n

\r\n
\r\n
Correct:
\r\n
{correct[testNo].length} / {numQuestions[testNo]}
\r\n
\r\n
\r\n
\r\n
Incorrect:
\r\n
{incorrect[testNo].length} / {numQuestions[testNo]}
\r\n
\r\n
\r\n
\r\n
Flagged:
\r\n
{flagged[testNo].length} / {numQuestions[testNo]}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Incomplete:
\r\n
{numQuestions[testNo] - (correct[testNo].length + incorrect[testNo].length)} / {numQuestions[testNo]}
\r\n
\r\n \r\n
\r\n
\r\n {sections.length >= 1 ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {sections.map(section => \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
DVSA CategoryCorrectIncorrectTotal% Correct
{section.section}. {section.name}{dvsa[testNo][section.section] ? dvsa[testNo][section.section]['correct'].length : 0}{dvsa[testNo][section.section] ? dvsa[testNo][section.section]['numQuestions'] - dvsa[testNo][section.section]['correct'].length : 0}{dvsa[testNo][section.section] ? dvsa[testNo][section.section]['numQuestions'] : 0}{dvsa[testNo][section.section] ? Math.floor((dvsa[testNo][section.section]['correct'].length / dvsa[testNo][section.section]['numQuestions']) * 100) : null}%
\r\n ) : null}\r\n
\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any): TheoryProps => {\r\n return {\r\n ...state,\r\n testNo: state.question.testNo,\r\n numQuestions: state.question.numQuestions,\r\n correct: state.question.correct,\r\n incorrect: state.question.incorrect,\r\n flagged: state.question.flagged,\r\n passMark: state.question.passMark,\r\n dvsa: state.question.dvsa,\r\n complete: state.question.complete\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(TestResults);\r\n","export default function AlertBanner({review}: {review: string | boolean}) {\r\n if (typeof review === \"string\") {\r\n return (\r\n
\r\n Reviewing {review} questions only\r\n
\r\n );\r\n }\r\n return <>;\r\n}\r\n","import _ from 'lodash'\r\nimport TextToSpeech from './TextToSpeech'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faCheckCircle } from '@fortawesome/free-solid-svg-icons'\r\n\r\ninterface OptionTypes {\r\n options: any,\r\n correct: string,\r\n amount: number,\r\n selected: string | null,\r\n voiceOver: boolean,\r\n review?: (boolean | string),\r\n ended?: boolean,\r\n learning?: boolean,\r\n fullScreenAvailable?: boolean,\r\n addAnswer: (a: string, b: string, c: number | null) => void,\r\n removeAnswer: (a: string, b: number | null) => void,\r\n}\r\n\r\nexport default function QuestionOptions({options, correct, amount, selected, voiceOver, addAnswer, removeAnswer, review, ended, learning, fullScreenAvailable}: OptionTypes) {\r\n return (\r\n
\r\n {_.times(amount, (i) => (\r\n \r\n review !== true\r\n ? selected === \r\n String.fromCharCode(97 + i).toUpperCase() ? removeAnswer(String.fromCharCode(97 + i).toUpperCase(), options.dsacat) : addAnswer(\r\n String.fromCharCode(97 + i).toUpperCase(),\r\n correct,\r\n options.dsacat\r\n )\r\n : \"\"\r\n }\r\n >\r\n {options.format !== 1 ? <>\r\n
{review === true && String.fromCharCode(97 + i).toUpperCase() === correct ? : null}
\r\n
\r\n \r\n : <>\r\n {review === true && String.fromCharCode(97 + i).toUpperCase() === correct ? : null}\r\n {options[\"option\"\r\n \r\n }\r\n
\r\n ))}\r\n
\r\n )\r\n}","import { IconDefinition } from '@fortawesome/fontawesome-common-types'\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ninterface ButtonTypes {\r\n text: string,\r\n fn: any | void,\r\n icon?: IconDefinition,\r\n iconClass?: string,\r\n className?: string,\r\n disabled?: boolean\r\n}\r\n\r\nexport default function Button({text, fn, icon, iconClass, className, disabled}: ButtonTypes) {\r\n return (\r\n \r\n \r\n {icon ? : ''}\r\n
{text}
\r\n
\r\n \r\n )\r\n}\r\n","import { connect } from \"react-redux\";\r\n\r\nimport Button from \"./Button\";\r\nimport { TheoryFunctionProps, TheoryProps } from \"../../types/theory\";\r\nimport { faAngleLeft, faAngleRight, faFlag, faQuestion } from \"@fortawesome/free-solid-svg-icons\";\r\nimport {\r\n nextQuestion,\r\n prevQuestion,\r\n flagQuestion,\r\n reviewAll,\r\n reviewFlagged,\r\n reviewIncomplete,\r\n reviewSummary,\r\n reviewAnswers,\r\n endTest\r\n} from \"../../actions\";\r\n\r\nfunction TestButtons(props: TheoryProps & TheoryFunctionProps & {className?: string, remaining?: number, fullScreenAvailable?: boolean}) {\r\n const { className, remaining, fullScreenAvailable, testNo, numQuestions, currentQuestion, correct, incorrect, incomplete, overview, review, ended, flagged, prevQuestion, nextQuestion, flagQuestion, reviewSummary, reviewAll, reviewAnswers, reviewFlagged, reviewIncomplete, endTest } = props;\r\n if (overview !== false) {\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n {typeof review === 'boolean'\r\n || (review === 'flagged' && (flagged[testNo].length > 1 || currentQuestion !== flagged[testNo][0]))\r\n || (review === 'incomplete' && (incomplete[testNo].length > 1 || currentQuestion !== incomplete[testNo][0])) ? \r\n
\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any, myProps: {className?: string}): TheoryProps & TheoryFunctionProps => {\r\n return {\r\n ...state,\r\n testNo: state.question.testNo,\r\n currentQuestion: state.question.currentQuestion,\r\n overview: state.question.overview,\r\n ended: state.question.ended,\r\n numQuestions: state.question.numQuestions,\r\n correct: state.question.correct,\r\n incorrect: state.question.incorrect,\r\n incomplete: state.question.incomplete,\r\n flagged: state.question.flagged,\r\n review: state.question.review,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n nextQuestion,\r\n prevQuestion,\r\n flagQuestion,\r\n reviewAll,\r\n reviewFlagged,\r\n reviewIncomplete,\r\n reviewSummary,\r\n reviewAnswers,\r\n endTest,\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TestButtons);\r\n","import { TheoryQuestions } from '../../types/theory'\r\n\r\nexport default function QuestionImage(props: {questionInfo: TheoryQuestions}) {\r\n if (props.questionInfo.dsaimageid === null) {\r\n return <>;\r\n }\r\n return (\r\n \r\n );\r\n}\r\n","export default function MarkNumAnswers(props: {mark: number}) {\r\n const numbers: {[key: number]: string} = {\r\n 1: 'one',\r\n 2: 'two',\r\n 3: 'three',\r\n 4: 'four',\r\n 5: 'five',\r\n 6: 'six'\r\n }\r\n return (\r\n
\r\n Mark {numbers[props.mark]} answer\r\n {props.mark > 1\r\n ? \"s\"\r\n : \"\"}\r\n
\r\n )\r\n}\r\n","import { connect } from \"react-redux\";\r\nimport _ from 'lodash'\r\nimport { TheoryFunctionProps, TheoryProps } from '../../types/theory';\r\nimport { goToQuestion } from \"../../actions\";\r\n\r\nfunction TestQuestionReviewButtons(props: TheoryProps & TheoryFunctionProps) {\r\n if (props.review !== true) {\r\n return null;\r\n }\r\n let keys = _.keys(props.questions[props.testNo]);\r\n return (\r\n
\r\n {keys.map((question) => (\r\n \r\n props.goToQuestion(parseInt(question) + 1)\r\n }\r\n className={`my-1 cursor-pointer font-bold border-4 ${\r\n parseInt(question) ===\r\n (props.currentQuestion - 1)\r\n ? \"border-black\"\r\n : \"border-transparent\"\r\n } ${\r\n props.ended === true\r\n ? _.includes(\r\n props.correct[props.testNo],\r\n parseInt(question) + 1\r\n )\r\n ? \"bg-green-correct\"\r\n : _.includes(\r\n props.incorrect[props.testNo],\r\n parseInt(question) + 1\r\n )\r\n ? \"bg-red-incorrect\"\r\n : \"bg-gray-100\"\r\n : \"\"\r\n } shadow text-center font-medium inline-block w-11 mr-1.5 sm:w-12 sm:mr-3.5 lg:w-10 xl:w-12 lg:mr-2.5 xl:mr-3`}\r\n >\r\n {parseInt(question) + 1}\r\n
\r\n ))}\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any): TheoryProps & TheoryFunctionProps => {\r\n return {\r\n ...state,\r\n testNo: state.question.testNo,\r\n questions: state.question.questions,\r\n currentQuestion: state.question.currentQuestion,\r\n review: state.question.review,\r\n ended: state.question.ended,\r\n correct: state.question.correct,\r\n incorrect: state.question.incorrect\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = { goToQuestion }\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TestQuestionReviewButtons);","import { TheoryQuestions } from \"../../types/theory\";\r\n\r\nexport default function QuestionCase(props: {questionInfo: TheoryQuestions}) {\r\n if(!props.questionInfo.case) {\r\n return null;\r\n }\r\n\r\n if(!props.questionInfo.case!.video) {\r\n return
{props.questionInfo.case!.situation}
;\r\n }\r\n\r\n return (\r\n <>\r\n // \r\n );\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faVolumeUp, faVolumeMute } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { FullScreen, useFullScreenHandle } from \"react-full-screen\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { useBeforeunload } from 'react-beforeunload';\r\n\r\nimport { setTestNo, setQuestions, toggleVoiceover, addAnswer, removeAnswer, endTest } from \"../../actions/\";\r\nimport { TheoryProps, TheoryFunctionProps } from '../../types/theory';\r\nimport myLDC from \"../../api/myldc\";\r\nimport FullscreenButton from \"../FullscreenButton\";\r\nimport Countdown from \"./Countdown\";\r\nimport TextToSpeech from \"./TextToSpeech\";\r\nimport TestOverview from \"./TestOverview\";\r\nimport TestResults from \"./TestResults\";\r\nimport AlertBanner from \"./AlertBanner\";\r\nimport QuestionOptions from \"./QuestionOptions\";\r\nimport TestButtons from \"./TestButtons\";\r\nimport QuestionImage from \"./QuestionImage\";\r\nimport MarkNumAnswers from \"./MarkNumAnswers\";\r\nimport TestQuestionReviewButtons from \"./TestQuestionReviewButtons\";\r\nimport QuestionCase from \"./QuestionCase\";\r\nimport Spinner from \"../Spinner\";\r\n\r\nfunction TheoryTest(props: TheoryProps & TheoryFunctionProps) {\r\n const { testNo, numQuestions, questions, currentQuestion, answers, ended, review, voiceOver, overview, addAnswer, removeAnswer, toggleVoiceover, endTest } = props;\r\n const [remaining, setRemaining] = useState(0);\r\n const handle = useFullScreenHandle();\r\n // @ts-ignore\r\n const fullScreenAvailable = document.fullscreenEnabled || document.mozFullscreenEnabled || document.webkitFullscreenEnabled || document.msFullscreenEnabled;\r\n\r\n const SaveProgress = () => {\r\n const savedData = localStorage.getItem('ldc_theory');\r\n if(savedData) {\r\n //myLDC.post('theory/hello', JSON.parse(savedData))\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n SaveProgress();\r\n }\r\n }, [remaining])\r\n\r\n useBeforeunload((event: MouseEvent) => {\r\n SaveProgress();\r\n });\r\n \r\n if (typeof(numQuestions[testNo]) === 'undefined' || numQuestions[testNo] <= 0) {\r\n myLDC.get(`theory/${testNo}`).then((response: AxiosResponse) => {\r\n props.setQuestions(response.data, testNo);\r\n })\r\n return \r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n
Theory Test {testNo}
\r\n {overview !== 'results' ?
Q
uestion
{currentQuestion} of {numQuestions[testNo]}
: null}\r\n
{ended !== true ? : null}
\r\n
\r\n
\r\n {overview !== false ? (overview === \"summary\" ? : ) :
\r\n \r\n \r\n {questions[testNo][currentQuestion - 1].format < 2 ? (\r\n <>\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n ) : \r\n }\r\n {questions[testNo][currentQuestion - 1].format >= 2 ? (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n ) : \r\n }\r\n
\r\n toggleVoiceover()}\r\n className=\"cursor-pointer float-right\"\r\n size=\"lg\"\r\n />\r\n \r\n
\r\n
}\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\ninterface PassedProps {\r\n testNo: number\r\n}\r\n\r\nconst mapStateToProps = (state: any): TheoryProps & TheoryFunctionProps => {\r\n return {\r\n ...state,\r\n currentQuestion: state.question.currentQuestion,\r\n voiceOver: state.question.voiceOver,\r\n passMark: state.question.passMark,\r\n numQuestions: state.question.numQuestions,\r\n answers: state.question.answers,\r\n correct: state.question.correct,\r\n incorrect: state.question.incorrect,\r\n review: state.question.review,\r\n overview: state.question.overview,\r\n ended: state.question.ended,\r\n questions: state.question.questions\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = { setTestNo, setQuestions, toggleVoiceover, addAnswer, removeAnswer, endTest }\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TheoryTest);","import { useEffect } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { TheoryProps, TheoryFunctionProps } from '../../types/theory';\r\nimport { setTestNo, reviewTest } from \"../../actions/\";\r\nimport TestReview from \"../TestReview\";\r\nimport TheoryTest from './TheoryTest';\r\n\r\nfunction TheoryTestOverview(props: TheoryProps & TheoryFunctionProps) {\r\n const { testNo, complete, setTestNo, reviewTest } = props;\r\n\r\n useEffect(() => {\r\n\r\n }, [])\r\n\r\n if (testNo >= 1) {\r\n return \r\n } else {\r\n return \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any): TheoryProps & TheoryFunctionProps => {\r\n return {\r\n ...state,\r\n testNo: state.question.testNo,\r\n complete: state.question.complete\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = { setTestNo, reviewTest }\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TheoryTestOverview);\r\n","import { connect } from \"react-redux\";\r\nimport { LPProps } from '../../types/learning'\r\nimport { faAngleLeft, faAngleRight, faBookOpen, faForward } from \"@fortawesome/free-solid-svg-icons\";\r\nimport Button from '../TheoryTest/Button';\r\nimport { setStudy, setSkipCorrect, nextQuestion, prevQuestion } from \"../../actions/learning\";\r\n\r\nfunction LearningButtons(props: LPProps & {className?: string, fullScreenAvailable?: boolean}) {\r\n return (\r\n
\r\n {!props.skipCorrect || props.correct.length < (props.numQuestions[props.currentSection] - 1) ?
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any, myProps: {className?: string}): LPProps => {\r\n return {\r\n ...state,\r\n numQuestions: state.learning.numQuestions,\r\n currentSection: state.learning.currentSection,\r\n correct: state.learning.correct,\r\n skipCorrect: state.learning.skipCorrect,\r\n study: state.learning.study\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = { nextQuestion, prevQuestion, setStudy, setSkipCorrect }\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LearningButtons);","import TextToSpeech from '../TheoryTest/TextToSpeech';\r\n\r\nexport default function Study(props: {explanation: string | null, visible: boolean, voiceOver: boolean}) {\r\n if (props.explanation){\r\n return (\r\n
\r\n \r\n DVSA Explanation:
\r\n {props.explanation}\r\n
\r\n )\r\n }\r\n return null;\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { connect } from \"react-redux\";\r\nimport { FullScreen, useFullScreenHandle } from \"react-full-screen\";\r\nimport { useBeforeunload } from \"react-beforeunload\";\r\nimport { faVolumeMute, faVolumeUp } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { setSection, addLPAnswer, removeLPAnswer } from \"../../actions/learning\";\r\nimport { toggleVoiceover } from \"../../actions\";\r\nimport myLDC from \"../../api/myldc\";\r\nimport QuestionImage from \"../TheoryTest/QuestionImage\";\r\nimport QuestionCase from \"../TheoryTest/QuestionCase\";\r\nimport QuestionOptions from \"../TheoryTest/QuestionOptions\";\r\nimport TextToSpeech from \"../TheoryTest/TextToSpeech\";\r\nimport MarkNumAnswers from \"../TheoryTest/MarkNumAnswers\";\r\nimport LearningButtons from \"./LearningButtons\";\r\nimport { LPProps, SectionType } from \"../../types/learning\";\r\nimport Study from \"./Study\";\r\nimport Spinner from \"../Spinner\";\r\nimport FullscreenButton from \"../FullscreenButton\";\r\n\r\nfunction LearningProgram(props: LPProps) {\r\n const {section, numQuestions, questions, answers, currentQuestion, currentSection, study, voiceOver, setSection, addLPAnswer, removeLPAnswer, toggleVoiceover} = props;\r\n const handle = useFullScreenHandle();\r\n const [sections] = useState(() => {\r\n const savedData = localStorage.getItem(`dvsa_sections`);\r\n const values = savedData ? JSON.parse(savedData) : null;\r\n return values || [];\r\n });\r\n // @ts-ignore\r\n const fullScreenAvailable = document.fullscreenEnabled || document.mozFullscreenEnabled || document.webkitFullscreenEnabled || document.msFullscreenEnabled;\r\n\r\n useBeforeunload((event: any) => {\r\n event.preventDefault();\r\n return \"Saving.....\";\r\n });\r\n\r\n if (typeof numQuestions[section] === \"undefined\" || numQuestions[section] === null) {\r\n myLDC\r\n .get(`learning/questions?section=${section}`)\r\n .then((response: AxiosResponse) => {\r\n setSection(response.data, section);\r\n });\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n
{currentSection}. {sections[currentSection - 1].name}
\r\n
\r\n Q
uestion
\r\n {currentQuestion}/{numQuestions[currentSection]}\r\n
\r\n
\r\n
\r\n
\r\n {questions[currentSection][currentQuestion - 1].format < 2 ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : }\r\n {questions[currentSection][currentQuestion - 1].format >= 2 ? (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n ) : \r\n }\r\n
\r\n toggleVoiceover()}\r\n className=\"cursor-pointer float-right\"\r\n size=\"lg\"\r\n />\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\ninterface PassedProps {\r\n section: number;\r\n}\r\n\r\nconst mapStateToProps = (state: any, ownProps: any) => {\r\n return {\r\n ...state,\r\n section: ownProps.section,\r\n currentQuestion: state.learning.currentQuestion,\r\n currentSection: state.learning.currentSection,\r\n study: state.learning.study,\r\n numQuestions: state.learning.numQuestions,\r\n voiceOver: state.learning.voiceOver,\r\n questions: state.learning.questions,\r\n answers: state.learning.answers,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setSection,\r\n addLPAnswer,\r\n removeLPAnswer,\r\n toggleVoiceover,\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(LearningProgram);\r\n","import { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { setSectionNumber } from \"../../actions/learning\";\r\nimport theory from \"../../api/myldc\";\r\nimport LearningProgram from \"./TheoryLearning\";\r\nimport { LPProps, SectionType } from \"../../types/learning\";\r\nimport Spinner from \"../Spinner\";\r\n\r\ninterface PassedProps {\r\n list: string\r\n}\r\n\r\nfunction SectionList(props: LPProps & PassedProps) {\r\n const { list, correct, incorrect, currentSection, setSectionNumber } = props;\r\n const [sections, setSections] = useState(() => {\r\n const savedData = localStorage.getItem(`${list}_sections`);\r\n const values = savedData ? JSON.parse(savedData) : null;\r\n return values || [];\r\n });\r\n\r\n if (sections.length === 0) {\r\n theory\r\n .get(`learning/list?table=${list}`)\r\n .then((response: AxiosResponse) => {\r\n localStorage.setItem(`${list}_sections`, JSON.stringify(response.data));\r\n setSections(response.data);\r\n });\r\n return ;\r\n }\r\n\r\n if (currentSection >= 1) {\r\n return ;\r\n }\r\n\r\n const sectionList = sections.map((section) => {\r\n const sectionCorrect = correct[section.section] ? correct[section.section].length : 0;\r\n const sectionIncorrect = incorrect[section.section] ? incorrect[section.section].length : 0;\r\n\r\n return (\r\n 0 ? 'hover:bg-blue-500 hover:text-white cursor-pointer' : ''}`}\r\n onClick={() => section.num_questions > 0 ? setSectionNumber(section.section) : null}\r\n >\r\n {section.name}\r\n {section.num_questions}\r\n {sectionCorrect}\r\n {sectionIncorrect}\r\n {section.num_questions - (sectionCorrect + sectionIncorrect)}\r\n \r\n );\r\n });\r\n\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {sectionList}\r\n
SectionQuestionsCorrectIncorrect
;\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n ...state,\r\n currentSection: state.learning.currentSection,\r\n correct: state.learning.correct,\r\n incorrect: state.learning.incorrect\r\n});\r\n\r\nconst mapDispatchToProps = { setSectionNumber };\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SectionList);\r\n","export default function Card(props: any) {\r\n const {children, ...rest} = props;\r\n return (\r\n
\r\n \r\n {children}\r\n \r\n
\r\n )\r\n}\r\n","import Card from \"../Card\"\r\nimport TextToSpeech from '../TheoryTest/TextToSpeech'\r\n\r\nconst Rule = (props: {children: string, image: string | null, imagefooter: string | null}) => {\r\n return (\r\n \r\n ]+>/g, '')} voiceOver={true} />\r\n \r\n {props.image ? \"This : null}\r\n {props.imagefooter ?

{props.imagefooter}

: null}\r\n
\r\n )\r\n}\r\n\r\nexport default Rule","interface ButtonProps {\r\n children: any;\r\n className?: string;\r\n [x:string]: any;\r\n}\r\n\r\nexport default function Button(props: ButtonProps) {\r\n const { children, className, ...rest } = props;\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import { useState } from 'react'\r\nimport { AxiosResponse } from \"axios\";\r\nimport myLDC from \"../../api/myldc\";\r\nimport './styles.css';\r\nimport Rule from './Rule';\r\nimport Spinner from '../Spinner';\r\nimport Button from '../Button';\r\n\r\ninterface HCSection {\r\n sec_no: number,\r\n title: string\r\n}\r\n\r\ninterface HCRules {\r\n hcno: number,\r\n hcrule: string,\r\n hctitle: string|null;\r\n imagetitle1: string|null;\r\n imagetitle2: string|null;\r\n imagefooter1: string|null;\r\n image?: string|boolean;\r\n} \r\n\r\nconst RuleList = () => {\r\n const buttonColor = \"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500 focus:ring-offset-blue-200\";\r\n const [loading, setLoading] = useState(false);\r\n const [currentSection, setCurrentSection] = useState(0);\r\n const [sections, setSections] = useState(() => {\r\n const savedData = localStorage.getItem('highway_code_sections');\r\n const values = savedData ? JSON.parse(savedData) : null;\r\n return values || [];\r\n });\r\n const [rules, setRules] = useState([]);\r\n\r\n const getSection = (section: number) => {\r\n setLoading(true);\r\n setCurrentSection(section);\r\n myLDC.get(`/hc/${section}`).then((response: AxiosResponse) => {\r\n setRules(response.data);\r\n setLoading(false);\r\n });\r\n }\r\n\r\n\r\n if(sections.length === 0) {\r\n myLDC.get(\"/hc/sections\").then((response: AxiosResponse) => {\r\n localStorage.setItem('highway_code_sections', JSON.stringify(response.data));\r\n setSections!(response.data);\r\n });\r\n return ;\r\n }\r\n\r\n if(loading === true) {\r\n return ;\r\n }\r\n\r\n if(rules.length > 0) {\r\n let navButtons = (\r\n <>\r\n {currentSection > 1 ? : null}\r\n {currentSection < sections.length ? : null}\r\n
\r\n \r\n )\r\n return <>\r\n
{navButtons}
\r\n {rules.map((rule: HCRules) => {\r\n return {rule.hcrule}\r\n })}\r\n
{navButtons}
\r\n \r\n }\r\n return (\r\n \r\n \r\n {sections.map((section: HCSection) => {\r\n return getSection(section.sec_no)}>\r\n \r\n \r\n })}\r\n \r\n
{section.title}
\r\n )\r\n}\r\n\r\nexport default RuleList","export default function Input({ className, ...rest }: {className?: string, [x: string]: any }) {\r\n return (\r\n \r\n );\r\n}\r\n","import { ChangeEvent, FormEvent, useState } from \"react\";\r\nimport { AxiosError, AxiosResponse } from \"axios\";\r\nimport Card from \"./Card\";\r\nimport Input from \"./Input\";\r\nimport Button from \"./Button\";\r\nimport myLDC from '../api/myldc';\r\n\r\nexport default function Login(props: {onSuccess?: Function}) {\r\n const [username, setUsername] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [error, setError] = useState(false);\r\n\r\n const handleSubmit = async (e: FormEvent) => {\r\n e.preventDefault();\r\n myLDC\r\n .post(\"/authenticate\", {\r\n username: username,\r\n password: password\r\n })\r\n .then((response: AxiosResponse) => {\r\n if(response.data === false || response.status !== 200){\r\n setError(true);\r\n }\r\n else{\r\n setError(false)\r\n localStorage.setItem('token', response.data);\r\n if(props.onSuccess) { props.onSuccess() }\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n console.log(error)\r\n });\r\n };\r\n\r\n return (\r\n \r\n
\r\n {error === true ?
\r\n

\r\n Login Details Incorrect\r\n

\r\n

\r\n Please check your username and password are correct and try again!\r\n

\r\n
: null}\r\n ) => setUsername(e.target.value)}\r\n placeholder=\"Email address\"\r\n />\r\n ) => setPassword(e.target.value)}\r\n placeholder=\"Password\"\r\n />\r\n \r\n Login\r\n \r\n \r\n
\r\n );\r\n}\r\n","import { useState, useEffect } from \"react\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport Spinner from \"../Spinner\";\r\nimport Login from \"../Login\";\r\nimport myLDC from \"../../api/myldc\";\r\nimport Card from \"../Card\";\r\nimport { logout } from \"../../helpers\";\r\n\r\nexport default function ListPupils() {\r\n const [isAuthenticated, setIsAuthenticated] = useState(() => {\r\n const token = localStorage.getItem('token');\r\n return token ? true : false;\r\n });\r\n const [pupils, setPupils] = useState([]);\r\n\r\n useEffect(() => {\r\n if(isAuthenticated !== true) {\r\n setPupils([])\r\n }\r\n }, [isAuthenticated]);\r\n\r\n const LogoutHelper = () => {\r\n logout();\r\n setIsAuthenticated(false);\r\n }\r\n\r\n if (pupils.length === 0 && isAuthenticated === true) {\r\n myLDC\r\n .get(\"/pupil/list\")\r\n .then((response: AxiosResponse) => {\r\n setPupils(response.data);\r\n })\r\n .catch(() => {\r\n setPupils([])\r\n setIsAuthenticated(false)\r\n });\r\n return ;\r\n }\r\n\r\n if(isAuthenticated === true) {\r\n return <>\r\n \r\n {pupils.length === 0\r\n ?
There are currently no pupils
\r\n : pupils.map((pupil: any) => (\r\n console.log(pupil.id)}>\r\n {pupil.firstname} {pupil.lastname}\r\n \r\n ))}\r\n \r\n }\r\n \r\n return setIsAuthenticated(true)} />;\r\n}\r\n","export const logout = () => {\r\n localStorage.removeItem('token')\r\n}\r\n\r\nexport const login = (token: string) => {\r\n localStorage.setItem('token', token)\r\n}","import Card from \"./Card\"\r\nimport Input from \"./Input\"\r\nimport Button from \"./Button\"\r\nimport { ChangeEvent, FormEvent, useState } from \"react\";\r\n\r\nexport default function Search({searchEvent}: {searchEvent?: Function}) {\r\n const [search, setSearch] = useState('');\r\n\r\n const submitHandler = (e: FormEvent) => {\r\n e.preventDefault()\r\n if(searchEvent) {searchEvent(search)}\r\n }\r\n\r\n return (\r\n \r\n
\r\n ) => setSearch(e.target.value)} value={search} />\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import Card from '../Card';\r\n\r\nexport interface InstructorDetails {\r\n id: number;\r\n name: string;\r\n email: string;\r\n website: string;\r\n car: string;\r\n gender: string;\r\n phone: string;\r\n mainarea: string;\r\n headerareas: string;\r\n areascovered: string;\r\n postcode_areas: string;\r\n postcodes: string;\r\n about: string | null;\r\n offers: object;\r\n lessons: object;\r\n social: object;\r\n lat: number;\r\n lng:number;\r\n manual: number;\r\n automatic: number;\r\n trainee: number;\r\n passplus: number;\r\n ecosafe: number;\r\n fleet: number;\r\n tutor: number;\r\n mentor: number;\r\n gsp: number;\r\n training: number;\r\n priceoverride:null,\r\n star_ratings: number;\r\n isactive: number;\r\n available: number;\r\n last_login: string | null;\r\n lastmodified: string | null;\r\n last_checked: string | null;\r\n last_synced: string | null;\r\n display_stats: number;\r\n distance: number;\r\n firstname: string;\r\n testimonials: boolean;\r\n}\r\n\r\nexport default function InstructorInfo({data} : {data: InstructorDetails}) {\r\n return (\r\n \r\n

Hi I'm {data.firstname}
I'm a {data.gender === 'F' ? 'female ' : null}driving instructor {data.trainee === 1 ? 'licenced' : 'approved'} by the DVSA offering driving lessons in {data.headerareas}

\r\n
\r\n )\r\n}\r\n","import { useState, useEffect } from 'react'\r\nimport Search from '../Search'\r\nimport Spinner from '../Spinner';\r\nimport myLDC from '../../api/myldc'\r\nimport { AxiosResponse } from 'axios';\r\nimport InstructorInfo, { InstructorDetails } from './InstructorInfo';\r\n\r\nexport default function ListInstructors() {\r\n const [loading, setLoading] = useState(false);\r\n const [instructors, setInstructors] = useState([]);\r\n const [search, setSearch] = useState('');\r\n \r\n useEffect(() => {\r\n if(search.length >= 1){\r\n setLoading(true);\r\n myLDC.get(`/instructors/search/${encodeURIComponent(search).toLowerCase()}`).then((response: AxiosResponse) => {\r\n setInstructors(response.data);\r\n setLoading(false);\r\n });\r\n } else {\r\n setInstructors([]);\r\n }\r\n }, [search])\r\n\r\n return (\r\n <>\r\n \r\n {loading === true\r\n ? \r\n : instructors.length === 0\r\n ?
Sorry, no instructors found{search.length > 1 ? ` for postcode ${search}` : ''}
\r\n : instructors.map((instructor: InstructorDetails) => )\r\n }\r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n Link\r\n} from \"react-router-dom\";\r\nimport { setSectionNumber } from './actions/learning';\r\nimport { setTestNo } from './actions';\r\nimport { setHPTest } from './actions/hazard';\r\nimport HazardPerceptionOverview from './components/HazardPerception/HazardPerceptionOverview';\r\nimport TheoryTestOverview from './components/TheoryTest/TheoryTestOverview';\r\nimport SectionList from './components/LearningProgram/SectionList';\r\nimport HighwayCode from './components/HighwayCode/RuleList';\r\nimport ListPupils from './components/Instructors/ListPupils';\r\nimport ListInstructors from './components/Instructors/ListInstructors';\r\n\r\nfunction App(props: any) {\r\n const {setSectionNumber, setTestNo, setHPTest } = props;\r\n return (\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

This is the home content

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any, ownProps: any) => ({\r\n ...state\r\n})\r\n\r\nconst mapDispatchToProps = {\r\n setSectionNumber,\r\n setTestNo,\r\n setHPTest\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\r\n","import _ from \"lodash\";\r\nimport {\r\n SET_QUESTIONS,\r\n NEXT_QUESTION,\r\n PREV_QUESTION,\r\n FLAG_QUESTION,\r\n TOGGLE_SOUND,\r\n GO_TO_QUESTION,\r\n REVIEW_ALL,\r\n REVIEW_FLAGGED,\r\n REVIEW_INCOMPLETE,\r\n REVIEW_SUMMARY,\r\n REVIEW_ANSWERS,\r\n REVIEW_TEST,\r\n END_TEST,\r\n ADD_ANSWER,\r\n REMOVE_ANSWER,\r\n SET_TEST_NO\r\n} from \"../actions/types\";\r\n\r\ntype stateTypes = {\r\n testNo: number;\r\n currentQuestion: number;\r\n numQuestions: number[];\r\n voiceOver: boolean;\r\n review: boolean | string;\r\n overview: boolean;\r\n ended: boolean;\r\n passMark: number;\r\n complete: any[];\r\n correct: number[][];\r\n incorrect: number[][];\r\n incomplete: number[][];\r\n answers: any[][];\r\n flagged: number[][];\r\n dvsa: any[][];\r\n section?: number;\r\n questions: any[][];\r\n};\r\n\r\nconst INITIAL_STATE = {\r\n testNo: 0,\r\n currentQuestion: 1,\r\n numQuestions: [],\r\n passMark: 43,\r\n voiceOver: false,\r\n review: false,\r\n overview: false,\r\n ended: false,\r\n complete: [],\r\n correct: [],\r\n incorrect: [],\r\n incomplete: [],\r\n answers: [],\r\n flagged: [],\r\n dvsa: [],\r\n questions: [],\r\n};\r\n\r\nconst theoryTestReducer = (\r\n state: stateTypes = INITIAL_STATE,\r\n action: { type: string; payload: any }\r\n) => {\r\n let questions = [...state.questions];\r\n let answers = [...state.answers];\r\n let flagged = [...state.flagged];\r\n let numQuestions = [...state.numQuestions];\r\n let incomplete = [...state.incomplete];\r\n let correct = [...state.correct];\r\n let incorrect = [...state.incorrect];\r\n let dvsa = [...state.dvsa];\r\n let complete = [...state.complete];\r\n switch (action.type) {\r\n case SET_TEST_NO:\r\n answers[action.payload] = [];\r\n flagged[action.payload] = [];\r\n correct[action.payload] = [];\r\n incorrect[action.payload] = [];\r\n dvsa[action.payload] = [];\r\n incomplete[action.payload] = [];\r\n complete[action.payload] = [];\r\n if (questions[action.payload]) {\r\n incomplete[action.payload] = Array.from(\r\n questions[action.payload],\r\n (value, index) => index + 1\r\n );\r\n questions[action.payload].map((question: any) => {\r\n dvsa[action.payload][question.dsacat] = {numQuestions: dvsa[action.payload][question.dsacat] ? dvsa[action.payload][question.dsacat]['numQuestions'] + 1 : 1, correct: [], incorrect: []};\r\n return null;\r\n });\r\n }\r\n return {\r\n ...state,\r\n currentQuestion: 1,\r\n testNo: action.payload,\r\n answers,\r\n flagged,\r\n correct,\r\n incorrect,\r\n dvsa,\r\n review: false,\r\n overview: false,\r\n ended: false\r\n };\r\n case SET_QUESTIONS:\r\n questions[action.payload.testNo] = action.payload.questions;\r\n numQuestions[action.payload.testNo] = action.payload.questions.length;\r\n answers[action.payload.testNo] = answers[action.payload.testNo] ? answers[action.payload.testNo] : Array.from(\r\n action.payload.questions,\r\n (value, index) => index + 1\r\n );\r\n incomplete[action.payload.testNo] = incomplete[action.payload.testNo] ? incomplete[action.payload.testNo] : Array.from(\r\n action.payload.questions,\r\n (value, index) => index + 1\r\n );\r\n flagged[action.payload.testNo] = flagged[action.payload.testNo] ? flagged[action.payload.testNo] : [];\r\n correct[action.payload.testNo] = correct[action.payload.testNo] ? correct[action.payload.testNo] : [];\r\n incorrect[action.payload.testNo] = incorrect[action.payload.testNo] ? incorrect[action.payload.testNo] : [];\r\n dvsa[action.payload.testNo] = dvsa[action.payload.testNo] ? dvsa[action.payload.testNo] : [];\r\n if(dvsa[action.payload.testNo].length === 0) {\r\n action.payload.questions.map((question: { dsacat: number; }) => {\r\n dvsa[action.payload.testNo][question.dsacat] = {numQuestions: dvsa[action.payload.testNo][question.dsacat] ? dvsa[action.payload.testNo][question.dsacat]['numQuestions'] + 1 : 1, correct: [], incorrect: []};\r\n return null;\r\n });\r\n }\r\n \r\n return {\r\n ...state,\r\n testNo: action.payload.testNo,\r\n questions,\r\n answers,\r\n numQuestions,\r\n flagged,\r\n incomplete,\r\n correct,\r\n incorrect,\r\n dvsa\r\n };\r\n case NEXT_QUESTION:\r\n if (state.review === \"flagged\") {\r\n let flaggedIndex = _.indexOf(\r\n state.flagged[state.testNo],\r\n state.currentQuestion\r\n );\r\n if (flaggedIndex < 0) {\r\n flaggedIndex = _.findIndex(\r\n state.flagged[state.testNo],\r\n (flagged) => flagged <= state.currentQuestion\r\n );\r\n }\r\n return flaggedIndex < state.flagged[state.testNo].length - 1\r\n ? {\r\n ...state,\r\n currentQuestion:\r\n state.flagged[state.testNo][flaggedIndex + 1],\r\n }\r\n : {\r\n ...state,\r\n currentQuestion: state.flagged[state.testNo][0],\r\n };\r\n }\r\n if (state.review === \"incomplete\") {\r\n let incompleteIndex = _.indexOf(\r\n state.incomplete[state.testNo],\r\n state.currentQuestion\r\n );\r\n if (incompleteIndex < 0) {\r\n incompleteIndex = _.findIndex(\r\n state.incomplete[state.testNo],\r\n (incomplete) => incomplete <= state.currentQuestion\r\n );\r\n }\r\n return incompleteIndex <\r\n state.incomplete[state.testNo].length - 1\r\n ? {\r\n ...state,\r\n currentQuestion:\r\n state.incomplete[state.testNo][\r\n incompleteIndex + 1\r\n ],\r\n }\r\n : {\r\n ...state,\r\n currentQuestion: state.incomplete[state.testNo][0],\r\n };\r\n }\r\n return state.currentQuestion < state.numQuestions[state.testNo]\r\n ? { ...state, currentQuestion: state.currentQuestion + 1 }\r\n : { ...state, currentQuestion: 1 };\r\n case PREV_QUESTION:\r\n if (state.review === \"flagged\") {\r\n let flaggedIndex = _.indexOf(\r\n state.flagged[state.testNo],\r\n state.currentQuestion\r\n );\r\n if (flaggedIndex < 0) {\r\n flaggedIndex = _.findIndex(\r\n state.flagged[state.testNo],\r\n (flagged) => flagged >= state.currentQuestion\r\n );\r\n }\r\n return flaggedIndex > 0\r\n ? {\r\n ...state,\r\n currentQuestion:\r\n state.flagged[state.testNo][flaggedIndex - 1],\r\n }\r\n : {\r\n ...state,\r\n currentQuestion:\r\n state.flagged[state.testNo][\r\n state.flagged.length - 1\r\n ],\r\n };\r\n }\r\n if (state.review === \"incomplete\") {\r\n let incompleteIndex = _.indexOf(\r\n state.incomplete[state.testNo],\r\n state.currentQuestion\r\n );\r\n if (incompleteIndex < 0) {\r\n incompleteIndex = _.findIndex(\r\n state.incomplete[state.testNo],\r\n (incomplete) => incomplete <= state.currentQuestion\r\n );\r\n }\r\n return incompleteIndex > 0\r\n ? {\r\n ...state,\r\n currentQuestion:\r\n state.incomplete[state.testNo][\r\n incompleteIndex - 1\r\n ],\r\n }\r\n : {\r\n ...state,\r\n currentQuestion:\r\n state.incomplete[state.testNo][\r\n state.incomplete.length - 1\r\n ],\r\n };\r\n }\r\n return state.currentQuestion > 1\r\n ? { ...state, currentQuestion: state.currentQuestion - 1 }\r\n : { ...state, currentQuestion: state.numQuestions[state.testNo] };\r\n case GO_TO_QUESTION:\r\n return { ...state, currentQuestion: action.payload };\r\n case FLAG_QUESTION:\r\n let currentFlagged = [...state.flagged];\r\n currentFlagged[state.testNo] = currentFlagged[\r\n state.testNo\r\n ].includes(state.currentQuestion)\r\n ? _.pull(state.flagged[state.testNo], state.currentQuestion)\r\n : _.concat(state.flagged[state.testNo], state.currentQuestion);\r\n state.flagged[state.testNo] = _.uniq(state.flagged[state.testNo]);\r\n return {\r\n ...state,\r\n flagged: currentFlagged,\r\n review: currentFlagged[state.testNo].length >= 1 ? state.review : false,\r\n };\r\n case TOGGLE_SOUND:\r\n return { ...state, voiceOver: !state.voiceOver };\r\n case ADD_ANSWER:\r\n answers[state.testNo][state.currentQuestion - 1] =\r\n action.payload.answer;\r\n if (!Array.isArray(state.dvsa[action.payload.dvsa])) {\r\n dvsa[action.payload.dvsa] = [];\r\n }\r\n if (\r\n action.payload.correct ===\r\n answers[state.testNo][state.currentQuestion - 1]\r\n ) {\r\n correct[state.testNo].push(state.currentQuestion);\r\n dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['correct'].push(state.currentQuestion);\r\n _.pull(incorrect[state.testNo], state.currentQuestion);\r\n _.pull(dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['incorrect'], state.currentQuestion);\r\n } else {\r\n incorrect[state.testNo].push(state.currentQuestion);\r\n dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['incorrect'].push(state.currentQuestion);\r\n _.pull(correct[state.testNo], state.currentQuestion);\r\n _.pull(dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['correct'], state.currentQuestion);\r\n }\r\n _.pull(incomplete[state.testNo], state.currentQuestion);\r\n correct[state.testNo] = _.uniq(correct[state.testNo]);\r\n incorrect[state.testNo] = _.uniq(incorrect[state.testNo]);\r\n dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['correct'] = _.uniq(dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['correct']);\r\n dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['incorrect'] = _.uniq(dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['incorrect']);\r\n return {\r\n ...state,\r\n answers,\r\n correct,\r\n incorrect,\r\n incomplete,\r\n dvsa\r\n };\r\n case REMOVE_ANSWER:\r\n answers[state.testNo][state.currentQuestion - 1] =\r\n answers[state.testNo][state.currentQuestion - 1].replace(\r\n action.payload.answer,\r\n \"\"\r\n );\r\n _.pull(incorrect[state.testNo], state.currentQuestion);\r\n _.pull(correct[state.testNo], state.currentQuestion);\r\n _.pull(dvsa[action.payload.dvsa], state.currentQuestion);\r\n _.pull(dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['correct'], state.currentQuestion);\r\n _.pull(dvsa[state.testNo][state.questions[state.testNo][state.currentQuestion - 1].dsacat]['incorrect'], state.currentQuestion);\r\n return {\r\n ...state,\r\n answers,\r\n correct,\r\n incorrect,\r\n incomplete,\r\n dvsa\r\n };\r\n case REVIEW_SUMMARY:\r\n return { ...state, overview: \"summary\", review: false };\r\n case REVIEW_ALL:\r\n return {\r\n ...state,\r\n overview: false,\r\n currentQuestion: 1,\r\n review: false,\r\n };\r\n case REVIEW_FLAGGED:\r\n return {\r\n ...state,\r\n overview: false,\r\n currentQuestion: state.flagged[state.testNo][0],\r\n review: \"flagged\",\r\n };\r\n case REVIEW_INCOMPLETE:\r\n return {\r\n ...state,\r\n overview: false,\r\n review: \"incomplete\",\r\n currentQuestion: state.incomplete[state.testNo][0],\r\n };\r\n case REVIEW_ANSWERS:\r\n return { ...state, overview: false, currentQuestion: 1 };\r\n case REVIEW_TEST:\r\n return { ...state, testNo: action.payload, overview: \"results\", review: true, ended: true }\r\n case END_TEST:\r\n if(action.payload) {\r\n complete[state.testNo] = {\r\n taken: action.payload,\r\n date: new Date().toLocaleDateString('en-GB'),\r\n totalScore: state.correct[state.testNo].length,\r\n status: state.correct[state.testNo].length >= state.passMark ? 1 : 0\r\n }\r\n }\r\n return { ...state, overview: \"results\", review: true, ended: true, complete };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default theoryTestReducer;\r\n","import {\r\n ADD_CLICK_TIME,\r\n NEXT_VIDEO,\r\n PREV_VIDEO,\r\n SET_VIDEOS,\r\n EXIT_HP_TEST,\r\n PLAY_VIDEO,\r\n PAUSE_VIDEO,\r\n PLAY_PAUSE_VIDEO,\r\n PLAYBACK_RATE,\r\n GO_TO_VIDEO,\r\n SET_DURATION,\r\n SET_ERROR,\r\n SCORE_PAUSE,\r\n SEEK_CHANGE,\r\n SET_PLAYED,\r\n SEEK_START,\r\n SEEK_END,\r\n BUFFERING,\r\n VIDEO_READY,\r\n VIDEO_ENDED,\r\n RESET_TEST,\r\n SET_HP_TEST,\r\n REVIEW_HP_TEST\r\n} from \"../actions/types\";\r\nimport _ from \"lodash\";\r\nimport { RootStateOrAny } from \"react-redux\";\r\n\r\nconst INITIAL_STATE = {\r\n testNo: 0,\r\n currentVideo: 1,\r\n numVideos: [],\r\n videos: [],\r\n videoClicks: [],\r\n videoStatus: {\r\n url: \"\",\r\n playing: false,\r\n muted: false,\r\n played: 0,\r\n loaded: 0,\r\n duration: 0,\r\n playbackRate: 1.0,\r\n seeking: false,\r\n player: false,\r\n scoreWindow: 0,\r\n windowPause: false,\r\n error: false\r\n },\r\n tamper: [],\r\n scores: [],\r\n complete: [],\r\n passMark: 44,\r\n review: false,\r\n ended: false,\r\n maxClicks: 15\r\n};\r\n\r\nconst clickScore = (seconds: number, max: number, min: number) => {\r\n if (seconds >= max && seconds < min) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nconst hazardPerceptionReducer = (\r\n state: RootStateOrAny = INITIAL_STATE,\r\n action: { type: string; payload: any }\r\n) => {\r\n let videos = [...state.videos];\r\n let numVideos = [...state.numVideos];\r\n let videoClicks = [...state.videoClicks]\r\n let scores = [...state.scores];\r\n let tamper = [...state.tamper];\r\n let complete = [...state.complete];\r\n switch (action.type) {\r\n case SET_HP_TEST:\r\n videoClicks[action.payload] = [];\r\n tamper[action.payload] = [];\r\n scores[action.payload] = [];\r\n complete[action.payload] = null;\r\n return {\r\n ...state,\r\n testNo: action.payload,\r\n currentVideo: 1,\r\n review: false,\r\n ended: false,\r\n videoClicks,\r\n scores,\r\n tamper,\r\n complete\r\n };\r\n case SET_VIDEOS:\r\n videos[action.payload.testId] = action.payload.videos;\r\n numVideos[action.payload.testId] = action.payload.videos.length;\r\n scores[action.payload.testId] = [];\r\n tamper[action.payload.testId] = [];\r\n return {\r\n ...state,\r\n testNo: action.payload.testId,\r\n videos,\r\n numVideos,\r\n scores,\r\n tamper\r\n };\r\n case PLAY_PAUSE_VIDEO:\r\n return {\r\n ...state,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n playing: !state.videoStatus.playing\r\n }\r\n };\r\n case PLAY_VIDEO:\r\n return {\r\n ...state,\r\n videoStatus: { ...state.videoStatus, playing: true }\r\n };\r\n case PAUSE_VIDEO:\r\n return {\r\n ...state,\r\n videoStatus: { ...state.videoStatus, playing: false }\r\n };\r\n case PLAYBACK_RATE:\r\n return {\r\n ...state,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n playbackRate: action.payload\r\n }\r\n };\r\n case SET_DURATION:\r\n return {\r\n ...state,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n playing: false,\r\n duration: action.payload,\r\n error: false\r\n }\r\n };\r\n case SET_ERROR:\r\n return {\r\n ...state,\r\n videoStatus: {\r\n error: true\r\n }\r\n }\r\n case SCORE_PAUSE:\r\n return {\r\n ...state,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n windowPause: !state.videoStatus.windowPause\r\n }\r\n };\r\n case VIDEO_READY:\r\n return {\r\n ...state,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n loaded: 1\r\n }\r\n };\r\n case SET_PLAYED:\r\n let timePlayed = state.videoStatus.duration * action.payload;\r\n let currentScore = 0;\r\n let isPlaying = state.videoStatus.playing;\r\n let scoreWindows = state.videos[state.testNo];\r\n if (\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].five &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].four) ||\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].ten &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].nine)\r\n ) {\r\n currentScore = 5;\r\n } else if (\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].four &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].three) ||\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].nine &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].eight)\r\n ) {\r\n currentScore = 4;\r\n } else if (\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].three &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].two) ||\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].eight &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].seven)\r\n ) {\r\n currentScore = 3;\r\n } else if (\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].two &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].one) ||\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].seven &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].six)\r\n ) {\r\n currentScore = 2;\r\n } else if (\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].one &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].endseq) ||\r\n (timePlayed >= scoreWindows[state.currentVideo - 1].six &&\r\n timePlayed < scoreWindows[state.currentVideo - 1].endseq2)\r\n ) {\r\n currentScore = 1;\r\n } else {\r\n currentScore = 0;\r\n }\r\n isPlaying =\r\n state.videoStatus.windowPause &&\r\n state.videoStatus.scoreWindow !== currentScore\r\n ? false\r\n : state.videoStatus.playing;\r\n return {\r\n ...state,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n played: action.payload,\r\n scoreWindow: currentScore,\r\n playing: isPlaying\r\n }\r\n };\r\n case SEEK_START:\r\n return {\r\n ...state,\r\n videoStatus: { ...state.videoStatus, seeking: true }\r\n };\r\n case SEEK_END:\r\n return {\r\n ...state,\r\n videoStatus: { ...state.videoStatus, seeking: false }\r\n };\r\n case SEEK_CHANGE:\r\n return {\r\n ...state,\r\n videoStatus: { ...state.videoStatus, played: action.payload }\r\n };\r\n case BUFFERING:\r\n return {\r\n ...state,\r\n currentVideo:\r\n state.videoStatus.played >= 0.96\r\n ? state.currentVideo === state.numVideos[state.testNo]\r\n ? 1\r\n : state.currentVideo + 1\r\n : state.currentVideo,\r\n videoStatus:\r\n state.videoStatus.played >= 0.96\r\n ? {\r\n ...state.videoStatus,\r\n played: 0,\r\n playing: false\r\n }\r\n : { ...state.videoStatus }\r\n };\r\n case VIDEO_ENDED:\r\n return state.currentVideo === state.numVideos[state.testNo]\r\n ? {\r\n ...state,\r\n ended: true,\r\n review: true,\r\n currentVideo: 1,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n played: 0,\r\n loaded: 0,\r\n playing: false\r\n }\r\n }\r\n : {\r\n ...state,\r\n currentVideo: state.currentVideo + 1,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n played: 0,\r\n loaded: 0,\r\n playing: false\r\n }\r\n };\r\n case NEXT_VIDEO:\r\n return state.currentVideo === state.numVideos[state.testNo]\r\n ? { ...state, ended: true, review: true }\r\n : { ...state, currentVideo: state.currentVideo + 1 };\r\n case PREV_VIDEO:\r\n return state.currentVideo > 1\r\n ? {\r\n ...state,\r\n currentVideo: state.currentVideo - 1,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n played: 0,\r\n loaded: 0,\r\n playing: false\r\n }\r\n }\r\n : {\r\n ...state,\r\n currentVideo: state.numVideos[state.testNo],\r\n videoStatus: {\r\n ...state.videoStatus,\r\n played: 0,\r\n loaded: 0,\r\n playing: false\r\n }\r\n };\r\n case GO_TO_VIDEO:\r\n return {\r\n ...state,\r\n currentVideo: action.payload,\r\n review: false,\r\n videoStatus: {\r\n ...state.videoStatus,\r\n played: 0,\r\n loaded: 0,\r\n playing: false\r\n }\r\n };\r\n case ADD_CLICK_TIME:\r\n if (\r\n state.ended === false &&\r\n state.videoStatus.playing === true &&\r\n state.videoStatus.played > 0.001\r\n ) {\r\n let videoClicks: any[] = [...state.videoClicks];\r\n let currentVid: number = state.currentVideo;\r\n let videoStatus = state.videoStatus;\r\n scores[state.testNo] =\r\n typeof scores[state.testNo] !== \"undefined\" &&\r\n scores[state.testNo] !== null\r\n ? scores[state.testNo]\r\n : [];\r\n tamper[state.testNo] =\r\n typeof tamper[state.testNo] !== \"undefined\" &&\r\n tamper[state.testNo] !== null\r\n ? tamper[state.testNo]\r\n : [];\r\n videoClicks[state.testNo] =\r\n typeof videoClicks[state.testNo] !== \"undefined\" &&\r\n videoClicks[state.testNo] !== null\r\n ? videoClicks[state.testNo]\r\n : [];\r\n videoClicks[state.testNo][state.currentVideo - 1] = _.uniq(\r\n _.concat(\r\n _.without(\r\n typeof state.videoClicks[state.testNo] !==\r\n \"undefined\" &&\r\n state.videoClicks[state.testNo] !== null\r\n ? state.videoClicks[state.testNo][\r\n state.currentVideo - 1\r\n ]\r\n : [],\r\n null\r\n ),\r\n [action.payload.toFixed(2)]\r\n )\r\n );\r\n const rapidClicking = videoClicks[state.testNo][state.currentVideo - 1].filter(\r\n (second: number, index: number) =>\r\n videoClicks[state.testNo][state.currentVideo - 1][\r\n index + 4\r\n ] -\r\n second <= 1\r\n );\r\n const clickDifferences = _.map(\r\n videoClicks[state.testNo][state.currentVideo - 1],\r\n (e, i) =>\r\n videoClicks[state.testNo][state.currentVideo - 1][\r\n i + 1\r\n ] - e\r\n );\r\n const repetitiveClicking = clickDifferences\r\n .slice(1)\r\n .map((n, i) => n - clickDifferences[i]);\r\n if (\r\n rapidClicking.length >= 1 ||\r\n videoClicks[state.testNo][state.currentVideo - 1].length >=\r\n state.maxClicks ||\r\n repetitiveClicking.filter(\r\n (num) => num > -0.12 && num < 0.12\r\n ).length >= 2\r\n ) {\r\n tamper[state.testNo][state.currentVideo - 1] =\r\n rapidClicking.length >= 1\r\n ? \"Rapid clicking\"\r\n : videoClicks[state.testNo][state.currentVideo - 1]\r\n .length >= state.maxClicks\r\n ? \"Too many clicks\"\r\n : \"Click pattern\";\r\n scores[state.testNo][state.currentVideo - 1] = 0;\r\n if (\r\n state.videos[state.testNo][state.currentVideo - 1]\r\n .nohazards > 1\r\n ) {\r\n scores[state.testNo][\r\n state.videos[state.testNo].length + 1\r\n ] = 0;\r\n }\r\n videoStatus = {\r\n ...videoStatus,\r\n played: 0,\r\n loaded: 0,\r\n playing: false\r\n };\r\n currentVid =\r\n state.currentVideo < state.numVideos[state.testNo]\r\n ? state.currentVideo + 1\r\n : 1;\r\n }\r\n if (\r\n !tamper[state.testNo][state.currentVideo - 1] &&\r\n !scores[state.testNo][state.currentVideo - 1]\r\n ) {\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"five\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"four\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][state.currentVideo - 1] = 5;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"four\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"three\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][state.currentVideo - 1] = 4;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"three\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"two\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][state.currentVideo - 1] = 3;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"two\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"one\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][state.currentVideo - 1] = 2;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"one\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"endseq\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][state.currentVideo - 1] = 1;\r\n }\r\n }\r\n if (\r\n !tamper[state.testNo][state.currentVideo - 1] &&\r\n !scores[state.testNo][state.videos[state.testNo].length + 1]\r\n ) {\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"ten\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"nine\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][\r\n state.videos[state.testNo].length + 1\r\n ] = 5;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"nine\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"eight\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][\r\n state.videos[state.testNo].length + 1\r\n ] = 4;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"eight\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"seven\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][\r\n state.videos[state.testNo].length + 1\r\n ] = 3;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"seven\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"six\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][\r\n state.videos[state.testNo].length + 1\r\n ] = 2;\r\n }\r\n if (\r\n clickScore(\r\n action.payload,\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"six\"\r\n ],\r\n state.videos[state.testNo][state.currentVideo - 1][\r\n \"endseq2\"\r\n ]\r\n )\r\n ) {\r\n scores[state.testNo][\r\n state.videos[state.testNo].length + 1\r\n ] = 1;\r\n }\r\n }\r\n return {\r\n ...state,\r\n videoClicks,\r\n scores,\r\n tamper,\r\n currentVideo: currentVid,\r\n videoStatus\r\n };\r\n }\r\n return { ...state };\r\n case EXIT_HP_TEST:\r\n const totalScore = state.scores[state.testNo].length\r\n ? state.scores[state.testNo].reduce(\r\n (a: number, b: number) => a + b\r\n )\r\n : 0;\r\n complete[state.testNo] = {\r\n totalScore: totalScore,\r\n status: totalScore >= state.passMark ? 1 : 0\r\n };\r\n return {\r\n ...state,\r\n ended: true,\r\n review: true,\r\n complete\r\n };\r\n case REVIEW_HP_TEST:\r\n return {\r\n ...state,\r\n testNo: action.payload,\r\n ended: true,\r\n review: true\r\n };\r\n case RESET_TEST:\r\n videoClicks[state.testNo] = [];\r\n tamper[state.testNo] = [];\r\n scores[state.testNo] = [];\r\n complete[state.testNo] = null;\r\n return {\r\n ...state,\r\n videoClicks,\r\n tamper,\r\n scores,\r\n complete\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default hazardPerceptionReducer;\r\n","import _ from \"lodash\";\r\nimport {\r\n NEXT_LP_QUESTION,\r\n PREV_LP_QUESTION,\r\n TOGGLE_SOUND,\r\n ADD_LP_ANSWER,\r\n REMOVE_LP_ANSWER,\r\n SET_SECTION,\r\n SET_SECTION_NUMBER,\r\n SET_STUDY,\r\n SKIP_CORRECT\r\n} from \"../actions/types\";\r\nimport { learningProgramTypes } from \"../types/learning\";\r\n\r\nconst LP_INITIAL_STATE = {\r\n currentQuestion: 1,\r\n currentSection: 0,\r\n numQuestions: [],\r\n voiceOver: false,\r\n skipCorrect: false,\r\n study: false,\r\n correct: [],\r\n incorrect: [],\r\n answers: [],\r\n questions: []\r\n};\r\n\r\nconst LearningProgramReducer = (\r\n state: learningProgramTypes = LP_INITIAL_STATE,\r\n action: { type: string; payload: any }\r\n) => {\r\n switch (action.type) {\r\n case SET_SECTION:\r\n let questions = state.questions;\r\n let numQuestions = state.numQuestions;\r\n questions[action.payload.id] = action.payload.section;\r\n numQuestions[action.payload.id] = action.payload.section.length;\r\n return {\r\n ...state,\r\n currentSection: action.payload.id,\r\n questions,\r\n currentQuestion: 1,\r\n numQuestions\r\n };\r\n case SET_SECTION_NUMBER:\r\n return {\r\n ...state,\r\n currentSection: action.payload,\r\n currentQuestion: 1\r\n };\r\n case NEXT_LP_QUESTION:\r\n if (state.skipCorrect) {\r\n let incomplete = _.pullAll(\r\n Array.from(\r\n state.questions[state.currentSection],\r\n (value, index) => index + 1\r\n ),\r\n state.correct[state.currentSection]\r\n );\r\n let incompleteIndex = _.indexOf(\r\n incomplete,\r\n state.currentQuestion\r\n );\r\n if (incompleteIndex < 0) {\r\n incompleteIndex = _.findIndex(\r\n incomplete,\r\n (question) => question <= state.currentQuestion\r\n );\r\n }\r\n return incompleteIndex < incomplete.length - 1\r\n ? {\r\n ...state,\r\n currentQuestion: incomplete[incompleteIndex + 1]\r\n }\r\n : { ...state, currentQuestion: incomplete[0] };\r\n }\r\n return state.currentQuestion <\r\n state.numQuestions[state.currentSection]\r\n ? { ...state, currentQuestion: state.currentQuestion + 1 }\r\n : { ...state, currentQuestion: 1 };\r\n case PREV_LP_QUESTION:\r\n if (state.skipCorrect) {\r\n let incomplete = _.pullAll(\r\n Array.from(\r\n state.questions[state.currentSection],\r\n (value, index) => index + 1\r\n ),\r\n state.correct[state.currentSection]\r\n );\r\n let incompleteIndex = _.indexOf(\r\n incomplete,\r\n state.currentQuestion\r\n );\r\n if (incompleteIndex < 0) {\r\n incompleteIndex = _.findIndex(\r\n incomplete,\r\n (question) => question >= state.currentQuestion\r\n );\r\n }\r\n return incompleteIndex > 0\r\n ? {\r\n ...state,\r\n currentQuestion: incomplete[incompleteIndex - 1]\r\n }\r\n : {\r\n ...state,\r\n currentQuestion: incomplete[incomplete.length - 1]\r\n };\r\n }\r\n return state.currentQuestion > 1\r\n ? { ...state, currentQuestion: state.currentQuestion - 1 }\r\n : {\r\n ...state,\r\n currentQuestion: state.numQuestions[state.currentSection]\r\n };\r\n case SET_STUDY:\r\n return { ...state, study: !state.study };\r\n case SKIP_CORRECT:\r\n return { ...state, skipCorrect: !state.skipCorrect };\r\n case TOGGLE_SOUND:\r\n return { ...state, voiceOver: !state.voiceOver };\r\n case ADD_LP_ANSWER:\r\n let answers = [...state.answers];\r\n let correct = [...state.correct];\r\n let incorrect = [...state.incorrect];\r\n if (!Array.isArray(answers[state.currentSection])) {\r\n answers[state.currentSection] = [];\r\n }\r\n if (!Array.isArray(correct[state.currentSection])) {\r\n correct[state.currentSection] = [];\r\n }\r\n if (!Array.isArray(incorrect[state.currentSection])) {\r\n incorrect[state.currentSection] = [];\r\n }\r\n answers[state.currentSection][state.currentQuestion - 1] =\r\n action.payload.answer;\r\n if (\r\n action.payload.correct ===\r\n answers[state.currentSection][state.currentQuestion - 1]\r\n ) {\r\n correct[state.currentSection].push(state.currentQuestion);\r\n correct[state.currentSection] = _.uniq(\r\n correct[state.currentSection]\r\n );\r\n _.pull(incorrect[state.currentSection], state.currentQuestion);\r\n } else {\r\n incorrect[state.currentSection].push(state.currentQuestion);\r\n incorrect[state.currentSection] = _.uniq(\r\n incorrect[state.currentSection]\r\n );\r\n _.pull(correct[state.currentSection], state.currentQuestion);\r\n }\r\n return {\r\n ...state,\r\n answers,\r\n correct,\r\n incorrect\r\n };\r\n case REMOVE_LP_ANSWER:\r\n let currentAnswers = [...state.answers];\r\n let currentCorrect = [...state.correct];\r\n let currentIncorrect = [...state.incorrect];\r\n\r\n currentAnswers[state.currentSection][state.currentQuestion - 1] =\r\n action.payload;\r\n _.pull(\r\n currentIncorrect[state.currentSection],\r\n state.currentQuestion\r\n );\r\n _.pull(currentCorrect[state.currentSection], state.currentQuestion);\r\n return {\r\n ...state,\r\n answers: currentAnswers,\r\n correct: currentCorrect,\r\n incorrect: currentIncorrect\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default LearningProgramReducer;\r\n","import { combineReducers } from 'redux'\r\nimport theoryTestReducer from './theoryTestReducer'\r\nimport hazardPerceptionReducer from './hazardPerceptionReducer';\r\nimport LearningProgramReducer from './learningProgramReducer';\r\n\r\nexport default combineReducers({\r\n question: theoryTestReducer,\r\n learning: LearningProgramReducer,\r\n hazard: hazardPerceptionReducer\r\n})","import \"core-js/stable\";\r\n\r\nimport { Provider } from \"react-redux\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport \"./index.css\";\r\nimport App from \"./App\";\r\nimport reducers from \"./reducers\";\r\nimport { createStore, applyMiddleware, compose } from \"redux\";\r\ndeclare global {\r\n interface Window {\r\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;\r\n }\r\n}\r\n\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\nconst localStorageName = 'ldc_theory';\r\nconst localStorageInfo = localStorage.getItem(localStorageName);\r\nconst persistedState = localStorageInfo ? JSON.parse(localStorageInfo) : {}\r\nconst store = createStore(reducers, persistedState, composeEnhancers(applyMiddleware()));\r\n\r\n\r\n// import { createStore } from \"redux\";\r\n\r\n// const localStorageName = 'ldc_theory';\r\n// const localStorageInfo = localStorage.getItem(localStorageName);\r\n// const persistedState = localStorageInfo ? JSON.parse(localStorageInfo) : {}\r\n// const store = createStore(reducers, persistedState);\r\n\r\nstore.subscribe(()=>{\r\n localStorage.setItem(localStorageName, JSON.stringify(store.getState()))\r\n})\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n"],"sourceRoot":""}