{"version":3,"sources":["environment/environment.ts","components/error.tsx","assets/error-icon.png","components/feedback.tsx","components/load-image.tsx","assets/loading-spinner.png","interfaces/language.type.ts","hooks/use-initialization-object.tsx","hooks/use-load-learnosity-reports-sdk.tsx","components/report.tsx","hooks/use-end-test.tsx","utils/stopping-rules.ts","hooks/use-load-learnosity-items-sdk.tsx","localization/i18n.ts","localization/localization.provider.tsx","pages/end-of-level.tsx","interfaces/learnosity-player-event.ts","components/scoring-test-alert.tsx","pages/placement-test.tsx","helpers/post-message.ts","reportWebVitals.ts","index.tsx"],"names":["environment","Error","returnUrl","className","src","alt","href","target","Feedback","endTestResult","onSetActiveTab","t","useTranslation","viewReportButtonLabel","contentButtonLabel","score","message","title","body","redirectTo","onClick","LoadImage","process","REACT_APP_ENV","stgConfig","stg","prodConfig","prod","config","ci","Language","useInitializationObject","useState","loaded","loading","itemsInitializationObject","setItemsInitializationObject","reportsInitializationObject","setReportsInitializationObject","getItemsInitializationObject","useCallback","urlParameters","contactId","activityId","prevState","organizationId","fetch","REACT_APP_OE_THIRDPARTY_ACTIVITIES_SERVICE_URL","then","serverPromise","json","data","result","catch","getReportsInitializationObject","elementId","type","sessionId","showCorrectAnswers","REACT_APP_OE_THIRDPARTY_REPORTS_SERVICE_URL","method","headers","JSON","stringify","id","user_id","session_id","questions_api_init_options","useLoadLearnosityReportsSDK","getLearnositySDK","require","scriptjs","REACT_APP_LEARNOSITY_REPORTS_SDK_URL","callbacks","readyListener","errorListener","err","console","log","window","LearnosityReports","init","parse","responseDataJson","Report","viewFeedbackButtonLabel","queryString","location","search","useEffect","status","useEndTest","submitted","setTestResult","endTestResultError","setEndTestResultError","confirmTestFinalizationGetResults","initializationObjectOEJR","levelId","timeStamp","Date","now","REACT_APP_OE_END_ACTIVITIES_SERVICE_URL","res","response","resend","setTimeout","testSubmitted","submitSettings","show_submit_confirmation","show_submit_ui","useLoadLearnosityItemsSDK","props","setLoading","learnosityTestSubmitted","setLearnosityTestSubmitted","loadLearnosityTestError","setLoadLearnosityTestError","REACT_APP_LEARNOSITY_ITEMS_SDK_URL","sideMenu","document","querySelector","parentNode","removeChild","itemsApp","LearnosityItems","on","allowedConsecutiveFails","itemIndex","localScores","scores","Object","values","forEach","value","push","max_score","getLocalScores","getScores","isSkippedQuestionAWrongQuestion","answeredScores","filter","s","consecutiveFails","i","length","shouldStopTest","submit","en","es","pt_BR","availableLanguages","EN","ES","PT_BR","initConfig","fallbackLng","lng","debug","cache","enabled","resources","interpolation","prefix","suffix","i18n","use","initReactI18next","LocalizationContext","createContext","LocalizationProviderCtx","children","language","i18nReady","ready","lang","isInitialized","initI18n","changeLanguage","Provider","LocalizationProvider","EndOfLevel","LearnosityPlayerEvent","useLocation","useMemo","includes","activeResultTab","setActiveResultTab","loadingInitializationObject","sendingResults","loadingLearnositySDK","TestStateHandler","style","visibility","hidden","ScoringTestAlert","PlacementTest","parseInt","parent","postMessage","TEST_SUBMITTED","loadingInitialization","loadingSubmission","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","path","getElementById"],"mappings":"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","file":"static/js/main.d64767c7.chunk.js","sourcesContent":["import config from './config.dev.json';\nimport prodConfig from './config.prod.json';\nimport stgConfig from './config.stg.json';\n\nlet environment: typeof config.dev;\n\nswitch (process.env.REACT_APP_ENV) {\n case 'stg':\n environment = stgConfig.stg;\n break;\n case 'prod':\n environment = prodConfig.prod;\n break;\n default:\n environment = process.env.NODE_ENV === 'development' ? config.dev : config.ci;\n break;\n}\n\nexport default environment;\n","import ErrorImage from '../assets/error-icon.png';\nimport './error.css';\n\ninterface ErrorProps {\n returnUrl?: string;\n}\n\nconst Error: React.FC = ({ returnUrl }) => {\n return (\n
\n \"error-image\"\n

\n Something went wrong\n
\n Algo saliĆ³ mal\n
\n Algo deu errado\n

\n\n {returnUrl && (\n
\n \n OK\n \n
\n )}\n
\n );\n};\n\nexport default Error;\n","export default \"data:image/png;base64,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\"","import { useTranslation } from 'react-i18next';\n\nimport ResultObject from '../interfaces/result-object';\nimport { ResultTab } from '../interfaces/result-tab';\nimport '../styles/feedback.scss';\n\ninterface FeedbackProps {\n endTestResult: ResultObject;\n onSetActiveTab?: (tab: ResultTab) => void;\n}\n\nconst Feedback: React.FC = ({ endTestResult, onSetActiveTab }) => {\n const { t } = useTranslation();\n const viewReportButtonLabel = t(`button.viewReport`);\n const contentButtonLabel = t(`button.keepLearning`);\n return (\n
\n {endTestResult.score && (\n
\n
{endTestResult.score}
\n
\n )}\n

{endTestResult.message?.title}

\n
{endTestResult.message?.body}
\n
\n \n {contentButtonLabel}\n \n {!!onSetActiveTab && (\n \n )}\n
\n
\n );\n};\n\nexport default Feedback;\n","import loadingSpinner from '../assets/loading-spinner.png';\nimport './load-image.css';\n\ninterface LoadImageProps {\n className?: string;\n}\n\nconst LoadImage = ({ className = '' }: LoadImageProps) => (\n \"loading\"\n);\n\nexport default LoadImage;\n","export default \"data:image/png;base64,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\"","export enum Language {\n EN = 'en',\n PT_BR = 'pt-BR',\n ES = 'es',\n}\n","import { useCallback, useState } from 'react';\n\nimport environment from '../environment/environment';\nimport EndOfLevelUrlObject from '../interfaces/end-of-level-url';\nimport InitializationTestObject from '../interfaces/initialization-test-object';\nimport ReportsInitializationObject from '../interfaces/reports-initialization-test-object';\n\nconst useInitializationObject = () => {\n const [itemsInitializationObject, setItemsInitializationObject] =\n useState({ loaded: null, loading: false });\n const [reportsInitializationObject, setReportsInitializationObject] =\n useState({ loaded: null, loading: false });\n\n const getItemsInitializationObject = useCallback((urlParameters: EndOfLevelUrlObject) => {\n if (urlParameters?.contactId && urlParameters?.activityId) {\n setItemsInitializationObject((prevState) => ({ ...prevState, loading: true }));\n\n const organizationId = urlParameters?.organizationId ?? 'OPEN_ENGLISH_JUNIOR';\n\n fetch(\n `${environment.REACT_APP_OE_THIRDPARTY_ACTIVITIES_SERVICE_URL}contactId=${urlParameters?.contactId}&organization=${organizationId}&activityId=${urlParameters?.activityId}`,\n )\n .then((serverPromise) => {\n serverPromise\n .json()\n .then(function (data) {\n setItemsInitializationObject({ loaded: true, result: data, loading: false });\n })\n .catch(function () {\n setItemsInitializationObject({ loaded: false, loading: false });\n });\n })\n .catch(function () {\n setItemsInitializationObject({ loaded: false, loading: false });\n });\n } else {\n setItemsInitializationObject({\n loaded: false,\n loading: false,\n });\n }\n }, []);\n\n const getReportsInitializationObject = useCallback(\n (\n organizationId: string,\n elementId: string,\n type: string,\n contactId: string,\n sessionId: string,\n showCorrectAnswers: boolean,\n ) => {\n setReportsInitializationObject((prevState) => ({ ...prevState, loading: true }));\n\n fetch(environment.REACT_APP_OE_THIRDPARTY_REPORTS_SERVICE_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify([\n {\n organizationId,\n id: elementId,\n type,\n user_id: contactId,\n session_id: sessionId,\n questions_api_init_options: {\n showCorrectAnswers,\n },\n },\n ]),\n })\n .then((serverPromise) => {\n serverPromise\n .json()\n .then(function (data) {\n setReportsInitializationObject({ loaded: true, result: data, loading: false });\n })\n .catch(function () {\n setReportsInitializationObject({ loaded: false, loading: false });\n });\n })\n .catch(function () {\n setReportsInitializationObject({ loaded: false, loading: false });\n });\n },\n [],\n );\n\n return {\n loading: itemsInitializationObject.loading,\n getItemsInitializationObject,\n itemsInitializationObject,\n getReportsInitializationObject,\n reportsInitializationObject,\n };\n};\n\nexport default useInitializationObject;\n","import { useCallback } from 'react';\n\nimport environment from '../environment/environment';\n\nconst useLoadLearnosityReportsSDK = () => {\n const getLearnositySDK = useCallback((data: any) => {\n const scriptjs = require('scriptjs');\n\n scriptjs(environment.REACT_APP_LEARNOSITY_REPORTS_SDK_URL, function () {\n const callbacks = {\n readyListener() {},\n errorListener(err: any) {\n console.log(err);\n },\n };\n\n (window as any).LearnosityReports.init(JSON.parse(data.responseDataJson), callbacks);\n });\n }, []);\n\n return {\n getLearnositySDK,\n };\n};\n\nexport default useLoadLearnosityReportsSDK;\n","import queryString from 'query-string';\nimport React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport useInitializationObject from '../hooks/use-initialization-object';\nimport useLoadLearnosityReportsSDK from '../hooks/use-load-learnosity-reports-sdk';\nimport EndOfLevelUrlObject from '../interfaces/end-of-level-url';\nimport ResultObject from '../interfaces/result-object';\nimport { ResultTab } from '../interfaces/result-tab';\nimport LoadImage from './load-image';\n\ninterface ReportsProps {\n sessionId?: string;\n endTestResult: ResultObject;\n onSetActiveTab: (tab: ResultTab) => void;\n}\n\nexport const Report: React.FC = ({ sessionId, endTestResult, onSetActiveTab }) => {\n const { t } = useTranslation();\n\n const viewFeedbackButtonLabel = t(`button.viewFeedback`);\n const contentButtonLabel = t(`button.keepLearning`);\n\n const urlParameters = queryString.parse(location.search) as unknown as EndOfLevelUrlObject;\n\n const type = 'session-detail-by-item';\n const contactId = urlParameters.contactId;\n const elementId = 'learnosity-report';\n const organizationId = urlParameters?.organizationId ?? 'OPEN_ENGLISH_JUNIOR';\n\n const { getLearnositySDK } = useLoadLearnosityReportsSDK();\n const { getReportsInitializationObject, reportsInitializationObject } = useInitializationObject();\n\n useEffect(() => {\n const showCorrectAnswers = true;\n\n if (\n !endTestResult?.status ||\n reportsInitializationObject.loaded !== null ||\n reportsInitializationObject.loading ||\n !sessionId\n ) {\n return;\n }\n\n getReportsInitializationObject(\n organizationId,\n elementId,\n type,\n contactId,\n sessionId,\n showCorrectAnswers,\n );\n }, [\n endTestResult?.status,\n reportsInitializationObject.loaded,\n reportsInitializationObject.loading,\n getReportsInitializationObject,\n sessionId,\n contactId,\n organizationId,\n ]);\n\n useEffect(() => {\n if (!reportsInitializationObject?.result) {\n return;\n }\n getLearnositySDK(reportsInitializationObject.result);\n }, [reportsInitializationObject.result, getLearnositySDK]);\n\n if (reportsInitializationObject.loading) {\n return ;\n }\n\n return (\n
\n
\n
\n \n \n {contentButtonLabel}\n \n
\n
\n );\n};\n","import { useCallback, useState } from 'react';\n\nimport environment from '../environment/environment';\nimport ResultObject from '../interfaces/result-object';\n\nconst useEndTest = () => {\n const [endTestResult, setTestResult] = useState({\n loading: false,\n message: {\n title: '',\n body: '',\n },\n redirectTo: '',\n result: '',\n status: '',\n submitted: false,\n score: '',\n });\n const [endTestResultError, setEndTestResultError] = useState(false);\n const confirmTestFinalizationGetResults = useCallback(\n (initializationObjectOEJR: any, urlParameters: any) => {\n const contactId = urlParameters?.contactId;\n const levelId = urlParameters?.levelId;\n const sessionId = initializationObjectOEJR?.result?.sessionId;\n const timeStamp = Date.now();\n setTestResult((prevState) => ({ ...prevState, loading: true }));\n fetch(\n `${environment.REACT_APP_OE_END_ACTIVITIES_SERVICE_URL}&contactId=${contactId}&sessionId=${sessionId}&levelId=${levelId}&_=${timeStamp}`,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n },\n )\n .then((res) => {\n if (res.status === 200 || res.status === 422) {\n return res.json();\n }\n return false;\n })\n .then((response) => {\n if (!response) {\n resend();\n } else {\n setTestResult({\n ...response,\n loading: false,\n submitted: true,\n });\n }\n })\n .catch((err) => {\n setEndTestResultError(true);\n throw err;\n });\n\n const resend = () => {\n setTimeout(() => {\n confirmTestFinalizationGetResults(initializationObjectOEJR, urlParameters);\n }, 5000);\n };\n },\n [],\n );\n\n return {\n loading: endTestResult.loading,\n confirmTestFinalizationGetResults,\n endTestResult,\n testSubmitted: endTestResult.submitted,\n endTestResultError,\n };\n};\n\nexport default useEndTest;\n","interface LearnosityScores {\n [key: string]: {\n score: number;\n max_score: number;\n }[];\n}\n\nexport const getLocalScores = (scores: LearnosityScores): [number, number][] => {\n const localScores: [number, number][] = [];\n Object.values(scores).forEach((value: any) => {\n localScores.push([value.score, value.max_score]);\n });\n return localScores;\n};\n\nexport const isCorrectAnswer = (score: [number, number]) => {\n return score[0] === score[1]; // a correct answer is `score` equals to `max_score`\n};\n\nexport const shouldStopTest = (\n scores: [number, number][],\n allowedConsecutiveFails: number,\n isSkippedQuestionAWrongQuestion: boolean,\n) => {\n // note: s[0] === null if student didnt answered it yet\n const answeredScores = isSkippedQuestionAWrongQuestion\n ? scores\n : scores.filter((s) => s[0] !== null);\n\n if (!allowedConsecutiveFails) {\n return false;\n }\n\n let consecutiveFails = 0;\n for (let i = 0; i < answeredScores.length; i++) {\n if (!isCorrectAnswer(answeredScores[i])) {\n consecutiveFails++;\n } else {\n consecutiveFails = 0;\n }\n if (consecutiveFails > allowedConsecutiveFails) {\n return true;\n }\n }\n return false;\n};\n\nexport const submitSettings = {\n show_submit_confirmation: false,\n show_submit_ui: true,\n};\n","import { useCallback, useState } from 'react';\n\nimport environment from '../environment/environment';\nimport { getLocalScores, shouldStopTest, submitSettings } from '../utils/stopping-rules';\n\ninterface UseLoadLearnosityItemsSDKProps {\n allowedConsecutiveFails: number;\n}\n\nconst useLoadLearnosityItemsSDK = (props?: UseLoadLearnosityItemsSDKProps) => {\n const [loading, setLoading] = useState(false);\n const [learnosityTestSubmitted, setLearnosityTestSubmitted] = useState(false);\n const [loadLearnosityTestError, setLoadLearnosityTestError] = useState(false);\n const getLearnositySDK = useCallback(\n (data: any) => {\n setLoading(true);\n const scriptjs = require('scriptjs');\n\n scriptjs(environment.REACT_APP_LEARNOSITY_ITEMS_SDK_URL, function () {\n const callbacks = {\n readyListener() {\n const sideMenu = document.querySelector('.lrn-region.lrn-right-region');\n if (sideMenu) {\n sideMenu?.parentNode?.removeChild(sideMenu);\n }\n setLoading(false);\n },\n errorListener(err: any) {\n console.log(err);\n },\n };\n\n const itemsApp = (window as any).LearnosityItems.init(\n JSON.parse(data.responseDataJson),\n callbacks,\n );\n\n itemsApp.on('test:submit:success', function () {\n setLearnosityTestSubmitted(true);\n });\n\n itemsApp.on('items:lazyload:error', function () {\n setLoadLearnosityTestError(true);\n });\n\n if (props?.allowedConsecutiveFails && props?.allowedConsecutiveFails > 0) {\n itemsApp.on('item:changing', function (itemIndex: number) {\n const scores = itemsApp.getScores();\n const localScores = getLocalScores(scores);\n\n const isSkippedQuestionAWrongQuestion = true; // this variable can be true only in `adaptive` learnosity tests, in other learnosity test types all questions would be returned by `itemsApp.getScores()` since the beggining of the test with a null value as the score\n const allowedConsecutiveFails = isSkippedQuestionAWrongQuestion\n ? props.allowedConsecutiveFails + 1 // `item:changing` is fired when a new question is shown, so the last question score is always null and we should desconsider it, else we would be counting it as a skipped question\n : props.allowedConsecutiveFails;\n\n if (\n shouldStopTest(localScores, allowedConsecutiveFails, isSkippedQuestionAWrongQuestion)\n ) {\n setLearnosityTestSubmitted(true);\n itemsApp.submit(submitSettings);\n }\n });\n }\n });\n },\n [props?.allowedConsecutiveFails],\n );\n\n return {\n loading,\n getLearnositySDK,\n learnosityTestSubmitted,\n loadLearnosityTestError,\n };\n};\n\nexport default useLoadLearnosityItemsSDK;\n","import i18n, { InitOptions } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport { Language } from '../interfaces/language.type';\n\nconst en = require('./locales/en.json');\nconst es = require('./locales/es.json');\nconst pt_BR = require('./locales/pt-BR.json');\n\nexport const availableLanguages = [Language.EN, Language.ES, Language.PT_BR];\n\nconst initConfig: InitOptions = {\n fallbackLng: Language.EN,\n lng: Language.EN,\n debug: false,\n cache: {\n enabled: true,\n },\n resources: {\n [Language.EN]: en,\n [Language.PT_BR]: pt_BR,\n [Language.ES]: es,\n },\n interpolation: {\n prefix: '${',\n suffix: '}',\n },\n};\n\ni18n.use(initReactI18next).init(initConfig);\n\nexport function initI18n(lang = Language.EN) {\n if (i18n.isInitialized) {\n return;\n }\n\n return i18n.use(initReactI18next).init({\n ...initConfig,\n lng: lang,\n });\n}\n\nexport default i18n;\n","import React, { createContext, useContext, useEffect } from 'react';\nimport { useTranslation, I18nextProvider } from 'react-i18next';\n\nimport { Language } from '../interfaces/language.type';\nimport { initI18n } from './i18n';\n\nexport interface LocalizationProviderProps {\n language?: Language;\n children: React.ReactNode;\n}\n\ninterface LocalizationContextData {\n language: Language;\n}\n\nconst LocalizationContext = createContext({} as LocalizationContextData);\n\nconst LocalizationProviderCtx = ({\n children,\n language = Language.EN,\n}: LocalizationProviderProps) => {\n const { i18n, ready: i18nReady } = useTranslation();\n\n useEffect(() => {\n initI18n(language);\n }, [language]);\n\n useEffect(() => {\n if (!i18nReady) {\n return;\n }\n\n i18n.changeLanguage(language ?? Language.EN);\n }, [i18n, language, i18nReady]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const LocalizationProvider: React.FC = ({\n children,\n language = Language.EN,\n}) => {\n return {children};\n};\n\nexport function useLocalization(): LocalizationContextData {\n const context = useContext(LocalizationContext);\n\n if (!context) {\n throw new Error('useLocalization must be used within an LocalizationContext');\n }\n\n return context;\n}\n","import queryString from 'query-string';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport Error from '../components/error';\nimport Feedback from '../components/feedback';\nimport LoadImage from '../components/load-image';\nimport { Report } from '../components/report';\nimport useEndTest from '../hooks/use-end-test';\nimport useInitializationObject from '../hooks/use-initialization-object';\nimport useLoadLearnosityItemsSDK from '../hooks/use-load-learnosity-items-sdk';\nimport EndOfLevelUrlObject from '../interfaces/end-of-level-url';\nimport './end-of-level.css';\nimport { Language } from '../interfaces/language.type';\nimport { ResultTab } from '../interfaces/result-tab';\nimport { availableLanguages } from '../localization/i18n';\nimport { LocalizationProvider } from '../localization/localization.provider';\n\nfunction EndOfLevel() {\n const location = useLocation();\n const urlParameters = queryString.parse(location.search) as unknown as EndOfLevelUrlObject;\n const language = useMemo(() => {\n const lang = (urlParameters.lang as Language) || Language.EN;\n if (availableLanguages.includes(lang)) {\n return lang;\n }\n\n return Language.EN;\n }, [urlParameters.lang]);\n const [activeResultTab, setActiveResultTab] = useState('feedback');\n const {\n loading: loadingInitializationObject,\n getItemsInitializationObject,\n itemsInitializationObject,\n } = useInitializationObject();\n const {\n loading: sendingResults,\n confirmTestFinalizationGetResults,\n endTestResult,\n testSubmitted,\n endTestResultError,\n } = useEndTest();\n const {\n loading: loadingLearnositySDK,\n getLearnositySDK,\n learnosityTestSubmitted,\n loadLearnosityTestError,\n } = useLoadLearnosityItemsSDK();\n\n useEffect(() => {\n if (itemsInitializationObject.loaded !== null || loadingInitializationObject) {\n return;\n }\n getItemsInitializationObject(urlParameters);\n }, [\n urlParameters,\n getItemsInitializationObject,\n itemsInitializationObject.loaded,\n loadingInitializationObject,\n ]);\n\n useEffect(() => {\n if (!itemsInitializationObject?.result) {\n return;\n }\n getLearnositySDK(itemsInitializationObject.result);\n }, [itemsInitializationObject.result, getLearnositySDK]);\n\n useEffect(() => {\n if (learnosityTestSubmitted && !sendingResults && !testSubmitted) {\n confirmTestFinalizationGetResults(itemsInitializationObject, urlParameters);\n }\n }, [\n confirmTestFinalizationGetResults,\n itemsInitializationObject,\n learnosityTestSubmitted,\n testSubmitted,\n sendingResults,\n urlParameters,\n ]);\n\n const loading = loadingInitializationObject || loadingLearnositySDK || sendingResults;\n\n const TestStateHandler = () => {\n if (\n itemsInitializationObject?.loaded === false ||\n endTestResultError ||\n loadLearnosityTestError\n ) {\n return ;\n } else if (endTestResult?.status === 'ok' || endTestResult?.status === 'nok') {\n return (\n <>\n {activeResultTab === 'feedback' && (\n \n )}\n {activeResultTab === 'report' && (\n \n )}\n \n );\n } else if (loading) {\n return ;\n }\n return null;\n };\n\n return (\n
\n
\n \n \n \n
\n
\n );\n}\n\nexport default EndOfLevel;\n","export enum LearnosityPlayerEvent {\n TEST_SUBMITTED = 'TEST_SUBMITTED',\n}\n","import React from 'react';\n\nimport LoadImage from './load-image';\nimport './scoring-test-alert.css';\n\nexport const ScoringTestAlert: React.FC = () => {\n const title = `Scoring your test...`;\n const description = `Please wait while we score your test.`;\n return (\n
\n
\n
{title}
\n
{description}
\n
\n \n
\n );\n};\n","import queryString from 'query-string';\nimport { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport Error from '../components/error';\nimport Feedback from '../components/feedback';\nimport LoadImage from '../components/load-image';\nimport { ScoringTestAlert } from '../components/scoring-test-alert';\nimport { postMessage } from '../helpers/post-message';\nimport useEndTest from '../hooks/use-end-test';\nimport useInitializationObject from '../hooks/use-initialization-object';\nimport useLoadLearnosityItemsSDK from '../hooks/use-load-learnosity-items-sdk';\nimport { LearnosityPlayerEvent } from '../interfaces/learnosity-player-event';\nimport PlacementUrlObject from '../interfaces/placement-url';\nimport './end-of-level.css';\nimport '../styles/placement-test.scss';\nimport '@fontsource/baloo-2';\nimport '@fontsource/baloo-2/700.css';\nimport '@fontsource/inter';\nimport '@fontsource/inter/700.css';\n\nexport const PlacementTest: React.FC = () => {\n const location = useLocation();\n const urlParameters = queryString.parse(location.search) as unknown as PlacementUrlObject;\n const allowedConsecutiveFails = urlParameters.allowedConsecutiveFails\n ? parseInt(urlParameters.allowedConsecutiveFails, 10)\n : 0;\n\n const {\n loading: loadingInitializationObject,\n getItemsInitializationObject,\n itemsInitializationObject,\n } = useInitializationObject();\n const {\n loading: sendingResults,\n confirmTestFinalizationGetResults,\n endTestResult,\n testSubmitted,\n endTestResultError,\n } = useEndTest();\n const {\n loading: loadingLearnositySDK,\n getLearnositySDK,\n learnosityTestSubmitted,\n loadLearnosityTestError,\n } = useLoadLearnosityItemsSDK({ allowedConsecutiveFails });\n\n useEffect(() => {\n if (itemsInitializationObject.loaded !== null || loadingInitializationObject) {\n return;\n }\n getItemsInitializationObject(urlParameters);\n }, [\n urlParameters,\n getItemsInitializationObject,\n itemsInitializationObject.loaded,\n loadingInitializationObject,\n ]);\n\n useEffect(() => {\n if (!itemsInitializationObject?.result) {\n return;\n }\n getLearnositySDK(itemsInitializationObject.result);\n }, [itemsInitializationObject.result, getLearnositySDK]);\n\n useEffect(() => {\n if (learnosityTestSubmitted && !sendingResults && !testSubmitted) {\n confirmTestFinalizationGetResults(itemsInitializationObject, urlParameters);\n }\n }, [\n confirmTestFinalizationGetResults,\n itemsInitializationObject,\n learnosityTestSubmitted,\n testSubmitted,\n sendingResults,\n urlParameters,\n ]);\n\n useEffect(() => {\n if (endTestResult.status !== 'ok') {\n return;\n }\n postMessage({\n type: LearnosityPlayerEvent.TEST_SUBMITTED,\n redirectTo: endTestResult.redirectTo,\n });\n }, [endTestResult]);\n\n const loadingInitialization = loadingInitializationObject || loadingLearnositySDK;\n const loadingSubmission = sendingResults;\n\n const TestStateHandler = () => {\n if (\n itemsInitializationObject?.loaded === false ||\n endTestResultError ||\n loadLearnosityTestError\n ) {\n return ;\n } else if (endTestResult?.status === 'nok') {\n return ;\n } else if (loadingInitialization) {\n return ;\n } else if (loadingSubmission || endTestResult?.status === 'ok') {\n return ;\n }\n return null;\n };\n\n return (\n
\n
\n \n
\n
\n );\n};\n","export const postMessage = (message: any) => {\n if (!window?.parent?.postMessage) {\n return;\n }\n window.parent.postMessage(message, '*');\n};\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\n\nimport './index.css';\nimport EndOfLevel from './pages/end-of-level';\nimport { PlacementTest } from './pages/placement-test';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n \n } />\n } />\n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}