{"version":3,"sources":["Constants.js","services/service.js","services/local-service.js","services/auth-service.js","services/common-service.js","services/helper.js","components/assessment/common/task-utility.js","redux/actions/data-action.js","redux/reducers/data-reducer.js","redux/reducers/index.js","routes/history.js","redux/configure.js","assets/static-images.js","components/screens/common/screen-container.js","components/common/navigation-arrow.js","components/screens/common/screen-navigation.js","components/demographics/common/controls/demo-question-text.js","logo.png","components/screens/login-screen.js","components/screens/home-screen.js","components/screens/demographic-screen.js","routes/introduction-routes.js","components/screens/main-screen.js","components/assessment/common/assessment-container.js","components/assessment/common/assessment-header.js","components/assessment/common/assessment-body.js","components/assessment/common/assessment-navigation.js","components/assessment/common/assessment-question.js","components/assessment/common/assessment-response.js","components/assessment/common/onscreen-keyboard.js","assets/instruction-videos.js","components/assessment/instructions/instruction-video.js","assets/instruction-images.js","components/assessment/instructions/instruction-comic-strip.js","components/assessment/assessment-instruction.js","components/assessment/assessment-start.js","components/common/common-hoc.js","components/assessment/tasks/tasks.js","components/assessment/practice-tasks/practice-task-verbal.js","components/assessment/practice-tasks/practice-task-non-verbal.js","components/assessment/practice-tasks/practice-task-quantitative.js","components/assessment/tasks/task-verbal.js","components/assessment/tasks/task-non-verbal.js","components/assessment/tasks/task-quantitative.js","components/assessment/assessment-tasks.js","components/assessment/practice-tasks/index.js","components/assessment/tasks/index.js","components/assessment/assessment-end.js","components/assessment/assessment-complete.js","routes/assessment-routes.js","routes/session-required-route.js","routes/index.js","App.js","serviceWorker.js","index.js"],"names":["config","window","globalConfig","assessmentStatus","specialMessages","localDataExpiry","instance","axios","create","baseURL","url","BASE_URL","axiosConfig","headers","get","apiUrl","params","successFunc","errorFunc","finallFunc","raw","then","post","APIURL_AUTH","API_URL","userLogin","isLocal","APIURL_GET_DATA","APIURL_UPDATE_DATA","APIURL_SAVE_DATA","APIURL_LOG","getData","versionId","dataPath","includes","getDataPath","queryString","Object","keys","map","key","join","buildQueryString","productId","filterByTask","updateData","saveData","taskType","id","type","subTaskType","taskSegment","terminationType","gridTemplates","testSize","respSize","width","height","testOffset","right","top","getTestByVersion","tests","Verbal","NonVerbal","Quant","find","test","getTestTimeLimit","grade","g","toString","getTasks","tasks","subType","values","task","UPDATE_VALUE","SET_USER_DATA","CLEAR_USER_DATA","GET_DATA","SET_TASK_RESPONSE","SET_RESP_AT_25MIN","SET_RESP_AT_30MIN","SET_RESP_AT_35MIN","SET_DEMOGRAPHICS_RESPONSE","SET_DATE_TIME_START","SET_SCREEN_DURATION","SET_TERMINATION","SET_ASSESSMENT_STATUS","REQUEST_START","REQUEST_SAVED","REQUEST_ERROR","REQUEST_END","updateValue","obj","setUserData","userData","clearUserData","processGetAllData","data","setDemographicsResponse","name","value","child","setTaskResponse","response","index","setRespAt25min","setRespAt30min","setRespAt35min","setDateTimeStart","setScreenDuration","duration","setTermination","terminationReason","setAssessmentStatus","requestStart","requestSaved","requestError","error","requestEnd","login","successHandler","errorHandler","dispatch","getState","filterTests","filteredTests","filter","sortOrder","isCompleted","sort","a","b","length","fullName","participant","success","resumeData","JSON","parse","localStorage","getItem","resume","resumeUser","resumeTest","currentTest","username","getAllData","logToSentry","resumeSession","save","testData","returnFunc","participantData","Username","testName","saveParams","require","operatingSystem","osName","osVersion","browser","browserName","browserVersion","device","isMobile","mobileModel","resumeURL","timeRemaining","testToUpdate","timeLimit","parseFloat","taskScreens","screens","item","totalItemTimeNoPracticeNoInstruction","screen","reduce","totalAssessmentTime","timePerScreen","totalSessionTime","Date","getTime","dateTimeStart","verboseSentryLogging","filename","res","message","logToRAP","err","logLocal","level","msg","exception","tags","attachment","Sentry","scope","clear","setLevel","setUser","assessmentId","versionID","setTags","addAttachment","dataInitialState","terms","termsDecline","consent","consentDecline","terminated","sessionID","outcomes","requestInitialState","isProcessing","saved","hasError","action","uuidv1","inviteId","isLoggedIn","assign","isNaN","Array","from","respArray","respAt25min","respAt30min","respAt35min","demographics","status","dateTimeSubmitted","dataRequest","request","rootReducer","history","combineReducers","dataReducers","router","connectRouter","propTypes","PropTypes","object","createBrowserHistory","basename","process","persistConfig","storage","blacklist","configureStore","preloadedState","middlewares","thunkMiddleware","routerMiddleware","reduxLogger","push","createLogger","middlewareEnhancer","applyMiddleware","persistedReducer","persistReducer","enhancers","composedEnhancers","compose","store","createStore","persistor","persistStore","urlPath","CDN_URL","staticImages","itemArrowLeft","itemArrowLeftSelected","itemArrowRight","itemArrowRightSelected","beginArrowLeft","beginArrowLeftSelected","beginArrowRight","beginArrowRightSelected","endArrowLeft","endArrowLeftSelected","endArrowRight","endArrowRightSelected","playButton","stopHand","checkMark","pause","ScreenContainer","className","children","NavigationArrow","props","state","selected","arrows","back","default","next","begin_back","begin_next","end_back","end_next","this","onClick","onMouseEnter","setState","onMouseLeave","src","alt","Component","ScreenNavigation","to","isVisible","DemoQuestiontext","label","required","requiredError","placeholder","onChange","validationMessage","undefined","inputProps","helperText","FormLabel","component","FormControl","TextField","autoComplete","valid","variant","LoginScreen","isLoading","password","passwordRequiredError","errorMessage","setPassword","bind","onLogin","resumeExpiry","parseInt","e","target","prevState","preventDefault","d","Box","MHSLogo","onSubmit","maxLength","Button","disabled","getFullYear","connect","actionCreator","HomeScreen","hasTests","isLogout","onLogout","handleNext","getTest","resumeLocation","participantId","setItem","stringify","text","displayName","versionNum","DemographicScreen","online","updateOnlineStatus","addEventListener","navigator","onLine","studentName","studentID","schoolBuilding","style","float","fontSize","IntroductionRoutes","path","pathname","requireSessionID","monitorProgress","AssessmentContainer","AssessmentHeader","AssessmentBody","AssessmentNavigation","delay","useState","timer","setTimer","useEffect","setTimeout","AssessmentQuestion","gridType","replace","marginTop","marginRight","imgProps","mediaPath","loader","loading","AssessmentResponse","options","onSelect","option","i","image","isCorrect","selectedClass","correctClass","OnScreenKeyboard","showKeyboard","kbInput","kbPressed","toggleTimer","startToggle","endToggle","handleKbInputChange","handleKbKeyup","clearTimeout","removeEventListener","stopPropagation","focus","handleKeydown","toLowerCase","mouseEvents","onTouchStart","onTouchEnd","ref","input","xmlns","viewBox","fill","instructionVideos","verbalInstructions","nonVerbalInstructionsPreK","nonVerbalInstructionsBD","nonVerbalInstructionsEG","quantInstructionsBD","quantInstructionsEG","InstructionVideo","videoEnded","handlePlay","player","videojs","videoNode","autoplay","controls","preload","fluid","responsive","sources","instructions","on","paused","play","dispose","nextLink","saveScreenDuration","maxTouchPoints","userAgent","isIOS","isMobileSafari","isIOS13","isIPhone13","isIPad13","isIpadOS","handleMobileKeydown","node","playsInline","instructionImages","InstructionComicStrip","AssessmentInstruction","showComicStrip","PreK","BD","EG","concat","getInstructions","preloadComicStrip","Image","repeat","altKey","code","which","AssessmentStart","handleBack","previousLink","connectCommon","WrappedComponent","startDate","testDuration","itemStartDate","itemStartDurationAt","itemDuration","pausedStartDate","pausedDuration","disableTimeout","timeAt25min","timeAt30min","timeAt35min","showSavedPopup","showTimerOffPopup","isTimerActive","startTimer","pauseTimer","disableTimer","setShowSavedPopup","setShowTimerOffPopup","setRespAtInterval","autoSave","saveBeforeUnload","saveOnBlur","togglePause","match","location","document","indexOf","clearInterval","segment","screenDuration","resumeTestDuration","resumePausedDuration","setInterval","callback","elapsed","testIndex","findIndex","forceComplete","event","returnValue","createTask","classNames","containerClass","disableArrows","preloaded","headerText","selectResponse","delayArrows","preloadImages","preloadTasks","currentTask","currentIndex","prevTask","isBackVisible","prevIndex","nextTask","isNextVisible","nextIndex","forEach","goBack","requiredResponse","setCurrentIndex","setCurrentTask","setHeaderText","container","header","navigation","PracticeTaskVerbal","ITEMLIST","PRACTICE","PracticeTaskNonVerbal","PracticeTaskQuantitative","TaskVerbal","TASKS","TaskNonVerbal","TaskQuantitative","AssessmentTasks","updated","checkResume","oncontextmenu","segmentProps","getPreviousLink","getNextLink","Practice","getPracticeComponent","Task","getTaskComponent","AssessmentEnd","AssessmentComplete","showNext","isSaving","preventBack","unseenItems","console","log","taskIndex","skipped","items","curDate","pushState","href","go","color","textAlign","position","TaskRoutes","AssessmentRoutes","ownState","rest","render","Routes","route","exact","App","Boolean","hostname","link","dsn","environment","sentryEnv","integrations","BrowserTracing","tracesSampleRate","ReactDOM","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.c5fbea90.chunk.js","sourcesContent":["// const getConfig = ({env, isLocal}) => {\r\n// if (env === 'development' || isLocal) {\r\n// return {\r\n// isLocal,\r\n// url: {\r\n// BASE_URL: 'http://localhost:3000',\r\n// API_URL: isLocal ? 'http://localhost:44367' : 'http://localhost:44367/api',\r\n// CDN_URL: 'https://cdn.mhs.com/mhscdndev/Gifted'\r\n// }\r\n// };\r\n// }\r\n\r\n// return {\r\n// isLocal,\r\n// url: {\r\n// BASE_URL: 'https://a2.mhs.com/ngat',\r\n// API_URL: 'https://a2.mhs.com/rap_api/api',\r\n// CDN_URL: 'https://cdn.mhs.com/mhscdn/Gifted'\r\n// }\r\n// }\r\n// };\r\n\r\n// export const config = getConfig({\r\n// env: process.env.NODE_ENV,\r\n// isLocal: false // Dev Switch\r\n// });\r\n\r\nexport const config = window.globalConfig;\r\n\r\nexport const productId = 3;\r\n\r\nexport const termsReponse = {\r\n accept: 1,\r\n declined: 2\r\n};\r\n\r\nexport const consentResponse = {\r\n accept: 1,\r\n declined: 2\r\n};\r\n\r\nexport const assessmentStatus = {\r\n Complete: 'Complete' ,\r\n InProgress: 'InProgress',\r\n Fail: 'Fail'\r\n};\r\n\r\nexport const specialMessages = {\r\n SaveSuccess: \"Assessment saved successfully\"\r\n}\r\n\r\nexport const localDataExpiry = 3600000;\r\n","import axios from 'axios';\r\nimport { config } from './../Constants';\r\n\r\nconst instance = axios.create({\r\n baseURL: config.url.BASE_URL\r\n});\r\n\r\nlet axiosConfig = {\r\n headers: {\r\n 'Content-Type': 'application/json;charset=UTF-8',\r\n \"Access-Control-Allow-Origin\": \"*\",\r\n }\r\n };\r\n\r\nexport const get = (apiUrl, params, successFunc, errorFunc, finallFunc, raw = false) => {\r\n return instance.get(apiUrl, raw ? params : { params })\r\n .then(successFunc)\r\n .catch(errorFunc)\r\n .then(finallFunc);\r\n}\r\n\r\nexport const post = (apiUrl, params, successFunc, errorFunc, finallFunc, raw = false) => {\r\n return instance.post(apiUrl, raw ? params : { params }, axiosConfig)\r\n .then(successFunc)\r\n .catch(errorFunc)\r\n .then(finallFunc);\r\n}","import { get } from './service';\r\nimport { config } from '../Constants';\r\n\r\nconst APIURL_AUTH = config.url.API_URL + '/login';\r\n\r\nconst getDataPath = (params) => {\r\n\tconst versionId = params && params.versionId ? params.versionId : -1;\r\n\tlet dataPath = '/data';\r\n\r\n\tif ([7, 8, 9].includes(versionId)) {\r\n\t\tdataPath = '/verbalData';\r\n\t} else if ([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25].includes(versionId)) {\r\n\t\tdataPath = '/nonverbalData';\r\n\t} else if ([26, 27, 28, 29, 30, 31, 32].includes(versionId)) {\r\n\t\tdataPath = '/quantData';\r\n\t}\r\n\r\n\treturn config.url.API_URL + dataPath;\r\n};\r\n\r\nexport const userLogin = (params, successFunc, errorFunc, finallFunc) => get(APIURL_AUTH, params, successFunc, errorFunc, finallFunc);\r\nexport const getData = (params, successFunc, errorFunc, finallFunc) => get(getDataPath(params), null, successFunc, errorFunc, finallFunc);","import { config } from '../Constants';\r\nimport { post } from './service';\r\nimport { userLogin as localLogin } from './local-service';\r\n\r\nconst APIURL_AUTH = config.url.API_URL + '/Assessment/Login';\r\n\r\nconst userLoginFunc = (params, successFunc, errorFunc, finallFunc) => post(APIURL_AUTH, params, successFunc, errorFunc, finallFunc, true);\r\n\r\nexport const userLogin = config.isLocal ? localLogin : userLoginFunc;","import { config, productId } from '../Constants';\r\nimport { get, post } from './service';\r\nimport { getData as getLocalData } from './local-service';\r\nimport { buildQueryString } from './helper';\r\n\r\nconst APIURL_GET_DATA = config.url.API_URL + '/Assessment/GetAssessment';\r\nconst APIURL_UPDATE_DATA = config.url.API_URL + '/Assessment/UpdateParticipant';\r\nconst APIURL_SAVE_DATA = config.url.API_URL + '/Assessment/Save';\r\nconst APIURL_LOG = config.url.API_URL + '/Assessment/Logger';\r\n\r\nconst getDataFunc = (params, successFunc, errorFunc, finallFunc) => {\r\n\tif (!params || !params.versionId) {\r\n\t\tparams.versionId = -1;\r\n\t}\r\n\r\n\tconst queryString = buildQueryString({\r\n\t\tproductId,\r\n\t\tfilterByTask: false,\r\n\t\t...params\r\n\t});\r\n\r\n\tget(APIURL_GET_DATA + queryString, null, successFunc, errorFunc, finallFunc);\r\n};\r\n\r\nexport const getData = config.isLocal ? getLocalData : getDataFunc;\r\nexport const updateData = (params, successFunc, errorFunc, finallFunc) => post(APIURL_UPDATE_DATA, params, successFunc, errorFunc, finallFunc, true);\r\nexport const saveData = (params, successFunc, errorFunc, finallFunc) => post(APIURL_SAVE_DATA, params, successFunc, errorFunc, finallFunc, true);\r\nexport const log = (params, successFunc, errorFunc, finallFunc) => post(APIURL_LOG, params, successFunc, errorFunc, finallFunc, true);","export const buildQueryString = (params) => {\r\n\tif (!params) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst queryString = '?' + Object.keys(params).map(key => key + '=' + params[key]).join('&');\r\n\treturn queryString;\r\n};","export const taskType = {\r\n\t'ITEMLIST': { id: 0, type: 'ItemList' }\r\n};\r\n\r\nexport const subTaskType = {\r\n\t'PRACTICE': { id: 1, type: 'practice' },\r\n\t'TASKS': { id: 1, type: 'tasks' },\r\n};\r\n\r\nexport const taskSegment = {\r\n\t'INSTRUCTION': 'Instruction',\r\n\t'PRACTICE': 'Practice',\r\n\t'PRACTICECOMPLETE': 'PracticeComplete',\r\n\t'TASK': 'Task',\r\n\t'TASKCOMPLETE': 'TaskComplete'\r\n};\r\n\r\nexport const terminationType = {\r\n\t'TIMEDOUT': 'Timed out'\r\n};\r\n\r\nexport const gridTemplates = {\r\n\t'2x3Verbal': {\r\n\t\ttestSize: null,\r\n\t\trespSize: { width: 270, height: 178 }\r\n\t},\r\n\t'Equations': {\r\n\t\ttestSize: { width: 909, height: 236 },\r\n\t\trespSize: { width: 102, height: 102 }\r\n\t},\r\n\t'Matrices': {\r\n\t\ttestSize: { width: 585, height: 300 },\r\n\t\trespSize: { width: 102, height: 73 }\r\n\t},\r\n\t'Numberline': {\r\n\t\ttestSize: { width: 606, height: 102 },\r\n\t\trespSize: { width: 102, height: 102 }\r\n\t},\r\n\t'Thinking': {\r\n\t\ttestSize: { width: 585, height: 300 },\r\n\t\trespSize: { width: 102, height: 102 }\r\n\t},\r\n\t'2x2': {\r\n\t\ttestSize: { width: 148, height: 148 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'2x2LargeFolding': {\r\n\t\ttestSize: { width: 229, height: 288 },\r\n\t\ttestOffset: { right: 41 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'2x2SmallFolding': {\r\n\t\ttestSize: { width: 225, height: 249 },\r\n\t\ttestOffset: { top: 8, right: 52 },\r\n\t\trespSize: { width: 61, height: 61 },\r\n\t},\r\n\t'2x3': {\r\n\t\ttestSize: { width: 234, height: 148 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'2x3LargeFolding': {\r\n\t\ttestSize: { width: 327, height: 230 },\r\n\t\ttestOffset: { top: 9, right: 42 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'2x3SmallFolding': {\r\n\t\ttestSize: { width: 290, height: 200 },\r\n\t\ttestOffset: { top: 52, right: 56 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'3x2': {\r\n\t\ttestSize: { width: 148, height: 234 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'3x2Folding': {\r\n\t\ttestSize: { width: 222, height: 356 },\r\n\t\ttestOffset: { top: 9, right: 49 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'3x3': {\r\n\t\ttestSize: { width: 234, height: 234 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'3x3Folding': {\r\n\t\ttestSize: { width: 331, height: 352 },\r\n\t\ttestOffset: { right: 46 },\r\n\t\trespSize: { width: 61, height: 61 }\r\n\t},\r\n\t'Box': {\r\n\t\ttestSize: { width: 247, height: 183 },\r\n\t\trespSize: { width: 90, height: 58 }\r\n\t}\r\n};\r\n\r\nexport const getTestByVersion = versionId => {\r\n\tconst tests = {\r\n\t\tVerbal: [7, 8, 9],\r\n\t\tNonVerbal: [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25],\r\n\t\tQuant: [26, 27, 28, 29, 30, 31, 32]\r\n\t};\r\n\r\n\treturn Object.keys(tests).find(test => tests[test].includes(versionId));\r\n};\r\n\r\nexport const getTestTimeLimit = grade => {\r\n\tconst g = grade.toString();\r\n\r\n\tif (['PreK', 'K', '1', '2'].includes(g)) {\r\n\t\treturn 30;\r\n\t} else if (['3', '4', '5', '6', '7', '8', '9', '10', '11', '12'].includes(g)) {\r\n\t\treturn 35;\r\n\t} else {\r\n\t\treturn 40;\r\n\t}\r\n};\r\n\r\nexport const getInstructions = (grade, versionId) => {\r\n\tconst test = getTestByVersion(versionId);\r\n\tconst PreK = ['PreK', 'K'];\r\n\tconst BD = ['1', '2', '3', '4'];\r\n\tconst EG = ['5', '6', '7', '8', '9', '10', '11', '12'];\r\n\tconst g = grade.toString();\r\n\r\n\tswitch (test) {\r\n\t\tcase 'Verbal':\r\n\t\t\treturn 'verbalInstructions';\r\n\r\n\t\tcase 'NonVerbal':\r\n\t\t\tif (PreK.includes(g)) {\r\n\t\t\t\treturn 'nonVerbalInstructionsPreK';\r\n\t\t\t} else if (BD.includes(g)) {\r\n\t\t\t\treturn 'nonVerbalInstructionsBD';\r\n\t\t\t} else if (EG.includes(g)) {\r\n\t\t\t\treturn 'nonVerbalInstructionsEG';\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\tcase 'Quant':\r\n\t\t\tif (PreK.concat(BD).includes(g)) {\r\n\t\t\t\treturn 'quantInstructionsBD';\r\n\t\t\t} else if (EG.includes(g)) {\r\n\t\t\t\treturn 'quantInstructionsEG';\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\tdefault:\r\n\t\t\treturn null;\r\n\t}\r\n};\r\n\r\nexport const getTasks = (tasks, type, subType) => {\r\n\tif (tasks) {\r\n\t\tconst taskType = Object.values(tasks).find(task => task.id === type.id);\r\n\r\n\t\tif (taskType) {\r\n\t\t\treturn taskType[subType.type];\r\n\t\t}\r\n\t}\r\n};","import { userLogin } from '../../services/auth-service';\r\nimport { getData, saveData, updateData, log } from '../../services/common-service';\r\nimport { getTestTimeLimit } from '../../components/assessment/common/task-utility';\r\nimport {\r\n\tosName,\r\n\tosVersion,\r\n\tbrowserName,\r\n\tbrowserVersion,\r\n\tisMobile,\r\n\tmobileModel\r\n} from \"react-device-detect\";\r\n// import { logToSentry } from '../../functions';\r\nimport * as Sentry from \"@sentry/react\";\r\nimport { specialMessages } from '../../Constants';\r\n\r\nexport const UPDATE_VALUE = 'common:updateData';\r\nexport const SET_USER_DATA = 'common:setUserData';\r\nexport const CLEAR_USER_DATA = 'common:clearUserData';\r\nexport const GET_DATA = 'common:getData';\r\nexport const SET_TASK_RESPONSE = 'common:setTaskResponse';\r\nexport const SET_RESP_AT_25MIN = 'common:setRespAt25min';\r\nexport const SET_RESP_AT_30MIN = 'common:setRespAt30min';\r\nexport const SET_RESP_AT_35MIN = 'common:setRespAt35min';\r\nexport const SET_DEMOGRAPHICS_RESPONSE = 'common:setDemographicsResponse';\r\nexport const SET_DATE_TIME_START = 'common:setDateTimeStart';\r\nexport const SET_SCREEN_DURATION = 'common:setScreenDuration';\r\nexport const SET_TERMINATION = 'common:setTermination';\r\nexport const SET_ASSESSMENT_STATUS = \"common:setAssessmentStatus\";\r\nexport const REQUEST_START = \"common:requestStart\";\r\nexport const REQUEST_SAVED = \"common:requestSaved\";\r\nexport const REQUEST_ERROR = \"common:requestError\";\r\nexport const REQUEST_END = \"common:requestEnd\";\r\n\r\nconst updateValue = (obj) => ({\r\n\ttype: UPDATE_VALUE,\r\n\tobj\r\n})\r\n\r\nconst setUserData = (userData) => ({\r\n\ttype: SET_USER_DATA,\r\n\tuserData\r\n});\r\n\r\nconst clearUserData = () => ({\r\n\ttype: CLEAR_USER_DATA\r\n});\r\n\r\nconst processGetAllData = (data) => ({\r\n\ttype: GET_DATA,\r\n\tdata\r\n});\r\n\r\nconst setDemographicsResponse = (name, value, child = null) => ({\r\n\ttype: SET_DEMOGRAPHICS_RESPONSE,\r\n\tchild,\r\n\tname,\r\n\tvalue\r\n});\r\n\r\nconst setTaskResponse = (task, taskType, subTaskType, response, index) => ({\r\n\ttype: SET_TASK_RESPONSE,\r\n\ttask,\r\n\ttaskType,\r\n\tsubTaskType,\r\n\tresponse,\r\n\tindex\r\n});\r\n\r\nconst setRespAt25min = tasks => ({\r\n\ttype: SET_RESP_AT_25MIN,\r\n\ttasks\r\n});\r\n\r\nconst setRespAt30min = tasks => ({\r\n\ttype: SET_RESP_AT_30MIN,\r\n\ttasks\r\n});\r\n\r\nconst setRespAt35min = tasks => ({\r\n\ttype: SET_RESP_AT_35MIN,\r\n\ttasks\r\n});\r\n\r\nconst setDateTimeStart = () => ({\r\n\ttype: SET_DATE_TIME_START\r\n})\r\n\r\nconst setScreenDuration = (url, duration) => ({\r\n\ttype: SET_SCREEN_DURATION,\r\n\turl,\r\n\tduration\r\n});\r\n\r\nconst setTermination = (terminationReason) => ({\r\n\ttype: SET_TERMINATION,\r\n\tterminationReason\r\n});\r\n\r\nconst setAssessmentStatus = (value) => ({\r\n\ttype: SET_ASSESSMENT_STATUS,\r\n\tvalue: value\r\n});\r\n\r\nconst requestStart = () => ({\r\n\ttype: REQUEST_START\r\n});\r\n\r\nconst requestSaved = () => ({\r\n\ttype: REQUEST_SAVED\r\n});\r\n\r\nconst requestError = (error) => ({\r\n\ttype: REQUEST_ERROR,\r\n\terror\r\n});\r\n\r\nconst requestEnd = () => ({\r\n\ttype: REQUEST_END\r\n});\r\n\r\nexport const login = (params, successHandler = null, errorHandler = null) => {\r\n\treturn (dispatch, getState) => {\r\n\t\tdispatch(requestStart());\r\n\r\n\t\tconst filterTests = (tests) => {\r\n\t\t\tconst filteredTests = Object.values(tests)\r\n\t\t\t\t.filter(test => test.sortOrder !== 0 && test.isCompleted === 0)\r\n\t\t\t\t.sort((a, b) => (a.sortOrder - b.sortOrder));\r\n\r\n\t\t\treturn !filteredTests.length ? null : filteredTests[0].fullName;\r\n\t\t};\r\n\r\n\t\treturn userLogin(\r\n\t\t\tparams,\r\n\t\t\t(response) => {\r\n\t\t\t\tif ('success' in response.data) {\r\n\t\t\t\t\tconst participant = response.data.success.participant;\r\n\t\t\t\t\tconst resumeData = JSON.parse(localStorage.getItem('resumeData'));\r\n\t\t\t\t\tlet resume = false;\r\n\r\n\t\t\t\t\tif (!!resumeData) {\r\n\t\t\t\t\t\tconst resumeUser = localStorage.getItem('resumeUser');\r\n\t\t\t\t\t\tconst resumeTest = filterTests(resumeData.userData.tests);\r\n\t\t\t\t\t\tconst currentTest = filterTests(participant.tests);\r\n\t\t\t\t\t\tresume = resumeUser === participant.username && resumeTest === currentTest;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tresume || dispatch(clearUserData());\r\n\t\t\t\t\tdispatch(setUserData(participant));\r\n\t\t\t\t}\r\n\t\t\t\tif (successHandler) {\r\n\t\t\t\t\tsuccessHandler(response.data);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t\tdispatch(requestError(error.response));\r\n\t\t\t\tif (errorHandler) {\r\n\t\t\t\t\terrorHandler(error.response);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tdispatch(requestEnd());\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n};\r\n\r\nexport const getAllData = (task, successHandler = null, errorHandler = null) => {\r\n\treturn (dispatch, getState) => {\r\n\t\tdispatch(requestStart());\r\n\r\n\t\tdispatch(logToSentry('info', 'Successfully requested assessment record from RAP API'))\r\n\r\n\t\treturn getData(task,\r\n\t\t\t(response) => {\r\n\t\t\t\tdispatch(processGetAllData(response.data));\r\n\t\t\t\tdispatch(logToSentry('info', 'Successfully received assessment record from RAP API'))\r\n\t\t\t\tif (successHandler) {\r\n\t\t\t\t\tsuccessHandler(response.data);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t\tdispatch(requestError(error.response));\r\n\t\t\t\tdispatch(logToSentry('error', \"\", error, {}, {}))\r\n\t\t\t\tif (errorHandler) {\r\n\t\t\t\t\terrorHandler(error.response);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tdispatch(requestEnd());\r\n\t\t\t} \r\n\t\t);\r\n\t};\r\n};\r\n\r\nexport const resumeSession = (data) => {\r\n\treturn (dispatch, getState) => {\r\n\t\tdispatch(processGetAllData(data));\r\n\t};\r\n};\r\n\r\nexport const save = (testData, returnFunc = () => {}) => {\r\n\treturn (dispatch, getState) => {\r\n\t\tdispatch(requestStart());\r\n\t\tconst participantData = {\r\n\t\t\tUsername: testData.username,\r\n\t\t\t[testData.testName + 'Complete']: testData.value\r\n\t\t};\r\n\t\tconst { data } = getState();\r\n\t\tconst saveParams = { params: data };\r\n\t\tconst localIpUrl = require('local-ip-url');\r\n\t\tdata.operatingSystem = osName + ' ' + osVersion;\r\n\t\tdata.browser = browserName + ' ' + browserVersion;\r\n\t\tdata.device = isMobile ? mobileModel : osName + ' ' + osVersion;\r\n\t\tdata.resumeURL = null;\r\n\t\tdata.timeRemaining = null;\r\n\r\n\t\tif (testData.value === 1) {\r\n\t\t\tsaveParams.testToUpdate = testData.testName;\r\n\t\t} else if (testData.value === 0) {\r\n\t\t\tconst timeLimit = getTestTimeLimit(data.userData.grade) * 60;\r\n\t\t\tdata.resumeURL = localStorage.getItem('resumeLocation');\r\n\t\t\tdata.timeRemaining = timeLimit - parseFloat(localStorage.getItem('resumeTime'));\r\n\t\t}\r\n\r\n\t\tconst taskScreens = data.screens.filter(item => !(/Instruction/).test(item.url) && !(/Practice/).test(item.url));\r\n\t\tdata.totalItemTimeNoPracticeNoInstruction = taskScreens.map(screen => screen.duration).reduce((a, b) => a + b);\r\n\t\tdata.totalAssessmentTime = data.timePerScreen = data.screens.map(screen => screen.duration).reduce((a, b) => a + b);\r\n\t\tdata.totalSessionTime = (new Date().getTime() / 1000) - (new Date(data.dateTimeStart).getTime() / 1000);\r\n\t\r\n\t\tdispatch(logToSentry('info', 'Requesting save to RAP API', null, {},\r\n\t\t(window.globalConfig.verboseSentryLogging) ? {\r\n\t\t\tfilename: 'localAssessmentData.json',\r\n\t\t\tdata: data\r\n\t\t}: null));\r\n\r\n\t\treturn saveData(saveParams,\r\n\t\t\t(response) => {\r\n\t\t\t\tdispatch(requestSaved(response.data));\r\n\t\t\t\tif (response.data === specialMessages.SaveSuccess) {\r\n\t\t\t\t\tdispatch(logToSentry('info', 'Successfully sent assessment save request to RAP API'))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdispatch(logToSentry('info', response.data))\r\n\t\t\t\t}\r\n\t\t\t\treturn updateData(participantData, (res) => {\r\n\t\t\t\t\tdispatch(setUserData(data.userData));\r\n\r\n\t\t\t\t\treturnFunc();\r\n\t\t\t\t});\t\t\t\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t\tdispatch(requestError(error.message));\r\n\t\t\t\t\r\n\t\t\t\tdispatch(logToSentry('error', \"\", error, {},\r\n\t\t\t\t{\r\n\t\t\t\t\tfilename: 'localAssessmentData.json',\r\n\t\t\t\t\tdata: data\r\n\t\t\t\t}))\r\n\r\n\t\t\t\treturn saveData(saveParams,\r\n\t\t\t\t\t(response) => {\r\n\t\t\t\t\t\tdispatch(requestSaved(response.data));\r\n\t\t\t\t\t\tif (response.data === specialMessages.SaveSuccess) {\r\n\t\t\t\t\t\t\tdispatch(logToSentry('info', 'Successfully sent assessment save request to RAP API'))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tdispatch(logToSentry('info', response.data))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn updateData(participantData, (res) => {\r\n\t\t\t\t\t\t\tdispatch(setUserData(data.userData));\r\n\r\n\t\t\t\t\t\t\treturnFunc();\r\n\t\t\t\t\t\t});\t\t\t\r\n\t\t\t\t\t},\r\n\t\t\t\t\t(error) => {\r\n\t\t\t\t\t\tdispatch(requestError(error.message));\r\n\r\n\t\t\t\t\t\tdispatch(logToSentry('error', \"\", error, {},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfilename: 'localAssessmentData.json',\r\n\t\t\t\t\t\t\tdata: data\r\n\t\t\t\t\t\t}))\r\n\t\t\t\t\t\treturnFunc();\r\n\t\t\t\t\t},\r\n\t\t\t\t\t() => {\r\n\t\t\t\t\t\tdispatch(requestEnd());\r\n\r\n\t\t\t\t\t\treturnFunc();\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tdispatch(requestEnd());\r\n\r\n\t\t\t\treturnFunc();\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n};\r\n\r\nexport const logToRAP = (err) => {\r\n\treturn (dispatch) => {\r\n\t\tdispatch(requestStart());\r\n\t\treturn log(err,\r\n\t\t\t(response) => {\r\n\t\t\t\tdispatch(requestSaved(response.data));\r\n\t\t\t},\r\n\t\t\t(error) => {\r\n\t\t\t\tdispatch(requestError(error.message));\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tdispatch(requestEnd());\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\nexport const logLocal = (err) => {\r\n\r\n}\r\n\r\nexport const logToSentry = (level = 'error', msg = '', exception = null, tags = {}, attachment = null) => {\r\n\treturn (dispatch, getState) => {\r\n\t\tdispatch(requestStart());\r\n\r\n\t\tconst { data } = getState(); // get assessment data from the state\r\n\r\n\t\t// configure the scope for the error/activity\r\n\t\tSentry.configureScope(scope => {\r\n\t\t\tscope.clear(); // clear any existing scope settings\r\n\t\t\tscope.setLevel(level); // set the level of the error/activity\r\n\r\n\t\t\t// set the user context for the error/activity\r\n\t\t\tscope.setUser({\r\n\t\t\t\tid: data.userData.username,\r\n\t\t\t})\r\n\r\n\t\t\t// set the assessmentId tag\r\n\t\t\ttags[\"assessmentId\"] = data.assessmentId ?? null;\r\n\t\t\t// set the versionId tag\r\n\t\t\ttags[\"versionId\"] = data.versionID ?? null;\r\n\t\t\tscope.setTags(tags); // set any other tags\r\n\t\t\tif (attachment != null) scope.addAttachment(attachment); // attach any data\r\n\t\t})\r\n\t\r\n\t\tif (exception) {\r\n\t\t\tSentry.captureException(exception);\r\n\t\t} else {\r\n\t\t\tSentry.captureMessage(msg);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport {\r\n\tupdateValue,\r\n\tsetUserData,\r\n\tclearUserData,\r\n\tsetDemographicsResponse,\r\n\tsetTaskResponse,\r\n\tsetRespAt25min,\r\n\tsetRespAt30min,\r\n\tsetRespAt35min,\r\n\tsetDateTimeStart,\r\n\tsetScreenDuration,\r\n\tsetTermination,\r\n\tsetAssessmentStatus\r\n}","import { assessmentStatus } from '../../Constants';\r\nimport uuidv1 from 'uuid/v1';\r\n\r\nimport {\r\n\tUPDATE_VALUE,\r\n\tSET_USER_DATA,\r\n\tCLEAR_USER_DATA,\r\n\tGET_DATA,\r\n\tSET_TASK_RESPONSE,\r\n\tSET_RESP_AT_25MIN,\r\n\tSET_RESP_AT_30MIN,\r\n\tSET_RESP_AT_35MIN,\r\n\tSET_DEMOGRAPHICS_RESPONSE,\r\n\tSET_DATE_TIME_START,\r\n\tSET_SCREEN_DURATION,\r\n\tSET_TERMINATION,\r\n\tSET_ASSESSMENT_STATUS,\r\n\tREQUEST_START,\r\n\tREQUEST_SAVED,\r\n\tREQUEST_ERROR,\r\n\tREQUEST_END\r\n} from '../actions/data-action';\r\n\r\nconst dataInitialState = {\r\n\tterms: null,\r\n\ttermsDecline: null,\r\n\tconsent: null,\r\n\tconsentDecline: null,\r\n\tterminated: false,\r\n\tterminationReason: null,\r\n\tsessionID: null,\r\n\toutcomes: [],\r\n\tscreens: []\r\n};\r\n\r\nconst requestInitialState = {\r\n\tisProcessing: false,\r\n\tsaved: false,\r\n\thasError: false,\r\n\terror: ''\r\n};\r\n\r\nexport const data = (data = dataInitialState, action) => {\r\n\tswitch (action.type) {\r\n\t\tcase UPDATE_VALUE:\r\n\t\t\treturn {...data, ...action.obj}\r\n\t\tcase SET_USER_DATA:\r\n\t\t\tconst { userData } = action;\r\n\t\t\tconst sessionID = data.sessionID ? data.sessionID : uuidv1();\r\n\t\t\tconst inviteId = data.inviteId ? data.inviteId : uuidv1();\r\n\t\t\tuserData.isLoggedIn = true;\r\n\t\t\treturn Object.assign({}, data, { sessionID, inviteId, userData });\r\n\r\n\t\tcase CLEAR_USER_DATA:\r\n\t\t\tdata = dataInitialState;\r\n\t\t\tlocalStorage.clear();\r\n\t\t\treturn Object.assign({}, data, {userData: {isLoggedIn: false}});\r\n\t\t\r\n\t\tcase GET_DATA:\r\n\t\t\treturn Object.assign({}, data, action.data);\r\n\t\t\t\t\t\t\r\n\t\tcase SET_TASK_RESPONSE:\r\n\t\t\tlet { index } = action;\r\n\t\t\tindex = isNaN(index) ? 0 : index;\r\n\t\t\tconst { task, taskType, subTaskType, response } = action;\r\n\t\t\tconst tasks = Array.from(data.tasks);\r\n\r\n\t\t\tObject.values(tasks).find(item => item.id === taskType.id)[subTaskType.type].map(item => {\r\n\t\t\t\tif (item.id === task.id) {\r\n\t\t\t\t\tconst respArray = item.response ? item.response : [];\r\n\t\t\t\t\trespArray[index] = response;\r\n\t\t\t\t\titem.response = respArray;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn item;\r\n\t\t\t});\r\n\r\n\t\t\treturn Object.assign({}, data, { tasks });\r\n\r\n\t\tcase SET_RESP_AT_25MIN:\r\n\t\t\taction.tasks[0].tasks.map(item => {\r\n\t\t\t\titem.respAt25min = item.response[0];\r\n\t\t\t\treturn item;\r\n\t\t\t});\r\n\r\n\t\t\treturn Object.assign({}, data, { tasks: action.tasks });\r\n\r\n\t\tcase SET_RESP_AT_30MIN:\r\n\t\t\taction.tasks[0].tasks.map(item => {\r\n\t\t\t\titem.respAt30min = item.response[0];\r\n\t\t\t\treturn item;\r\n\t\t\t});\r\n\r\n\t\t\treturn Object.assign({}, data, { tasks: action.tasks });\r\n\r\n\t\tcase SET_RESP_AT_35MIN:\r\n\t\t\taction.tasks[0].tasks.map(item => {\r\n\t\t\t\titem.respAt35min = item.response[0];\r\n\t\t\t\treturn item;\r\n\t\t\t});\r\n\r\n\t\t\treturn Object.assign({}, data, { tasks: action.tasks });\r\n\r\n\t\tcase SET_DEMOGRAPHICS_RESPONSE:\r\n\t\t\tconst demographics = { ...data.demographics };\r\n\r\n\t\t\tif (action.child) {\r\n\t\t\t\tdemographics[action.child][action.name] = action.value;\r\n\t\t\t} else {\r\n\t\t\t\tdemographics[action.name] = action.value;\r\n\t\t\t}\r\n\r\n\t\t\treturn Object.assign({}, data, { demographics });\r\n\r\n\t\tcase SET_DATE_TIME_START:\r\n\t\t\tif (!data.dateTimeStart) {\r\n\t\t\t\tdata.dateTimeStart = new Date();\r\n\t\t\t}\r\n\r\n\t\t\treturn Object.assign({}, data);\r\n\r\n\t\tcase SET_SCREEN_DURATION:\r\n\t\t\tconst screens = Array.from(data.screens);\r\n\r\n\t\t\tscreens.map((item, index) => {\r\n\t\t\t\tif (item.url === action.url) {\r\n\t\t\t\t\tlet duration = item.duration;\r\n\t\t\t\t\tduration = isNaN(duration) ? 0 : duration;\r\n\t\t\t\t\titem.duration = duration + action.duration;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn item;\r\n\t\t\t});\r\n\r\n\t\t\treturn Object.assign({}, data, { screens });\r\n\r\n\t\tcase SET_TERMINATION:\r\n\t\t\tif (data.terminated) {\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\r\n\t\t\treturn Object.assign({}, data, { terminated: true, terminationReason: action.terminationReason });\r\n\r\n\t\tcase SET_ASSESSMENT_STATUS:\r\n\t\t\tif (action.value === assessmentStatus.Complete || action.value === assessmentStatus.Fail) {\r\n\t\t\t\treturn Object.assign({}, data, { status: action.value, dateTimeSubmitted: new Date()});\r\n\t\t\t}\r\n\r\n\t\t\treturn Object.assign({}, data, { status: action.value, dateTimeSubmitted: null });\r\n\r\n\t\tdefault:\r\n\t\t\treturn data;\r\n\t}\r\n}\r\n\r\nexport const dataRequest = (request = requestInitialState, action) => {\r\n switch (action.type) {\r\n case REQUEST_START:\r\n return Object.assign({}, request, { isProcessing: true, saved: false, hasError: false, error: ''});\r\n case REQUEST_SAVED:\r\n return Object.assign({}, request, { saved: true});\r\n case REQUEST_ERROR:\r\n return Object.assign({}, request, { hasError: true, error: action.error});\r\n case REQUEST_END:\r\n return Object.assign({}, request, { isProcessing: false});\r\n default:\r\n return request;\r\n }\r\n};","import PropTypes from 'prop-types';\r\nimport { combineReducers } from 'redux';\r\nimport { connectRouter } from 'connected-react-router';\r\nimport * as dataReducers from './data-reducer';\r\n\r\nconst rootReducer = (history) => combineReducers({\r\n ...dataReducers,\r\n router: connectRouter(history)\r\n});\r\n\r\nrootReducer.propTypes = {\r\n history: PropTypes.object\r\n};\r\n\r\nexport default rootReducer;","import { createBrowserHistory } from 'history';\r\n\r\nconst history = createBrowserHistory({ basename: process.env.PUBLIC_URL });\r\n\r\nexport default history;","import PropTypes from 'prop-types';\r\nimport { createStore, compose, applyMiddleware } from \"redux\";\r\nimport { routerMiddleware } from 'connected-react-router'\r\nimport thunkMiddleware from 'redux-thunk';\r\nimport rootReducer from './reducers';\r\nimport history from '../routes/history';\r\nimport { persistStore, persistReducer } from 'redux-persist';\r\nimport storage from 'redux-persist/lib/storage/session';\r\nimport { purgeStoredState } from 'redux-persist';\r\nimport { createLogger } from 'redux-logger';\r\n\r\nimport { config } from '../Constants';\r\n\r\nconst persistConfig = {\r\n key: 'root',\r\n storage,\r\n blacklist: ['router']\r\n}\r\n\r\nexport default function configureStore(preloadedState){\r\n const middlewares = [thunkMiddleware, routerMiddleware(history)];\r\n\r\n if (config.reduxLogger)\r\n middlewares.push(createLogger());\r\n\r\n const middlewareEnhancer = applyMiddleware(...middlewares);\r\n const persistedReducer = persistReducer(persistConfig, rootReducer(history));\r\n const enhancers = [middlewareEnhancer];\r\n const composedEnhancers = compose(...enhancers);\r\n const store = createStore(persistedReducer, preloadedState, composedEnhancers);\r\n const persistor = persistStore(store);\r\n return { history, store, persistor };\r\n}\r\n\r\nconfigureStore.propTypes = {\r\n preloadedState: PropTypes.object\r\n}\r\n\r\nexport function purge() {\r\n purgeStoredState(persistConfig);\r\n}\r\n","import { config } from '../Constants';\r\n\r\nconst urlPath = config.url.CDN_URL + '/Common/';\r\n\r\nexport const staticImages = {\r\n itemArrowLeft: urlPath + 'gifted__itemarrow_left_1x.png',\r\n itemArrowLeftSelected: urlPath + 'gifted__itemarrow_left_selected_1x.png',\r\n itemArrowRight: urlPath + 'gifted__itemarrow_right_1x.png',\r\n itemArrowRightSelected: urlPath + 'gifted__itemarrow_right_selected_1x.png',\r\n beginArrowLeft: urlPath + 'gifted__beginarrow_left_1x.png',\r\n beginArrowLeftSelected: urlPath + 'gifted__beginarrow_left_selected_1x.png',\r\n beginArrowRight: urlPath + 'gifted__beginarrow_right_1x.png',\r\n beginArrowRightSelected: urlPath + 'gifted__beginarrow_right_selected_1x.png',\r\n endArrowLeft: urlPath + 'gifted__endarrow_left_1x.png',\r\n endArrowLeftSelected: urlPath + 'gifted__endarrow_left_selected_1x.png',\r\n endArrowRight: urlPath + 'gifted__endarrow_right_1x.png',\r\n endArrowRightSelected: urlPath + 'gifted__endarrow_right_selected_1x.png',\r\n playButton: urlPath + 'gifted__playbutton_1x.png',\r\n stopHand: urlPath + 'gifted__stophand_1x.png',\r\n checkMark: urlPath + 'gifted__checkmark_1x.png',\r\n error: urlPath + 'gifted__error_1x.png',\r\n pause: urlPath + 'Pause-icon.png',\r\n};\r\n\r\nexport const preloadImages = () => {\r\n Object.values(staticImages).forEach(link => {\r\n const img = new Image();\r\n img.src = link;\r\n });\r\n};","import React from 'react';\r\n\r\nconst ScreenContainer = ({className = '', children}) => (\r\n
\r\n {children}\r\n
\r\n)\r\n\r\nexport default ScreenContainer;","import React, { Component } from 'react';\r\nimport { staticImages } from '../../assets/static-images';\r\n\r\nclass NavigationArrow extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tselected: false\r\n\t\t};\r\n\r\n\t\tthis.arrows = {\r\n\t\t\tback: {\r\n\t\t\t\tdefault: staticImages.itemArrowLeft,\r\n\t\t\t\tselected: staticImages.itemArrowLeftSelected\r\n\t\t\t},\r\n\t\t\tnext: {\r\n\t\t\t\tdefault: staticImages.itemArrowRight,\r\n\t\t\t\tselected: staticImages.itemArrowRightSelected\r\n\t\t\t},\r\n\t\t\tbegin_back: {\r\n\t\t\t\tdefault: staticImages.beginArrowLeft,\r\n\t\t\t\tselected: staticImages.beginArrowLeftSelected\r\n\t\t\t},\r\n\t\t\tbegin_next: {\r\n\t\t\t\tdefault: staticImages.beginArrowRight,\r\n\t\t\t\tselected: staticImages.beginArrowRightSelected\r\n\t\t\t},\r\n\t\t\tend_back: {\r\n\t\t\t\tdefault: staticImages.endArrowLeft,\r\n\t\t\t\tselected: staticImages.endArrowLeftSelected\r\n\t\t\t},\r\n\t\t\tend_next: {\r\n\t\t\t\tdefault: staticImages.endArrowRight,\r\n\t\t\t\tselected: staticImages.endArrowRightSelected\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { type, onClick } = this.props;\r\n\t\tconst { selected } = this.state;\r\n\t\tlet width = 70;\r\n\t\tlet height = 52;\r\n\r\n\t\tif (type.includes('begin_')) {\r\n\t\t\twidth = 110;\r\n\t\t\theight = 76;\r\n\t\t} else if (type.includes('end_')) {\r\n\t\t\twidth = 123;\r\n\t\t\theight = 85;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t this.setState({ selected: true })}\r\n\t\t\t\tonMouseLeave={() => this.setState({ selected: false })}\r\n\t\t\t\tonClick={onClick}>\r\n\t\t\t\t{type}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default NavigationArrow;\r\n","import React from 'react';\r\nimport NavigationArrow from '../../common/navigation-arrow';\r\n\r\nconst ScreenNavigation = ({to, onClick, type = 'next', isVisible = true}) => {\r\n\tif (!isVisible || ('undefined' === typeof onClick && 'undefined' === typeof to)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default ScreenNavigation;\r\n","import React from 'react';\r\nimport { FormControl, FormLabel, TextField } from '@material-ui/core';\r\n\r\nconst DemoQuestiontext = ({name, type = 'text', label = '', className = '', required = false, requiredError = '', isVisible = true, placeholder = '', value = '', onChange, validationMessage = undefined, inputProps = {}, helperText = '' }) => {\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {validationMessage}\r\n \r\n {label && {label}{required && *}}\r\n 0 ? validationMessage : ''}\r\n variant=\"outlined\"\r\n onChange={onChange}\r\n inputProps={inputProps}\r\n helperText={helperText}\r\n />\r\n {required && requiredError &&
Required
}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default DemoQuestiontext;","export default __webpack_public_path__ + \"static/media/logo.5d329e83.png\";","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport * as actionCreator from '../../redux/actions/data-action';\r\nimport { ScreenContainer } from './common';\r\nimport { Box, Button } from '@material-ui/core';\r\nimport { DemoQuestionText } from '../demographics/common/controls';\r\nimport MHSLogo from '../../logo.png';\r\n\r\nclass LoginScreen extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tisLoading: false,\r\n\t\t\tpassword: '',\r\n\t\t\tpasswordRequiredError: false,\r\n\t\t\thasError: false,\r\n\t\t\terrorMessage: ''\r\n\t\t};\r\n\r\n\t\tthis.setPassword = this.setPassword.bind(this);\r\n\t\tthis.onLogin = this.onLogin.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst resumeExpiry = parseInt(localStorage.getItem('resumeExpiry'));\r\n\r\n\t\tif (resumeExpiry && new Date() > resumeExpiry) {\r\n\t\t\tlocalStorage.clear();\r\n\t\t}\r\n\t}\r\n\r\n\tsetPassword(e) {\r\n\t\tconst state = { password: e.target.value };\r\n\r\n\t\tthis.setState(prevState => {\r\n\t\t\tif (prevState.passwordRequiredError) {\r\n\t\t\t\tstate.passwordRequiredError = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (prevState.errorMessage) {\r\n\t\t\t\tstate.errorMessage = '';\r\n\t\t\t}\r\n\r\n\t\t\treturn state;\r\n\t\t});\r\n\t}\r\n\r\n\tonLogin(e) {\r\n\t\te.preventDefault();\r\n\t\tconst { isLoading, password } = this.state;\r\n\t\tconst { history, login, logToSentry } = this.props;\r\n\r\n\t\tif (isLoading) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!password) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tpasswordRequiredError: !password,\r\n\t\t\t\thasError: false\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\tisLoading: true,\r\n\t\t\thasError: false,\r\n\t\t\terrorMessage: ''\r\n\t\t});\r\n\r\n\t\tlogin(\r\n\t\t\t{ password },\r\n\t\t\tdata => {\r\n\t\t\t\tif ('success' in data) {\r\n\t\t\t\t\tlogToSentry('info', `User Login`);\r\n\t\t\t\t\thistory.push('/Home');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tisLoading: false,\r\n\t\t\t\t\t\thasError: true,\r\n\t\t\t\t\t\terrorMessage: data.message\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terr => {\r\n\t\t\t\tthis.setState({\r\n\t\t\t\t\tisLoading: false,\r\n\t\t\t\t\thasError: true,\r\n\t\t\t\t\terrorMessage: err.data.error.message\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst d = new Date();\r\n\t\tconst {\r\n\t\t\tisLoading,\r\n\t\t\tpassword,\r\n\t\t\tpasswordRequiredError,\r\n\t\t\thasError,\r\n\t\t\terrorMessage\r\n\t\t} = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t\"MHS\r\n\t\t\t\t\t

\r\n\t\t\t\t\t

Student Login

\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t

Please enter your access code.

\r\n\t\t\t\t\t{hasError &&

{errorMessage}

}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t

\r\n\t\t\t\t\tCopyright © {d.getFullYear()} Multi-Health Systems, Inc. (MHS, Inc.) All rights reserved.\r\n\t\t\t\t

\r\n
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default connect(null, actionCreator)(LoginScreen);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport * as actionCreator from '../../redux/actions/data-action';\r\nimport { getTestTimeLimit } from '../assessment/common/task-utility';\r\nimport { ScreenContainer, ScreenNavigation } from './common';\r\nimport { Box, Button } from '@material-ui/core';\r\nimport { localDataExpiry } from '../../Constants';\r\n\r\nclass HomeScreen extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tisLoading: false,\r\n\t\t\thasTests: false,\r\n\t\t\tisLogout: false\r\n\t\t};\r\n\r\n\t\tthis.onLogout = this.onLogout.bind(this);\r\n\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t\tthis.getTest = this.getTest.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { history, resumeSession } = this.props;\r\n\t\tconst resumeLocation = localStorage.getItem('resumeLocation');\r\n\t\tconst resumeData = localStorage.getItem('resumeData');\r\n\t\tconst resumeExpiry = parseInt(localStorage.getItem('resumeExpiry'));\r\n\r\n\t\tif (resumeLocation && resumeData) {\r\n\t\t\tif (resumeExpiry && new Date() > resumeExpiry) {\r\n\t\t\t\tlocalStorage.clear();\r\n\t\t\t} else {\r\n\t\t\t\tresumeSession(JSON.parse(resumeData));\r\n\t\t\t\thistory.push(resumeLocation);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.test = this.getTest();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.state.isLogout) {\r\n\t\t\tthis.props.clearUserData();\r\n\t\t}\r\n\t}\r\n\r\n\tonLogout() {\r\n\t\tconst { logToSentry } = this.props;\r\n\r\n\t\tlogToSentry('info', 'User Logout');\r\n\t\tthis.setState({isLogout: true}, () => this.props.history.push('/Login'));\r\n\t}\r\n\r\n\thandleNext() {\r\n\t\tconst { history, data, getAllData } = this.props;\r\n\t\tconst { inviteId, sessionID, userData } = data;\r\n\t\tconst versionId = parseInt(this.test.value);\r\n\t\tconst participantId = userData.username;\r\n\r\n\t\tthis.setState({isLoading: true});\r\n\r\n\t\tgetAllData(\r\n\t\t\t{ versionId, inviteId, participantId, sessionID },\r\n\t\t\tres => {\r\n\t\t\t\tif (!!res.resumeURL) {\r\n\t\t\t\t\tconst timeLimit = getTestTimeLimit(data.userData.grade) * 60;\r\n\t\t\t\t\tlocalStorage.setItem('resumeLocation', res.resumeURL);\r\n\t\t\t\t\tlocalStorage.setItem('resumeData', JSON.stringify(res));\r\n\t\t\t\t\tlocalStorage.setItem('resumeExpiry', new Date() + localDataExpiry);\r\n\t\t\t\t\tlocalStorage.setItem('resumeTime', res.timeRemaining === null ? 0 : (timeLimit - res.timeRemaining));\r\n\t\t\t\t\thistory.push(res.resumeURL);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thistory.push('/Demographic');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terr => this.setState({isLoading: false})\r\n\t\t);\r\n\t}\r\n\r\n\tgetTest() {\r\n\t\tconst { tests } = this.props;\r\n\r\n\t\tconst filteredTests = Object.values(tests)\r\n\t\t\t.filter(test => test.sortOrder !== 0 && test.isCompleted === 0)\r\n\t\t\t.sort((a, b) => (a.sortOrder - b.sortOrder))\r\n\t\t\t.map(test => ({\r\n\t\t\t\ttext: test.displayName,\r\n\t\t\t\tvalue: test.versionNum\r\n\t\t\t}));\r\n\r\n\t\tif (!filteredTests.length) {\r\n\t\t\tthis.setState({hasTests: false});\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tthis.setState({hasTests: true});\r\n\t\treturn filteredTests[0];\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { hasTests, isLoading } = this.state;\r\n\t\tconst label = hasTests ? this.test.text : 'All tests completed.';\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{isLoading ? 'Loading...' : label}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tdata: state.data,\r\n\ttests: state.data.userData.tests\r\n});\r\n\r\nexport default connect(mapStateToProps, actionCreator)(HomeScreen);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport * as actionCreator from '../../redux/actions/data-action';\r\nimport { ScreenContainer, ScreenNavigation } from './common';\r\nimport { Box, Button } from '@material-ui/core';\r\nimport { staticImages } from '../../assets/static-images';\r\n\r\nclass DemographicScreen extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tonline: true,\r\n\t\t\tisLogout: false\r\n\t\t};\r\n\r\n\t\tthis.onLogout = this.onLogout.bind(this);\r\n\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t\tthis.updateOnlineStatus = this.updateOnlineStatus.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { history, resumeSession } = this.props;\r\n\t\tconst resumeLocation = localStorage.getItem('resumeLocation');\r\n\t\tconst resumeData = localStorage.getItem('resumeData');\r\n\t\tconst resumeExpiry = parseInt(localStorage.getItem('resumeExpiry'));\r\n\r\n\t\tif (resumeLocation && resumeData) {\r\n\t\t\tif (resumeExpiry && new Date() > resumeExpiry) {\r\n\t\t\t\tlocalStorage.clear();\r\n\t\t\t} else {\r\n\t\t\t\tresumeSession(JSON.parse(resumeData));\r\n\t\t\t\thistory.push(resumeLocation);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twindow.addEventListener('online', this.updateOnlineStatus);\r\n\t\twindow.addEventListener('offline', this.updateOnlineStatus);\r\n\t\tthis.updateOnlineStatus();\r\n\t}\r\n \r\n\tcomponentWillUnmount() {\r\n\t\tif (this.state.isLogout) {\r\n\t\t\tthis.props.clearUserData();\r\n\t\t}\r\n\t}\r\n\r\n\tonLogout() {\r\n\t\tthis.setState({isLogout: true}, () => this.props.history.push('/Login'));\r\n\t}\r\n\r\n\thandleNext() {\r\n\t\tif (!this.state.online) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst { history, data } = this.props;\r\n\t\thistory.push(data.screens[0].url);\r\n\t}\r\n\r\n\tupdateOnlineStatus() {\r\n\t\tthis.setState({online: navigator.onLine});\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { userData } = this.props.data;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{!this.state.online && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\"Error\"\r\n\t\t\t\t\t\t\t

Network connection lost:
Please contact your administrator.

\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t

Student Name: {userData.studentName}

\r\n\t\t\t\t\t\t

ID: {userData.studentID == null ? \"\" : userData.studentID}

\r\n\t\t\t\t\t\t

Grade: {userData.grade}

\r\n\t\t\t\t\t\t

School: {userData.schoolBuilding}

\r\n\t\t\t\t\t\t

Test SessionID: {userData.username}

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tdata: state.data,\r\n\ttests: state.data.userData.tests\r\n});\r\n\r\nexport default connect(mapStateToProps, actionCreator)(DemographicScreen);\r\n","import {\r\n MainScreen,\r\n LoginScreen,\r\n HomeScreen,\r\n DemographicScreen,\r\n // LanguageQuestionScreen,\r\n // AdminScreen\r\n} from '../components/screens';\r\n\r\nexport const IntroductionRoutes = [\r\n { path: '/', component: MainScreen, requireSessionID: false, monitorProgress: false },\r\n { path: '/Login', component: LoginScreen, requireSessionID: false, monitorProgress: true },\r\n { path: '/Home', component: HomeScreen, requireSessionID: true, monitorProgress: true },\r\n { path: '/Demographic', component: DemographicScreen, requireSessionID: true, monitorProgress: true },\r\n // { path: '/Language', component: LanguageQuestionScreen, requireSessionID: true, monitorProgress: true }\r\n // { path: '/Admin', component: AdminScreen, requireSessionID: false, monitorProgress: true }\r\n];\r\n","import React from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\n\r\nexport default function MainScreen() {\r\n\treturn \r\n}","import React from 'react';\r\n\r\nconst AssessmentContainer = ({children, className}) => (\r\n
\r\n {children}\r\n
\r\n);\r\n\r\nexport default AssessmentContainer;\r\n","import React from 'react'; \r\n\r\nconst AssessmentHeader = ({children, className}) => (\r\n\t
\r\n\t\t{children}\r\n\t
\r\n);\r\n\r\nexport default AssessmentHeader;\r\n","import React from 'react';\r\n\r\nconst AssessmentBody = ({children}) => (\r\n
\r\n \t{children}\r\n
\r\n);\r\n\r\nexport default AssessmentBody;\r\n","import React, { useState, useEffect } from 'react';\r\nimport NavigationArrow from '../../common/navigation-arrow';\r\n\r\nconst AssessmentNavigation = ({className, to, onClick, type = 'next', isVisible = true, delay = 0}) => {\r\n\tconst [timer, setTimer] = useState(delay);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (timer > 0) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tsetTimer(timer - 1);\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\t});\r\n\r\n\tif (!isVisible || ('undefined' === typeof onClick && 'undefined' === typeof to)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{timer ?

{timer}

: }\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default AssessmentNavigation;\r\n","import React from 'react';\r\nimport { Img } from 'react-image';\r\nimport { gridTemplates } from './task-utility';\r\n\r\nconst AssessmentQuestion = ({task}) => {\r\n\tconst gridType = task.taskType.replace(/\\s+/g, '');\r\n\tconst { testSize, testOffset } = gridTemplates[gridType];\r\n\r\n\tconst style = {\r\n\t\twidth: `${testSize.width}px`,\r\n\t\theight: `${testSize.height}px`\r\n\t};\r\n\r\n\tif (testOffset) {\r\n\t\tconst { top, right } = testOffset;\r\n\t\tstyle.marginTop = top ? `${top}px` : null;\r\n\t\tstyle.marginRight = right ? `${right}px` : null;\r\n\t}\r\n\r\n\tconst imgProps = {\r\n\t\tclassName: 'test-image',\r\n\t\tsrc: task.mediaPath[0],\r\n\t\talt: gridType,\r\n\t\tstyle,\r\n\t\t...testSize\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t} />\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default AssessmentQuestion;","import React from 'react';\r\nimport { Img } from 'react-image';\r\nimport { gridTemplates } from './task-utility';\r\n\r\nconst AssessmentResponse = ({className, type, options, selected, onSelect}) => {\r\n\tconst gridType = type.replace(/\\s+/g, '');\r\n\tconst { respSize } = gridTemplates[gridType];\r\n\t\r\n\tconst style = {\r\n\t\twidth: `${respSize.width}px`,\r\n\t\theight: `${respSize.height}px`\r\n\t};\r\n\t\r\n\treturn (\r\n\t\t
\r\n\t\t\t{options.map((option, i) => {\r\n\t\t\t\tconst { value, image, text, isCorrect } = option;\r\n\t\t\t\tconst selectedClass = selected.includes(value) ? ' selected' : '';\r\n\t\t\t\tconst correctClass = isCorrect ? ' correct' : '';\r\n\t\t\t\tconst response = text ? text : value;\r\n\r\n\t\t\t\tconst imgProps = {\r\n\t\t\t\t\tclassName: 'response-image',\r\n\t\t\t\t\tsrc: image,\r\n\t\t\t\t\talt: response,\r\n\t\t\t\t\tstyle,\r\n\t\t\t\t\t...respSize\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn (\r\n\t\t\t\t\t\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default AssessmentResponse;\r\n","import React, { Component } from 'react';\r\n\r\nclass OnScreenKeyboard extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tshowKeyboard: false,\r\n\t\t\tkbInput: ''\r\n\t\t};\r\n\r\n\t\tthis.kbPressed = false;\r\n\t\tthis.toggleTimer = null;\r\n\t\tthis.startToggle = this.startToggle.bind(this);\r\n\t\tthis.endToggle = this.endToggle.bind(this);\r\n\t\tthis.handleKbInputChange = this.handleKbInputChange.bind(this);\r\n\t\tthis.handleKbKeyup = this.handleKbKeyup.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.kbInput.addEventListener('keyup', this.handleKbKeyup);\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tclearTimeout(this.toggleTimer);\r\n\t\tthis.kbInput.removeEventListener('keyup', this.handleKbKeyup);\r\n\t}\r\n\r\n\tstartToggle(e) {\r\n\t\te.stopPropagation();\r\n\r\n\t\tif (!this.state.showKeyboard) {\r\n\t\t\tthis.toggleTimer = setTimeout(() => {\r\n\t\t\t\tthis.setState({showKeyboard: true});\r\n\t\t\t}, 5000);\r\n\t\t}\r\n\t}\r\n\r\n\tendToggle(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tclearTimeout(this.toggleTimer);\r\n\r\n\t\tif (this.state.showKeyboard) {\r\n\t\t\tthis.setState({showKeyboard: false});\r\n\t\t\tthis.kbInput.focus();\r\n\t\t}\r\n\t}\r\n\r\n\thandleKbInputChange(e) {\r\n\t\tif (this.kbPressed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.kbPressed = true;\r\n\t\tthis.props.handleKeydown(null, e.target.value.toLowerCase());\r\n\t\tthis.setState({kbInput: ''});\r\n\t}\r\n\r\n\thandleKbKeyup() {\r\n\t\tthis.kbPressed = false;\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst mouseEvents = {\r\n\t\t\tonTouchStart: this.startToggle,\r\n\t\t\tonTouchEnd: this.endToggle\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t this.kbInput = input} />\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default OnScreenKeyboard;\r\n","import { config } from '../Constants';\r\n\r\nexport const instructionVideos = {\r\n verbalInstructions: config.url.CDN_URL + '/Verbal/videos/gifted_verbal_instructions_v3.mp4',\r\n nonVerbalInstructionsPreK: config.url.CDN_URL + '/NonVerbal/videos/gifted_instructions_pre-k_1_rv2.mp4',\r\n nonVerbalInstructionsBD: config.url.CDN_URL + '/NonVerbal/videos/gifted_instructions_B-D_1.mp4',\r\n nonVerbalInstructionsEG: config.url.CDN_URL + '/NonVerbal/videos/gifted_instructions_E-G_1.mp4',\r\n quantInstructionsBD: config.url.CDN_URL + '/Quant/videos/gifted_quant_instructions_prek_B-D_v2.mp4',\r\n quantInstructionsEG: config.url.CDN_URL + '/Quant/videos/gifted_quant_instructions_E-G.mp4'\r\n};","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Box, Button } from '@material-ui/core';\r\nimport { isMobile, isIOS, isMobileSafari, isIOS13, isIPhone13, isIPad13 } from 'react-device-detect';\r\nimport { ScreenContainer, ScreenNavigation } from '../../screens/common';\r\nimport { OnScreenKeyboard } from '../common';\r\nimport { staticImages } from '../../../assets/static-images';\r\nimport { instructionVideos } from '../../../assets/instruction-videos';\r\nimport videojs from 'video.js';\r\nimport \"video.js/dist/video-js.min.css\";\r\n\r\nclass InstructionVideo extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tvideoEnded: false\r\n\t\t};\r\n\r\n\t\tthis.handlePlay = this.handlePlay.bind(this);\r\n\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.player = videojs(this.videoNode, {\r\n\t\t\tautoplay: false,\r\n\t\t\tcontrols: false,\r\n\t\t\tpreload: 'auto',\r\n\t\t\tfluid: true,\r\n\t\t\tresponsive: true,\r\n\t\t\tsources: [{\r\n\t\t\t\tsrc: instructionVideos[this.props.instructions],\r\n\t\t\t\ttype: 'video/mp4'\r\n\t\t\t}]\r\n\t\t});\r\n\r\n\t\tthis.player.on('click', () => {\r\n\t\t\tif (this.player.paused()) {\r\n\t\t\t\tthis.player.play();\r\n\t\t\t} else {\r\n\t\t\t\tthis.player.pause();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.player.on('ended', () => {\r\n\t\t\tthis.setState({videoEnded: true});\r\n\t\t});\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif (this.player) {\r\n\t\t\tthis.player.dispose()\r\n\t\t}\r\n\t}\r\n\r\n\thandlePlay() {\r\n\t\tif (this.player.paused()) {\r\n\t\t\tthis.player.play();\r\n\t\t} else {\r\n\t\t\tthis.player.pause();\r\n\t\t}\r\n\t}\r\n\r\n\thandleNext() {\r\n\t\tconst { history, nextLink, saveScreenDuration } = this.props;\r\n\t\tsaveScreenDuration();\r\n\t\thistory.push(nextLink);\r\n\t}\r\n\r\n\tisIpadOS() {\r\n\t\treturn (('ontouchstart' in window) || (navigator.maxTouchPoints > 0)) && (/Macintosh/).test(navigator.userAgent);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{(isMobile || isIOS || isMobileSafari || isIOS13 || isIPhone13 || isIPad13 || this.isIpadOS()) ? : ''}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t{this.state.videoEnded && }\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tdata: state.data\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(InstructionVideo);\r\n","import { config } from '../Constants';\r\n\r\nexport const instructionImages = {\r\n verbalInstructions: config.url.CDN_URL + '/Verbal/images/gifted_verbal_online comic.jpg',\r\n nonVerbalInstructionsPreK: config.url.CDN_URL + '/NonVerbal/images/gifted_nonverbal_PreK and K_Online comic.png',\r\n nonVerbalInstructionsBD: config.url.CDN_URL + '/NonVerbal/images/gifted_nonverbal_Gr1-4_Online comic.jpg',\r\n nonVerbalInstructionsEG: config.url.CDN_URL + '/NonVerbal/images/gifted_nonverbal_Gr5-12_Online comic.jpg',\r\n quantInstructionsBD: config.url.CDN_URL + '/Quant/images/gifted_quant_K-Gr4_Online comic.jpg',\r\n quantInstructionsEG: config.url.CDN_URL + '/Quant/images/gifted_quant_Gr5-12_Online Comic.jpg'\r\n};","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { ScreenContainer, ScreenNavigation } from '../../screens/common';\r\nimport { Box } from '@material-ui/core';\r\nimport { instructionImages } from '../../../assets/instruction-images';\r\n\r\nclass InstructionComicStrip extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t}\r\n\r\n\thandleNext() {\r\n\t\tconst { history, nextLink, saveScreenDuration } = this.props;\r\n\t\tsaveScreenDuration();\r\n\t\thistory.push(nextLink);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\"Comic\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tdata: state.data\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(InstructionComicStrip);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { getInstructions } from './common/task-utility';\r\nimport { InstructionVideo, InstructionComicStrip } from './instructions';\r\nimport { instructionImages } from '../../assets/instruction-images';\r\n\r\n\r\nclass AssessmentInstruction extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tinstructions: null,\r\n\t\t\tshowComicStrip: false\r\n\t\t};\r\n\r\n\t\tthis.handleKeydown = this.handleKeydown.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount(){\r\n\t\tconst { grade, versionID } = this.props;\r\n\t\tconst instructions = getInstructions(grade, versionID);\r\n\t\tthis.preloadComicStrip(instructions);\r\n\t\tthis.setState({instructions});\r\n\t\twindow.addEventListener('keydown', this.handleKeydown);\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\twindow.removeEventListener('keydown', this.handleKeydown);\r\n\t}\r\n\r\n\tpreloadComicStrip(instructions) {\r\n\t\tconst img = new Image();\r\n\t\timg.src = instructionImages[instructions];\r\n\t}\r\n\r\n\thandleKeydown(e, key = null) {\r\n\t\tif ((!!e && e.repeat) || (!e && !key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ((key && key === 'k') || (!!e && e.altKey && (e.code === 'KeyK' || e.which === 75))) {\r\n\t\t\tthis.setState({showComicStrip: true}, () => {\r\n\t\t\t\twindow.removeEventListener('keydown', this.handleKeydown);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { instructions, showComicStrip } = this.state;\r\n\r\n\t\tif (!instructions) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (showComicStrip) {\r\n\t\t\treturn \r\n\t\t}\r\n\r\n\t\treturn \r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tgrade: state.data.userData.grade\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AssessmentInstruction);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AssessmentContainer, AssessmentNavigation } from './common';\r\nimport { Box } from '@material-ui/core';\r\nimport { staticImages } from '../../assets/static-images';\r\n\r\nclass AssessmentStart extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.handleBack = this.handleBack.bind(this);\r\n\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t}\r\n\r\n\thandleBack() {\r\n\t\tconst { history, previousLink, saveScreenDuration } = this.props;\r\n\t\tsaveScreenDuration();\r\n\t\thistory.push(previousLink);\r\n\t}\r\n\r\n\thandleNext() {\r\n\t\tconst { history, nextLink, saveScreenDuration, setDateTimeStart } = this.props;\r\n\t\tsetDateTimeStart();\r\n\t\tsaveScreenDuration();\r\n\t\thistory.push(nextLink);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\"Stop\"\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tdata: state.data\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AssessmentStart);","import React, { Component, Fragment } from 'react';\r\nimport { Button } from '@material-ui/core';\r\nimport { staticImages } from '../../assets/static-images';\r\nimport { getTestTimeLimit, taskSegment } from '../assessment/common/task-utility';\r\nimport { localDataExpiry, assessmentStatus } from '../../Constants';\r\nimport './styles/common-style.scss';\r\n\r\nconst connectCommon = (WrappedComponent) => {\r\n\treturn class CommonHOC extends Component {\r\n\t\tconstructor(props) {\r\n\t\t\tsuper(props);\r\n\r\n\t\t\tthis.state = {\r\n\t\t\t\tstartDate: null,\r\n\t\t\t\ttestDuration: 0,\r\n\t\t\t\titemStartDate: new Date(),\r\n\t\t\t\titemStartDurationAt: 0,\r\n\t\t\t\titemDuration: 0,\r\n\t\t\t\tonline: true,\r\n\t\t\t\tpaused: false,\r\n\t\t\t\tpausedStartDate: null,\r\n\t\t\t\tpausedDuration: 0,\r\n\t\t\t\tdisableTimeout: false,\r\n\t\t\t\ttimeAt25min: false,\r\n\t\t\t\ttimeAt30min: false,\r\n\t\t\t\ttimeAt35min: false,\r\n\t\t\t\tshowSavedPopup: false,\r\n\t\t\t\tshowTimerOffPopup: false\r\n\t\t\t};\r\n\r\n\t\t\tthis.timeLimit = 2400;\r\n\t\t\tthis.isTimerActive = false;\r\n\t\t\tthis.updateOnlineStatus = this.updateOnlineStatus.bind(this);\r\n\t\t\tthis.saveScreenDuration = this.saveScreenDuration.bind(this);\r\n\t\t\tthis.startTimer = this.startTimer.bind(this);\r\n\t\t\tthis.pauseTimer = this.pauseTimer.bind(this);\r\n\t\t\tthis.disableTimer = this.disableTimer.bind(this);\r\n\t\t\tthis.setShowSavedPopup = this.setShowSavedPopup.bind(this);\r\n\t\t\tthis.setShowTimerOffPopup = this.setShowTimerOffPopup.bind(this);\r\n\t\t\tthis.setRespAtInterval = this.setRespAtInterval.bind(this);\r\n\t\t\tthis.autoSave = this.autoSave.bind(this);\r\n\t\t\tthis.saveBeforeUnload = this.saveBeforeUnload.bind(this);\r\n\t\t\tthis.saveOnBlur = this.saveOnBlur.bind(this);\r\n\t\t\tthis.togglePause = this.togglePause.bind(this);\r\n\t\t}\r\n\r\n\t\tcomponentDidMount() {\r\n\t\t\tconst { match } = this.props;\r\n\t\t\tconst { type } = match.params;\r\n\r\n\t\t\tif (['/Assessment/Complete', '/Assessment/Timeout', `/Assessment/Tasks/${type}/${taskSegment.TASKCOMPLETE}`].includes(this.props.location.pathname)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\twindow.addEventListener('online', this.updateOnlineStatus);\r\n\t\t\twindow.addEventListener('offline', this.updateOnlineStatus);\r\n\t\t\twindow.addEventListener('beforeunload', this.saveBeforeUnload);\r\n\t\t\twindow.addEventListener('blur', this.saveOnBlur);\r\n\t\t\t// /\\bCrOS\\b/.test(navigator.userAgent) && document.addEventListener('visibilitychange');\r\n\t\t\t(/\\bCrOS\\b/).test(navigator.userAgent) && document.addEventListener('visibilitychange', this.togglePause);\r\n\t\t\tthis.timeLimit = getTestTimeLimit(this.props.data.userData.grade) * 60;\r\n\t\t\tthis.updateOnlineStatus();\r\n\t\t}\r\n\r\n\t\tcomponentDidUpdate() {\r\n\t\t\tconst { history, location, data, match, logToSentry } = this.props;\r\n\t\t\tconst { type } = match.params;\r\n\r\n\t\t\tif ([`/Assessment/Tasks/${type}/${taskSegment.TASKCOMPLETE}`].includes(location.pathname)) {\r\n\t\t\t\twindow.removeEventListener('online', this.updateOnlineStatus);\r\n\t\t\t\twindow.removeEventListener('offline', this.updateOnlineStatus);\r\n\t\t\t\twindow.removeEventListener('beforeunload', this.saveBeforeUnload);\r\n\t\t\t\twindow.removeEventListener('blur', this.saveOnBlur);\r\n\t\t\t}\r\n\r\n\t\t\tif (['/Assessment/Complete', '/Assessment/Timeout', `/Assessment/Tasks/${type}/${taskSegment.TASKCOMPLETE}`].includes(location.pathname)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.state.testDuration >= this.timeLimit) {\r\n\t\t\t\tthis.pauseTimer();\r\n\t\t\t\tthis.saveScreenDuration();\r\n\r\n\t\t\t\tif (this.state.testDuration - this.timeLimit <= 1000) {\r\n\t\t\t\t\tlogToSentry('warning', 'testDuration was slightly greater than timeLimit (<= 1000 ms). This is most likely due to slight inconsistencies when stopping the timer and is expected')\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlogToSentry('error', `testDuartion was notably greater than timeLimit (${this.state.testDuration - this.timeLimit} ms)`, null, null, \r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tfilename: 'localAssessmentData.json', \r\n\t\t\t\t\t\tdata: data \r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\thistory.push('/Assessment/Timeout');\r\n\t\t\t}\r\n\r\n\t\t\tif ('/Assessment/Tasks/ItemList/TaskComplete' === location.pathname) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst currentIndex = data.screens.map(screen => screen.url).indexOf(match.url);\r\n\r\n\t\t\tif (currentIndex !== -1) {\r\n\t\t\t\tlocalStorage.setItem('resumeLocation', location.pathname);\r\n\t\t\t\tlocalStorage.setItem('resumeUser', data.userData.username);\r\n\t\t\t\tlocalStorage.setItem('resumeData', JSON.stringify(data));\r\n\t\t\t\tlocalStorage.setItem('resumeExpiry', (new Date()).getTime() + localDataExpiry);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcomponentWillUnmount() {\r\n\t\t\twindow.removeEventListener('online', this.updateOnlineStatus);\r\n\t\t\twindow.removeEventListener('offline', this.updateOnlineStatus);\r\n\t\t\twindow.removeEventListener('beforeunload', this.saveBeforeUnload);\r\n\t\t\twindow.removeEventListener('blur', this.saveOnBlur);\r\n\t\t\t(/\\bCrOS\\b/).test(navigator.userAgent) && document.removeEventListener('visibilitychange', this.togglePause);\r\n\t\t\tthis.isTimerActive = false;\r\n\t\t\tclearInterval(this.timer);\r\n\t\t\tlocalStorage.clear();\r\n\t\t}\r\n\r\n\t\tupdateOnlineStatus() {\r\n\t\t\tconst { match } = this.props;\r\n\t\t\tthis.setState({online: navigator.onLine});\r\n\t\t\tif (!navigator.onLine) {\r\n\t\t\t\tthis.pauseTimer();\r\n\t\t\t\tthis.saveScreenDuration();\r\n\t\t\t} else if (match.params && match.params.segment === 'Task') {\r\n\t\t\t\tif (localStorage.getItem('disableTimeout') === 'true') {\r\n\t\t\t\t\tthis.disableTimer();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.startTimer();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsaveScreenDuration() {\r\n\t\t\tconst { setScreenDuration, location, match } = this.props;\r\n\t\t\tconst { itemStartDate, itemDuration } = this.state;\r\n\t\t\tconst screenDuration = match.params && match.params.segment === 'Task' ? itemDuration : ((new Date() - itemStartDate) / 1000);\r\n\t\t\tsetScreenDuration(location.pathname, screenDuration);\r\n\t\t\tthis.setState(prevState => ({\r\n\t\t\t\titemStartDate: new Date(),\r\n\t\t\t\titemStartDurationAt: prevState.testDuration,\r\n\t\t\t\titemDuration: 0\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\tstartTimer() {\r\n\t\t\tconst { match } = this.props;\r\n\t\t\tconst { paused, disableTimeout } = this.state;\r\n\r\n\t\t\tif (this.isTimerActive || paused || disableTimeout || (match.params && match.params.segment !== 'Task')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.isTimerActive = true;\r\n\t\t\tconst resumeTestDuration = parseFloat(localStorage.getItem('resumeTime')) || 0;\r\n\t\t\tconst resumePausedDuration = parseFloat(localStorage.getItem('pausedDuration')) || 0;\r\n\r\n\t\t\tthis.setState({\r\n\t\t\t\tstartDate: new Date(),\r\n\t\t\t\titemStartDurationAt: resumeTestDuration,\r\n\t\t\t\ttestDuration: resumeTestDuration,\r\n\t\t\t\tpausedDuration: resumePausedDuration\r\n\t\t\t});\r\n\r\n\t\t\tthis.timer = setInterval(() => {\r\n\t\t\t\tthis.setState(prevState => {\r\n\t\t\t\t\tconst testDuration = resumeTestDuration + ((new Date() - prevState.startDate) / 1000);\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttestDuration,\r\n\t\t\t\t\t\titemDuration: testDuration - prevState.itemStartDurationAt\r\n\t\t\t\t\t}\r\n\t\t\t\t}, () => {\r\n\t\t\t\t\tthis.setRespAtInterval();\r\n\t\t\t\t\tlocalStorage.setItem('resumeTime', this.state.testDuration);\r\n\t\t\t\t});\r\n\t\t\t}, 100);\r\n\t\t}\r\n\r\n\t\tpauseTimer(callback) {\r\n\t\t\tconst { data, location, logToSentry } = this.props;\r\n\t\t\tconst { paused, online, disableTimeout, testDuration } = this.state;\r\n\r\n\t\t\tif (disableTimeout) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (paused && online) {\r\n\t\t\t\tlogToSentry('info', 'User Unpaused Assessment');\r\n\t\t\t\tthis.setState(prevState => ({\r\n\t\t\t\t\titemStartDate: new Date(),\r\n\t\t\t\t\titemStartDurationAt: prevState.testDuration,\r\n\t\t\t\t\titemDuration: 0,\r\n\t\t\t\t\tpaused: false\r\n\t\t\t\t}), () => {\r\n\t\t\t\t\tclearInterval(this.timer);\r\n\t\t\t\t\tthis.isTimerActive = false;\r\n\t\t\t\t\tthis.startTimer();\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tclearInterval(this.timer);\r\n\t\t\tthis.isTimerActive = false;\r\n\r\n\t\t\tif (online) {\r\n\t\t\t\tlogToSentry('info', 'User Paused Assessment');\r\n\t\t\t\tconst resumePausedDuration = parseFloat(localStorage.getItem('pausedDuration')) || 0;\r\n\t\t\t\tthis.setState({\r\n\t\t\t\t\tpaused: true,\r\n\t\t\t\t\tpausedStartDate: new Date(),\r\n\t\t\t\t\tpausedDuration: resumePausedDuration\r\n\t\t\t\t});\r\n\t\t\t\tthis.timer = setInterval(() => {\r\n\t\t\t\t\tthis.setState(prevState => ({\r\n\t\t\t\t\t\tpausedDuration: resumePausedDuration + ((new Date() - prevState.pausedStartDate) / 1000)\r\n\t\t\t\t\t}), () => {\r\n\t\t\t\t\t\tconst { pausedDuration } = this.state;\r\n\t\t\t\t\t\tdata.userData.pausedDuration = pausedDuration;\r\n\t\t\t\t\t\tlocalStorage.setItem('pausedDuration', pausedDuration);\r\n\t\t\t\t\t});\r\n\t\t\t\t}, 100);\r\n\t\t\t}\r\n\r\n\t\t\tcallback && callback();\r\n\t\t}\r\n\r\n\t\tdisableTimer() {\r\n\t\t\tif (this.state.disableTimeout) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tclearInterval(this.timer);\r\n\t\t\tthis.isTimerActive = false;\r\n\r\n\t\t\tthis.setState({\r\n\t\t\t\tdisableTimeout: true,\r\n\t\t\t\tshowTimerOffPopup: true\r\n\t\t\t});\r\n\r\n\t\t\tlocalStorage.setItem('disableTimeout', 'true');\r\n\t\t}\r\n\r\n\t\tsetShowSavedPopup(showSavedPopup, callback) {\r\n\t\t\tthis.setState({showSavedPopup}, () => {\r\n\t\t\t\tcallback && callback();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsetShowTimerOffPopup(showTimerOffPopup) {\r\n\t\t\tthis.setState({showTimerOffPopup});\r\n\t\t}\r\n\r\n\t\tsetRespAtInterval() {\r\n\t\t\tconst { testDuration, timeAt25min, timeAt30min, timeAt35min } = this.state;\r\n\r\n\t\t\tif (timeAt25min && timeAt30min && timeAt35min) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst { tasks, setRespAt25min, setRespAt30min, setRespAt35min } = this.props;\r\n\t\t\tconst elapsed = testDuration / 60;\r\n\r\n\t\t\tif (elapsed >= 25 && !timeAt25min) {\r\n\t\t\t\tsetRespAt25min(tasks);\r\n\t\t\t\tthis.setState({timeAt25min: true});\r\n\t\t\t} else if (elapsed >= 30 && !timeAt30min) {\r\n\t\t\t\tsetRespAt30min(tasks);\r\n\t\t\t\tthis.setState({timeAt30min: true});\r\n\t\t\t} else if (elapsed >= 35 && !timeAt35min) {\r\n\t\t\t\tsetRespAt35min(tasks);\r\n\t\t\t\tthis.setState({timeAt35min: true});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tautoSave() {\r\n\t\t\tconst { save, data, match, setAssessmentStatus } = this.props;\r\n\t\t\tconst { username, tests } = data.userData;\r\n\t\t\tconst testIndex = tests.findIndex(test => test.versionNum === data.versionID);\r\n\t\t\tconst testData = {\r\n\t\t\t\tusername,\r\n\t\t\t\ttestName: tests[testIndex].fullName,\r\n\t\t\t\tvalue: 0,\r\n\t\t\t};\r\n\r\n\t\t\tif (match.params.segment === 'TaskComplete') {\r\n\t\t\t\tsetAssessmentStatus(assessmentStatus.Complete);\r\n\t\t\t\ttestData.forceComplete = true;\r\n\t\t\t\ttestData.value = 1;\r\n\t\t\t\tlocalStorage.clear();\r\n\t\t\t} else {\r\n\t\t\t\tsetAssessmentStatus(assessmentStatus.InProgress);\r\n\t\t\t}\r\n\r\n\t\t\tthis.saveScreenDuration();\r\n\t\t\tsave(testData);\r\n\t\t}\r\n\r\n\t\tsaveBeforeUnload(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.autoSave();\r\n\t\t\treturn event.returnValue = 'Are you sure you want to close?';\r\n\t\t}\r\n\r\n\t\tsaveOnBlur() {\r\n\t\t\tthis.autoSave();\r\n\t\t}\r\n\r\n\t\ttogglePause() {\r\n\t\t\tthis.pauseTimer();\r\n\t\t}\r\n\r\n\t\trender() {\r\n\t\t\tconst props = {\r\n\t\t\t\t...this.props,\r\n\t\t\t\tsaveScreenDuration: this.saveScreenDuration,\r\n\t\t\t\tstartTimer: this.startTimer,\r\n\t\t\t\tpauseTimer: this.pauseTimer,\r\n\t\t\t\tdisableTimer: this.disableTimer,\r\n\t\t\t\tsetShowSavedPopup: this.setShowSavedPopup\r\n\t\t\t};\r\n\r\n\t\t\tconst { online, paused, showSavedPopup, showTimerOffPopup } = this.state;\r\n\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t{showSavedPopup && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

Responses saved.

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showTimerOffPopup && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

Timer turned off.

\r\n\t\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{!online && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\"Error\"\r\n\t\t\t\t\t\t\t\t

Network connection lost:
Please contact your administrator.

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{!!paused && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\"Pause\"\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\tPaused.\r\n\t\t\t\t\t\t\t\t\t{!online && <>
(Connection is currently offline)}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default connectCommon;\r\n","import React, { Component } from 'react';\r\nimport { getTestByVersion } from '../common/task-utility';\r\nimport { isMobile, isIOS, isMobileSafari, isIOS13, isIPhone13, isIPad13 } from 'react-device-detect';\r\nimport {\r\n\tAssessmentContainer,\r\n\tAssessmentHeader,\r\n\tAssessmentNavigation,\r\n\tOnScreenKeyboard\r\n} from '../common';\r\n\r\nconst createTask = (WrappedComponent, classNames) => {\r\n\treturn class Task extends Component {\r\n\t\tconstructor(props) {\r\n\t\t\tsuper(props);\r\n\r\n\t\t\tthis.state = {\r\n\t\t\t\tcontainerClass: '',\r\n\t\t\t\tdisableArrows: true\r\n\t\t\t};\r\n\r\n\t\t\tthis.preloaded = false;\r\n\t\t\tthis.task = {};\r\n\t\t\tthis.headerText = '';\r\n\t\t\tthis.handleKeydown = this.handleKeydown.bind(this);\r\n\t\t\tthis.selectResponse = this.selectResponse.bind(this);\r\n\t\t\tthis.handleBack = this.handleBack.bind(this);\r\n\t\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t\t}\r\n\r\n\t\tcomponentDidMount() {\r\n\t\t\tconst { subTaskType, startTimer } = this.props;\r\n\r\n\t\t\tif (subTaskType.type === 'tasks') {\r\n\t\t\t\tstartTimer();\r\n\t\t\t}\r\n\r\n\t\t\tthis.delayArrows();\r\n\t\t\tthis.preloadImages();\r\n\t\t\tthis.preloaded = true;\r\n\t\t\twindow.addEventListener('keydown', this.handleKeydown);\r\n\t\t}\r\n\r\n\t\tcomponentDidUpdate() {\r\n\t\t\tif (!this.preloaded) {\r\n\t\t\t\tthis.preloadImages();\r\n\t\t\t\tthis.preloaded = true;\r\n\t\t\t}\r\n\r\n\t\t\tthis.delayArrows();\r\n\t\t}\r\n\r\n\t\tcomponentWillUnmount() {\r\n\t\t\twindow.removeEventListener('keydown', this.handleKeydown);\r\n\t\t}\r\n\r\n\t\thandleKeydown(e, key = null) {\r\n\t\t\tif ((!!e && e.repeat) || (!e && !key)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst { save, data, pauseTimer, disableTimer, saveScreenDuration, setShowSavedPopup, logToSentry } = this.props;\r\n\t\t\tconst { username, tests } = data.userData;\r\n\t\t\tconst testIndex = tests.findIndex(test => test.versionNum === data.versionID);\r\n\r\n\t\t\tif ((key && key === 's') || (!!e && e.altKey && (e.code === 'KeyS' || e.which === 83))) {\r\n\t\t\t\tlogToSentry('info', 'User Forced Save')\r\n\t\t\t\tsetShowSavedPopup(true, () => {\r\n\t\t\t\t\tsaveScreenDuration();\r\n\t\t\t\t\tsave({\r\n\t\t\t\t\t\tusername,\r\n\t\t\t\t\t\ttestName: tests[testIndex].fullName,\r\n\t\t\t\t\t\tvalue: 0\r\n\t\t\t\t\t})\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif ((key && key === 't') || (!!e && e.altKey && (e.code === 'KeyT' || e.which === 84))) {\r\n\t\t\t\tlogToSentry('info', 'User Disabled Timer')\r\n\t\t\t\tdisableTimer();\r\n\t\t\t}\r\n\r\n\t\t\tif ((key && key === 'u') || (!!e && e.altKey && (e.code === 'KeyU' || e.which === 85))) {\r\n\t\t\t\tlogToSentry('info', 'User invoked pause key')\r\n\t\t\t\tpauseTimer(() => {\r\n\t\t\t\t\tsaveScreenDuration();\r\n\t\t\t\t\tsave({\r\n\t\t\t\t\t\tusername,\r\n\t\t\t\t\t\ttestName: tests[testIndex].fullName,\r\n\t\t\t\t\t\tvalue: 0\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpreloadImages() {\r\n\t\t\tconst { tasks } = this.props;\r\n\r\n\t\t\tconst preloadTasks = {\r\n\t\t\t\tcurrentTask: tasks[this.currentIndex],\r\n\t\t\t\tprevTask: this.isBackVisible() ? tasks[this.prevIndex] : null,\r\n\t\t\t\tnextTask: this.isNextVisible() ? tasks[this.nextIndex] : null,\r\n\t\t\t};\r\n\r\n\t\t\tObject.keys(preloadTasks).forEach(key => {\r\n\t\t\t\tif (!preloadTasks[key]) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpreloadTasks[key].mediaPath.forEach(url => {\r\n\t\t\t\t\tconst img = new Image();\r\n\t\t\t\t\timg.src = url;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tdelayArrows() {\r\n\t\t\tif (this.state.disableArrows) {\r\n\t\t\t\tsetTimeout(() => this.setState({disableArrows: false}), 500);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsetCurrentIndex() {\r\n\t\t\tlet currentIndex = 0;\r\n\t\t\tconst { index } = this.props.match.params;\r\n\r\n\t\t\tif (index !== undefined) {\r\n\t\t\t\tcurrentIndex = index - 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.currentIndex = currentIndex;\r\n\t\t\tthis.prevIndex = currentIndex - 1;\r\n\t\t\tthis.nextIndex = currentIndex + 1;\r\n\t\t}\r\n\r\n\t\tsetCurrentTask() {\r\n\t\t\tconst { history, tasks, subTaskType, versionID } = this.props;\r\n\t\t\tconst currentIndex = this.currentIndex;\r\n\t\t\tconst task = tasks[currentIndex];\r\n\t\t\tconst test = getTestByVersion(versionID);\r\n\r\n\t\t\tif (!task) {\r\n\t\t\t\tthis.task = null;\r\n\t\t\t\thistory.goBack();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (test === 'Quant' || subTaskType.type === 'practice') {\r\n\t\t\t\ttask.options.forEach((option, i) => {\r\n\t\t\t\t\tif (test === 'Quant') {\r\n\t\t\t\t\t\ttask.options[i].text = ['A', 'B', 'C', 'D', 'E'][i];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (subTaskType.type === 'practice') {\r\n\t\t\t\t\t\ttask.options[i].isCorrect = option.value === task.requiredResponse;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.task = task;\r\n\t\t}\r\n\r\n\t\tsetHeaderText() {\r\n\t\t\tconst currentIndex = this.currentIndex;\r\n\t\t\tthis.headerText = this.props.subTaskType.type === 'practice' ? ['A', 'B', 'C'][currentIndex] : (currentIndex + 1);\r\n\t\t}\r\n\r\n\t\tselectResponse(response) {\r\n\t\t\tconst { taskType, subTaskType, setTaskResponse } = this.props;\r\n\t\t\tsetTaskResponse(this.task, taskType, subTaskType, response);\r\n\r\n\t\t\tif (subTaskType.type === 'practice') {\r\n\t\t\t\tthis.setState(prevState => {\r\n\t\t\t\t\tif (!prevState.containerClass.includes('show-correct')) {\r\n\t\t\t\t\t\treturn {containerClass: ' show-correct'};\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thandleBack() {\r\n\t\t\tif (this.state.disableArrows) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst { history, previousLink, saveScreenDuration } = this.props;\r\n\t\t\tthis.setState({disableArrows: true});\r\n\t\t\tsaveScreenDuration();\r\n\t\t\tthis.preloaded = false;\r\n\t\t\thistory.push(previousLink);\r\n\t\t}\r\n\r\n\t\thandleNext() {\r\n\t\t\tif (this.state.disableArrows) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst { history, nextLink, subTaskType, saveScreenDuration } = this.props;\r\n\t\t\tconst { response, requiredResponse } = this.task;\r\n\t\t\tthis.task.isCorrect = response.includes(requiredResponse) ? 1 : 0;\r\n\t\t\tthis.task.response = response.map(item => {\r\n\t\t\t\titem = item < 0 ? 0 : item;\r\n\t\t\t\treturn item;\r\n\t\t\t});\r\n\r\n\t\t\tif (subTaskType.type === 'practice') {\r\n\t\t\t\tif (!this.task.isCorrect) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setState({containerClass: ''});\r\n\t\t\t}\r\n\r\n\t\t\tthis.setState({disableArrows: true});\r\n\t\t\tsaveScreenDuration();\r\n\t\t\tthis.preloaded = false;\r\n\t\t\thistory.push(nextLink);\r\n\t\t}\r\n\r\n\t\tisBackVisible() {\r\n\t\t\tconst { subTaskType, match } = this.props;\r\n\r\n\t\t\tif (subTaskType.type === 'practice' || match.params.index <= 1) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tisNextVisible() {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tisIpadOS() {\r\n\t\t\treturn (('ontouchstart' in window) || (navigator.maxTouchPoints > 0)) && (/Macintosh/).test(navigator.userAgent);\r\n\t\t}\r\n\r\n\t\trender() {\r\n\t\t\tthis.setCurrentIndex();\r\n\t\t\tthis.setCurrentTask();\r\n\t\t\tthis.setHeaderText();\r\n\r\n\t\t\tif (!this.task) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t{(isMobile || isIOS || isMobileSafari || isIOS13 || isIPhone13 || isIPad13 || this.isIpadOS()) && this.props.subTaskType.type === 'tasks' ? : ''}\r\n\t\t\t\t\t{this.headerText}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default createTask;","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux'\r\nimport * as actionCreator from '../../../redux/actions/data-action';\r\nimport { AssessmentBody, AssessmentResponse } from '../common';\r\nimport { taskType, subTaskType, getTasks } from '../common/task-utility';\r\nimport createTask from '../tasks/tasks';\r\n\r\nclass PracticeTaskVerbal extends Component {\r\n\trender() {\r\n\t\tconst { task, selectResponse } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\ttasks : getTasks(state.data.tasks, taskType.ITEMLIST, subTaskType.PRACTICE),\r\n\ttaskType: taskType.ITEMLIST,\r\n\tsubTaskType: subTaskType.PRACTICE,\r\n});\r\n\r\nconst classNames = {\r\n\tcontainer: 'practice-container',\r\n\theader: 'verbal-header',\r\n\tnavigation: 'verbal-navigation'\r\n};\r\n\r\nexport default connect(\r\n\tmapStateToProps,\r\n\tObject.assign({}, actionCreator)\r\n)(createTask(PracticeTaskVerbal, classNames));","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux'\r\nimport * as actionCreator from '../../../redux/actions/data-action';\r\nimport { AssessmentBody, AssessmentQuestion, AssessmentResponse } from '../common';\r\nimport { taskType, subTaskType, getTasks } from '../common/task-utility';\r\nimport createTask from '../tasks/tasks';\r\n\r\nclass PracticeTaskNonVerbal extends Component {\r\n\trender() {\r\n\t\tconst { task, selectResponse } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\ttasks : getTasks(state.data.tasks, taskType.ITEMLIST, subTaskType.PRACTICE),\r\n\ttaskType: taskType.ITEMLIST,\r\n\tsubTaskType: subTaskType.PRACTICE,\r\n});\r\n\r\nconst classNames = {\r\n\tcontainer: 'practice-container',\r\n\theader: 'non-verbal-header',\r\n\tnavigation: 'non-verbal-navigation'\r\n};\r\n\r\nexport default connect(\r\n\tmapStateToProps,\r\n\tObject.assign({}, actionCreator)\r\n)(createTask(PracticeTaskNonVerbal, classNames));","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux'\r\nimport * as actionCreator from '../../../redux/actions/data-action';\r\nimport { AssessmentBody, AssessmentQuestion, AssessmentResponse } from '../common';\r\nimport { taskType, subTaskType, getTasks } from '../common/task-utility';\r\nimport createTask from '../tasks/tasks';\r\n\r\nclass PracticeTaskQuantitative extends Component {\r\n\trender() {\r\n\t\tconst { task, selectResponse } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\ttasks : getTasks(state.data.tasks, taskType.ITEMLIST, subTaskType.PRACTICE),\r\n\ttaskType: taskType.ITEMLIST,\r\n\tsubTaskType: subTaskType.PRACTICE,\r\n});\r\n\r\nconst classNames = {\r\n\tcontainer: 'practice-container',\r\n\theader: 'quantitative-header',\r\n\tnavigation: 'quantitative-navigation'\r\n};\r\n\r\nexport default connect(\r\n\tmapStateToProps,\r\n\tObject.assign({}, actionCreator)\r\n)(createTask(PracticeTaskQuantitative, classNames));","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux'\r\nimport * as actionCreator from '../../../redux/actions/data-action';\r\nimport { AssessmentBody, AssessmentResponse } from '../common';\r\nimport { taskType, subTaskType, getTasks } from '../common/task-utility';\r\nimport createTask from '../tasks/tasks';\r\n\r\nclass TaskVerbal extends Component {\r\n\trender() {\r\n\t\tconst { task, selectResponse } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\ttasks : getTasks(state.data.tasks, taskType.ITEMLIST, subTaskType.TASKS),\r\n\ttaskType: taskType.ITEMLIST,\r\n\tsubTaskType: subTaskType.TASKS,\r\n});\r\n\r\nconst classNames = {\r\n\tcontainer: 'task-container verbal-container',\r\n\theader: 'verbal-header',\r\n\tnavigation: 'verbal-navigation'\r\n};\r\n\r\nexport default connect(\r\n\tmapStateToProps,\r\n\tObject.assign({}, actionCreator)\r\n)(createTask(TaskVerbal, classNames));","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux'\r\nimport * as actionCreator from '../../../redux/actions/data-action';\r\nimport { AssessmentBody, AssessmentQuestion, AssessmentResponse } from '../common';\r\nimport { taskType, subTaskType, getTasks } from '../common/task-utility';\r\nimport createTask from '../tasks/tasks';\r\n\r\nclass TaskNonVerbal extends Component {\r\n\trender() {\r\n\t\tconst { task, selectResponse } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\ttasks : getTasks(state.data.tasks, taskType.ITEMLIST, subTaskType.TASKS),\r\n\ttaskType: taskType.ITEMLIST,\r\n\tsubTaskType: subTaskType.TASKS,\r\n});\r\n\r\nconst classNames = {\r\n\tcontainer: 'task-container',\r\n\theader: 'non-verbal-header',\r\n\tnavigation: 'non-verbal-navigation'\r\n};\r\n\r\nexport default connect(\r\n\tmapStateToProps,\r\n\tObject.assign({}, actionCreator)\r\n)(createTask(TaskNonVerbal, classNames));","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux'\r\nimport * as actionCreator from '../../../redux/actions/data-action';\r\nimport { AssessmentBody, AssessmentQuestion, AssessmentResponse } from '../common';\r\nimport { taskType, subTaskType, getTasks } from '../common/task-utility';\r\nimport createTask from '../tasks/tasks';\r\n\r\nclass TaskQuantitative extends Component {\r\n\trender() {\r\n\t\tconst { task, selectResponse } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\ttasks : getTasks(state.data.tasks, taskType.ITEMLIST, subTaskType.TASKS),\r\n\ttaskType: taskType.ITEMLIST,\r\n\tsubTaskType: subTaskType.TASKS,\r\n});\r\n\r\nconst classNames = {\r\n\tcontainer: 'task-container',\r\n\theader: 'quantitative-header',\r\n\tnavigation: 'quantitative-navigation'\r\n};\r\n\r\nexport default connect(\r\n\tmapStateToProps,\r\n\tObject.assign({}, actionCreator)\r\n)(createTask(TaskQuantitative, classNames));","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport connectCommon from '../common/common-hoc';\r\nimport * as actionCreator from '../../redux/actions/data-action';\r\nimport { taskSegment } from './common/task-utility';\r\n\r\nimport {\r\n\tAssessmentInstruction,\r\n\tAssessmentStart,\r\n\tAssessmentEnd,\r\n} from '../assessment';\r\n\r\nimport { getPracticeComponent } from './practice-tasks';\r\nimport { getTaskComponent } from './tasks';\r\n\r\nclass AssessmentTasks extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.updated = false;\r\n\t\tthis.checkResume = false;\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { history, resumeSession } = this.props;\r\n\t\tconst resumeLocation = localStorage.getItem('resumeLocation');\r\n\t\tconst resumeData = localStorage.getItem('resumeData');\r\n\t\tconst resumeExpiry = parseInt(localStorage.getItem('resumeExpiry'));\r\n\r\n\t\tif (resumeLocation && resumeData) {\r\n\t\t\tif (resumeExpiry && new Date() > resumeExpiry) {\r\n\t\t\t\tlocalStorage.clear();\r\n\t\t\t} else {\r\n\t\t\t\tresumeSession(JSON.parse(resumeData));\r\n\t\t\t\thistory.push(resumeLocation);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdocument.oncontextmenu = () => false;\r\n\t}\r\n\r\n\tcomponentDidUpdate() {\r\n\t\tconst { screens, match, history, resumeSession, logToSentry, data, updateValue } = this.props;\r\n\r\n\t\tlet currentIndex = screens.map(screen => screen.url).indexOf(match.url);\r\n\t\tconst resumeLocation = localStorage.getItem('resumeLocation');\r\n\t\tconst resumeData = localStorage.getItem('resumeData');\r\n\t\r\n\r\n\t\tif (currentIndex === -1 && match.url !== '/Assessment/Tasks/ItemList/TaskComplete' && resumeLocation && resumeData) {\r\n\t\t\tlogToSentry('error', 'Current index equal to -1. Attempting to restore last known good', null, null, \r\n\t\t\t{\r\n\t\t\t\tfilename: 'assessmentScreenData.json',\r\n\t\t\t\tdata: screens\r\n\t\t\t})\r\n\r\n\t\t\tresumeSession(JSON.parse(resumeData));\r\n\r\n\t\t\tthis.checkResume = true;\r\n\r\n\t\t\thistory.push(resumeLocation);\r\n\t\t}\r\n\r\n\t\tif (this.checkResume && currentIndex !== -1) {\r\n\t\t\tlogToSentry('info', 'Last known good successfully restored', null, null, \r\n\t\t\t{\r\n\t\t\t\tfilename: 'assessmentScreenData.json',\r\n\t\t\t\tdata: screens\r\n\t\t\t})\r\n\t\t\t\r\n\t\t\tthis.checkResume = false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPreviousLink() {\r\n\t\tconst { screens, match } = this.props;\r\n\t\tconst { segment } = match.params;\r\n\t\tconst currentIndex = segment === taskSegment.TASKCOMPLETE ? screens.length : screens.map(screen => screen.url).indexOf(match.url);\r\n\t\tconst previousIndex = currentIndex - 1;\r\n\r\n\t\tif (currentIndex > 0) {\r\n\t\t\treturn screens[previousIndex].url;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextLink() {\r\n\t\tconst { data, screens, match, logToSentry } = this.props;\r\n\t\tconst { type, segment } = match.params;\r\n\t\tconst currentIndex = screens.map(screen => screen.url).indexOf(match.url);\r\n\t\tconst nextIndex = currentIndex + 1;\r\n\r\n\t\tif (currentIndex === -1 && match.url !== '/Assessment/Tasks/ItemList/TaskComplete') {\r\n\t\t\tlogToSentry('error', 'Current index equal to -1', null, null,\r\n\t\t\t{\r\n\t\t\t\tfilename: 'assessmentScreenData.json',\r\n\t\t\t\tdata: screens\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (nextIndex > screens.length) {\r\n\t\t\tlogToSentry('error', 'Next index greater than screen array size', null, null,\r\n\t\t\t{\r\n\t\t\t\tfilename: 'assessmentScreenData.json',\r\n\t\t\t\tdata: screens\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (currentIndex >= 0 && nextIndex < screens.length) {\r\n\t\t\treturn screens[nextIndex].url;\r\n\t\t} else if(segment !== taskSegment.TASKCOMPLETE) {\r\n\t\t\treturn `/Assessment/Tasks/${type}/${taskSegment.TASKCOMPLETE}`;\r\n\t\t} else {\r\n\t\t\treturn '/Assessment/Complete';\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { versionID, match } = this.props;\r\n\t\tconst { segment } = match.params;\r\n\r\n\t\tconst segmentProps = {\r\n\t\t\tpreviousLink: this.getPreviousLink(),\r\n\t\t\tnextLink: this.getNextLink(),\r\n\t\t\t...this.props\r\n\t\t};\r\n\r\n\t\tswitch (segment) {\r\n\t\t\tcase taskSegment.INSTRUCTION:\r\n\t\t\t\treturn \r\n\r\n\t\t\tcase taskSegment.PRACTICE:\r\n\t\t\t\tconst Practice = getPracticeComponent(versionID);\r\n\t\t\t\treturn \r\n\r\n\t\t\tcase taskSegment.PRACTICECOMPLETE:\r\n\t\t\t\treturn \r\n\r\n\t\t\tcase taskSegment.TASK:\r\n\t\t\t\tconst Task = getTaskComponent(versionID);\r\n\t\t\t\treturn \r\n\r\n\t\t\tcase taskSegment.TASKCOMPLETE:\r\n\t\t\t\treturn \r\n\r\n\t\t\tdefault:\r\n\t\t\t\treturn \r\n\t\t}\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n\tconst { data } = state;\r\n\tconst { versionID, screens, tasks, outcomes } = data;\r\n\treturn { data, versionID, screens, tasks, outcomes };\r\n};\r\n\r\nexport default connect(mapStateToProps, actionCreator)(connectCommon(AssessmentTasks));","import PracticeTaskVerbal from './practice-task-verbal';\r\nimport PracticeTaskNonVerbal from './practice-task-non-verbal';\r\nimport PracticeTaskQuantitative from './practice-task-quantitative';\r\nimport { getTestByVersion } from '../common/task-utility';\r\n\r\nexport const getPracticeComponent = versionId => {\r\n\tconst test = getTestByVersion(versionId);\r\n\r\n\tswitch (test) {\r\n\t\tcase 'Verbal':\r\n\t\t\treturn PracticeTaskVerbal;\r\n\t\t\r\n\t\tcase 'NonVerbal':\r\n\t\t\treturn PracticeTaskNonVerbal;\r\n\t\t\r\n\t\tcase 'Quant':\r\n\t\t\treturn PracticeTaskQuantitative;\r\n\t\t\r\n\t\tdefault:\r\n\t\t\treturn null;\r\n\t}\r\n};","import TaskVerbal from './task-verbal';\r\nimport TaskNonVerbal from './task-non-verbal';\r\nimport TaskQuantitative from './task-quantitative';\r\nimport { getTestByVersion } from '../common/task-utility';\r\n\r\nexport const getTaskComponent = versionId => {\r\n\tconst test = getTestByVersion(versionId);\r\n\r\n\tswitch (test) {\r\n\t\tcase 'Verbal':\r\n\t\t\treturn TaskVerbal;\r\n\t\t\r\n\t\tcase 'NonVerbal':\r\n\t\t\treturn TaskNonVerbal;\r\n\t\t\r\n\t\tcase 'Quant':\r\n\t\t\treturn TaskQuantitative;\r\n\t\t\r\n\t\tdefault:\r\n\t\t\treturn null;\r\n\t}\r\n};","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AssessmentContainer, AssessmentNavigation } from './common';\r\nimport { assessmentStatus } from '../../Constants';\r\n\r\nclass AssessmentEnd extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.handleBack = this.handleBack.bind(this);\r\n\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst {\r\n\t\t\tversionID,\r\n\t\t\tuserData,\r\n\t\t\tsetTermination,\r\n\t\t\tsetAssessmentStatus,\r\n\t\t\tsaveScreenDuration,\r\n\t\t\tsave\r\n\t\t} = this.props;\r\n\r\n\t\tconst { username, tests } = userData;\r\n\t\tconst testIndex = tests.findIndex(test => test.versionNum === versionID);\r\n\t\ttests[testIndex].isCompleted = 1;\r\n\t\tsetAssessmentStatus(assessmentStatus.Complete);\r\n\t\tsaveScreenDuration();\r\n\t\t// save({\r\n\t\t// \tusername,\r\n\t\t// \ttestName: tests[testIndex].fullName,\r\n\t\t// \tvalue: 1\r\n\t\t// });\r\n\t}\r\n\r\n\thandleBack() {\r\n\t\tconst {\r\n\t\t\tversionID,\r\n\t\t\tuserData,\r\n\t\t\tsetTermination,\r\n\t\t\tsetUserData,\r\n\t\t\tsetAssessmentStatus,\r\n\t\t\tsaveScreenDuration,\r\n\t\t\tsave,\r\n\t\t\thistory,\r\n\t\t\tpreviousLink\r\n\t\t} = this.props;\r\n\r\n\t\tconst { username, tests } = userData;\r\n\t\tconst testIndex = tests.findIndex(test => test.versionNum === versionID);\r\n\t\ttests[testIndex].isCompleted = 0;\r\n\t\tsetAssessmentStatus(assessmentStatus.InProgress);\r\n\t\tsaveScreenDuration();\r\n\t\tsave({\r\n\t\t\tusername,\r\n\t\t\ttestName: tests[testIndex].fullName,\r\n\t\t\tvalue: 0\r\n\t\t});\r\n\t\thistory.push(previousLink);\r\n\t}\r\n\r\n\thandleNext() {\r\n\t\tconst { history, nextLink } = this.props;\r\n\t\thistory.push(nextLink);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tversionID: state.data.versionID,\r\n\tuserData: state.data.userData\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AssessmentEnd);","import React, { Component, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport connectCommon from '../common/common-hoc';\r\nimport * as actionCreator from '../../redux/actions/data-action';\r\nimport { AssessmentContainer, AssessmentNavigation } from './common';\r\nimport { terminationType, taskType } from './common/task-utility';\r\nimport { Box } from '@material-ui/core';\r\nimport { staticImages } from '../../assets/static-images';\r\nimport { assessmentStatus } from '../../Constants';\r\n\r\nclass AssessmentComplete extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tshowNext: false,\r\n\t\t\thasTests: false,\r\n\t\t\tisSaving: true\r\n\t\t};\r\n\r\n\t\tthis.handleNext = this.handleNext.bind(this);\r\n\t\tthis.preventBack = this.preventBack.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst {\r\n\t\t\tdata,\r\n\t\t\tmatch,\r\n\t\t\tversionID,\r\n\t\t\tuserData,\r\n\t\t\tsetTermination,\r\n\t\t\tsetUserData,\r\n\t\t\tsetAssessmentStatus,\r\n\t\t\tsaveScreenDuration,\r\n\t\t\tsave,\r\n\t\t\tlogToSentry\r\n\t\t} = this.props;\r\n\r\n\t\tconst { username, tests } = userData;\r\n\t\tconst testIndex = tests.findIndex(test => test.versionNum === versionID);\r\n\t\ttests[testIndex].isCompleted = 1;\r\n\r\n\t\tif (match.path === '/Assessment/Timeout') {\r\n\t\t\tlogToSentry('warning', 'User timed out', null)\r\n\t\t\tsetTermination(terminationType.TIMEDOUT);\r\n\t\t}\r\n\r\n\t\tvar unseenItems = [];\r\n\r\n\t\tconst { tasks } = this.props;\r\n\t\tconsole.log(this.props);\r\n\t\tconst taskIndex = tasks.map(task => task.id).indexOf(taskType.ITEMLIST.id);\r\n\r\n\t\ttasks[taskIndex].tasks.filter(task => !task.skipped).forEach((task, index) => {\r\n\t\t\tif (task.response < 0) {\r\n\t\t\t\tunseenItems.push((index + 1));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (unseenItems.length != 0) {\r\n\t\t\tvar items = tasks[taskIndex].tasks.filter(task => !task.skipped)\r\n\t\t\tif (unseenItems.length == items.length) {\r\n\t\t\t\tlogToSentry('error', `User had all items marked as unseen`, null, {\r\n\t\t\t\t\tunseenItems: unseenItems.length\r\n\t\t\t\t}, {\r\n\t\t\t\t\tfilename: 'localAssessmentData.json',\r\n\t\t\t\t\tdata: data\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tlogToSentry('warning', `User had unseen items`, null, {\r\n\t\t\t\t\tunseenItems: unseenItems.length\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsetUserData(userData);\r\n\t\tsetAssessmentStatus(assessmentStatus.Complete);\r\n\t\tsaveScreenDuration();\r\n\r\n\t\t// DO NOT REMOVE THIS SAVE. THIS SAVE IS FOR WHEN USERS TIMEOUT\r\n\t\tvar curDate = new Date();\r\n\r\n\t\tsave({\r\n\t\t\tusername,\r\n\t\t\ttestName: tests[testIndex].fullName,\r\n\t\t\tvalue: 1\r\n\t\t}, () => {\r\n\t\t\tvar newDate = new Date();\r\n\t\t\tvar diff = (newDate.getTime() - curDate.getTime()) / 1000;\r\n\t\t\tif (diff < 1)\r\n\t\t\t\tsetTimeout(() => {this.setState({isSaving: false})}, 1000)\r\n\t\t\telse\r\n\t\t\tthis.setState({isSaving: false})\r\n\t\t});\r\n\r\n\t\tlocalStorage.clear();\r\n\r\n\t\tconst visibleTests = Object.values(tests).filter(test => test.sortOrder !== 0 && test.isCompleted === 0);\r\n\t\tconst hasTests = visibleTests.length > 0;\r\n\t\tthis.setState({hasTests});\r\n\r\n\t\tthis.timer = setTimeout(() => {\r\n\t\t\tthis.setState({showNext: hasTests});\r\n\t\t}, 300000);\r\n\r\n\t\twindow.history.pushState(null, null, window.location.href);\r\n\t\twindow.addEventListener('popstate', this.preventBack);\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tclearTimeout(this.timer);\r\n\t\twindow.removeEventListener('popstate', this.preventBack);\r\n\t}\r\n\r\n\thandleNext() {\r\n\t\tthis.props.history.push('/Home');\r\n\t}\r\n\r\n\tpreventBack() {\r\n\t\tthis.props.history.go(1);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.state.isSaving ? (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t) : null\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{this.state.hasTests ? (\r\n\t\t\t\t\t\t\t\"Stop\"\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\"Completed\"\r\n\t\t\t\t\t\t\t\tThank You.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tdata: state.data,\r\n\ttasks: state.data.tasks,\r\n\tversionID: state.data.versionID,\r\n\tuserData: state.data.userData\r\n});\r\n\r\nexport default connect(mapStateToProps, actionCreator)(connectCommon(AssessmentComplete));","import {\r\n\tAssessmentTasks,\r\n AssessmentComplete\r\n} from '../components/assessment';\r\nimport { taskSegment } from '../components/assessment/common/task-utility';\r\n\r\nexport const TaskRoutes = [\r\n { path: '/Assessment/Tasks/:type/:segment?/:index?', component: AssessmentTasks, monitorProgress: true },\r\n { path: `/Assessment/Tasks/:type/${taskSegment.TASKCOMPLETE}`, component: AssessmentTasks, monitorProgress: false }\r\n];\r\n\r\nexport const AssessmentRoutes = [\r\n { path: '/Assessment/Complete', component: AssessmentComplete, monitorProgress: false },\r\n { path: '/Assessment/Timeout', component: AssessmentComplete, monitorProgress: false }\r\n];","import React from \"react\";\r\nimport { connect } from 'react-redux';\r\nimport { Route } from 'react-router-dom';\r\n// import { Route, Redirect } from 'react-router-dom';\r\n\r\nfunction SessionRequiredRoute({component: Component, ...rest}) {\r\n\treturn (\r\n\t\t {\r\n\t\t\t\t// return rest.sessionID ? : \r\n\t\t\t\treturn \r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nconst mapStateToProps = (state, ownState) => ({\r\n\tsessionID: state.data.sessionID\r\n})\r\n\r\nexport default connect(mapStateToProps, null)(SessionRequiredRoute);","import React from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport { IntroductionRoutes } from './introduction-routes';\r\nimport { AssessmentRoutes, TaskRoutes } from './assessment-routes';\r\nimport SessionRequiredRoute from './session-required-route';\r\n\r\nconst Routes = (\r\n\t\r\n\t\t{IntroductionRoutes.map((route, index) => {\r\n\t\t\tif (route.requireSessionID) {\r\n\t\t\t\treturn ()\r\n\t\t\t} else {\r\n\t\t\t\treturn ()\r\n\t\t\t}\r\n\t\t})}\r\n\r\n\t\t{AssessmentRoutes.map((route, index) => (\r\n\t\t\t\r\n\t\t))}\r\n\r\n\t\t{TaskRoutes.map((route, index) => (\r\n\t\t\t\r\n\t\t))}\r\n\t\r\n);\r\n\r\nexport default Routes;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ConnectedRouter } from 'connected-react-router';\r\nimport Routes from './routes';\r\nimport './App.scss';\r\n\r\nfunction App({history}) {\r\n\treturn (\r\n\t\t\r\n\t\t\t{Routes}\r\n\t\t\r\n\t);\r\n}\r\n\r\nApp.propTypes = {\r\n\thistory: PropTypes.object\r\n};\r\n\r\nexport default App;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport configureStore from './redux/configure';\r\nimport { Provider } from 'react-redux';\r\nimport { PersistGate } from 'redux-persist/integration/react';\r\nimport { preloadImages } from './assets/static-images';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport './index.scss';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport * as Sentry from \"@sentry/react\";\r\nimport { BrowserTracing } from \"@sentry/tracing\";\r\n\r\npreloadImages();\r\n\r\nconst {\r\n\thistory,\r\n\tstore,\r\n\tpersistor \r\n} = configureStore({});\r\n\r\nSentry.init({\r\n dsn: \"https://4ad8e175e82f448dbe814c14fbb53be0@o1281049.ingest.sentry.io/6528552\",\r\n\tenvironment: window.globalConfig.sentryEnv,\r\n integrations: [new BrowserTracing()],\r\n\r\n // We recommend adjusting this value in production, or using tracesSampler\r\n // for finer control\r\n tracesSampleRate: 1.0,\r\n});\r\n\r\nReactDOM.render(\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t,\r\n\tdocument.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}