{"version":3,"sources":["assets/smallTeoriLogo.png","globalComponents/A2HSComponent.tsx","hooks/A2HS.tsx","pages/Student/teacherStudentController/controllerPages/PlaceholderPage.tsx","pages/Student/teacherStudentController/controllerPages/quizComponents/TeacherStudentResultSlide.tsx","pages/Student/teacherStudentController/controllerPages/quizComponents/TeacherStudentGraduation.tsx","pages/Student/teacherStudentController/controllerPages/quizComponents/TeacherStudentStatementRow.tsx","pages/Student/teacherStudentController/controllerPages/quizComponents/TeacherStudentSlide.tsx","pages/Student/teacherStudentController/controllerPages/quizComponents/TeacherStudentQuiz.tsx","pages/Student/teacherStudentController/controllerPages/TeacherStudentQuizPage.tsx","pages/Student/teacherStudentController/controllerPages/statsComponents/StatsCard.tsx","pages/Student/teacherStudentController/controllerPages/TeacherStudentStats.tsx","pages/Student/teacherStudentController/controllerPages/OngoingLessonPage.tsx","pages/Student/teacherStudentController/TeacherStudentController.tsx","routes/QuickLogin.tsx","pages/Student/studentTeacherQuiz/StudentTeacherQuiz.tsx","routes/StudentRoutes.tsx","pages/Teacher/createQuizPage/components/ItemDetails.tsx","pages/Teacher/createQuizPage/components/ContentItem.tsx","pages/Teacher/createQuizPage/components/EmptyItem.tsx","pages/Teacher/createQuizPage/components/SlideSwapper.tsx","pages/Teacher/createQuizPage/components/newSlideComponents/TeoriContent.tsx","pages/Teacher/createQuizPage/components/newSlideComponents/OwnMaterial.tsx","pages/Teacher/createQuizPage/components/NewSlide.tsx","pages/Teacher/createQuizPage/components/ItemsArea.tsx","pages/Teacher/createQuizPage/components/Statement.tsx","pages/Teacher/createQuizPage/components/IntroStatement.tsx","pages/Teacher/createQuizPage/components/Settings.tsx","pages/Teacher/createQuizPage/CreateQuizContent.tsx","pages/Teacher/createQuizPage/CreateQuizPage.tsx","pages/Teacher/admin/adminStudentView/components/MuiDataTableEdit.tsx","pages/Teacher/admin/adminStudentView/components/CategorySelect.tsx","pages/Teacher/admin/adminStudentView/components/DatePicker.tsx","pages/Teacher/admin/adminStudentView/components/SchoolSelect.tsx","pages/Teacher/admin/adminStudentView/components/AddStudentBox.tsx","pages/Teacher/admin/adminStudentView/AdminStudentView.tsx","pages/Teacher/lessonPage/components/LessonPageBarActualPopup.tsx","pages/Teacher/admin/adminSchoolView/AddSchoolBox.tsx","pages/Teacher/admin/adminSchoolView/SubuserCellManage.tsx","pages/Teacher/admin/adminSchoolView/SubuserCell.tsx","pages/Teacher/admin/adminSchoolView/CategoryCellManage.tsx","pages/Teacher/admin/adminSchoolView/CategoryCell.tsx","pages/Teacher/admin/adminSchoolView/AdminSchoolView.tsx","pages/Teacher/lessonPage/components/LessonPageBarPopup.tsx","pages/Teacher/admin/adminSlideSearch/AdminSlide.tsx","pages/Teacher/admin/adminSlideSearch/AdminSlideSearch.tsx","pages/Teacher/admin/adminNotificationView/components/NotificationActionBar.tsx","pages/Teacher/admin/adminNotificationView/components/CustomDatePicker/CustomDatePicker.tsx","pages/Teacher/admin/adminNotificationView/AdminNotificationView.tsx","routes/TeacherRoutes.tsx","App.tsx","reportWebVitals.ts","serviceWorkerRegistration.ts","index.tsx","constants/viewConstants.ts","constants/APIConstants.ts","apollo/TeoriTeacherProvider.tsx","pages/socketFunction.ts","apollo/TeoriStudentProvider.tsx","hooks/useWindowDimensions.tsx","apollo/apolloProviderOperations.ts","pages/Teacher/lessonPage/components/LessonPageVideo.tsx","translations/translationTypes.ts","globalComponents/VideoNav.tsx","pages/model.ts","globalComponents/SingleCharInput.tsx","services/azureStorage.ts","translations/danish.ts","translations/english.ts","translations/translationProvider.ts","services/browserStorageService.ts","globalComponents/PinInput.tsx","assets/red_Arrow.png","apollo/PopupSlideProvider.tsx","assets/white_Arrow.png","globalComponents/VerificationInput.tsx","assets/checkmark_icon.png","pages/Student/studentQuizPage/End/components/StatementRow.tsx","assets/customLoader24fps.gif","assets/star_icon.png","assets/iconsStudentDashboard/studentHat_icon.png","constants/generalConstants.ts","assets/TeoriLogoHvid.png","assets/toClass.png","constants/pathConstants.ts","pages/Teacher/lessonPage/components/LessonPageImage.tsx","graphql/generated/graphqlStudent.tsx","globalComponents/Stopwatch.tsx","assets/fail_icon.png","assets/iconsStudentDashboard/book_icon.png","graphql/generated/graphql.tsx","assets/expand_icon.png","assets/delete_icon.png","assets/add_icon.png","assets/save_icon.png","assets/invertedfail_icon.png","assets/expandIcon.png","pages/Student/studentQuizPage/End/components/Slide.tsx","assets/headphone_icon.png","pages/Student/studentQuizPage/End/components/ResultView.tsx","pages/Student/studentQuizPage/End/components/SlideSelector.tsx","pages/Student/studentQuizPage/End/End.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/Answers.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/Video.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/Image.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/Media.tsx","assets/red_Arrow2.png","pages/Student/studentQuizPage/Quiz/components/SlideComponents/SlideArrows.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/AudioTrack.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/Statement.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/Statements.tsx","pages/Student/studentQuizPage/Quiz/components/SlideComponents/LearningMode.tsx","assets/sound_icon.png","pages/Student/studentQuizPage/Quiz/components/SlideComponents/DigitalStatements.tsx","pages/Student/studentQuizPage/Quiz/components/Slide.tsx","assets/ur.png","assets/iconForTest.png","pages/Student/studentQuizPage/Quiz/components/Main.tsx","pages/Student/studentQuizPage/Quiz/components/QuizError.tsx","pages/Student/studentQuizPage/Quiz/Quiz.tsx","pages/Student/studentQuizPage/Setup/Setup.tsx","pages/Student/studentQuizPage/StudentQuizPage.tsx","pages/Student/loginPage/components/AccessCode.tsx","pages/Student/loginPage/components/AccessExpired.tsx","pages/Student/loginPage/components/Confirmation.tsx","pages/Student/loginPage/components/ConfirmationMobileAccess.tsx","pages/Student/loginPage/components/CreatePin.tsx","pages/Student/loginPage/components/FirstLogin.tsx","pages/Student/loginPage/components/InformationSide.tsx","pages/Student/loginPage/components/Initial.tsx","pages/Student/loginPage/LoginPage.tsx","globalComponents/LoadingBar.tsx","globalComponents/Loading.tsx","globalComponents/IntermediaryLoading.tsx","assets/TeoriLogo_small.png","globalComponents/TeoriLogo.tsx","pages/modelFunctions.ts","services/utilFunctions.ts"],"names":["A2HSComponent","React","prompt","setState","ready","e","preventDefault","window","addEventListener","removeEventListener","Promise","reject","Error","useAddToHomescreenPrompt","promptToInstall","useState","isVisible","setVisibleState","hide","localStorage","setItem","useEffect","getItem","onClick","className","src","teoriLogo","Button","PlaceholderPage","languageString","getStringsForChosenLanguage","getChosenLanguage","TeoriLogo","teacherStudentPage","placholder","youAreLoggedIn","feedback","TeacherStudentResultSlide","props","current","length","currentState","tempArray","PassedSlide","statements","forEach","statement","index","currentStatement","answer","push","correctAnswer","renderStatementsOneAtATime","renderStatements","TeacherStudentGraduation","state","setstate","selectedSlide","setselectedSlide","selectedState","setselectedState","slides","setslides","setcurrentStatement","useGetClassStudentResultQuery","variables","class_quiz_id","String","quizID","pollInterval","slideData","data","resultData","loading","useGetQuizResultQuery","online_quiz_id","participantData","useGetClassStudentParticipantQuery","hasBeenCalled","sethasBeenCalled","undefined","AmountState","setAmountState","getClassStudentParticipant","amount","student_amount","failed","student_failed","passed","student_passed","getQuizResult","slide_amount","slides_failed","quiz_pass_status","tempSlideArray","getClassStudentResult","slide","tempStatementArray","slide_statements","statement_progress_answer","statement_answer_id","text","sound_text","slide_pass_status","introSoundText","intro_sound_text","socket","on","slideID","setStateAndSlide","Number","slide_id","current_stage","statementID","current_statement","Loading","graduationPage","youHad","outOf","correct","TeacherStudentStatementRow","isYesActive","setisYesActive","isNoActive","setisNoActive","onYesClick","onNoClick","TeacherStudentSlide","useGradeSlideMutation","sendSlideOrEnd","handleSetAnswer","id","TeacherStudentQuiz","currentCount","setcurrentCount","gradeSlide","gradeSlidetoAPI","gradedStatements","statement_progress_id","progressID","progress_id","statement_progress","quizState","statementNumber","setQuizState","prevState","copyState","gradedSlide","then","finishQuizNow","TeacherStudentQuizPage","setloading","isInitial","setisInitial","isDone","setisDone","graduationState","setgraduationState","setquizState","useCreateClassOnlineQuizMutation","online_quiz","quiz_class_id","quiz_test_name","achievement_name","createClassQuiz","useStartContentMutation","startContent","useFinishClassOnlineQuizMutation","finishQuiz","convertAPIToQuiz","slide_progress","tempStatements","token","isOngoing","quiz_token_id","newState","createClassOnlineQuiz","createAndGetQuiz","IntermediaryLoading","removeItem","finishClassOnlineQuiz","StatsCard","TeacherStudentStats","useGetMarkedSlidesQuery","fetchPolicy","currentSlides","setcurrentSlides","chosenSlide","getMarkedSlides","explanation","media","media_location","mediaType","MediaType","media_type_id","introQuestion","original_slide_id","map","alt","CircularProgress","OngoingLessonPage","TeacherStudentController","setcurrentState","useContext","AppStateStudentContext","appState","appGetUserID","useGetStudentNameQuery","isConnected","setisConnected","useAddTeoriLessonStudentMutation","lessonId","location","href","split","addStudent","loggedIn","addTeoriLessonStudent","response","renderContent","QuickLogin","context","history","useHistory","params","useParams","useLoginStudentMutation","LoginMutation","phone_number","phone","pin_code","pin","onError","message","tokens","LoginStudent","login_before","sessionStorage","setTimeout","appSetLogin","accessToken","refreshToken","PATH_DASHBOARD","renderSomething","StudentTeacherQuiz","isLoading","setisLoading","classID","setclassID","classToken","setclassToken","currentAIState","setcurrentAIState","useAddAiStudentMutation","configId","addAIStudent","useGetClassQuizByConfigIdLazyQuery","config_id","getClassByConfig","createQuizdata","iOS","isAI","interval","setInterval","currentValue","clearInterval","createAIQuiz","getClassQuizByConfigID","createClassByConfig","StudentQuizPage","isStudentTeacher","studentTeacherID","studentTeacherToken","isDigital","initialized","StudentRoutes","appSetLogout","isAuthenticated","useRouteMatch","path","url","useLocation","setLoading","fetchAccessToken","APOLLO_STUDENT_URL","RefreshUser","catch","console","log","finally","LoginPage","lazy","LoginAppPage","DashboardPage","SettingsPage","QuizPage","routes","exact","PATH_HOME","render","to","PATH_LOGIN","PATH_LOGIN_APP","PATH_PROFILE","PATH_TEST","PATH_TEACHER_LESSON","PATH_ELEV","PATH_ELEV_AI","PATH_TEACHER_STUDENT","PATH_QUIZ","isFreeQuiz","fallback","ItemDetails","type","IMAGE","WEBSITE","tempFile","VIDEO","LessonPageVideo","video","videoType","VideoType","STREAM","toString","YOUTUBE","videoId","STREAMVIDEO","shrinkSelectedSlide","AZUREIMG","WEB_LINK","AZUREVIDEO","whatToRender","ContentItem","handleSelectSlide","slideOrderNumber","hasError","deleteIcon","handleDeleteSlide","expandIcon","handleExpandSlide","soundAndText","soundText","introItem","label","renderToolTipContent","EmptyItem","handleCreateSlide","addIcon","SlideSwapper","firstSlideIndex","setFirstSlideIndex","secondSlideIndex","setSecondSlideIndex","renderIntegerInput","value","handleChange","TextField","inputProps","min","max","step","onChange","createLessonPage","movePicture","event","getNumberOrEmptyStringFromEventTarget","target","withPicture","variant","swapSlides","TeoriContent","AppStateContext","isFileInput","fileBlob","videoThumbnail","useGetSasLazyQuery","getSAS","SASKey","useManageContentMutation","manageContent","isPictureUploading","setisPictureUploading","Skeleton","ownMaterialList","setownMaterialList","useGetTeoriContentQuery","offset","limit","ownedContentData","fetchMore","getTeoriContent","slideAddress","fetch","json","result","thumbnail_url","content_id","setOwnMaterial","selectedSlideNow","handleUpload","fileData","files","file","uploadOwnContent","content","doneButton","newSlide","LOCALVIDEO","notes","handleFinishCreateNewSlide","URL","createObjectURL","theSelectedSlide","find","includes","onScroll","scrollHeight","scrollTop","clientHeight","color","disabled","accept","multiple","OwnMaterial","useGetOwnedContentQuery","refetch","getOwnedContent","reverse","NewSlide","chosenState","setchosenState","setnewSlide","renderNewSlideSelector","ItemsArea","currentPage","lastPage","numberOfEmptyItemsOnCurrentPage","setNumberOfEmptyItemsOnCurrentPage","useGetSasQuery","useDeleteQuizSlideMutation","deleteSlide","calculateEmptyItemsForCurrentPage","handleFinishCreateSlide","slideList","slideFilter","setSlides","selectSlide","getBeginForSlideItems","getEndForSlideItems","lastPlaceInArrayForCurrentPage","getSlidesForCurrentPage","slice","getBeginForEmptyItems","findIntroQuestion","introQuestionID","chosenSound","narrationSounds","element","page","items","expandSelectedSlide","updatedIndexes","filter","item","slideToDelete","findById","editID","quiz_slide_id","renderContentItems","maximalOrderNumber","alert","firstSlide","secondSlide","tempSlideList","Statement","setchosenSound","elaboration","elab","setelab","setanswer","inputValue","setinputValue","elabLanguage","setelabLanguage","isSoundSelected","setisSoundSelected","handleAnswerChange","handleElabLanguageChange","key","newStatement","originalIndex","soundLocation","setStatements","elementIndex","findIndexById","copyOfState","deleteStatement","options","option","renderElabLanguageSelect","multiline","rows","elabs","generalMessages","yes","no","both","renderAnswersSelect","Autocomplete","newValue","onInputChange","newInputValue","renderInput","IntroStatement","deleteIntroStatement","updateIntroStatement","Settings","tags","tempTags","settempTags","isIntroQuestion","setisIntroQuestion","useDeleteSlideTagMutation","removeTag","useDeleteQuizStatementMutation","statementBoxStates","setstatementBoxStates","setInitialStatementBoxStatesValue","copyAndUpdateSlideState","callback","slideCopy","updateSelectedSlide","handleSlideSoundExplanation","languageID","tempExplanations","soundExplanations","explanationToChange","deleteQuestion","apiID","quiz_statement_id","filteredStatements","filterAndSortById","addIntroStatement","soundValue","addStatement","statementsCopy","handleRemoveTag","chosenTag","delete_quiz_slide_id","delete_tag_id","filteredSlideTags","tag","setTags","renderSelectedTags","handleSlideFilter","tempTag","tempChipArray","Chip","name","onDelete","statementState","draggableId","provided","ref","innerRef","draggableProps","dragHandleProps","setname","chosenTagID","renderTags","renderSlideFilter","currentLanguages","language","newtempExplanations","removeSlideSoundExplanation","renderSoundExplanationButtons","renderIntroQuestion","onDragEnd","destination","splice","source","removed","droppableId","handleSave","saveIcon","save","handleFinish","whiteArrow","finish","CreateQuizContent","hasSelectedOnce","sethasSelectedOnce","focusedSlide","slideToSelect","lessonState","setselectedSlideID","selectedSlideID","isSelectedSlideExpanded","setIsSelectedSlideExpanded","getSelectedSlide","setLessonState","renderItemAreaOrItemDetails","selectedSlideIndex","FIND_INDEX_STATUS_NOT_FOUND","getOrderNumberOfSelectedSlide","updatedSlide","updatedSlideIndex","lessonStateCopy","copyAndUpdateLessonState","warn","CreateQuizPage","QuizState","setquizID","editLoader","seteditLoader","isEdit","setnarrationSounds","useGetSoundContentQuery","soundData","soundLoading","refetchSound","useManageQuizMutation","manageQuiz","useGetAvailableTagsQuery","tagsData","tagsLoading","useGetCompleteQuizEditQuery","quiz_id","ID","language_id","skip","quizData","quizLoading","refetchQuizData","fetchVideoThumb","mediaLocation","thumbnailAddress","convertAPIStateToQuizState","apiState","tempQuizState","quiz_Id","quiz_name","slideIndex","tag_id","tag_name","tempQuizStatements","statementIndex","tempElaborations","elaborationIndex","quiz_statement_elaboration","elaboration_language","elaboration_id","elaboration_text","isOriginal","elaboration_is_original","i","quiz_Statement_Id","quiz_statement_sound","sound_content_id","sound_location","slide_explanations","explanation_id","explanation_language","explanation_location","explanation_is_original","slide_content","intro_question_sound","numberToMediaType","slide_is_accesible","getAvailableTags","setTagsFunction","getSoundContent","sound","newSounds","arr","dup_count","new_name","x","n","some","indexOf","renameFiles","setSounds","refetchTheQuiz","getCompleteQuizEdit","newQuizState","arraymove","fromIndex","toIndex","convertQuizStateToAPI","currentQuizState","isDraft","quizSlides","elaborations","elabIndex","currentIndex","elaboration_owner","quiz_statement_no","quiz_statement_content","explanationIndex","explanation_owner","uploadExplanationSound","intro_question_content","translation_content","quiz","quiz_default_language","quiz_is_draft","checkForErrors","convertedQuiz","ROW_MODIFY_STATES","Object","freeze","fromEntries","t","getColumnValue","originalColumnIndex","tableMeta","rowData","tableState","columnOrder","DefaultActionButton","onEditStart","onEditFinish","INITIAL","EditableCell","editing","columnMeta","customBodyEditRender","customBodyRender","actionColumnRenderFactory","columns","onRowSave","actionButtonCmp","update","EDITING","rowObj","c","rebuildObjFromRow","MuiDataTableEditable","onRowClick","otherProps","dataWithUiState","Array","isArray","uiState","actionColumn","columnsWithEditableRender","injectColumnRender","columnsWithCustomRenderAndActionColumn","CategorySelect","categories","setcategories","getCategories","category","cat_id","cat_name","DatePicker","isExpanded","setisExpanded","handleChangeCalendar","date","toDateString","getTime","Date","SchoolSelect","schoolList","setschoolList","getSchoolList","school","school_id","school_name","zipcode","AddStudentBox","useManageStudentMutation","manageStudent","selectedCategory","setselectedCategory","phonenumber","setphonenumber","selectedDate","setselectedDate","padTo2Digits","num","padStart","setisshown","Input","renderOptions","timeString","getDate","getMonth","getFullYear","join","formatDate","student","student_category","student_phone_number","expiry_date","toISOString","language_choice","AdminStudentView","useGetStudentsAdminQuery","tableData","settableData","useDeleteStudentMutation","deleteStudent","useGetAdminStudentLoginInfoLazyQuery","getStudentInfo","isNewStudentshown","setisNewStudentshown","schoolData","useGetSchoolListQuery","onStudentLogin","currentPath","student_id","getAdminStudentLoginInfo","student_pin","open","categoryData","useGetCategoriesQuery","categoryList","setcategoryList","newTempData","delete","getStudentsAdmin","jumpToStudent","fname","first_name","lname","last_name","email","student_email","activationDate","create_date","expiryDate","title","rowsPerPage","objIndex","findIndex","obj","accessCode","LessonPageBarActualPopup","setdata","containerToGetHeight","popupState","useRef","refToMinimizeQR","QRSize","setQRSize","QRCODE","offsetHeight","teacherQuizPage","quizMain","left","right","isLesson","style","width","size","LessonPageImage","img","AddSchoolBox","useManageSchoolMutation","manageSchool","schoolValues","setschoolValues","isIntermediaryLoading","setisIntermediaryLoading","handleClose","setcreatingNewTeacher","email_id","password","vat_number","city","contact_name","optional_note","SubuserCellManage","useManageSubuserMutation","SubuserCell","useGetSchoolSubusersAdminQuery","schoolId","subuserData","useDeleteSubuserMutation","deleteSubuser","isManageOpen","getSchoolSubusersAdmin","subuser_id","subuserId","CategoryCellManage","useGetAllCategoriesQuery","catData","availableCategories","setavailableCategories","useCreateSchoolCategoryMutation","createSchoolCategory","getAllCategories","filtered","y","cat","categoryId","close","CategoryCell","useGetSchoolCategoryQuery","refetchCat","isNewCategoryOpen","setisNewCategoryOpen","isError","setisError","getSchoolCategory","customToolbar","download","print","sort","search","viewColumns","selectableRows","AdminSchoolView","isNewShown","setisNewShown","useGetAllSchoolsQuery","is_active","schoolsLoading","useSetSchoolStatusMutation","manageSchoolStatus","intermediaryLoading","setintermediaryLoading","creatingNewTeacher","getAllSchools","skip_bill_check","school_status","Checkbox","checked","Boolean","responsive","expandableRows","expandableRowsHeader","isRowExpandable","renderExpandableRow","rowMeta","colSpan","TableRow","TableCell","onRowExpansionChange","curExpanded","allExpanded","rowsExpanded","LessonPageBarPopup","PopupSlideContext","closePopup","openPopup","popupSlide","child","setchild","tempchild","postMessage","timer","closed","AdminSlide","isVideo","thumbnail","setthumbnail","handleSlideClick","AdminSlideSearch","includeSlides","setincludeSlides","languageChosen","setlanguageChosen","filteredSlides","setfilteredSlides","currentSearch","setcurrentSearch","shownSlides","setshownSlides","useGetAllSlidesQuery","included_slides","language_chosen","slideDataLoading","getAllSlides","searchString","score","prop","toLowerCase","itemProp","a","b","entry","findSlidesWithCommonString","selects","Select","MenuItem","searchBox","slideShow","NotificationActionBar","showStudentsCount","studnetsCount","buttonDisabled","buttonText","CustomDatePicker","modalRef","handleClick","contains","document","readOnly","AdminNotificationView","studentsCount","setStudentsCount","sendStudentsCount","setSendStudentsCount","notificationSend","setNotificationSend","selectedNotificationType","setNotificationType","setSelectedDate","selectedLanguage","setSelectedLanguage","setSchoolId","messageText","setMessageText","useGetNotificationStudentsCountLazyQuery","fetchCount","countData","useAddStudentsNotificationMutation","addStudentsNotification","sendingData","setSendingData","notificationTypes","getNotificationStudentsCount","handleNotificationChange","handleDateChange","utcDate","UTC","handleLanguageChange","handleSchoolChange","ids","handleTextAreaChange","pattern","TeacherRoutes","appGetUserRole","APOLLO_TEACHER_URL","StudentPage","LessonPage","CreateLessonPage","PATH_STUDENTS","PATH_LESSON","PATH_CREATE_LESSON","basename","PATH_SKOLE","App","PopupSlideProvider","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","isLocalhost","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","error","ReactDOM","StrictMode","getElementById","vendor","userAgent","process","origin","headers","contentType","get","status","unregister","reload","checkValidServiceWorker","serviceWorkerRegistration","LAPTOP_VIEW_WIDTH","INPUT_TAG_NAME","AZURE_STORAGE_ACCOUNT","setUsername","userToken","io","emit","user_id","role_id","role","createRoom","roomName","userID","userRole","initialAppState","teacherSocket","room","gqlError","msg","token2","appSetTokens","appClearAccessToken","appGetRevenueStats","appGetCurrentCatIDs","startSocket","setPopupSlide","createContext","AppStateProvider","setAppState","setteacherSocket","setpopupState","setGQLError","client","resetStore","caches","keys","names","appGetAccessToken","decodedToken","JwtDecode","token_data","transports","err","cache","InMemoryCache","typePolicies","Query","fields","getStudentActivity","keyArgs","merge","existing","incoming","requestLink","ApolloLink","operation","forward","Observable","observer","handle","resolve","setContext","authorization","subscribe","next","bind","complete","unsubscribe","tokenRefreshLink","TokenRefreshLink","accessTokenField","isTokenValidOrUndefined","interMediaryFix","exp","now","handleFetch","newTokens","handleResponse","handleError","ApolloClient","link","from","graphQLErrors","networkError","HttpLink","uri","Provider","currentRevenue","adviseType","currentCategories","objectToSend","ApolloProvider","children","appGetUserCategory","appGetExpiryDate","AppStateStudentProvider","theCache","persistCache","storage","LocalStorageWrapper","connectToDevTools","getWindowDimensions","innerWidth","height","innerHeight","useWindowDimensions","resize","windowDimensions","setWindowDimensions","isTeacher","payload","old_token","query","method","body","JSON","stringify","Accept","res","setSrc","videoRef","isPlaying","setisPlaying","handlePlay","AZURE","amp","play","HTMLVideoElement","ReactPlayer","handlePause","pause","renderRenderer","waited","wait","player","techOrder","nativeControlsForTouch","controls","logo","enabled","heigth","currentTime","duration","eventName","errorDetails","createVideoPlayer","dispose","playsInline","hasVideoEnded","handlePlayClick","handlePauseClick","muted","shouldMute","playing","LanguageType","VideoNav","isShowing","setisShowing","playIcon","pauseIcon","LoginStep","dashboardStatus","dashboardType","LessonType","typeOfContentDashboard","AchievementGradeStatus","Category","InputType","SingleCharInput","inputRef","isFirstInRow","focus","inputType","maxLength","placeholder","input","getNextSiblingsFromRefObject","tagName","nextSibling","focusNextInput","substitute","shift","handleSetValue","toUpperCase","ordinalNumber","onKeyUp","keyCode","getPreviousSiblingsFromRefObject","previousSibling","parent","parentElement","firstChild","focusFirstInput","handleKeyPress","account","SASkey","blobServiceClient","BlobServiceClient","container","getContainerClient","createIfNotExists","access","blockBlobClient","getBlockBlobClient","upload","blobHTTPHeaders","blobContentType","uploadLessonSound","danish","backButton","seeYourErrors","allow","deny","ultimateTopbar","education","studentsNstats","orders","calibrateProjector","importFromEP","settings","logout","indexSounds","one","two","three","four","loginPage","loginForm","loginButton","userNamePlaceholder","passwordPlaceholder","wrongInfoError","rememberLoginInfo","dashboardPage","topbar","lecture","test","sortPlaceholder","byDate","byType","byCategory","byReleaseType","table","lesson","created","unpublished","published","offline","edit","details","lessonPage","of","initialPage","scanQR","welcomeTo","continue","addTag","addSubject","fromPicture","insert","uploadMP3","notePlaceholder","chooseWhereToGet","noneChosen","teoriundervisning","ownMaterial","studentPage","actions","gatheredStats","archiveChosen","resendPassword","yourInfo","usefulInfo","searchPlaceholder","newest","alphabetical","teamStart","activeCodes","archivednExpiredCodes","noCodes","byPercentage","mobileNumber","expiry","stats","archive","removeAccess","addAccess","extendedStats","theseSlidesAreMarked","latestActivity","quizSetup","noOfTeoriSlides","speed","header","slow","normal","fast","languageSettings","none","arabic","english","german","otherSetting","includeFromTeoriDK","saveForLater","nameOfTestPlaceholder","strengthTest","strengthTestDescription","startTest","quizQRGather","teoriTestStarting","scanIfNotLoggedIn","openYourPhone","quizResult","studentList","chooseAll","picture","studentLoginPage","mobileNumberPlaceholder","continueButton","expiredCode","extend","Initial","errorMessage","loginSuccess","phonenumberLabel","passwordLabel","registerDescription","forgot","haveAccessCode","FirstLogin","firstTimeVisiting","havePasscode","Confirmation","sendConfirmationCode","weSentASMS","AccessCode","typeCodePlaceholder","errorMessages","success","expired","notFound","alreadyUsed","mobileUsed","alreadyExisting","CreatePIN","createPIN","repeatPIN","setPIN","InformationSide","underHeader","underHeaderExplainer","studentSettings","description","inputLabels","firstName","lastName","mobileNr","yourDrivingSchool","languageSelect","headline","categorySelect","car","motorcycle","saveSettings","iOSAlertText","iOSCheckbox","iOSExtended","studentDashboardPage","profileSettings","headerSpan","errorShorthand","trafficLightBox","seeCalc","information","yourLastResult","outofTen","notReady","span","onTheWay","Ready","InfoBox","yourCalendar","welcome","betaText","ratingOfDrivingSchool","driving","totalExperience","important","youHave","daysAnd","hoursLeft","extendAccess","startContentBox","generalContentBox","evalTestsContentBox","button","strengthTestContentBox","noErrors","onlineBookContentBox","buttonDescription","drivingSchoolLessonsContentBox","beforeDrivingTestContentBox","practicalInfoBox","authorities","pricesNfee","infoAboutKlippekort","aboutTeori","howToProlong","problemWithTests","drivingSchoolCourse","whenSmoothTrack","documentsTeoriAndTest","yourOpinion","areYouSatisfied","studentQuizPage","Setup","freeQuizFreeTest","smallHeader","setupOfTest","learningMode","learningModeDescription","standardMode","standardModeDescription","chooseTestSound","chooseTestSubs","testSubPlaceholder","iOSExplainer","languages","faerosk","polish","Quiz","errorPage","somethingwentWrong","tryagain","returntodashboard","loadingText","soundError","End","purchaseAccess","dontLikeImage","dontLikeImageShorthand","soundExplained","soundExplainedShorthand","youpassed","youfailed","youhad","imagesPassed","progress","average","amountOfCorrect","languageType","English","Danish","setLanguage","parse","localStorageGetItem","getChosenSpokenLanguage","PinInput","getMergedStringsFromArray","PINInputState","updatePINItem","PINInputStateCopy","setPINInputState","inputs","Password","Text","renderSingleCharacterInputs","initialPopupSlideState","VerificationInput","setCode","VerificationInputState","updateCodeItem","VerificationInputStateCopy","setVerificationInputState","StatementRow","isExplanationShown","setisExplanationShown","TextNExplanation","isQuiz","SLASH","TEACHER","LESSON","STUDENT","ELEV","defaultOptions","LoginStudentDocument","gql","baseOptions","Apollo","VerifyStudentDocument","useVerifyStudentMutation","AddPinStudentDocument","useAddPinStudentMutation","VerifyMobileNoDocument","useVerifyMobileNoLazyQuery","ConfirmMobileNoDocument","useConfirmMobileNoLazyQuery","GetActiveNoticesDocument","useGetActiveNoticesQuery","GetStudentCategoriesDocument","useGetStudentCategoriesQuery","GetStudentInfoDocument","useGetStudentInfoLazyQuery","GetStudentNameDocument","ManageStudentDocument","GetSchoolListDocument","GetDepartmentListDocument","useGetDepartmentListQuery","CreateQuizDocument","useCreateQuizMutation","StartContentDocument","GradeSlideDocument","FinishQuizDocument","useFinishQuizMutation","GetLatestResultDocument","useGetLatestResultQuery","GetQuizResultDocument","CreateClassOnlineQuizDocument","FinishClassOnlineQuizDocument","GetCorrectQuizzesDocument","useGetCorrectQuizzesQuery","GetAchievementTypesDocument","useGetAchievementTypesQuery","GetStudentAchievementsDocument","useGetStudentAchievementsQuery","ManageAchievementDocument","useManageAchievementMutation","CreateFreeQuizDocument","useCreateFreeQuizMutation","GetFailedSlidesDocument","useGetFailedSlidesQuery","MarkSlideDocument","useMarkSlideMutation","UnmarkSlideDocument","useUnmarkSlideMutation","GetMarkedSlidesDocument","GetStudentPubLessonsDocument","useGetStudentPubLessonsQuery","StudentViewLessonDocument","useStudentViewLessonMutation","DeactivateNotificationDocument","useDeactivateNotificationMutation","GetCorrectQuizzesResultDocument","useGetCorrectQuizzesResultQuery","GetClassStudentResultDocument","GetClassStudentParticipantDocument","AddAiStudentDocument","GetClassQuizByConfigIdDocument","AddTeoriLessonStudentDocument","GetStudentTipsDocument","useGetStudentTipsQuery","GetStudentNotificationsDocument","useGetStudentNotificationsQuery","Stopwatch","time","settime","setSeconds","substring","setNewTime","LoginDocument","useLoginMutation","GetSasDocument","GetSchoolStudentsDocument","useGetSchoolStudentsQuery","GetStudentFailedTagsDocument","useGetStudentFailedTagsQuery","DeleteLessonDocument","useDeleteLessonMutation","GetFailedSlidesTagDocument","useGetFailedSlidesTagQuery","DeleteStudentDocument","GetTeoriContentDocument","EditStudentClassStartDocument","useEditStudentClassStartMutation","GetOwnedContentDocument","GetLessonInfoDocument","useGetLessonInfoQuery","GetAvailableTagsDocument","ManageContentDocument","ManageLessonDocument","useManageLessonMutation","ManageQuizDocument","GetSoundContentDocument","GetLessonEditDocument","useGetLessonEditQuery","GetCompleteQuizEditDocument","ManageClassConfigDocument","useManageClassConfigMutation","DeleteClassConfigDocument","useDeleteClassConfigMutation","InsertClassQuizDocument","useInsertClassQuizMutation","GetContentQuizInfoDocument","useGetContentQuizInfoQuery","GetTeacherDashboardDocument","useGetTeacherDashboardQuery","DeleteSlideDocument","useDeleteSlideMutation","DeleteSlideTagDocument","DeleteQuizSlideDocument","DeleteQuizStatementDocument","GetStudentsAdminDocument","GetCategoriesDocument","GetAdminStudentLoginInfoDocument","GetStudentActivityDocument","useGetStudentActivityQuery","BlockSlideDocument","useBlockSlideMutation","UnmarkSlideTeacherDocument","useUnmarkSlideTeacherMutation","GetMarkedSlidesCountDocument","useGetMarkedSlidesCountQuery","GetSubjectLessonsDocument","useGetSubjectLessonsQuery","CombineLessonDocument","useCombineLessonMutation","PublishLessonDocument","usePublishLessonMutation","GetStudentAchTypesDocument","useGetStudentAchTypesQuery","GetStudentsSchoolDeletedDocument","useGetStudentsSchoolDeletedQuery","UnlinkStudentDocument","useUnlinkStudentMutation","UnlinkSlideDocument","useUnlinkSlideMutation","CloneLessonDocument","useCloneLessonMutation","GetClassQuizResultDocument","useGetClassQuizResultQuery","GetAllSchoolsDocument","GetNotificationStudentsCountDocument","AddStudentsNotificationDocument","SetSchoolStatusDocument","ManageSchoolDocument","GetConfigCountByIdDocument","useGetConfigCountByIdLazyQuery","CreateSchoolCategoryDocument","GetSchoolCategoryDocument","GetSchoolSubusersAdminDocument","ManageSubuserDocument","DeleteSubuserDocument","GetAllCategoriesDocument","GetTeoriLessonStudentsDocument","useGetTeoriLessonStudentsQuery","GetAllSlidesDocument","Slide","isMarked","setIsMarked","isEnlarged","setisEnlarged","marked_slides","markSlide","unmarked_slides","unmarkSlide","onImageClick","isLaptopView","setIsLaptopView","initialScale","minScale","centerZoomedOut","maxScale","centerOnInit","wrapperClass","isStats","stopPropagation","goToTrafficSigns","star","statementArray","ResultView","passStatus","amountCorrect","SlideSelector","slideArray","setSlideArray","currentSlide","setCurrentSlide","goBack","achievementTypeID","achivementTypeID","TempSlideArray","errorCount","tempMedia","arrow","getElementsByClassName","isFailed","calculateCorrectAmount","endContent","setendContent","setresult","setisFailed","base_quiz_id","shouldFetchByOnlineID","resultLoading","onlineID","onlineQuizData","onlineQuizLoading","onlineQuizRefetch","getThumbnail","mediaString","convertAPIToEndState","elaboration_Text","progress_is_marked","getLatestResult","Answers","currentAnswer","handleYesAnswer","soundPlayer","nextSound","handleNoAnswer","Video","isNoSound","setHasVideoEnded","playsinline","onEnded","Image","isZoomed","setisZoomed","handleSetZoom","contentClass","image","Media","videoOrSlide","SlideArrows","handlePrevious","handleNext","AudioTrack","indexPlayer","isSoundError","setisSoundError","onYes","indexPromise","soundPromise","all","loadPlayersWithSound","playCurrentSound","introQuestionSound","load","audioSounds","onended","handleNextSlide","handleAfterIntro","increment","pauseSeconds","specialAlertBox","isActive","setisActive","indexSound","soundMedia","statementLength","indexSoundSrc","indexNumber","Statements","introStatement","introQuestionMedia","indexSoundArray","getSoundMedia","sounds","Audio","isLearningMode","concat","onFinished","handleStatementClick","introQuestionText","LearningMode","isShown","setisShown","learningModeGradeSlide","onDetailsClick","DigitalStatements","shouldUpdate","setshouldUpdate","handleStatementSoundPlay","playTextSound","mediaSrc","renderStatement","handleStatementClickIOC","soundIcon","sethasVideoEnded","isStatementsDone","setisStatementsDone","nameOfTest","handleAnswerPress","handleDigitalClick","backgroundColor","handlePreviousSlide","hasSubtitles","currentSound","fancyTimeFormat","hrs","mins","secs","digitalDisplay","Main","intervalId","finishQuizMethod","prevTime","isFinishLoading","setisFinishLoading","online_quiz_token","manageAchievement","setToEnd","setOpen","icon","watch","Dialog","onClose","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","QuizError","refresh","stringToSeparate","shouldRefresh","setshouldRefresh","quiz_speed","quiz_subtitles","subtitlesID","quiz_language","quiz_read_only","quiz_learning_mode","createFreeQuiz","quizType","base_quiz","randomEvaluation","shouldRefetchByOnlineID","quiz_strength_test","isStrengthTest","quiz_random_evaluation_test","online_Quiz_Tags","tagString","trim","online_Quiz_Slides","slideString","convertStringToSlideIDs","testName","createQuiz","intro_sound_location","remove","chatBotElement","quiz_speed_value","setonlineID","display","flexDirection","alignItems","fontWeight","marginTop","marginBottom","textAlign","useForm","handleSubmit","chosenTestLanguage","chosenTestSubs","setIsDigital","setIsNoSound","iOSAlert","setiOSAlert","isDescription1Expanded","setisDescription1Expanded","isDescription2Expanded","setisDescription2Expanded","isDescription3Expanded","setisDescription3Expanded","onSubmit","submitData","chosenLanguage","chosenSubtitles","setlanguageID","setsubtitlesID","subs","setupInputs","FormLabel","component","RadioGroup","defaultValue","setIsLearningMode","FormControlLabel","control","Radio","languageArray","allowed","quizLanguage","string","selected","renderLanguages","subArray","sub","renderSubs","redArrow","testType","testIcon","setisLearningMode","setisNoSound","settimeString","errorCheck","isTabletMode","setisTabletMode","onlineQuizID","manageAchievementMutation","hasFails","achievementID","achievement","achievement_has_fails","achievement_id","achievement_status","achievement_quiz_id","time_spent","bookIcon","renderQuizState","setErrorMessage","errors","formState","setValue","setError","activateCode","setIsLoading","preFix","entry_code","passcode","VerifyStudent","setMobileNumber","setLoginStep","CreatePin","required","setpreFix","AccessExpired","verificationCode","setVerificationCode","confirmationCode","code","isSMSsent","setisSMSsent","fillArrayWithEmptyStrings","verificationInput","setVerificationInput","confirmationError","setconfirmationError","goodToGo","setGoodToGo","onCompleted","verifyMobileNo","firstString","secondString","nextFetchPolicy","getConfirmationCode","handleSendSMS","handleChangePhoneNumber","isAccessCode","FirstLoginAccessCode","fullWidth","ConfirmationMobileAccess","confirmationMobileAccessCode","confirmationMobileAccessError","setconfirmationMobileAccessError","confirmMobileNo","getConfirmationMobileAccessCode","setCreatePIN","createPINInputState","setCreatePINInputState","setRepeatPIN","repeatPINInputState","setRepeatPINInputState","addPINtoStudent","firstpininput","HTMLInputElement","AddPinStudent","isFirstTime","setisFirstTime","hasPasscode","sethasPasscode","setConfirmationCode","ToggleButtonGroup","exclusive","ToggleButton","ConfirmMobileAccess","handleClickToClass","buttonAction","TeoriLogoWhite","studentIcon","toClass","Login","localLoading","setLocalLoading","handleLoginClick","PIN","handleRemoveSupport","onKeyDown","handleActivationClick","failIcon","successIcon","finalLoader","loginStep","IsLoading","forcedRerender","setforcedRerender","PINCode","setPINCode","handleChangePrefix","setisAccessCode","createElement","scriptConfig","scriptLoader","setAttribute","defer","appendChild","removeChild","removeLoginSupport","chatbox","handleRegisterButton","handleActivationCode","handleTeoriLogoClick","backToStart","renderInformationSide","TransitionGroup","CSSTransition","classNames","timeout","renderLoginState","LoadingBar","ïnsideProgress","setïnsideProgress","LinearProgress","total","loadingElement","customLoader24","itemId","filterById","itemIdToDelete","first","second","sortById","number","checkIfStringContains","eventTarget","isNaN","valueAsNumber","numberOfItemsInArray","inputValues","arrayToConvert","refObject"],"mappings":"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","file":"static/js/main.aad8a2bd.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/smallTeoriLogo.e978e85a.png\";","import { Button } from '@material-ui/core';\r\nimport React from 'react';\r\nimport { useAddToHomescreenPrompt } from '../hooks/A2HS';\r\nimport \"./style/A2HSComponent.scss\"\r\nimport teoriLogo from \"../assets/smallTeoriLogo.png\";\r\n\r\nexport type IA2HSComponentProps = {\r\n \r\n}\r\n\r\nconst A2HSComponent: React.FC<IA2HSComponentProps> = ({ }) => {\r\n const [prompt, promptToInstall] = useAddToHomescreenPrompt();\r\n const [isVisible, setVisibleState] = React.useState(false);\r\n \r\n const hide = () => {\r\n setVisibleState(false);\r\n localStorage.setItem(\"A2HS\", \"NO\")\r\n }\r\n \r\n React.useEffect(\r\n () => {\r\n if (prompt) {\r\n if(localStorage.getItem(\"A2HS\") === \"NO\"){\r\n\r\n }else{\r\n setVisibleState(true);\r\n }\r\n }\r\n },\r\n [prompt]\r\n );\r\n \r\n if (!isVisible) {\r\n return <div />;\r\n }\r\n \r\n return (\r\n <div onClick={hide} className=\"A2HS\">\r\n <div className='textNpicture'>\r\n <div className='text'>\r\n Vil du tilføje siden til startskærmen?\r\n </div>\r\n <div className='picture'><img src={teoriLogo}></img></div>\r\n </div>\r\n <div className='buttons'>\r\n <Button onClick={hide} className=\"FAIL\">Luk</Button>\r\n <Button onClick={promptToInstall} className=\"SUCCESS\">Tilføj til startskærmen</Button>\r\n </div>\r\n </div>\r\n );\r\n}\r\nexport { A2HSComponent };","import * as React from \"react\";\r\n\r\ninterface IBeforeInstallPromptEvent extends Event {\r\n readonly platforms: string[];\r\n readonly userChoice: Promise<{\r\n outcome: \"accepted\" | \"dismissed\";\r\n platform: string;\r\n }>;\r\n prompt(): Promise<void>;\r\n}\r\n\r\nexport function useAddToHomescreenPrompt(): [\r\n IBeforeInstallPromptEvent | null,\r\n () => void\r\n] {\r\n const [prompt, setState] = React.useState<IBeforeInstallPromptEvent | null>(\r\n null\r\n );\r\n\r\n const promptToInstall = () => {\r\n if (prompt) {\r\n return prompt.prompt();\r\n }\r\n return Promise.reject(\r\n new Error(\r\n 'Tried installing before browser sent \"beforeinstallprompt\" event'\r\n )\r\n );\r\n };\r\n\r\n React.useEffect(() => {\r\n const ready = (e: IBeforeInstallPromptEvent) => {\r\n e.preventDefault();\r\n \r\n setState(e);\r\n };\r\n\r\n window.addEventListener(\"beforeinstallprompt\", ready as any);\r\n\r\n return () => {\r\n window.removeEventListener(\"beforeinstallprompt\", ready as any);\r\n };\r\n }, []);\r\n\r\n return [prompt, promptToInstall];\r\n}","import { CircularProgress } from \"@material-ui/core\";\r\nimport React, { useEffect } from \"react\";\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from \"../../../../translations/translationProvider\";\r\nimport \"./PlaceholderPage.scss\";\r\n\r\nexport type IPlaceholderPageProps = {};\r\n\r\nconst PlaceholderPage: React.FC<IPlaceholderPageProps> = ({}) => {\r\n\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n return (\r\n <div className=\"PlaceholderPage\">\r\n <TeoriLogo />\r\n <div className=\"infoBox\">\r\n <div className=\"text\">\r\n {\r\n languageString.teacherStudentPage.placholder.youAreLoggedIn\r\n }\r\n </div>\r\n <div className=\"feedback\">\r\n <CircularProgress/>\r\n <span>{languageString.teacherStudentPage.placholder.feedback}</span>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { PlaceholderPage };\r\n","import React from \"react\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../../translations/translationProvider\";\r\nimport DoneRoundedIcon from \"@mui/icons-material/DoneRounded\";\r\nimport CloseRoundedIcon from \"@mui/icons-material/CloseRounded\";\r\nimport CheckIcon from \"@mui/icons-material/Check\";\r\n\r\nexport type ITeacherStudentResultSlideProps = {\r\n PassedSlide?: ResultSlide;\r\n currentStatement: number;\r\n currentState: number;\r\n current: number;\r\n length: number;\r\n};\r\n\r\ninterface ResultSlide {\r\n introSoundText: string;\r\n statements: ResultStatement[];\r\n}\r\ninterface ResultStatement {\r\n answer: number;\r\n correctAnswer: number;\r\n text: string;\r\n passed: boolean;\r\n}\r\n/* THIS SLIDE IS RESPONSIBLE FOR SHOWING WHAT SLIDE THE TEACHER SHOWs */\r\nconst TeacherStudentResultSlide: React.FC<ITeacherStudentResultSlideProps> = (\r\n props: ITeacherStudentResultSlideProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const renderStatementsOneAtATime = () => {\r\n const tempArray: JSX.Element[] = [];\r\n props.PassedSlide?.statements.forEach((statement, index) => {\r\n if (props.currentStatement < index) {\r\n } else {\r\n if (statement.answer) {\r\n tempArray.push(\r\n <>\r\n <div className=\"index\">{index + 1}.</div>\r\n <div className=\"statement\">\r\n <div\r\n className={\r\n statement.answer === 1\r\n ? \"statementBox selected\"\r\n : \"statementBox notSelected\"\r\n }\r\n >\r\n {statement.answer === 1 ? <CheckIcon /> : null}\r\n </div>\r\n <div\r\n className={\r\n statement.answer === 2\r\n ? \"statementBox selected\"\r\n : \"statementBox notSelected\"\r\n }\r\n >\r\n {statement.answer === 2 ? <CheckIcon /> : null}\r\n </div>\r\n {statement.answer === statement.correctAnswer ? (\r\n <DoneRoundedIcon className=\"successIcon\" />\r\n ) : (\r\n <CloseRoundedIcon className=\"failedIcon\" />\r\n )}\r\n </div>\r\n </>\r\n );\r\n } else {\r\n tempArray.push(\r\n <div className=\"statement\">\r\n <div className=\"index\">{index + 1}.</div>\r\n <div className={\"statementBox notSelected\"}></div>\r\n <div className={\"statementBox notSelected\"}></div>\r\n {<CloseRoundedIcon className=\"failedIcon\" />}\r\n </div>\r\n );\r\n }\r\n }\r\n });\r\n\r\n return tempArray;\r\n };\r\n\r\n const renderStatements = (): JSX.Element[] => {\r\n const tempArray: JSX.Element[] = [];\r\n props.PassedSlide?.statements.forEach((statement, index) => {\r\n if (statement.answer) {\r\n tempArray.push(\r\n <>\r\n <div className=\"index\">{index + 1}.</div>\r\n <div className=\"statement\">\r\n <div\r\n className={\r\n statement.answer === 1\r\n ? \"statementBox selected\"\r\n : \"statementBox notSelected\"\r\n }\r\n >\r\n {statement.answer === 1 ? <CheckIcon /> : null}\r\n </div>\r\n <div\r\n className={\r\n statement.answer === 2\r\n ? \"statementBox selected\"\r\n : \"statementBox notSelected\"\r\n }\r\n >\r\n {statement.answer === 2 ? <CheckIcon /> : null}\r\n </div>\r\n {statement.answer === statement.correctAnswer ? (\r\n <DoneRoundedIcon className=\"successIcon\" />\r\n ) : (\r\n <CloseRoundedIcon className=\"failedIcon\" />\r\n )}\r\n </div>\r\n </>\r\n );\r\n } else {\r\n tempArray.push(\r\n <>\r\n <div className=\"index\">{index + 1}.</div>\r\n <div className=\"statement\">\r\n <div className={\"statementBox notSelected\"}></div>\r\n <div className={\"statementBox notSelected\"}></div>\r\n {<CloseRoundedIcon className=\"failedIcon\" />}\r\n </div>\r\n </>\r\n );\r\n }\r\n });\r\n\r\n return tempArray;\r\n };\r\n\r\n return (\r\n <div className=\"TeacherStudentResultSlide\">\r\n <div className=\"slideCount\">{props.current + \" : \" + props.length}</div>\r\n <div className=\"statement header\">\r\n <div className={\"statementBox\"}>JA</div>\r\n <div className={\"statementBox\"}>NEJ</div>\r\n {<CloseRoundedIcon className=\"failedIcon\" />}\r\n </div>\r\n {props.currentState === 1\r\n ? renderStatementsOneAtATime()\r\n : renderStatements()}\r\n </div>\r\n );\r\n};\r\n\r\nexport { TeacherStudentResultSlide };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Socket } from \"socket.io-client\";\r\nimport Loading from \"../../../../../globalComponents/Loading\";\r\nimport { TeoriLogo } from \"../../../../../globalComponents/TeoriLogo\";\r\nimport { useGetClassStudentParticipantQuery, useGetClassStudentResultQuery, useGetQuizResultQuery } from \"../../../../../graphql/generated/graphqlStudent\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../../translations/translationProvider\";\r\nimport \"./TeacherStudentGraduation.scss\"\r\nimport { TeacherStudentResultSlide } from \"./TeacherStudentResultSlide\";\r\n\r\nexport type ITeacherStudentGraduationProps = {\r\n graduationState?: any;\r\n socket: Socket;\r\n quizID: number;\r\n};\r\ninterface QuizPassState {\r\n amount: number;\r\n failed: number;\r\n passed: number;\r\n}\r\n\r\ninterface ResultSlide{\r\n introSoundText: string;\r\n statements: ResultStatement[];\r\n}\r\ninterface ResultStatement{\r\n answer: number;\r\n correctAnswer: number;\r\n text: string;\r\n passed: boolean;\r\n}\r\n\r\nconst TeacherStudentGraduation: React.FC<ITeacherStudentGraduationProps> = (\r\n props: ITeacherStudentGraduationProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [isLoading, setisLoading] = useState(true);\r\n const [state, setstate] = useState<QuizPassState | undefined>();\r\n const [selectedSlide, setselectedSlide] = useState<number | undefined>();\r\n const [selectedState, setselectedState] = useState<number>(0);\r\n const [slides, setslides] = useState<ResultSlide[]>();\r\n const [currentStatement, setcurrentStatement] = useState<number>(0);\r\n const {data: slideData, loading} = useGetClassStudentResultQuery({variables:{class_quiz_id: String(props.quizID)}, pollInterval: 15000})\r\n const {data: resultData} = useGetQuizResultQuery({variables: {online_quiz_id: localStorage.getItem(\"online_quiz_class_id\") ? localStorage.getItem(\"online_quiz_class_id\")! : \"-1\"}, pollInterval: 15000 })\r\n const {data: participantData} = useGetClassStudentParticipantQuery({variables:{class_quiz_id: String(props.quizID)}, pollInterval: 15000})\r\n\r\n const [hasBeenCalled, sethasBeenCalled] = useState(false);\r\n\r\n const [AmountState, setAmountState] = useState<any>(undefined);\r\n\r\n useEffect(() => {\r\n if(participantData?.getClassStudentParticipant){\r\n setstate({amount: participantData.getClassStudentParticipant.student_amount! , failed: participantData.getClassStudentParticipant.student_failed!, passed: participantData.getClassStudentParticipant.student_passed!})\r\n }\r\n }, [participantData]);\r\n\r\n useEffect(() => {\r\n if(resultData?.getQuizResult){\r\n \r\n if(resultData.getQuizResult[0]){\r\n\r\n setAmountState({slide_amount: resultData.getQuizResult[0].slide_amount, slides_failed: resultData.getQuizResult[0].slides_failed, quiz_pass_status: resultData.getQuizResult[0].quiz_pass_status})\r\n const tempSlideArray: ResultSlide[] = [];\r\n if(slideData?.getClassStudentResult){\r\n \r\n slideData.getClassStudentResult.forEach((slide) => {\r\n const tempStatementArray: ResultStatement[] = [];\r\n slide?.slide_statements?.forEach((statement) => {\r\n tempStatementArray.push({\r\n answer: statement?.statement_progress_answer!,\r\n correctAnswer: statement?.statement_answer_id!,\r\n text: statement?.sound_text!,\r\n passed: statement?.slide_pass_status!\r\n })\r\n })\r\n \r\n tempSlideArray.push({\r\n introSoundText: slide?.intro_sound_text!,\r\n statements: tempStatementArray\r\n })\r\n })\r\n setslides(tempSlideArray); \r\n sethasBeenCalled(true);\r\n }\r\n }\r\n }\r\n }, [resultData]);\r\n \r\n const setStateAndSlide = (slideID: number, state: number) => {\r\n if(slides){\r\n\r\n \r\n setselectedSlide(slideID);\r\n setselectedState(state);\r\n }\r\n }\r\n\r\n const setStatementAndSlide = (slideID: number, statementID: number) => {\r\n if(slides){\r\n\r\n \r\n setselectedSlide(slideID);\r\n setcurrentStatement(statementID);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n //IN HERE WE SHOULD FETCH THE RESULT IN SOMEWAY\r\n if(slides){\r\n props.socket.on(\"quiz-direct-slide\", (data) => {\r\n setStateAndSlide(Number(data.slide_id), Number(data.current_stage));\r\n })\r\n props.socket.on(\"quiz-direct-statement\", (data) => {\r\n setStatementAndSlide(Number(data.slide_id), Number(data.current_statement));\r\n })\r\n }\r\n }, [slides]);\r\n \r\n\r\n\r\n const renderGradState = () => {\r\n if(!hasBeenCalled){\r\n return (\r\n <div className=\"success\">\r\n <div>{\"Vent venligst...\"}</div>\r\n <div>\r\n {\"....\"}\r\n </div>\r\n <div>{\"....\"}% af din klasse bestod</div>\r\n </div>\r\n )\r\n }\r\n if (AmountState.quiz_pass_status === true) {\r\n return (\r\n <div className=\"success\">\r\n <div>{languageString.teacherStudentPage.graduationPage.passed}</div>\r\n <div>\r\n {languageString.teacherStudentPage.graduationPage.youHad +\r\n \" \" +\r\n (AmountState.slide_amount -\r\n AmountState.slides_failed) +\r\n \" \" +\r\n languageString.teacherStudentPage.graduationPage.outOf + \r\n \" \" + \r\n AmountState.slide_amount +\r\n \" \" +\r\n languageString.teacherStudentPage.graduationPage.correct}\r\n </div>\r\n <div>{state ? 100 - (state?.failed / state?.amount * 100) : \" \"}% af din klasse bestod</div>\r\n </div>\r\n );\r\n } else {\r\n return <div className=\"failure\">\r\n <div>{languageString.teacherStudentPage.graduationPage.failed}</div>\r\n <div>\r\n {languageString.teacherStudentPage.graduationPage.youHad +\r\n \" \" +\r\n (AmountState.slide_amount -\r\n AmountState.slides_failed) +\r\n \" \" +\r\n languageString.teacherStudentPage.graduationPage.outOf + \r\n \" \" + AmountState.slide_amount +\r\n \" \" +\r\n languageString.teacherStudentPage.graduationPage.correct}\r\n </div>\r\n <div>{state ? 100 - (state?.failed / state?.amount * 100) : \" \"}% af din klasse bestod</div>\r\n </div>;\r\n }\r\n };\r\n return (\r\n <div className=\"TeacherStudentGraduation\">\r\n {AmountState === undefined ? (\r\n <>\r\n <Loading />\r\n </>\r\n ) : (\r\n <>\r\n <TeoriLogo />\r\n {renderGradState()}\r\n {selectedSlide !== undefined && selectedSlide !== -1 ? <TeacherStudentResultSlide current={selectedSlide + 1} length={slides!.length} PassedSlide={slides![selectedSlide]} currentState={selectedState} currentStatement={currentStatement}/> : null}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport { TeacherStudentGraduation };\r\n","import React, { useState } from \"react\";\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from \"../../../../../translations/translationProvider\";\r\nimport CheckIcon from '@mui/icons-material/Check';\r\n\r\nimport { TeacherStudentStatement } from \"../../../../model\";\r\n\r\nexport type ITeacherStudentStatementRowProps = {\r\n statement: TeacherStudentStatement;\r\n onYesClick: () => void;\r\n onNoClick: () => void;\r\n};\r\n\r\nconst TeacherStudentStatementRow: React.FC<ITeacherStudentStatementRowProps> = (\r\n props: ITeacherStudentStatementRowProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [isYesActive, setisYesActive] = useState(false);\r\n const [isNoActive, setisNoActive] = useState(false);\r\n\r\n const handleYesClick = () => {\r\n if (isNoActive) {\r\n setisNoActive(false);\r\n }\r\n setisYesActive(true);\r\n props.onYesClick();\r\n };\r\n\r\n const handleNoClick = () => {\r\n if (isYesActive) {\r\n setisYesActive(false);\r\n }\r\n setisNoActive(true);\r\n props.onNoClick();\r\n };\r\n\r\n return (\r\n <div className=\"TeacherStudentStatementRow\">\r\n <div\r\n className={isYesActive ? \"active rowBox\" : \"rowBox\"}\r\n onClick={handleYesClick}\r\n >\r\n {isYesActive ? <CheckIcon/> : null}\r\n </div>\r\n\r\n <div\r\n className={isNoActive ? \"active rowBox\" : \"rowBox\"}\r\n onClick={handleNoClick}\r\n >\r\n {\" \"}\r\n {isNoActive ? <CheckIcon/> : null}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { TeacherStudentStatementRow };\r\n","import React, { useEffect, useState } from \"react\";\r\n\r\nimport { TeacherStudentStatementRow } from \"./TeacherStudentStatementRow\";\r\nimport \"./TeacherStudentSlide.scss\"\r\nimport { TeacherStudentSlide as TeacherStudentSlideAlias, TeacherStudentStatement } from '../../../../model';\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from \"../../../../../translations/translationProvider\";\r\nimport { Slide_Progress, Statement_Grade, useGradeSlideMutation } from \"../../../../../graphql/generated/graphqlStudent\";\r\n\r\nexport type ITeacherStudentSlideProps = {\r\n slide: any;\r\n current: number;\r\n length: number;\r\n handleSetAnswer: (statementNumber: number, answer: number) => void;\r\n sendSlideOrEnd(slide: TeacherStudentSlideAlias): void;\r\n};\r\n\r\nconst TeacherStudentSlide: React.FC<ITeacherStudentSlideProps> = (\r\n props: ITeacherStudentSlideProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const [statements, setstatements] = useState(\"defaultStat\");\r\n const [gradeSlide] = useGradeSlideMutation();\r\n\r\n\r\n\r\n useEffect(() => {\r\n \r\n return () => {\r\n props.sendSlideOrEnd(props.slide);\r\n }\r\n }, []);\r\n\r\n const renderStatements = (): JSX.Element[] => {\r\n const tempArray: JSX.Element[] = [];\r\n tempArray.push(<div className=\"TeacherStudentStatementRow header\"><div>JA</div><div>NEJ</div></div>)\r\n props.slide.statements.forEach((statement) => {\r\n tempArray.push(\r\n <TeacherStudentStatementRow key={statement.id} statement={statement} onNoClick={() => props.handleSetAnswer(statement.id, 2)} onYesClick={() => props.handleSetAnswer(statement.id, 1)}/>\r\n );\r\n });\r\n\r\n return tempArray;\r\n };\r\n return <div className=\"TeacherStudentSlide\"><div className=\"slideCount\">{props.current + \" : \" + props.length}</div>{renderStatements()}</div>;\r\n};\r\n\r\nexport { TeacherStudentSlide };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Socket } from \"socket.io-client\";\r\nimport {\r\n Slide_Progress,\r\n Statement_Grade,\r\n useFinishClassOnlineQuizMutation,\r\n useGradeSlideMutation,\r\n} from \"../../../../../graphql/generated/graphqlStudent\";\r\nimport {\r\n TeacherStudentSlide as TeacherStudentSlideAlias,\r\n TeacherStudentStatement,\r\n} from \"../../../../model\";\r\nimport { TeacherStudentGraduation } from \"./TeacherStudentGraduation\";\r\nimport { TeacherStudentSlide } from \"./TeacherStudentSlide\";\r\n\r\nexport type ITeacherStudentQuizProps = {\r\n quizState: TeacherStudentSlideAlias[];\r\n setQuizState: any;\r\n socket: Socket;\r\n finishQuizNow(): void;\r\n};\r\n\r\nconst TeacherStudentQuiz: React.FC<ITeacherStudentQuizProps> = (\r\n props: ITeacherStudentQuizProps\r\n) => {\r\n const [currentCount, setcurrentCount] = useState(0);\r\n const [isQuizDone, setisQuizDone] = useState(false);\r\n const [gradeSlide] = useGradeSlideMutation();\r\n\r\n const handleSetAnswer = (statementNumber: number, answer: number) => {\r\n props.setQuizState((prevState) => {\r\n const copyState = prevState;\r\n if (copyState) {\r\n\r\n\r\n\r\n\r\n copyState[currentCount].statements[statementNumber].answer = answer;\r\n return copyState;\r\n }\r\n });\r\n };\r\n\r\n function gradeSlidetoAPI(slide: TeacherStudentSlideAlias) {\r\n let gradedSlide: Slide_Progress;\r\n const gradedStatements: Statement_Grade[] = [];\r\n for (const statement of slide.statements) {\r\n if (statement.answer) {\r\n if (statement.correctAnswer === 3) {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: true,\r\n statement_progress_answer: statement.answer,\r\n });\r\n } else {\r\n if (statement.correctAnswer === statement.answer) {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: true,\r\n statement_progress_answer: statement.answer,\r\n });\r\n } else {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: false,\r\n statement_progress_answer: statement.answer,\r\n });\r\n }\r\n }\r\n } else {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: false,\r\n statement_progress_answer: statement.answer,\r\n });\r\n }\r\n }\r\n gradedSlide = {\r\n progress_id: String(slide.id),\r\n statement_progress: gradedStatements,\r\n };\r\n return gradedSlide;\r\n }\r\n\r\n function sendSlideOrEnd(slide: TeacherStudentSlideAlias) {\r\n \r\n\r\n if (props.quizState.length - 1 <= currentCount) {\r\n gradeSlide({ variables: { gradedSlide: gradeSlidetoAPI(slide) } }).then(\r\n () => {\r\n props.finishQuizNow();\r\n }\r\n );\r\n } else {\r\n gradeSlide({ variables: { gradedSlide: gradeSlidetoAPI(slide) } });\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n //IN HERE WE WILL LISTEN TO THE QUIZ, AND WHEN THE SLIDE CHANGES THROUGH A SOCKET\r\n props.socket.on(\"slide-move\", (data) => {\r\n if(Number(data) > currentCount){\r\n setcurrentCount(Number(data));\r\n }\r\n });\r\n }, []);\r\n\r\n return (\r\n <div className=\"TeacherStudentQuiz\">\r\n <TeacherStudentSlide\r\n length={props.quizState.length}\r\n current={currentCount + 1}\r\n key={currentCount}\r\n slide={props.quizState[currentCount]}\r\n handleSetAnswer={handleSetAnswer}\r\n sendSlideOrEnd={sendSlideOrEnd}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport { TeacherStudentQuiz };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Socket } from \"socket.io-client\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\nimport Loading from \"../../../../globalComponents/Loading\";\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport {\r\n Online_Quiz,\r\n useCreateClassOnlineQuizMutation,\r\n useFinishClassOnlineQuizMutation,\r\n useStartContentMutation,\r\n} from \"../../../../graphql/generated/graphqlStudent\";\r\nimport DoneRoundedIcon from '@mui/icons-material/DoneRounded';\r\nimport { TeacherStudentSlide, TeacherStudentStatement } from \"../../../model\";\r\nimport { TeacherStudentGraduation } from \"./quizComponents/TeacherStudentGraduation\";\r\nimport { TeacherStudentQuiz } from \"./quizComponents/TeacherStudentQuiz\";\r\nimport \"./TeacherStudentQuizPage.scss\";\r\nexport type ITeacherStudentQuizPageProps = {\r\n socket: Socket;\r\n quizID: number | undefined;\r\n};\r\n\r\nconst TeacherStudentQuizPage: React.FC<ITeacherStudentQuizPageProps> = (\r\n props: ITeacherStudentQuizPageProps\r\n) => {\r\n const [loading, setloading] = useState(false);\r\n const [isInitial, setisInitial] = useState(true);\r\n\r\n const [isDone, setisDone] = useState(false);\r\n const [graduationState, setgraduationState] = useState<any>();\r\n\r\n const [quizState, setquizState] = useState<TeacherStudentSlide[]>();\r\n\r\n const [createClassQuiz] = useCreateClassOnlineQuizMutation({\r\n variables: {\r\n online_quiz: {\r\n quiz_class_id: String(props.quizID),\r\n quiz_test_name: \"Klasse test\",\r\n achievement_name: \"Klasse test\",\r\n },\r\n },\r\n });\r\n const [startContent] = useStartContentMutation();\r\n const [finishQuiz] = useFinishClassOnlineQuizMutation({\r\n variables: { quiz_class_id: String(props.quizID) },\r\n });\r\n\r\n function finishQuizNow() {\r\n setloading(true);\r\n finishQuiz().then((data) => {\r\n localStorage.removeItem(\"isOngoing\")\r\n\r\n setgraduationState(data.data?.finishClassOnlineQuiz);\r\n setisDone(true);\r\n });\r\n }\r\n\r\n function convertAPIToQuiz(state: Online_Quiz) {\r\n const tempArray: TeacherStudentSlide[] = [];\r\n if (state.slide_progress) {\r\n for (const slide of state.slide_progress) {\r\n const tempStatements: TeacherStudentStatement[] = [];\r\n if (slide?.statement_progress) {\r\n let index = 0;\r\n for (const statement of slide.statement_progress) {\r\n if (statement) {\r\n tempStatements.push({\r\n id: index,\r\n progressID: Number(statement.statement_progress_id),\r\n correctAnswer: statement.statement_answer_id!,\r\n });\r\n }\r\n index++;\r\n }\r\n }\r\n tempArray.push({\r\n id: Number(slide?.progress_id),\r\n statements: tempStatements,\r\n });\r\n }\r\n }\r\n return tempArray;\r\n }\r\n\r\n function createAndGetQuiz() {\r\n\r\n const id = localStorage.getItem(\"online_quiz_class_id\");\r\n const token = localStorage.getItem(\"online_quiz_class_token\");\r\n const isOngoing = localStorage.getItem(\"isRunning\");\r\n if (id && token && isOngoing === \"true\") {\r\n startContent({\r\n variables: { quiz_token_id: token, online_quiz_id: id },\r\n }).then((data) => {\r\n\r\n\r\n if (data.data) {\r\n const newState = convertAPIToQuiz(data.data.startContent!);\r\n setquizState(newState);\r\n }\r\n });\r\n } else {\r\n createClassQuiz().then((data) => {\r\n\r\n if (data) {\r\n localStorage.setItem(\"isOngoing\", \"true\");\r\n localStorage.setItem(\r\n \"online_quiz_class_id\",\r\n data.data!.createClassOnlineQuiz!.online_quiz_id!\r\n );\r\n localStorage.setItem(\r\n \"online_quiz_class_token\",\r\n data.data?.createClassOnlineQuiz?.quiz_token_id!\r\n );\r\n startContent({\r\n variables: {\r\n quiz_token_id: data.data?.createClassOnlineQuiz?.quiz_token_id,\r\n online_quiz_id: data.data?.createClassOnlineQuiz?.online_quiz_id,\r\n },\r\n }).then((data) => {\r\n\r\n if (data.data) {\r\n const newState = convertAPIToQuiz(data.data.startContent!);\r\n setquizState(newState);\r\n }\r\n });\r\n }\r\n //THEN WE GO INTO THE NORMAL QUIZ FLOW\r\n });\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n createAndGetQuiz();\r\n //WE GET THE DATA OF THE QUIZ IN HERE\r\n //THE QUIZ WILL BE A SPECIAL DATA TYPE, WHICH ACTUALLY ONLY LOOKS LIKE THIS\r\n /* quiz: {\r\n slides: Slide[]\r\n Slide: {\r\n statements: Statement[]\r\n }\r\n Statement: {\r\n Answer: number;\r\n }\r\n }*/\r\n //THEN IN THE END I WILL SEND IN THIS STRUCTURE TO THE API END IT EVALUATES\r\n props.socket.on(\"slide-controller-quiz\", () => {\r\n setisInitial(false);\r\n });\r\n\r\n props.socket.on(\"slide-move\", (data) => {\r\n if(Number(data) !== -1){\r\n setisInitial(false);\r\n }\r\n });\r\n\r\n props.socket.on(\"quiz-result-move\", () => {\r\n setisDone(true);\r\n })\r\n }, []);\r\n if (quizState === undefined) {\r\n return <Loading />;\r\n }\r\n if (isDone) {\r\n return (\r\n <TeacherStudentGraduation\r\n graduationState={graduationState}\r\n socket={props.socket}\r\n quizID={props.quizID!}\r\n />\r\n );\r\n }\r\n return (\r\n <>\r\n {loading ? <IntermediaryLoading /> : null}\r\n {isInitial ? (\r\n <div className=\"InitalTeacherStudentQuizPage\">\r\n <TeoriLogo />\r\n <div className=\"ReadyIcon\">\r\n <DoneRoundedIcon/>\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"TeacherStudentQuizPage\">\r\n <TeacherStudentQuiz\r\n quizState={quizState}\r\n setQuizState={setquizState}\r\n socket={props.socket}\r\n finishQuizNow={finishQuizNow}\r\n />\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport { TeacherStudentQuizPage };\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport {\r\n XYPlot,\r\n XAxis,\r\n YAxis,\r\n VerticalGridLines,\r\n HorizontalGridLines,\r\n VerticalBarSeries,\r\n Hint,\r\n LabelSeries,\r\n} from \"react-vis\";\r\nimport \"./StatsCard.scss\";\r\n\r\nexport type IStatsCardProps = {\r\n};\r\n\r\nconst StatsCard: React.FC<IStatsCardProps> = (props: IStatsCardProps) => {\r\n\r\n return(<div></div>\r\n );\r\n};\r\n\r\nexport { StatsCard };\r\n","import { CircularProgress } from \"@mui/material\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport { useGetMarkedSlidesQuery } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport { EndSlide, EndStatement, MediaType } from \"../../../model\";\r\nimport { StatsCard } from \"./statsComponents/StatsCard\";\r\nimport \"./TeacherStudentStats.scss\";\r\n\r\ninterface dataArray {\r\n averageData: number;\r\n data: number;\r\n name: string;\r\n}\r\n\r\nexport type ITeacherStudentStatsProps = {};\r\n\r\nconst TeacherStudentStats: React.FC<ITeacherStudentStatsProps> = ({}) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const { data, loading } = useGetMarkedSlidesQuery({fetchPolicy: \"no-cache\"});\r\n\r\n const [currentSlides, setcurrentSlides] = useState<EndSlide[]>();\r\n\r\n const [chosenSlide, setchosenSlide] = useState<number>();\r\n\r\n useEffect(() => {\r\n if (data) {\r\n const tempArray: EndSlide[] = [];\r\n data.getMarkedSlides?.forEach((slide) => {\r\n const tempStatements: EndStatement[] = [];\r\n slide?.slide_statements?.forEach((statement) => {\r\n if (statement) {\r\n tempStatements.push({\r\n answer: statement?.statement_progress_answer!,\r\n text: statement.sound_text!,\r\n correctAnswer: statement.statement_answer_id!,\r\n explanation: \"\",\r\n id: Number(statement.statement_progress_id!),\r\n });\r\n }\r\n \r\n });\r\n if(slide){\r\n\r\n tempArray.push({\r\n passed: slide.slide_pass_status!,\r\n media: slide.media_location!,\r\n mediaType: MediaType[Number(slide.media_type_id!)],\r\n introQuestion: slide.intro_sound_text!,\r\n progressID: \"2\",\r\n statements: tempStatements,\r\n id: slide.original_slide_id!,\r\n });\r\n }\r\n });\r\n setcurrentSlides(tempArray);\r\n }\r\n }, [data]);\r\n\r\n const renderSlides = (slides: EndSlide[]) => {\r\n if(slides.length !== 0){\r\n\r\n return slides.map((slide, index) => (\r\n <div className=\"slide\">\r\n <img src={slide.media} alt=\"SLIDE\"></img>\r\n </div>\r\n ));\r\n }else{\r\n return <div>Du har desværre ikke markeret nogle billeder</div>\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"TeacherStudentStats\">\r\n <div className=\"headerBox\">\r\n <TeoriLogo />\r\n </div>\r\n <div className=\"content\">\r\n <div className=\"subheader\">Dine markerede billeder</div>\r\n <div className=\"slideBox\">{currentSlides ? renderSlides(currentSlides) : <CircularProgress/>}</div>\r\n </div>\r\n {chosenSlide ? <StatsCard /> : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { TeacherStudentStats };\r\n","import React from 'react';\r\nimport { TeoriLogo } from '../../../../globalComponents/TeoriLogo';\r\nimport \"./OngoingLessonPage.scss\";\r\n\r\nexport type IOngoingLessonPageProps = {\r\n \r\n}\r\n\r\nconst OngoingLessonPage: React.FC<IOngoingLessonPageProps> = ({ }) => {\r\n return (\r\n <div className='OngoingLessonPage'>\r\n <TeoriLogo />\r\n <div className=\"infoBox\">\r\n <div className=\"text\">\r\n {\"Der er en lektion igang\"}\r\n </div>\r\n <div className=\"feedback\">\r\n </div>\r\n \r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport { OngoingLessonPage };","import { Alert, CircularProgress } from \"@mui/material\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { io, Socket } from \"socket.io-client\";\r\nimport { AppStateStudentContext } from \"../../../apollo/TeoriStudentProvider\";\r\nimport { useAddTeoriLessonStudentMutation, useGetStudentNameQuery } from \"../../../graphql/generated/graphqlStudent\";\r\nimport { joinRoom, setUsername } from \"../../socketFunction\";\r\nimport LoginPage from \"../loginPage/LoginPage\";\r\nimport { PlaceholderPage } from \"./controllerPages/PlaceholderPage\";\r\nimport { TeacherStudentQuizPage } from \"./controllerPages/TeacherStudentQuizPage\";\r\nimport { TeacherStudentStats } from \"./controllerPages/TeacherStudentStats\";\r\nimport { OngoingLessonPage } from \"./controllerPages/OngoingLessonPage\";\r\nimport \"./TeacherStudentController.scss\";\r\nimport { TeoriLogo } from \"../../../globalComponents/TeoriLogo\";\r\nimport { TeacherStudentGraduation } from \"./controllerPages/quizComponents/TeacherStudentGraduation\";\r\n\r\nexport type ITeacherStudentControllerProps = {};\r\n\r\nconst TeacherStudentController: React.FC<\r\n ITeacherStudentControllerProps\r\n> = ({}) => {\r\n const [currentState, setcurrentState] = useState<number>();\r\n const { appState, appGetUserID } = useContext(AppStateStudentContext);\r\n const [socket, setsocket] = useState<Socket | undefined>();\r\n const [quizID, setquizID] = useState<number>();\r\n const { data: nameData, loading: nameLoading } = useGetStudentNameQuery({\r\n fetchPolicy: \"network-only\",\r\n });\r\n const [error, seterror] = useState<Error>();\r\n const [hasListerner, sethasListerner] = useState(false);\r\n\r\n const [isConnected, setisConnected] = useState(false);\r\n\r\n\r\n const [addStudent] = useAddTeoriLessonStudentMutation({variables:{lessonId: window.location.href.split(\"/\")[4]}});\r\n\r\n\r\n useEffect(() => {\r\n if(appState.loggedIn){\r\n\r\n addStudent().then((data) => {\r\n if(data.data?.addTeoriLessonStudent){\r\n const response = data.data.addTeoriLessonStudent;\r\n if(response === \"STUDENT_ADDED\"){\r\n setcurrentState(0)\r\n setisConnected(true);\r\n }else if(response === \"STUDENT_ALREADY_ADDED\"){\r\n setcurrentState(0)\r\n setisConnected(true);\r\n }\r\n }\r\n })\r\n }\r\n }, [appState.loggedIn]);\r\n\r\n\r\n\r\n\r\n const renderContent = () => {\r\n if (appState.loggedIn) {\r\n if (!isConnected) {\r\n return <div className=\"connecting\"><TeoriLogo/><div className=\"infoBox\">\r\n <div className=\"feedback\">\r\n <CircularProgress/>\r\n <span>{\"Forbinder dig til sessionen\"}</span>\r\n </div>\r\n \r\n </div></div>;\r\n } else {\r\n switch (currentState) {\r\n case 0:\r\n return <TeacherStudentStats />;\r\n case 1:\r\n return \"SLIDES\";\r\n case 2:\r\n return (\r\n <TeacherStudentQuizPage\r\n socket={socket!}\r\n quizID={quizID}\r\n key={quizID}\r\n />\r\n );\r\n case 3:\r\n return <OngoingLessonPage />;\r\n case 4:\r\n return <TeacherStudentGraduation socket={socket!} quizID={quizID!}/> \r\n default:\r\n return <PlaceholderPage />;\r\n }\r\n }\r\n } else {\r\n return <LoginPage />;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n\r\n <div className=\"TeacherStudentController\">\r\n {renderContent()}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport { TeacherStudentController };\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router\";\r\nimport { AppStateStudentContext } from \"../apollo/TeoriStudentProvider\";\r\nimport { PATH_DASHBOARD } from \"../constants/pathConstants\";\r\nimport Loading from \"../globalComponents/Loading\";\r\nimport { useLoginStudentMutation } from \"../graphql/generated/graphqlStudent\";\r\n\r\nexport type IQuickLoginProps = {};\r\ninterface routeParams {\r\n phone: string;\r\n pin: string;\r\n}\r\n\r\n//This component only exists for the admin to log quickly in\r\nconst QuickLogin: React.FC<IQuickLoginProps> = ({}) => {\r\n const context = useContext(AppStateStudentContext);\r\n const history = useHistory();\r\n const params = useParams<routeParams>();\r\n\r\n const [currentState, setcurrentState] = useState(-1);\r\n\r\n const [LoginMutation] = useLoginStudentMutation();\r\n\r\n useEffect(() => {\r\n LoginMutation({\r\n variables: { phone_number: params.phone, pin_code: params.pin },\r\n onError: (e) => {\r\n if (e.message === \"pin_not_set\") {\r\n setcurrentState(1);\r\n } else if (e.message === \"user_expired\") {\r\n setcurrentState(0);\r\n } else {\r\n }\r\n },\r\n }).then((data) => {\r\n\r\n const tokens = data.data?.LoginStudent;\r\n if (tokens) {\r\n if (!tokens.login_before) {\r\n sessionStorage.setItem(\"has_login\", \"false\");\r\n }\r\n setTimeout(() => {\r\n localStorage.setItem(\"TEORIFIRSTTIME\", \"NO\");\r\n context.appSetLogin(tokens.accessToken!, tokens.refreshToken!);\r\n history.push(PATH_DASHBOARD);\r\n }, 1500);\r\n }\r\n });\r\n }, []);\r\n\r\n const renderSomething = () => {\r\n switch (currentState) {\r\n case -1:\r\n return (\r\n <div>\r\n <Loading />\r\n </div>\r\n );\r\n case 0:\r\n return (\r\n <div>\r\n <h2>Adgangen er udløbet</h2>\r\n </div>\r\n );\r\n case 1:\r\n return (\r\n <div>\r\n <h2>PIN-koden er ikke sat</h2>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n return <>{renderSomething()}</>;\r\n};\r\n\r\nexport { QuickLogin };\r\n","import { Checkbox } from \"@material-ui/core\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport Loading from \"../../../globalComponents/Loading\";\r\nimport { TeoriLogo } from \"../../../globalComponents/TeoriLogo\";\r\nimport { useAddAiStudentMutation, useCreateClassOnlineQuizMutation, useGetClassQuizByConfigIdLazyQuery } from \"../../../graphql/generated/graphqlStudent\";\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from \"../../../translations/translationProvider\";\r\nimport StudentQuizPage from \"../studentQuizPage/StudentQuizPage\";\r\nimport \"./StudentTeacherQuiz.scss\";\r\n\r\nexport type IStudentTeacherQuizProps = {\r\n isAI?: boolean;\r\n};\r\n\r\nconst StudentTeacherQuiz: React.FC<IStudentTeacherQuizProps> = (props: IStudentTeacherQuizProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [isLoading, setisLoading] = useState(true);\r\n\r\n const quizID = window.location.href.split(\"/\")[4];\r\n\r\n const [classID, setclassID] = useState<string>();\r\n const [classToken, setclassToken] = useState<string>();\r\n\r\n const [currentAIState, setcurrentAIState] = useState(0);\r\n\r\n const [addAIStudent, {data : aiStudentData}] = useAddAiStudentMutation({variables: {configId: Number(quizID)}})\r\n\r\n const [getClassByConfig, {data : classByConfig}] = useGetClassQuizByConfigIdLazyQuery({variables: {config_id: Number(quizID)}, fetchPolicy: \"no-cache\"})\r\n\r\n const [createClassQuiz, { data: createQuizdata }] =\r\n useCreateClassOnlineQuizMutation({\r\n variables: {\r\n online_quiz: {\r\n quiz_class_id: String(quizID),\r\n quiz_test_name: \"Klasse test\",\r\n achievement_name: \"Klasse test\",\r\n },\r\n },\r\n });\r\n\r\n const [iOS, setiOS] = useState(true);\r\n\r\n const handleChangeiOS = () => {\r\n setiOS(!iOS);\r\n }\r\n\r\n const createAIQuiz = (interval: NodeJS.Timeout) => {\r\n addAIStudent().then((data) => {\r\n const currentValue = data.data?.addAIStudent\r\n\r\n \r\n if(currentValue === 1){\r\n setcurrentAIState(1);\r\n }else if(currentValue === 2){\r\n setcurrentAIState(2);\r\n }else{\r\n setcurrentAIState(3);\r\n setisLoading(true);\r\n clearInterval(interval);\r\n createClassQuiz({\r\n variables: {\r\n online_quiz: {\r\n quiz_class_id: String(currentValue!),\r\n quiz_test_name: \"Klasse test\",\r\n achievement_name: \"Klasse test\",\r\n },\r\n },\r\n })\r\n }\r\n })\r\n }\r\n\r\n const createClassByConfig = (interval: NodeJS.Timeout) => {\r\n getClassByConfig().then((data) => {\r\n const currentValue = data.data?.getClassQuizByConfigID\r\n\r\n \r\n if(currentValue === 1){\r\n setcurrentAIState(1);\r\n }else if(currentValue === 2){\r\n setcurrentAIState(2);\r\n }else{\r\n setcurrentAIState(3);\r\n setisLoading(true);\r\n clearInterval(interval);\r\n createClassQuiz({\r\n variables: {\r\n online_quiz: {\r\n quiz_class_id: String(currentValue!),\r\n quiz_test_name: \"Klasse test\",\r\n achievement_name: \"Klasse test\",\r\n },\r\n },\r\n })\r\n }\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n if(props.isAI){\r\n const interval = setInterval(() => {createAIQuiz(interval);}, 5000);\r\n return () => clearInterval(interval);\r\n }else{\r\n const interval = setInterval(() => {createClassByConfig(interval);}, 5000);\r\n return () => {clearInterval(interval);};\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (createQuizdata) {\r\n localStorage.setItem(\"STUDENT_ONLINE_QUIZ\", createQuizdata.createClassOnlineQuiz!.online_quiz_id!)\r\n localStorage.setItem(\"STUDENT_ONLINE_QUIZ_TOKEN\", createQuizdata.createClassOnlineQuiz?.quiz_token_id!)\r\n setclassID(createQuizdata.createClassOnlineQuiz!.online_quiz_id!);\r\n setclassToken(createQuizdata.createClassOnlineQuiz?.quiz_token_id!);\r\n setisLoading(false);\r\n }\r\n }, [createQuizdata]);\r\n\r\n\r\n const renderiOS = () => {\r\n return(\r\n <div className=\"iOSContainer\">\r\n <div className=\"select iOSBox\" onClick={handleChangeiOS}>\r\n <Checkbox className=\"iOScheckbox\" checked={iOS} />\r\n <label className=\"iOSLabel\">{languageString.studentSettings.iOSCheckbox}</label>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n const renderAIPart = () => {\r\n if(currentAIState === 0){\r\n return (<Loading></Loading>)\r\n }\r\n if(currentAIState === 1){\r\n if(props.isAI){\r\n return <div className=\"AIIntermediate\"><div className=\"TeoriLogo\"><TeoriLogo/></div><div className=\"text\">Indlæser testen</div></div>\r\n }else{\r\n return <div className=\"AIIntermediate\"><div className=\"TeoriLogo\"><TeoriLogo/></div><div className=\"text\">Venter pÃ¥ din lærer</div></div>\r\n }\r\n }\r\n if(currentAIState === 2){\r\n return <div className=\"AIIntermediate\"><div className=\"TeoriLogo\"><TeoriLogo/></div><div className=\"text\">Venter pÃ¥ din lærer frigiver testen</div></div>\r\n }else{\r\n return(\r\n <>\r\n {\r\n isLoading ? \r\n <Loading/> : <StudentQuizPage\r\n isStudentTeacher={true}\r\n studentTeacherID={classID}\r\n studentTeacherToken={classToken}\r\n isDigital={iOS}\r\n />\r\n }\r\n </>\r\n )\r\n }\r\n }\r\n return (\r\n <>\r\n {renderAIPart()}\r\n </>\r\n );\r\n};\r\n\r\nexport { StudentTeacherQuiz };\r\n","import React, {\r\n FC,\r\n lazy,\r\n Suspense,\r\n useContext,\r\n useEffect,\r\n useState,\r\n} from \"react\";\r\nimport {\r\n BrowserRouter,\r\n Redirect,\r\n Route,\r\n Switch,\r\n useLocation,\r\n useRouteMatch,\r\n} from \"react-router-dom\";\r\nimport Loading from \"../globalComponents/Loading\";\r\nimport {\r\n PATH_DASHBOARD,\r\n PATH_ELEV,\r\n PATH_ELEV_AI,\r\n PATH_HOME,\r\n PATH_LOGIN,\r\n PATH_LOGIN_APP,\r\n PATH_PROFILE,\r\n PATH_QUIZ,\r\n PATH_STUDENT_TEACHER,\r\n PATH_STUDENT_TEACHER_AI,\r\n PATH_TEACHER_LESSON,\r\n PATH_TEACHER_STUDENT,\r\n PATH_TEST,\r\n} from \"../constants/pathConstants\";\r\nimport { fetchAccessToken } from \"../apollo/apolloProviderOperations\";\r\nimport { APOLLO_STUDENT_URL } from \"../constants/APIConstants\";\r\nimport { AppStateStudentContext } from \"../apollo/TeoriStudentProvider\";\r\nimport { TeacherStudentController } from \"../pages/Student/teacherStudentController/TeacherStudentController\";\r\nimport { TransitionGroup, CSSTransition } from \"react-transition-group\";\r\nimport \"./StudentRoutes.scss\";\r\nimport { FreeQuiz } from \"../pages/Student/FreeQuiz/FreeQuiz\";\r\nimport { QuickLogin } from \"./QuickLogin\";\r\nimport { A2HSComponent } from \"../globalComponents/A2HSComponent\";\r\nimport { StudentTeacherQuiz } from \"../pages/Student/studentTeacherQuiz/StudentTeacherQuiz\";\r\n\r\nexport interface RoutesProps {}\r\n\r\nlet initialized = false;\r\n\r\nexport const StudentRoutes: FC<RoutesProps> = () => {\r\n const { appState, appSetLogin, appSetLogout } = useContext(\r\n AppStateStudentContext\r\n );\r\n const isAuthenticated = appState.loggedIn;\r\n const { path, url } = useRouteMatch();\r\n\r\n const location = useLocation();\r\n\r\n const [loading, setLoading] = useState(true);\r\n useEffect(() => {\r\n if (initialized) return;\r\n\r\n initialized = true;\r\n fetchAccessToken(APOLLO_STUDENT_URL)\r\n .then((data: any) => {\r\n const failed =\r\n data === undefined || data?.RefreshUser.accessToken === undefined;\r\n failed\r\n ? appSetLogout()\r\n : appSetLogin(\r\n data?.RefreshUser.accessToken,\r\n data?.RefreshUser.refreshToken\r\n );\r\n })\r\n .catch((e) => {\r\n console.log(e);\r\n appSetLogout();\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n });\r\n if (loading) {\r\n return <Loading />;\r\n }\r\n\r\n const LoginPage = lazy(() => import(\"../pages/Student/loginPage/LoginPage\"));\r\n const LoginAppPage = lazy(() => import(\"../pages/Student/loginAppPage/LoginAppPage\"));\r\n const DashboardPage = lazy(\r\n () => import(\"../pages/Student/dashboardPage/DashboardPage\")\r\n );\r\n const SettingsPage = lazy(\r\n () => import(\"../pages/Student/settingsPage/SettingsPage\")\r\n );\r\n const QuizPage = lazy(\r\n () => import(\"../pages/Student/studentQuizPage/StudentQuizPage\")\r\n );\r\n\r\n const routes = [\r\n <Route\r\n key=\"slashRedirect\"\r\n exact\r\n path={PATH_HOME}\r\n render={() => <Redirect to={PATH_LOGIN} />}\r\n />,\r\n <Route\r\n key=\"loginPage\"\r\n exact\r\n path={PATH_LOGIN}\r\n render={() =>\r\n !isAuthenticated ? <LoginPage /> : <Redirect to={PATH_DASHBOARD} />\r\n }\r\n />,\r\n <Route\r\n key=\"loginPageApp\"\r\n exact\r\n path={PATH_LOGIN_APP}\r\n render={() =>\r\n !isAuthenticated ? <LoginAppPage /> : <Redirect to={PATH_DASHBOARD} />\r\n }\r\n />,\r\n <Route\r\n key=\"quickLogin\"\r\n exact\r\n path={PATH_LOGIN + \"/:phone/:pin\"}\r\n render={() =>\r\n <QuickLogin />\r\n }\r\n />,\r\n <Route\r\n key=\"settingsPage\"\r\n exact\r\n path={PATH_PROFILE}\r\n render={() =>\r\n isAuthenticated ? <SettingsPage /> : <Redirect to={PATH_DASHBOARD} />\r\n }\r\n />,\r\n <Route\r\n key=\"dashboardPage\"\r\n exact\r\n path={PATH_DASHBOARD}\r\n render={() =>\r\n isAuthenticated ? sessionStorage.getItem(\"has_login\") === \"false\" ? <SettingsPage /> : <DashboardPage /> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n <Route\r\n key=\"quizPage\"\r\n exact\r\n path={PATH_TEST}\r\n render={() =>\r\n isAuthenticated ? <QuizPage/> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n <Route\r\n key=\"lessonPage\"\r\n exact\r\n path={PATH_TEACHER_LESSON + \"/:id([0-9]+)\"}\r\n render={() => (isAuthenticated ? \"nuffin\" : <Redirect to={PATH_LOGIN} />)}\r\n />,\r\n <Route\r\n key=\"studentTeacherQuizPage\"\r\n exact\r\n path={PATH_ELEV + \"/:id\"}\r\n render={() => (isAuthenticated ? <StudentTeacherQuiz isAI/> : <LoginPage />)}\r\n />,\r\n <Route\r\n key=\"studentTeacherQuizPage\"\r\n exact\r\n path={PATH_ELEV_AI + \"/:id\"}\r\n render={() => (isAuthenticated ? <StudentTeacherQuiz isAI/> : <LoginPage />)}\r\n />,\r\n <Route\r\n key=\"teacherQuizPage\"\r\n exact\r\n path={PATH_TEACHER_STUDENT + \"/:id\"}\r\n render={() => <TeacherStudentController />}\r\n />,\r\n <Route\r\n key=\"freeQuiz\"\r\n exact\r\n path={PATH_QUIZ + \"/free\"}\r\n render={() => <QuizPage isFreeQuiz={true}/>}\r\n />\r\n ];\r\n\r\n return (\r\n <>\r\n <Suspense fallback={<Loading />}>\r\n <Switch>{routes}</Switch>\r\n </Suspense></>\r\n );\r\n};\r\n\r\nexport default StudentRoutes;\r\n","/* eslint-disable jsx-a11y/iframe-has-title */\r\n/* eslint-disable jsx-a11y/alt-text */\r\nimport React from 'react';\r\nimport closeIcon from \"../../../../assets/delete_icon.png\";\r\nimport { CreateQuizSlide, LessonSlide, LessonType, MediaType, VideoType } from '../../../model';\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport YouTube from 'react-youtube';\r\nimport \"./style/ItemDetails.scss\";\r\nimport { LessonPageVideo } from '../../lessonPage/components/LessonPageVideo';\r\n\r\nexport type IItemDetailsProps = {\r\n shrinkSelectedSlide: () => void;\r\n\tslide: CreateQuizSlide;\r\n}\r\n\r\nconst ItemDetails: React.FC<IItemDetailsProps> = (props: IItemDetailsProps) => {\r\n console.log(props.slide.type);\r\n \r\n\r\n const whatToRender = () => {\r\n switch(props.slide.type){\r\n case MediaType.AZUREIMG:\r\n return IMAGE();\r\n case MediaType.WEB_LINK:\r\n return WEBSITE();\r\n case MediaType.STREAM:\r\n return STREAMVIDEO();\r\n case MediaType.AZUREVIDEO:\r\n return VIDEO();\r\n case MediaType.YOUTUBE:\r\n return YOUTUBE();\r\n // case MediaType.LOCALVIDEO:\r\n // return LOCALVIDEO();\r\n }\r\n }\r\n\r\n const IMAGE = () => (<div><img src={props.slide.media}></img></div>)\r\n const WEBSITE = () => (<div><iframe src={typeof props.slide.tempFile === \"string\" ? props.slide.tempFile : undefined}></iframe></div>)\r\n const VIDEO = () => (<div><LessonPageVideo key={props.slide.tempFile!.toString()} video={typeof props.slide.tempFile === \"string\" ? props.slide.tempFile : \"\"} videoType={VideoType.STREAM}/></div>)\r\n // const LOCALVIDEO = () =>(<div className=\"LOCALVIDEO\"><LessonPageVideo key={props.slide.tempFile!.toString()} video={props.slide.tempFile!} videoType={VideoType.LOCALVIDEO}/></div>)\r\n const YOUTUBE = () =>(<div><YouTube videoId={typeof props.slide.tempFile === \"string\" ? props.slide.tempFile.split(\"?v=\", 2)[1] : \" \"}/></div>)\r\n const STREAMVIDEO = () =>(<div className=\"ReactPlayer\"><LessonPageVideo key={typeof props.slide.tempFile === \"string\" ? props.slide.tempFile : \"\"} video={typeof props.slide.tempFile === \"string\" ? props.slide.tempFile: \"\"} videoType={VideoType.STREAM}/></div>)\r\n\r\n return (\r\n <div className=\"Expanded\">\r\n <button onClick={props.shrinkSelectedSlide}><CloseIcon/></button>\r\n {whatToRender()}\r\n </div>\r\n );\r\n}\r\n\r\nexport { ItemDetails };","import React, { useState } from \"react\";\r\nimport { CreateQuizSlide, LessonSlide, MediaType } from \"../../../model\";\r\nimport expandIcon from \"../../../../assets/expand_icon.png\";\r\nimport deleteIcon from \"../../../../assets/delete_icon.png\";\r\nimport \"./style/Item.scss\";\r\nimport VideoThumbnail from \"react-video-thumbnail\";\r\nimport ReactTooltip from \"react-tooltip\";\r\nimport { availableSounds } from \"../CreateQuizPage\";\r\n\r\nexport type IContentItemProps = {\r\n slideOrderNumber: number;\r\n slide: CreateQuizSlide;\r\n handleSelectSlide: () => void;\r\n handleExpandSlide: () => void;\r\n handleDeleteSlide: () => void;\r\n introItem?: availableSounds;\r\n};\r\n\r\nconst ContentItem: React.FC<IContentItemProps> = (props: IContentItemProps) => {\r\n const [thumbnail, setthumbnail] = useState<string | undefined>(undefined);\r\n const imageORvideo = () => {\r\n if (props.slide.media) {\r\n return <img className=\"mainMedia\" src={props.slide.media}></img>;\r\n } else {\r\n return <div className=\"mediaThumb\">MEDIA</div>;\r\n }\r\n };\r\n\r\n const renderToolTipContent = () => {\r\n if (props.slide.statements) {\r\n if (props.slide.statements.length !== 0) {\r\n const statements = props.slide.statements.map((statement) => {\r\n return (\r\n <div>\r\n {statement.id}. {statement.soundAndText.soundText}\r\n </div>\r\n );\r\n });\r\n\r\n return (\r\n <ReactTooltip id={\"item\" + props.slide.id}>\r\n <div>\r\n {props.introItem\r\n ? props.introItem?.label\r\n : \"Intet intro spørgsmÃ¥l valgt\"}\r\n </div>\r\n {statements}\r\n </ReactTooltip>\r\n );\r\n }\r\n }\r\n };\r\n const renderFilledItem = () => {\r\n return (\r\n <div className=\"filledItem\">\r\n <img\r\n src={deleteIcon}\r\n onClick={props.handleDeleteSlide}\r\n alt=\"icon\"\r\n className=\"itemDelete\"\r\n />\r\n <img\r\n src={expandIcon}\r\n onClick={props.handleExpandSlide}\r\n alt=\"icon\"\r\n className=\"itemExpand\"\r\n />\r\n {imageORvideo()}\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <div\r\n className={\"Item\"}\r\n onClick={props.handleSelectSlide}\r\n data-tip\r\n data-for={\"item\" + props.slide.id}\r\n >\r\n <div className=\"itemNumber\">{`${props.slideOrderNumber}.`}</div>\r\n <div\r\n className={\r\n props.slide.hasError ? \"itemContent hasError\" : \"itemContent\"\r\n }\r\n >\r\n {renderFilledItem()}\r\n </div>\r\n </div>{\" \"}\r\n {renderToolTipContent()}\r\n </>\r\n );\r\n};\r\n\r\nexport { ContentItem };\r\n","import React from 'react';\r\nimport addIcon from \"../../../../assets/add_icon.png\";\r\nimport \"./style/Item.scss\";\r\n\r\nexport type IEmptyItemProps = {\r\n slideOrderNumber: number;\r\n\thandleCreateSlide: () => void;\r\n}\r\n\r\nconst EmptyItem: React.FC<IEmptyItemProps> = (props: IEmptyItemProps) => {\r\n return (\r\n <div className=\"Item\">\r\n <div className=\"itemNumber\">{`${props.slideOrderNumber}.`}</div>\r\n\t\t\t<div className=\"itemContent empty\">\r\n\t\t\t\t<button onClick={props.handleCreateSlide}><img src={addIcon} alt=\"ADD-ICON\"></img></button>\r\n\t\t\t</div>\r\n </div>\r\n );\r\n}\r\n\r\nexport { EmptyItem };","import { Button, TextField } from '@material-ui/core';\r\nimport React, { useState } from 'react';\r\nimport { getNumberOrEmptyStringFromEventTarget } from '../../../../services/utilFunctions';\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from '../../../../translations/translationProvider';\r\nimport \"./style/SlideSwapper.scss\"\r\n\r\nexport type ISlideSwapperProps = {\r\n swapSlides: (firstSlideIndex: number, secondSlideIndex: number) => void;\r\n}\r\n\r\nconst SlideSwapper: React.FC<ISlideSwapperProps> = (props: ISlideSwapperProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n\tconst [firstSlideIndex, setFirstSlideIndex] = useState<number | string>(\"\");\r\n\tconst [secondSlideIndex, setSecondSlideIndex] = useState<number | string>(\"\");\r\n\r\n\tconst handleChangeFirstSlideIndex = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n\t\tsetFirstSlideIndex(getNumberOrEmptyStringFromEventTarget(event.target));\r\n\t};\r\n\r\n\tconst handleChangeSecondSlideIndex = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n\t\tsetSecondSlideIndex(getNumberOrEmptyStringFromEventTarget(event.target));\r\n\t};\r\n\r\n\tconst handleSwapSlides = (): void => {\r\n\t\tif (typeof firstSlideIndex === \"number\" && typeof secondSlideIndex === \"number\") {\r\n\t\t\tprops.swapSlides(firstSlideIndex, secondSlideIndex);\r\n\t\t\tsetFirstSlideIndex(\"\");\r\n\t\t\tsetSecondSlideIndex(\"\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderIntegerInput = (\r\n\t\tvalue: number | string,\r\n\t\thandleChange: (event: React.ChangeEvent<HTMLInputElement>) => void,\r\n\t): JSX.Element => {\r\n\t\treturn <TextField className=\"slideSwapperInput\" type=\"number\" inputProps={{min: 1, max: 25, step: 1}} value={value} onChange={handleChange} />;\r\n\t};\r\n\r\n\treturn (\r\n\t\t<div className=\"SlideSwapper\">\r\n\t\t\t<div>{languageString.createLessonPage.movePicture}</div>\r\n\t\t\t{renderIntegerInput(firstSlideIndex, handleChangeFirstSlideIndex)}\r\n\t\t\t<div>{languageString.createLessonPage.withPicture}</div>\r\n\t\t\t{renderIntegerInput(secondSlideIndex, handleChangeSecondSlideIndex)}\r\n\t\t\t<Button variant=\"outlined\" className=\"swapButton\" onClick={handleSwapSlides}>\r\n\t\t\t\t{languageString.createLessonPage.movePicture}\r\n\t\t\t</Button>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport { SlideSwapper };","import { Button, Skeleton } from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport \"./OwnMaterial.scss\";\r\nimport DoneOutlineIcon from \"@mui/icons-material/DoneOutline\";\r\nimport randomImage from \"../../../../../assets/testImage.jpg\";\r\nimport { LessonSlide, LessonType, MediaType } from \"../../../../model\";\r\nimport VideoThumbnail from \"react-video-thumbnail\";\r\nimport {\r\n useGetOwnedContentLazyQuery,\r\n useGetTeoriContentQuery,\r\n useGetSasQuery,\r\n useManageContentMutation,\r\n useGetSasLazyQuery,\r\n} from \"../../../../../graphql/generated/graphql\";\r\nimport { AppStateContext } from \"../../../../../apollo/TeoriTeacherProvider\";\r\nimport { uploadOwnContent } from \"../../../../../services/azureStorage\";\r\nimport FileUploadIcon from \"@mui/icons-material/FileUpload\";\r\nimport { CircularProgress } from \"@material-ui/core\";\r\n\r\nexport type IOwnMaterialProps = {\r\n handleFinishCreateNewSlide: (newSlide: any) => void;\r\n};\r\n\r\nconst TeoriContent: React.FC<IOwnMaterialProps> = (\r\n props: IOwnMaterialProps\r\n) => {\r\n const context = useContext(AppStateContext);\r\n\r\n const [isFileInput, setisFileInput] = useState(false);\r\n const [fileBlob, setfileBlob] = useState<File | undefined>(undefined);\r\n const [videoThumbnail, setvideoThumbnail] = useState<any | undefined>(\r\n undefined\r\n );\r\n const [isLoading, setisLoading] = useState(true);\r\n const [getSAS, { data: SASKey }] = useGetSasLazyQuery({\r\n });\r\n\r\n const [manageContent] = useManageContentMutation();\r\n const [isPictureUploading, setisPictureUploading] = useState(false);\r\n\r\n const [offset, setoffset] = useState(0);\r\n const [limit, setlimit] = useState(30);\r\n\r\n const [selectedSlide, setselectedSlide] = useState(-1);\r\n const [ownMaterialList, setownMaterialList] = useState<JSX.Element[]>([\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n ]);\r\n\r\n const {\r\n data: ownedContentData,\r\n loading,\r\n fetchMore,\r\n } = useGetTeoriContentQuery({\r\n variables: { offset: 0, limit: 30 },\r\n });\r\n\r\n useEffect(() => {\r\n if(!SASKey?.getSAS){\r\n getSAS();\r\n }\r\n \r\n }, []);\r\n\r\n async function setOwnMaterial() {\r\n const tempArray: JSX.Element[] = [];\r\n if (ownedContentData?.getTeoriContent) {\r\n for (const slide of ownedContentData.getTeoriContent) {\r\n if (slide?.media_type_id === 1) {\r\n const slideAddress = slide.media_location?.split(\"/\")[3];\r\n\r\n await fetch(\r\n `https://vimeo.com/api/oembed.json?url=https://vimeo.com/${slideAddress}`\r\n )\r\n .then((data) => data.json())\r\n .then((result) => {\r\n console.log(result.thumbnail_url);\r\n\r\n tempArray.push(\r\n <img\r\n src={result.thumbnail_url}\r\n id={slide.content_id ? slide.content_id : \"not found\"}\r\n className={\r\n selectedSlide === Number(slide.content_id)\r\n ? \"selected\"\r\n : selectedSlide === -1\r\n ? \"none-selected\"\r\n : \"not-selected\"\r\n }\r\n onClick={(event) =>\r\n handleSelectSlide(Number(slide.content_id), selectedSlide)\r\n }\r\n alt={slide?.media_location ? slide.media_location : \"Random\"}\r\n key={slide!.media_location}\r\n ></img>\r\n );\r\n });\r\n } else {\r\n tempArray.push(\r\n <img\r\n src={slide?.media_location ? slide.media_location : \"\"}\r\n id={slide!.content_id ? slide!.content_id : \"not found\"}\r\n className={\r\n selectedSlide === Number(slide!.content_id)\r\n ? \"selected\"\r\n : selectedSlide === -1\r\n ? \"none-selected\"\r\n : \"not-selected\"\r\n }\r\n onClick={(event) =>\r\n handleSelectSlide(Number(slide!.content_id), selectedSlide)\r\n }\r\n alt={slide?.media_location ? slide.media_location : \"Random\"}\r\n key={slide!.content_id}\r\n ></img>\r\n );\r\n }\r\n }\r\n }\r\n console.log(tempArray.length);\r\n setownMaterialList(tempArray);\r\n }\r\n\r\n useEffect(() => {\r\n if (!loading) {\r\n console.log(ownedContentData);\r\n setOwnMaterial();\r\n }\r\n }, [selectedSlide, loading, ownedContentData]);\r\n\r\n const handleSelectSlide = (id: number, selectedSlideNow) => {\r\n console.log(\"mee\");\r\n\r\n if (id === selectedSlideNow) {\r\n console.log(\"the same\");\r\n\r\n setselectedSlide(-1);\r\n } else {\r\n setselectedSlide(id);\r\n }\r\n };\r\n\r\n const handleUpload = async (event: React.ChangeEvent<any>) => {\r\n const fileData = event.target.files;\r\n console.log(fileData);\r\n\r\n if (SASKey) {\r\n setisPictureUploading(true);\r\n for (const file of fileData) {\r\n await uploadOwnContent(\r\n SASKey.getSAS,\r\n file,\r\n Number(context.appGetUserID())\r\n ).then(async (data) => {\r\n if (data) {\r\n const url = data?.split(\"?sv\")[0];\r\n await manageContent({\r\n variables: { content: { media_location: url, media_type_id: 5 } },\r\n }).then((data) => console.log(data));\r\n }\r\n });\r\n }\r\n }\r\n setTimeout(() => setisPictureUploading(false), 2000);\r\n };\r\n const handleRemoveUpload = () => {\r\n setfileBlob(undefined);\r\n setisFileInput(false);\r\n if (videoThumbnail) {\r\n setvideoThumbnail(undefined);\r\n }\r\n };\r\n\r\n const handleScroll = (e) => {\r\n const bottom =\r\n e.target.scrollHeight - e.target.scrollTop === e.target.clientHeight;\r\n if (bottom) {\r\n fetchMore({\r\n variables: {\r\n limit: ownMaterialList.length + 30,\r\n offset: ownMaterialList.length,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleFinish = () => {\r\n if (isFileInput && fileBlob) {\r\n if (videoThumbnail) {\r\n const newSlide = {\r\n media: videoThumbnail,\r\n tempFile: fileBlob,\r\n type: MediaType.LOCALVIDEO,\r\n notes: \"\",\r\n };\r\n props.handleFinishCreateNewSlide(newSlide);\r\n } else {\r\n const newSlide = {\r\n media: URL.createObjectURL(fileBlob),\r\n tempFile: fileBlob,\r\n type: MediaType.AZUREIMG,\r\n notes: \"\",\r\n };\r\n props.handleFinishCreateNewSlide(newSlide);\r\n }\r\n }\r\n if (selectedSlide !== -1) {\r\n const theSelectedSlide = ownMaterialList.find(\r\n (slide) => slide.props.id === String(selectedSlide)\r\n );\r\n\r\n if (theSelectedSlide) {\r\n const newSlide = {\r\n content_id: theSelectedSlide.props.id,\r\n media: theSelectedSlide.props.src,\r\n tempFile: theSelectedSlide.props.alt, //THIS IS TO STORE THE PATH WHERE IT IS\r\n type: theSelectedSlide.props.src.includes(\r\n \"https://i.vimeocdn.com/video\"\r\n )\r\n ? MediaType.STREAM\r\n : MediaType.AZUREIMG,\r\n notes: \"\",\r\n };\r\n props.handleFinishCreateNewSlide(newSlide);\r\n }\r\n }\r\n };\r\n\r\n const renderFileorButton = () => {\r\n if (isPictureUploading) {\r\n return (\r\n <Button className=\"uploadButton\" color=\"inherit\">\r\n <CircularProgress />\r\n </Button>\r\n );\r\n } else {\r\n return (\r\n <Button className=\"uploadButton\" color=\"inherit\" disabled>\r\n <FileUploadIcon />\r\n <span>UPLOAD BILLEDER HER</span>\r\n <input\r\n type=\"file\"\r\n accept=\".jpg, .png, .webp\"\r\n multiple={true}\r\n onChange={handleUpload}\r\n ></input>{\" \"}\r\n </Button>\r\n );\r\n }\r\n };\r\n\r\n const doneButton = (\r\n <div className=\"done\">\r\n <button\r\n className={isFileInput || selectedSlide !== -1 ? \"finishAble\" : \"\"}\r\n onClick={handleFinish}\r\n >\r\n <DoneOutlineIcon />\r\n </button>\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n <div className=\"OwnMaterial\">\r\n <div\r\n className={isFileInput ? \"ownSlides disabled\" : \"ownSlides\"}\r\n onScroll={handleScroll}\r\n >\r\n {ownMaterialList}\r\n </div>\r\n <div\r\n className={\r\n selectedSlide !== -1 ? \"uploadSlide disabled\" : \"uploadSlide\"\r\n }\r\n >\r\n {renderFileorButton()}\r\n </div>\r\n </div>\r\n {doneButton}\r\n </>\r\n );\r\n};\r\n\r\nexport default TeoriContent;\r\n","import { Button, Skeleton } from \"@mui/material\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport \"./OwnMaterial.scss\";\r\nimport DoneOutlineIcon from \"@mui/icons-material/DoneOutline\";\r\nimport randomImage from \"../../../../../assets/testImage.jpg\";\r\nimport { LessonSlide, LessonType, MediaType } from \"../../../../model\";\r\nimport VideoThumbnail from \"react-video-thumbnail\";\r\nimport {\r\n useGetOwnedContentLazyQuery,\r\n useGetOwnedContentQuery,\r\n useGetSasLazyQuery,\r\n useGetSasQuery,\r\n useManageContentMutation,\r\n} from \"../../../../../graphql/generated/graphql\";\r\nimport { AppStateContext } from \"../../../../../apollo/TeoriTeacherProvider\";\r\nimport { uploadOwnContent } from \"../../../../../services/azureStorage\";\r\nimport FileUploadIcon from \"@mui/icons-material/FileUpload\";\r\nimport { CircularProgress } from \"@material-ui/core\";\r\n\r\nexport type IOwnMaterialProps = {\r\n handleFinishCreateNewSlide: (newSlide: any) => void;\r\n};\r\n\r\nconst OwnMaterial: React.FC<IOwnMaterialProps> = (props: IOwnMaterialProps) => {\r\n const context = useContext(AppStateContext);\r\n\r\n const [isFileInput, setisFileInput] = useState(false);\r\n const [fileBlob, setfileBlob] = useState<File | undefined>(undefined);\r\n const [videoThumbnail, setvideoThumbnail] = useState<any | undefined>(\r\n undefined\r\n );\r\n const [isLoading, setisLoading] = useState(true);\r\n const [getSAS, { data: SASKey }] = useGetSasLazyQuery({\r\n });\r\n\r\n const [manageContent] = useManageContentMutation();\r\n const [isPictureUploading, setisPictureUploading] = useState(false);\r\n\r\n const [selectedSlide, setselectedSlide] = useState(-1);\r\n const [ownMaterialList, setownMaterialList] = useState<JSX.Element[]>([\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n <Skeleton variant=\"rectangular\" />,\r\n ]);\r\n\r\n const {\r\n data: ownedContentData,\r\n loading,\r\n fetchMore,\r\n refetch\r\n } = useGetOwnedContentQuery({\r\n variables: {},\r\n });\r\n\r\n\r\n useEffect(() => {\r\n if(!SASKey?.getSAS){\r\n getSAS();\r\n }\r\n \r\n }, []);\r\n\r\n async function setOwnMaterial() {\r\n const tempArray: JSX.Element[] = [];\r\n if (ownedContentData?.getOwnedContent) {\r\n for (const slide of ownedContentData.getOwnedContent) {\r\n if (slide?.media_type_id === 1) {\r\n const slideAddress = slide.media_location?.split(\"/\")[3];\r\n\r\n await fetch(\r\n `https://vimeo.com/api/oembed.json?url=https://vimeo.com/${slideAddress}`\r\n )\r\n .then((data) => data.json())\r\n .then((result) => {\r\n console.log(result.thumbnail_url);\r\n\r\n tempArray.push(\r\n <img\r\n src={result.thumbnail_url}\r\n id={slide.content_id ? slide.content_id : \"not found\"}\r\n className={\r\n selectedSlide === Number(slide.content_id)\r\n ? \"selected\"\r\n : selectedSlide === -1\r\n ? \"none-selected\"\r\n : \"not-selected\"\r\n }\r\n onClick={(event) =>\r\n handleSelectSlide(Number(slide.content_id), selectedSlide)\r\n }\r\n alt={slide?.media_location ? slide.media_location : \"Random\"}\r\n key={slide!.media_location}\r\n ></img>\r\n );\r\n });\r\n } else {\r\n tempArray.push(\r\n <img\r\n src={slide?.media_location ? slide.media_location : \"\"}\r\n id={slide!.content_id ? slide!.content_id : \"not found\"}\r\n className={\r\n selectedSlide === Number(slide!.content_id)\r\n ? \"selected\"\r\n : selectedSlide === -1\r\n ? \"none-selected\"\r\n : \"not-selected\"\r\n }\r\n onClick={(event) =>\r\n handleSelectSlide(Number(slide!.content_id), selectedSlide)\r\n }\r\n alt={slide?.media_location ? slide.media_location : \"Random\"}\r\n key={slide!.content_id}\r\n ></img>\r\n );\r\n }\r\n }\r\n }\r\n console.log(tempArray.length);\r\n tempArray.reverse();\r\n setownMaterialList(tempArray);\r\n }\r\n\r\n useEffect(() => {\r\n if (!loading) {\r\n console.log(ownedContentData);\r\n setOwnMaterial();\r\n }\r\n }, [selectedSlide, loading, ownedContentData]);\r\n\r\n const handleSelectSlide = (id: number, selectedSlideNow) => {\r\n console.log(\"mee\");\r\n\r\n if (id === selectedSlideNow) {\r\n console.log(\"the same\");\r\n\r\n setselectedSlide(-1);\r\n } else {\r\n setselectedSlide(id);\r\n }\r\n };\r\n\r\n const handleUpload = async (event: React.ChangeEvent<any>) => {\r\n const fileData = event.target.files;\r\n console.log(fileData);\r\n\r\n if (SASKey) {\r\n setisPictureUploading(true);\r\n for (const file of fileData) {\r\n await uploadOwnContent(\r\n SASKey.getSAS,\r\n file,\r\n Number(context.appGetUserID())\r\n ).then(async (data) => {\r\n if (data) {\r\n const url = data?.split(\"?sv\")[0];\r\n await manageContent({\r\n variables: { content: { media_location: url, media_type_id: 5 } },\r\n }).then((data) => refetch());\r\n }\r\n });\r\n }\r\n }\r\n setTimeout(() => setisPictureUploading(false), 2000);\r\n };\r\n const handleRemoveUpload = () => {\r\n setfileBlob(undefined);\r\n setisFileInput(false);\r\n if (videoThumbnail) {\r\n setvideoThumbnail(undefined);\r\n }\r\n };\r\n\r\n const handleFinish = () => {\r\n if (isFileInput && fileBlob) {\r\n if (videoThumbnail) {\r\n const newSlide = {\r\n media: videoThumbnail,\r\n tempFile: fileBlob,\r\n type: MediaType.LOCALVIDEO,\r\n notes: \"\",\r\n };\r\n props.handleFinishCreateNewSlide(newSlide);\r\n } else {\r\n const newSlide = {\r\n media: URL.createObjectURL(fileBlob),\r\n tempFile: fileBlob,\r\n type: MediaType.AZUREIMG,\r\n notes: \"\",\r\n };\r\n props.handleFinishCreateNewSlide(newSlide);\r\n }\r\n }\r\n if (selectedSlide !== -1) {\r\n const theSelectedSlide = ownMaterialList.find(\r\n (slide) => slide.props.id === String(selectedSlide)\r\n );\r\n\r\n if (theSelectedSlide) {\r\n const newSlide = {\r\n content_id: theSelectedSlide.props.id,\r\n media: theSelectedSlide.props.src,\r\n tempFile: theSelectedSlide.props.alt, //THIS IS TO STORE THE PATH WHERE IT IS\r\n type: theSelectedSlide.props.src.includes(\r\n \"https://i.vimeocdn.com/video\"\r\n )\r\n ? MediaType.STREAM\r\n : MediaType.AZUREIMG,\r\n notes: \"\",\r\n };\r\n props.handleFinishCreateNewSlide(newSlide);\r\n }\r\n }\r\n };\r\n\r\n const handleScroll = (e) => {\r\n const bottom =\r\n e.target.scrollHeight - e.target.scrollTop === e.target.clientHeight;\r\n if (bottom) {\r\n fetchMore({\r\n variables: {\r\n limit: ownMaterialList.length + 30,\r\n offset: ownMaterialList.length,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const renderFileorButton = () => {\r\n if (isPictureUploading) {\r\n return (\r\n <Button className=\"uploadButton\" color=\"inherit\">\r\n <CircularProgress />\r\n </Button>\r\n );\r\n } else {\r\n return (\r\n <Button className=\"uploadButton\" color=\"inherit\">\r\n <FileUploadIcon />\r\n <span>UPLOAD BILLEDER HER</span>\r\n <input\r\n type=\"file\"\r\n accept=\".jpg, .png, .webp\"\r\n multiple={true}\r\n onChange={handleUpload}\r\n ></input>{\" \"}\r\n </Button>\r\n );\r\n }\r\n };\r\n\r\n const doneButton = (\r\n <div className=\"done\">\r\n <button\r\n className={isFileInput || selectedSlide !== -1 ? \"finishAble\" : \"\"}\r\n onClick={handleFinish}\r\n >\r\n <DoneOutlineIcon />\r\n </button>\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n <div className=\"OwnMaterial\" >\r\n <div className={isFileInput ? \"ownSlides disabled\" : \"ownSlides\"} onScroll={handleScroll}>\r\n {ownMaterialList}\r\n </div>\r\n <div\r\n className={\r\n selectedSlide !== -1 ? \"uploadSlide disabled\" : \"uploadSlide\"\r\n }\r\n >\r\n {renderFileorButton()}\r\n </div>\r\n </div>\r\n {doneButton}\r\n </>\r\n );\r\n};\r\n\r\nexport default OwnMaterial;\r\n","import React, { useState } from \"react\";\r\nimport { LessonSlide, LessonType } from \"../../../model\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport \"./style/NewSlide.scss\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport TeoriContent from \"./newSlideComponents/TeoriContent\";\r\nimport OwnMaterial from \"./newSlideComponents/OwnMaterial\";\r\nexport type INewSlideProps = {\r\n setnewSlide: React.Dispatch<React.SetStateAction<boolean>>;\r\n handleFinishCreateNewSlide: (newSlide: any) => void;\r\n};\r\n\r\nconst NewSlide: React.FC<INewSlideProps> = (props: INewSlideProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const [chosenState, setchosenState] = useState(0);\r\n\r\n\r\n const renderNewSlideSelector = () => {\r\n switch(chosenState){\r\n case 0: \r\n return <TeoriContent\r\n handleFinishCreateNewSlide={props.handleFinishCreateNewSlide}\r\n />\r\n case 1: \r\n return <OwnMaterial\r\n handleFinishCreateNewSlide={props.handleFinishCreateNewSlide}\r\n />\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"NewSlide\">\r\n <div className=\"contentBox\">\r\n <button\r\n className=\"closeButton clickable\"\r\n onClick={() => props.setnewSlide(false)}\r\n >\r\n \r\n <CloseIcon />\r\n </button>\r\n <select value={chosenState} onChange={(event) => setchosenState(Number(event.target.value))}>\r\n <option value={0}>Teoriundervisning indhold</option>\r\n <option value={1}>Eget indhold</option>\r\n </select>\r\n <div className=\"contentType\">\r\n {renderNewSlideSelector()}\r\n \r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { NewSlide };\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport {\r\n useDeleteQuizSlideMutation,\r\n useGetSasQuery,\r\n} from \"../../../../graphql/generated/graphql\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport { CreateQuizSlide, LessonSlide } from \"../../../model\";\r\nimport { AppStateContext } from \"../../../../apollo/TeoriTeacherProvider\";\r\nimport { filterById, findById } from \"../../../modelFunctions\";\r\nimport { ContentItem } from \"./ContentItem\";\r\nimport { EmptyItem } from \"./EmptyItem\";\r\nimport { SlideSwapper } from \"./SlideSwapper\";\r\nimport \"./style/ItemsArea.scss\";\r\nimport { uploadOwnContent } from \"../../../../services/azureStorage\";\r\nimport { NewSlide } from \"./NewSlide\";\r\nimport { availableSounds } from \"../CreateQuizPage\";\r\n\r\nexport type IItemsAreaProps = {\r\n slides: CreateQuizSlide[];\r\n setSlides: (slides: CreateQuizSlide[]) => void;\r\n selectSlide: (id: number) => void;\r\n expandSelectedSlide: (id: number) => void;\r\n narrationSounds: availableSounds[];\r\n};\r\n\r\nconst ItemsArea: React.FC<IItemsAreaProps> = (props: IItemsAreaProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n //TODO CHANGE FOR PROPER VALUES THAT WILL MATCH THE FUNCTIONAL REQUIREMENTS\r\n const maxNumberOfPages = 20;\r\n //This variable is responsible settings number of items of single page\r\n const numberOfItemsOnSinglePage = 25;\r\n\r\n const [currentPage, setCurrentPage] = useState<number>(1);\r\n const [lastPage, setLastPage] = useState<number>(1);\r\n const [numberOfEmptyItemsOnCurrentPage, setNumberOfEmptyItemsOnCurrentPage] =\r\n useState<number>(0);\r\n const [newSlide, setnewSlide] = useState(false);\r\n const { data: SASKey } = useGetSasQuery();\r\n\r\n const [deleteSlide] = useDeleteQuizSlideMutation();\r\n\r\n useEffect(() => {\r\n calculateEmptyItemsForCurrentPage();\r\n }, []);\r\n\r\n useEffect(() => {\r\n calculateEmptyItemsForCurrentPage();\r\n }, [props.slides.length, currentPage]);\r\n\r\n useEffect(() => {}, [props.slides]);\r\n\r\n const swapSlides = (\r\n firstSlideIndex: number,\r\n secondSlideIndex: number\r\n ): void => {\r\n // maximalOrderNumber - this is value synced with order numbers displayed\r\n const maximalOrderNumber = props.slides.length;\r\n if (\r\n firstSlideIndex > maximalOrderNumber ||\r\n secondSlideIndex > maximalOrderNumber\r\n ) {\r\n alert(\"Item with chosen index does not exist\");\r\n return;\r\n }\r\n\r\n if (firstSlideIndex === secondSlideIndex) {\r\n alert(\"Slide cannot replace itself\");\r\n return;\r\n }\r\n\r\n const firstSlide: CreateQuizSlide = {\r\n ...props.slides[firstSlideIndex - 1],\r\n };\r\n const secondSlide: CreateQuizSlide = {\r\n ...props.slides[secondSlideIndex - 1],\r\n };\r\n console.log(secondSlide);\r\n //\tTODO ADD MORE LOGIC\r\n const tempSlideList = props.slides;\r\n tempSlideList[firstSlideIndex - 1] = secondSlide;\r\n tempSlideList[secondSlideIndex - 1] = firstSlide;\r\n const updatedIndexes = tempSlideList.map((slide, index) => {\r\n slide.id = index + 1;\r\n return slide;\r\n });\r\n console.log(tempSlideList);\r\n props.setSlides(updatedIndexes);\r\n props.selectSlide(firstSlideIndex);\r\n };\r\n\r\n const handleCreateSlide = (): void => {\r\n setnewSlide(true);\r\n };\r\n\r\n const handleFinishCreateSlide = async (newSlide: any): Promise<void> => {\r\n const slideList = props.slides;\r\n newSlide.id = slideList.length + 1;\r\n newSlide.slideFilter = \"-1\";\r\n\r\n slideList.push(newSlide);\r\n props.setSlides(slideList);\r\n props.selectSlide(newSlide.id);\r\n setnewSlide(false);\r\n };\r\n\r\n const handleDeleteSlide = (id: number): void => {\r\n const newArray = [...props.slides].filter((item) => item.id !== id);\r\n const updatedIndexes = newArray.map((slide, index) => {\r\n slide.id = index + 1;\r\n return slide;\r\n });\r\n const slideToDelete = findById(props.slides, id);\r\n\r\n if (slideToDelete?.editID) {\r\n deleteSlide({ variables: { quiz_slide_id: String(slideToDelete?.editID) } });\r\n }\r\n\r\n props.setSlides(updatedIndexes);\r\n if (props.slides.length === 1) {\r\n props.selectSlide(-1);\r\n }\r\n };\r\n\r\n const handleIncrementCurrentPage = (): void => {\r\n if (currentPage < maxNumberOfPages) {\r\n if (currentPage === lastPage) {\r\n setLastPage(lastPage + 1);\r\n }\r\n setCurrentPage(currentPage + 1);\r\n }\r\n };\r\n\r\n const handleDecrementCurrentPage = (): void => {\r\n if (currentPage - 1 > 0) {\r\n setCurrentPage(currentPage - 1);\r\n }\r\n };\r\n\r\n //Calculating first place in array for certain page\r\n const getBeginForSlideItems = (): number => {\r\n //currentPage must be decremented because arrays are numbered from 0 but pages are numbered from 1\r\n return (currentPage - 1) * numberOfItemsOnSinglePage;\r\n };\r\n\r\n //Prevent from array outOfRange when of certain page there are not as many rows as maximal limit of rows on page\r\n const getEndForSlideItems = (): number => {\r\n const lastPlaceInArrayForCurrentPage =\r\n currentPage * numberOfItemsOnSinglePage;\r\n //return length of array when length is smaller than lastPlaceInArrayForCurrentPage\r\n if (props.slides.length < lastPlaceInArrayForCurrentPage) {\r\n return props.slides.length;\r\n }\r\n return lastPlaceInArrayForCurrentPage;\r\n };\r\n\r\n //Returns subarray of items that should be displayed on current page\r\n const getSlidesForCurrentPage = (): CreateQuizSlide[] => {\r\n return props.slides.slice(getBeginForSlideItems(), getEndForSlideItems());\r\n };\r\n\r\n // Calculates and set number of empty items that should be displayed on current page\r\n const calculateEmptyItemsForCurrentPage = (): void => {\r\n setNumberOfEmptyItemsOnCurrentPage(\r\n numberOfItemsOnSinglePage - getSlidesForCurrentPage().length\r\n );\r\n };\r\n\r\n /**\r\n * Returns last iteration step when for current page if slides exist\r\n * otherwise returns calculated begin for current page- reuse of function that is used\r\n * for slides array - the same behavior is needed\r\n */\r\n const getBeginForEmptyItems = (): number => {\r\n if (getSlidesForCurrentPage().length > 0) {\r\n return getEndForSlideItems();\r\n }\r\n return getBeginForSlideItems();\r\n };\r\n\r\n // Calculates end of iteration for empty items based on beginning and number of empty items on current page\r\n const getEndForEmptyItems = (): number => {\r\n return getBeginForEmptyItems() + numberOfEmptyItemsOnCurrentPage;\r\n };\r\n\r\n const findIntroQuestion = (introQuestionID: number) => {\r\n const chosenSound = props.narrationSounds.find(\r\n (element) => element.id === introQuestionID\r\n );\r\n if (chosenSound) {\r\n return chosenSound;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n const renderContentItems = (): JSX.Element[] => {\r\n const items: JSX.Element[] = [];\r\n for (\r\n let index = getBeginForSlideItems();\r\n index < getEndForSlideItems();\r\n index++\r\n ) {\r\n items.push(\r\n <ContentItem\r\n key={props.slides[index].id}\r\n slideOrderNumber={index + 1}\r\n slide={props.slides[index]}\r\n handleSelectSlide={() => props.selectSlide(props.slides[index].id)}\r\n handleExpandSlide={() =>\r\n props.expandSelectedSlide(props.slides[index].id)\r\n }\r\n handleDeleteSlide={() => handleDeleteSlide(props.slides[index].id)}\r\n introItem={findIntroQuestion(props.slides[index].introQuestion)}\r\n />\r\n );\r\n }\r\n\r\n for (\r\n let index = getBeginForEmptyItems();\r\n index < getEndForEmptyItems();\r\n index++\r\n ) {\r\n items.push(\r\n <EmptyItem\r\n key={index + 1 + \"empty\"}\r\n slideOrderNumber={index + 1}\r\n handleCreateSlide={handleCreateSlide}\r\n />\r\n );\r\n }\r\n\r\n return items;\r\n };\r\n\r\n const pageNumber = (\r\n <>\r\n {` ${languageString.createLessonPage.page} ${currentPage} `}\r\n {` ${\" - \"} ${lastPage} `}\r\n </>\r\n );\r\n\r\n // const changePageArrows = (\r\n // \t<>\r\n // \t\t<IconButton image={leftArrowIcon} handleButtonClick={handleDecrementCurrentPage} />\r\n // \t\t<IconButton image={rightArrowIcon} handleButtonClick={handleIncrementCurrentPage} />\r\n // \t</>\r\n // );\r\n\r\n return (\r\n <div className=\"ItemsArea\">\r\n <div className=\"items\">{renderContentItems()}</div>\r\n <div className=\"bottom\">\r\n <div className=\"bottomLeft\">\r\n <SlideSwapper swapSlides={swapSlides} />\r\n </div>\r\n <div className=\"bottomRight\">\r\n {/* {pageNumber} this is for later implementation\r\n\t\t\t\t\t{changePageArrows} */}\r\n </div>\r\n </div>\r\n {newSlide ? (\r\n <NewSlide\r\n setnewSlide={setnewSlide}\r\n handleFinishCreateNewSlide={handleFinishCreateSlide}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { ItemsArea };\r\n","import { Autocomplete, Button, createFilterOptions, TextField } from \"@mui/material\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport { CreateQuizStatement, CreateQuizStatementElaboration, CreateQuizStatementSound } from \"../../../model\";\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\nimport \"./style/Statement.scss\";\r\nimport { findById, findIndexById } from \"../../../modelFunctions\";\r\n\r\nexport type IStatementProps = {\r\n key: number;\r\n narrationSounds: availableSounds[];\r\n statement: CreateQuizStatement;\r\n setStatements: React.Dispatch<React.SetStateAction<CreateQuizStatement[]>>;\r\n deleteStatement: (id: number, apiID?: string) => void;\r\n length: number;\r\n};\r\ninterface availableSounds {\r\n key: string;\r\n id: number;\r\n label: string;\r\n}\r\n\r\nconst Statement: React.FC<IStatementProps> = (props: IStatementProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const [chosenSound, setchosenSound] = useState<availableSounds>();\r\n const [elab, setelab] = useState<CreateQuizStatementElaboration[]>(props.statement.elaboration);\r\n const [answer, setanswer] = useState(-1);\r\n\r\n const [inputValue, setinputValue] = useState(\"\");\r\n\r\n const [elabLanguage, setelabLanguage] = useState(0);\r\n\r\n const [isSoundSelected, setisSoundSelected] = useState(false);\r\n \r\n\r\n const setCurrentStatement = (statement: CreateQuizStatement) => {\r\n props.setStatements((prevState) => {\r\n const elementIndex = findIndexById(prevState, props.statement.id);\r\n const copyOfState = [...prevState];\r\n copyOfState[elementIndex] = statement;\r\n return copyOfState;\r\n });\r\n };\r\n\r\n const handleSoundChange = (event, newValue) => {\r\n if (newValue) {\r\n setisSoundSelected(true);\r\n setchosenSound(newValue);\r\n }\r\n };\r\n\r\n const handleElabChange = (event) => {\r\n const elabs = [...elab];\r\n elabs[elabLanguage].text = event.target.value;\r\n setelab(elabs);\r\n };\r\n\r\n const handleAnswerChange = (event) => {\r\n if (event.target.value) {\r\n setanswer(Number(event.target.value));\r\n }\r\n };\r\n\r\n const handleElabLanguageChange = (event) => {\r\n if(event.target.value){\r\n setelabLanguage(event.target.value)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (props.statement.soundAndText.id !== -1) {\r\n setisSoundSelected(true);\r\n } else {\r\n setisSoundSelected(false);\r\n }\r\n }, [props.statement]);\r\n\r\n useEffect(() => {\r\n setchosenSound({\r\n id: props.statement.soundAndText.id,\r\n label: props.statement.soundAndText.soundText,\r\n key: String(props.statement.soundAndText.id),\r\n });\r\n setelab(props.statement.elaboration);\r\n setanswer(props.statement.answer);\r\n }, [props.length]);\r\n\r\n const renderAnswersSelect = (): JSX.Element => {\r\n const answerOptions = [\r\n { value: -1 , label: \" \"},\r\n { value: 1, label: languageString.generalMessages.yes },\r\n { value: 2, label: languageString.generalMessages.no },\r\n { value: 3, label: languageString.generalMessages.both },\r\n ];\r\n const options = answerOptions.map((option) => {\r\n return <option value={option.value}>{option.label}</option>;\r\n });\r\n return (\r\n <select onChange={handleAnswerChange} value={answer}>\r\n {options}\r\n </select>\r\n );\r\n };\r\n\r\n const renderElabLanguageSelect = ():JSX.Element => {\r\n const answerOptions = [\r\n { value: 0, label : \"Dansk\"},\r\n { value: 1, label: \"Engelsk\"}\r\n ]\r\n const options = answerOptions.map((option) => {\r\n return <option value={option.value}>{option.label}</option>;\r\n });\r\n return (\r\n <div className=\"answerOptions languageSelect\">\r\n <label>Rediger uddybelsens sprog pÃ¥ </label>\r\n <select onChange={handleElabLanguageChange} value={elabLanguage}>\r\n {options}\r\n </select></div>\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n if (chosenSound) {\r\n console.log(\"execution\");\r\n \r\n const newStatement: CreateQuizStatement = {\r\n originalIndex: props.statement.originalIndex,\r\n id: props.statement.id,\r\n editID: props.statement.editID ? props.statement.editID : undefined,\r\n soundAndText: {\r\n id: chosenSound.id,\r\n soundText: chosenSound.label,\r\n soundLocation: \"\",\r\n },\r\n answer: answer,\r\n elaboration: elab,\r\n };\r\n setCurrentStatement(newStatement);\r\n }\r\n }, [elab, answer, chosenSound]);\r\n\r\n\r\n if (!isSoundSelected) {\r\n return (\r\n <div className={props.statement.hasError ? \"SoundSelection hasError\" : \"SoundSelection\"}>\r\n <div className=\"top\">\r\n <span>{props.statement.id}.</span>\r\n <div className=\"deleteButton\">\r\n <Button onClick={() => props.deleteStatement(props.statement.id)}>\r\n <ClearIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <h2>Søg efter en lyd og vælg den</h2>\r\n <Autocomplete\r\n className=\"soundAutocomplete\"\r\n value={chosenSound}\r\n onChange={handleSoundChange}\r\n onInputChange={(event, newInputValue) => setinputValue(newInputValue)}\r\n inputValue={inputValue}\r\n options={props.narrationSounds}\r\n renderInput={(params) => <TextField {...params} />}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={props.statement.hasError ? \"ActiveStatement hasError\" : \"ActiveStatement\"}>\r\n <div className=\"displayer\">\r\n <div className=\"soundText\">\r\n <div>{props.statement.id}.</div>\r\n <div>{chosenSound ? chosenSound?.label : \"Ingen lyd valgt\"}</div>\r\n <div className=\"deleteButton\">\r\n <Button onClick={() => props.deleteStatement(props.statement.id, String(props.statement.editID))}>\r\n <ClearIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n {renderElabLanguageSelect()}\r\n <TextField\r\n className=\"elaboration\"\r\n multiline\r\n label={\"Uddybelse\"}\r\n variant=\"outlined\"\r\n rows={4}\r\n value={elab[elabLanguage].text}\r\n onChange={handleElabChange}\r\n />\r\n <div className=\"answerOptions\">\r\n <label>Vælg svaret til spørgsmÃ¥let</label>\r\n {renderAnswersSelect()}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { Statement };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\nimport { Autocomplete, Button, TextField } from \"@mui/material\";\r\n\r\nexport type IIntroStatementProps = {\r\n key: number;\r\n narrationSounds: availableSounds[];\r\n introQuestion: number;\r\n deleteIntroStatement: () => void;\r\n updateIntroStatement: (soundValue: number) => void;\r\n};\r\ninterface availableSounds {\r\n id: number;\r\n label: string;\r\n}\r\n\r\nconst IntroStatement: React.FC<IIntroStatementProps> = (props: IIntroStatementProps) => {\r\n const [availableSounds, setavailableSounds] = useState<availableSounds[]>([\r\n { id: -1, label: \"Loading\" },\r\n ]);\r\n const [isSoundSelected, setisSoundSelected] = useState(false);\r\n\r\n const [chosenSound, setchosenSound] = useState<availableSounds>();\r\n\r\n const handleSoundChange = (event, newValue) => {\r\n console.log(newValue);\r\n\r\n if (newValue) {\r\n setisSoundSelected(true);\r\n setchosenSound(newValue);\r\n props.updateIntroStatement(newValue.id);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if(props.introQuestion !== -1){\r\n setisSoundSelected(true)\r\n setchosenSound(props.narrationSounds.find((element) => element.id === props.introQuestion))\r\n }\r\n }, [props.key, props.narrationSounds]);\r\n\r\n\r\n if (!isSoundSelected) {\r\n return (\r\n <div className=\"SoundSelection\">\r\n <div className=\"top\">\r\n <span>Introduktions spørgsmÃ¥l</span>\r\n <div className=\"deleteButton\">\r\n <Button onClick={() => props.deleteIntroStatement()}>\r\n <ClearIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <h2>Søg efter en lyd og vælg den</h2>\r\n <Autocomplete\r\n className=\"soundAutocomplete\"\r\n onChange={handleSoundChange}\r\n options={props.narrationSounds}\r\n renderInput={(params) => <TextField {...params} />}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"ActiveStatement\">\r\n <div className=\"displayer--IntroQuestion\">\r\n <div className=\"soundText\">\r\n <div>{\"Introduktions spørgsmÃ¥l\"}.<div className=\"idDisplay\">Lyd og tekst ID: {chosenSound ? chosenSound?.id : \"-\"}</div></div>\r\n <div>{chosenSound ? chosenSound?.label : \"Ingen lyd valgt\"}</div>\r\n <div className=\"deleteButton\">\r\n <Button onClick={() => props.deleteIntroStatement()}>\r\n <ClearIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { IntroStatement };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport {\r\n CreateQuizSlide,\r\n CreateQuizStatement,\r\n LessonSlide,\r\n Tag,\r\n} from \"../../../model\";\r\nimport saveIcon from \"../../../../assets/save_icon.png\";\r\nimport whiteArrow from \"../../../../assets/white_Arrow.png\";\r\nimport \"./style/Settings.scss\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport { styled } from \"@material-ui/styles\";\r\nimport {\r\n filterAndSortById,\r\n findById,\r\n findIndexById,\r\n} from \"../../../modelFunctions\";\r\nimport { Button, Chip } from \"@material-ui/core\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { FIND_INDEX_STATUS_NOT_FOUND } from \"../../../../constants/generalConstants\";\r\nimport { Statement } from \"./Statement\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport { IntroStatement } from \"./IntroStatement\";\r\nimport { useDeleteQuizStatementMutation, useDeleteSlideTagMutation, useGetSoundContentQuery } from \"../../../../graphql/generated/graphql\";\r\nimport {\r\n DragDropContext,\r\n Droppable,\r\n Draggable,\r\n DropResult,\r\n} from \"react-beautiful-dnd\";\r\nexport type ISettingsProps = {\r\n tags: Tag[];\r\n slide: CreateQuizSlide | undefined;\r\n slideOrderNumber: number | null;\r\n updateSelectedSlide: (slide: CreateQuizSlide) => void;\r\n handleSave: () => void;\r\n handleFinish: () => void;\r\n name: string;\r\n setname: React.Dispatch<React.SetStateAction<string>>;\r\n narrationSounds: availableSounds[];\r\n};\r\n\r\ninterface availableSounds {\r\n key: string;\r\n id: number;\r\n label: string;\r\n}\r\n\r\nconst Settings: React.FC<ISettingsProps> = (props: ISettingsProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const [tempTags, settempTags] = useState(props.tags);\r\n\r\n const [isIntroQuestion, setisIntroQuestion] = useState(false);\r\n\r\n const [removeTag] = useDeleteSlideTagMutation();\r\n\r\n const [deleteStatement] = useDeleteQuizStatementMutation();\r\n\r\n const [statementBoxStates, setstatementBoxStates] = useState<\r\n CreateQuizStatement[]\r\n >([]);\r\n\r\n useEffect(() => {\r\n setInitialStatementBoxStatesValue();\r\n }, [props.slide?.id]);\r\n\r\n const handleOnDragEnd = (result: DropResult) => {\r\n if (result.destination) {\r\n const items = statementBoxStates;\r\n const [removed] = items.splice(result.source.index, 1);\r\n items.splice(result.destination.index, 0, removed);\r\n \r\n items.forEach((statement, index) => {\r\n statement.id = index+1;\r\n })\r\n console.log(items);\r\n setstatementBoxStates(items);\r\n console.log(\"do i get called?\");\r\n \r\n }\r\n };\r\n\r\n const setInitialStatementBoxStatesValue = (): void => {\r\n if (!props.slide) {\r\n return;\r\n }\r\n if (props.slide.statements) {\r\n setstatementBoxStates(\r\n props.slide?.statements.map((statement, index) => {\r\n const state: CreateQuizStatement = {\r\n originalIndex: index,\r\n id: statement.id,\r\n editID: statement.editID ? statement.editID : undefined,\r\n soundAndText: statement.soundAndText,\r\n answer: statement.answer,\r\n elaboration: statement.elaboration,\r\n hasError: statement.hasError ? statement.hasError : false,\r\n };\r\n return state;\r\n })\r\n );\r\n }\r\n };\r\n\r\n const copyAndUpdateSlideState = (\r\n slide: CreateQuizSlide,\r\n callback: (slideCopy: CreateQuizSlide) => void\r\n ): void => {\r\n const slideCopy: CreateQuizSlide = slide;\r\n callback(slideCopy);\r\n props.updateSelectedSlide(slideCopy);\r\n };\r\n\r\n const handleSlideSoundExplanation = (event: React.ChangeEvent<any>, id, languageID) => {\r\n if(!props.slide){\r\n return;\r\n }\r\n console.log(event.target.files);\r\n \r\n const fileData = event.target.files?.[0];\r\n let tempExplanations = props.slide?.soundExplanations;\r\n if(fileData){\r\n console.log(fileData);\r\n \r\n if(tempExplanations){\r\n const explanationToChange = tempExplanations[id];\r\n if(explanationToChange){\r\n explanationToChange.tempFile = fileData;\r\n }else{\r\n tempExplanations.push({id: id, languageID: languageID, tempFile: fileData, media: fileData})\r\n }\r\n }else{\r\n tempExplanations= [{id: id, languageID: languageID, tempFile: fileData, media: fileData}];\r\n }\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n slideCopy.soundExplanations = tempExplanations;\r\n })\r\n }\r\n }\r\n\r\n const removeSlideSoundExplanation = (event, id) => {\r\n if(!props.slide){\r\n return;\r\n }\r\n if(!props.slide.soundExplanations){\r\n return;\r\n }else{\r\n const tempExplanations = props.slide.soundExplanations;\r\n const newtempExplanations = tempExplanations.filter(item => item.languageID !== id);\r\n console.log(newtempExplanations);\r\n \r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n slideCopy.soundExplanations = newtempExplanations;\r\n })\r\n }\r\n\r\n }\r\n\r\n const deleteQuestion = (id: number, apiID?: string): void => {\r\n if (!props.slide) {\r\n return;\r\n }\r\n if(apiID){\r\n deleteStatement({variables:{quiz_statement_id: String(apiID)}})\r\n }\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n const filteredStatements = filterAndSortById(slideCopy.statements, id);\r\n let index = 1;\r\n for (const statement of filteredStatements) {\r\n statement.id = index;\r\n index++;\r\n }\r\n slideCopy.statements = filteredStatements;\r\n setstatementBoxStates(filteredStatements);\r\n });\r\n };\r\n\r\n const deleteIntroStatement = () => {\r\n if (!props.slide) {\r\n return;\r\n }\r\n\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n slideCopy.introQuestion = -1;\r\n setisIntroQuestion(false);\r\n });\r\n };\r\n\r\n const addIntroStatement = () => {\r\n if (!props.slide) {\r\n return;\r\n }\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n slideCopy.introQuestion = -1;\r\n setisIntroQuestion(false);\r\n });\r\n setisIntroQuestion(true);\r\n };\r\n\r\n const updateIntroStatement = (soundValue: number) => {\r\n if (!props.slide) {\r\n return;\r\n }\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n slideCopy.introQuestion = soundValue;\r\n });\r\n };\r\n\r\n const addStatement = (): void => {\r\n if (\r\n !props.slide ||\r\n (props.slide.statements && props.slide.statements.length > 4)\r\n ) {\r\n alert(\"NO MORE THAN 4 STATEMENTS CAN BE ADDED\"); //TODO ADD LANGUAGE STRING\r\n return;\r\n }\r\n console.log(\"do i execute\");\r\n\r\n let newStatement: CreateQuizStatement = {\r\n originalIndex: props.slide.statements ? props.slide.statements.length + 1 : 1,\r\n id: props.slide.statements ? props.slide.statements.length + 1 : 1,\r\n soundAndText: { id: -1, soundLocation: \"\", soundText: \"none\" },\r\n answer: -1,\r\n elaboration:[{languageID: 1, text: \"\", id: 0}, {languageID: 2, text: \"\", id: 0}],\r\n };\r\n const statementsCopy = [...statementBoxStates];\r\n statementsCopy.push(newStatement);\r\n setstatementBoxStates(statementsCopy);\r\n };\r\n\r\n const renderTags = () => {\r\n const tempArray: JSX.Element[] = [];\r\n tempArray.push(\r\n <option key={-1} value={-1}>\r\n {\"Vælg tag\"}\r\n </option>\r\n );\r\n tempTags.forEach((tag) => {\r\n tempArray.push(\r\n <option key={tag.id} value={tag.id}>\r\n {tag.name}\r\n </option>\r\n );\r\n });\r\n return tempArray;\r\n };\r\n\r\n const handleChangeTags = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n const chosenTagID = Number(event.target.value);\r\n const chosenTag = findById(tempTags, chosenTagID);\r\n console.log(chosenTag);\r\n if (!props.slide) {\r\n return;\r\n } else if (chosenTag) {\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n if (slideCopy.tags) {\r\n slideCopy.tags.push(chosenTag);\r\n } else {\r\n slideCopy.tags = [chosenTag];\r\n }\r\n });\r\n console.log(tempTags.filter((tag) => tag.id === chosenTagID));\r\n\r\n settempTags((prevState) =>\r\n prevState.filter((tag) => tag.id !== chosenTagID)\r\n );\r\n }\r\n };\r\n\r\n const handleRemoveTag = (id: number) => {\r\n if (props.slide?.tags) {\r\n console.log(\"hi\");\r\n\r\n const chosenTag = findById(props.slide?.tags, id);\r\n if(props.slide.editID && chosenTag){\r\n removeTag({variables:{delete_quiz_slide_id: String(props.slide.editID), delete_tag_id: String(chosenTag.id)}})\r\n }\r\n console.log(chosenTag);\r\n\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n if (slideCopy.tags) {\r\n const filteredSlideTags = slideCopy.tags.filter(\r\n (tag) => tag.id !== chosenTag?.id\r\n );\r\n slideCopy.tags = filteredSlideTags;\r\n }\r\n });\r\n setTags();\r\n renderSelectedTags();\r\n }\r\n };\r\n\r\n const handleSlideFilter = (event: React.ChangeEvent<HTMLSelectElement>) => {\r\n if(!props.slide){\r\n return\r\n }\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n slideCopy.slideFilter = event.target.value;\r\n })\r\n }\r\n\r\n function setTags() {\r\n console.log(\"do i render\");\r\n\r\n let tempArray: Tag[] = props.tags;\r\n if (props.slide?.tags) {\r\n props.slide?.tags.forEach((tag) => {\r\n tempArray = tempArray.filter((tempTag) => tempTag.id !== tag.id);\r\n });\r\n settempTags(tempArray);\r\n }\r\n }\r\n\r\n const renderSelectedTags = () => {\r\n const tempChipArray: JSX.Element[] = [];\r\n if (props.slide?.tags) {\r\n props.slide?.tags.forEach((tag) => {\r\n tempChipArray.push(\r\n <Chip\r\n key={tag.id}\r\n variant=\"outlined\"\r\n label={tag.name}\r\n onDelete={() => handleRemoveTag(tag.id)}\r\n />\r\n );\r\n });\r\n }\r\n return tempChipArray;\r\n };\r\n\r\n const renderSlideFilter = () => {\r\n return(\r\n <select onChange={handleSlideFilter} value={props.slide?.slideFilter}>\r\n <option value=\"-1\">Vælg indholds modtager</option>\r\n <option value=\"0\">Ingen</option>\r\n <option value=\"1\">Elever</option>\r\n <option value=\"2\">Lærere</option>\r\n <option value=\"3\">Begge</option>\r\n </select>\r\n )\r\n }\r\n\r\n const renderStatements = (): JSX.Element => {\r\n if (props.slide?.statements) {\r\n const statements = props.slide?.statements.map((statement, index) => {\r\n const statementState = findById(statementBoxStates, statement.id);\r\n\r\n if (statementState) {\r\n return (\r\n <Draggable\r\n key={statement.originalIndex}\r\n draggableId={String(statement.originalIndex)}\r\n index={index}\r\n >\r\n {(provided) => (\r\n <div\r\n ref={provided.innerRef}\r\n {...provided.draggableProps}\r\n {...provided.dragHandleProps}\r\n >\r\n <Statement\r\n key={statement.originalIndex}\r\n narrationSounds={props.narrationSounds}\r\n statement={statementState}\r\n setStatements={setstatementBoxStates}\r\n deleteStatement={deleteQuestion}\r\n length={statementBoxStates.length}\r\n />\r\n </div>\r\n )}\r\n </Draggable>\r\n );\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n {statements}\r\n {props.slide?.statements.length < 4 ? (\r\n <div>\r\n <Button className=\"addStatementButton\" onClick={addStatement}>\r\n <AddIcon />\r\n </Button>\r\n </div>\r\n ) : null}\r\n </>\r\n );\r\n } else {\r\n return (\r\n <div>\r\n <Button className=\"addStatementButton\" onClick={addStatement}>\r\n <AddIcon />\r\n </Button>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n const renderIntroQuestion = (): JSX.Element => {\r\n if (isIntroQuestion && props.slide?.introQuestion) {\r\n return (\r\n <IntroStatement\r\n key={0}\r\n introQuestion={props.slide?.introQuestion}\r\n narrationSounds={props.narrationSounds}\r\n deleteIntroStatement={deleteIntroStatement}\r\n updateIntroStatement={updateIntroStatement}\r\n />\r\n );\r\n } else {\r\n return (\r\n <div>\r\n <Button className=\"addStatementButton\" onClick={addIntroStatement}>\r\n <AddIcon />\r\n </Button>\r\n </div>\r\n );\r\n }\r\n };\r\n\r\n const renderSoundExplanationButtons = ():JSX.Element[] => {\r\n const currentLanguages =[ {\r\n id: 1,\r\n language: \"Dansk\",\r\n }, {\r\n id: 2,\r\n language: \"Engelsk\",\r\n }]\r\n\r\n return currentLanguages.map((language, index) => {\r\n if(props.slide?.soundExplanations){\r\n if(props.slide.soundExplanations[index]){\r\n return <Button onClick={(event) => removeSlideSoundExplanation(event, language.id)}>{currentLanguages[index].language} < CloseIcon/></Button>\r\n }else{\r\n return <Button><input type={\"file\"} accept={\".mp3\"} onChange={(event) => handleSlideSoundExplanation(event, index, language.id)}></input>Tiløj {language.language}</Button>\r\n }\r\n }else{\r\n return <Button><input type={\"file\"} accept={\".mp3\"} onChange={(event) => handleSlideSoundExplanation(event, index, language.id)}></input>Tiløj {language.language}</Button>\r\n }\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n console.log(\"i execute\");\r\n\r\n setTags();\r\n renderSelectedTags();\r\n if (props.slide?.introQuestion !== -1) {\r\n setisIntroQuestion(true);\r\n }\r\n }, [props.slide]);\r\n\r\n useEffect(() => {\r\n if (!props.slide) {\r\n return;\r\n }\r\n copyAndUpdateSlideState(props.slide, (slideCopy) => {\r\n slideCopy.statements = statementBoxStates;\r\n let hasError = false;\r\n slideCopy.statements.forEach((statement) => {\r\n if (statement.hasError) {\r\n hasError = true;\r\n }\r\n });\r\n\r\n slideCopy.hasError = hasError;\r\n });\r\n }, [statementBoxStates]);\r\n\r\n return (\r\n <div className={props.slide ? \"Settings\" : \"Settings disabled\"}>\r\n <input\r\n className=\"nameInput\"\r\n value={props.name}\r\n onChange={(event) => props.setname(event.target.value)}\r\n />\r\n <span>\r\n {languageString.createLessonPage.slide + \" \" + props.slideOrderNumber}\r\n </span> \r\n <div className=\"idDisplay\">ID : {props.slide?.editID ? props.slide.editID : \"-\" }</div>\r\n <div className=\"tagSelectAndSlideFilter\">\r\n <select value={-1} onChange={handleChangeTags}>\r\n {renderTags()}\r\n </select>\r\n {renderSlideFilter()}</div>\r\n <div className=\"selectedTags\">{renderSelectedTags()}</div>\r\n <div className=\"soundExplanations\"><label>Lydforklaringer til slide: </label>{renderSoundExplanationButtons()}</div>\r\n <div className=\"statements\">\r\n {renderIntroQuestion()}\r\n <DragDropContext onDragEnd={handleOnDragEnd}>\r\n <Droppable droppableId=\"actualStatements\">\r\n {(provided) => (\r\n <ul className=\"actualStatements\" ref={provided.innerRef}>\r\n {renderStatements()}\r\n </ul>\r\n )}\r\n </Droppable>\r\n </DragDropContext>\r\n </div>\r\n <div className=\"bottom\">\r\n <div className=\"finish\">\r\n <Button\r\n onClick={props.handleSave}\r\n variant=\"contained\"\r\n className=\"clickable\"\r\n >\r\n <img alt=\"SAVE-ICON\" src={saveIcon}></img>\r\n </Button>\r\n <label>{languageString.createLessonPage.save}</label>\r\n </div>\r\n <div className=\"finish\">\r\n <Button\r\n onClick={props.handleFinish}\r\n variant=\"contained\"\r\n className=\"finishButton\"\r\n >\r\n <img alt=\"FINISH-ICON\" src={whiteArrow}></img>\r\n </Button>\r\n <label>{languageString.createLessonPage.finish}</label>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { Settings };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { FIND_INDEX_STATUS_NOT_FOUND } from \"../../../constants/generalConstants\";\r\nimport { CreateQuizSlide, LessonSlide, Tag } from \"../../model\";\r\nimport { findById, findIndexById } from \"../../modelFunctions\";\r\nimport { ItemDetails } from \"./components/ItemDetails\";\r\nimport { ItemsArea } from \"./components/ItemsArea\";\r\nimport { Settings } from \"./components/Settings\";\r\nimport { availableSounds } from \"./CreateQuizPage\";\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\ninterface location {\r\n focusedSlide: number;\r\n}\r\n\r\nexport type ICreateQuizContentProps = {\r\n tags: Tag[];\r\n lessonState: CreateQuizSlide[];\r\n handleFinish: (isFinished: boolean) => void;\r\n setLessonState: React.Dispatch<React.SetStateAction<CreateQuizSlide[]>>;\r\n name: string;\r\n setname: React.Dispatch<React.SetStateAction<string>>;\r\n narrationSounds: availableSounds[];\r\n};\r\n\r\nconst CreateQuizContent: React.FC<ICreateQuizContentProps> = (\r\n props: ICreateQuizContentProps\r\n) => {\r\n const location = useLocation<location>();\r\n\r\n const [hasSelectedOnce, sethasSelectedOnce] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!hasSelectedOnce) {\r\n if (location.state) {\r\n if (location.state.focusedSlide) {\r\n const slideToSelect = props.lessonState.find(\r\n (slide) => slide.editID === location.state.focusedSlide\r\n );\r\n if (slideToSelect) {\r\n sethasSelectedOnce(true);\r\n setselectedSlideID(slideToSelect.id);\r\n }\r\n }\r\n }\r\n }\r\n }, [props.lessonState]);\r\n\r\n const [selectedSlideID, setselectedSlideID] = useState<number | null>(null);\r\n const [isSelectedSlideExpanded, setIsSelectedSlideExpanded] =\r\n useState<boolean>(false);\r\n\r\n const getSelectedSlide = (): CreateQuizSlide | undefined => {\r\n return findById(props.lessonState, selectedSlideID);\r\n };\r\n\r\n const getOrderNumberOfSelectedSlide = (): number | null => {\r\n const selectedSlideIndex = findIndexById(\r\n props.lessonState,\r\n selectedSlideID\r\n );\r\n if (selectedSlideIndex === FIND_INDEX_STATUS_NOT_FOUND) {\r\n return null;\r\n }\r\n return selectedSlideIndex + 1;\r\n };\r\n\r\n const selectSlide = (id: number): void => {\r\n setselectedSlideID(id);\r\n };\r\n\r\n const expandSelectedSlide = (id: number): void => {\r\n selectSlide(id);\r\n setIsSelectedSlideExpanded(true);\r\n };\r\n\r\n const shrinkSelectedSlide = (): void => {\r\n setIsSelectedSlideExpanded(false);\r\n };\r\n\r\n const copyAndUpdateLessonState = (\r\n callback: (lessonState: CreateQuizSlide[]) => void\r\n ): void => {\r\n const lessonStateCopy: CreateQuizSlide[] = [...props.lessonState];\r\n callback(lessonStateCopy);\r\n\r\n props.setLessonState(lessonStateCopy);\r\n console.log(props.lessonState);\r\n };\r\n\r\n const setSlides = (slides: CreateQuizSlide[]): void => {\r\n props.setLessonState(slides);\r\n };\r\n\r\n const updateSelectedSlide = (updatedSlide: CreateQuizSlide): void => {\r\n if (selectedSlideID === null) {\r\n console.warn(\"SLIDE IS SET TO NULL !!!\");\r\n return;\r\n }\r\n //Get index and check if index of updated slide has been found\r\n const updatedSlideIndex = findIndexById(props.lessonState, selectedSlideID);\r\n if (updatedSlideIndex !== FIND_INDEX_STATUS_NOT_FOUND) {\r\n copyAndUpdateLessonState(\r\n (lessonState) => (lessonState[updatedSlideIndex] = updatedSlide)\r\n );\r\n }\r\n };\r\n\r\n const renderItemAreaOrItemDetails = () => {\r\n const selectedSlide = getSelectedSlide();\r\n if (isSelectedSlideExpanded && selectedSlide) {\r\n return (\r\n <ItemDetails\r\n shrinkSelectedSlide={shrinkSelectedSlide}\r\n slide={getSelectedSlide()!}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <ItemsArea\r\n slides={props.lessonState}\r\n setSlides={setSlides}\r\n selectSlide={selectSlide}\r\n expandSelectedSlide={expandSelectedSlide}\r\n narrationSounds={props.narrationSounds}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"ContentPage\">\r\n {renderItemAreaOrItemDetails()}\r\n <Settings\r\n key={selectedSlideID}\r\n tags={props.tags}\r\n slide={getSelectedSlide()}\r\n slideOrderNumber={getOrderNumberOfSelectedSlide()}\r\n updateSelectedSlide={updateSelectedSlide}\r\n handleSave={() => props.handleFinish(true)}\r\n handleFinish={() => props.handleFinish(false)}\r\n setname={props.setname}\r\n name={props.name}\r\n narrationSounds={props.narrationSounds}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport { CreateQuizContent };\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport { AppStateContext } from \"../../../apollo/TeoriTeacherProvider\";\r\nimport { PATH_DASHBOARD } from \"../../../constants/pathConstants\";\r\nimport IntermediaryLoading from \"../../../globalComponents/IntermediaryLoading\";\r\nimport Loading from \"../../../globalComponents/Loading\";\r\nimport {\r\n Quiz_Edit,\r\n Quiz_Input,\r\n Quiz_Slide_Input,\r\n Slide_Explanation_Input,\r\n Statement,\r\n Statement_Elaboration_Input,\r\n Tag_Input,\r\n useGetAvailableTagsQuery,\r\n useGetCompleteQuizEditQuery,\r\n useGetSasQuery,\r\n useGetSoundContentQuery,\r\n useManageQuizMutation,\r\n} from \"../../../graphql/generated/graphql\";\r\nimport { uploadExplanationSound } from \"../../../services/azureStorage\";\r\nimport {\r\n CreateQuizExplanation,\r\n CreateQuizSlide,\r\n CreateQuizStatement,\r\n CreateQuizStatementElaboration,\r\n MediaType,\r\n Tag,\r\n} from \"../../model\";\r\nimport { numberToMediaType } from \"../../modelFunctions\";\r\nimport { CreateQuizContent } from \"./CreateQuizContent\";\r\nimport \"./CreateQuizPage.scss\";\r\n\r\ninterface location {\r\n isEdit?: boolean;\r\n ID: number;\r\n}\r\nexport interface availableSounds {\r\n key: string;\r\n id: number;\r\n label: string;\r\n}\r\n\r\nexport type ICreateQuizPageProps = {};\r\n\r\nconst CreateQuizPage: React.FC<ICreateQuizPageProps> = ({}) => {\r\n const location = useLocation<location>();\r\n const [QuizState, setQuizState] = useState<CreateQuizSlide[]>([]);\r\n const [name, setname] = useState<string>(\"Starter name\");\r\n const [quizID, setquizID] = useState<number | undefined>();\r\n const [tags, setTags] = useState<Tag[]>([{ id: -1, name: \"Loading\" }]);\r\n const [editLoader, seteditLoader] = useState(location.state ? true : false);\r\n const [isEdit, setisEdit] = useState(location.state ? true : false);\r\n\r\n const context = useContext(AppStateContext);\r\n const history = useHistory();\r\n\r\n const [narrationSounds, setnarrationSounds] = useState<availableSounds[]>([]);\r\n\r\n const { data: soundData, loading: soundLoading, refetch: refetchSound } = useGetSoundContentQuery();\r\n\r\n const { data: SASKey } = useGetSasQuery({ fetchPolicy: \"network-only\" });\r\n\r\n const [manageQuiz] = useManageQuizMutation();\r\n const { data: tagsData, loading: tagsLoading } = useGetAvailableTagsQuery();\r\n const {\r\n data: quizData,\r\n loading: quizLoading,\r\n refetch: refetchQuizData,\r\n } = useGetCompleteQuizEditQuery({\r\n variables: {\r\n quiz_id: location.state ? String(location.state.ID) : \"0\",\r\n language_id: String(1),\r\n },\r\n skip: location.state === undefined,\r\n fetchPolicy: \"network-only\",\r\n });\r\n\r\n function setTagsFunction() {\r\n const tempArray: Tag[] = [];\r\n tagsData?.getAvailableTags?.forEach((tag) => {\r\n if (tag) {\r\n tempArray.push({\r\n id: Number(tag!.tag_id!),\r\n name: tag!.tag_name!,\r\n });\r\n }\r\n });\r\n setTags(tempArray);\r\n }\r\n\r\n function renameFiles(arr: availableSounds[]){\r\n var dup_count;\r\n let new_name = \"\";\r\n arr.forEach((item, index) => {\r\n dup_count = arr.filter(x => x.label === item.label).length;\r\n if (dup_count > 1) {\r\n for(let n = 0; n < dup_count;){\r\n do {\r\n new_name = `${item.label.split(\"(\")[0]} (${n+=1})`;\r\n } while (arr.some((item) => item.label === new_name));\r\n arr[arr.indexOf(item)].label = new_name;\r\n }\r\n }\r\n });\r\n return arr\r\n }\r\n\r\n const setSounds = () => {\r\n const tempArray: availableSounds[] = [];\r\n if(soundData?.getSoundContent?.length === 0){\r\n refetchSound();\r\n return;\r\n }\r\n if (soundData) {\r\n soundData.getSoundContent?.forEach((sound) => {\r\n if (sound && sound.sound_content_id && sound.sound_text) {\r\n tempArray.push({\r\n key: sound.sound_content_id,\r\n id: Number(sound.sound_content_id),\r\n label: sound.sound_text,\r\n });\r\n }\r\n });\r\n const newSounds = renameFiles(tempArray);\r\n setnarrationSounds(newSounds);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!tagsLoading) {\r\n setTagsFunction();\r\n }\r\n }, [tagsLoading]);\r\n\r\n useEffect(() => {\r\n if(location.state){\r\n\r\n if(location.state.isEdit){\r\n if (!quizLoading) {\r\n setSlides();\r\n }\r\n }\r\n }\r\n }, [quizLoading]);\r\n\r\n useEffect(() => {\r\n if(!soundLoading){\r\n setSounds();\r\n }\r\n },[soundLoading, soundData])\r\n\r\n async function fetchVideoThumb(mediaLocation) {\r\n const thumbnailAddress = mediaLocation.split(\"/\")[3];\r\n return await fetch(\r\n `https://vimeo.com/api/oembed.json?url=https://vimeo.com/${thumbnailAddress}`\r\n )\r\n .then((data) => data.json())\r\n .then((result) => {\r\n return result.thumbnail_url;\r\n });\r\n }\r\n\r\n async function convertAPIStateToQuizState(apiState: Quiz_Edit) {\r\n const tempQuizState: CreateQuizSlide[] = [];\r\n setquizID(Number(apiState.quiz_Id));\r\n setname(apiState.quiz_name ? apiState.quiz_name : \"No name\");\r\n let slideIndex = 1;\r\n for (const slide of apiState.slides) {\r\n if (slide) {\r\n const tempTags: Tag[] = [];\r\n if (slide.tags) {\r\n for (const tag of slide.tags) {\r\n tempTags.push({\r\n id: Number(tag!.tag_id!),\r\n name: tag!.tag_name!,\r\n });\r\n }\r\n }\r\n const tempQuizStatements: CreateQuizStatement[] = [];\r\n if (slide.slide_statements) {\r\n let statementIndex = 1;\r\n for (const statement of slide.slide_statements) {\r\n const tempElaborations: CreateQuizStatementElaboration[] = [];\r\n let elaborationIndex = 0;\r\n if (\r\n statement?.quiz_statement_elaboration &&\r\n statement?.quiz_statement_elaboration?.length !== 0\r\n ) {\r\n for (const elaboration of statement.quiz_statement_elaboration) {\r\n if(elaboration?.elaboration_language === \"2\" && statement.quiz_statement_elaboration.length === 1 ){\r\n tempElaborations.push({\r\n id: 0,\r\n languageID: 1,\r\n text: \"\",\r\n });\r\n\r\n tempElaborations.push({\r\n id: Number(elaboration!.elaboration_id!),\r\n editID: elaboration!.elaboration_id!,\r\n languageID: Number(elaboration!.elaboration_language!),\r\n text: elaboration!.elaboration_text!,\r\n isOriginal: elaboration!.elaboration_is_original\r\n ? true\r\n : false,\r\n });\r\n }else{\r\n\r\n tempElaborations.push({\r\n id: Number(elaboration!.elaboration_id!),\r\n editID: elaboration!.elaboration_id!,\r\n languageID: Number(elaboration!.elaboration_language!),\r\n text: elaboration!.elaboration_text!,\r\n isOriginal: elaboration!.elaboration_is_original\r\n ? true\r\n : false,\r\n });\r\n }\r\n }\r\n if (tempElaborations.length <= 2) {\r\n tempElaborations.push({\r\n id: 0,\r\n text: \"\",\r\n languageID: 2,\r\n });\r\n }\r\n } else {\r\n for (let i = 0; i <= 1; i++) {\r\n tempElaborations.push({\r\n id: elaborationIndex,\r\n text: \"\",\r\n languageID: elaborationIndex + 1,\r\n });\r\n elaborationIndex++;\r\n }\r\n }\r\n try {\r\n console.log(statement?.quiz_Statement_Id);\r\n\r\n tempQuizStatements.push({\r\n id: Number(statementIndex),\r\n editID: Number(statement!.quiz_Statement_Id!),\r\n soundAndText: {\r\n id: statement!.quiz_statement_sound\r\n ? Number(\r\n statement!.quiz_statement_sound[0]!.sound_content_id!\r\n )\r\n : -1,\r\n soundLocation: statement!.quiz_statement_sound\r\n ? statement!.quiz_statement_sound[0]!.sound_location!\r\n : \"\",\r\n soundText: statement!.quiz_statement_sound\r\n ? statement!.quiz_statement_sound[0]!.sound_text!\r\n : \"\",\r\n },\r\n answer: statement!.statement_answer_id!,\r\n elaboration: tempElaborations,\r\n originalIndex: statementIndex,\r\n });\r\n statementIndex++;\r\n } catch (e) {\r\n console.log(e);\r\n console.log(\"this is at the index it is wrong \" + statementIndex);\r\n }\r\n }\r\n }\r\n const tempExplanations: CreateQuizExplanation[] = [];\r\n if (slide.slide_explanations) {\r\n for (const explanation of slide.slide_explanations) {\r\n tempExplanations.push({\r\n id: Number(explanation!.explanation_id!),\r\n editID: explanation!.explanation_id!,\r\n languageID: Number(explanation!.explanation_language!),\r\n tempFile: explanation!.explanation_location!,\r\n media: explanation!.explanation_location!,\r\n isOriginal: explanation!.explanation_is_original ? true : false,\r\n });\r\n }\r\n }\r\n if (slide.slide_content)\r\n if(slide.slide_content.length === 0){\r\n tempQuizState.push({\r\n // THIS IS FUCKING HORRIBLE CODE, BUT THERE IS NO OTHER WAY TO DO IT, WHEN THE RETURNS ARE \"MAYBE\"\r\n editID: Number(slide.quiz_slide_id),\r\n id: slideIndex,\r\n type: MediaType.AZUREIMG,\r\n media:\r\n \"https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/No_image_available.svg/1024px-No_image_available.svg.png\",\r\n tempFile: \"failure\",\r\n content_id: \"0\",\r\n introQuestion: slide!.intro_question_sound\r\n ? Number(slide!.intro_question_sound[0]?.sound_content_id)\r\n : -1,\r\n statements: tempQuizStatements,\r\n tags: tempTags,\r\n soundExplanations: tempExplanations,\r\n slideFilter: \"-1\" //TODO CHANGE THIS TO THE REAL IMPLEMENTATION\r\n });\r\n }else{\r\n tempQuizState.push({\r\n // THIS IS FUCKING HORRIBLE CODE, BUT THERE IS NO OTHER WAY TO DO IT, WHEN THE RETURNS ARE \"MAYBE\"\r\n editID: Number(slide.quiz_slide_id),\r\n id: slideIndex,\r\n type: slide.slide_content[0]!.media_type_id\r\n ? numberToMediaType(slide!.slide_content[0]!.media_type_id)!\r\n : MediaType.AZUREIMG,\r\n media:\r\n slide!.slide_content[0]!.media_type_id === 1\r\n ? await fetchVideoThumb(slide!.slide_content[0]!.media_location)\r\n : slide!.slide_content[0]!.media_location,\r\n tempFile: slide!.slide_content[0]!.media_location\r\n ? slide!.slide_content[0]!.media_location\r\n : \"failure\",\r\n content_id: slide!.slide_content[0]!.content_id\r\n ? slide!.slide_content[0]!.content_id\r\n : \"-1\",\r\n introQuestion: slide!.intro_question_sound\r\n ? Number(slide!.intro_question_sound[0]?.sound_content_id)\r\n : -1,\r\n statements: tempQuizStatements,\r\n tags: tempTags,\r\n soundExplanations: tempExplanations,\r\n slideFilter: slide!.slide_is_accesible !== undefined ? String(slide.slide_is_accesible) : \"-1\", //TODO CHANGE THIS TO THE REAL IMPLEMENTATION\r\n }); \r\n console.log(slide!.slide_is_accesible);\r\n }\r\n }\r\n \r\n \r\n slideIndex++;\r\n }\r\n return tempQuizState;\r\n }\r\n\r\n const refetchTheQuiz = async () => {\r\n await refetchQuizData().then(async (data) => {\r\n if(data.data.getCompleteQuizEdit){\r\n if(data.data.getCompleteQuizEdit.slides.length === 0 || data.data.getCompleteQuizEdit === null){\r\n refetchTheQuiz()\r\n }else{\r\n const newQuizState = await convertAPIStateToQuizState(\r\n data.data.getCompleteQuizEdit\r\n );\r\n console.log(newQuizState);\r\n setQuizState(newQuizState);\r\n setTimeout(() => seteditLoader(false), 3000);\r\n }\r\n \r\n }else{\r\n refetchTheQuiz();\r\n }\r\n })\r\n }\r\n async function setSlides() {\r\n if (quizData?.getCompleteQuizEdit) {\r\n if (quizData.getCompleteQuizEdit.slides.length === 0 || quizData.getCompleteQuizEdit === null) {\r\n refetchQuizData();\r\n } else {\r\n console.log(quizData.getCompleteQuizEdit);\r\n\r\n const newQuizState = await convertAPIStateToQuizState(\r\n quizData?.getCompleteQuizEdit\r\n );\r\n console.log(newQuizState);\r\n setQuizState(newQuizState);\r\n setTimeout(() => seteditLoader(false), 3000);\r\n }\r\n } else {\r\n await refetchTheQuiz();\r\n }\r\n }\r\n\r\n function arraymove(arr, fromIndex, toIndex) {\r\n var element = arr[fromIndex];\r\n arr.splice(fromIndex, 1);\r\n arr.splice(toIndex, 0, element);\r\n }\r\n /*################# THIS IS THE FUNCTION RESPONSIBLE FOR CONVERTING THE FRONTEND STATE TO THE BACKEND ######################## */\r\n async function convertQuizStateToAPI(\r\n currentQuizState: CreateQuizSlide[],\r\n isDraft?: boolean\r\n ) {\r\n let quiz: Quiz_Input;\r\n const quizSlides: Quiz_Slide_Input[] = [];\r\n //TODO STILL NEED THE CORRECT FORM OF INPUT TO THE API\r\n for (const slide of currentQuizState) {\r\n const tags: Tag_Input[] = [];\r\n slide.tags?.forEach((tag) => {\r\n tags.push({ tag_id: String(tag.id) });\r\n });\r\n\r\n const statements: Statement[] = [];\r\n for (const statement of slide.statements) {\r\n const elaborations: Statement_Elaboration_Input[] = [];\r\n //TODO WHEN INPUT TYPE IS CHANGED SO I CAN PUT IN ELABORATION, DO IT!!\r\n let elabIndex = 0;\r\n let currentIndex = 0;\r\n for (const elaboration of statement.elaboration) {\r\n if (elaboration.isOriginal) {\r\n arraymove(statement.elaboration, currentIndex, 0);\r\n }\r\n currentIndex++;\r\n }\r\n for (const elaboration of statement.elaboration) {\r\n if (elaboration.text.length > 2) {\r\n if (elaboration.isOriginal) {\r\n elaborations.push({\r\n elaboration_is_original: true,\r\n elaboration_language: String(elaboration.languageID),\r\n elaboration_text: elaboration.text,\r\n elaboration_id: elaboration.editID\r\n ? elaboration.editID\r\n : undefined,\r\n elaboration_owner: String(context.appGetUserID()),\r\n });\r\n } else {\r\n elaborations.push({\r\n elaboration_is_original: elabIndex === 0 ? true : false,\r\n elaboration_language: String(elaboration.languageID),\r\n elaboration_text: elaboration.text,\r\n elaboration_id: elaboration.editID\r\n ? elaboration.editID\r\n : undefined,\r\n elaboration_owner: String(context.appGetUserID()),\r\n });\r\n }\r\n elabIndex++;\r\n }\r\n }\r\n\r\n statements.push({\r\n statement_answer_id: Number(statement.answer),\r\n quiz_statement_no: String(statement.id),\r\n quiz_statement_elaboration: elaborations,\r\n quiz_statement_content: String(statement.soundAndText.id),\r\n quiz_Statement_Id: statement.editID\r\n ? String(statement.editID)\r\n : undefined,\r\n });\r\n }\r\n const tempExplanations: Slide_Explanation_Input[] = [];\r\n if (slide.soundExplanations) {\r\n if (SASKey) {\r\n let explanationIndex = 0;\r\n for (const explanation of slide.soundExplanations) {\r\n if (explanation.tempFile) {\r\n if (typeof explanation.tempFile === \"string\") {\r\n tempExplanations.push({\r\n explanation_id: explanation.editID\r\n ? explanation.editID\r\n : undefined,\r\n explanation_language: String(explanation.languageID),\r\n explanation_location: explanation.tempFile,\r\n explanation_is_original:\r\n explanationIndex === 0 ? true : false,\r\n explanation_owner: String(context.appGetUserID()),\r\n });\r\n } else {\r\n await uploadExplanationSound(\r\n SASKey.getSAS,\r\n explanation.tempFile,\r\n Number(context.appGetUserID())\r\n // eslint-disable-next-line no-loop-func\r\n ).then((data) => {\r\n const url = data?.split(\"?sv\")[0];\r\n tempExplanations.push({\r\n explanation_id: explanation.editID\r\n ? explanation.editID\r\n : undefined,\r\n explanation_language: String(explanation.languageID),\r\n explanation_location: url,\r\n explanation_is_original:\r\n explanationIndex === 0 ? true : false,\r\n explanation_owner: String(context.appGetUserID()),\r\n });\r\n });\r\n }\r\n }\r\n explanationIndex++;\r\n }\r\n }\r\n }\r\n\r\n quizSlides.push({\r\n quiz_slide_id: slide.editID ? String(slide.editID) : undefined,\r\n intro_question_content: String(slide.introQuestion) === \"NaN\" ? \"0\": String(slide.introQuestion),\r\n translation_content: slide.content_id,\r\n slide_explanations: tempExplanations,\r\n slide_statements: statements,\r\n tags: tags,\r\n slide_is_accesible: Number(slide.slideFilter) === -1 ? undefined : Number(slide.slideFilter)\r\n });\r\n }\r\n quiz = {\r\n quiz_Id: quizID ? String(quizID) : undefined,\r\n quiz_name: name,\r\n quiz_default_language: 1,\r\n quiz_is_draft: isDraft ? true : undefined,\r\n slides: quizSlides,\r\n };\r\n console.log(quiz);\r\n\r\n return quiz;\r\n }\r\n\r\n //THIS IS FOR VALIDATION\r\n const checkForErrors = (state: CreateQuizSlide[]) => {\r\n const copyOfState = [...state];\r\n let hasError = false;\r\n for (const slide of copyOfState) {\r\n for (const statement of slide.statements) {\r\n if (statement.answer === -1) {\r\n hasError = true;\r\n statement.hasError = true;\r\n slide.hasError = true;\r\n }\r\n }\r\n }\r\n console.log(copyOfState);\r\n\r\n setQuizState(copyOfState);\r\n return hasError;\r\n };\r\n\r\n const finishQuiz = async (isDraft?: boolean) => {\r\n if (!checkForErrors(QuizState)) {\r\n const convertedQuiz = await convertQuizStateToAPI(QuizState, isDraft);\r\n console.log(convertedQuiz);\r\n seteditLoader(true);\r\n manageQuiz({ variables: { quiz: convertedQuiz } }).then((data) => {\r\n if (data.data?.manageQuiz === \"quiz_updated\") {\r\n history.push(PATH_DASHBOARD);\r\n } else if(typeof data.data?.manageQuiz === \"number\") {\r\n history.push(PATH_DASHBOARD);\r\n }else{\r\n seteditLoader(false);\r\n alert(\"noget gik galt, kontakt udviklerne\");\r\n\r\n }\r\n });\r\n }\r\n };\r\n return (\r\n <div className=\"CreateQuizPage\">\r\n {isEdit && editLoader ? <IntermediaryLoading /> : null}\r\n <CreateQuizContent\r\n lessonState={QuizState}\r\n setLessonState={setQuizState}\r\n tags={tags}\r\n handleFinish={finishQuiz}\r\n name={name}\r\n setname={setname}\r\n narrationSounds={narrationSounds}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport { CreateQuizPage };\r\n","import { Button } from \"@mui/material\";\r\nimport MUIDataTable from \"mui-datatables\";\r\nimport EditRoundedIcon from \"@mui/icons-material/EditRounded\";\r\nimport React from \"react\";\r\n\r\nconst ROW_MODIFY_STATES = Object.freeze(\r\n Object.fromEntries([\"INITIAL\", \"EDITING\"].map((t) => [t, t]))\r\n);\r\n\r\nconst getColumnValue = (originalColumnIndex, tableMeta) =>\r\n tableMeta.rowData[\r\n tableMeta.tableState.columnOrder?.indexOf(originalColumnIndex) ??\r\n originalColumnIndex\r\n ];\r\n\r\nconst rebuildObjFromRow = (columns, tableMeta) =>\r\n Object.fromEntries(\r\n columns.map((c, originalColumnIndex) => [\r\n c.name,\r\n getColumnValue(originalColumnIndex + 1, tableMeta),\r\n ])\r\n );\r\n\r\nconst DefaultActionButton = ({ value, onEditStart, onEditFinish }) =>\r\n value === ROW_MODIFY_STATES.INITIAL ? (\r\n <Button onClick={onEditStart}>\r\n <EditRoundedIcon />\r\n </Button>\r\n ) : (\r\n <Button onClick={onEditFinish}> Save </Button>\r\n );\r\n\r\nconst EditableCell = ({ editing, value, onChange, columnMeta, tableMeta }) =>\r\n editing\r\n ? columnMeta.options?.customBodyEditRender?.(\r\n value,\r\n tableMeta,\r\n onChange\r\n ) ?? <input className=\"standardInput\" value={value} onChange={(e) => onChange(e.target.value)} />\r\n : columnMeta.options?.customBodyRender?.(value, tableMeta, onChange) ??\r\n value;\r\n\r\nconst actionColumnRenderFactory =\r\n (columns, onRowSave, actionButtonCmp) => (value, tableMeta, update) =>\r\n actionButtonCmp({\r\n value,\r\n onEditStart: () => update(ROW_MODIFY_STATES.EDITING),\r\n onEditFinish: () => {\r\n const rowObj = rebuildObjFromRow(columns, tableMeta);\r\n onRowSave(rowObj);\r\n update(ROW_MODIFY_STATES.INITIAL);\r\n },\r\n });\r\n\r\nconst injectColumnRender = (columns) => {\r\n return columns.map((c) => ({\r\n ...c,\r\n options: {\r\n ...c.options,\r\n customBodyRender: (value, tableMeta, onChange) => {\r\n const uiState = getColumnValue(0, tableMeta);\r\n return (\r\n <EditableCell\r\n editing={uiState === ROW_MODIFY_STATES.EDITING}\r\n columnMeta={c}\r\n {...{ value, tableMeta, onChange }}\r\n />\r\n );\r\n },\r\n },\r\n }))};\r\nconst MuiDataTableEditable: React.FC<any> = ({\r\n data,\r\n columns,\r\n onRowSave,\r\n onRowClick,\r\n actionButtonCmp = DefaultActionButton,\r\n ...otherProps\r\n}) => {\r\n const dataWithUiState = Array.isArray(data[0])\r\n ? data.map((t) => [ROW_MODIFY_STATES.INITIAL, ...t])\r\n : data.map((t) => ({ uiState: ROW_MODIFY_STATES.INITIAL, ...t }));\r\n\r\n const actionColumn = {\r\n name: \"uiState\",\r\n label: \"Rediger\",\r\n options: {\r\n customBodyRender: actionColumnRenderFactory(\r\n columns,\r\n onRowSave,\r\n actionButtonCmp\r\n ),\r\n },\r\n };\r\n\r\n const columnsWithEditableRender = injectColumnRender(columns);\r\n\r\n const columnsWithCustomRenderAndActionColumn = [\r\n actionColumn,\r\n ...columnsWithEditableRender\r\n \r\n ];\r\n\r\n return (\r\n <MUIDataTable\r\n data={dataWithUiState}\r\n columns={columnsWithCustomRenderAndActionColumn}\r\n\r\n {...otherProps}\r\n />\r\n );\r\n};\r\n\r\nexport { MuiDataTableEditable };\r\n","import React, { useEffect, useState } from 'react';\r\nimport { GetCategoriesQuery, useGetCategoriesQuery } from '../../../../../graphql/generated/graphql';\r\n\r\nexport type ICategorySelectProps = {\r\n data?: GetCategoriesQuery;\r\n value: string;\r\n onChange: any;\r\n}\r\n\r\nconst CategorySelect: React.FC<ICategorySelectProps> = (props:ICategorySelectProps) => {\r\n\r\n const [categories, setcategories] = useState<JSX.Element[]>([<option value={\"-1\"}>{\"Loading\"}</option>]);\r\n\r\n const handleChange = (event) => {\r\n props.onChange(event.target.value)\r\n }\r\n\r\n useEffect(() => {\r\n if(props.data?.getCategories){\r\n const tempArray: any[] = [];\r\n props.data.getCategories.forEach((category) => {\r\n if(category){\r\n tempArray.push(<option value={category.cat_id!}>{category?.cat_name}</option>)\r\n }\r\n })\r\n setcategories(tempArray);\r\n }\r\n }, [props.data]);\r\n return (\r\n <select onChange={handleChange} value={props.value}>\r\n {categories}\r\n </select>\r\n );\r\n}\r\n\r\nexport { CategorySelect };","import React, { useState } from 'react';\r\nimport Calendar from 'react-calendar';\r\nimport CalendarTodayRoundedIcon from '@mui/icons-material/CalendarTodayRounded';\r\nimport 'react-calendar/dist/Calendar.css';\r\nimport { Button } from '@mui/material';\r\nimport \"./DatePicker.scss\";\r\n\r\nexport type IDatePickerProps = {\r\n value: string;\r\n onChange: any;\r\n}\r\n\r\nconst DatePicker: React.FC<IDatePickerProps> = (props: IDatePickerProps) => {\r\n\r\n const [isExpanded, setisExpanded] = useState(false);\r\n\r\n const handleChangeCalendar = (value): void => {\r\n const date: Date = value;\r\n console.log(date.toDateString());\r\n props.onChange(date.getTime() / 1000);\r\n setisExpanded(false)\r\n };\r\n\r\n\r\n const renderCalendar = () => {\r\n return (\r\n <div className=\"calendarBox\">\r\n <Calendar\r\n value={new Date(Number(props.value) * 1000)}\r\n onChange={handleChangeCalendar}\r\n />\r\n </div>\r\n );\r\n };\r\n return (\r\n <div className='DatePicker'>\r\n {isExpanded ? \r\n renderCalendar()\r\n : <Button onClick={() => setisExpanded(true)} className=\"DateButton\"><CalendarTodayRoundedIcon/></Button>}\r\n </div>\r\n );\r\n}\r\n\r\nexport { DatePicker };","import React, { useEffect, useState } from \"react\";\r\nimport { GetSchoolListQuery } from \"../../../../../graphql/generated/graphql\";\r\n\r\nexport type ISchoolSelectProps = {\r\n data?: GetSchoolListQuery;\r\n onChange: any;\r\n value: string;\r\n};\r\n\r\nconst SchoolSelect: React.FC<ISchoolSelectProps> = (\r\n props: ISchoolSelectProps\r\n) => {\r\n const [schoolList, setschoolList] = useState([\r\n <option value=\"-1\">Loading...</option>]\r\n );\r\n\r\n const handleChange = (event) => {\r\n console.log(event.target.value);\r\n props.onChange(event.target.value)\r\n }\r\n\r\n useEffect(() => {\r\n if (props.data) {\r\n const tempArray: JSX.Element[] = [];\r\n props.data.getSchoolList?.forEach((school) => {\r\n tempArray.push(<option value={school!.school_id!}>{school?.school_name + ` (${school?.zipcode})`}</option>)\r\n })\r\n setschoolList(tempArray);\r\n //WE SET THE SCHOOL LIST INSIDE HERE.\r\n //WE GET THE DATA ON THE SIDE LOAD, AS THIS QUERY IS HEAVY AND WE CANT WAIT FOR IT EVERYTIME\r\n }\r\n }, [props.data]);\r\n return <select onChange={handleChange} value={props.value}>{schoolList}</select>;\r\n};\r\n\r\nexport { SchoolSelect };\r\n","import { Button, Input, Select } from '@mui/material';\r\nimport React, { useState } from 'react';\r\nimport { useManageStudentMutation } from '../../../../../graphql/generated/graphql';\r\nimport { DatePicker } from './DatePicker';\r\nimport CloseRoundedIcon from '@mui/icons-material/CloseRounded';\r\n\r\ninterface AddStudentBoxProps {\r\n categories: any[];\r\n setisshown: any;\r\n refetch: any;\r\n}\r\n\r\nconst AddStudentBox: React.FC<AddStudentBoxProps> = (props: AddStudentBoxProps) => {\r\n const [manageStudent] = useManageStudentMutation();\r\n const [selectedCategory, setselectedCategory] = useState<string>(\"2\");\r\n const [phonenumber, setphonenumber] = useState<string>(\"+45\");\r\n const [selectedDate, setselectedDate] = useState<Date>(new Date());\r\n\r\n function padTo2Digits(num) {\r\n return num.toString().padStart(2, \"0\");\r\n }\r\n \r\n function formatDate(timeString) {\r\n const date = new Date(timeString * 1000);\r\n return [\r\n padTo2Digits(date.getDate()),\r\n padTo2Digits(date.getMonth() + 1),\r\n date.getFullYear(),\r\n ].join(\"/\");\r\n }\r\n\r\n\r\n const renderOptions = () => {\r\n const tempArray: JSX.Element[] = [];\r\n props.categories.forEach((category) => {\r\n tempArray.push(<option value={category.id}>{category.label}</option>)\r\n })\r\n return tempArray;\r\n }\r\n\r\n const handleSubmit = () => {\r\n if(selectedDate && phonenumber && selectedCategory){\r\n manageStudent({variables:{student:{ student_category: Number(selectedCategory), student_phone_number: phonenumber, expiry_date: selectedDate.toISOString(), language_choice: 1}}}).then(() => {\r\n props.setisshown(false);\r\n props.refetch();\r\n })\r\n }\r\n }\r\n\r\n const handleDateChange = (timeString: string) => {\r\n setselectedDate(new Date(Number(timeString) * 1000))\r\n }\r\n\r\n\r\n return (\r\n <div className='AddStudentBox'>\r\n <div className='AddStudentBoxInputBox'>\r\n <Button onClick={() => props.setisshown(false)} className=\"closeButton\"><CloseRoundedIcon/></Button>\r\n <div className='inputDiv'>\r\n <label>Mobilnummer</label>\r\n <Input value={phonenumber} onChange={(e) => setphonenumber(e.target.value)}></Input>\r\n </div>\r\n <div className='inputDiv'>\r\n <label>Kategori</label>\r\n <select value={selectedCategory} onChange={(e) => {console.log(e.target.value); setselectedCategory(e.target.value)}}>{renderOptions()}</select>\r\n </div>\r\n <div className='inputDiv'>\r\n <label>Udløbsdato</label>\r\n <label>{formatDate(selectedDate.getTime()/ 1000)}</label>\r\n <DatePicker value={String(selectedDate.getTime() / 1000)} onChange={handleDateChange}/>\r\n </div>\r\n <Button onClick={handleSubmit} className=\"finishButton\" variant={\"outlined\"}>TILFØJ</Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AddStudentBox;","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n useDeleteStudentMutation,\r\n useGetAdminStudentLoginInfoLazyQuery,\r\n useGetCategoriesQuery,\r\n useGetStudentsAdminQuery,\r\n useManageStudentMutation,\r\n} from \"../../../../graphql/generated/graphql\";\r\nimport MUIDataTable, { MUIDataTableColumnDef } from \"mui-datatables\";\r\nimport Loading from \"../../../../globalComponents/Loading\";\r\nimport EditRoundedIcon from \"@mui/icons-material/EditRounded\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport DeleteRoundedIcon from \"@mui/icons-material/DeleteRounded\";\r\nimport { Button } from \"@mui/material\";\r\nimport { MuiDataTableEditable } from \"./components/MuiDataTableEdit\";\r\nimport { CategorySelect } from \"./components/CategorySelect\";\r\nimport { DatePicker } from \"./components/DatePicker\";\r\nimport { useGetSchoolListQuery, useGetStudentInfoLazyQuery } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { SchoolSelect } from \"./components/SchoolSelect\";\r\nimport \"./AdminStudentView.scss\";\r\nimport AddStudentBox from \"./components/AddStudentBox\";\r\nimport AccessibilityNewRoundedIcon from '@mui/icons-material/AccessibilityNewRounded';\r\nimport { useLocation } from \"react-router\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\n\r\nexport type IAdminStudentViewProps = {};\r\n\r\nconst AdminStudentView: React.FC<IAdminStudentViewProps> = ({}) => {\r\n const { data, loading, refetch } = useGetStudentsAdminQuery();\r\n\r\n const [tableData, settableData] = useState<any[]>();\r\n\r\n const [manageStudent] = useManageStudentMutation();\r\n const [deleteStudent] = useDeleteStudentMutation();\r\n\r\n const [getStudentInfo] = useGetAdminStudentLoginInfoLazyQuery();\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n const [isNewStudentshown, setisNewStudentshown] = useState<boolean>(false);\r\n\r\n const location = useLocation();\r\n\r\n const { data: schoolData } = useGetSchoolListQuery();\r\n const [schoolList, setschoolList] = useState<any[]>();\r\n\r\n const onDelete = (id: string) => {\r\n console.log(tableData);\r\n const newTempData = tableData?.filter((item) => item.delete !== id);\r\n console.log(newTempData);\r\n\r\n settableData(newTempData);\r\n deleteStudent({ variables: { student_id: id } }).then(() => refetch());\r\n };\r\n\r\n const onStudentLogin = (id: string) => {\r\n setisLoading(true);\r\n const currentPath = window.location.href.split(\"/skole\")\r\n //FIRE OFF THE QUERY\r\n getStudentInfo({variables: {student_id: id}}).then((data) => {\r\n const phone = data.data?.getAdminStudentLoginInfo?.student_phone_number;\r\n const pin = data.data?.getAdminStudentLoginInfo?.student_pin;\r\n newWindow(currentPath[0] + `/login/${phone}/${pin}`);\r\n setisLoading(false);\r\n })\r\n //OPEN NEW WINDOW WITH THE PARAMETERS TO LOGIN\r\n \r\n }\r\n\r\n function newWindow(url) {\r\n const popupWindow = window.open(\r\n url,\r\n 'popUpWindow','height=750,width=750,left=100,top=100,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')\r\n }\r\n\r\n useEffect(() => {\r\n if (schoolData) {\r\n const tempArray: any[] = [];\r\n schoolData.getSchoolList?.forEach((school) => {\r\n if (school) {\r\n tempArray.push({\r\n label: school?.school_name,\r\n id: school?.school_id,\r\n zipcode: school?.zipcode,\r\n });\r\n }\r\n });\r\n setschoolList(tempArray);\r\n //WE SET THE SCHOOL LIST INSIDE HERE.\r\n //WE GET THE DATA ON THE SIDE LOAD, AS THIS QUERY IS HEAVY AND WE CANT WAIT FOR IT EVERYTIME\r\n }\r\n }, [schoolData]);\r\n\r\n const { data: categoryData } = useGetCategoriesQuery();\r\n const [categoryList, setcategoryList] = useState<any[]>();\r\n\r\n useEffect(() => {\r\n if (categoryData) {\r\n const tempArray: any[] = [];\r\n categoryData.getCategories?.forEach((category) => {\r\n tempArray.push({ label: category?.cat_name, id: category?.cat_id });\r\n });\r\n setcategoryList(tempArray);\r\n }\r\n }, [categoryData]);\r\n\r\n const columns: any[] = [\r\n {\r\n name: \"delete\",\r\n label: \"Slet\",\r\n options: {\r\n customBodyRender: (value) => {\r\n return (\r\n <Button onClick={() => onDelete(value)}>\r\n <DeleteRoundedIcon />\r\n </Button>\r\n );\r\n },\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n <Button disabled>\r\n <DeleteRoundedIcon />\r\n </Button>\r\n ),\r\n },\r\n },\r\n { name: \"jumpToStudent\", label:\"Elev Login\", options: {\r\n customBodyRender: (value) => {\r\n return (\r\n <Button onClick={() => onStudentLogin(value)}>\r\n <AccessibilityNewRoundedIcon />\r\n </Button>\r\n );\r\n },\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n <Button disabled>\r\n <AccessibilityNewRoundedIcon />\r\n </Button>\r\n ),\r\n },},\r\n { name: \"fname\", label: \"Navn\" },\r\n { name: \"lname\", label: \"Efternavn\" },\r\n { name: \"phonenumber\", label: \"Mobilnummer\" },\r\n { name: \"email\", label: \"E-mail\" },\r\n {\r\n name: \"school_id\",\r\n label: \"Skole\",\r\n options: {\r\n customBodyEditRender: (value, tableMeta, update, rowData) => (\r\n <SchoolSelect value={value} onChange={update} data={schoolData} />\r\n ),\r\n customBodyRender: (value) => {\r\n if (schoolList) {\r\n const school = schoolList.filter(\r\n (school) => school.id === value\r\n )[0];\r\n console.log(school);\r\n if (school) {\r\n return <span>{school.label}</span>;\r\n } else {\r\n return <span>{\"Ingen skole\"}</span>;\r\n }\r\n } else {\r\n return <span>Loading...</span>;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n name: \"category\",\r\n label: \"Kategori\",\r\n options: {\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n <CategorySelect value={value} onChange={update} data={categoryData} />\r\n ),\r\n customBodyRender: (value, tableMeta, update) => {\r\n if (categoryList) {\r\n console.log(value);\r\n\r\n const category = categoryList.filter(\r\n (category) => category.id === value\r\n )[0];\r\n\r\n if (category) {\r\n return <span>{category.label}</span>;\r\n } else {\r\n return <span>ingen kategori sat</span>;\r\n }\r\n } else {\r\n return <span>Loading...</span>;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n name: \"activationDate\",\r\n label: \"Start dato\",\r\n options: {\r\n customBodyRender: (value) => formatDate(value),\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n <span>{formatDate(value)}</span>\r\n ),\r\n },\r\n },\r\n {\r\n name: \"expiryDate\",\r\n label: \"Udløbsdato\",\r\n options: {\r\n customBodyRender: (value) => formatDate(value),\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n <div className=\"editDate\">\r\n <span>{formatDate(value)}</span>\r\n <DatePicker onChange={update} value={value} />\r\n </div>\r\n ),\r\n },\r\n },\r\n ];\r\n\r\n function padTo2Digits(num) {\r\n return num.toString().padStart(2, \"0\");\r\n }\r\n\r\n function formatDate(timeString) {\r\n const date = new Date(timeString * 1000);\r\n return [\r\n padTo2Digits(date.getDate()),\r\n padTo2Digits(date.getMonth() + 1),\r\n date.getFullYear(),\r\n ].join(\"/\");\r\n }\r\n\r\n const onRowSave = (value) => {\r\n const newTempData = tableData;\r\n const objIndex = tableData?.findIndex((obj) => obj.delete === value.delete);\r\n if (newTempData && objIndex) {\r\n newTempData[objIndex] = {\r\n fname: value.fname,\r\n lname: value.lname,\r\n phonenumber: value.phonenumber,\r\n email: value.email,\r\n school_id: value.school_id,\r\n category: value.category,\r\n activationDate: value.activationDate,\r\n accessCode: value.accessCode,\r\n expiryDate: value.expiryDate,\r\n delete: value.delete,\r\n };\r\n }\r\n settableData(newTempData);\r\n manageStudent({\r\n variables: {\r\n student: {\r\n student_id: value.delete,\r\n first_name: value.fname,\r\n last_name: value.lname,\r\n student_category: Number(value.category),\r\n student_email: value.email,\r\n student_phone_number: value.phonenumber,\r\n school_id: value.school_id,\r\n expiry_date: new Date(value.expiryDate * 1000).toISOString(),\r\n },\r\n },\r\n }).then((data) => {\r\n if(typeof data.data?.manageStudent === \"number\"){\r\n refetch()\r\n }else{\r\n alert(\"Der gik noget galt, kontakt udviklere\")\r\n }\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (data) {\r\n const tempArray: any[] = [];\r\n data.getStudentsAdmin?.forEach((student) => {\r\n tempArray.push({\r\n jumpToStudent: student?.student_id,\r\n fname: student?.first_name ? student?.first_name : \"\",\r\n lname: student?.last_name ? student?.last_name : \"\",\r\n phonenumber: student?.student_phone_number\r\n ? student?.student_phone_number\r\n : \"\",\r\n email: student?.student_email ? student.student_email : \"\",\r\n school: student?.school_name ? student.school_name : \"\",\r\n school_id: student?.school_id ? student.school_id : \"\",\r\n category: student?.student_category ? student.student_category : \"\",\r\n activationDate: student?.create_date\r\n ? new Date(student?.create_date).getTime() / 1000\r\n : \"\",\r\n expiryDate: student?.expiry_date\r\n ? new Date(student?.expiry_date).getTime() / 1000\r\n : \"ikke aktiveret\",\r\n delete: student?.student_id,\r\n });\r\n });\r\n settableData(tempArray);\r\n }\r\n }, [data]);\r\n\r\n if (!tableData) {\r\n return <Loading />;\r\n }\r\n\r\n return (\r\n <div className=\"AdminStudentView\">\r\n {isLoading ? <IntermediaryLoading/> : null}\r\n <div className=\"addButton\" onClick={() => setisNewStudentshown(true)}>\r\n <span>Tilføj ny elev</span>\r\n <Button>\r\n <AddIcon />\r\n </Button>\r\n </div>\r\n {isNewStudentshown && categoryList ? (\r\n <AddStudentBox\r\n refetch={refetch}\r\n setisshown={setisNewStudentshown}\r\n categories={categoryList}\r\n />\r\n ) : null}\r\n <MuiDataTableEditable\r\n title={\"Elev liste\"}\r\n columns={columns}\r\n data={tableData}\r\n options={{ rowsPerPage: 15 }}\r\n onRowSave={onRowSave}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport { AdminStudentView };\r\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\r\nimport QRCode from \"qrcode.react\";\r\nimport { AppStateContext } from \"../../../../apollo/TeoriTeacherProvider\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport { LessonSlide, MediaType, VideoType } from \"../../../model\";\r\nimport { LessonPageImage } from \"./LessonPageImage\";\r\nimport { LessonPageSlide } from \"./LessonPageSlide\";\r\nimport { LessonPageVideo } from \"./LessonPageVideo\";\r\nimport \"./style/LessonPageBarPopup.scss\";\r\n\r\nexport type ILessonPageBarActualPopupProps = {};\r\n\r\nconst LessonPageBarActualPopup: React.FC<\r\n ILessonPageBarActualPopupProps\r\n> = ({}) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [data, setdata] = useState<LessonSlide>();\r\n const currentPath = window.location.href.split(\"/notes\");\r\n const { popupState } = useContext(AppStateContext);\r\n\r\n const containerToGetHeight = useRef<HTMLDivElement>(null);\r\n const refToMinimizeQR = useRef<HTMLDivElement>(null);\r\n const [QRSize, setQRSize] = useState(128);\r\n\r\n useEffect(() => {\r\n if (data?.type === MediaType.QRCODE) {\r\n setQRSize(\r\n containerToGetHeight.current?.offsetHeight! -\r\n refToMinimizeQR.current?.offsetHeight!\r\n );\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"message\", (event) => {\r\n console.log(event.data);\r\n\r\n if (event.data.current) {\r\n if (event.data.current === \"WAITING\") {\r\n setdata(undefined);\r\n }\r\n console.log(event.data.current);\r\n setdata(event.data.current);\r\n }\r\n });\r\n }, []);\r\n\r\n if (data) {\r\n const renderSlide = () => {\r\n if (\r\n data.type === MediaType.AZUREVIDEO ||\r\n data.type === MediaType.STREAM ||\r\n data.type === MediaType.YOUTUBE\r\n ) {\r\n return (\r\n <div className=\"slideVideo\">\r\n <LessonPageVideo\r\n isLesson\r\n key={data.media}\r\n video={data.media}\r\n videoType={VideoType.STREAM}\r\n />\r\n </div>\r\n );\r\n } else if (data.type === MediaType.WEB_LINK) {\r\n return <iframe src={data.media} className=\"lessonIframe\"></iframe>;\r\n } else if (data.type === MediaType.QRCODE) {\r\n return (\r\n <>\r\n <div className=\"QRCode\" ref={containerToGetHeight}>\r\n <div\r\n className=\"BETA\"\r\n style={{ width: QRSize + \"px\" }}\r\n ref={refToMinimizeQR}\r\n >\r\n {data.media}\r\n </div>\r\n <div className=\"actualQR\">\r\n <QRCode\r\n value={data.media}\r\n size={QRSize}\r\n ref={containerToGetHeight}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n } else {\r\n return (\r\n <div className=\"slideIMG\">\r\n <LessonPageImage img={data.media} />\r\n </div>\r\n );\r\n }\r\n };\r\n return (\r\n <div className=\"ActualPopup\">\r\n <div className=\"slide\">\r\n {data.content_id === \"0\" ? (\r\n <div className=\"overlay\">\r\n <div className=\"left\">\r\n {languageString.teacherQuizPage.quizMain.left}\r\n </div>\r\n <div className=\"middle\">{data.notes}</div>\r\n <div className=\"right\">\r\n {languageString.teacherQuizPage.quizMain.right}\r\n </div>\r\n </div>\r\n ) : null}\r\n {renderSlide()}\r\n </div>\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <div className=\"ActualPopup\">\r\n <div className=\"slide\">\r\n <div className=\"slideIMG\">\r\n <LessonPageImage\r\n img={\r\n \"https://teoricontentstorage.blob.core.windows.net/admincontainer/teori-2skaerm.jpg\"\r\n }\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n};\r\n\r\nexport { LessonPageBarActualPopup };\r\n","import { Button } from '@material-ui/core';\r\nimport React, { useState } from 'react';\r\nimport { useManageSchoolMutation } from '../../../../graphql/generated/graphql';\r\nimport \"./AddSchoolBox.scss\";\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport IntermediaryLoading from '../../../../globalComponents/IntermediaryLoading';\r\n\r\nexport type IAddSchoolBoxProps = {\r\n setcreatingNewTeacher: React.Dispatch<React.SetStateAction<boolean>>\r\n}\r\n\r\ninterface newSchool{\r\n school_name?: string;\r\n email_id?: string;\r\n language_choice?: number;\r\n vat_number?: number;\r\n contact_name?: string;\r\n optional_note?: string;\r\n password?: string;\r\n zipcode?: number;\r\n city?: string\r\n}\r\n\r\nconst AddSchoolBox: React.FC<IAddSchoolBoxProps> = (props: IAddSchoolBoxProps) => {\r\n\r\n const [manageSchool] = useManageSchoolMutation();\r\n\r\n const [schoolValues, setschoolValues] = useState<newSchool>();\r\n const [isIntermediaryLoading, setisIntermediaryLoading] = useState(false);\r\n\r\n const handleClose = () => {\r\n props.setcreatingNewTeacher(false);\r\n }\r\n\r\n const handleSubmit = () => {\r\n setisIntermediaryLoading(true);\r\n if(schoolValues){\r\n schoolValues.language_choice = 1;\r\n manageSchool({variables: {school: schoolValues}}).then((data) => {\r\n if(data.data)\r\n handleClose();\r\n })\r\n }\r\n }\r\n\r\n const handleChange_school_name = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, school_name: e.target.value})\r\n }\r\n }\r\n const handleChange_email_id = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, email_id: e.target.value})\r\n }\r\n }\r\n const handleChange_language_choice = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, language_choice: e.target.value})\r\n }\r\n }\r\n const handleChange_vat_number = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, vat_number: Number(e.target.value)})\r\n }\r\n }\r\n const handleChange_contact_name = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, contact_name: e.target.value})\r\n }\r\n }\r\n const handleChange_optional_note = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, optional_note: e.target.value})\r\n }\r\n }\r\n const handleChange_password = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, password: e.target.value})\r\n }\r\n }\r\n const handleChange_zipcode = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, zipcode: Number(e.target.value)})\r\n }\r\n }\r\n const handleChange_city = (e) => {\r\n if(e){\r\n setschoolValues({...schoolValues, city: e.target.value})\r\n }\r\n }\r\n\r\n\r\n\r\n return (\r\n <div className='BGBOX'>\r\n {isIntermediaryLoading ? <IntermediaryLoading/> : null}\r\n <div className=\"AddSchoolBox\">\r\n <div className='header'><h3>Tilføj en skole</h3><Button onClick={handleClose}><CloseIcon/></Button></div> \r\n <div className='form'>\r\n <div>\r\n <label>Skole-navn</label>\r\n <input value={schoolValues?.school_name} onChange={handleChange_school_name}></input>\r\n </div>\r\n <div>\r\n <label>Email</label>\r\n <input value={schoolValues?.email_id} onChange={handleChange_email_id}></input>\r\n </div>\r\n <div>\r\n <label>Kodeord</label>\r\n <input value={schoolValues?.password} onChange={handleChange_password}></input>\r\n </div>\r\n <div>\r\n <label>VAT-nummber</label>\r\n <input value={schoolValues?.vat_number} type={\"number\"} onChange={handleChange_vat_number}></input>\r\n </div>{/* <input value={schoolValues?.language_choice} onChange={handleChange_language_choice}></input> */}\r\n <div>\r\n <label>ZIP</label>\r\n <input value={schoolValues?.zipcode} type={\"number\"} onChange={handleChange_zipcode}></input>\r\n </div>\r\n <div>\r\n <label>By</label>\r\n <input value={schoolValues?.city} onChange={handleChange_city}></input>\r\n </div>\r\n <div>\r\n <label>Kontakt</label>\r\n <input value={schoolValues?.contact_name} onChange={handleChange_contact_name}></input>\r\n </div>\r\n <div>\r\n <label>Note</label>\r\n <input value={schoolValues?.optional_note} onChange={handleChange_optional_note}></input>\r\n </div>\r\n <Button onClick={handleSubmit}>TILFØJ</Button>\r\n </div> \r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport { AddSchoolBox };","import React, { useState } from 'react';\r\nimport { useManageSubuserMutation } from '../../../../graphql/generated/graphql';\r\n\r\nexport type ISubuserCellManageProps = {\r\n \r\n}\r\n\r\nconst SubuserCellManage: React.FC<ISubuserCellManageProps> = ({ }) => {\r\n\r\n \r\n const [manageSub] = useManageSubuserMutation();\r\n //THIS IS NOT A DONE COMPONENT\r\n //TODO FIX THIS AT A LATER DATE\r\n const [email, setemail] = useState<string>();\r\n const [password, setpassword] = useState<string>();\r\n const [name, setname] = useState<string>();\r\n const [departmentName, setdepartmentName] = useState<string>();\r\n const [departmentZIP, setdepartmentZIP] = useState<string>();\r\n const [isDepartment, setisDepartment] = useState(false);\r\n const [skip, setskip] = useState(true);\r\n\r\n return (\r\n <div className='SubuserCellManageProps'>\r\n <input></input>\r\n <input></input><input></input>\r\n </div>\r\n );\r\n}\r\n\r\nexport { SubuserCellManage };","import { Button } from '@material-ui/core';\r\nimport MUIDataTable from 'mui-datatables';\r\nimport React, { useEffect, useState } from 'react';\r\nimport Loading from '../../../../globalComponents/Loading';\r\nimport { Subuser, useDeleteSubuserMutation, useGetSchoolSubusersAdminQuery, useManageSubuserMutation } from '../../../../graphql/generated/graphql';\r\nimport DeleteRoundedIcon from \"@mui/icons-material/DeleteRounded\";\r\nimport DoneIcon from \"@mui/icons-material/Done\";\r\nimport CloseIcon from '@mui/icons-material/Close';\r\nimport { SubuserCellManage } from './SubuserCellManage';\r\n\r\nexport type ISubuserCellProps = {\r\n school_id: number;\r\n}\r\n\r\ninterface subusers{\r\n subuser_id: number;\r\n teacher_name: string;\r\n email_id: string;\r\n school_id: number;\r\n is_department: boolean;\r\n department_name: string;\r\n department_zipcode: string;\r\n skip_bill_check: boolean;\r\n}\r\n\r\nconst SubuserCell: React.FC<ISubuserCellProps> = (props: ISubuserCellProps) => {\r\n\r\n const {data: subuserData, loading} = useGetSchoolSubusersAdminQuery({variables: {schoolId: props.school_id}})\r\n const [deleteSubuser] = useDeleteSubuserMutation();\r\n\r\n const [manageDepartment] = useManageSubuserMutation();\r\n\r\n const [state, setstate] = useState<Subuser[]>();\r\n\r\n const [isManageOpen, setisManageOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if(subuserData?.getSchoolSubusersAdmin){\r\n setstate(subuserData.getSchoolSubusersAdmin);\r\n }\r\n }, [subuserData]);\r\n\r\n const onDelete = (id: string) => {\r\n const newTempData = state?.filter((item) => item.subuser_id !== id);\r\n \r\n setstate(newTempData);\r\n deleteSubuser({variables:{subuserId: id}})\r\n };\r\n \r\n\r\n const renderSubusers = () => {\r\n return state?.map((user) => {\r\n return (<div>\r\n <div>{user.email_id}</div>\r\n </div>)\r\n })\r\n }\r\n\r\n const columns: any[] = [\r\n {\r\n name: \"subuser_id\",\r\n label: \"Slet\",\r\n options: {\r\n customBodyRender: (value) => {\r\n return (\r\n <Button onClick={() => onDelete(value)}>\r\n {<DeleteRoundedIcon />}\r\n </Button>\r\n );\r\n },\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n <Button disabled>\r\n <DeleteRoundedIcon />\r\n </Button>\r\n ),\r\n },\r\n },\r\n { name: \"email_id\", label: \"Email\" },\r\n { name: \"teacher_name\", label: \"Lærer-navn\" },\r\n { name: \"department_name\", label: \"Afdelings-navn\" },\r\n { name: \"department_zipcode\", label: \"Afdelings-zip\" },\r\n { name: \"is_department\", label: \"Afdeling\", options: { customBodyRender: (value) => {\r\n return (\r\n <>{value ? <DoneIcon/> : <CloseIcon/>}</>\r\n );\r\n },} },\r\n { name: \"skip_bill_check\", label: \"Spring-over\", options: { customBodyRender: (value) => {\r\n return (\r\n <>{value ? <DoneIcon/> : <CloseIcon/>}</>\r\n );\r\n },} },\r\n \r\n ]\r\n\r\n const renderAddNew = () => {\r\n return <Button onClick={() => setisManageOpen(true)}>Tilføj ny afdeling</Button>\r\n }\r\n\r\n\r\n return (\r\n <div>\r\n {state ? \r\n <>\r\n {isManageOpen ? <SubuserCellManage/> : null}\r\n {/*renderAddNew()*/}\r\n <MUIDataTable\r\n title=\"\"\r\n data={state}\r\n columns={columns} />\r\n </>\r\n : <Loading/>}\r\n </div>\r\n );\r\n}\r\n\r\nexport { SubuserCell };","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Category,\r\n useCreateSchoolCategoryMutation,\r\n useGetAllCategoriesQuery,\r\n} from \"../../../../graphql/generated/graphql\";\r\nimport DoneIcon from \"@mui/icons-material/Done\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\nimport Loading from \"../../../../globalComponents/Loading\";\r\n\r\nexport type ICategoryCellManageProps = {\r\n school_id: number;\r\n categories: Category[];\r\n close: () => void;\r\n refetch: () => void;\r\n};\r\n\r\nconst CategoryCellManage: React.FC<ICategoryCellManageProps> = (\r\n props: ICategoryCellManageProps\r\n) => {\r\n const [selectedCategory, setselectedCategory] = useState<number>();\r\n\r\n const { data: catData, loading } = useGetAllCategoriesQuery();\r\n\r\n const [availableCategories, setavailableCategories] = useState<Category[]>();\r\n\r\n const [createSchoolCategory] = useCreateSchoolCategoryMutation();\r\n\r\n const [isLoading, setisLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n if (catData?.getAllCategories) {\r\n const tempArray: Category[] = [];\r\n const filtered = catData.getAllCategories.filter(\r\n (x) => !props.categories.filter((y) => y.cat_id === x?.cat_id).length\r\n );\r\n console.log(filtered);\r\n\r\n filtered.forEach((element) => {\r\n if (element) {\r\n tempArray.push(element);\r\n }\r\n });\r\n setavailableCategories(tempArray);\r\n }\r\n }, [props.categories, catData]);\r\n\r\n const handleSubmit = () => {\r\n if (selectedCategory) {\r\n setisLoading(true)\r\n createSchoolCategory({\r\n variables: { schoolId: props.school_id, categoryId: selectedCategory },\r\n }).then((data) => {\r\n props.refetch();\r\n props.close();\r\n });\r\n }\r\n };\r\n const handleAbort = () => {\r\n props.close();\r\n };\r\n\r\n const renderCategories = () => {\r\n return availableCategories?.map((cat) => {\r\n return (\r\n <div\r\n className={\r\n Number(cat.cat_id) === selectedCategory ? \"active\" : undefined\r\n }\r\n onClick={() => setselectedCategory(Number(cat!.cat_id!))}\r\n >\r\n {cat.cat_name}\r\n </div>\r\n );\r\n });\r\n };\r\n return (\r\n <div className=\"CategoryCellManage\">\r\n {isLoading ? <IntermediaryLoading/> : null}\r\n <div className=\"CategoryCellManageBox\">\r\n <div className=\"categories\">\r\n\r\n {availableCategories ? availableCategories?.map((cat) => {\r\n return (\r\n <div\r\n className={\r\n Number(cat.cat_id) === selectedCategory ? \"active\" : undefined\r\n }\r\n onClick={() => setselectedCategory(Number(cat!.cat_id!))}\r\n >\r\n {cat.cat_name}\r\n </div>\r\n );\r\n }) : <Loading/>}\r\n </div>\r\n <div className=\"confirm\">\r\n <Button onClick={handleSubmit}>\r\n <DoneIcon />\r\n </Button>\r\n <Button onClick={handleAbort}>\r\n <CloseIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { CategoryCellManage };\r\n","import { Button, createMuiTheme } from '@material-ui/core';\r\nimport MUIDataTable, { MUIDataTableOptions } from 'mui-datatables';\r\nimport React, { useEffect, useState } from 'react';\r\nimport Loading from '../../../../globalComponents/Loading';\r\nimport { Category, useGetSchoolCategoryQuery } from '../../../../graphql/generated/graphql';\r\nimport { CategoryCellManage } from './CategoryCellManage';\r\n\r\nexport type ICategoryCellProps = {\r\n school_id: number\r\n}\r\n\r\nconst CategoryCell: React.FC<ICategoryCellProps> = (props: ICategoryCellProps) => {\r\n\r\n const {data: catData, loading, refetch: refetchCat} = useGetSchoolCategoryQuery({variables:{schoolId: props.school_id}})\r\n\r\n const [state, setstate] = useState<Category[]>();\r\n\r\n const [isNewCategoryOpen, setisNewCategoryOpen] = useState(false);\r\n\r\n const [isError, setisError] = useState(false);\r\n\r\n const refetch = () => {\r\n refetchCat();\r\n }\r\n\r\n useEffect(() => {\r\n if(catData?.getSchoolCategory === null){\r\n setisError(true);\r\n }\r\n if(catData?.getSchoolCategory){\r\n const tempArray: Category[] = [];\r\n catData.getSchoolCategory.forEach((cat) => {\r\n if(cat){\r\n tempArray.push(cat);\r\n }\r\n })\r\n setstate(tempArray);\r\n }\r\n }, [catData]);\r\n\r\n const columns: any[] = [\r\n { name: \"cat_id\", label: \"id\" },\r\n { name: \"cat_name\", label: \"Kategori\" },\r\n ]\r\n\r\n const options: MUIDataTableOptions = {\r\n customToolbar: () => <div><Button onClick={() => setisNewCategoryOpen(true)}>Tilføj ny kategori</Button></div>,\r\n download: false,\r\n print: false,\r\n filter: false,\r\n sort: false,\r\n search: false,\r\n viewColumns: false,\r\n selectableRows: \"none\"\r\n }\r\n\r\n\r\n\r\n return (\r\n <div className='CategoryCell'>\r\n {isNewCategoryOpen ? <CategoryCellManage school_id={props.school_id} categories={state!} close={() => setisNewCategoryOpen(false)} refetch={refetch}/> : false}\r\n { isError ? <Button onClick={() => {refetch(); setisError(false);}}>prøv igen</Button> : state ? \r\n <MUIDataTable title=\"\" columns={columns} data={state} options={options} />\r\n :\r\n <Loading/> \r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport { CategoryCell };","import { Button, Checkbox, Switch, TableCell } from \"@material-ui/core\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport {\r\n useGetAllSchoolsQuery,\r\n useManageSchoolMutation,\r\n useSetSchoolStatusMutation,\r\n} from \"../../../../graphql/generated/graphql\";\r\nimport { CategorySelect } from \"../adminStudentView/components/CategorySelect\";\r\nimport { SchoolSelect } from \"../adminStudentView/components/SchoolSelect\";\r\nimport EditRoundedIcon from \"@mui/icons-material/EditRounded\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport DeleteRoundedIcon from \"@mui/icons-material/DeleteRounded\";\r\nimport DoneIcon from \"@mui/icons-material/Done\";\r\nimport Loading from \"../../../../globalComponents/Loading\";\r\nimport { MuiDataTableEditable } from \"../adminStudentView/components/MuiDataTableEdit\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\nimport { AddSchoolBox } from \"./AddSchoolBox\";\r\nimport \"./AdminSchoolView.scss\";\r\nimport { TableRow } from \"@mui/material\";\r\nimport { SubuserCell } from \"./SubuserCell\";\r\nimport { CategoryCell } from \"./CategoryCell\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\n\r\nexport type IAdminSchoolViewProps = {};\r\n\r\nconst AdminSchoolView: React.FC<IAdminSchoolViewProps> = ({}) => {\r\n const [isNewShown, setisNewShown] = useState(true);\r\n\r\n const {\r\n data: schoolData,\r\n loading: schoolsLoading,\r\n refetch,\r\n } = useGetAllSchoolsQuery({ variables: { is_active: isNewShown ? 1 : 0 } });\r\n\r\n const [manageSchool] = useManageSchoolMutation();\r\n const [manageSchoolStatus] = useSetSchoolStatusMutation();\r\n\r\n const [intermediaryLoading, setintermediaryLoading] = useState(false);\r\n const [creatingNewTeacher, setcreatingNewTeacher] = useState(false);\r\n\r\n const [tableData, settableData] = useState<any[]>();\r\n\r\n const handleCreateNewTeacher = () => {};\r\n\r\n useEffect(() => {\r\n if (schoolData) {\r\n const tempArray: any[] = [];\r\n schoolData.getAllSchools!.forEach((school) => {\r\n tempArray.push({\r\n school_id: school?.school_id,\r\n school_name: school?.school_name,\r\n email_id: school?.email_id,\r\n language_choice: school?.language_choice,\r\n vat_number: school?.vat_number,\r\n contact_name: school?.contact_name,\r\n password: school?.password,\r\n zipcode: school?.zipcode,\r\n city: school?.city,\r\n optional_note: school?.optional_note,\r\n delete: school?.school_id,\r\n skip_bill_check: school?.skip_bill_check,\r\n });\r\n });\r\n settableData(tempArray);\r\n setintermediaryLoading(false);\r\n }\r\n }, [schoolData]);\r\n\r\n const handleStatus = () => {\r\n setintermediaryLoading(true);\r\n setisNewShown(!isNewShown);\r\n };\r\n\r\n const onRowClick = (value) => {\r\n console.log(value);\r\n };\r\n\r\n const onDelete = (id: string) => {\r\n const newTempData = tableData?.filter((item) => item.delete !== id);\r\n\r\n settableData(newTempData);\r\n manageSchoolStatus({\r\n variables: { school_id: Number(id), school_status: isNewShown ? 0 : 1 },\r\n }).then(() => refetch());\r\n };\r\n\r\n const onRowSave = (value) => {\r\n const newTempData = tableData;\r\n const objIndex = tableData?.findIndex((obj) => obj.delete === value.delete);\r\n if (newTempData && objIndex) {\r\n newTempData[objIndex] = {\r\n school_id: value.school_id,\r\n school_name: value.school_name,\r\n email_id: value.email_id,\r\n language_choice: value.language_choice,\r\n vat_number: value.vat_number,\r\n contact_name: value.contact_name,\r\n optional_note: value.optional_note,\r\n password: value.password,\r\n zipcode: value.zipcode,\r\n city: value.city,\r\n };\r\n }\r\n settableData(newTempData);\r\n console.log(value);\r\n\r\n manageSchool({\r\n variables: {\r\n school: {\r\n school_id: value.delete ? Number(value.delete) : 0,\r\n school_name: value.school_name ? value.school_name : \" \",\r\n email_id: value.email_id,\r\n language_choice: value.language_choice,\r\n vat_number: value.vat_number ? Number(value.vat_number) : 0,\r\n contact_name: value.contact_name ? value.contact_name : \" \",\r\n optional_note: value.optional_note ? value.optional_note : \" \",\r\n password: value.password,\r\n zipcode: value.zipcode ? Number(value.zipcode) : 0,\r\n city: value.city ? value.city : \" \",\r\n skip_bill_check: value.skip_bill_check ? value.skip_bill_check : false,\r\n },\r\n },\r\n }).then((data) => {\r\n if (typeof data.data?.manageSchool === \"number\") {\r\n refetch();\r\n } else {\r\n alert(\"Der gik noget galt, kontakt udviklere\");\r\n }\r\n });\r\n };\r\n\r\n const columns: any[] = [\r\n {\r\n name: \"delete\",\r\n label: isNewShown ? \"Slet\" : \"Aktiver\",\r\n options: {\r\n customBodyRender: (value) => {\r\n return (\r\n <Button onClick={() => onDelete(value)}>\r\n {isNewShown ? <DeleteRoundedIcon /> : <DoneIcon />}\r\n </Button>\r\n );\r\n },\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n <Button disabled>\r\n <DeleteRoundedIcon />\r\n </Button>\r\n ),\r\n },\r\n },\r\n { name: \"school_name\", label: \"Skole-navn\" },\r\n { name: \"email_id\", label: \"Email\" },\r\n { name: \"vat_number\", label: \"VAT-nummer\" },\r\n { name: \"contact_name\", label: \"Kontakt\" },\r\n { name: \"password\", label: \"Kodeord\" },\r\n { name: \"zipcode\", label: \"ZIP\" },\r\n { name: \"city\", label: \"By\" },\r\n { name: \"optional_note\", label: \"Note\" },\r\n {\r\n name: \"skip_bill_check\",\r\n label: \"Spring-over\",\r\n options: {\r\n customBodyRender: (value) => {\r\n return <>{value ? <DoneIcon /> : <CloseIcon />}</>;\r\n },\r\n customBodyEditRender: (value, tableMeta, update) => (\r\n \r\n <Checkbox checked={value} onChange={e => update(Boolean(e.target.value))}/>\r\n ),\r\n },\r\n },\r\n ];\r\n\r\n if (!tableData) {\r\n return <Loading />;\r\n }\r\n return (\r\n <div className=\"AdminSchoolView\">\r\n {intermediaryLoading || schoolsLoading ? <IntermediaryLoading /> : null}\r\n <div className=\"topButtons\">\r\n <Button onClick={() => setisNewShown(!isNewShown)}>\r\n {isNewShown ? \"Vis slettede\" : \"Vis aktive\"}\r\n </Button>\r\n <Button onClick={() => setcreatingNewTeacher(true)}>\r\n Tilføj ny skole\r\n </Button>\r\n </div>\r\n <div className=\"tableBox\">\r\n <MuiDataTableEditable\r\n title={\"Skole liste\"}\r\n columns={columns}\r\n data={tableData}\r\n options={{\r\n rowsPerPage: 15,\r\n responsive: \"standard\",\r\n selectableRows: \"none\",\r\n expandableRows: true,\r\n expandableRowsHeader: false,\r\n isRowExpandable: () => true,\r\n renderExpandableRow: (rowData, rowMeta) => {\r\n console.log(rowData[1].props.tableMeta.rowData);\r\n\r\n const colSpan = rowData.length + 1;\r\n return (\r\n <TableRow>\r\n <TableCell>\r\n <CategoryCell\r\n school_id={Number(rowData[1].props.tableMeta.rowData[1])}\r\n />\r\n </TableCell>\r\n <TableCell colSpan={colSpan}>\r\n <SubuserCell\r\n school_id={Number(rowData[1].props.tableMeta.rowData[1])}\r\n />\r\n </TableCell>\r\n </TableRow>\r\n );\r\n },\r\n onRowExpansionChange: (curExpanded, allExpanded, rowsExpanded) =>\r\n console.log(curExpanded, allExpanded, rowsExpanded),\r\n }}\r\n onRowSave={onRowSave}\r\n />\r\n </div>\r\n {creatingNewTeacher ? (\r\n <AddSchoolBox setcreatingNewTeacher={setcreatingNewTeacher} />\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { AdminSchoolView };\r\n","import { Button } from '@mui/material';\r\nimport React, { useContext, useEffect, useState } from 'react';\r\nimport FlipToFrontIcon from '@mui/icons-material/FlipToFront';\r\nimport { LessonSlide } from '../../../model';\r\nimport { AppStateContext } from '../../../../apollo/TeoriTeacherProvider';\r\nimport { PopupSlideContext } from '../../../../apollo/PopupSlideProvider';\r\n\r\nexport type ILessonPageBarPopupProps = {\r\n}\r\n\r\nconst LessonPageBarPopup: React.FC<ILessonPageBarPopupProps> = (props: ILessonPageBarPopupProps) => {\r\n\r\n const { closePopup, openPopup, popupState, popupSlide } = useContext(PopupSlideContext);\r\n\r\n const [child, setchild] = useState<Window | null>();\r\n const currentPath = window.location.href.split(\"/skole\");\r\n\r\n useEffect(() => {\r\n console.log(popupState);\r\n \r\n if(popupState === true){\r\n console.log(\"i attempt to open the popup\");\r\n \r\n const tempchild = window.open(currentPath[0] + \"/skole/notes\",'popUpWindow','height=750,width=750,left=100,top=100,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes');\r\n setchild(tempchild);\r\n }\r\n }, [popupState])\r\n\r\n useEffect(() => {\r\n console.log(popupSlide);\r\n \r\n if(child){ \r\n child.postMessage({current: popupSlide})\r\n }\r\n }, [popupSlide]);\r\n\r\n useEffect(() => {\r\n if(child){\r\n console.log(\"i try to push to popup\");\r\n var timer = setInterval(function() { \r\n if(child.closed) {\r\n clearInterval(timer);\r\n closePopup();\r\n }\r\n }, 1000);\r\n console.log(popupSlide);\r\n \r\n setTimeout(() => child.postMessage({current: popupSlide}),2200)\r\n //child.postMessage(props.currentText)\r\n }\r\n }, [child]);\r\n\r\n // const sendSomething = () => {\r\n // if(child){\r\n // child.postMessage(props.currentText)\r\n // }\r\n // }\r\n\r\n \r\n\r\n return (<div className='LessonPageBarPopUp'>\r\n </div>)\r\n}\r\n\r\nexport { LessonPageBarPopup };","import { Skeleton } from \"@mui/material\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { Quiz_Slide } from \"../../../../graphql/generated/graphql\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport VideocamIcon from '@mui/icons-material/Videocam';\r\n\r\nexport type IAdminSlideProps = {\r\n slide: Quiz_Slide;\r\n};\r\n\r\nconst AdminSlide: React.FC<IAdminSlideProps> = (props: IAdminSlideProps) => {\r\n const isVideo = props.slide.media_type_id === \"1\" ? true : false;\r\n const history = useHistory();\r\n\r\n const slideAddress = props.slide.media_location?.split(\"/\")[3];\r\n const [thumbnail, setthumbnail] = useState<string>();\r\n\r\n\r\n const handleSlideClick = () => {\r\n history.push(\"/TOPSECRET\", { isEdit: true, ID: props.slide.quiz_id, focusedSlide: Number(props.slide.quiz_slide_id) });\r\n }\r\n\r\n useEffect(() => {\r\n if (isVideo) {\r\n fetch(\r\n `https://vimeo.com/api/oembed.json?url=https://vimeo.com/${slideAddress}`\r\n )\r\n .then((data) => data.json())\r\n .then((result) => {\r\n setthumbnail(result.thumbnail_url);\r\n });\r\n }\r\n }, []);\r\n\r\n if (isVideo) {\r\n return (\r\n <div key={props.slide?.quiz_slide_id} className=\"adminSlide\" onClick={handleSlideClick}>\r\n <div className=\"vid\"><VideocamIcon/></div>\r\n <div className=\"tags\">\r\n <div className=\"ID\">Slide ID: {props.slide.quiz_slide_id}</div>\r\n {props.slide.tags\r\n ? props.slide.tags.map((tag) => {\r\n return <div className=\"tag\">{tag?.tag_name}</div>;\r\n })\r\n : null}\r\n </div>\r\n {thumbnail ? (\r\n <img src={thumbnail}></img>\r\n ) : (\r\n <Skeleton className=\"thumbnailLoad\" />\r\n )}\r\n <div className=\"statements\">\r\n <div className=\"statement\">{props.slide.intro_sound_text}</div>\r\n {props.slide.slide_statements\r\n ? props.slide.slide_statements.map((statement, index) => {\r\n return (\r\n <div className=\"statement\" key={index}>\r\n {index + 1 + \". \" + statement?.sound_text}\r\n </div>\r\n );\r\n })\r\n : null}\r\n </div>\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <div key={props.slide?.quiz_slide_id} className=\"adminSlide\" onClick={handleSlideClick}>\r\n <div className=\"tags\">\r\n <div className=\"ID\">Slide ID: {props.slide.quiz_slide_id}</div>\r\n {props.slide.tags\r\n ? props.slide.tags.map((tag) => {\r\n return <div className=\"tag\">{tag?.tag_name}</div>;\r\n })\r\n : null}\r\n </div>\r\n <img src={props.slide!.media_location!}></img>\r\n <div className=\"statements\">\r\n <div className=\"statement\">{props.slide.intro_sound_text}</div>\r\n {props.slide.slide_statements\r\n ? props.slide.slide_statements.map((statement, index) => {\r\n return (\r\n <div className=\"statement\" key={index}>\r\n {index + 1 + \". \" + statement?.sound_text}\r\n </div>\r\n );\r\n })\r\n : null}\r\n </div>\r\n </div>\r\n );\r\n }\r\n};\r\n\r\nexport { AdminSlide };\r\n","import { Button, Input, MenuItem, Select, TextField } from \"@material-ui/core\";\r\nimport { CircularProgress } from \"@mui/material\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { Quiz_Slide, useGetAllSlidesQuery } from \"../../../../graphql/generated/graphql\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport { AdminSlide } from \"./AdminSlide\";\r\nimport \"./AdminSlideSearch.scss\"\r\n\r\nexport type IAdminSlideSearchProps = {};\r\n\r\ninterface filterAttributes {\r\n language: number;\r\n slideType: number;\r\n}\r\n\r\nconst AdminSlideSearch: React.FC<IAdminSlideSearchProps> = ({}) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [includeSlides, setincludeSlides] = useState(\"1\");\r\n const [languageChosen, setlanguageChosen] = useState(\"1\");\r\n\r\n const [filteredSlides, setfilteredSlides] = useState<any[]>();\r\n const [currentSearch, setcurrentSearch] = useState<string>();\r\n\r\n const [shownSlides, setshownSlides] = useState(30);\r\n\r\n const { data: slideData, loading: slideDataLoading } = useGetAllSlidesQuery({\r\n variables: {\r\n included_slides: Number(includeSlides),\r\n language_chosen: Number(languageChosen),\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n if (slideData?.getAllSlides) {\r\n setfilteredSlides(slideData.getAllSlides);\r\n setshownSlides(30);\r\n }\r\n }, [slideData]);\r\n\r\n function findSlidesWithCommonString(searchString: string, slides: any[]) {\r\n const result: any[] = [];\r\n \r\n for (const slide of slides) {\r\n let score = 0;\r\n \r\n for (const prop in slide) {\r\n if (typeof slide[prop] === 'string' && slide[prop].toLowerCase().includes(searchString.toLowerCase())) {\r\n score++;\r\n } else if (Array.isArray(slide[prop])) {\r\n for (const item of slide[prop]) {\r\n if (typeof item === 'object' && item !== null) {\r\n for (const itemProp in item) {\r\n if (\r\n typeof item[itemProp] === 'string' &&\r\n item[itemProp].toLowerCase().includes(searchString.toLowerCase())\r\n ) {\r\n score++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n if (score > 0) {\r\n result.push({ slide, score });\r\n }\r\n }\r\n \r\n result.sort((a, b) => b.score - a.score);\r\n return result.map(entry => entry.slide);\r\n }\r\n\r\n useEffect(() => {\r\n if(currentSearch !== \"\" && currentSearch && filteredSlides && slideData?.getAllSlides){\r\n setfilteredSlides(findSlidesWithCommonString(currentSearch, slideData?.getAllSlides))\r\n setshownSlides(30);\r\n }else if(currentSearch === \"\" && slideData?.getAllSlides){\r\n setfilteredSlides(slideData?.getAllSlides);\r\n }\r\n }, [currentSearch]);\r\n\r\n const selects = (\r\n <div className=\"selects\">\r\n <div className=\"includedSlides\">\r\n <label>Type af slides</label>\r\n <Select\r\n value={includeSlides}\r\n onChange={(event) => {\r\n setincludeSlides(String(event.target.value));\r\n }}\r\n >\r\n <MenuItem value={\"0\"}>Ingen</MenuItem>\r\n <MenuItem value={\"1\"}>Elever</MenuItem>\r\n <MenuItem value={\"2\"}>Lærere</MenuItem>\r\n <MenuItem value={\"3\"}>Begge</MenuItem>\r\n </Select>\r\n </div>\r\n <div className=\"languageOfSlides\">\r\n <label>Sprog i slides</label>\r\n <Select\r\n value={languageChosen}\r\n onChange={(event) => setlanguageChosen(String(event.target.value))}\r\n >\r\n <MenuItem value={\"1\"}>\r\n Dansk\r\n </MenuItem>\r\n <MenuItem value={\"2\"}>\r\n Engelsk\r\n </MenuItem>\r\n <MenuItem value={\"3\"}>\r\n Færøsk\r\n </MenuItem>\r\n <MenuItem value={\"4\"}>\r\n Polsk\r\n </MenuItem>\r\n <MenuItem value={\"5\"}>\r\n Arabisk\r\n </MenuItem>\r\n </Select>\r\n </div>\r\n </div>\r\n );\r\n\r\n\r\n const searchBox = (\r\n <div className=\"searchBox\">\r\n <label>Søg</label>\r\n <TextField variant=\"outlined\" value={currentSearch} onChange={e => setcurrentSearch(e.target.value)}/>\r\n </div>\r\n )\r\n\r\n const slideShow = (\r\n <div className=\"adminSlideshow\">\r\n {filteredSlides\r\n ? filteredSlides.map((slide, index) => {\r\n return index <= shownSlides ? (\r\n <AdminSlide slide={slide!} key={slide!.quiz_slide_id}/>\r\n ) : null;\r\n })\r\n : null}\r\n </div>\r\n );\r\n\r\n const showMoreSlides = () => {\r\n setshownSlides(shownSlides + 30);\r\n }\r\n\r\n return (\r\n <div className=\"AdminSlideSearch\">\r\n <div className=\"controls\">\r\n {selects}\r\n {searchBox}\r\n <div className=\"hotinfo\"><div className=\"amount\">Antal slides i søgning: {filteredSlides?.length}</div></div>\r\n </div>\r\n {slideDataLoading ? <div className=\"loadingMore\"><CircularProgress /></div> : null }\r\n {slideShow}\r\n {filteredSlides ? shownSlides < filteredSlides?.length ? <Button onClick={showMoreSlides} className=\"showMore\">VIS FLERE</Button> : null : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { AdminSlideSearch };\r\n","import React from \"react\";\r\nimport \"./NotificationActionBar.scss\"\r\nimport whiteArrow from \"../../../../../assets/white_Arrow.png\";\r\n\r\nexport type NotificationActionBarProps = {\r\n studnetsCount: number,\r\n buttonDisabled: boolean,\r\n buttonText: string,\r\n onClick: any,\r\n showStudentsCount: boolean\r\n};\r\n\r\nconst NotificationActionBar: React.FC<NotificationActionBarProps> = (props: NotificationActionBarProps) => {\r\n const handleClick = () => {\r\n props.onClick();\r\n }\r\n\r\n const renderStudnetCount = () => {\r\n return (\r\n <span className=\"studentsCount\">\r\n {props.studnetsCount} {\"students\"}\r\n </span>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"bar\">\r\n { props.showStudentsCount ? renderStudnetCount() : null }\r\n <button disabled={props.buttonDisabled} className=\"sendButton\" onClick={handleClick}><span className=\"text\">{props.buttonText}</span>\r\n <span className=\"icon\"><img alt=\"FINISH-ICON\" src={whiteArrow}/></span></button>\r\n </div>\r\n )\r\n}\r\n\r\nexport {NotificationActionBar}","import React, { useEffect, useRef, useState } from 'react';\r\nimport Calendar from 'react-calendar';\r\nimport CalendarTodayRoundedIcon from '@mui/icons-material/CalendarTodayRounded';\r\nimport 'react-calendar/dist/Calendar.css';\r\nimport { Button } from '@mui/material';\r\nimport \"./CustomDatePicker.scss\";\r\n\r\nexport type ICustomDatePickerProps = {\r\n value: string;\r\n onChange: any;\r\n}\r\n\r\nconst CustomDatePicker: React.FC<ICustomDatePickerProps> = (props: ICustomDatePickerProps) => {\r\n\r\n const [isExpanded, setisExpanded] = useState(false);\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const handleClick = (event: MouseEvent) => {\r\n if (modalRef.current && !modalRef.current.contains(event.target as Node)) {\r\n setisExpanded(false);\r\n }\r\n };\r\n \r\n document.addEventListener(\"click\", handleClick, true);\r\n \r\n return () => {\r\n document.removeEventListener(\"click\", handleClick, true);\r\n };\r\n }, [modalRef, setisExpanded]);\r\n\r\n const handleChangeCalendar = (value): void => {\r\n const date: Date = value;\r\n console.log(date.toDateString());\r\n props.onChange(date.getTime() / 1000);\r\n setisExpanded(false)\r\n };\r\n\r\n function padTo2Digits(num) {\r\n return num.toString().padStart(2, \"0\");\r\n }\r\n \r\n function formatDate(timeString) {\r\n const date = new Date(timeString * 1000);\r\n return [\r\n padTo2Digits(date.getDate()),\r\n padTo2Digits(date.getMonth() + 1),\r\n date.getFullYear(),\r\n ].join(\"/\");\r\n }\r\n\r\n\r\n const renderCalendar = () => {\r\n return (\r\n <div ref={modalRef} className=\"calendarBox\">\r\n <Calendar\r\n value={new Date(Number(props.value) * 1000)}\r\n onChange={handleChangeCalendar}\r\n />\r\n </div>\r\n );\r\n };\r\n return (\r\n <div className='datePicker'>\r\n <input value={formatDate(props.value)} onClick={() => setisExpanded(true)} className=\"dateInput\" readOnly></input>\r\n {isExpanded ? \r\n renderCalendar()\r\n : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport { CustomDatePicker };","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport \"./AdminNotificationView.scss\"\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\nimport CheckIcon from '@mui/icons-material/Check';\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { NotificationActionBar } from \"./components/NotificationActionBar\";\r\nimport { CustomDatePicker } from \"./components/CustomDatePicker/CustomDatePicker\";\r\nimport { useHistory } from \"react-router-dom\"\r\nimport { useAddStudentsNotificationMutation, useGetNotificationStudentsCountLazyQuery, useGetNotificationStudentsCountQuery } from \"../../../../graphql/generated/graphql\";\r\n\r\nexport type IAdminNotificationViewProps = {};\r\n\r\nconst AdminNotificationView: React.FC<IAdminNotificationViewProps> = ({}) => {\r\n const [studentsCount, setStudentsCount] = useState(0);\r\n const [sendStudentsCount, setSendStudentsCount] = useState(0);\r\n const [notificationSend, setNotificationSend] = useState(false);\r\n const [selectedNotificationType, setNotificationType] = useState(0);\r\n const [selectedDate, setSelectedDate] = useState<Date>(new Date());\r\n const [selectedLanguage, setSelectedLanguage] = useState(1);\r\n const [schoolId, setSchoolId] = useState<number[]>([]);\r\n const [messageText, setMessageText] = useState(\"\");\r\n const [fetchCount, { data: countData, loading: countLoading }] = useGetNotificationStudentsCountLazyQuery();\r\n const [addStudentsNotification] = useAddStudentsNotificationMutation();\r\n const [sendingData, setSendingData] = useState(false);\r\n const history = useHistory();\r\n\r\n const notificationTypes = [\r\n { label: 'All students', value: 0},\r\n { label: 'Driving school', value: 1}\r\n ];\r\n\r\n const refetch = () => {\r\n fetchCount({variables:{school_id: schoolId, language_id: selectedLanguage}});\r\n };\r\n\r\n useEffect(() => {\r\n fetchCount({variables:{school_id: schoolId, language_id: selectedLanguage}});\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (countData && (countData.getNotificationStudentsCount || countData.getNotificationStudentsCount === 0)) {\r\n setStudentsCount(countData.getNotificationStudentsCount);\r\n }\r\n }, [countData]);\r\n\r\n useEffect(() => {\r\n fetchCount({variables:{school_id: schoolId, language_id: selectedLanguage}});\r\n }, [selectedLanguage, fetchCount]);\r\n\r\n const getButtonText = () => {\r\n return notificationSend ? \"New notification\" : (sendingData ? \"Sending...\" : \"Send\");\r\n }\r\n\r\n const handleNotificationChange = (e) => {\r\n setNotificationType(Number(e.target.value));\r\n if (e.target.value === '0'){\r\n setSchoolId([]);\r\n fetchCount({variables:{school_id: [], language_id: selectedLanguage}});\r\n }\r\n }\r\n\r\n const handleDateChange = (timeString: string) => {\r\n let date = new Date(Number(timeString) * 1000);\r\n let utcDate = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\r\n setSelectedDate(new Date(utcDate));\r\n }\r\n\r\n const handleLanguageChange = (event) => {\r\n setSelectedLanguage(Number(event.target.value));\r\n }\r\n\r\n const handleSchoolChange = (e) => {\r\n let ids: number[] = [];\r\n let values = e.target.value.split(',');\r\n values.forEach(id => {\r\n ids.push(Number(id));\r\n });\r\n setSchoolId(ids);\r\n }\r\n\r\n const handleTextAreaChange = (e) => {\r\n setMessageText(e.target.value);\r\n }\r\n\r\n const handlClose = () => {\r\n history.push(\"/dashboard\");\r\n }\r\n\r\n const isActionButtonDisabled = () => {\r\n return (!notificationSend && (messageText === \"\"\r\n || (selectedNotificationType === 1 && schoolId.length === 0)))\r\n || sendingData;\r\n }\r\n\r\n const resetToDefault = () => {\r\n setNotificationType(0);\r\n setSchoolId([]);\r\n setSelectedDate(new Date());\r\n setMessageText(\"\");\r\n setSendStudentsCount(0);\r\n setSelectedLanguage(1);\r\n }\r\n\r\n const handleActionButtonClick = () => {\r\n if (notificationSend) {\r\n resetToDefault();\r\n setNotificationSend(false);\r\n return;\r\n }\r\n \r\n setSendingData(true);\r\n addStudentsNotification({variables: { \r\n school_id: schoolId,\r\n language_id: selectedLanguage,\r\n expiry_date: selectedDate,\r\n message: messageText\r\n }}).then((data) => {\r\n if(data.data){\r\n setSendStudentsCount(data.data.addStudentsNotification);\r\n };\r\n setNotificationSend(true);\r\n setSendingData(false);\r\n })\r\n }\r\n\r\n const renderSchoolSelect = () => {\r\n return (\r\n <div className=\"secondarySelection\">\r\n <div className=\"schoolSelect\">\r\n <label>{\"School ID\"}</label>\r\n <input type=\"text\" pattern=\"([0-9]+.{0,1}[0-9]*,{0,1})*[0-9]\" onChange={handleSchoolChange}></input>\r\n </div>\r\n <div className=\"calculate\">\r\n <button onClick={refetch}>{\"Calculate\"}</button>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderEmptySection = () => {\r\n return (\r\n <div className=\"secondarySelection\">\r\n\r\n </div>\r\n );\r\n };\r\n\r\n const renderInteractionSide = () => {\r\n return (\r\n <div className=\"interactionSide\">\r\n <div className=\"primerySelections\">\r\n <div className=\"select\">\r\n <label>{\"Type\"}</label>\r\n <select onChange={handleNotificationChange} value={selectedNotificationType}>\r\n {notificationTypes.map((type) => <option key={type.value} value={type.value}>{type.label}</option>)}\r\n </select>\r\n </div>\r\n <div className=\"dateDiv\">\r\n <label>{\"Expiration date (optional)\"}</label>\r\n <CustomDatePicker value={String(selectedDate.getTime() / 1000)} onChange={handleDateChange}/>\r\n </div>\r\n </div>\r\n\r\n {selectedNotificationType > 0 ? renderSchoolSelect() : renderEmptySection()}\r\n\r\n <div className=\"messageArea\">\r\n <div className=\"selection\">\r\n <div className=\"label\">\r\n <label>{\"Message\"}</label>\r\n </div>\r\n <div className=\"redioGroups\">\r\n <input type=\"radio\" value={1} checked={selectedLanguage === 1} onChange={handleLanguageChange}/>\r\n <label className=\"margin\">DK</label>\r\n <input type=\"radio\" value={2} checked={selectedLanguage === 2} onChange={handleLanguageChange}/>\r\n <label>UK</label>\r\n </div>\r\n </div>\r\n <textarea className=\"textarea\" onChange={handleTextAreaChange}></textarea>\r\n </div>\r\n \r\n </div>\r\n )\r\n }\r\n\r\n const renderNotificationCompletionSide = () => {\r\n return (\r\n <div className=\"interactionSide\">\r\n <h1 className=\"attention\"><CheckIcon className=\"check\"/> Send to {sendStudentsCount} {sendStudentsCount === 1 ? \"studnet\" : \"students\"}</h1>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"pageNotification\">\r\n <div className=\"logoBar\">\r\n <TeoriLogo />\r\n <Button className=\"closeButton\" onClick={handlClose}>\r\n <ClearIcon />\r\n </Button>\r\n </div>\r\n <div className=\"notification\">\r\n <div className=\"informationSide\">\r\n <h2>{\"Notificationsystem\"}</h2>\r\n </div>\r\n {notificationSend ? renderNotificationCompletionSide() : renderInteractionSide() }\r\n </div>\r\n <NotificationActionBar \r\n studnetsCount={studentsCount}\r\n buttonText={getButtonText()} \r\n onClick={handleActionButtonClick}\r\n buttonDisabled={isActionButtonDisabled()}\r\n showStudentsCount={!notificationSend}/>\r\n </div>\r\n )\r\n};\r\n\r\nexport { AdminNotificationView };","import React, {\r\n FC,\r\n lazy,\r\n Suspense,\r\n useContext,\r\n useEffect,\r\n useState,\r\n} from \"react\";\r\nimport { BrowserRouter, Redirect, Route, Switch } from \"react-router-dom\";\r\nimport Loading from \"../globalComponents/Loading\";\r\nimport {\r\n PATH_CREATE_LESSON,\r\n PATH_DASHBOARD,\r\n PATH_HOME,\r\n PATH_LESSON,\r\n PATH_LOGIN,\r\n PATH_QUIZ,\r\n PATH_SKOLE,\r\n PATH_STUDENTS,\r\n} from \"../constants/pathConstants\";\r\nimport { AppStateContext } from \"../apollo/TeoriTeacherProvider\";\r\nimport { fetchAccessToken } from \"../apollo/apolloProviderOperations\";\r\nimport { APOLLO_TEACHER_URL } from \"../constants/APIConstants\";\r\nimport { CreateQuizPage } from \"../pages/Teacher/createQuizPage/CreateQuizPage\";\r\nimport { AdminStudentView } from \"../pages/Teacher/admin/adminStudentView/AdminStudentView\";\r\nimport { LessonPageBarActualPopup } from \"../pages/Teacher/lessonPage/components/LessonPageBarActualPopup\";\r\nimport { AdminSchoolView } from \"../pages/Teacher/admin/adminSchoolView/AdminSchoolView\";\r\nimport { LessonPageBarPopup } from \"../pages/Teacher/lessonPage/components/LessonPageBarPopup\";\r\nimport { AdminSlideSearch } from \"../pages/Teacher/admin/adminSlideSearch/AdminSlideSearch\";\r\nimport { AdminNotificationView } from \"../pages/Teacher/admin/adminNotificationView/AdminNotificationView\";\r\n\r\nexport interface TeacherRoutesProps {}\r\n\r\nlet initialized = false;\r\n\r\nexport const TeacherRoutes: FC<TeacherRoutesProps> = () => {\r\n const { appState, appSetLogin, appSetLogout, appGetUserRole } =\r\n useContext(AppStateContext);\r\n const isAuthenticated = appState.loggedIn;\r\n const [loading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n if (initialized) return;\r\n console.log(initialized);\r\n initialized = true;\r\n try {\r\n fetchAccessToken(APOLLO_TEACHER_URL, true)\r\n .then((data: any) => {\r\n console.log(data);\r\n const failed =\r\n data === undefined || data?.RefreshUser.accessToken === undefined;\r\n failed\r\n ? appSetLogout()\r\n : appSetLogin(\r\n data?.RefreshUser.accessToken,\r\n data?.RefreshUser.refreshToken\r\n );\r\n })\r\n .catch((e) => {\r\n console.log(e);\r\n appSetLogout();\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n });\r\n if (loading) {\r\n return <Loading />;\r\n }\r\n\r\n const LoginPage = lazy(() => import(\"../pages/Teacher/loginPage/LoginPage\"));\r\n const DashboardPage = lazy(\r\n () => import(\"../pages/Teacher/dashboardPage/DashboardPage\")\r\n );\r\n const StudentPage = lazy(\r\n () => import(\"../pages/Teacher/studentPage/StudentPage\")\r\n );\r\n const LessonPage = lazy(\r\n () => import(\"../pages/Teacher/lessonPage/LessonPage\")\r\n );\r\n const CreateLessonPage = lazy(\r\n () => import(\"../pages/Teacher/createLessonPage/CreateLessonPage\")\r\n );\r\n const QuizPage = lazy(() => import(\"../pages/Teacher/quizPage/QuizPage\"));\r\n\r\n const routes = [\r\n <Route\r\n key=\"slashRedirect\"\r\n exact\r\n path={PATH_HOME}\r\n render={() => <Redirect to={PATH_LOGIN} />}\r\n />,\r\n <Route\r\n key=\"loginPage\"\r\n exact\r\n path={PATH_LOGIN}\r\n render={() =>\r\n !isAuthenticated ? <LoginPage /> : <Redirect to={PATH_DASHBOARD} />\r\n }\r\n />,\r\n <Route\r\n key=\"studentPage\"\r\n exact\r\n path={PATH_STUDENTS}\r\n render={() =>\r\n isAuthenticated ? <StudentPage /> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n <Route\r\n key=\"dashboardPage\"\r\n exact\r\n path={PATH_DASHBOARD}\r\n render={() =>\r\n isAuthenticated ? <DashboardPage /> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n <Route\r\n key=\"lessonPage\"\r\n exact\r\n path={PATH_LESSON + \"/:id([0-9]+)\"}\r\n render={() =>\r\n isAuthenticated ? <LessonPage /> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n <Route\r\n key=\"createLessonPage\"\r\n exact\r\n path={PATH_CREATE_LESSON}\r\n render={() =>\r\n isAuthenticated ? <CreateLessonPage /> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n <Route\r\n key=\"quizPage\"\r\n exact\r\n path={PATH_QUIZ + \"/:id([0-9]+)\"}\r\n render={() =>\r\n isAuthenticated ? <QuizPage /> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n <Route\r\n key=\"createQuizPage\"\r\n exact\r\n path={\"/TOPSECRET\"}\r\n render={() =>\r\n isAuthenticated ? <CreateQuizPage /> : <Redirect to={PATH_LOGIN} />\r\n }\r\n />,\r\n // <Route\r\n // key=\"notes\"\r\n // exact\r\n // path={\"/notes\"}\r\n // render={() =>\r\n // isAuthenticated ? <LessonPageBarActualPopup /> : <Redirect to={PATH_LOGIN} />\r\n // }\r\n // />,\r\n <Route\r\n key=\"adminStudentPage\"\r\n exact\r\n path={\"/admin\"}\r\n render={() =>\r\n isAuthenticated && appGetUserRole() === \"1\" ? (\r\n <AdminStudentView />\r\n ) : (\r\n <Redirect to={PATH_LOGIN} />\r\n )\r\n }\r\n />,\r\n <Route\r\n key=\"adminStudentPage\"\r\n exact\r\n path={\"/adminschool\"}\r\n render={() =>\r\n isAuthenticated && appGetUserRole() === \"1\" ? (\r\n <AdminSchoolView />\r\n ) : (\r\n <Redirect to={PATH_LOGIN} />\r\n )\r\n }\r\n />,\r\n <Route\r\n key=\"adminQuizSlide\"\r\n exact\r\n path={\"/adminview\"}\r\n render={() =>\r\n isAuthenticated && appGetUserRole() === \"1\" ? (\r\n <AdminSlideSearch />\r\n ) : (\r\n <Redirect to={PATH_LOGIN} />\r\n )\r\n }\r\n/>,\r\n <Route\r\n key=\"adminNotificationPage\"\r\n exact\r\n path={\"/notification\"}\r\n render={() =>\r\n isAuthenticated && appGetUserRole() == \"1\" ? (\r\n <AdminNotificationView />\r\n ) : (\r\n <Redirect to={PATH_LOGIN} />\r\n )\r\n }\r\n />\r\n ];\r\n\r\n return (\r\n <Suspense fallback={<Loading />}>\r\n <BrowserRouter basename={PATH_SKOLE}>\r\n <Route\r\n exact\r\n path={\"/notes\"}\r\n render={() => <LessonPageBarActualPopup />}\r\n />\r\n <LessonPageBarPopup/>\r\n <Switch>{routes}</Switch>\r\n </BrowserRouter>\r\n </Suspense>\r\n );\r\n};\r\nexport default TeacherRoutes;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n BrowserRouter,\r\n matchPath,\r\n Route,\r\n Switch,\r\n useLocation,\r\n useRouteMatch,\r\n} from \"react-router-dom\";\r\nimport PopupSlideProvider from \"./apollo/PopupSlideProvider\";\r\nimport AppStateStudentContext from \"./apollo/TeoriStudentProvider\";\r\nimport AppStateContext from \"./apollo/TeoriTeacherProvider\";\r\nimport { PATH_SKOLE } from \"./constants/pathConstants\";\r\nimport { A2HSComponent } from \"./globalComponents/A2HSComponent\";\r\nimport { LessonPageBarActualPopup } from \"./pages/Teacher/lessonPage/components/LessonPageBarActualPopup\";\r\nimport StudentRoutes from \"./routes/StudentRoutes\";\r\nimport TeacherRoutes from \"./routes/TeacherRoutes\";\r\n\r\nfunction App() {\r\n return (\r\n <>\r\n <A2HSComponent />\r\n <BrowserRouter>\r\n <Switch>\r\n <Route\r\n path={PATH_SKOLE}\r\n render={() => (\r\n <AppStateContext>\r\n {\" \"}\r\n <PopupSlideProvider>\r\n <TeacherRoutes />\r\n </PopupSlideProvider>\r\n </AppStateContext>\r\n )}\r\n />\r\n <Route\r\n path=\"/\"\r\n render={() => (\r\n <AppStateStudentContext>\r\n <StudentRoutes />\r\n </AppStateStudentContext>\r\n )}\r\n />\r\n </Switch>\r\n </BrowserRouter>\r\n </>\r\n );\r\n}\r\n\r\nexport default App;\r\n","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","// 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://cra.link/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.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n\r\n const isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&\r\n navigator.userAgent &&\r\n navigator.userAgent.indexOf('CriOS') == -1 &&\r\n navigator.userAgent.indexOf('FxiOS') == -1;\r\n\r\n if(isSafari){\r\n //WE HAVE PROBLEMS WITH SERVICE WORKER IN SAFARI, SO WE WILL NOT USE IT!\r\n return\r\n }\r\n\r\n if ('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://cra.link/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: string, config?: 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://cra.link/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: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\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('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.scss';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\r\n\r\nReactDOM.render(\r\n <React.StrictMode>\r\n <App />\r\n </React.StrictMode>,\r\n document.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://cra.link/PWA\r\ntry{\r\n \r\n serviceWorkerRegistration.register();\r\n}catch(e){\r\n console.log(e);\r\n \r\n}\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n","export const LAPTOP_VIEW_WIDTH = 1050;\r\nexport const LAPTOP_VIEW_HEIGHT = 600;\r\n\r\nexport const INPUT_TAG_NAME = \"INPUT\";\r\nexport const ENTER_KEY_NAME = \"Enter\";\r\n","export const APOLLO_TEACHER_URL = \"https://tr-appsrvc-authapi-d-azwe.azurewebsites.net\";\r\nexport const APOLLO_STUDENT_URL = \"https://tr-appsrvc-studentauthapi-d-azwe.azurewebsites.net/\";\r\nexport const AZURE_STORAGE_ACCOUNT = \"teoricontentstorage\";","import React, { createContext, ReactNode, useEffect, useState } from \"react\";\r\nimport {\r\n ApolloClient,\r\n ApolloLink,\r\n ApolloProvider,\r\n fromPromise,\r\n HttpLink,\r\n InMemoryCache,\r\n Observable,\r\n} from \"@apollo/client\";\r\nimport { TokenRefreshLink } from \"apollo-link-token-refresh\";\r\nimport { fetchAccessToken } from \"./apolloProviderOperations\";\r\nimport JwtDecode, { JwtPayload } from \"jwt-decode\";\r\nimport { onError } from \"@apollo/link-error\";\r\nimport { APOLLO_TEACHER_URL } from \"../constants/APIConstants\";\r\nimport { io, Socket } from \"socket.io-client\";\r\nimport { makeid } from \"../pages/modelFunctions\";\r\nimport { createRoom, setUsername } from \"../pages/socketFunction\";\r\nimport { LessonSlide } from \"../pages/model\";\r\n\r\ninterface AppState {\r\n appState: {\r\n loggedIn: boolean;\r\n };\r\n popupState: boolean;\r\n popupSlide: LessonSlide | null;\r\n teacherSocket: {\r\n socket: Socket | undefined;\r\n room: string;\r\n };\r\n gqlError: {\r\n msg: string;\r\n };\r\n appSetLogin: (token: string, token2: string) => void;\r\n appSetLogout: () => void;\r\n appSetTokens: (token: string, token2: string) => void;\r\n appClearAccessToken: () => void;\r\n appGetUserID: () => string;\r\n appGetUserRole: () => string;\r\n appGetRevenueStats: () => any;\r\n appGetCurrentCatIDs: () => any;\r\n startSocket: () => void;\r\n openPopup: () => void;\r\n closePopup: () => void;\r\n setPopupSlide: (slide: LessonSlide | null) => void;\r\n}\r\nlet accessToken = \"\";\r\nlet refreshToken = \"\";\r\nlet userID = \"\";\r\nlet userRole = \"\";\r\nlet popupSlide: LessonSlide; \r\n\r\nconst initialAppState: AppState = {\r\n appState: { loggedIn: false },\r\n popupState: false,\r\n popupSlide: null,\r\n teacherSocket: {\r\n socket: undefined,\r\n room: \" \",\r\n },\r\n gqlError: { msg: \"\" },\r\n appSetLogin: (token: string, token2: string) => {},\r\n appSetLogout: () => {},\r\n appSetTokens: (token: string) => {},\r\n appClearAccessToken: () => {},\r\n appGetUserID: () => {\r\n return userID;\r\n },\r\n appGetUserRole: () => {\r\n return userRole;\r\n },\r\n appGetRevenueStats: () => {},\r\n appGetCurrentCatIDs: () => [],\r\n startSocket: () => {},\r\n openPopup: () => {},\r\n closePopup: () => {},\r\n setPopupSlide: (slide: LessonSlide | null) => {}\r\n};\r\n\r\nexport const AppStateContext = createContext<AppState>(initialAppState);\r\n\r\nexport interface AppStateProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nfunction AppStateProvider(props: AppStateProviderProps): JSX.Element {\r\n const [appState, setAppState] = useState({ loggedIn: false });\r\n const [teacherSocket, setteacherSocket] = useState<AppState[\"teacherSocket\"]>(\r\n { socket: undefined, room: \" \" }\r\n );\r\n const [popupState, setpopupState] = useState(false);\r\n const [gqlError, setGQLError] = useState({ msg: \"\" });\r\n\r\n const appSetLogin = (token: string, token2: string) => {\r\n accessToken = token;\r\n refreshToken = token2;\r\n localStorage.setItem(\"refreshTokenT\", refreshToken);\r\n setAppState({ ...appState, loggedIn: true });\r\n };\r\n\r\n const appSetLogout = async () => {\r\n await client.resetStore();\r\n localStorage.removeItem(\"apollo-cache-persist\");\r\n caches.keys().then(function (names) {\r\n for (let name of names) {\r\n\r\n caches.delete(name);\r\n }\r\n });\r\n localStorage.setItem(\"refreshTokenT\", \"\");\r\n accessToken = \"\";\r\n setAppState({ ...appState, loggedIn: false });\r\n };\r\n\r\n const appSetTokens = (token: string, token2: string) => {\r\n accessToken = token;\r\n refreshToken = token2;\r\n };\r\n const appClearAccessToken = () => {\r\n accessToken = \"\";\r\n };\r\n const appGetAccessToken = (): string => {\r\n return accessToken;\r\n };\r\n const appGetUserID = (): string => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n\r\n userID = decodedToken.token_data.user_id;\r\n return userID;\r\n };\r\n\r\n const appGetUserRole = (): string => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n\r\n userRole = decodedToken.token_data.role_id;\r\n return userRole;\r\n };\r\n\r\n const appGetRevenueStats = () => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n\r\n return {currentRevenue: decodedToken.token_data.currentRevenue, adviseType: decodedToken.token_data.adviseType}\r\n }\r\n \r\n const appGetCurrentCatIDs = () => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n const IDS = decodedToken.token_data.currentCategories.map((cat) => {\r\n return cat.cat_id;\r\n })\r\n return IDS;\r\n }\r\n\r\n const startSocket = async () => {\r\n \r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n \r\n if(!teacherSocket.socket){\r\n const socket = io(\r\n \"https://tr-appsrvc-classroom-dev-azwe.azurewebsites.net/\",\r\n {\r\n transports: [\"polling\", \"websocket\"],\r\n }\r\n );\r\n socket.on(\"connect_error\", (err) => {\r\n });\r\n // socket.on(\"connect\", () => {\r\n\r\n // });\r\n setUsername(socket, {\r\n id: decodedToken.token_data.user_id,\r\n name: decodedToken.token_data.email_id,\r\n role: decodedToken.token_data.role_id,\r\n });\r\n createRoom(socket, decodedToken.token_data.user_id);\r\n setteacherSocket({\r\n socket: socket,\r\n room: decodedToken.token_data.user_id,\r\n });\r\n }else{ \r\n setUsername(teacherSocket.socket, {\r\n id: decodedToken.token_data.user_id,\r\n name: decodedToken.token_data.email_id,\r\n role: decodedToken.token_data.role_id,\r\n });\r\n createRoom(teacherSocket.socket, decodedToken.token_data.user_id);\r\n }\r\n };\r\n\r\n const openPopup = () => {\r\n \r\n setpopupState(true);\r\n }\r\n\r\n const closePopup = () => {\r\n setpopupState(false);\r\n }\r\n\r\n const setPopupSlide = (slide: LessonSlide | null) => {\r\n if(slide){\r\n const objectToSend: LessonSlide = {media: slide.media, type: slide.type, id: slide.id, content_id: slide.content_id, notes: slide.notes}\r\n popupSlide = objectToSend;\r\n console.log(popupSlide);\r\n \r\n }\r\n\r\n }\r\n\r\n useEffect(() => {\r\n if(popupState){\r\n }\r\n \r\n }, [popupState]);\r\n // apollo client\r\n const cache = new InMemoryCache({\r\n typePolicies: {\r\n Query: {\r\n fields: {\r\n getStudentActivity: {\r\n // Don't cache separate results based on\r\n // any of this field's arguments.\r\n keyArgs: [\"student_id\"],\r\n // Concatenate the incoming list items with\r\n // the existing list items.\r\n merge(existing = [], incoming) {\r\n return [...existing, ...incoming];\r\n },\r\n },\r\n\r\n getTeoriContent: {\r\n // Don't cache separate results based on\r\n // any of this field's arguments.\r\n keyArgs: false,\r\n // Concatenate the incoming list items with\r\n // the existing list items.\r\n merge(existing = [], incoming) {\r\n return [...existing, ...incoming];\r\n },\r\n },\r\n getOwnedContent: {\r\n // Don't cache separate results based on\r\n // any of this field's arguments.\r\n keyArgs: false,\r\n // Concatenate the incoming list items with\r\n // the existing list items.\r\n merge(existing = [], incoming) {\r\n return [...existing, ...incoming];\r\n },\r\n },\r\n },\r\n },\r\n },\r\n });\r\n const requestLink = new ApolloLink(\r\n (operation, forward) =>\r\n new Observable((observer) => {\r\n let handle: any;\r\n Promise.resolve(operation)\r\n .then((operation) => {\r\n operation.setContext({\r\n headers: {\r\n authorization: accessToken ? appGetAccessToken() : null,\r\n },\r\n });\r\n })\r\n .then(() => {\r\n handle = forward(operation).subscribe({\r\n next: observer.next.bind(observer),\r\n error: observer.error.bind(observer),\r\n complete: observer.complete.bind(observer),\r\n });\r\n })\r\n .catch(observer.error.bind(observer));\r\n return () => {\r\n if (handle) {\r\n handle.unsubscribe();\r\n }\r\n };\r\n })\r\n );\r\n\r\n const tokenRefreshLink: any = new TokenRefreshLink<{\r\n accessToken;\r\n refreshToken;\r\n }>({\r\n accessTokenField: \"RefreshUser\",\r\n isTokenValidOrUndefined: () => {\r\n const token = appGetAccessToken();\r\n if (token?.length === 0) {\r\n return true;\r\n }\r\n\r\n try {\r\n //TODO Find a better solution to this\r\n const interMediaryFix: JwtPayload = JwtDecode(token);\r\n const exp = interMediaryFix?.exp;\r\n\r\n if (exp === undefined) {\r\n return false;\r\n }\r\n\r\n return Date.now() < exp * 1000;\r\n } catch {\r\n return false;\r\n }\r\n },\r\n fetchAccessToken: () => fetchAccessToken(APOLLO_TEACHER_URL, true),\r\n handleFetch: (newTokens) => {\r\n localStorage.setItem(\"refreshTokenT\", newTokens.refreshToken);\r\n localStorage.setItem(\"accessTokenT\", newTokens.accessToken);\r\n appSetTokens(newTokens.accessToken, newTokens.refreshToken);\r\n },\r\n handleResponse: (operation: any, accessToken) => async (response) => {\r\n const newTokens = {\r\n accessToken: await response.accessToken,\r\n refreshToken: await response.refreshToken,\r\n };\r\n return response;\r\n },\r\n handleError: (err) => {\r\n appSetLogout();\r\n },\r\n });\r\n\r\n const client = new ApolloClient({\r\n link: ApolloLink.from([\r\n tokenRefreshLink,\r\n onError(({ graphQLErrors, networkError }) => {\r\n if (\r\n graphQLErrors === undefined ||\r\n graphQLErrors[0].path === undefined\r\n ) {\r\n\r\n return;\r\n }\r\n if (graphQLErrors[0].path[0] === \"refresh\") {\r\n\r\n return;\r\n }\r\n const err = graphQLErrors[0].message;\r\n setGQLError({ msg: err });\r\n }),\r\n requestLink,\r\n new HttpLink({\r\n uri: APOLLO_TEACHER_URL,\r\n }),\r\n ]),\r\n cache,\r\n });\r\n \r\n\r\n return (\r\n <AppStateContext.Provider\r\n value={{\r\n appState,\r\n popupState,\r\n popupSlide,\r\n teacherSocket,\r\n gqlError,\r\n appSetLogin,\r\n appSetLogout,\r\n appSetTokens,\r\n appClearAccessToken,\r\n appGetUserID,\r\n appGetUserRole,\r\n appGetRevenueStats,\r\n appGetCurrentCatIDs,\r\n startSocket,\r\n openPopup,\r\n closePopup,\r\n setPopupSlide\r\n }}\r\n >\r\n <ApolloProvider client={client}>{props.children}</ApolloProvider>\r\n </AppStateContext.Provider>\r\n );\r\n}\r\n\r\nexport default AppStateProvider;\r\n","import { Socket } from \"socket.io-client\";\r\n\r\nexport const joinRoom = (socket: Socket, roomName: string) => {\r\n if(socket){\r\n socket.emit(\"join-room\", roomName);\r\n }\r\n }\r\n\r\nexport const setUsername = (socket: Socket, userToken: any) => {\r\n if (socket) {\r\n socket.on(\"connect\", () => {\r\n });\r\n socket.io.on(\"ping\", () => {\r\n \r\n });\r\n \r\n socket.emit(\"setUsername\", {\r\n user_id: String(userToken.id),\r\n email_id: userToken.name,\r\n role_id: userToken.role,\r\n });\r\n }\r\n };\r\nexport const createRoom = (socket: Socket, roomName: string) => {\r\n if (socket) {\r\n socket.emit(\"create-room\", roomName);\r\n }\r\n };\r\nexport const goToStats = (socket: Socket) => {\r\n socket!.emit(\"c-stats\", () => {\r\n })\r\n}\r\n","import React, { createContext, ReactNode, useState } from \"react\";\r\nimport {\r\n ApolloClient,\r\n ApolloLink,\r\n ApolloProvider,\r\n fromPromise,\r\n HttpLink,\r\n InMemoryCache,\r\n Observable,\r\n} from \"@apollo/client\";\r\nimport { persistCache, LocalStorageWrapper } from 'apollo3-cache-persist';\r\nimport { TokenRefreshLink } from \"apollo-link-token-refresh\";\r\nimport { fetchAccessToken } from \"./apolloProviderOperations\";\r\nimport JwtDecode, { JwtPayload } from \"jwt-decode\";\r\nimport { onError } from \"@apollo/link-error\";\r\nimport { APOLLO_STUDENT_URL } from \"../constants/APIConstants\";\r\n\r\ninterface AppState {\r\n appState: {\r\n loggedIn: boolean;\r\n };\r\n gqlError: {\r\n msg: string;\r\n };\r\n appSetLogin: (token: string, token2: string) => void;\r\n appSetLogout: () => void;\r\n appSetTokens: (token: string, token2: string) => void;\r\n appClearAccessToken: () => void;\r\n appGetUserID: () => string;\r\n appGetUserCategory: () => string;\r\n appGetUserRole: () => string;\r\n appGetExpiryDate: () => Date;\r\n}\r\nlet accessToken = \"\";\r\nlet refreshToken = \"\";\r\nlet userID = \"\";\r\nlet userRole = \"\";\r\nlet expiryDate = new Date();\r\nlet category = \"\";\r\n\r\nconst initialAppState: AppState = {\r\n appState: { loggedIn: false },\r\n gqlError: { msg: \"\" },\r\n appSetLogin: (token: string, token2: string) => {},\r\n appSetLogout: () => {},\r\n appSetTokens: (token: string) => {},\r\n appClearAccessToken: () => {},\r\n appGetUserID: () => {\r\n return userID;\r\n },\r\n appGetUserRole: () => {\r\n return userRole;\r\n },\r\n appGetUserCategory: () => {\r\n return category;\r\n },\r\n appGetExpiryDate: () => {\r\n return expiryDate;\r\n },\r\n};\r\n\r\nexport const AppStateStudentContext = createContext<AppState>(initialAppState);\r\n\r\nexport interface AppStateProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nfunction AppStateStudentProvider(props: AppStateProviderProps): JSX.Element {\r\n const [appState, setAppState] = useState({ loggedIn: false });\r\n const [gqlError, setGQLError] = useState({ msg: \"\" });\r\n\r\n const appSetLogin = (token: string, token2: string) => {\r\n accessToken = token;\r\n refreshToken = token2;\r\n localStorage.setItem(\"refreshToken\", refreshToken);\r\n setAppState({ ...appState, loggedIn: true });\r\n };\r\n\r\n const appSetLogout = async () => {\r\n await client.resetStore();\r\n localStorage.removeItem(\"apollo-cache-persist\");\r\n accessToken = \"\";\r\n caches.keys().then(function(names) {\r\n for (let name of names){\r\n caches.delete(name);\r\n }\r\n });\r\n setAppState({ ...appState, loggedIn: false });\r\n \r\n };\r\n\r\n const appSetTokens = (token: string, token2: string) => {\r\n accessToken = token;\r\n refreshToken = token2;\r\n };\r\n const appClearAccessToken = () => {\r\n accessToken = \"\";\r\n };\r\n const appGetAccessToken = (): string => {\r\n return accessToken;\r\n };\r\n const appGetUserID = (): string => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n userID = decodedToken.token_data.student_id;\r\n return userID;\r\n };\r\n\r\n const appGetUserRole = (): string => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n\r\n userRole = decodedToken.token_data.role_id;\r\n return userRole;\r\n };\r\n\r\n const appGetUserCategory = (): string => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n\r\n category = decodedToken.token_data.student_category;\r\n \r\n return String(category);\r\n }\r\n\r\n const appGetExpiryDate = (): Date => {\r\n const decodedToken: any = JwtDecode(appGetAccessToken());\r\n expiryDate = new Date(decodedToken.token_data.expiry_date);\r\n return expiryDate;\r\n };\r\n\r\n // apollo client\r\n const requestLink = new ApolloLink(\r\n (operation, forward) =>\r\n new Observable((observer) => {\r\n let handle: any;\r\n Promise.resolve(operation)\r\n .then((operation) => {\r\n operation.setContext({\r\n headers: {\r\n authorization: accessToken ? appGetAccessToken() : null,\r\n },\r\n });\r\n })\r\n .then(() => {\r\n handle = forward(operation).subscribe({\r\n next: observer.next.bind(observer),\r\n error: observer.error.bind(observer),\r\n complete: observer.complete.bind(observer),\r\n });\r\n })\r\n .catch(observer.error.bind(observer));\r\n return () => {\r\n if (handle) {\r\n handle.unsubscribe();\r\n }\r\n };\r\n })\r\n );\r\n\r\n const tokenRefreshLink: any = new TokenRefreshLink<{\r\n accessToken;\r\n refreshToken;\r\n }>({\r\n accessTokenField: \"RefreshUser\",\r\n isTokenValidOrUndefined: () => {\r\n const token = appGetAccessToken();\r\n if (token?.length === 0) {\r\n return true;\r\n }\r\n\r\n try {\r\n //TODO Find a better solution to this\r\n const interMediaryFix: JwtPayload = JwtDecode(token);\r\n const exp = interMediaryFix?.exp;\r\n\r\n if (exp === undefined) {\r\n return false;\r\n }\r\n\r\n return Date.now() < exp * 1000;\r\n } catch {\r\n return false;\r\n }\r\n },\r\n fetchAccessToken: () => fetchAccessToken(APOLLO_STUDENT_URL),\r\n handleFetch: (newTokens) => {\r\n localStorage.setItem(\"refreshToken\", newTokens.refreshToken);\r\n localStorage.setItem(\"accessToken\", newTokens.accessToken);\r\n appSetTokens(newTokens.accessToken, newTokens.refreshToken);\r\n },\r\n handleResponse: (operation: any, accessToken) => async (response) => {\r\n const newTokens = {\r\n accessToken: await response.accessToken,\r\n refreshToken: await response.refreshToken,\r\n };\r\n return response;\r\n },\r\n handleError: (err) => {\r\n appSetLogout();\r\n },\r\n });\r\n\r\n const theCache = new InMemoryCache();\r\n\r\n persistCache({\r\n\tcache: theCache,\r\n\tstorage: new LocalStorageWrapper(window.localStorage),\r\n });\r\n \r\n\r\n const client = new ApolloClient({\r\n cache: theCache,\r\n connectToDevTools: true,\r\n uri: APOLLO_STUDENT_URL,\r\n link: ApolloLink.from([\r\n tokenRefreshLink,\r\n onError(({ graphQLErrors, networkError }) => {\r\n if (\r\n graphQLErrors === undefined ||\r\n graphQLErrors[0].path === undefined\r\n ) {\r\n\r\n return;\r\n }\r\n if (graphQLErrors[0].path[0] === \"refresh\") {\r\n\r\n return;\r\n }\r\n const err = graphQLErrors[0].message;\r\n //setGQLError({ msg: err });\r\n }),\r\n requestLink,\r\n new HttpLink({\r\n uri: APOLLO_STUDENT_URL,\r\n }),\r\n ]),\r\n });\r\n\r\n return (\r\n <ApolloProvider client={client}>\r\n <AppStateStudentContext.Provider\r\n value={{\r\n appState,\r\n gqlError,\r\n appSetLogin,\r\n appSetLogout,\r\n appSetTokens,\r\n appClearAccessToken,\r\n appGetUserID,\r\n appGetUserRole,\r\n appGetUserCategory,\r\n appGetExpiryDate,\r\n }}\r\n >\r\n {props.children}\r\n </AppStateStudentContext.Provider>\r\n </ApolloProvider>\r\n );\r\n}\r\n\r\nexport default AppStateStudentProvider;\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport interface WindowDimensions {\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\nconst getWindowDimensions = (): WindowDimensions => {\r\n\treturn {\r\n\t\twidth: window.innerWidth,\r\n\t\theight: window.innerHeight,\r\n\t};\r\n};\r\n\r\nexport const useWindowDimensions = (): WindowDimensions => {\r\n\tconst resize = \"resize\";\r\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handleChange = (): void => {\r\n\t\t\tsetWindowDimensions(getWindowDimensions());\r\n\t\t};\r\n\r\n\t\twindow.addEventListener(resize, handleChange);\r\n\r\n\t\treturn () => {\r\n\t\t\twindow.removeEventListener(resize, handleChange);\r\n\t\t};\r\n\t}, []);\r\n\r\n\treturn windowDimensions;\r\n};\r\n","\r\nexport const fetchAccessToken = async (url: string, isTeacher?:boolean): Promise<Response> => {\r\n\tconst payload = {\r\n\t\tvariables: { old_token: localStorage.getItem(isTeacher ? \"refreshTokenT\" : \"refreshToken\") },\r\n\t\tquery: `mutation($old_token: String!) {\r\n\t\tRefreshUser(old_token: $old_token) {\r\n\t\t\taccessToken\r\n\t\t\trefreshToken\r\n\t\t}\r\n\t}`,\r\n\t};\r\n\treturn fetch(url, {\r\n\t\tmethod: \"POST\",\r\n\t\tbody: JSON.stringify(payload),\r\n\t\theaders: {\r\n\t\t\tauthorization: \"null\",\r\n\t\t\t\"Content-Type\": \"application/json; charset=utf-8\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t},\r\n\t}).then(async (res) => {\r\n\t\tconst response = await res.json();\r\n\t\treturn response.data;\r\n\t});\r\n};\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { VideoNav } from \"../../../../globalComponents/VideoNav\";\r\nimport { MediaType, VideoType } from \"../../../model\";\r\nimport ReactPlayer from 'react-player';\r\n\r\n\r\nexport type ILessonPageVideoProps = {\r\n key: string;\r\n video: string;\r\n videoType: VideoType;\r\n isLesson?:boolean;\r\n shouldMute?: boolean;\r\n};\r\n\r\nconst LessonPageVideo: React.FC<ILessonPageVideoProps> = (\r\n props: ILessonPageVideoProps\r\n) => {\r\n const [src, setSrc] = useState<string>(props.video);\r\n const videoRef = useRef<any>();\r\n const [isPlaying, setisPlaying] = useState(true);\r\n\r\n const handlePlay = () => { \r\n if (props.videoType === VideoType.AZURE) {\r\n const player = amp(\"player\");\r\n player.play();\r\n }else if(props.videoType === VideoType.LOCALVIDEO && videoRef.current instanceof HTMLVideoElement){\r\n videoRef.current.play();\r\n }else if(props.videoType === VideoType.STREAM && videoRef.current instanceof ReactPlayer){\r\n setisPlaying(true);\r\n }\r\n };\r\n\r\n const handlePause = () => {\r\n if (props.videoType === VideoType.AZURE) {\r\n const player = amp(\"player\");\r\n player.pause();\r\n }else if(props.videoType === VideoType.LOCALVIDEO && videoRef.current instanceof HTMLVideoElement){\r\n videoRef.current.pause();\r\n }else if(props.videoType === VideoType.STREAM && videoRef.current instanceof ReactPlayer){\r\n setisPlaying(false);\r\n \r\n }\r\n };\r\n\r\n const createVideoPlayer = (amp) => {\r\n const video = amp(\r\n \"player\",\r\n {\r\n techOrder: [\r\n \"azureHtml5JS\",\r\n \"flashSS\",\r\n \"html5FairPlayHLS\",\r\n \"silverlightSS\",\r\n \"html5\",\r\n ],\r\n nativeControlsForTouch: false,\r\n controls: false,\r\n logo: { enabled: false },\r\n width: \"100%\",\r\n heigth: \"100%\",\r\n },\r\n function () {\r\n console.log(\"Good to go!\");\r\n // add an event listener\r\n video.addEventListener(\"ended\", function () {\r\n console.log(\"Finished!\");\r\n video.currentTime(video.duration());\r\n });\r\n }\r\n );\r\n\r\n video.addEventListener(amp.eventName.error, (errorDetails) => {\r\n console.log(errorDetails);\r\n });\r\n return video;\r\n };\r\n const waitForAmp = () => {\r\n return new Promise((resolve, reject) => {\r\n let waited = 0;\r\n const wait = (interval) => {\r\n setTimeout(() => {\r\n waited += interval;\r\n const amp = window[\"amp\"];\r\n if (amp !== undefined) {\r\n console.log(\"play resolved\");\r\n return resolve(amp);\r\n }\r\n if (waited >= 3000 * 100) {\r\n console.log(\"play failed\");\r\n return reject();\r\n }\r\n wait(interval * 2);\r\n return null;\r\n }, interval);\r\n };\r\n wait(30);\r\n });\r\n };\r\n\r\n const renderRenderer = () => {\r\n waitForAmp()\r\n .then((amp) => {\r\n const player = createVideoPlayer(amp);\r\n player.src([{ src: src, type: \"application/vnd.ms-sstr+xml\" }]);\r\n })\r\n .catch((e) =>\r\n console.error(\"Could not found Azure Media Player plugin\", e)\r\n );\r\n };\r\n\r\n const renderPlayer = () => {\r\n if (props.videoType === \"Azure\") {\r\n renderRenderer();\r\n } else if (props.videoType === \"Youtube\") {\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n setSrc(props.video);\r\n if (props.videoType === \"Azure\") {\r\n renderRenderer();\r\n\r\n return () => {\r\n const player = amp(\"player\");\r\n player.dispose();\r\n };\r\n }\r\n }, [props.video]);\r\n\r\n if (props.videoType === \"Azure\") {\r\n return (\r\n <>\r\n <video\r\n id=\"player\"\r\n className=\" azuremediaplayer amp-default-skin azurePlayer\"\r\n playsInline={true}\r\n controls={false}\r\n ref={videoRef}\r\n >\r\n <source src={src} type=\"application/vnd.ms-sstr+xml\" />\r\n <source src={src} type=\".mp4\" />\r\n </video>\r\n <VideoNav\r\n hasVideoEnded={false}\r\n handlePlayClick={handlePlay}\r\n handlePauseClick={handlePause}\r\n />\r\n </>\r\n );\r\n } else if (props.videoType === \"Youtube\") {\r\n return <video></video>;\r\n } else if (props.videoType === VideoType.LOCALVIDEO) {\r\n return (\r\n <>\r\n <video controls={false} ref={videoRef}>\r\n <source src={src}/>\r\n </video>\r\n <VideoNav hasVideoEnded={false} handlePlayClick={handlePlay} handlePauseClick={handlePause}/>\r\n </>\r\n );\r\n }else if(props.videoType === VideoType.STREAM){\r\n return(\r\n <>\r\n <ReactPlayer url={props.video} controls={props.isLesson ? true : false} muted={props.shouldMute} ref={videoRef} playing={isPlaying}/>\r\n {props.isLesson ? null : <VideoNav hasVideoEnded={false} handlePlayClick={handlePlay} handlePauseClick={handlePause} isPlaying={isPlaying}/>}\r\n </>\r\n )\r\n } \r\n else {\r\n return <span>\"WHOOPS SOMETHING WENT WRONG\"</span>;\r\n }\r\n};\r\n\r\nexport { LessonPageVideo };\r\n","export enum LanguageType {\r\n English = \"English\",\r\n Danish = \"Dansk\",\r\n Polish = \"Polski\",\r\n German = \"Deutsch\",\r\n}\r\n\r\nexport interface Translation {\r\n generalMessages: GeneralMessages;\r\n ultimateTopbar: UltimateTopBar;\r\n indexSounds: IndexSounds;\r\n loginPage: LoginPage;\r\n dashboardPage: DashboardPage;\r\n lessonPage: LessonPage;\r\n createLessonPage: CreateLessonPage;\r\n studentPage: StudentPage;\r\n teacherQuizPage: TeacherQuizPage;\r\n studentLoginPage: StudentLoginPage;\r\n studentSettings: StudentSettings;\r\n studentDashboardPage: StudentDashboardPage;\r\n studentQuizPage: StudentQuizPage;\r\n teacherStudentPage: TeacherStudentPage;\r\n}\r\n\r\ninterface GeneralMessages {\r\n seeYourErrors: string;\r\n backButton: string;\r\n yes: string;\r\n no: string;\r\n both: string;\r\n allow: string;\r\n deny: string;\r\n}\r\ninterface UltimateTopBar {\r\n education: string;\r\n studentsNstats: string;\r\n orders: string;\r\n calibrateProjector: string;\r\n importFromEP: string;\r\n settings: string;\r\n logout: string;\r\n}\r\n\r\ninterface IndexSounds {\r\n one: string;\r\n two: string;\r\n three: string;\r\n four: string;\r\n}\r\ninterface LoginPage {\r\n loginForm: {\r\n loginButton: string;\r\n userNamePlaceholder: string;\r\n passwordPlaceholder: string;\r\n };\r\n wrongInfoError: string;\r\n rememberLoginInfo: string;\r\n}\r\n\r\ninterface DashboardPage {\r\n topbar: {\r\n lecture: string;\r\n test: string;\r\n search: string;\r\n sort: {\r\n sortPlaceholder: string;\r\n byDate: string;\r\n byType: string;\r\n byCategory: string;\r\n byReleaseType: string;\r\n };\r\n };\r\n table: {\r\n type: {\r\n lesson: string;\r\n test: string;\r\n };\r\n category: string;\r\n created: string;\r\n status: {\r\n unpublished: string;\r\n published: string;\r\n offline: string;\r\n };\r\n edit: string;\r\n details: string;\r\n };\r\n}\r\n\r\ninterface LessonPage {\r\n of: string;\r\n initialPage: {\r\n scanQR: string;\r\n welcomeTo: string;\r\n continue: string;\r\n skip: string;\r\n };\r\n}\r\ninterface CreateLessonPage {\r\n slide: string;\r\n addTag: string;\r\n movePicture: string;\r\n withPicture: string;\r\n addSubject: string;\r\n fromPicture: string;\r\n insert: string;\r\n page: string;\r\n uploadMP3: string;\r\n notePlaceholder: string;\r\n save: string;\r\n finish: string;\r\n newSlide: {\r\n chooseWhereToGet: string;\r\n noneChosen: string;\r\n teoriundervisning: string;\r\n ownMaterial: string;\r\n link: string;\r\n };\r\n}\r\n\r\ninterface StudentPage {\r\n topbar: {\r\n actions: {\r\n placeholder: string;\r\n gatheredStats: string;\r\n archiveChosen: string;\r\n resendPassword: string;\r\n usefulInfo: string;\r\n yourInfo: string;\r\n category: string;\r\n };\r\n searchPlaceholder: string;\r\n sort: {\r\n placeholder: string;\r\n newest: string;\r\n alphabetical: string;\r\n teamStart: string;\r\n activeCodes: string;\r\n archivednExpiredCodes: string;\r\n noCodes: string;\r\n byPercentage: string;\r\n };\r\n };\r\n table: {\r\n category: string;\r\n mobileNumber: string;\r\n password: string;\r\n expiry: string;\r\n stats: string;\r\n archive: string;\r\n removeAccess: string;\r\n addAccess: string;\r\n extendedStats: {\r\n theseSlidesAreMarked: string;\r\n latestActivity: string;\r\n };\r\n };\r\n}\r\n\r\ninterface TeacherQuizPage {\r\n quizSetup: {\r\n noOfTeoriSlides: string;\r\n speed: {\r\n header: string;\r\n slow: string;\r\n normal: string;\r\n fast: string;\r\n };\r\n languageSettings: {\r\n header: string;\r\n none: string;\r\n arabic: string;\r\n danish: string;\r\n english: string;\r\n german: string;\r\n };\r\n otherSetting: {\r\n header: string;\r\n includeFromTeoriDK: string;\r\n saveForLater: string;\r\n nameOfTestPlaceholder: string;\r\n };\r\n strengthTest: string;\r\n strengthTestDescription: string;\r\n startTest: string;\r\n close: string;\r\n };\r\n quizQRGather: {\r\n teoriTestStarting: string;\r\n scanIfNotLoggedIn: string;\r\n openYourPhone: string;\r\n };\r\n quizMain: {\r\n left: string;\r\n right: string;\r\n };\r\n quizResult: {\r\n studentList: {\r\n chooseAll: string;\r\n };\r\n picture: string;\r\n };\r\n}\r\n\r\n/*HERE ON AND DOWN IT IS THE STUDENT THINGS */\r\ninterface StudentLoginPage {\r\n mobileNumberPlaceholder: string;\r\n backButton: string;\r\n continueButton: string;\r\n expiredCode: string;\r\n extend: string;\r\n Initial: {\r\n loginButton: string;\r\n errorMessage: string;\r\n loginSuccess: string;\r\n phonenumberLabel: string;\r\n passwordLabel: string;\r\n forgot: string;\r\n registerDescription: string;\r\n haveAccessCode: string;\r\n };\r\n FirstLogin: {\r\n firstTimeVisiting: string;\r\n havePasscode: string;\r\n };\r\n Confirmation: {\r\n sendConfirmationCode: string;\r\n weSentASMS: string;\r\n errorMessage: string;\r\n };\r\n AccessCode: {\r\n typeCodePlaceholder: string;\r\n errorMessages: {\r\n notFound: string;\r\n alreadyUsed: string;\r\n mobileUsed: string;\r\n expired: string;\r\n success: string;\r\n alreadyExisting: string;\r\n };\r\n };\r\n CreatePIN: {\r\n createPIN: string;\r\n repeatPIN: string;\r\n errorMessage: string;\r\n setPIN: string;\r\n };\r\n InformationSide: {\r\n header: string;\r\n Initial: {\r\n underHeader: string;\r\n underHeaderExplainer: string;\r\n buttonText?: string;\r\n };\r\n FirstLogin: {\r\n underHeader: string;\r\n underHeaderExplainer: string;\r\n };\r\n Confirmation: {\r\n underHeader: string;\r\n underHeaderExplainer: string;\r\n };\r\n AccessCode: {\r\n underHeader: string;\r\n underHeaderExplainer: string;\r\n };\r\n CreatePIN: {\r\n underHeader: string;\r\n underHeaderExplainer: string;\r\n };\r\n };\r\n}\r\n\r\ninterface StudentSettings {\r\n yourInfo: string;\r\n description: string;\r\n inputLabels: {\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n mobileNr: string;\r\n };\r\n yourDrivingSchool: string;\r\n languageSelect: {\r\n headline: string;\r\n danish: string;\r\n english: string;\r\n };\r\n categorySelect: {\r\n headline: string;\r\n car: string;\r\n motorcycle: string;\r\n };\r\n saveSettings: string;\r\n iOSCheckbox: string;\r\n iOSExtended: string;\r\n iOSAlertText: string;\r\n continue: string;\r\n}\r\n\r\ninterface StudentDashboardPage {\r\n profileSettings: string;\r\n header: string;\r\n headerSpan: string;\r\n seeYourErrors: string;\r\n errorShorthand: string;\r\n\r\n trafficLightBox: {\r\n information: string;\r\n explanation: string;\r\n yourLastResult: string;\r\n outofTen: string;\r\n seeCalc: string;\r\n notReady: {\r\n header: string;\r\n span: string;\r\n };\r\n onTheWay: {\r\n header: string;\r\n span: string;\r\n };\r\n Ready: {\r\n header: string;\r\n span: string;\r\n };\r\n };\r\n InfoBox: {\r\n header: string;\r\n yourCalendar: string;\r\n welcome: string;\r\n betaText: string;\r\n ratingOfDrivingSchool: {\r\n header: string;\r\n teoriundervisning: string;\r\n driving: string;\r\n totalExperience: string;\r\n };\r\n important: string;\r\n youHave: string;\r\n daysAnd: string;\r\n hoursLeft: string;\r\n extendAccess: string;\r\n };\r\n startContentBox: {\r\n header: string;\r\n description: string;\r\n };\r\n generalContentBox: {\r\n header: string;\r\n description: string;\r\n };\r\n evalTestsContentBox: {\r\n header: string;\r\n description: string;\r\n button: string;\r\n };\r\n strengthTestContentBox: {\r\n header: string;\r\n description: string;\r\n button: string;\r\n noErrors: string;\r\n };\r\n onlineBookContentBox: {\r\n header: string;\r\n description: string;\r\n button: string;\r\n buttonDescription: string;\r\n };\r\n drivingSchoolLessonsContentBox: {\r\n header: string;\r\n description: string;\r\n };\r\n beforeDrivingTestContentBox: {\r\n header: string;\r\n description: string;\r\n };\r\n practicalInfoBox: {\r\n header: string;\r\n authorities: {\r\n header: string;\r\n pricesNfee: string;\r\n infoAboutKlippekort: string;\r\n };\r\n aboutTeori: {\r\n header: string;\r\n howToProlong: string;\r\n problemWithTests: string;\r\n };\r\n drivingSchoolCourse: {\r\n header: string;\r\n whenSmoothTrack: string;\r\n documentsTeoriAndTest: string;\r\n };\r\n yourOpinion: {\r\n header: string;\r\n areYouSatisfied: string;\r\n yes: string;\r\n no: string;\r\n };\r\n };\r\n}\r\ninterface StudentQuizPage {\r\n Setup: {\r\n freeQuizFreeTest: string;\r\n setupOfTest: string;\r\n smallHeader: string;\r\n learningMode: string;\r\n learningModeDescription: string;\r\n standardMode: string;\r\n standardModeDescription: string;\r\n chooseTestSound: string;\r\n chooseTestSubs: string;\r\n testSubPlaceholder: string;\r\n startTest: string;\r\n iOSExplainer: string;\r\n languages: {\r\n none: string;\r\n danish: string;\r\n english: string;\r\n arabic: string;\r\n faerosk: string;\r\n polish: string;\r\n german: string;\r\n //TO BE EXTENDED\r\n };\r\n };\r\n Quiz: {\r\n yes: string;\r\n no: string;\r\n errorPage: {\r\n somethingwentWrong: string;\r\n tryagain: string;\r\n returntodashboard: string;\r\n };\r\n loadingText: string;\r\n soundError: {\r\n important: string;\r\n description: string;\r\n };\r\n };\r\n End: {\r\n purchaseAccess: string;\r\n dontLikeImage: string;\r\n dontLikeImageShorthand: string;\r\n soundExplained: string;\r\n soundExplainedShorthand: string;\r\n youpassed: string;\r\n youfailed: string;\r\n youhad: string;\r\n imagesPassed: string;\r\n };\r\n}\r\n\r\ninterface TeacherStudentPage {\r\n stats: {\r\n description: string;\r\n progress: string;\r\n average: string;\r\n };\r\n placholder: {\r\n youAreLoggedIn: string;\r\n feedback: string;\r\n };\r\n graduationPage: {\r\n correct: string;\r\n outOf: string;\r\n youHad: string;\r\n passed: string;\r\n failed: string;\r\n amountOfCorrect: string;\r\n };\r\n}\r\n","import React, { useEffect, useState } from \"react\";\r\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\r\nimport PauseIcon from \"@material-ui/icons/Pause\";\r\nimport \"./style/VideoNav.scss\"\r\n\r\nexport type IVideoNavProps = {\r\n hasVideoEnded: boolean;\r\n handlePlayClick: () => void;\r\n handlePauseClick: () => void;\r\n isPlaying?: boolean\r\n};\r\n\r\nconst VideoNav: React.FC<IVideoNavProps> = (props: IVideoNavProps) => {\r\n const [isShowing, setisShowing] = useState(true);\r\n const [isPlaying, setisPlaying] = useState(false);\r\n const playIcon = (\r\n <PlayArrowIcon style={{ width: \"2.8em\", height: \"2.8em\" }} />\r\n );\r\n const pauseIcon = <PauseIcon style={{ width: \"2.8em\", height: \"2.8em\" }} />;\r\n\r\n const handlePlayClick = () => {\r\n props.handlePlayClick();\r\n setisPlaying(true);\r\n setTimeout(() => {\r\n setisShowing(false);\r\n }, 500);\r\n };\r\n const handlePauseClick = () => {\r\n props.handlePauseClick();\r\n setisPlaying(false);\r\n setisShowing(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (isPlaying) {\r\n setisShowing(true);\r\n setTimeout(() => {\r\n setisShowing(false);\r\n }, 1000);\r\n }\r\n }, []);\r\n useEffect(() => {\r\n if(props.isPlaying){\r\n setisPlaying(true);\r\n setisShowing(false);\r\n }\r\n }, [props.isPlaying]);\r\n return (\r\n <div className={isShowing ? \"VideoNav\" : \"VideoNav-fade-out\"} onClick={isPlaying ? handlePauseClick : handlePlayClick}>\r\n <button >{isPlaying ? pauseIcon : playIcon}</button>\r\n </div>\r\n );\r\n};\r\n\r\nexport { VideoNav };\r\n","export interface BaseType{\r\n id: number;\r\n}\r\nexport enum LoginStep{\r\n Initial = 0,\r\n FirstLogin= 1,\r\n FirstLoginAccessCode=2,\r\n Confirmation = 3,\r\n CreatePin=4,\r\n AccessExpired=5,\r\n ConfirmMobileAccess=6,\r\n}\r\n\r\nexport enum dashboardStatus{\r\n Unpublished = 0,\r\n Published = 1,\r\n Offline = 2\r\n}\r\n\r\nexport enum dashboardType{\r\n Lesson = 0,\r\n Test = 1,\r\n TestConfig = 2,\r\n}\r\n\r\nexport enum QuizState {\r\n Setup = 0,\r\n Quiz = 1,\r\n End = 2\r\n}\r\n\r\nexport enum VideoType {\r\n YOUTUBE = \"Youtube\",\r\n STREAM = \"Stream\",\r\n LOCALVIDEO = \"LocalVideo\",\r\n AZURE = \"Azure\"\r\n}\r\nexport enum LessonType {\r\n VIDEO = \"Video\",\r\n IMAGE = \"Image\",\r\n\tSTREETVIEW = \"StreetView\",\r\n YOUTUBE = \"Youtube\",\r\n TEORIIMAGE = \"TeoriImage\",\r\n\tTEORIVIDEO = \"TeoriVideo\",\r\n}\r\n\r\nexport enum MediaType {\r\n STREAM = \"STREAM\", //COULD BE VIMEO *NOT AZURE*\r\n LOCALVIDEO = \"LOCALVIDEO\",\r\n YOUTUBE = \"YOUTUBE\",\r\n WEB_LINK = \"WEBLINK\", //THIS COULD BE A LINK TO A WEBSITE OR MAPS\r\n AZUREVIDEO = \"AZURE\", //A STREAMING LINK TO AZURE \r\n AZUREIMG = \"AZUREIMG\", //A LINK TO THE STORAGE ACCOUNT,\r\n //WE STILL NEED A TYPE FOR WHEN IMAGES ARE NOT STORED IN AZURE\r\n QRCODE = \"QRCODE\"//A SPECIAL TYPE FOR POPUP\r\n\r\n\r\n}\r\n\r\nexport enum contentType {\r\n STARTCONTENT = 5,\r\n SUBJECTS = 6,\r\n EVALTEST = 3,\r\n ONLINEBOOK = 1,\r\n SCHOOLLESSONS = 4,\r\n BEFOREDRIVINGTEST = 2,\r\n\r\n}\r\n\r\n/* USES achievement_desc_type from the API */\r\nexport enum typeOfContentDashboard {\r\n STREAM = 1,\r\n YOUTUBE = 2,\r\n WEBLINK = 3,\r\n AZUREVIDEO = 4,\r\n AZUREIMG = 5,\r\n BOOK = 6,\r\n QUIZ = 7,\r\n DOWNLOAD = 8,\r\n TAG = 9,\r\n SLIDES = 10,\r\n LESSON = 11\r\n}\r\n\r\n\r\n\r\nexport enum AchievementGradeStatus {\r\n NotTouched = -1,\r\n Failed = 0,\r\n Completed = 1\r\n\r\n}\r\n\r\nexport enum Category {\r\n A = 1,\r\n B = 2,\r\n C = 3,\r\n \"B/E\" = 4,\r\n}\r\n\r\n\r\nexport interface AdminStudentTableRow extends BaseType{\r\n firstName: string;\r\n lastName: string;\r\n phoneNumber: string;\r\n category: string;\r\n accessCode: string;\r\n schoolName: string;\r\n startDate: Date;\r\n expirationDate: Date;\r\n\r\n}\r\n\r\n\r\nexport interface DashboardTableRow extends BaseType {\r\n type: dashboardType;\r\n name: string;\r\n isOwn: boolean;\r\n tags: Tag[];\r\n category: string;\r\n createDate: Date;\r\n status: string\r\n default?: boolean;\r\n configs?: any;\r\n}\r\n\r\n\r\nexport interface StudentTableRow extends BaseType {\r\n isMarked: boolean;\r\n correctQuizzes: number;\r\n preparationStatus: number;\r\n achivementProgress: string;\r\n name: string;\r\n creationDate: Date;\r\n startDate: Date;\r\n category: string;\r\n mobileNumber: string;\r\n code: string;\r\n codeExpiry: Date;\r\n stats: any;\r\n hasMarked?: boolean;\r\n totalQuizzes?: string; \r\n\r\n}\r\n\r\nexport interface ActivityTableData extends BaseType {\r\n date: Date;\r\n title: string;\r\n answers: string;\r\n type: number;\r\n quizID?: string;\r\n activity_time?: string;\r\n}\r\nexport interface ContentBoxInfo extends BaseType{\r\n status: AchievementGradeStatus;\r\n name: string;\r\n has_fails: boolean;\r\n type: contentType;\r\n achievement_id: number;\r\n contentLocation: string;\r\n contentType: number;\r\n tagString?: string;\r\n slideString?: string;\r\n onlineQuizID?: string;\r\n quizLanguage?: string;\r\n\r\n \r\n}\r\n\r\nexport interface StudentSetupLanguages extends BaseType {\r\n name: string;\r\n}\r\n\r\n\r\n/*I define the structure of how slides will function here*/\r\nexport interface Tag extends BaseType{\r\n name: string;\r\n}\r\nexport interface Slide extends BaseType{\r\n media: string;\r\n tags?: Tag[];\r\n introQuestion: string;\r\n}\r\nexport interface Statement extends BaseType{\r\n sound?: string;\r\n text: string;\r\n correctAnswer: number;\r\n elaboration?: string;\r\n}\r\n\r\nexport interface EndStatement extends Statement{\r\n answer?: number;\r\n explanation: string;\r\n}\r\n\r\nexport interface EndSlide extends Slide{\r\n passed?: boolean;\r\n statements: EndStatement[];\r\n isMarked?: boolean;\r\n tempMedia?: string;\r\n mediaType: MediaType;\r\n explanation?: string;\r\n progressID: string;\r\n}\r\n\r\n\r\n/*Structure of a Teacher Quiz */\r\nexport interface ClassQuizStatement extends BaseType{\r\n text: string;\r\n sound: string;\r\n indexSound: string;\r\n subtitle?: string;\r\n}\r\n\r\nexport interface ClassQuizSlide extends BaseType{\r\n media: string;\r\n introQuestionSound: string;\r\n introQuestionText?: string;\r\n statements: ClassQuizStatement[];\r\n introQuestionSubtitle?: string;\r\n isVideo: boolean;\r\n}\r\n\r\n/*Structure of TeacherStudent Quiz */\r\nexport interface TeacherStudentStatement extends BaseType{\r\n progressID?: number;\r\n correctAnswer: number;\r\n answer?: number;\r\n}\r\nexport interface TeacherStudentSlide extends BaseType{\r\n statements: TeacherStudentStatement[];\r\n}\r\n\r\n//Structure of Student Quiz\r\nexport interface StudentQuizStatement extends Statement{\r\n soundMedia: string;\r\n progressID: number;\r\n answer?: number;\r\n explanation: string;\r\n}\r\nexport interface StudentQuizSlide extends Slide{\r\n introQuestionMedia: string;\r\n mediaType: MediaType;\r\n statements: StudentQuizStatement[];\r\n isMarked?: boolean;\r\n}\r\n\r\nexport interface StudentQuiz{\r\n speed: number;\r\n slides: StudentQuizSlide[];\r\n indexPlayer: HTMLAudioElement;\r\n soundPlayer: HTMLAudioElement;\r\n\r\n}\r\n\r\n\r\n/*Structure of how the QuizResult types is */\r\nexport interface ResultSlide extends Slide{\r\n backendID: string;\r\n introQuestionMedia?: string;\r\n statements: Statement[];\r\n isVideo?: boolean;\r\n}\r\nexport interface ResultStudentSlide extends BaseType{\r\n passed?: boolean;\r\n}\r\nexport interface ResultStudent extends BaseType{\r\n name: string;\r\n slides: ResultStudentSlide[];\r\n}\r\n\r\n/*Structure of Lessons //THIS IS DIFFERENT BECAUSE LESSONSLIDE CAN HAVE DIFFERENT TYPE OF MEDIAS*/\r\nexport interface LessonSlide extends BaseType {\r\n editID?: number;\r\n translationID?: string;\r\n media: string;\r\n tempFile?: File | string;\r\n content_id: string;\r\n tags?: Tag[];\r\n type: MediaType;\r\n notes: string;\r\n keywords?: string;\r\n sound?: string | File;\r\n}\r\n\r\nexport interface CreateQuizStatementSound extends BaseType{\r\n soundLocation: string;\r\n soundText: string;\r\n}\r\n\r\nexport interface CreateQuizStatementElaboration extends BaseType{\r\n editID?: string;\r\n languageID: number;\r\n text: string;\r\n isOriginal?: boolean;\r\n}\r\n\r\nexport interface CreateQuizStatement extends BaseType{\r\n editID?: number;\r\n hasError?: boolean;\r\n soundAndText: CreateQuizStatementSound;\r\n answer: number;\r\n elaboration: CreateQuizStatementElaboration[];\r\n originalIndex: number;\r\n}\r\n\r\nexport interface CreateQuizExplanation extends BaseType{\r\n editID?: string;\r\n languageID : number;\r\n media: string;\r\n tempFile?: File | string;\r\n isOriginal?: boolean;\r\n}\r\n\r\nexport interface CreateQuizSlide extends BaseType{\r\n editID?: number;\r\n hasError?: boolean;\r\n media: string;\r\n soundExplanations?: CreateQuizExplanation[]\r\n tempFile?: File | string;\r\n content_id: string;\r\n tags?: Tag[],\r\n type: MediaType;\r\n introQuestion: number;\r\n statements: CreateQuizStatement[];\r\n slideFilter: string;\r\n}","import React, { FC, useEffect, useRef } from \"react\";\r\nimport { INPUT_TAG_NAME } from \"../constants/viewConstants\";\r\nimport { getNextSiblingsFromRefObject, getPreviousSiblingsFromRefObject } from \"../services/utilFunctions\";\r\n\r\nexport enum InputType {\r\n\tText = \"text\",\r\n\tNumber = \"number\",\r\n\tPassword = \"password\"\r\n}\r\n\r\nexport interface SingleCharInputProps {\r\n\tordinalNumber: number;\r\n\thandleKeyPress: any;\r\n\tisFirstInRow: boolean;\r\n\tinputType: InputType;\r\n\tplaceholder: string;\r\n\tvalue: number | string;\r\n\thandleSetValue: (value: string, index: number) => void;\r\n\tclassName: string;\r\n}\r\n\r\nexport const SingleCharInput: FC<SingleCharInputProps> = (props: SingleCharInputProps) => {\r\n\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (props.isFirstInRow) {\r\n\t\t\tinputRef.current?.focus();\r\n\t\t}\r\n\t}, []);\r\n\r\n\t/**\r\n\t * Function is finding sibling of input with current actions and it is is input it call focus action otherwise\r\n\t * it finds next html element which is type input\r\n\t * When there are no more nextSibling which are inputs the focus chain is closed\r\n\t */\r\n\tconst focusNextInput = (): void => {\r\n\t\tlet input: HTMLInputElement = getNextSiblingsFromRefObject<HTMLInputElement, HTMLInputElement>(inputRef);\r\n\t\twhile (!(input?.tagName === INPUT_TAG_NAME || input === null)) {\r\n\t\t\tinput = input?.nextSibling as HTMLInputElement;\r\n\t\t}\r\n\t\tinput?.focus();\r\n\t};\r\n\r\n\tconst focusFirstInput = (): void => {\r\n\t\tlet input: HTMLInputElement = getPreviousSiblingsFromRefObject<HTMLInputElement, HTMLInputElement>(inputRef);\r\n\t\twhile (!(input?.tagName === INPUT_TAG_NAME || input === null)) {\r\n\t\t\tinput = input?.previousSibling as HTMLInputElement;\r\n\t\t}\r\n\t\tconst parent = input?.parentElement;\r\n\t\tif (parent) {\r\n\t\t\tif (parent.firstChild) {\r\n\t\t\t\tinput = parent.firstChild as HTMLInputElement;\r\n\r\n\t\t\t\tinput.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleKeyPress = (event) => {\r\n\t\tif (event.keyCode === 8) {\r\n\t\t\tfocusFirstInput();\r\n\t\t\tprops.handleKeyPress(event);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n\r\n\t\tif (event.target.value !== \"\") {\r\n\t\t\tfocusNextInput();\r\n\t\t}\r\n\t\tif (event.target.value) {\r\n\t\t\tconst substitute = event.target.value.split(\"\");\r\n\t\t\tif (substitute.length > 1) {\r\n\t\t\t\tsubstitute.shift();\r\n\t\t\t}\r\n\r\n\t\t\tprops.handleSetValue(substitute[0].toUpperCase(), props.ordinalNumber);\r\n\t\t} else {\r\n\t\t\tprops.handleSetValue(event.target.value.toUpperCase(), props.ordinalNumber);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<input\r\n\t\t\tclassName={props.className}\r\n\t\t\tref={inputRef}\r\n\t\t\ttype={props.inputType}\r\n\t\t\tmaxLength={2}\r\n\t\t\tplaceholder={props.placeholder}\r\n\t\t\tvalue={props.value}\r\n\t\t\tonChange={handleChange}\r\n\t\t\tonKeyUp={handleKeyPress}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default SingleCharInput;\r\n","import { BlobServiceClient } from \"@azure/storage-blob\";\r\nimport { AZURE_STORAGE_ACCOUNT } from \"../constants/APIConstants\";\r\n\r\nconst account = AZURE_STORAGE_ACCOUNT;\r\n\r\nexport async function uploadOwnContent(\r\n SASkey: string,\r\n file: File,\r\n userID: number\r\n) {\r\n\r\n try {\r\n const blobServiceClient = new BlobServiceClient(\r\n `https://${account}.blob.core.windows.net?${SASkey}`\r\n );\r\n const container = blobServiceClient.getContainerClient(`user${userID}`);\r\n await container.createIfNotExists({ access: \"blob\" });\r\n\r\n const blockBlobClient = container.getBlockBlobClient(file.name);\r\n const response = await blockBlobClient.upload(file, file.size, {blobHTTPHeaders: {blobContentType: file.type}});\r\n return blockBlobClient.url;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nexport async function uploadLessonSound(\r\n SASkey: string,\r\n file: File,\r\n userID: number,\r\n){\r\n try {\r\n const blobServiceClient = new BlobServiceClient(\r\n `https://${account}.blob.core.windows.net?${SASkey}`\r\n );\r\n const container = blobServiceClient.getContainerClient(`user${userID}`);\r\n\r\n await container.createIfNotExists({ access: \"blob\" });\r\n\r\n const blockBlobClient = container.getBlockBlobClient(\"lessonSounds/\" + file.name);\r\n const response = await blockBlobClient.upload(file, file.size, {blobHTTPHeaders: {blobContentType: file.type}});\r\n return blockBlobClient.url.split(\"?sv\")[0];\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nexport async function uploadExplanationSound(\r\n SASkey: string,\r\n file: File,\r\n userID: number,\r\n){\r\n try {\r\n const blobServiceClient = new BlobServiceClient(\r\n `https://${account}.blob.core.windows.net?${SASkey}`\r\n );\r\n const container = blobServiceClient.getContainerClient(`user${userID}`);\r\n\r\n await container.createIfNotExists({ access: \"blob\" });\r\n\r\n const blockBlobClient = container.getBlockBlobClient(\"slideExplanations/\" + file.name);\r\n const response = await blockBlobClient.upload(file, file.size, {blobHTTPHeaders: {blobContentType: file.type}});\r\n return blockBlobClient.url.split(\"?sv\")[0];\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n","import { Translation } from \"./translationTypes\";\r\nimport index1 from \"./quizSounds/danish/1.mp3\";\r\nimport index2 from \"./quizSounds/danish/2.mp3\";\r\nimport index3 from \"./quizSounds/danish/3.mp3\";\r\nimport index4 from \"./quizSounds/danish/4.mp3\";\r\n\r\nexport const danish: Translation = {\r\n generalMessages: {\r\n backButton: \"tilbage\",\r\n seeYourErrors: \"se dine fejl\",\r\n yes: \"Ja\",\r\n no: \"Nej\",\r\n both: \"Begge\",\r\n allow: \"Tillad\",\r\n deny: \"Afvis\",\r\n },\r\n ultimateTopbar: {\r\n education: \"Undervisning\",\r\n studentsNstats: \"Elever & statistik\",\r\n orders: \"Bestilling\",\r\n calibrateProjector: \"kalibrer projektor\",\r\n importFromEP: \"importer fra EasyPiecy\",\r\n settings: \"Profil\",\r\n logout: \"LOG UD\",\r\n },\r\n indexSounds: {\r\n one: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/1.mp3\",\r\n two: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/2.mp3\",\r\n three: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/3.mp3\",\r\n four: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/4.mp3\",\r\n },\r\n loginPage: {\r\n loginForm: {\r\n loginButton: \"Login\",\r\n userNamePlaceholder: \"Indtast e-mail\",\r\n passwordPlaceholder: \"Indtast adgangskode\",\r\n },\r\n wrongInfoError: \"Adgangskode eller e-mail kan ikke findes\",\r\n rememberLoginInfo: \"Husk login\",\r\n },\r\n\r\n dashboardPage: {\r\n topbar: {\r\n lecture: \"lektion\",\r\n test: \"test\",\r\n search: \"søg\",\r\n sort: {\r\n sortPlaceholder: \"Sorter indhold\",\r\n byDate: \"Sorter efter dato\",\r\n byType: \"Sorter efter type\",\r\n byCategory: \"Sorter efter kategori\",\r\n byReleaseType: \"Sorter efter udgivelsestype\",\r\n },\r\n },\r\n table: {\r\n type: {\r\n lesson: \"lektion\",\r\n test: \"test\",\r\n },\r\n category: \"kategori\",\r\n created: \"oprettet\",\r\n status: {\r\n unpublished: \"ikke udgivet\",\r\n published: \"udgivet\",\r\n offline: \"offline\",\r\n },\r\n edit: \"rediger\",\r\n details: \"detaljer\",\r\n },\r\n },\r\n lessonPage: {\r\n of: \"af\",\r\n initialPage: {\r\n scanQR: \"Scan QR koden for at logge ind!\",\r\n welcomeTo: \"Du har valgt lektionen: \",\r\n continue: \"fortsæt\",\r\n skip: \"skip\",\r\n },\r\n },\r\n createLessonPage: {\r\n slide: \"Slide\",\r\n addTag: \"tilføj tag\",\r\n movePicture: \"flyt billede\",\r\n withPicture: \"med billede\",\r\n addSubject: \"indsæt emne\",\r\n fromPicture: \"fra billede\",\r\n insert: \"indsæt\",\r\n page: \"side\",\r\n uploadMP3: \"Upload MP3 fil\",\r\n notePlaceholder: \"Note\",\r\n save: \"Gem\",\r\n finish: \"Udgiv\",\r\n newSlide: {\r\n chooseWhereToGet: \"Vælg hvor du vil have indholdet fra\",\r\n noneChosen: \"Intet valgt\",\r\n teoriundervisning: \"Teoriundervisning\",\r\n ownMaterial: \"Eget materiale\",\r\n link: \"Link\",\r\n },\r\n },\r\n studentPage: {\r\n topbar: {\r\n actions: {\r\n placeholder: \"Vælg handling\",\r\n gatheredStats: \"Samlet statistik\",\r\n archiveChosen: \"Arkiver valgte\",\r\n resendPassword: \"Gensend adgangskode (SMS)\",\r\n category: \"Kategori\",\r\n yourInfo: \"Dine info\",\r\n usefulInfo: \"Nyttige info\",\r\n },\r\n searchPlaceholder: \"søg\",\r\n sort: {\r\n placeholder: \"Sorter indhold\",\r\n newest: \"Nyeste først\",\r\n alphabetical: \"Alfabetisk\",\r\n teamStart: \"Efter holdstart dato\",\r\n activeCodes: \"Kun med aktive adgangskoder\",\r\n archivednExpiredCodes: \"Kun arkiverede / udløbne\",\r\n noCodes: \"Kun elever uden adgangskoder\",\r\n byPercentage: \"Sorter efter %\",\r\n },\r\n },\r\n table: {\r\n category: \"kategori\",\r\n mobileNumber: \"mob.nr\",\r\n password: \"adgangskode\",\r\n expiry: \"udløb\",\r\n stats: \"statistik\",\r\n archive: \"arkiver\",\r\n removeAccess: \"fjern adgang\",\r\n addAccess: \"tilføj adgang\",\r\n extendedStats: {\r\n theseSlidesAreMarked: \"Eleven har markeret disse teoriprøve billeder\",\r\n latestActivity: \"Seneste aktivitet\",\r\n },\r\n },\r\n },\r\n teacherQuizPage: {\r\n quizSetup: {\r\n noOfTeoriSlides: \"Antal teoriprøve billeder\",\r\n speed: {\r\n header: \"Hastighed\",\r\n slow: \"Langsom\",\r\n normal: \"Normal\",\r\n fast: \"Hurtig\",\r\n },\r\n languageSettings: {\r\n header: \"Sprogindstillinger\",\r\n none: \"Ingen undertekster\",\r\n arabic: \"Arabisk\",\r\n danish: \"Dansk\",\r\n english: \"Engelsk\",\r\n german: \"Tysk (Beta)\",\r\n },\r\n otherSetting: {\r\n header: \"Andre indstillinger\",\r\n includeFromTeoriDK: \"Inkluder teoritests fra Teoriundervisning.dk\",\r\n saveForLater: \"Gem testen til senere brug\",\r\n nameOfTestPlaceholder: \"Testens navn\",\r\n },\r\n strengthTest: \"styrkeprøve\",\r\n strengthTestDescription:\r\n \"Styrkeprøve-knap: Klik pÃ¥ AI-knappen og test eleverne i de emner som de har sværest ved! Vi har indsamlet data fra alle elever, og analyseret os frem til deres svagheder. AI testen er en skræddersyet test til de elever som er logget ind lige nu! (inkluderer alle emner, og viser kun billeder eleverne ikke kan se hjemme, indeholder 10 billeder)\",\r\n startTest: \"start test\",\r\n close: \"afslut\",\r\n },\r\n quizQRGather: {\r\n teoriTestStarting: \"Teoritesten start om lidt\",\r\n scanIfNotLoggedIn: \"Scan hvis du ikke er logget ind\",\r\n openYourPhone: \"Ã…ben din mobiltelefon\",\r\n },\r\n quizMain: {\r\n left: \"Venstre\",\r\n right: \"Højre\",\r\n },\r\n quizResult: {\r\n studentList: {\r\n chooseAll: \"Vælg alle\",\r\n },\r\n picture: \"Billede\"\r\n },\r\n },\r\n studentLoginPage: {\r\n mobileNumberPlaceholder: \"Indtast dit mobilnummer\",\r\n backButton: \"tilbage\",\r\n continueButton: \"videre\",\r\n expiredCode: \"Din adgang er desværre udløbet\",\r\n extend: \"forlæng\",\r\n Initial: {\r\n loginButton: \"login\",\r\n errorMessage: \"Forkert PINkode eller mobilnummer\",\r\n loginSuccess: \"Vent et øjeblik....\",\r\n phonenumberLabel: \"Mobilnummer\",\r\n passwordLabel: \"PIN kode\",\r\n registerDescription: \"Hvis du ikke har en bruger kan du oprette den ved at klikke her:\",\r\n forgot: \"Glemt PIN\",\r\n haveAccessCode: \"Brug aktiveringskode\"\r\n },\r\n FirstLogin: {\r\n firstTimeVisiting: \"Er det første gang du er pÃ¥ det nye Teoriundervisning.dk?\",\r\n havePasscode: \"Har du en aktiveringskode fra et hæfte / en teoribog?\",\r\n },\r\n Confirmation: {\r\n sendConfirmationCode: \"Send bekræftelseskode\",\r\n weSentASMS: \"Vi har sendt dig en SMS med bekræftelseskoden\",\r\n errorMessage: \"Bekræftelseskoden matcher ikke den vi har sendt dig\",\r\n },\r\n AccessCode: {\r\n typeCodePlaceholder: \"Indtast din aktiveringskode\",\r\n errorMessages: {\r\n success: \"Aktiveringskode er tilføjet!\",\r\n expired: \"Aktiveringskode er udløbet\",\r\n notFound: \"Aktiveringskode eksisterer ikke\",\r\n alreadyUsed: \"Aktiveringskode er allerede blevet brugt\",\r\n mobileUsed: \"Mobilnummeret er allerede aktivt\",\r\n alreadyExisting: \"Dit nummer eksisterede allerede sÃ¥ vi har forlænget din adgang!\"\r\n },\r\n },\r\n CreatePIN: {\r\n createPIN: \"opret pinkode\",\r\n repeatPIN: \"gentag pinkode\",\r\n errorMessage: \"Pinkoderne er ikke ens\",\r\n setPIN: \"Bekræft pinkode\"\r\n },\r\n InformationSide: {\r\n header: \"ELEV LOGIN\",\r\n Initial: {\r\n underHeader: \"LOGIN MED PINKODE\",\r\n underHeaderExplainer:\r\n \"Hvis du ikke har en PIN kode, sÃ¥ klik pÃ¥ Opret dig her\",\r\n buttonText: \"Opret dig her\",\r\n },\r\n FirstLogin: {\r\n underHeader: \"FØRSTE GANG\",\r\n underHeaderExplainer: \"Besvar spørsmÃ¥lene til højre, og bliv oprettet i systemet\",\r\n },\r\n Confirmation: {\r\n underHeader: \"TILKNYT DIT MOBILNUMMER\",\r\n underHeaderExplainer:\r\n \"Vi skal bekræfte dit mobilnummer før du bliver oprettet. Dit mobilnummer vil blive brugt som dit login.\",\r\n },\r\n AccessCode: {\r\n underHeader: \"AKTIVERINGSKODE\",\r\n underHeaderExplainer:\r\n \"Indtast din aktiverings- eller adgangskode. NÃ¥r du klikker pÃ¥ “Videreâ€, sÃ¥ behøver du fremadrettet kun at benytte dit mobil nummer og pin for at logge ind. \",\r\n },\r\n CreatePIN: {\r\n underHeader: \"OPRET PINKODE\",\r\n underHeaderExplainer: \"Opret venligst en personlig pinkode til din brugerkonto\",\r\n },\r\n },\r\n },\r\n studentSettings: {\r\n yourInfo: \"Dine konto informationer\",\r\n description:\r\n \"For at din køreskole kan følge og vejlede dig bedst muligt, sÃ¥ er det vigtigt at du indtaster alle oplysninger korrekt. Din køreskole har adgang til din aktivitet pÃ¥ siden samt dine resultater. Det er vigtigt at ALLE nedenstÃ¥ende felter udfyldes.\",\r\n inputLabels: {\r\n firstName: \"Fornavn\",\r\n lastName: \"Efternavn\",\r\n email: \"E-mail\",\r\n mobileNr: \"Mobil nummer\",\r\n },\r\n yourDrivingSchool: \"Din køreskole\",\r\n languageSelect: {\r\n headline: \"Sprog\",\r\n danish: \"Dansk\",\r\n english: \"English\",\r\n },\r\n categorySelect: {\r\n headline: \"Kategori\",\r\n car: \"Bil\",\r\n motorcycle: \"Motorcykel\",\r\n },\r\n saveSettings: \"Gem oplysninger\",\r\n iOSAlertText: \"Vi gør opmærksom pÃ¥, at Apple har valgt at blokere for automatisk afspilning af lyd pÃ¥ IOS (iPhone/iPad). Det er noget vi desværre ikke har 100% magt over, men vi har taget højde for det i denne test. Vi kan dog ikke garantere, at der ikke kan forekomme lyd-fejl i løbet af testen\",\r\n iOSCheckbox: \"Digital Teoriprøve\",\r\n iOSExtended: \"(Se vejledning til Mac her)\",\r\n continue: \"Videre\",\r\n },\r\n studentDashboardPage: {\r\n profileSettings: \"Konto\",\r\n header: \"VEJEN TIL KØREKORTET\",\r\n headerSpan:\r\n \"Løs opgaverne her pÃ¥ siden, og kom et stort skridt tættere pÃ¥ kørekortet!\",\r\n seeYourErrors: \"Fejl i \",\r\n errorShorthand: \"Resultat\", //CHANGED AS WE AGREED\r\n trafficLightBox: {\r\n seeCalc: \"Se beregning\",\r\n information: \"Kun evaluerende prøver i Standard Mode tæller med i resultatet\",\r\n explanation: \"Beregningen af dit resultat foretages udelukkende fra prøve-formen Standard Mode. Dvs. tager du test i Learning Mode, sÃ¥ tæller de ikke med i dit trafiklys. Trafiklyset beregner dit resultat ud fra de sidste 20 dage. Du kan derfor godt opleve at dit resultat automatisk bliver dÃ¥rligere, hvis du ikke har øvet i et stykke tid.\",\r\n yourLastResult: \"Du har bestÃ¥et \",\r\n outofTen: \"ud af de sidste 10 test\",\r\n notReady: {\r\n header: \"IKKE KLAR\",\r\n span: \"Rødt lys betyder, at du har bestÃ¥et mindre end 3 evaluerende tests ud af de sidste 10.\",\r\n },\r\n onTheWay: {\r\n header: \"GODT PÃ… VEJ\",\r\n span: \"Gult lys betyder, at du har bestÃ¥et mellem 3 og 7 evaluerende tests ud af de sidste 10.\",\r\n },\r\n Ready: {\r\n header: \"DU ER KLAR TIL AT BESTÃ….\",\r\n span: \"Grønt lys betyder, at du har bestÃ¥et 8 eller flere evaluerende tests ud af de sidste 10.\",\r\n },\r\n },\r\n InfoBox: {\r\n header: \"INFORMATIONER TIL DIG\",\r\n yourCalendar: \"Din kalender (Drivi)\",\r\n welcome: \"Velkommen til det nye Teoriundervisning.dk!\",\r\n betaText: \"For at bestÃ¥ den officielle teoriprøve, sÃ¥ anbefaler vi at du fÃ¥r grønt trafiklys under de Evaluerende prøver. Vi ønsker dig held og lykke med teoriprøven!\",\r\n ratingOfDrivingSchool: {\r\n header: \"Vurdering af din køreskole:\",\r\n teoriundervisning: \"Teoriundervisningen\",\r\n driving: \"Kørsel\",\r\n totalExperience: \"Samlet indtryk\",\r\n },\r\n important: \"VIGTIGT!\",\r\n youHave: \"Du har \",\r\n daysAnd: \" dage og \",\r\n hoursLeft: \" timer tilbage af din adgang\",\r\n extendAccess: \"Forlæng din adgang her\"\r\n },\r\n startContentBox: {\r\n header: \"KOM GODT FRA START!\",\r\n description: \"Gennemfør denne rubrik før du gÃ¥r i gang med teoriprøverne.\",\r\n },\r\n generalContentBox: {\r\n header: \"ÉT EMNE AD GANGEN\",\r\n description:\r\n \"NÃ¥r du tager en emneprøve, sÃ¥ kan du øve i dit eget tempo. Det er en god mÃ¥de at komme i gang med teoriprøverne pÃ¥!\",\r\n },\r\n evalTestsContentBox: {\r\n header: \"EVALUERENDE TEORITESTS\",\r\n description:\r\n \"De evaluerende tests er en simulering af de tests du vil møde til den rigtige teoriprøve. For at fÃ¥ grønt lys (øverst), sÃ¥ skal du bestÃ¥ 8 ud af de sidste 10 evaluerende teoritests.\",\r\n button: \"RANDOM TEORITEST\",\r\n },\r\n strengthTestContentBox: {\r\n header: \"STYRKEPRØVEN\",\r\n description:\r\n \"Styrkeprøven tester dig i alle de billeder, som du tidligere har besvaret forkert. Med Styrkeprøven sætter du turbo pÃ¥ din indlæring!\",\r\n button: \"START STYRKEPRØVE\",\r\n noErrors: \"Intet indhold endnu\"\r\n },\r\n onlineBookContentBox: {\r\n header: \"ONLINE TEORIBOG\",\r\n description:\r\n \"Læs dig gennem hele pensum for køreteori. Brug bogens QR koder til at fÃ¥ oplæst bogen, se illustrationer og video.\",\r\n button: \"BESTIL FYSISK BOG\",\r\n buttonDescription:\r\n \"Den fysiske teoribog indeholder det samme som vores online teoribog. Bogen er til dig, som foretrækker, at have en fysisk bog fremfor online.\",\r\n },\r\n drivingSchoolLessonsContentBox: {\r\n header: \"DIN KØRESKOLES LEKTIONER\",\r\n description:\r\n \"Din køreskole har udgivet disse lektioner til dig! Spørg din kørelærer hvis du har spørgsmÃ¥l til indholdet.\",\r\n },\r\n beforeDrivingTestContentBox: {\r\n header: \"FØR KØREPRØVEN\",\r\n description:\r\n \"Forbered dig pÃ¥ køreprøven ved, at gennemføre disse punkter:\",\r\n },\r\n practicalInfoBox: {\r\n header: \"PRAKTISKE INFO\",\r\n authorities: {\r\n header: \"Myndigheder\",\r\n pricesNfee: \"Priser og gebyrer i forbindelse med kørekort\",\r\n infoAboutKlippekort: \"Information om klip i kørekortet.\",\r\n },\r\n aboutTeori: {\r\n header: \"Om Teoriundervisning.dk\",\r\n howToProlong: \"SÃ¥dan forlænger du din adgang\",\r\n problemWithTests: \"Hvis du har problemer med afvikling af tests\",\r\n },\r\n drivingSchoolCourse: {\r\n header: \"Køreskoleforløbet\",\r\n whenSmoothTrack: \"NÃ¥r du skal pÃ¥ glatbane\",\r\n documentsTeoriAndTest:\r\n \"Dokumenter i forbindelse med teori- og køreprøve\",\r\n },\r\n yourOpinion: {\r\n header: \"Hvad synes du?\",\r\n areYouSatisfied: \"Er du tilfreds med Teoriundervisning.dk?\",\r\n yes: \"Ja, det er jeg :)\",\r\n no: \"Nej, jeg synes det kunne blive bedre\",\r\n },\r\n },\r\n },\r\n studentQuizPage: {\r\n Setup: {\r\n freeQuizFreeTest: \"Gratis test\",\r\n smallHeader: \"Prøve opsætning\",\r\n setupOfTest: \"Opsætning af prøven\",\r\n learningMode: \"Learning Mode\",\r\n learningModeDescription:\r\n \"Her kan du øve i dit eget tempo, og inluderer hjælpetekster. Du fÃ¥r de rigtige svar efter gennemførelse af hvert billede. Tæller ikke med i din statistik / trafiklys. Testen kan ikke afvikles pÃ¥ iPhone/iPad.\",\r\n standardMode: \"Standard Mode\",\r\n standardModeDescription:\r\n \"Her øver du dig i samme tempo som til den Traditionelle prøve. Du fÃ¥r dit resultat efter at have gennemgÃ¥et 25 billeder. Testen kan ikke afvikles pÃ¥ iPhone/iPad.\",\r\n chooseTestSound: \"Oplæsning\",\r\n chooseTestSubs: \"Undertekster\",\r\n testSubPlaceholder: \"Ingen undertekst\",\r\n startTest: \"START PRØVEN\",\r\n iOSExplainer: \"Teoriprøven afvikles med en tidsbegrænsning pÃ¥ 25 minutter, som den nye digitale prøve. Du har mulighed for at klikke frem og tilbage og ændre dine svar indenfor denne tid.\",\r\n languages: {\r\n none: \"Ingen\",\r\n danish: \"Dansk\",\r\n english: \"Engelsk\",\r\n arabic : \"Arabisk\",\r\n faerosk: \"Færøsk\",\r\n polish: \"Polsk\",\r\n german: \"Tysk (Beta)\",\r\n //TO BE EXTENDED\r\n }\r\n },\r\n Quiz: {\r\n yes: \"JA\",\r\n no: \"NEJ\",\r\n errorPage: {\r\n somethingwentWrong: \"der gik noget galt\",\r\n tryagain: \"prøv igen\",\r\n returntodashboard: \"tilbage til forsiden\",\r\n },\r\n loadingText: \"Generer teoritest\",\r\n soundError:{\r\n important: \"VIGTIGT\",\r\n description: \"Vi har brug for din tilladelse til at afspille noget pÃ¥ din enhed\",\r\n }\r\n },\r\n End: {\r\n purchaseAccess: \"KØB ADGANG\",\r\n dontLikeImage:\r\n \"Hvis du er uenig i billedets svar eller du har behov for en forklaring, sÃ¥ klik pÃ¥ stjerne-ikonet, og sÃ¥ kan din køreskole se det. Det betyder, at I sammen kan gennemgÃ¥ billedet. Gælder kun køreskoler med Teoriundervisning.dk undervisningssystem.\",\r\n dontLikeImageShorthand: \"GennemgÃ¥ pÃ¥ køreskolen\",\r\n soundExplained:\r\n \"Dette billede har en ekstra uddybende forklaring i lyd.\",\r\n soundExplainedShorthand: \"Ekstra forklaring\",\r\n youpassed: \"BestÃ¥et\",\r\n youfailed: \"Ikke bestÃ¥et\",\r\n youhad: \"Du besvarede\",\r\n imagesPassed: \"billeder korrekt\",\r\n },\r\n },\r\n teacherStudentPage: {\r\n stats: {\r\n description:\r\n \"NedenstÃ¥ende resultater er baseret pÃ¥ klassens resultater siden i loggede ind første gang\",\r\n progress: \"klassens fremgang\",\r\n average: \"landsgennemsnit\",\r\n },\r\n placholder: {\r\n youAreLoggedIn: \"Du er logget ind!\",\r\n feedback: \"Venter pÃ¥ din kørelærer ...\",\r\n },\r\n graduationPage: {\r\n correct: \"korrekt\",\r\n outOf: \"ud af\",\r\n youHad: \"Du besvarede\",\r\n amountOfCorrect: \"billeder korrekt\",\r\n failed: \"Du bestod desværre ikke\",\r\n passed: \"Tilykke, du bestod!\",\r\n },\r\n },\r\n};","import { Translation } from \"./translationTypes\";\r\nimport index1 from \"./quizSounds/english/english1.mp3\";\r\nimport index2 from \"./quizSounds/english/english2.mp3\";\r\nimport index3 from \"./quizSounds/english/english3.mp3\";\r\nimport index4 from \"./quizSounds/english/english4.mp3\";\r\n\r\nexport const english: Translation = {\r\ngeneralMessages: {\r\n backButton: \"back\",\r\n seeYourErrors: \"see your errors\",\r\n yes: \"Yes\",\r\n no: \"No\",\r\n both: \"Both\",\r\n allow: \"Allow\",\r\n deny: \"Deny\",\r\n },\r\n ultimateTopbar: {\r\n education: \"Undervisning\",\r\n studentsNstats: \"Elever & statistik\",\r\n orders: \"Bestilling\",\r\n calibrateProjector: \"kalibrer projektor\",\r\n importFromEP: \"importer fra EasyPiecy\",\r\n settings: \"Profile\",\r\n logout: \"LOGOUT\",\r\n },\r\n indexSounds: {\r\n one: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/english1.mp3\",\r\n two: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/english2.mp3\",\r\n three: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/english3.mp3\",\r\n four: \"https://teoricontentstorage.blob.core.windows.net/admincontainer/english4.mp3\",\r\n },\r\n loginPage: {\r\n loginForm: {\r\n loginButton: \"Login\",\r\n userNamePlaceholder: \"Type e-mail\",\r\n passwordPlaceholder: \"Type access code\",\r\n },\r\n wrongInfoError: \"Access code or e-mail cannot be found\",\r\n rememberLoginInfo: \"Remember login\",\r\n },\r\n\r\n dashboardPage: {\r\n topbar: {\r\n lecture: \"lektion\",\r\n test: \"test\",\r\n search: \"søg\",\r\n sort: {\r\n sortPlaceholder: \"Sorter indhold\",\r\n byDate: \"Sorter efter dato\",\r\n byType: \"Sorter efter type\",\r\n byCategory: \"Sorter efter kategori\",\r\n byReleaseType: \"Sorter efter udgivelsestype\",\r\n },\r\n },\r\n table: {\r\n type: {\r\n lesson: \"lektion\",\r\n test: \"test\",\r\n },\r\n category: \"kategori\",\r\n created: \"oprettet\",\r\n status: {\r\n unpublished: \"unpublished\",\r\n published: \"published\",\r\n offline: \"offline\",\r\n },\r\n edit: \"rediger\",\r\n details: \"detaljer\",\r\n },\r\n },\r\n lessonPage: {\r\n of: \"af\",\r\n initialPage: {\r\n scanQR: \"Scan QR koden for at logge ind!\",\r\n welcomeTo: \"Du har valgt lektionen: \",\r\n continue: \"fortsæt\",\r\n skip: \"skip\",\r\n },\r\n },\r\n createLessonPage: {\r\n slide: \"Slide\",\r\n addTag: \"tilføj tag\",\r\n movePicture: \"flyt billede\",\r\n withPicture: \"med billede\",\r\n addSubject: \"indsæt emne\",\r\n fromPicture: \"fra billede\",\r\n insert: \"insert\",\r\n page: \"side\",\r\n uploadMP3: \"Upload MP3 fil\",\r\n notePlaceholder: \"Skriv en note her\",\r\n save: \"Gem\",\r\n finish: \"Udgiv\",\r\n newSlide: {\r\n chooseWhereToGet: \"Vælg hvor du vil have indholdet fra\",\r\n noneChosen: \"Intet valgt\",\r\n teoriundervisning: \"Teoriundervisning\",\r\n ownMaterial: \"Eget materiale\",\r\n link: \"Link\",\r\n },\r\n },\r\n studentPage: {\r\n topbar: {\r\n actions: {\r\n placeholder: \"Vælg handling\",\r\n gatheredStats: \"Samlet statistik\",\r\n archiveChosen: \"Arkiver valgte\",\r\n resendPassword: \"Gensend adgangskode (SMS)\",\r\n category: \"Category\",\r\n yourInfo: \"Your info\",\r\n usefulInfo: \"Useful tips\",\r\n },\r\n searchPlaceholder: \"søg\",\r\n sort: {\r\n placeholder: \"Sorter indhold\",\r\n newest: \"Nyeste først\",\r\n alphabetical: \"Alfabetisk\",\r\n teamStart: \"Efter holdstart dato\",\r\n activeCodes: \"Kun med aktive adgangskoder\",\r\n archivednExpiredCodes: \"Kun arkiverede / udløbne\",\r\n noCodes: \"Kun elever uden adgangskoder\",\r\n byPercentage: \"Sorter efter %\",\r\n },\r\n },\r\n table: {\r\n category: \"kategori\",\r\n mobileNumber: \"mob.nr\",\r\n password: \"adgangskode\",\r\n expiry: \"udløb\",\r\n stats: \"statistik\",\r\n archive: \"arkiver\",\r\n removeAccess: \"fjern adgang\",\r\n addAccess: \"tilføj adgang\",\r\n extendedStats: {\r\n theseSlidesAreMarked: \"Eleven har markeret disse teoriprøve billeder\",\r\n latestActivity: \"Seneste aktivitet\",\r\n },\r\n },\r\n },\r\n teacherQuizPage: {\r\n quizSetup: {\r\n noOfTeoriSlides: \"Antal teoriprøve billeder\",\r\n speed: {\r\n header: \"Hastighed\",\r\n slow: \"Langsom\",\r\n normal: \"Normal\",\r\n fast: \"Hurtig\",\r\n },\r\n languageSettings: {\r\n header: \"Sprog indstillinger\",\r\n none: \"Ingen undertekster\",\r\n arabic: \"Arabiske undertekster\",\r\n danish: \"Danske undertekster\",\r\n english: \"Engelske undertekster\",\r\n german: \"Tyske undertekster (beta)\",\r\n },\r\n otherSetting: {\r\n header: \"Andre indstillinger\",\r\n includeFromTeoriDK: \"Inkluder teoribilleder fra Teoriundervisning.dk\",\r\n saveForLater: \"Gem testen til senere brug\",\r\n nameOfTestPlaceholder: \"Testens navn\",\r\n },\r\n strengthTest: \"styrkeprøve\",\r\n strengthTestDescription:\r\n \"Styrkeprøve-knap: Klik pÃ¥ AI-knappen og test eleverne i de emner som de har sværrest ved! Vi har indsamlet data fra alle elever, og analyseret hvad de har sværrest ved! AI testen er en skræddersyet test til de elever som er logget ind lige nu! (inkluderer alle emner, og viser kun billeder eleverne ikke kan se hjemme, indeholder 10 billeder)\",\r\n startTest: \"START TEST\",\r\n close: \"afslut\",\r\n },\r\n quizQRGather: {\r\n teoriTestStarting: \"Teoritesten start om lidt\",\r\n scanIfNotLoggedIn: \"Scan hvis du ikke er logget ind\",\r\n openYourPhone: \"Ã…ben din mobiltelefon\",\r\n },\r\n quizMain: {\r\n left: \"Left\",\r\n right: \"Right\",\r\n },\r\n quizResult: {\r\n studentList: {\r\n chooseAll: \"Vælg alle\",\r\n },\r\n picture: \"Slide\"\r\n },\r\n },\r\n studentLoginPage: {\r\n mobileNumberPlaceholder: \"Type mobile number\",\r\n backButton: \"back\",\r\n continueButton: \"continue\",\r\n expiredCode: \"Your access has expired\",\r\n extend: \"extend\",\r\n Initial: {\r\n loginButton: \"login\",\r\n errorMessage: \"Access code or mobile number not found\",\r\n loginSuccess: \"Please wait....\",\r\n phonenumberLabel: \"Mobile number\",\r\n passwordLabel: \"PINscode\",\r\n registerDescription: \"If you dont have a account, you can create it by clicking here\",\r\n forgot: \"Forgot PIN\",\r\n haveAccessCode: \"Use activation/access - code\"\r\n },\r\n FirstLogin: {\r\n firstTimeVisiting: \"Is this your first visit to the new Teoriundervisning.dk?\",\r\n havePasscode: \"Do you have an access code from our booklet or book?\",\r\n },\r\n Confirmation: {\r\n sendConfirmationCode: \"Send verification code\",\r\n weSentASMS: \"We’ve sent you the verification code on SMS\",\r\n errorMessage: \"The verification code doesn’t match\",\r\n },\r\n AccessCode: {\r\n typeCodePlaceholder: \"Type access code\",\r\n errorMessages: {\r\n success: \"Access code added!\",\r\n expired: \"The access code has expired\",\r\n notFound: \"We cannot find the access code\",\r\n alreadyUsed: \"The access code has been activated before\",\r\n mobileUsed: \"The mobile number is already active\",\r\n alreadyExisting: \"The mobile number already exists, so we extende your access!\"\r\n },\r\n },\r\n CreatePIN: {\r\n createPIN: \"Create pincode\",\r\n repeatPIN: \"Repeat pincode\",\r\n errorMessage: \"Pincodes doesn’t match\",\r\n setPIN: \"Confirm Pincode\",\r\n },\r\n InformationSide: {\r\n header: \"STUDENT LOGIN\",\r\n Initial: {\r\n underHeader: \"LOGIN WITH PINCODE\",\r\n underHeaderExplainer:\r\n \"Login with your pincode\",\r\n buttonText: \"Create user account\",\r\n },\r\n FirstLogin: {\r\n underHeader: \"FIRST TIME\",\r\n underHeaderExplainer: \"Please answer these questions to create user account\",\r\n },\r\n Confirmation: {\r\n underHeader: \"VERIFY MOBILE NUMBER\",\r\n underHeaderExplainer:\r\n \"We need to check if your mobile number is in our system\",\r\n },\r\n AccessCode: {\r\n underHeader: \"ACCESS CODE\",\r\n underHeaderExplainer:\r\n \"Enter your activation- or accesscode. After you click “Continue†you only need to use your mobile number and pin to log in.\",\r\n },\r\n CreatePIN: {\r\n underHeader: \"CREATE PINCODE\",\r\n underHeaderExplainer: \"Please create a personal pincode for your account\",\r\n },\r\n },\r\n },\r\n studentSettings: {\r\n yourInfo: \"Your account details\",\r\n description:\r\n \"In order for your driving school to follow and guide you in the best possible way, it is important that you enter all information correctly. Your driving school has access to your activity on the site as well as your results. It is important that ALL the fields below are filled in.\",\r\n inputLabels: {\r\n firstName: \"First name\",\r\n lastName: \"Last name\",\r\n email: \"E-mail\",\r\n mobileNr: \"Mobile number\",\r\n },\r\n yourDrivingSchool: \"Your driving school\",\r\n languageSelect: {\r\n headline: \"Language\",\r\n danish: \"Danish\",\r\n english: \"English\",\r\n },\r\n categorySelect: {\r\n headline: \"Category\",\r\n car: \"Car\",\r\n motorcycle: \"Motorcycle\",\r\n },\r\n saveSettings: \"Save\",\r\n iOSAlertText: \"Please be aware that Apple has blocked the option for autoplay of sound which we need to deploy a quiz. In this edition we’ve made a work-around to avoid the problem but we cannot guarantee that the problem cannot occur.\",\r\n iOSCheckbox: \"Digital quiz\",\r\n iOSExtended: \"Guide for Mac\",\r\n continue: \"Skip\",\r\n },\r\n studentDashboardPage: {\r\n profileSettings: \"Account settings\",\r\n header: \"GETTING YOUR LICENSE\",\r\n headerSpan:\r\n \"Solve the tasks on this page, and get one big step closer to the driving license!\",\r\n seeYourErrors: \"Error in \",\r\n errorShorthand: \"Result\",\r\n trafficLightBox: {\r\n seeCalc: \"See calculation\",\r\n information: \"Only Evaluating quizzes in Standard Mode are included in the result\",\r\n explanation: \"The calculation of your result is made exclusively from Standard Mode. If you take tests in Learning Mode, they will not count in your traffic light.The traffic light calculates your result from the last 20 days.You may therefore find that your result automatically gets worse if you did not practice for a while.\",\r\n yourLastResult: \"Your have passed\",\r\n outofTen: \"out of the last 10 tests\",\r\n notReady: {\r\n header: \"NOT READY YET\",\r\n span: \"If you’ve passed less than 3 evaluating quizzes of the last 10, then the light is red.\",\r\n },\r\n onTheWay: {\r\n header: \"WELL ON YOUR WAY\",\r\n span: \"If you’ve passed between 3 and 7 evaluating quizzes of the last 10, then the light is yellow.\",\r\n },\r\n Ready: {\r\n header: \"YOUR READY TO PASS.\",\r\n span: \"If you’ve passed 8 or more evaluating quizzes out of the last 10, then the light is green.\",\r\n },\r\n },\r\n InfoBox: {\r\n header: \"INFO FOR YOU\",\r\n yourCalendar: \"Your calendar (Drivi)\",\r\n welcome: \"Welcome to the new Teoriundervisning.dk!\",\r\n betaText: \"To pass the official theory exam, we recommend that you get a green traffic light in the Evaluating quiz box. We wish you good luck with your drivers license!\",\r\n ratingOfDrivingSchool: {\r\n header: \"Rate your driving school:\",\r\n teoriundervisning: \"Theory lessons\",\r\n driving: \"Driving lessons\",\r\n totalExperience: \"Overall impression\",\r\n },\r\n important: \"IMPORTANT!\",\r\n youHave: \"You have \",\r\n daysAnd: \" days and \",\r\n hoursLeft: \" hours left of your access\",\r\n extendAccess: \"Extend your access here\"\r\n },\r\n startContentBox: {\r\n header: \"GET OFF TO A GOOD START!\",\r\n description: \"Complete this section before you start solving quizzes.\",\r\n },\r\n generalContentBox: {\r\n header: \"ONE SUBJECT AT A TIME\",\r\n description:\r\n \"You can go through the subject quizzes in your own pace. It’s a great way to be introduced to the quizzes!\",\r\n },\r\n evalTestsContentBox: {\r\n header: \"EVALUATING QUIZZES\",\r\n description:\r\n \"The evaluating quizzes simulate the quiz you’ll find at the official exam. To get a green light (top of page) you have to pass at least 8 out of the last 10 evaluating quizzes.\",\r\n button: \"RANDOM QUIZ\",\r\n },\r\n strengthTestContentBox: {\r\n header: \"POWER QUIZ\",\r\n description:\r\n \"Get quizzed in all the slides that you answered wrong before with the Power Quiz. Supercharge your learning!\",\r\n button: \"START POWER QUIZ\",\r\n noErrors: \"No content yet!\"\r\n },\r\n onlineBookContentBox: {\r\n header: \"THE DIGITAL THEORY BOOK ONLINE\",\r\n description:\r\n \"Read the complete curriculum for category B. Scan QR codes throughout the book to get video links and illustrations.\",\r\n button: \"ORDER THE PHYSICAL BOOK (DANISH EDITION)\",\r\n buttonDescription:\r\n \"The physical book has the same content as the online. The book is for you who prefer a book of paper. Please notice the book is in Danish.\",\r\n },\r\n drivingSchoolLessonsContentBox: {\r\n header: \"YOUR DRIVING SCHOOLS LESSONS\",\r\n description:\r\n \"These lessons has been published by your driving school. If you have questions for this content please ask your driving instructor.\",\r\n },\r\n beforeDrivingTestContentBox: {\r\n header: \"BEFORE THE PRACTICAL EXAM\",\r\n description:\r\n \"Prepare for your practical exam with these tasks.\",\r\n },\r\n practicalInfoBox: {\r\n header: \"PRACTICAL INFO\",\r\n authorities: {\r\n header: \"Authorities\",\r\n pricesNfee: \"Prices and fees for driver's license exams etc.\",\r\n infoAboutKlippekort: \"Info about the “klippekort†(penalty points)\",\r\n },\r\n aboutTeori: {\r\n header: \"Teoriundervisning.dk\",\r\n howToProlong: \"How to prolong access\",\r\n problemWithTests: \"If you have technical issues\",\r\n },\r\n drivingSchoolCourse: {\r\n header: \"The driving school education\",\r\n whenSmoothTrack: \"Training on the slippery track\",\r\n documentsTeoriAndTest:\r\n \"Documents for the theory- and practical exam\",\r\n },\r\n yourOpinion: {\r\n header: \"What’s your opinion?\",\r\n areYouSatisfied: \"Have you been satisfied with Teoriundervisning.dk?\",\r\n yes: \"Yes I have :)\",\r\n no: \"Not really.\",\r\n },\r\n },\r\n },\r\n studentQuizPage: {\r\n Setup: {\r\n freeQuizFreeTest: \"Free test\",\r\n setupOfTest: \"Quiz setup\",\r\n smallHeader: \"Test mode\",\r\n learningMode: \"Learning Mode\",\r\n learningModeDescription:\r\n \"Practice at your own pace with subtitles. You’ll get the correct answers after each quiz slide. This quiz is not supported on iPhone / iPad.\",\r\n standardMode: \"Standard Mode\",\r\n standardModeDescription:\r\n \"Practice in the same pace as the Traditional official exam with no subtitles. You’ll get the result after 25 quiz slides. This quiz is not supported on iPhone / iPad.\",\r\n chooseTestSound: \"Narration\",\r\n chooseTestSubs: \"Subtitles\",\r\n testSubPlaceholder: \"No subtitles\",\r\n startTest: \"Start quiz\",\r\n iOSExplainer: \"The theory test has a time limit of 25 minutes. You have the option to navigate between questions and change your answers within this time. The test is identical to the official Digital test.\",\r\n languages: {\r\n none: \"None\",\r\n danish: \"Danish\",\r\n english: \"English\",\r\n arabic : \"Arabic\",\r\n faerosk: \"Faeroese\",\r\n polish: \"Polish\",\r\n german: \"German (beta)\",\r\n //TO BE EXTENDED\r\n }\r\n },\r\n Quiz: {\r\n yes: \"YES\",\r\n no: \"NO\",\r\n errorPage: {\r\n somethingwentWrong: \"Something is wrong here\",\r\n tryagain: \"try again\",\r\n returntodashboard: \"back to the frontpage\",\r\n },\r\n loadingText: \"Generating quiz\",\r\n soundError:{\r\n important: \"IMPORTANT\",\r\n description: \"We need permission to play sound on your device\",\r\n }\r\n },\r\n End: {\r\n purchaseAccess: \"BUY ACCESS\",\r\n dontLikeImage:\r\n \"When you mark an image with a star, your driving school can see it. This means that you can review the picture together. Applies only to driving schools with Teoriundervisning.dk teaching system.\",\r\n dontLikeImageShorthand: \"Review with instructor\",\r\n soundExplained:\r\n \"This slide has an extra audio explanation attached.\",\r\n soundExplainedShorthand: \"Extra explanation\",\r\n youpassed: \"Passed\",\r\n youfailed: \"Not passed\",\r\n youhad: \"You answered\",\r\n imagesPassed: \"quiz slides correctly\",\r\n },\r\n },\r\n teacherStudentPage: {\r\n stats: {\r\n description:\r\n \"The results below is based on the total results of the class since first login\",\r\n progress: \"class progress\",\r\n average: \"country average\",\r\n },\r\n placholder: {\r\n youAreLoggedIn: \"You’ve been logged in!\",\r\n feedback: \"Waiting for your driving instructor ...\",\r\n },\r\n graduationPage: {\r\n correct: \"correct\",\r\n outOf: \"out of\",\r\n youHad: \"You answered\",\r\n amountOfCorrect: \"quiz slides correctly\",\r\n failed: \"You didn’t pass\",\r\n passed: \"Congrats, you passed!\",\r\n },\r\n },\r\n}\r\n","import { LanguageType, Translation } from \"./translationTypes\";\r\nimport { localStorageGetItem, localStorageSaveItem } from \"../services/browserStorageService\";\r\nimport { danish } from \"./danish\";\r\nimport { english } from \"./english\";\r\n\r\n\r\n/**\r\n * Function returns chosen language version, if parameter is null or type of it does\r\n * not fit to switch condition returns default value - english\r\n * @param languageType\r\n */\r\nexport const getStringsForChosenLanguage = (languageType: LanguageType | null): Translation => {\r\n\tswitch (languageType) {\r\n\t\tcase LanguageType.English: {\r\n\t\t\treturn english;\r\n\t\t }\r\n\t\tcase LanguageType.Danish: {\r\n\t\t\treturn danish;\r\n\t\t}\r\n\t\tdefault: {\r\n\t\t\treturn danish;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const setLanguage = (languageType: LanguageType): void => {\r\n\tlocalStorageSaveItem<LanguageType>(\"language\", languageType);\r\n};\r\n\r\nexport const getChosenLanguage = (): LanguageType | null => {\r\n\treturn localStorageGetItem<LanguageType>(\"language\");\r\n};\r\n\r\nexport const getChosenSpokenLanguage = (languageID: number): Translation => {\r\n\tswitch (languageID) {\r\n\t\tcase 1: {\r\n\t\t\treturn danish;\r\n\t\t }\r\n\t\tcase 2: {\r\n\t\t\treturn english;\r\n\t\t}\r\n\t\tdefault: {\r\n\t\t\treturn danish;\r\n\t\t}\r\n\t}\r\n};\r\n","export function sessionStorageSaveItem<T>(key: string, item: T): void {\r\n\tsessionStorage.setItem(key, JSON.stringify(item));\r\n}\r\n\r\nexport function sessionStorageGetItem<T>(key: string): T | null {\r\n\tconst item = sessionStorage.getItem(key);\r\n\r\n\tif (typeof item === \"string\") {\r\n\t\treturn <T>JSON.parse(item);\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nexport function sessionStorageRemoveItem(key: string): void {\r\n\tsessionStorage.removeItem(key);\r\n}\r\n\r\nexport function sessionStorageClear(): void {\r\n\tsessionStorage.clear();\r\n}\r\n\r\nexport function localStorageSaveItem<T>(key: string, item: T): void {\r\n\tlocalStorage.setItem(key, JSON.stringify(item));\r\n}\r\n\r\nexport function localStorageGetItem<T>(key: string): T | null {\r\n\tconst item = localStorage.getItem(key);\r\n\r\n\tif (typeof item === \"string\") {\r\n\t\treturn <T>JSON.parse(item);\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nexport function localStorageRemoveItem(key: string): void {\r\n\tlocalStorage.removeItem(key);\r\n}\r\n\r\nexport function localStorageClear(): void {\r\n\tlocalStorage.clear();\r\n}\r\n","import React, { FC, useEffect, useState } from \"react\";\r\nimport { getMergedStringsFromArray } from \"../services/utilFunctions\";\r\nimport { InputType, SingleCharInput } from \"./SingleCharInput\";\r\n\r\nexport interface PinInputProps {\r\n\tsetPIN: (value: string | ((prevState: string) => string)) => void;\r\n\tPINInputState: string[];\r\n\tsetPINInputState: (value: string[] | ((prevState: string[]) => string[])) => void;\r\n\tclassName: string;\r\n\ttype?: string;\r\n}\r\n\r\nexport const PinInput: FC<PinInputProps> = (props: PinInputProps) => {\r\n\tconst emptyInputPlaceholder = \"_\";\r\n\r\n\tuseEffect(() => {\r\n\t\tprops.setPIN(getMergedStringsFromArray(props.PINInputState));\r\n\t}, [props, props.PINInputState]);\r\n\r\n\tconst updatePINItem = (value: string | number, index: number): void => {\r\n\t\tconst PINInputStateCopy = [...props.PINInputState];\r\n\t\tPINInputStateCopy[index] = value.toString();\r\n\t\tprops.setPINInputState(PINInputStateCopy);\r\n\t};\r\n\r\n\tconst handleKeyPress = (event) => {\r\n\t\tif (event.keyCode === 8) {\r\n\t\t\tprops.setPINInputState([\"\", \"\", \"\", \"\", \"\", \"\"]);\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderSingleCharacterInputs = (): JSX.Element[] => {\r\n\t\tconst inputs: JSX.Element[] = [];\r\n\r\n\t\tfor (let index = 0; index < 4; index++) {\r\n\r\n\t\t\tinputs.push(\r\n\t\t\t\t<SingleCharInput\r\n\t\t\t\t\tclassName={props.className}\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\thandleKeyPress={handleKeyPress}\r\n\t\t\t\t\tordinalNumber={index}\r\n\t\t\t\t\tisFirstInRow={index === 0}\r\n\t\t\t\t\tinputType={props.type ? InputType.Password : InputType.Text}\r\n\t\t\t\t\tplaceholder={emptyInputPlaceholder}\r\n\t\t\t\t\tvalue={props.PINInputState[index]}\r\n\t\t\t\t\thandleSetValue={updatePINItem}\r\n\t\t\t\t/>,\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn inputs;\r\n\t};\r\n\r\n\treturn <>{renderSingleCharacterInputs()}</>;\r\n};\r\n\r\nexport default PinInput;","export default \"data:image/png;base64,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Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmFiODYzNzQ3LTNlOTYtNDFjZC1iZGJmLTQ3NTUyMzUwNDVkOSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozZDdiNTkyZS1kMzgzLTRiZGItOWZhZi1mMDc5YzQxZWFiNzYiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjk0N2NkOS00YWY5LTQ2YjYtOWNiMy1kMjkwNjYxNDgxMGYiCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNjM4NDUwMzM3MDQ0MzA2IgogICBHSU1QOlZlcnNpb249IjIuMTAuMjQiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmIxM2YzOTEzLWIyNGEtNDc2ZS1iMWExLTYwMTQxZTMzMmVkMiIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMi0wMlQxNDowNTozNyIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4aBYYpAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5QwCDQUl2w+2SgAAAQ5JREFUSMfNlrFuwjAQhv8/EmV1eBGMxBYJob5B9w5h69YB3oAZCSbG5BF4g1Yq2cPISyCPlSrlOsACikTOIRa32fL589n3nw8IZNQsLgZ2LYJPAK4SzCau3D0cVBibCpFdOQtmiSvzJv6RIvb0dkqIrDA2fSxIUHvypjDVG+1jWwIY1m505xojDehPMAVw8ImM2jT9Mtb0iG9tZPTRhA+MvgLUwthG7RoYz4ofzSHV2AcmgheQrwBMLYyySk6HBffxcAvwo+NS986f2P4S6HcMOkYIZBEhWQDOMlwyBE3vpxVskBIUpKj6QtT/kS9EBbp8al6Q1s2JphNq1Zx00m4lrsxJbC5DVwnemkKC2j+FV5QbNYcBDgAAAABJRU5ErkJggg==\"","import React, { createContext, ReactNode, useState } from \"react\";\r\nimport { LessonSlide } from \"../pages/model\";\r\n\r\ninterface PopupSlideState {\r\npopupState: boolean;\r\n popupSlide: LessonSlide | null;\r\n openPopup: () => void;\r\n closePopup: () => void;\r\n setPopupSlide: (slide: LessonSlide | null) => void;\r\n}\r\n\r\nconst initialPopupSlideState: PopupSlideState = {\r\n popupState: false,\r\n popupSlide: null,\r\n openPopup: () => {},\r\n closePopup: () => {},\r\n setPopupSlide: (slide: LessonSlide | null) => {}\r\n};\r\n\r\nexport const PopupSlideContext = createContext<PopupSlideState>(\r\n initialPopupSlideState\r\n);\r\n\r\nexport interface PopupSlideProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nfunction PopupSlideProvider(props: PopupSlideProviderProps): JSX.Element {\r\n const [popupSlide, setPopupSlide] = useState<LessonSlide | null>(null);\r\n const [popupState, setpopupState] = useState(false);\r\n\r\n const openPopup = () => {\r\n \r\n setpopupState(true);\r\n }\r\n\r\n const closePopup = () => {\r\n setpopupState(false);\r\n }\r\n\r\n return (\r\n <PopupSlideContext.Provider value={{ popupSlide, setPopupSlide, openPopup, closePopup, popupState }}>\r\n {props.children}\r\n </PopupSlideContext.Provider>\r\n );\r\n}\r\n\r\nexport default PopupSlideProvider;","export default \"data:image/png;base64,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OnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6MDE3Nzc5NTgtYzg2ZC00ZWM0LTk4YmYtYWYwY2Q4YTE2NzQxIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmZhZDk0MzM2LTVhNWUtNDg1Mi1iNWIyLTc5MDAzMmZmMDA1YiIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjE5MjUwMWMyLTc1YzUtNDhhMy05ZmMyLWY5M2Q2MWI1NDAwZCIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2Mzk0ODQyMTYwMTQzOTIiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YTAwNzA5YjMtMjIxMi00OTJkLTk0OWQtNTk4NGU1MGRmYjlhIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIxLTEyLTE0VDEzOjE2OjU2Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pj8MjxgAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQflDA4MEDjEqOkIAAADRklEQVRo3u2ZwYsdRRDGv697krfiGsVVsyHmIoIHwYsmgZAEkz/AgwrqVQRd8OLNnIzxEG8iSAKBQK7JvxDJMWgEE4KL5GDIJYggK0EQTFf35yH1wrB5u/tmdmfyRragecObqu75TXVXVfcAPUhK6XhK6ZqZrZjZ3yml62b2HoYmOedPzEyTWkrpm8GASNpvZmktGG/nJXHmYczs0gYgD4G2YrzQsWdem1L1QzM7M9MwANRAd2mzQJ3CkLzZ0GRpKzzU1TQ7OEUAmNTOzKJnfiT5WQvTpZkN2znnz1t4R9tA20Dtgb74XwGllE63BDq9DTREIE4oDkcAgqR5khmAARh5afIvgMpbApAlzXs/Oz1viSQf5EyVB+mGksQQQpY0Hre4zkmSH7XIYSdjjF+uCZNSegHA+yRfkrRIcq6mZxP63ClpL4B51w2S4DBFUvHrh+t/XK85YPGXsgvAXrdd6+HhL6L+34kY49ePwJjZHgBnARwB8KwPHGsFo2oVQ/3eY5U6EN0jz5H8DsC7s/KQDYE+jjGeCymlCOAAgIM9bAm6Kmi/lfRKAFBIvghg36SAMBCZK6W8FUIIO0iOANzHgEXSqyGEYABuA7g3cJiVQLIAuAvgV88jgxSSPwUAiDHekHRO0h0A/wzQK9dijBdXJ823Sb4D4A3P+nMeqsfraeQ5pngVMOe/OzYIHuN79306B++33lcF4KkWQeh2jPEwyd8fMSyl7AOwIOl5H2D19jqWUkZeEYjkIoCnATzpUMEfEjXIyquDq34vuH0FIJLcA+ArAE+0ADlK8u5G+45Qu2bOmTUPhto16/oppTDWH+ullIKZhbr+qkOPey0Kzt8k7V630Ox5ru/POV8BMN/CI4dI/jETMFsN8thgugDp/NxsDZBDbUAk3VoPpHfPOMj3TaOWpFtVVR0m+SemiP+DB+kNpg+QXtaMg1xuAfJLVVVHpgXp3DOSdueclwEsNLRbdpC/mth16pmc86kWIDerqjraFKRzGEmvt/DImyRX2ozX9feZhQYgN9pMrT4DwHIDkOObAekD5uIUID9XVXVssyC9iJldWOfM+AdJzwxqW2tmH6SUlmsgd3LOnw75AAWSFiW93FX//wGWVjltJTVtXAAAAABJRU5ErkJggg==\"","import React, { FC, useEffect, useState } from \"react\";\r\nimport { getMergedStringsFromArray } from \"../services/utilFunctions\";\r\nimport { InputType, SingleCharInput } from \"./SingleCharInput\";\r\n\r\nexport interface VerificationInputProps {\r\n\tsetCode: (value: string | ((prevState: string) => string)) => void;\r\n\tVerificationInputState: string[];\r\n\tsetVerificationInputState: (value: string[] | ((prevState: string[]) => string[])) => void;\r\n\tclassName: string;\r\n}\r\n\r\nexport const VerificationInput: FC<VerificationInputProps> = (props: VerificationInputProps) => {\r\n\tconst emptyInputPlaceholder = \"_\";\r\n\r\n\tuseEffect(() => {\r\n\t\tprops.setCode(getMergedStringsFromArray(props.VerificationInputState));\r\n\t}, [props, props.VerificationInputState]);\r\n\r\n\tconst updateCodeItem = (value: string | number, index: number): void => {\r\n\t\tconst VerificationInputStateCopy = [...props.VerificationInputState];\r\n\t\tVerificationInputStateCopy[index] = value.toString();\r\n\t\tprops.setVerificationInputState(VerificationInputStateCopy);\r\n\t};\r\n\r\n\tconst handleKeyPress = (event) => {\r\n\t\tif (event.keyCode === 8) {\r\n\t\t\tprops.setVerificationInputState([\"\", \"\", \"\", \"\", \"\", \"\"]);\r\n\t\t}\r\n\t};\r\n\r\n\tconst renderSingleCharacterInputs = (): JSX.Element[] => {\r\n\t\tconst inputs: JSX.Element[] = [];\r\n\r\n\t\tfor (let index = 0; index < 6; index++) {\r\n\t\t\tif (index === 6 / 2) {\r\n\t\t\t\tinputs.push(\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<span key=\"separator\"> - </span>\r\n\t\t\t\t\t</>,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tinputs.push(\r\n\t\t\t\t<SingleCharInput\r\n\t\t\t\t\tclassName={props.className}\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\thandleKeyPress={handleKeyPress}\r\n\t\t\t\t\tordinalNumber={index}\r\n\t\t\t\t\tisFirstInRow={index === 0}\r\n\t\t\t\t\tinputType={InputType.Text}\r\n\t\t\t\t\tplaceholder={emptyInputPlaceholder}\r\n\t\t\t\t\tvalue={props.VerificationInputState[index]}\r\n\t\t\t\t\thandleSetValue={updateCodeItem}\r\n\t\t\t\t/>,\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn inputs;\r\n\t};\r\n\r\n\treturn <>{renderSingleCharacterInputs()}</>;\r\n};\r\n\r\nexport default VerificationInput;","export default __webpack_public_path__ + \"static/media/checkmark_icon.bb1c0398.png\";","import React, { useEffect, useState } from \"react\";\r\nimport { EndStatement } from \"../../../../model\";\r\nimport correct from \"../../../../../assets/checkmark_white.png\";\r\nimport faulty from \"../../../../../assets/wrong_cross.png\";\r\nimport \"./styles/SlideSelector.scss\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../../translations/translationProvider\";\r\nimport DoneRoundedIcon from \"@mui/icons-material/DoneRounded\";\r\nimport CloseRoundedIcon from \"@mui/icons-material/CloseRounded\";\r\n\r\ninterface StatementRowProps {\r\n key: number;\r\n statement: EndStatement;\r\n isQuiz?: boolean;\r\n}\r\n\r\nconst StatementRow: React.FC<StatementRowProps> = (\r\n props: StatementRowProps\r\n) => {\r\n const [isExplanationShown, setisExplanationShown] = useState<boolean>(true);\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const renderStatement = (): JSX.Element => {\r\n /* Flow for if the answer is the correct answer */\r\n if (props.statement.answer) {\r\n return (\r\n <>\r\n <div\r\n className={\r\n props.statement.answer === 1\r\n ? \"statementBox selected\"\r\n : \"statementBox notSelected\"\r\n }\r\n >\r\n {languageString.studentQuizPage.Quiz.yes}\r\n </div>\r\n <div\r\n className={\r\n props.statement.answer === 2\r\n ? \"statementBox selected\"\r\n : \"statementBox notSelected\"\r\n }\r\n >\r\n {languageString.studentQuizPage.Quiz.no}\r\n </div>\r\n {props.statement.answer === props.statement.correctAnswer ? (\r\n <DoneRoundedIcon className=\"successIcon\" />\r\n ) : (\r\n <CloseRoundedIcon className=\"failedIcon\" />\r\n )}\r\n </>\r\n );\r\n } else {\r\n return (\r\n <>\r\n <div className={\"statementBox notSelected\"}>\r\n {languageString.studentQuizPage.Quiz.yes}\r\n </div>\r\n <div className={\"statementBox notSelected\"}>\r\n {languageString.studentQuizPage.Quiz.no}\r\n </div>\r\n {<CloseRoundedIcon className=\"failedIcon\" />}\r\n </>\r\n );\r\n }\r\n };\r\n\r\n const TextNExplanation = (\r\n <div className=\"text\">\r\n <span onClick={() => setisExplanationShown(!isExplanationShown)}>\r\n {props.statement.id + \". \" + props.statement.text}\r\n </span>\r\n {isExplanationShown || props.isQuiz ? (\r\n <span className=\"explanation\">{(props.statement.correctAnswer === 1 ? languageString.generalMessages.yes + \". \" : languageString.generalMessages.no + \". \") + props.statement.explanation}</span>\r\n ) : null}\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"statementRow\">\r\n {TextNExplanation}\r\n <div className=\"answers\">{renderStatement()}</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StatementRow;\r\n","export default __webpack_public_path__ + \"static/media/customLoader24fps.6aac1965.gif\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABTCAYAAADqWZt6AAAAAXNSR0IArs4c6QAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAV6ADAAQAAAABAAAAUwAAAAB1GmjuAAAE7klEQVR4Ae2ci3HbMBBExTQQdRCoAisdsIM4HcgVRCUwFcSpIHYH7sBMBVYHpiuwXIGymyE0FH8igSMASriZG4AQcVg8rSn4M14sAo/D4bBGviB1PKOzDlx2+PIAcYl8R9aDYyr8HQSsEAAf6lQr188BSw9bGp1ZAdnVTcPeRaDqQLPPtRp2dO/Y9w/khrhWA47uHQMY1O41uQFtdO9QuIDZdULo4xzdOwQwCGZ9FDtei+49BxfgTFyreUf39gEGJRPXarjRvV1wLV2rAQfl3k9dm/UwvsWaS8t1N5bzRacnotUMi9G1mPqKtIVLBaskSQp2fEcozpVwrWaZ6Y7v1rtzhV2reQbh3hCcK+laDTfTHZ+tV+dO5FrN07t7fTt3CtdquJnu+Gq9OXdi12qeXt3r07lTulbDzXTHR+vFuY5cq3l6c68v57pwrYab6Y7r1rlzHbtW8/TiXh/OdelaDfeX7rhsJ3Eu3KmwiS/IFLlErpGqTDTeYo+Vd2WynyM/kiThmHgYw60AXEPVEpmWLa/nGAVEMwl6j8yRbwBfoDWKXrjl8/EGlVWZBMf+XAFCulFUgRM8r8+CP8IFSAL7hmS7RKbIGOcJEPQemSPZ/wu383rxHy7A/kF/w4EY1gQKVPgOwLsEYO9x8cO6ZCxQJVAA7opwD9XR2BcjsPJxzhVTH3ghRefy4fs5cKFzk8ez85LO3c5N+Qz08nPseFqIH2py79gjXLs5wmUHjwcO8EgWw5zAESxLHL+J4EUETArGcQKWVU7gciACJoXR0QDLCg24HIyASWFwtILl7Fa4fCECJoWz0QmWMzu/iUiS5AGv3/GmGK0EfoPRpvWVcrDTuXpSdLAmcdLeleY7GaxfnIXLCRHwCbZBYDljEFzeGAGTwmIwWN48GC5vBuA1mhx5jT+LGAUWjMbB5YQrBTwarBHcKwRsBNYY7hUBNgZrBfcKAFuBtYZ7wYCtwYrAvTDAH9hPmgj9Bc6ooxhBdsWFnCK+SoElJzG4LAbAL2h4Fp5lAKwoj84f3BjSmS1Y7rf86jPcenOaGFxpYU2pTkaU5CpicCFKVJjkJkfUEv3Kk4QrKmwEEMlbRfcQ4Z6+NfyDbbEQ+3TEM/cVqpSYMk+FJE8Mks6dPVi+n5IfzCJwISilsAsJseeuCFxAVRcCltsQ20uE23RF2hwyG5GCKybIbBuis8RODFJwxQSJYjIrpsymNWdJwRUT1JTofkTqA9oarpQQ9wh7V1S9rw580Rou1hE7ugzU7OI2JbGIBFwRIRKbEayRStSSgOvCuW/Y7F2Z7E8dN1MvMKg+nrlt/w0fwyKxR5UMuayKwfUGWSCnjJM1q+s76WNn/JesU0Qr1PqmsPAWyXuniLS+ntNr7CidYFf3qDnYNbwXSXdLQ97awrR95q5tBVTmP6K/wo/8tsh9Zby3y3uRGW5SyJ9I/npcIpREEeMacAtdZhsPKCC2EdZCsqZt5MZgJCZCfW6xA85NJXS01UBtW8jvbXWdjRmCnRRqffMl5CdDrapez9n1SMEF7k+diastxLWRfGPHhDe9C6gksHPBeza1vXq7hJYUmZ8TXb6ufArd9IgMCmodEnTfIqmxK/L6HOfXUFY/MewxljkXYrggtNIgdcg5xpRhyeO05Niz6EAIz7u3yB3OnE8WpbxNxR7ScnH+f5pCQsg/kVshlsHpRicAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABHNCSVQICAgIfAhkiAAABM5JREFUeF7tm09SFDEUxhkvoK5cOp5ATqDDCeQGoit34gnEEyhLV8IJhBM4lBfAhTutGk4g7NyN30elrZ6edOfPe50J8FKVoqHzOi+/fMlLJ81ky5KIwERkbcZbBlAoAgNoAIUEhOamQAMoJCA0NwUaQCEBobkp0AAKCQjNTYEGUEhAaF6tApfL5Qu0bRt5MZlMjoXtHM28KoCANkVLXyLvIfO6SZe4OEI+BMzFaDQyHlwFQKc2QtuNaMOcMGtR5cYADqgtguF1kSpUWRxgotpiYW5MlUUAKqgtFmRxVY4KUEFtP0DuaSy9TrkiqlQHqKC2KxdxPzHiuucxwDA/zoA5qirVACqo7cxFVy5XvAl1MEoTJNeIOUldlSKA2mqLJVKTKrMAllBbAsyNqjIa4KbUlgBy6oZ30bkyCLAmtSXALKZKL8Da1ZYAUkuVx1gRnPvqXQMIeO9R8CDWyU65YCTNfK7YTCOCA+JO15EVgKhkhgLfEr1dWbcl2hYvLozg7wDxU9vpLkAqjwqMSVygfug+MMawljJOlV/gz4NInziUGaT+J6kCCfEEmft03jki0rGixQRzPAWzMr355sA5WvM8o0UESHmfohKCrS4prCjCANlqVETKlGrOu+cSdr+RXwPk901TdGrjMH2GfE/oTxzAphKFyLUxVSqozcc6DWAL5NQpMleVReZKwdzWNLVZUTCo8Gymm/IAtp9SoyoV1LayfnVTmG81IgfoUeUb/O1RxtwiUqWC2v7C58/I1/uOHZEwBowLsAVyhuvUxXeXd/RcqaC2pu41NbXadOMANr57VamgtqiAUBvAn3DoF3Lu7jFVeYRMhcecF/sgcW5jp/h8qF6BZ5hbZsJ3z4ypdat7phI9HGtT4DXAzuQs3acbAurdCUqJqNUDbDk4xfWeyzlvO82jgjtBtxKggiqj9x1vPcAEVQbV5hvfdwZgjyr5fSCj8QnmU0bk5HQnASZTGjAwgEKaBtAACgkIzTMVuI9qP3qq1tuNaUVPLpZ9mwlrC2khiyzzTIB9bRo+lcvxcOAo9MYCJAe0i9G//W3iBX7f7p73BD/tCEG9AQB50PU2Zjh2y7jNYy6lFm4ptXZYpgGQ299/PA5eorcehjpg7PuAMEcdvlPGHfjHe6IkBujkzp65n9PLIu8Dxk5BX3uKPenuROf4ogWQh+t9+377cPQwxzmJTeCrgyv4FPs1wqAbWgBnqGVoW59D5ZVGj4egAhzBcAmyN1C2dzM19PzufRWAbhj3zTXtOqlUZvWvF9xZCfcbmYfUdYGOnKaC6iuvCZDRihB9c6GvfjHMBGhN/dzRmQEglygqSQ2gUyF7lmBS/7djARtmJjauWS6wQ9gxjaJmrgzrYU5J6vBYuSpAB5GNJcScD5RSgKSU5SJ4V1N5TeXqAJsHY3jxffIAOXZIpwBJKasWMHyVjgawpUa+CXBiLw3ymB04duQfFWBLjRzWhEhFSg6RQsrjUD1C5ucaa69dIeOc+0UAth1z58QzB5Q/pco8xTPmzGPMcSGoxQH6HHIbElPcY25SO/oSUJMWuGA+L6WyIYhVAAz1cs33DaCwdwygARQSEJqbAg2gkIDQ3BRoAIUEhOamQAMoJCA0NwUaQCEBobkp0AAKCQjN/wGCf6BvfWWZ2AAAAABJRU5ErkJggg==\"","export const FIND_INDEX_STATUS_NOT_FOUND = -1;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAB0CAMAAAAhMehzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMS1jMDAwIDc5LmVkYTJiM2ZhYywgMjAyMS8xMS8xNy0xNzoyMzoxOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2MDlCRjc1MjQyMDY4MTE4MDgzQ0IxMzg2NzQ4QjNDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkRBRDEzRDg4N0FDMzExRUM4NDJCRUY0QjA0N0UxRkJBIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkRBRDEzRDg3N0FDMzExRUM4NDJCRUY0QjA0N0UxRkJBIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIElsbHVzdHJhdG9yIENTNiAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU2MWNmYjAyLTkxNGItNDljMC04MGMzLTUzMjc1ZTUyYzFkYyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1w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\"","export default \"data:image/png;base64,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\"","const SLASH = \"/\";\r\nconst LOGIN = \"login\";\r\nconst LOGIN_APP = \"login_app\";\r\nconst DASHBOARD = \"dashboard\";\r\nconst CERTIFICATE_CONFIGURATION = \"certificate-configuration\";\r\nconst USER_GUIDE = \"user-guide\";\r\nconst CERTIFICATE_PREFIX = \"certificate\";\r\nconst USER_SCREEN = \"user-screen\";\r\nconst QUIZ_MODULE = \"quiz-module\";\r\nconst STUDENTS = \"students\";\r\nconst TEACHER = \"teacher\";\r\nconst CERT_ID = \"id\";\r\nconst COLON = \":\";\r\nconst TEST = \"test\";\r\nconst LESSON = \"lesson\"\r\nconst QUIZ = \"quiz\"\r\nconst PROFILE = \"profile\"\r\nconst CREATE = \"create\";\r\nconst STUDENT = \"student\"\r\nconst SKOLE = \"skole\"\r\nconst ELEV = \"elev\"\r\n\r\n\r\nexport const PATH_HOME: string = SLASH;\r\nexport const PATH_LOGIN: string = SLASH + LOGIN;\r\nexport const PATH_LOGIN_APP: string = SLASH + LOGIN_APP;\r\nexport const PATH_DASHBOARD: string = SLASH + DASHBOARD;\r\nexport const PATH_CERTIFICATE_CONFIGURATION: string = SLASH + CERTIFICATE_CONFIGURATION;\r\nexport const PATH_LESSON: string = SLASH + LESSON;\r\nexport const PATH_CREATE_LESSON: string = SLASH + CREATE + LESSON;\r\nexport const PATH_TEACHER_LESSON: string = SLASH + TEACHER + LESSON;\r\nexport const PATH_QUIZ: string = SLASH + QUIZ;\r\nexport const PATH_ELEV: string = SLASH + ELEV;\r\nexport const PATH_ELEV_AI: string = SLASH + ELEV + \"AI\"\r\nexport const PATH_USER_GUIDE: string = SLASH + USER_GUIDE;\r\nexport const PATH_TEST: string = SLASH + TEST;\r\nexport const PATH_STUDENTS: string = SLASH + STUDENTS;\r\nexport const PATH_TEACHER_STUDENT: string = SLASH + TEACHER + STUDENT;\r\nexport const PATH_STUDENT_TEACHER: string = SLASH + STUDENT + TEACHER;\r\nexport const PATH_STUDENT_TEACHER_AI: string = SLASH + STUDENT + TEACHER + \"AI\";\r\nexport const PATH_SKOLE: string = SLASH + SKOLE;\r\nexport const PATH_PROFILE: string = SLASH + PROFILE","import React from 'react';\r\nimport { ILessonPageProps } from '../LessonPage';\r\n\r\nexport type ILessonPageImageProps = {\r\n img: string;\r\n}\r\n\r\nconst LessonPageImage: React.FC<ILessonPageImageProps> = (props:ILessonPageImageProps) => {\r\n return (\r\n <div className=\"lessonPageMedia\">\r\n <img src={props.img}></img>\r\n </div>\r\n );\r\n}\r\n\r\nexport { LessonPageImage };","import { gql } from '@apollo/client';\r\nimport * as Apollo from '@apollo/client';\r\nexport type Maybe<T> = T | null;\r\nexport type InputMaybe<T> = Maybe<T>;\r\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\r\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\r\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\r\nconst defaultOptions = {}\r\n/** All built-in and custom scalars, mapped to their actual values */\r\nexport type Scalars = {\r\n ID: string;\r\n String: string;\r\n Boolean: boolean;\r\n Int: number;\r\n Float: number;\r\n DateTime: any;\r\n JSON: any;\r\n Time: any;\r\n};\r\n\r\nexport type Achievement_Get = {\r\n __typename?: 'Achievement_get';\r\n achievement_desc?: Maybe<Scalars['String']>;\r\n achievement_has_fails?: Maybe<Scalars['Int']>;\r\n achievement_id?: Maybe<Scalars['ID']>;\r\n achievement_location?: Maybe<Scalars['String']>;\r\n achievement_owner_id?: Maybe<Scalars['ID']>;\r\n achievement_quiz_id?: Maybe<Scalars['String']>;\r\n achievement_status?: Maybe<Scalars['Int']>;\r\n achievement_type?: Maybe<Scalars['String']>;\r\n achievement_type_desc?: Maybe<Scalars['String']>;\r\n achievement_type_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Achievement_Grade = {\r\n achievement_has_fails?: InputMaybe<Scalars['Int']>;\r\n achievement_id?: InputMaybe<Scalars['ID']>;\r\n achievement_quiz_id?: InputMaybe<Scalars['Int']>;\r\n achievement_status?: InputMaybe<Scalars['Int']>;\r\n time_spent?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\nexport type Class = {\r\n __typename?: 'Class';\r\n class_id?: Maybe<Scalars['ID']>;\r\n class_name?: Maybe<Scalars['String']>;\r\n creation_date?: Maybe<Scalars['DateTime']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Department = {\r\n __typename?: 'Department';\r\n department_name?: Maybe<Scalars['String']>;\r\n department_province?: Maybe<Scalars['String']>;\r\n department_zipcode?: Maybe<Scalars['String']>;\r\n email_id?: Maybe<Scalars['String']>;\r\n is_department?: Maybe<Scalars['Boolean']>;\r\n language_choice?: Maybe<Scalars['Int']>;\r\n optional_note?: Maybe<Scalars['String']>;\r\n phone_number?: Maybe<Scalars['String']>;\r\n role_id?: Maybe<Scalars['Int']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n subuser_id: Scalars['ID'];\r\n};\r\n\r\nexport type Language = {\r\n __typename?: 'Language';\r\n language_name?: Maybe<Scalars['String']>;\r\n teori_language_id?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Mark_Slide = {\r\n __typename?: 'Mark_slide';\r\n explanation_location?: Maybe<Scalars['String']>;\r\n intro_sound_location?: Maybe<Scalars['String']>;\r\n intro_sound_text?: Maybe<Scalars['String']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['ID']>;\r\n online_quiz_id: Scalars['ID'];\r\n original_slide_id?: Maybe<Scalars['Int']>;\r\n progress_id: Scalars['ID'];\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n slide_statements?: Maybe<Array<Maybe<Statement>>>;\r\n};\r\n\r\nexport type Mutation = {\r\n __typename?: 'Mutation';\r\n AddPinStudent?: Maybe<Scalars['String']>;\r\n LoginStudent?: Maybe<UserLogin>;\r\n /** Slide mark endpoints */\r\n MarkSlide?: Maybe<Scalars['JSON']>;\r\n RefreshUser: UserLogin;\r\n UnmarkSlide?: Maybe<Scalars['JSON']>;\r\n UserLogout: Scalars['JSON'];\r\n /** Management of User (School, Teacher) object */\r\n VerifyStudent?: Maybe<Scalars['String']>;\r\n addAIStudent?: Maybe<Scalars['Int']>;\r\n addTeoriLessonStudent?: Maybe<Scalars['String']>;\r\n createClassOnlineQuiz?: Maybe<Online_Quiz>;\r\n /** Online Quiz object control */\r\n createFreeQuiz?: Maybe<Online_Quiz>;\r\n createQuiz?: Maybe<Online_Quiz>;\r\n finishClassOnlineQuiz?: Maybe<Online_Quiz_Result>;\r\n finishQuiz?: Maybe<Online_Quiz_Result>;\r\n gradeSlide?: Maybe<Scalars['JSON']>;\r\n /** Dashboard Control Mutations */\r\n manageAchievement: Scalars['JSON'];\r\n manageBeforeDriving: Scalars['JSON'];\r\n manageEvalTests: Scalars['JSON'];\r\n manageOnlineBook: Scalars['JSON'];\r\n manageSchoolLessons: Scalars['JSON'];\r\n manageStartContent: Scalars['JSON'];\r\n /** Management of Student object */\r\n manageStudent: Scalars['JSON'];\r\n manageSubject: Scalars['JSON'];\r\n startContent?: Maybe<Online_Quiz>;\r\n studentViewLesson?: Maybe<Scalars['JSON']>;\r\n /** Notification */\r\n deactivateNotification?: Maybe<Scalars['JSON']>;\r\n};\r\n\r\n\r\nexport type MutationAddPinStudentArgs = {\r\n phone_number?: InputMaybe<Scalars['String']>;\r\n pin_code?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n\r\nexport type MutationLoginStudentArgs = {\r\n phone_number?: InputMaybe<Scalars['String']>;\r\n pin_code?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n\r\nexport type MutationMarkSlideArgs = {\r\n marked_slides?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\r\n};\r\n\r\n\r\nexport type MutationRefreshUserArgs = {\r\n old_token: Scalars['String'];\r\n};\r\n\r\n\r\nexport type MutationUnmarkSlideArgs = {\r\n unmarked_slides?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\r\n};\r\n\r\n\r\nexport type MutationVerifyStudentArgs = {\r\n entry_code?: InputMaybe<Scalars['String']>;\r\n student_phone_number?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n\r\nexport type MutationAddAiStudentArgs = {\r\n config_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type MutationAddTeoriLessonStudentArgs = {\r\n lesson_id?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n\r\nexport type MutationCreateClassOnlineQuizArgs = {\r\n online_quiz?: InputMaybe<Online_Quiz_Input>;\r\n};\r\n\r\n\r\nexport type MutationCreateFreeQuizArgs = {\r\n online_quiz?: InputMaybe<Online_Quiz_Input>;\r\n};\r\n\r\n\r\nexport type MutationCreateQuizArgs = {\r\n online_quiz?: InputMaybe<Online_Quiz_Input>;\r\n};\r\n\r\n\r\nexport type MutationFinishClassOnlineQuizArgs = {\r\n quiz_class_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationFinishQuizArgs = {\r\n online_quiz_id?: InputMaybe<Scalars['ID']>;\r\n quiz_token_id?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n\r\nexport type MutationGradeSlideArgs = {\r\n graded_slide?: InputMaybe<Slide_Progress>;\r\n};\r\n\r\n\r\nexport type MutationManageAchievementArgs = {\r\n achievement: Achievement_Grade;\r\n};\r\n\r\n\r\nexport type MutationManageBeforeDrivingArgs = {\r\n achievement: Achievement_Grade;\r\n};\r\n\r\n\r\nexport type MutationManageEvalTestsArgs = {\r\n achievement: Achievement_Grade;\r\n};\r\n\r\n\r\nexport type MutationManageOnlineBookArgs = {\r\n achievement: Achievement_Grade;\r\n};\r\n\r\n\r\nexport type MutationManageSchoolLessonsArgs = {\r\n achievement: Achievement_Grade;\r\n};\r\n\r\n\r\nexport type MutationManageStartContentArgs = {\r\n achievement: Achievement_Grade;\r\n};\r\n\r\n\r\nexport type MutationManageStudentArgs = {\r\n student: Student_Input;\r\n};\r\n\r\n\r\nexport type MutationManageSubjectArgs = {\r\n achievement: Achievement_Grade;\r\n};\r\n\r\n\r\nexport type MutationStartContentArgs = {\r\n online_quiz_id?: InputMaybe<Scalars['ID']>;\r\n quiz_token_id?: InputMaybe<Scalars['String']>;\r\n sound_language?: InputMaybe<Scalars['Int']>;\r\n text_language?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type MutationStudentViewLessonArgs = {\r\n lesson_id?: InputMaybe<Scalars['ID']>;\r\n time_spent?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\nexport type MutationDeactivateNotificationArgs = {\r\n notification_id: Scalars['Int'];\r\n}\r\n\r\nexport type Notice = {\r\n __typename?: 'Notice';\r\n notice_background_color?: Maybe<Scalars['String']>;\r\n notice_body?: Maybe<Scalars['String']>;\r\n notice_expire_on?: Maybe<Scalars['DateTime']>;\r\n notice_id?: Maybe<Scalars['ID']>;\r\n notice_language?: Maybe<Scalars['Int']>;\r\n notice_publish_on?: Maybe<Scalars['DateTime']>;\r\n notice_student_dashboard?: Maybe<Scalars['Boolean']>;\r\n notice_students_landing?: Maybe<Scalars['Boolean']>;\r\n notice_teacher_landing?: Maybe<Scalars['Boolean']>;\r\n};\r\n\r\nexport type Online_Quiz = {\r\n __typename?: 'Online_quiz';\r\n achievement_name?: Maybe<Scalars['String']>;\r\n base_quiz?: Maybe<Scalars['ID']>;\r\n end_time?: Maybe<Scalars['DateTime']>;\r\n include_teori?: Maybe<Scalars['Boolean']>;\r\n online_Quiz_Slides?: Maybe<Array<Maybe<Online_Slide>>>;\r\n online_Quiz_Tags?: Maybe<Array<Maybe<Tag>>>;\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n quiz_class_id?: Maybe<Scalars['ID']>;\r\n quiz_date?: Maybe<Scalars['DateTime']>;\r\n quiz_language?: Maybe<Scalars['ID']>;\r\n quiz_learning_mode?: Maybe<Scalars['Boolean']>;\r\n quiz_pass_status?: Maybe<Scalars['Boolean']>;\r\n quiz_random_evaluation_test?: Maybe<Scalars['Boolean']>;\r\n quiz_read_only?: Maybe<Scalars['Boolean']>;\r\n quiz_speed?: Maybe<Scalars['ID']>;\r\n quiz_speed_value?: Maybe<Scalars['Int']>;\r\n quiz_strength_test?: Maybe<Scalars['Boolean']>;\r\n quiz_subtitles?: Maybe<Scalars['ID']>;\r\n quiz_test_name?: Maybe<Scalars['String']>;\r\n quiz_token_id?: Maybe<Scalars['String']>;\r\n save_for_later?: Maybe<Scalars['Boolean']>;\r\n slide_amount?: Maybe<Scalars['Int']>;\r\n slide_progress?: Maybe<Array<Maybe<Progress>>>;\r\n start_time?: Maybe<Scalars['DateTime']>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Online_Quiz_Input = {\r\n achievement_name?: InputMaybe<Scalars['String']>;\r\n base_quiz?: InputMaybe<Scalars['ID']>;\r\n include_teori?: InputMaybe<Scalars['Boolean']>;\r\n online_Quiz_Slides?: InputMaybe<Array<InputMaybe<Slide_Input>>>;\r\n online_Quiz_Tags?: InputMaybe<Array<InputMaybe<Tag_Input>>>;\r\n quiz_class_id?: InputMaybe<Scalars['ID']>;\r\n quiz_language?: InputMaybe<Scalars['ID']>;\r\n quiz_learning_mode?: InputMaybe<Scalars['Boolean']>;\r\n quiz_random_evaluation_test?: InputMaybe<Scalars['Boolean']>;\r\n quiz_read_only?: InputMaybe<Scalars['Boolean']>;\r\n quiz_speed?: InputMaybe<Scalars['ID']>;\r\n quiz_strength_test?: InputMaybe<Scalars['Boolean']>;\r\n quiz_subtitles?: InputMaybe<Scalars['ID']>;\r\n quiz_test_name?: InputMaybe<Scalars['String']>;\r\n quiz_token_id?: InputMaybe<Scalars['String']>;\r\n save_for_later?: InputMaybe<Scalars['Boolean']>;\r\n slide_amount?: InputMaybe<Scalars['Int']>;\r\n student_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Online_Quiz_Result = {\r\n __typename?: 'Online_quiz_result';\r\n achievement_name?: Maybe<Scalars['String']>;\r\n base_quiz?: Maybe<Scalars['ID']>;\r\n class_quiz_id?: Maybe<Scalars['ID']>;\r\n end_time?: Maybe<Scalars['DateTime']>;\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n quiz_date?: Maybe<Scalars['DateTime']>;\r\n quiz_expired?: Maybe<Scalars['Boolean']>;\r\n quiz_language?: Maybe<Scalars['ID']>;\r\n quiz_learning_mode?: Maybe<Scalars['Boolean']>;\r\n quiz_pass_status?: Maybe<Scalars['Boolean']>;\r\n quiz_test_name?: Maybe<Scalars['String']>;\r\n slide_amount?: Maybe<Scalars['Int']>;\r\n slide_progress?: Maybe<Array<Maybe<Progress>>>;\r\n slides_failed?: Maybe<Scalars['Int']>;\r\n start_time?: Maybe<Scalars['DateTime']>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Notification_Get = {\r\n notification_student_id: Scalars['Int'];\r\n message: Scalars['String']\r\n}\r\n\r\nexport type Query = {\r\n __typename?: 'Query';\r\n /** General User Queries */\r\n confirmMobileNo: Scalars['JSON'];\r\n /** Dashboard data lookouts */\r\n getAchievementTypes?: Maybe<Array<Maybe<Achievement_Type>>>;\r\n getActiveNotices?: Maybe<Array<Maybe<Notice>>>;\r\n getBeforeDrivingTest?: Maybe<Array<Maybe<Achievement_Get>>>;\r\n getClassInfo?: Maybe<Class>;\r\n getClassQuizByConfigID?: Maybe<Scalars['Int']>;\r\n getClassStudentParticipant?: Maybe<Online_Quiz_Participants>;\r\n getClassStudentResult?: Maybe<Array<Maybe<Progress>>>;\r\n getCorrectQuizzes?: Maybe<Scalars['JSON']>;\r\n getCorrectQuizzesResult?: Maybe<Array<Maybe<Online_Quiz_Result>>>;\r\n getDepartmentInfo?: Maybe<Department>;\r\n getDepartmentList?: Maybe<Array<Maybe<Department>>>;\r\n getDrivingSchoolClasses?: Maybe<Array<Maybe<Achievement_Get>>>;\r\n getEvalTests?: Maybe<Array<Maybe<Achievement_Get>>>;\r\n getFailedSlides?: Maybe<Scalars['JSON']>;\r\n getLanguages?: Maybe<Array<Maybe<Language>>>;\r\n getLatestResult?: Maybe<Array<Maybe<Online_Quiz_Result>>>;\r\n /** Lesson Service Lookouts */\r\n getLessonCategories?: Maybe<Array<Maybe<Lesson_Categories>>>;\r\n getLessonInfo?: Maybe<Array<Maybe<Lesson>>>;\r\n getMarkedSlides?: Maybe<Array<Maybe<Mark_Slide>>>;\r\n getMediaTypes?: Maybe<Array<Maybe<Media_Types>>>;\r\n getOnlineBookInfo?: Maybe<Array<Maybe<Achievement_Get>>>;\r\n getOnlineQuiz?: Maybe<Array<Maybe<Online_Quiz>>>;\r\n /** Quiz data lookouts */\r\n getOnlineQuizSpeed: Array<Maybe<Quiz_Speed>>;\r\n getQuizResult?: Maybe<Array<Maybe<Online_Quiz_Result>>>;\r\n /** School service data lookouts */\r\n getSchoolInfo?: Maybe<School>;\r\n getSchoolList?: Maybe<Array<Maybe<School>>>;\r\n getSlidesPreview?: Maybe<Array<Maybe<Short_Slide>>>;\r\n getSpokenLanguages?: Maybe<Array<Maybe<Language>>>;\r\n getStartContent?: Maybe<Array<Maybe<Achievement_Get>>>;\r\n getStudentAchievements?: Maybe<Array<Maybe<Student_Ach_Get>>>;\r\n getStudentCategories?: Maybe<Scalars['JSON']>;\r\n /** Student service data lookouts */\r\n getStudentInfo: Student;\r\n getStudentPubLessons?: Maybe<Array<Maybe<Lesson_Achievement>>>;\r\n getStudentSubjects?: Maybe<Array<Maybe<Achievement_Get>>>;\r\n getStudentTips?: Maybe<Array<Maybe<Scalars['String']>>>;\r\n getSubLanguages?: Maybe<Array<Maybe<Language>>>;\r\n /** Teacher service data lookouts */\r\n getSubuserInfo?: Maybe<Subuser>;\r\n verifyMobileNo: Scalars['JSON'];\r\n /** Notification lookouts */\r\n getStudentNotifications: Maybe<Array<Maybe<Notification_Get>>>;\r\n};\r\n\r\n\r\nexport type QueryConfirmMobileNoArgs = {\r\n student_phone_number: Scalars['String'];\r\n};\r\n\r\n\r\nexport type QueryGetAchievementTypesArgs = {\r\n category?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type QueryGetClassInfoArgs = {\r\n class_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassQuizByConfigIdArgs = {\r\n config_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type QueryGetClassStudentParticipantArgs = {\r\n class_quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassStudentResultArgs = {\r\n class_quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetDepartmentInfoArgs = {\r\n department_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetLatestResultArgs = {\r\n base_quiz_id?: InputMaybe<Scalars['ID']>;\r\n class_quiz_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\n\r\nexport type QueryGetLessonInfoArgs = {\r\n language_id: Scalars['ID'];\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetOnlineQuizArgs = {\r\n online_quiz_id: Scalars['ID'];\r\n quiz_token_id: Scalars['String'];\r\n sound_language?: InputMaybe<Scalars['Int']>;\r\n text_language?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type QueryGetQuizResultArgs = {\r\n online_quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetSlidesPreviewArgs = {\r\n language_id: Scalars['ID'];\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentAchievementsArgs = {\r\n achievement_type?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\n\r\nexport type QueryGetStudentTipsArgs = {\r\n category_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type QueryGetSubuserInfoArgs = {\r\n subuser_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryVerifyMobileNoArgs = {\r\n student_phone_number: Scalars['String'];\r\n};\r\n\r\n/** Quiz Structure */\r\nexport type Quiz_Speed = {\r\n __typename?: 'Quiz_speed';\r\n quiz_speed_id?: Maybe<Scalars['ID']>;\r\n quiz_speed_name?: Maybe<Scalars['String']>;\r\n quiz_speed_value?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type School = {\r\n __typename?: 'School';\r\n address?: Maybe<Scalars['String']>;\r\n contact_name?: Maybe<Scalars['String']>;\r\n email_id?: Maybe<Scalars['String']>;\r\n language_choice?: Maybe<Scalars['Int']>;\r\n mobile_number?: Maybe<Scalars['String']>;\r\n optional_note?: Maybe<Scalars['String']>;\r\n phone_number?: Maybe<Scalars['String']>;\r\n school_departments?: Maybe<Array<Maybe<Department>>>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n school_name: Scalars['String'];\r\n zipcode?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Slide_Input = {\r\n online_quiz_id?: InputMaybe<Scalars['ID']>;\r\n quiz_slide_id?: InputMaybe<Scalars['ID']>;\r\n slide_order?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Student = {\r\n __typename?: 'Student';\r\n expiry_date?: Maybe<Scalars['DateTime']>;\r\n first_name?: Maybe<Scalars['String']>;\r\n language_choice?: Maybe<Scalars['Int']>;\r\n last_name?: Maybe<Scalars['String']>;\r\n optional_value?: Maybe<Scalars['String']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n student_category?: Maybe<Scalars['String']>;\r\n student_class_start?: Maybe<Scalars['DateTime']>;\r\n student_email?: Maybe<Scalars['String']>;\r\n student_id: Scalars['ID'];\r\n student_name?: Maybe<Scalars['String']>;\r\n student_phone_number?: Maybe<Scalars['String']>;\r\n teori_department?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Student_Input = {\r\n first_name?: InputMaybe<Scalars['String']>;\r\n language_choice?: InputMaybe<Scalars['Int']>;\r\n last_name?: InputMaybe<Scalars['String']>;\r\n school_id?: InputMaybe<Scalars['ID']>;\r\n student_category?: InputMaybe<Scalars['Int']>;\r\n student_email?: InputMaybe<Scalars['String']>;\r\n student_name?: InputMaybe<Scalars['String']>;\r\n teori_department?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Student_Ach_Get = {\r\n __typename?: 'Student_ach_get';\r\n achievement_id?: Maybe<Scalars['ID']>;\r\n achievement_languages?: Maybe<Scalars['String']>;\r\n achievement_location?: Maybe<Scalars['String']>;\r\n achievement_media_type?: Maybe<Scalars['ID']>;\r\n achievement_name?: Maybe<Scalars['String']>;\r\n dash_has_fails?: Maybe<Scalars['Int']>;\r\n dash_quiz_id?: Maybe<Scalars['Int']>;\r\n dash_status?: Maybe<Scalars['Int']>;\r\n dash_track_id?: Maybe<Scalars['ID']>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Subuser = {\r\n __typename?: 'Subuser';\r\n department_name?: Maybe<Scalars['String']>;\r\n department_province?: Maybe<Scalars['String']>;\r\n department_zipcode?: Maybe<Scalars['String']>;\r\n email_id?: Maybe<Scalars['String']>;\r\n is_department?: Maybe<Scalars['Boolean']>;\r\n language_choice?: Maybe<Scalars['Int']>;\r\n mobile_number?: Maybe<Scalars['String']>;\r\n optional_note?: Maybe<Scalars['String']>;\r\n phone_number?: Maybe<Scalars['String']>;\r\n role_id?: Maybe<Scalars['Int']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n subuser_id: Scalars['ID'];\r\n teacher_name?: Maybe<Scalars['String']>;\r\n vat_number?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Tag_Input = {\r\n tag_id?: InputMaybe<Scalars['ID']>;\r\n tag_name?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\nexport type UserLogin = {\r\n __typename?: 'UserLogin';\r\n accessToken?: Maybe<Scalars['String']>;\r\n login_before?: Maybe<Scalars['Boolean']>;\r\n refreshToken?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Achievement_Type = {\r\n __typename?: 'achievement_type';\r\n achievement_category?: Maybe<Scalars['Int']>;\r\n achievement_desc?: Maybe<Scalars['String']>;\r\n achievement_language?: Maybe<Scalars['Int']>;\r\n achievement_name?: Maybe<Scalars['String']>;\r\n achievement_type_desc?: Maybe<Scalars['String']>;\r\n achievement_type_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Content = {\r\n __typename?: 'content';\r\n content_id?: Maybe<Scalars['ID']>;\r\n media_default?: Maybe<Scalars['Boolean']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_owner?: Maybe<Scalars['Int']>;\r\n media_type_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\n/** Lesson Structure */\r\nexport type Lesson = {\r\n __typename?: 'lesson';\r\n lesson_category?: Maybe<Scalars['Int']>;\r\n lesson_content_desc?: Maybe<Scalars['String']>;\r\n lesson_date_format?: Maybe<Scalars['String']>;\r\n lesson_default?: Maybe<Scalars['Int']>;\r\n lesson_default_language?: Maybe<Scalars['Int']>;\r\n lesson_id?: Maybe<Scalars['ID']>;\r\n lesson_logo?: Maybe<Scalars['String']>;\r\n lesson_name?: Maybe<Scalars['String']>;\r\n slides?: Maybe<Array<Maybe<Slide>>>;\r\n};\r\n\r\nexport type Lesson_Achievement = {\r\n __typename?: 'lesson_achievement';\r\n ach_pub_lesson_view_date?: Maybe<Scalars['DateTime']>;\r\n lesson_id?: Maybe<Scalars['Int']>;\r\n lesson_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Lesson_Categories = {\r\n __typename?: 'lesson_categories';\r\n cat_id?: Maybe<Scalars['ID']>;\r\n cat_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Media_Types = {\r\n __typename?: 'media_types';\r\n media_type_desc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['ID']>;\r\n media_type_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Online_Quiz_Participants = {\r\n __typename?: 'online_quiz_participants';\r\n class_quiz_id?: Maybe<Scalars['ID']>;\r\n student_amount?: Maybe<Scalars['Int']>;\r\n student_failed?: Maybe<Scalars['Int']>;\r\n student_passed?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Online_Slide = {\r\n __typename?: 'online_slide';\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n quiz_slide_id?: Maybe<Scalars['ID']>;\r\n slide_order?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Progress = {\r\n __typename?: 'progress';\r\n explanation_location?: Maybe<Scalars['String']>;\r\n intro_sound_location?: Maybe<Scalars['String']>;\r\n intro_sound_text?: Maybe<Scalars['String']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['ID']>;\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n original_slide_id?: Maybe<Scalars['ID']>;\r\n progress_id?: Maybe<Scalars['ID']>;\r\n progress_is_marked?: Maybe<Scalars['Boolean']>;\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n slide_statements?: Maybe<Array<Maybe<Statement>>>;\r\n statement_progress?: Maybe<Array<Maybe<Statement>>>;\r\n};\r\n\r\nexport type Short_Slide = {\r\n __typename?: 'short_slide';\r\n language_id?: Maybe<Scalars['Int']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_name?: Maybe<Scalars['String']>;\r\n slide_id?: Maybe<Scalars['ID']>;\r\n slide_is_accesible?: Maybe<Scalars['Int']>;\r\n slide_note?: Maybe<Scalars['String']>;\r\n slide_order?: Maybe<Scalars['Int']>;\r\n slide_sound_location?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Slide = {\r\n __typename?: 'slide';\r\n keywords?: Maybe<Scalars['String']>;\r\n language_id?: Maybe<Scalars['Int']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['Int']>;\r\n slide_id?: Maybe<Scalars['ID']>;\r\n slide_is_accesible?: Maybe<Scalars['Int']>;\r\n slide_note?: Maybe<Scalars['String']>;\r\n slide_order?: Maybe<Scalars['Int']>;\r\n slide_sound_location?: Maybe<Scalars['String']>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n};\r\n\r\nexport type Slide_Progress = {\r\n progress_id?: InputMaybe<Scalars['ID']>;\r\n statement_progress?: InputMaybe<Array<InputMaybe<Statement_Grade>>>;\r\n};\r\n\r\nexport type Statement = {\r\n __typename?: 'statement';\r\n elaboration_Text?: Maybe<Scalars['String']>;\r\n online_slide_id?: Maybe<Scalars['ID']>;\r\n original_statement_id?: Maybe<Scalars['ID']>;\r\n quiz_statement_no?: Maybe<Scalars['Int']>;\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n sound_location?: Maybe<Scalars['String']>;\r\n sound_text?: Maybe<Scalars['String']>;\r\n statement_answer_id?: Maybe<Scalars['Int']>;\r\n statement_progress_answer?: Maybe<Scalars['Int']>;\r\n statement_progress_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Statement_Grade = {\r\n slide_pass_status?: InputMaybe<Scalars['Boolean']>;\r\n statement_progress_answer?: InputMaybe<Scalars['Int']>;\r\n statement_progress_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Statement_Marked = {\r\n __typename?: 'statement_marked';\r\n elaboration_id?: Maybe<Scalars['ID']>;\r\n elaboration_text?: Maybe<Scalars['String']>;\r\n quiz_Slide_id?: Maybe<Scalars['ID']>;\r\n quiz_Statement_Id?: Maybe<Scalars['ID']>;\r\n quiz_statement_content?: Maybe<Scalars['ID']>;\r\n quiz_statement_no?: Maybe<Scalars['ID']>;\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n sound_language?: Maybe<Scalars['Int']>;\r\n sound_location?: Maybe<Scalars['String']>;\r\n sound_text?: Maybe<Scalars['String']>;\r\n statement_answer_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Tag = {\r\n __typename?: 'tag';\r\n tag_id?: Maybe<Scalars['ID']>;\r\n tag_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type LoginStudentMutationVariables = Exact<{\r\n pin_code?: Maybe<Scalars['String']>;\r\n phone_number?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type LoginStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & { LoginStudent?: Maybe<(\r\n { __typename?: 'UserLogin' }\r\n & Pick<UserLogin, 'accessToken' | 'refreshToken' | 'login_before'>\r\n )> }\r\n);\r\n\r\nexport type RefreshUserMutationVariables = Exact<{\r\n old_token: Scalars['String'];\r\n}>;\r\n\r\n\r\nexport type RefreshUserMutation = (\r\n { __typename?: 'Mutation' }\r\n & { RefreshUser: (\r\n { __typename?: 'UserLogin' }\r\n & Pick<UserLogin, 'accessToken' | 'refreshToken'>\r\n ) }\r\n);\r\n\r\nexport type VerifyStudentMutationVariables = Exact<{\r\n entry_code?: Maybe<Scalars['String']>;\r\n student_phone_number?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type VerifyStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'VerifyStudent'>\r\n);\r\n\r\nexport type AddPinStudentMutationVariables = Exact<{\r\n pin_code?: Maybe<Scalars['String']>;\r\n phone_number?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type AddPinStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'AddPinStudent'>\r\n);\r\n\r\nexport type VerifyMobileNoQueryVariables = Exact<{\r\n student_phone_number: Scalars['String'];\r\n}>;\r\n\r\n\r\nexport type VerifyMobileNoQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'verifyMobileNo'>\r\n);\r\n\r\nexport type ConfirmMobileNoQueryVariables = Exact<{\r\n student_phone_number: Scalars['String'];\r\n}>;\r\n\r\n\r\nexport type ConfirmMobileNoQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'confirmMobileNo'>\r\n);\r\n\r\nexport type GetActiveNoticesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetActiveNoticesQuery = (\r\n { __typename?: 'Query' }\r\n & { getActiveNotices?: Maybe<Array<Maybe<(\r\n { __typename?: 'Notice' }\r\n & Pick<Notice, 'notice_body' | 'notice_background_color'>\r\n )>>> }\r\n);\r\n\r\nexport type GetStudentSubjectsQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStudentSubjectsQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentSubjects?: Maybe<Array<Maybe<(\r\n { __typename?: 'Achievement_get' }\r\n & Pick<Achievement_Get, 'achievement_id' | 'achievement_owner_id' | 'achievement_desc' | 'achievement_status' | 'achievement_type_desc' | 'achievement_type_name' | 'achievement_location' | 'achievement_quiz_id' | 'achievement_has_fails'>\r\n )>>> }\r\n);\r\n\r\nexport type GetStudentCategoriesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStudentCategoriesQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getStudentCategories'>\r\n);\r\n\r\nexport type GetEvalTestsQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetEvalTestsQuery = (\r\n { __typename?: 'Query' }\r\n & { getEvalTests?: Maybe<Array<Maybe<(\r\n { __typename?: 'Achievement_get' }\r\n & Pick<Achievement_Get, 'achievement_id' | 'achievement_owner_id' | 'achievement_desc' | 'achievement_status' | 'achievement_type_name' | 'achievement_type_desc' | 'achievement_location' | 'achievement_quiz_id' | 'achievement_has_fails'>\r\n )>>> }\r\n);\r\n\r\nexport type GetOnlineBookInfoQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetOnlineBookInfoQuery = (\r\n { __typename?: 'Query' }\r\n & { getOnlineBookInfo?: Maybe<Array<Maybe<(\r\n { __typename?: 'Achievement_get' }\r\n & Pick<Achievement_Get, 'achievement_id' | 'achievement_owner_id' | 'achievement_desc' | 'achievement_status' | 'achievement_type_desc' | 'achievement_type_name' | 'achievement_location' | 'achievement_quiz_id' | 'achievement_has_fails'>\r\n )>>> }\r\n);\r\n\r\nexport type GetDrivingSchoolClassesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetDrivingSchoolClassesQuery = (\r\n { __typename?: 'Query' }\r\n & { getDrivingSchoolClasses?: Maybe<Array<Maybe<(\r\n { __typename?: 'Achievement_get' }\r\n & Pick<Achievement_Get, 'achievement_id' | 'achievement_owner_id' | 'achievement_desc' | 'achievement_type_name' | 'achievement_status' | 'achievement_type_desc' | 'achievement_location' | 'achievement_quiz_id' | 'achievement_has_fails'>\r\n )>>> }\r\n);\r\n\r\nexport type GetBeforeDrivingTestQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetBeforeDrivingTestQuery = (\r\n { __typename?: 'Query' }\r\n & { getBeforeDrivingTest?: Maybe<Array<Maybe<(\r\n { __typename?: 'Achievement_get' }\r\n & Pick<Achievement_Get, 'achievement_id' | 'achievement_owner_id' | 'achievement_desc' | 'achievement_type_name' | 'achievement_status' | 'achievement_type_desc' | 'achievement_location' | 'achievement_quiz_id' | 'achievement_has_fails'>\r\n )>>> }\r\n);\r\n\r\nexport type GetStartContentQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStartContentQuery = (\r\n { __typename?: 'Query' }\r\n & { getStartContent?: Maybe<Array<Maybe<(\r\n { __typename?: 'Achievement_get' }\r\n & Pick<Achievement_Get, 'achievement_id' | 'achievement_owner_id' | 'achievement_desc' | 'achievement_type_name' | 'achievement_status' | 'achievement_type_desc' | 'achievement_location' | 'achievement_quiz_id' | 'achievement_has_fails'>\r\n )>>> }\r\n);\r\n\r\nexport type ManageStartContentMutationVariables = Exact<{\r\n achievement: Achievement_Grade;\r\n}>;\r\n\r\n\r\nexport type ManageStartContentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageStartContent'>\r\n);\r\n\r\nexport type ManageSubjectMutationVariables = Exact<{\r\n achievement: Achievement_Grade;\r\n}>;\r\n\r\n\r\nexport type ManageSubjectMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageSubject'>\r\n);\r\n\r\nexport type ManageEvalTestsMutationVariables = Exact<{\r\n achievement: Achievement_Grade;\r\n}>;\r\n\r\n\r\nexport type ManageEvalTestsMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageEvalTests'>\r\n);\r\n\r\nexport type ManageOnlineBookMutationVariables = Exact<{\r\n achievement: Achievement_Grade;\r\n}>;\r\n\r\n\r\nexport type ManageOnlineBookMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageOnlineBook'>\r\n);\r\n\r\nexport type ManageSchoolLessonsMutationVariables = Exact<{\r\n achievement: Achievement_Grade;\r\n}>;\r\n\r\n\r\nexport type ManageSchoolLessonsMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageSchoolLessons'>\r\n);\r\n\r\nexport type ManageBeforeDrivingMutationVariables = Exact<{\r\n achievement: Achievement_Grade;\r\n}>;\r\n\r\n\r\nexport type ManageBeforeDrivingMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageBeforeDriving'>\r\n);\r\n\r\nexport type GetStudentInfoQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStudentInfoQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentInfo: (\r\n { __typename?: 'Student' }\r\n & Pick<Student, 'school_id' | 'first_name' | 'last_name' | 'student_email' | 'student_phone_number' | 'student_category' | 'language_choice' | 'teori_department'>\r\n ) }\r\n);\r\n\r\nexport type GetStudentNameQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStudentNameQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentInfo: (\r\n { __typename?: 'Student' }\r\n & Pick<Student, 'first_name' | 'last_name'>\r\n ) }\r\n);\r\n\r\nexport type ManageStudentMutationVariables = Exact<{\r\n student: Student_Input;\r\n}>;\r\n\r\n\r\nexport type ManageStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageStudent'>\r\n);\r\n\r\nexport type GetSchoolListQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetSchoolListQuery = (\r\n { __typename?: 'Query' }\r\n & { getSchoolList?: Maybe<Array<Maybe<(\r\n { __typename?: 'School' }\r\n & Pick<School, 'school_id' | 'school_name' | 'zipcode'>\r\n )>>> }\r\n);\r\n\r\nexport type GetDepartmentListQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetDepartmentListQuery = (\r\n { __typename?: 'Query' }\r\n & { getDepartmentList?: Maybe<Array<Maybe<(\r\n { __typename?: 'Department' }\r\n & Pick<Department, 'subuser_id' | 'department_name' | 'department_zipcode' | 'school_id'>\r\n )>>> }\r\n);\r\n\r\nexport type CreateQuizMutationVariables = Exact<{\r\n online_quiz?: Maybe<Online_Quiz_Input>;\r\n}>;\r\n\r\n\r\nexport type CreateQuizMutation = (\r\n { __typename?: 'Mutation' }\r\n & { createQuiz?: Maybe<(\r\n { __typename?: 'Online_quiz' }\r\n & Pick<Online_Quiz, 'online_quiz_id' | 'quiz_token_id'>\r\n )> }\r\n);\r\n\r\nexport type StartContentMutationVariables = Exact<{\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n quiz_token_id?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type StartContentMutation = (\r\n { __typename?: 'Mutation' }\r\n & { startContent?: Maybe<(\r\n { __typename?: 'Online_quiz' }\r\n & Pick<Online_Quiz, 'quiz_test_name' | 'quiz_speed' | 'quiz_speed_value' | 'quiz_language' | 'quiz_subtitles' | 'quiz_read_only'>\r\n & { slide_progress?: Maybe<Array<Maybe<(\r\n { __typename?: 'progress' }\r\n & Pick<Progress, 'progress_is_marked' | 'progress_id' | 'original_slide_id' | 'online_quiz_id' | 'explanation_location' | 'intro_sound_text' | 'media_location' | 'media_type_id' | 'media_location_enc' | 'intro_sound_location' | 'slide_pass_status'>\r\n & { statement_progress?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement' }\r\n & Pick<Statement, 'statement_progress_id' | 'online_slide_id' | 'original_statement_id' | 'statement_answer_id' | 'quiz_statement_no' | 'elaboration_Text' | 'sound_text' | 'sound_location' | 'slide_pass_status'>\r\n )>>> }\r\n )>>> }\r\n )> }\r\n);\r\n\r\nexport type GradeSlideMutationVariables = Exact<{\r\n gradedSlide?: Maybe<Slide_Progress>;\r\n}>;\r\n\r\n\r\nexport type GradeSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'gradeSlide'>\r\n);\r\n\r\nexport type FinishQuizMutationVariables = Exact<{\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n online_quiz_token?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type FinishQuizMutation = (\r\n { __typename?: 'Mutation' }\r\n & { finishQuiz?: Maybe<(\r\n { __typename?: 'Online_quiz_result' }\r\n & Pick<Online_Quiz_Result, 'quiz_test_name' | 'start_time' | 'end_time' | 'slides_failed' | 'quiz_pass_status'>\r\n )> }\r\n);\r\n\r\nexport type GetLatestResultQueryVariables = Exact<{\r\n base_quiz_id?: Maybe<Scalars['ID']>;\r\n}>;\r\n\r\n\r\nexport type GetLatestResultQuery = (\r\n { __typename?: 'Query' }\r\n & { getLatestResult?: Maybe<Array<Maybe<(\r\n { __typename?: 'Online_quiz_result' }\r\n & Pick<Online_Quiz_Result, 'online_quiz_id' | 'quiz_test_name' | 'quiz_pass_status' | 'slide_amount' | 'slides_failed'>\r\n & { slide_progress?: Maybe<Array<Maybe<(\r\n { __typename?: 'progress' }\r\n & Pick<Progress, 'progress_is_marked' | 'progress_id' | 'original_slide_id' | 'online_quiz_id' | 'explanation_location' | 'intro_sound_text' | 'media_location' | 'media_type_id' | 'media_location_enc' | 'intro_sound_location' | 'slide_pass_status'>\r\n & { statement_progress?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement' }\r\n & Pick<Statement, 'statement_progress_id' | 'online_slide_id' | 'original_statement_id' | 'statement_answer_id' | 'quiz_statement_no' | 'elaboration_Text' | 'sound_text' | 'sound_location' | 'slide_pass_status' | 'statement_progress_answer'>\r\n )>>> }\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type GetQuizResultQueryVariables = Exact<{\r\n online_quiz_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetQuizResultQuery = (\r\n { __typename?: 'Query' }\r\n & { getQuizResult?: Maybe<Array<Maybe<(\r\n { __typename?: 'Online_quiz_result' }\r\n & Pick<Online_Quiz_Result, 'online_quiz_id' | 'quiz_test_name' | 'quiz_pass_status' | 'slide_amount' | 'slides_failed'>\r\n & { slide_progress?: Maybe<Array<Maybe<(\r\n { __typename?: 'progress' }\r\n & Pick<Progress, 'progress_is_marked' | 'progress_id' | 'original_slide_id' | 'online_quiz_id' | 'explanation_location' | 'intro_sound_text' | 'media_location' | 'media_type_id' | 'media_location_enc' | 'intro_sound_location' | 'slide_pass_status'>\r\n & { statement_progress?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement' }\r\n & Pick<Statement, 'statement_progress_id' | 'online_slide_id' | 'original_statement_id' | 'statement_answer_id' | 'quiz_statement_no' | 'elaboration_Text' | 'sound_text' | 'sound_location' | 'slide_pass_status' | 'statement_progress_answer'>\r\n )>>> }\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type CreateClassOnlineQuizMutationVariables = Exact<{\r\n online_quiz?: Maybe<Online_Quiz_Input>;\r\n}>;\r\n\r\n\r\nexport type CreateClassOnlineQuizMutation = (\r\n { __typename?: 'Mutation' }\r\n & { createClassOnlineQuiz?: Maybe<(\r\n { __typename?: 'Online_quiz' }\r\n & Pick<Online_Quiz, 'quiz_token_id' | 'online_quiz_id'>\r\n )> }\r\n);\r\n\r\nexport type FinishClassOnlineQuizMutationVariables = Exact<{\r\n quiz_class_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type FinishClassOnlineQuizMutation = (\r\n { __typename?: 'Mutation' }\r\n & { finishClassOnlineQuiz?: Maybe<(\r\n { __typename?: 'Online_quiz_result' }\r\n & Pick<Online_Quiz_Result, 'quiz_test_name' | 'quiz_pass_status' | 'slide_amount' | 'slides_failed'>\r\n )> }\r\n);\r\n\r\nexport type GetCorrectQuizzesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetCorrectQuizzesQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getCorrectQuizzes'>\r\n);\r\n\r\nexport type GetAchievementTypesQueryVariables = Exact<{\r\n category?: Maybe<Scalars['Int']>;\r\n}>;\r\n\r\n\r\nexport type GetAchievementTypesQuery = (\r\n { __typename?: 'Query' }\r\n & { getAchievementTypes?: Maybe<Array<Maybe<(\r\n { __typename?: 'achievement_type' }\r\n & Pick<Achievement_Type, 'achievement_type_id' | 'achievement_category' | 'achievement_language' | 'achievement_name' | 'achievement_desc' | 'achievement_type_desc'>\r\n )>>> }\r\n);\r\n\r\nexport type GetStudentAchievementsQueryVariables = Exact<{\r\n achievement_type?: Maybe<Scalars['ID']>;\r\n}>;\r\n\r\n\r\nexport type GetStudentAchievementsQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentAchievements?: Maybe<Array<Maybe<(\r\n { __typename?: 'Student_ach_get' }\r\n & Pick<Student_Ach_Get, 'dash_track_id' | 'achievement_id' | 'achievement_name' | 'achievement_location' | 'achievement_media_type' | 'achievement_languages' | 'dash_status' | 'dash_has_fails' | 'dash_quiz_id'>\r\n )>>> }\r\n);\r\n\r\nexport type ManageAchievementMutationVariables = Exact<{\r\n achievement: Achievement_Grade;\r\n}>;\r\n\r\n\r\nexport type ManageAchievementMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageAchievement'>\r\n);\r\n\r\nexport type CreateFreeQuizMutationVariables = Exact<{\r\n online_quiz?: Maybe<Online_Quiz_Input>;\r\n}>;\r\n\r\n\r\nexport type CreateFreeQuizMutation = (\r\n { __typename?: 'Mutation' }\r\n & { createFreeQuiz?: Maybe<(\r\n { __typename?: 'Online_quiz' }\r\n & Pick<Online_Quiz, 'online_quiz_id' | 'quiz_token_id'>\r\n )> }\r\n);\r\n\r\nexport type GetFailedSlidesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetFailedSlidesQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getFailedSlides'>\r\n);\r\n\r\nexport type MarkSlideMutationVariables = Exact<{\r\n marked_slides?: Maybe<Array<Maybe<Scalars['ID']>> | Maybe<Scalars['ID']>>;\r\n}>;\r\n\r\n\r\nexport type MarkSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'MarkSlide'>\r\n);\r\n\r\nexport type UnmarkSlideMutationVariables = Exact<{\r\n unmarked_slides?: Maybe<Array<Maybe<Scalars['ID']>> | Maybe<Scalars['ID']>>;\r\n}>;\r\n\r\n\r\nexport type UnmarkSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'UnmarkSlide'>\r\n);\r\n\r\nexport type GetMarkedSlidesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetMarkedSlidesQuery = (\r\n { __typename?: 'Query' }\r\n & { getMarkedSlides?: Maybe<Array<Maybe<(\r\n { __typename?: 'Mark_slide' }\r\n & Pick<Mark_Slide, 'slide_pass_status' | 'original_slide_id' | 'media_location' | 'intro_sound_text' | 'media_type_id'>\r\n & { slide_statements?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement' }\r\n & Pick<Statement, 'statement_progress_id' | 'statement_progress_answer' | 'online_slide_id' | 'original_statement_id' | 'statement_answer_id' | 'quiz_statement_no' | 'elaboration_Text' | 'sound_text' | 'slide_pass_status'>\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type GetStudentPubLessonsQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStudentPubLessonsQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentPubLessons?: Maybe<Array<Maybe<(\r\n { __typename?: 'lesson_achievement' }\r\n & Pick<Lesson_Achievement, 'lesson_id' | 'lesson_name' | 'ach_pub_lesson_view_date'>\r\n )>>> }\r\n);\r\n\r\nexport type StudentViewLessonMutationVariables = Exact<{\r\n lesson_id?: Maybe<Scalars['ID']>;\r\n time_spent?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type StudentViewLessonMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'studentViewLesson'>\r\n);\r\n\r\nexport type DeactivateNotificationMutationVariables = Exact<{\r\n notification_id: Scalars['Int'];\r\n}>;\r\n\r\nexport type DeactivateNotificationMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deactivateNotification'>\r\n);\r\n\r\nexport type GetCorrectQuizzesResultQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetCorrectQuizzesResultQuery = (\r\n { __typename?: 'Query' }\r\n & { getCorrectQuizzesResult?: Maybe<Array<Maybe<(\r\n { __typename?: 'Online_quiz_result' }\r\n & Pick<Online_Quiz_Result, 'quiz_pass_status' | 'online_quiz_id' | 'quiz_test_name' | 'quiz_expired' | 'end_time' | 'achievement_name'>\r\n )>>> }\r\n);\r\n\r\nexport type GetClassStudentResultQueryVariables = Exact<{\r\n class_quiz_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetClassStudentResultQuery = (\r\n { __typename?: 'Query' }\r\n & { getClassStudentResult?: Maybe<Array<Maybe<(\r\n { __typename?: 'progress' }\r\n & Pick<Progress, 'progress_id' | 'progress_is_marked' | 'intro_sound_text' | 'intro_sound_location' | 'slide_pass_status'>\r\n & { slide_statements?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement' }\r\n & Pick<Statement, 'statement_progress_answer' | 'statement_answer_id' | 'sound_text' | 'slide_pass_status'>\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type GetClassStudentParticipantQueryVariables = Exact<{\r\n class_quiz_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetClassStudentParticipantQuery = (\r\n { __typename?: 'Query' }\r\n & { getClassStudentParticipant?: Maybe<(\r\n { __typename?: 'online_quiz_participants' }\r\n & Pick<Online_Quiz_Participants, 'student_amount' | 'student_passed' | 'student_failed'>\r\n )> }\r\n);\r\n\r\nexport type AddAiStudentMutationVariables = Exact<{\r\n configId: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type AddAiStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'addAIStudent'>\r\n);\r\n\r\nexport type GetClassQuizByConfigIdQueryVariables = Exact<{\r\n config_id: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type GetClassQuizByConfigIdQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getClassQuizByConfigID'>\r\n);\r\n\r\nexport type AddTeoriLessonStudentMutationVariables = Exact<{\r\n lessonId?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type AddTeoriLessonStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'addTeoriLessonStudent'>\r\n);\r\n\r\nexport type GetStudentTipsQueryVariables = Exact<{\r\n categoryId: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type GetStudentTipsQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getStudentTips'>\r\n);\r\n\r\nexport type GetNotificationQueryVariables = Exact<{\r\n [key: string]: never; \r\n}>;\r\n\r\n\r\nexport type GetNotificationQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentNotifications ?: Maybe<Array<Maybe<(\r\n { __typename?: 'Notification_Get' }\r\n & Pick<Notification_Get, 'notification_student_id' | 'message'>\r\n )>>> }\r\n);\r\n\r\n\r\nexport const LoginStudentDocument = gql`\r\n mutation LoginStudent($pin_code: String, $phone_number: String) {\r\n LoginStudent(pin_code: $pin_code, phone_number: $phone_number) {\r\n accessToken\r\n refreshToken\r\n login_before\r\n }\r\n}\r\n `;\r\nexport type LoginStudentMutationFn = Apollo.MutationFunction<LoginStudentMutation, LoginStudentMutationVariables>;\r\n\r\n/**\r\n * __useLoginStudentMutation__\r\n *\r\n * To run a mutation, you first call `useLoginStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useLoginStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [loginStudentMutation, { data, loading, error }] = useLoginStudentMutation({\r\n * variables: {\r\n * pin_code: // value for 'pin_code'\r\n * phone_number: // value for 'phone_number'\r\n * },\r\n * });\r\n */\r\nexport function useLoginStudentMutation(baseOptions?: Apollo.MutationHookOptions<LoginStudentMutation, LoginStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<LoginStudentMutation, LoginStudentMutationVariables>(LoginStudentDocument, options);\r\n }\r\nexport type LoginStudentMutationHookResult = ReturnType<typeof useLoginStudentMutation>;\r\nexport type LoginStudentMutationResult = Apollo.MutationResult<LoginStudentMutation>;\r\nexport type LoginStudentMutationOptions = Apollo.BaseMutationOptions<LoginStudentMutation, LoginStudentMutationVariables>;\r\nexport const RefreshUserDocument = gql`\r\n mutation RefreshUser($old_token: String!) {\r\n RefreshUser(old_token: $old_token) {\r\n accessToken\r\n refreshToken\r\n }\r\n}\r\n `;\r\nexport type RefreshUserMutationFn = Apollo.MutationFunction<RefreshUserMutation, RefreshUserMutationVariables>;\r\n\r\n/**\r\n * __useRefreshUserMutation__\r\n *\r\n * To run a mutation, you first call `useRefreshUserMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useRefreshUserMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [refreshUserMutation, { data, loading, error }] = useRefreshUserMutation({\r\n * variables: {\r\n * old_token: // value for 'old_token'\r\n * },\r\n * });\r\n */\r\nexport function useRefreshUserMutation(baseOptions?: Apollo.MutationHookOptions<RefreshUserMutation, RefreshUserMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<RefreshUserMutation, RefreshUserMutationVariables>(RefreshUserDocument, options);\r\n }\r\nexport type RefreshUserMutationHookResult = ReturnType<typeof useRefreshUserMutation>;\r\nexport type RefreshUserMutationResult = Apollo.MutationResult<RefreshUserMutation>;\r\nexport type RefreshUserMutationOptions = Apollo.BaseMutationOptions<RefreshUserMutation, RefreshUserMutationVariables>;\r\nexport const VerifyStudentDocument = gql`\r\n mutation VerifyStudent($entry_code: String, $student_phone_number: String) {\r\n VerifyStudent(\r\n entry_code: $entry_code\r\n student_phone_number: $student_phone_number\r\n )\r\n}\r\n `;\r\nexport type VerifyStudentMutationFn = Apollo.MutationFunction<VerifyStudentMutation, VerifyStudentMutationVariables>;\r\n\r\n/**\r\n * __useVerifyStudentMutation__\r\n *\r\n * To run a mutation, you first call `useVerifyStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useVerifyStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [verifyStudentMutation, { data, loading, error }] = useVerifyStudentMutation({\r\n * variables: {\r\n * entry_code: // value for 'entry_code'\r\n * student_phone_number: // value for 'student_phone_number'\r\n * },\r\n * });\r\n */\r\nexport function useVerifyStudentMutation(baseOptions?: Apollo.MutationHookOptions<VerifyStudentMutation, VerifyStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<VerifyStudentMutation, VerifyStudentMutationVariables>(VerifyStudentDocument, options);\r\n }\r\nexport type VerifyStudentMutationHookResult = ReturnType<typeof useVerifyStudentMutation>;\r\nexport type VerifyStudentMutationResult = Apollo.MutationResult<VerifyStudentMutation>;\r\nexport type VerifyStudentMutationOptions = Apollo.BaseMutationOptions<VerifyStudentMutation, VerifyStudentMutationVariables>;\r\nexport const AddPinStudentDocument = gql`\r\n mutation AddPinStudent($pin_code: String, $phone_number: String) {\r\n AddPinStudent(pin_code: $pin_code, phone_number: $phone_number)\r\n}\r\n `;\r\nexport type AddPinStudentMutationFn = Apollo.MutationFunction<AddPinStudentMutation, AddPinStudentMutationVariables>;\r\n\r\n/**\r\n * __useAddPinStudentMutation__\r\n *\r\n * To run a mutation, you first call `useAddPinStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useAddPinStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [addPinStudentMutation, { data, loading, error }] = useAddPinStudentMutation({\r\n * variables: {\r\n * pin_code: // value for 'pin_code'\r\n * phone_number: // value for 'phone_number'\r\n * },\r\n * });\r\n */\r\nexport function useAddPinStudentMutation(baseOptions?: Apollo.MutationHookOptions<AddPinStudentMutation, AddPinStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<AddPinStudentMutation, AddPinStudentMutationVariables>(AddPinStudentDocument, options);\r\n }\r\nexport type AddPinStudentMutationHookResult = ReturnType<typeof useAddPinStudentMutation>;\r\nexport type AddPinStudentMutationResult = Apollo.MutationResult<AddPinStudentMutation>;\r\nexport type AddPinStudentMutationOptions = Apollo.BaseMutationOptions<AddPinStudentMutation, AddPinStudentMutationVariables>;\r\nexport const VerifyMobileNoDocument = gql`\r\n query verifyMobileNo($student_phone_number: String!) {\r\n verifyMobileNo(student_phone_number: $student_phone_number)\r\n}\r\n `;\r\n\r\n/**\r\n * __useVerifyMobileNoQuery__\r\n *\r\n * To run a query within a React component, call `useVerifyMobileNoQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useVerifyMobileNoQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useVerifyMobileNoQuery({\r\n * variables: {\r\n * student_phone_number: // value for 'student_phone_number'\r\n * },\r\n * });\r\n */\r\nexport function useVerifyMobileNoQuery(baseOptions: Apollo.QueryHookOptions<VerifyMobileNoQuery, VerifyMobileNoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<VerifyMobileNoQuery, VerifyMobileNoQueryVariables>(VerifyMobileNoDocument, options);\r\n }\r\nexport function useVerifyMobileNoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<VerifyMobileNoQuery, VerifyMobileNoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<VerifyMobileNoQuery, VerifyMobileNoQueryVariables>(VerifyMobileNoDocument, options);\r\n }\r\nexport type VerifyMobileNoQueryHookResult = ReturnType<typeof useVerifyMobileNoQuery>;\r\nexport type VerifyMobileNoLazyQueryHookResult = ReturnType<typeof useVerifyMobileNoLazyQuery>;\r\nexport type VerifyMobileNoQueryResult = Apollo.QueryResult<VerifyMobileNoQuery, VerifyMobileNoQueryVariables>;\r\nexport const ConfirmMobileNoDocument = gql`\r\n query confirmMobileNo($student_phone_number: String!) {\r\n confirmMobileNo(student_phone_number: $student_phone_number)\r\n}\r\n `;\r\n\r\n/**\r\n * __useConfirmMobileNoQuery__\r\n *\r\n * To run a query within a React component, call `useConfirmMobileNoQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useConfirmMobileNoQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useConfirmMobileNoQuery({\r\n * variables: {\r\n * student_phone_number: // value for 'student_phone_number'\r\n * },\r\n * });\r\n */\r\nexport function useConfirmMobileNoQuery(baseOptions: Apollo.QueryHookOptions<ConfirmMobileNoQuery, ConfirmMobileNoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<ConfirmMobileNoQuery, ConfirmMobileNoQueryVariables>(ConfirmMobileNoDocument, options);\r\n }\r\nexport function useConfirmMobileNoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<ConfirmMobileNoQuery, ConfirmMobileNoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<ConfirmMobileNoQuery, ConfirmMobileNoQueryVariables>(ConfirmMobileNoDocument, options);\r\n }\r\nexport type ConfirmMobileNoQueryHookResult = ReturnType<typeof useConfirmMobileNoQuery>;\r\nexport type ConfirmMobileNoLazyQueryHookResult = ReturnType<typeof useConfirmMobileNoLazyQuery>;\r\nexport type ConfirmMobileNoQueryResult = Apollo.QueryResult<ConfirmMobileNoQuery, ConfirmMobileNoQueryVariables>;\r\nexport const GetActiveNoticesDocument = gql`\r\n query getActiveNotices {\r\n getActiveNotices {\r\n notice_body\r\n notice_background_color\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetActiveNoticesQuery__\r\n *\r\n * To run a query within a React component, call `useGetActiveNoticesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetActiveNoticesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetActiveNoticesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetActiveNoticesQuery(baseOptions?: Apollo.QueryHookOptions<GetActiveNoticesQuery, GetActiveNoticesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetActiveNoticesQuery, GetActiveNoticesQueryVariables>(GetActiveNoticesDocument, options);\r\n }\r\nexport function useGetActiveNoticesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetActiveNoticesQuery, GetActiveNoticesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetActiveNoticesQuery, GetActiveNoticesQueryVariables>(GetActiveNoticesDocument, options);\r\n }\r\nexport type GetActiveNoticesQueryHookResult = ReturnType<typeof useGetActiveNoticesQuery>;\r\nexport type GetActiveNoticesLazyQueryHookResult = ReturnType<typeof useGetActiveNoticesLazyQuery>;\r\nexport type GetActiveNoticesQueryResult = Apollo.QueryResult<GetActiveNoticesQuery, GetActiveNoticesQueryVariables>;\r\nexport const GetStudentSubjectsDocument = gql`\r\n query getStudentSubjects {\r\n getStudentSubjects {\r\n achievement_id\r\n achievement_owner_id\r\n achievement_desc\r\n achievement_status\r\n achievement_type_desc\r\n achievement_type_name\r\n achievement_location\r\n achievement_quiz_id\r\n achievement_has_fails\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentSubjectsQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentSubjectsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentSubjectsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentSubjectsQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentSubjectsQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentSubjectsQuery, GetStudentSubjectsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentSubjectsQuery, GetStudentSubjectsQueryVariables>(GetStudentSubjectsDocument, options);\r\n }\r\nexport function useGetStudentSubjectsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentSubjectsQuery, GetStudentSubjectsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentSubjectsQuery, GetStudentSubjectsQueryVariables>(GetStudentSubjectsDocument, options);\r\n }\r\nexport type GetStudentSubjectsQueryHookResult = ReturnType<typeof useGetStudentSubjectsQuery>;\r\nexport type GetStudentSubjectsLazyQueryHookResult = ReturnType<typeof useGetStudentSubjectsLazyQuery>;\r\nexport type GetStudentSubjectsQueryResult = Apollo.QueryResult<GetStudentSubjectsQuery, GetStudentSubjectsQueryVariables>;\r\nexport const GetStudentCategoriesDocument = gql`\r\n query getStudentCategories {\r\n getStudentCategories\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentCategoriesQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentCategoriesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentCategoriesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentCategoriesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentCategoriesQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentCategoriesQuery, GetStudentCategoriesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentCategoriesQuery, GetStudentCategoriesQueryVariables>(GetStudentCategoriesDocument, options);\r\n }\r\nexport function useGetStudentCategoriesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentCategoriesQuery, GetStudentCategoriesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentCategoriesQuery, GetStudentCategoriesQueryVariables>(GetStudentCategoriesDocument, options);\r\n }\r\nexport type GetStudentCategoriesQueryHookResult = ReturnType<typeof useGetStudentCategoriesQuery>;\r\nexport type GetStudentCategoriesLazyQueryHookResult = ReturnType<typeof useGetStudentCategoriesLazyQuery>;\r\nexport type GetStudentCategoriesQueryResult = Apollo.QueryResult<GetStudentCategoriesQuery, GetStudentCategoriesQueryVariables>;\r\nexport const GetEvalTestsDocument = gql`\r\n query getEvalTests {\r\n getEvalTests {\r\n achievement_id\r\n achievement_owner_id\r\n achievement_desc\r\n achievement_status\r\n achievement_type_name\r\n achievement_type_desc\r\n achievement_location\r\n achievement_quiz_id\r\n achievement_has_fails\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetEvalTestsQuery__\r\n *\r\n * To run a query within a React component, call `useGetEvalTestsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetEvalTestsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetEvalTestsQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetEvalTestsQuery(baseOptions?: Apollo.QueryHookOptions<GetEvalTestsQuery, GetEvalTestsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetEvalTestsQuery, GetEvalTestsQueryVariables>(GetEvalTestsDocument, options);\r\n }\r\nexport function useGetEvalTestsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetEvalTestsQuery, GetEvalTestsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetEvalTestsQuery, GetEvalTestsQueryVariables>(GetEvalTestsDocument, options);\r\n }\r\nexport type GetEvalTestsQueryHookResult = ReturnType<typeof useGetEvalTestsQuery>;\r\nexport type GetEvalTestsLazyQueryHookResult = ReturnType<typeof useGetEvalTestsLazyQuery>;\r\nexport type GetEvalTestsQueryResult = Apollo.QueryResult<GetEvalTestsQuery, GetEvalTestsQueryVariables>;\r\nexport const GetOnlineBookInfoDocument = gql`\r\n query getOnlineBookInfo {\r\n getOnlineBookInfo {\r\n achievement_id\r\n achievement_owner_id\r\n achievement_desc\r\n achievement_status\r\n achievement_type_desc\r\n achievement_type_name\r\n achievement_location\r\n achievement_location\r\n achievement_quiz_id\r\n achievement_has_fails\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetOnlineBookInfoQuery__\r\n *\r\n * To run a query within a React component, call `useGetOnlineBookInfoQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetOnlineBookInfoQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetOnlineBookInfoQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetOnlineBookInfoQuery(baseOptions?: Apollo.QueryHookOptions<GetOnlineBookInfoQuery, GetOnlineBookInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetOnlineBookInfoQuery, GetOnlineBookInfoQueryVariables>(GetOnlineBookInfoDocument, options);\r\n }\r\nexport function useGetOnlineBookInfoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetOnlineBookInfoQuery, GetOnlineBookInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetOnlineBookInfoQuery, GetOnlineBookInfoQueryVariables>(GetOnlineBookInfoDocument, options);\r\n }\r\nexport type GetOnlineBookInfoQueryHookResult = ReturnType<typeof useGetOnlineBookInfoQuery>;\r\nexport type GetOnlineBookInfoLazyQueryHookResult = ReturnType<typeof useGetOnlineBookInfoLazyQuery>;\r\nexport type GetOnlineBookInfoQueryResult = Apollo.QueryResult<GetOnlineBookInfoQuery, GetOnlineBookInfoQueryVariables>;\r\nexport const GetDrivingSchoolClassesDocument = gql`\r\n query getDrivingSchoolClasses {\r\n getDrivingSchoolClasses {\r\n achievement_id\r\n achievement_owner_id\r\n achievement_desc\r\n achievement_type_name\r\n achievement_status\r\n achievement_type_desc\r\n achievement_location\r\n achievement_quiz_id\r\n achievement_has_fails\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetDrivingSchoolClassesQuery__\r\n *\r\n * To run a query within a React component, call `useGetDrivingSchoolClassesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetDrivingSchoolClassesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetDrivingSchoolClassesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetDrivingSchoolClassesQuery(baseOptions?: Apollo.QueryHookOptions<GetDrivingSchoolClassesQuery, GetDrivingSchoolClassesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetDrivingSchoolClassesQuery, GetDrivingSchoolClassesQueryVariables>(GetDrivingSchoolClassesDocument, options);\r\n }\r\nexport function useGetDrivingSchoolClassesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetDrivingSchoolClassesQuery, GetDrivingSchoolClassesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetDrivingSchoolClassesQuery, GetDrivingSchoolClassesQueryVariables>(GetDrivingSchoolClassesDocument, options);\r\n }\r\nexport type GetDrivingSchoolClassesQueryHookResult = ReturnType<typeof useGetDrivingSchoolClassesQuery>;\r\nexport type GetDrivingSchoolClassesLazyQueryHookResult = ReturnType<typeof useGetDrivingSchoolClassesLazyQuery>;\r\nexport type GetDrivingSchoolClassesQueryResult = Apollo.QueryResult<GetDrivingSchoolClassesQuery, GetDrivingSchoolClassesQueryVariables>;\r\nexport const GetBeforeDrivingTestDocument = gql`\r\n query getBeforeDrivingTest {\r\n getBeforeDrivingTest {\r\n achievement_id\r\n achievement_owner_id\r\n achievement_desc\r\n achievement_type_name\r\n achievement_status\r\n achievement_type_desc\r\n achievement_location\r\n achievement_quiz_id\r\n achievement_has_fails\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetBeforeDrivingTestQuery__\r\n *\r\n * To run a query within a React component, call `useGetBeforeDrivingTestQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetBeforeDrivingTestQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetBeforeDrivingTestQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetBeforeDrivingTestQuery(baseOptions?: Apollo.QueryHookOptions<GetBeforeDrivingTestQuery, GetBeforeDrivingTestQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetBeforeDrivingTestQuery, GetBeforeDrivingTestQueryVariables>(GetBeforeDrivingTestDocument, options);\r\n }\r\nexport function useGetBeforeDrivingTestLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetBeforeDrivingTestQuery, GetBeforeDrivingTestQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetBeforeDrivingTestQuery, GetBeforeDrivingTestQueryVariables>(GetBeforeDrivingTestDocument, options);\r\n }\r\nexport type GetBeforeDrivingTestQueryHookResult = ReturnType<typeof useGetBeforeDrivingTestQuery>;\r\nexport type GetBeforeDrivingTestLazyQueryHookResult = ReturnType<typeof useGetBeforeDrivingTestLazyQuery>;\r\nexport type GetBeforeDrivingTestQueryResult = Apollo.QueryResult<GetBeforeDrivingTestQuery, GetBeforeDrivingTestQueryVariables>;\r\nexport const GetStartContentDocument = gql`\r\n query getStartContent {\r\n getStartContent {\r\n achievement_id\r\n achievement_owner_id\r\n achievement_desc\r\n achievement_type_name\r\n achievement_status\r\n achievement_type_desc\r\n achievement_location\r\n achievement_quiz_id\r\n achievement_has_fails\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStartContentQuery__\r\n *\r\n * To run a query within a React component, call `useGetStartContentQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStartContentQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStartContentQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStartContentQuery(baseOptions?: Apollo.QueryHookOptions<GetStartContentQuery, GetStartContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStartContentQuery, GetStartContentQueryVariables>(GetStartContentDocument, options);\r\n }\r\nexport function useGetStartContentLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStartContentQuery, GetStartContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStartContentQuery, GetStartContentQueryVariables>(GetStartContentDocument, options);\r\n }\r\nexport type GetStartContentQueryHookResult = ReturnType<typeof useGetStartContentQuery>;\r\nexport type GetStartContentLazyQueryHookResult = ReturnType<typeof useGetStartContentLazyQuery>;\r\nexport type GetStartContentQueryResult = Apollo.QueryResult<GetStartContentQuery, GetStartContentQueryVariables>;\r\nexport const ManageStartContentDocument = gql`\r\n mutation manageStartContent($achievement: Achievement_grade!) {\r\n manageStartContent(achievement: $achievement)\r\n}\r\n `;\r\nexport type ManageStartContentMutationFn = Apollo.MutationFunction<ManageStartContentMutation, ManageStartContentMutationVariables>;\r\n\r\n/**\r\n * __useManageStartContentMutation__\r\n *\r\n * To run a mutation, you first call `useManageStartContentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageStartContentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageStartContentMutation, { data, loading, error }] = useManageStartContentMutation({\r\n * variables: {\r\n * achievement: // value for 'achievement'\r\n * },\r\n * });\r\n */\r\nexport function useManageStartContentMutation(baseOptions?: Apollo.MutationHookOptions<ManageStartContentMutation, ManageStartContentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageStartContentMutation, ManageStartContentMutationVariables>(ManageStartContentDocument, options);\r\n }\r\nexport type ManageStartContentMutationHookResult = ReturnType<typeof useManageStartContentMutation>;\r\nexport type ManageStartContentMutationResult = Apollo.MutationResult<ManageStartContentMutation>;\r\nexport type ManageStartContentMutationOptions = Apollo.BaseMutationOptions<ManageStartContentMutation, ManageStartContentMutationVariables>;\r\nexport const ManageSubjectDocument = gql`\r\n mutation manageSubject($achievement: Achievement_grade!) {\r\n manageSubject(achievement: $achievement)\r\n}\r\n `;\r\nexport type ManageSubjectMutationFn = Apollo.MutationFunction<ManageSubjectMutation, ManageSubjectMutationVariables>;\r\n\r\n/**\r\n * __useManageSubjectMutation__\r\n *\r\n * To run a mutation, you first call `useManageSubjectMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageSubjectMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageSubjectMutation, { data, loading, error }] = useManageSubjectMutation({\r\n * variables: {\r\n * achievement: // value for 'achievement'\r\n * },\r\n * });\r\n */\r\nexport function useManageSubjectMutation(baseOptions?: Apollo.MutationHookOptions<ManageSubjectMutation, ManageSubjectMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageSubjectMutation, ManageSubjectMutationVariables>(ManageSubjectDocument, options);\r\n }\r\nexport type ManageSubjectMutationHookResult = ReturnType<typeof useManageSubjectMutation>;\r\nexport type ManageSubjectMutationResult = Apollo.MutationResult<ManageSubjectMutation>;\r\nexport type ManageSubjectMutationOptions = Apollo.BaseMutationOptions<ManageSubjectMutation, ManageSubjectMutationVariables>;\r\nexport const ManageEvalTestsDocument = gql`\r\n mutation manageEvalTests($achievement: Achievement_grade!) {\r\n manageEvalTests(achievement: $achievement)\r\n}\r\n `;\r\nexport type ManageEvalTestsMutationFn = Apollo.MutationFunction<ManageEvalTestsMutation, ManageEvalTestsMutationVariables>;\r\n\r\n/**\r\n * __useManageEvalTestsMutation__\r\n *\r\n * To run a mutation, you first call `useManageEvalTestsMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageEvalTestsMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageEvalTestsMutation, { data, loading, error }] = useManageEvalTestsMutation({\r\n * variables: {\r\n * achievement: // value for 'achievement'\r\n * },\r\n * });\r\n */\r\nexport function useManageEvalTestsMutation(baseOptions?: Apollo.MutationHookOptions<ManageEvalTestsMutation, ManageEvalTestsMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageEvalTestsMutation, ManageEvalTestsMutationVariables>(ManageEvalTestsDocument, options);\r\n }\r\nexport type ManageEvalTestsMutationHookResult = ReturnType<typeof useManageEvalTestsMutation>;\r\nexport type ManageEvalTestsMutationResult = Apollo.MutationResult<ManageEvalTestsMutation>;\r\nexport type ManageEvalTestsMutationOptions = Apollo.BaseMutationOptions<ManageEvalTestsMutation, ManageEvalTestsMutationVariables>;\r\nexport const ManageOnlineBookDocument = gql`\r\n mutation manageOnlineBook($achievement: Achievement_grade!) {\r\n manageOnlineBook(achievement: $achievement)\r\n}\r\n `;\r\nexport type ManageOnlineBookMutationFn = Apollo.MutationFunction<ManageOnlineBookMutation, ManageOnlineBookMutationVariables>;\r\n\r\n/**\r\n * __useManageOnlineBookMutation__\r\n *\r\n * To run a mutation, you first call `useManageOnlineBookMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageOnlineBookMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageOnlineBookMutation, { data, loading, error }] = useManageOnlineBookMutation({\r\n * variables: {\r\n * achievement: // value for 'achievement'\r\n * },\r\n * });\r\n */\r\nexport function useManageOnlineBookMutation(baseOptions?: Apollo.MutationHookOptions<ManageOnlineBookMutation, ManageOnlineBookMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageOnlineBookMutation, ManageOnlineBookMutationVariables>(ManageOnlineBookDocument, options);\r\n }\r\nexport type ManageOnlineBookMutationHookResult = ReturnType<typeof useManageOnlineBookMutation>;\r\nexport type ManageOnlineBookMutationResult = Apollo.MutationResult<ManageOnlineBookMutation>;\r\nexport type ManageOnlineBookMutationOptions = Apollo.BaseMutationOptions<ManageOnlineBookMutation, ManageOnlineBookMutationVariables>;\r\nexport const ManageSchoolLessonsDocument = gql`\r\n mutation manageSchoolLessons($achievement: Achievement_grade!) {\r\n manageSchoolLessons(achievement: $achievement)\r\n}\r\n `;\r\nexport type ManageSchoolLessonsMutationFn = Apollo.MutationFunction<ManageSchoolLessonsMutation, ManageSchoolLessonsMutationVariables>;\r\n\r\n/**\r\n * __useManageSchoolLessonsMutation__\r\n *\r\n * To run a mutation, you first call `useManageSchoolLessonsMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageSchoolLessonsMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageSchoolLessonsMutation, { data, loading, error }] = useManageSchoolLessonsMutation({\r\n * variables: {\r\n * achievement: // value for 'achievement'\r\n * },\r\n * });\r\n */\r\nexport function useManageSchoolLessonsMutation(baseOptions?: Apollo.MutationHookOptions<ManageSchoolLessonsMutation, ManageSchoolLessonsMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageSchoolLessonsMutation, ManageSchoolLessonsMutationVariables>(ManageSchoolLessonsDocument, options);\r\n }\r\nexport type ManageSchoolLessonsMutationHookResult = ReturnType<typeof useManageSchoolLessonsMutation>;\r\nexport type ManageSchoolLessonsMutationResult = Apollo.MutationResult<ManageSchoolLessonsMutation>;\r\nexport type ManageSchoolLessonsMutationOptions = Apollo.BaseMutationOptions<ManageSchoolLessonsMutation, ManageSchoolLessonsMutationVariables>;\r\nexport const ManageBeforeDrivingDocument = gql`\r\n mutation manageBeforeDriving($achievement: Achievement_grade!) {\r\n manageBeforeDriving(achievement: $achievement)\r\n}\r\n `;\r\nexport type ManageBeforeDrivingMutationFn = Apollo.MutationFunction<ManageBeforeDrivingMutation, ManageBeforeDrivingMutationVariables>;\r\n\r\n/**\r\n * __useManageBeforeDrivingMutation__\r\n *\r\n * To run a mutation, you first call `useManageBeforeDrivingMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageBeforeDrivingMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageBeforeDrivingMutation, { data, loading, error }] = useManageBeforeDrivingMutation({\r\n * variables: {\r\n * achievement: // value for 'achievement'\r\n * },\r\n * });\r\n */\r\nexport function useManageBeforeDrivingMutation(baseOptions?: Apollo.MutationHookOptions<ManageBeforeDrivingMutation, ManageBeforeDrivingMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageBeforeDrivingMutation, ManageBeforeDrivingMutationVariables>(ManageBeforeDrivingDocument, options);\r\n }\r\nexport type ManageBeforeDrivingMutationHookResult = ReturnType<typeof useManageBeforeDrivingMutation>;\r\nexport type ManageBeforeDrivingMutationResult = Apollo.MutationResult<ManageBeforeDrivingMutation>;\r\nexport type ManageBeforeDrivingMutationOptions = Apollo.BaseMutationOptions<ManageBeforeDrivingMutation, ManageBeforeDrivingMutationVariables>;\r\nexport const GetStudentInfoDocument = gql`\r\n query getStudentInfo {\r\n getStudentInfo {\r\n school_id\r\n first_name\r\n last_name\r\n student_email\r\n student_phone_number\r\n student_category\r\n language_choice\r\n teori_department\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentInfoQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentInfoQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentInfoQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentInfoQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentInfoQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentInfoQuery, GetStudentInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentInfoQuery, GetStudentInfoQueryVariables>(GetStudentInfoDocument, options);\r\n }\r\nexport function useGetStudentInfoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentInfoQuery, GetStudentInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentInfoQuery, GetStudentInfoQueryVariables>(GetStudentInfoDocument, options);\r\n }\r\nexport type GetStudentInfoQueryHookResult = ReturnType<typeof useGetStudentInfoQuery>;\r\nexport type GetStudentInfoLazyQueryHookResult = ReturnType<typeof useGetStudentInfoLazyQuery>;\r\nexport type GetStudentInfoQueryResult = Apollo.QueryResult<GetStudentInfoQuery, GetStudentInfoQueryVariables>;\r\nexport const GetStudentNameDocument = gql`\r\n query getStudentName {\r\n getStudentInfo {\r\n first_name\r\n last_name\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentNameQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentNameQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentNameQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentNameQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentNameQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentNameQuery, GetStudentNameQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentNameQuery, GetStudentNameQueryVariables>(GetStudentNameDocument, options);\r\n }\r\nexport function useGetStudentNameLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentNameQuery, GetStudentNameQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentNameQuery, GetStudentNameQueryVariables>(GetStudentNameDocument, options);\r\n }\r\nexport type GetStudentNameQueryHookResult = ReturnType<typeof useGetStudentNameQuery>;\r\nexport type GetStudentNameLazyQueryHookResult = ReturnType<typeof useGetStudentNameLazyQuery>;\r\nexport type GetStudentNameQueryResult = Apollo.QueryResult<GetStudentNameQuery, GetStudentNameQueryVariables>;\r\nexport const ManageStudentDocument = gql`\r\n mutation manageStudent($student: Student_Input!) {\r\n manageStudent(student: $student)\r\n}\r\n `;\r\nexport type ManageStudentMutationFn = Apollo.MutationFunction<ManageStudentMutation, ManageStudentMutationVariables>;\r\n\r\n/**\r\n * __useManageStudentMutation__\r\n *\r\n * To run a mutation, you first call `useManageStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageStudentMutation, { data, loading, error }] = useManageStudentMutation({\r\n * variables: {\r\n * student: // value for 'student'\r\n * },\r\n * });\r\n */\r\nexport function useManageStudentMutation(baseOptions?: Apollo.MutationHookOptions<ManageStudentMutation, ManageStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageStudentMutation, ManageStudentMutationVariables>(ManageStudentDocument, options);\r\n }\r\nexport type ManageStudentMutationHookResult = ReturnType<typeof useManageStudentMutation>;\r\nexport type ManageStudentMutationResult = Apollo.MutationResult<ManageStudentMutation>;\r\nexport type ManageStudentMutationOptions = Apollo.BaseMutationOptions<ManageStudentMutation, ManageStudentMutationVariables>;\r\nexport const GetSchoolListDocument = gql`\r\n query getSchoolList {\r\n getSchoolList {\r\n school_id\r\n school_name\r\n zipcode\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSchoolListQuery__\r\n *\r\n * To run a query within a React component, call `useGetSchoolListQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSchoolListQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSchoolListQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetSchoolListQuery(baseOptions?: Apollo.QueryHookOptions<GetSchoolListQuery, GetSchoolListQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSchoolListQuery, GetSchoolListQueryVariables>(GetSchoolListDocument, options);\r\n }\r\nexport function useGetSchoolListLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSchoolListQuery, GetSchoolListQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSchoolListQuery, GetSchoolListQueryVariables>(GetSchoolListDocument, options);\r\n }\r\nexport type GetSchoolListQueryHookResult = ReturnType<typeof useGetSchoolListQuery>;\r\nexport type GetSchoolListLazyQueryHookResult = ReturnType<typeof useGetSchoolListLazyQuery>;\r\nexport type GetSchoolListQueryResult = Apollo.QueryResult<GetSchoolListQuery, GetSchoolListQueryVariables>;\r\nexport const GetDepartmentListDocument = gql`\r\n query getDepartmentList {\r\n getDepartmentList {\r\n subuser_id\r\n department_name\r\n department_zipcode\r\n school_id\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetDepartmentListQuery__\r\n *\r\n * To run a query within a React component, call `useGetDepartmentListQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetDepartmentListQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetDepartmentListQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetDepartmentListQuery(baseOptions?: Apollo.QueryHookOptions<GetDepartmentListQuery, GetDepartmentListQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetDepartmentListQuery, GetDepartmentListQueryVariables>(GetDepartmentListDocument, options);\r\n }\r\nexport function useGetDepartmentListLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetDepartmentListQuery, GetDepartmentListQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetDepartmentListQuery, GetDepartmentListQueryVariables>(GetDepartmentListDocument, options);\r\n }\r\nexport type GetDepartmentListQueryHookResult = ReturnType<typeof useGetDepartmentListQuery>;\r\nexport type GetDepartmentListLazyQueryHookResult = ReturnType<typeof useGetDepartmentListLazyQuery>;\r\nexport type GetDepartmentListQueryResult = Apollo.QueryResult<GetDepartmentListQuery, GetDepartmentListQueryVariables>;\r\nexport const CreateQuizDocument = gql`\r\n mutation createQuiz($online_quiz: Online_quiz_input) {\r\n createQuiz(online_quiz: $online_quiz) {\r\n online_quiz_id\r\n quiz_token_id\r\n }\r\n}\r\n `;\r\nexport type CreateQuizMutationFn = Apollo.MutationFunction<CreateQuizMutation, CreateQuizMutationVariables>;\r\n\r\n/**\r\n * __useCreateQuizMutation__\r\n *\r\n * To run a mutation, you first call `useCreateQuizMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useCreateQuizMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [createQuizMutation, { data, loading, error }] = useCreateQuizMutation({\r\n * variables: {\r\n * online_quiz: // value for 'online_quiz'\r\n * },\r\n * });\r\n */\r\nexport function useCreateQuizMutation(baseOptions?: Apollo.MutationHookOptions<CreateQuizMutation, CreateQuizMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<CreateQuizMutation, CreateQuizMutationVariables>(CreateQuizDocument, options);\r\n }\r\nexport type CreateQuizMutationHookResult = ReturnType<typeof useCreateQuizMutation>;\r\nexport type CreateQuizMutationResult = Apollo.MutationResult<CreateQuizMutation>;\r\nexport type CreateQuizMutationOptions = Apollo.BaseMutationOptions<CreateQuizMutation, CreateQuizMutationVariables>;\r\nexport const StartContentDocument = gql`\r\n mutation startContent($online_quiz_id: ID, $quiz_token_id: String) {\r\n startContent(online_quiz_id: $online_quiz_id, quiz_token_id: $quiz_token_id) {\r\n quiz_test_name\r\n quiz_speed\r\n quiz_speed_value\r\n quiz_language\r\n quiz_subtitles\r\n quiz_read_only\r\n slide_progress {\r\n progress_is_marked\r\n progress_id\r\n original_slide_id\r\n online_quiz_id\r\n explanation_location\r\n intro_sound_text\r\n media_location\r\n media_type_id\r\n media_location_enc\r\n intro_sound_location\r\n slide_pass_status\r\n statement_progress {\r\n statement_progress_id\r\n online_slide_id\r\n original_statement_id\r\n statement_answer_id\r\n quiz_statement_no\r\n elaboration_Text\r\n sound_text\r\n sound_location\r\n slide_pass_status\r\n }\r\n }\r\n }\r\n}\r\n `;\r\nexport type StartContentMutationFn = Apollo.MutationFunction<StartContentMutation, StartContentMutationVariables>;\r\n\r\n/**\r\n * __useStartContentMutation__\r\n *\r\n * To run a mutation, you first call `useStartContentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useStartContentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [startContentMutation, { data, loading, error }] = useStartContentMutation({\r\n * variables: {\r\n * online_quiz_id: // value for 'online_quiz_id'\r\n * quiz_token_id: // value for 'quiz_token_id'\r\n * },\r\n * });\r\n */\r\nexport function useStartContentMutation(baseOptions?: Apollo.MutationHookOptions<StartContentMutation, StartContentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<StartContentMutation, StartContentMutationVariables>(StartContentDocument, options);\r\n }\r\nexport type StartContentMutationHookResult = ReturnType<typeof useStartContentMutation>;\r\nexport type StartContentMutationResult = Apollo.MutationResult<StartContentMutation>;\r\nexport type StartContentMutationOptions = Apollo.BaseMutationOptions<StartContentMutation, StartContentMutationVariables>;\r\nexport const GradeSlideDocument = gql`\r\n mutation gradeSlide($gradedSlide: slide_progress) {\r\n gradeSlide(graded_slide: $gradedSlide)\r\n}\r\n `;\r\nexport type GradeSlideMutationFn = Apollo.MutationFunction<GradeSlideMutation, GradeSlideMutationVariables>;\r\n\r\n/**\r\n * __useGradeSlideMutation__\r\n *\r\n * To run a mutation, you first call `useGradeSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useGradeSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [gradeSlideMutation, { data, loading, error }] = useGradeSlideMutation({\r\n * variables: {\r\n * gradedSlide: // value for 'gradedSlide'\r\n * },\r\n * });\r\n */\r\nexport function useGradeSlideMutation(baseOptions?: Apollo.MutationHookOptions<GradeSlideMutation, GradeSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<GradeSlideMutation, GradeSlideMutationVariables>(GradeSlideDocument, options);\r\n }\r\nexport type GradeSlideMutationHookResult = ReturnType<typeof useGradeSlideMutation>;\r\nexport type GradeSlideMutationResult = Apollo.MutationResult<GradeSlideMutation>;\r\nexport type GradeSlideMutationOptions = Apollo.BaseMutationOptions<GradeSlideMutation, GradeSlideMutationVariables>;\r\nexport const FinishQuizDocument = gql`\r\n mutation finishQuiz($online_quiz_id: ID, $online_quiz_token: String) {\r\n finishQuiz(online_quiz_id: $online_quiz_id, quiz_token_id: $online_quiz_token) {\r\n quiz_test_name\r\n start_time\r\n end_time\r\n slides_failed\r\n quiz_pass_status\r\n }\r\n}\r\n `;\r\nexport type FinishQuizMutationFn = Apollo.MutationFunction<FinishQuizMutation, FinishQuizMutationVariables>;\r\n\r\n/**\r\n * __useFinishQuizMutation__\r\n *\r\n * To run a mutation, you first call `useFinishQuizMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useFinishQuizMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [finishQuizMutation, { data, loading, error }] = useFinishQuizMutation({\r\n * variables: {\r\n * online_quiz_id: // value for 'online_quiz_id'\r\n * online_quiz_token: // value for 'online_quiz_token'\r\n * },\r\n * });\r\n */\r\nexport function useFinishQuizMutation(baseOptions?: Apollo.MutationHookOptions<FinishQuizMutation, FinishQuizMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<FinishQuizMutation, FinishQuizMutationVariables>(FinishQuizDocument, options);\r\n }\r\nexport type FinishQuizMutationHookResult = ReturnType<typeof useFinishQuizMutation>;\r\nexport type FinishQuizMutationResult = Apollo.MutationResult<FinishQuizMutation>;\r\nexport type FinishQuizMutationOptions = Apollo.BaseMutationOptions<FinishQuizMutation, FinishQuizMutationVariables>;\r\nexport const GetLatestResultDocument = gql`\r\n query getLatestResult($base_quiz_id: ID) {\r\n getLatestResult(base_quiz_id: $base_quiz_id) {\r\n online_quiz_id\r\n quiz_test_name\r\n quiz_pass_status\r\n slide_amount\r\n slides_failed\r\n slide_progress {\r\n progress_is_marked\r\n progress_id\r\n original_slide_id\r\n online_quiz_id\r\n explanation_location\r\n intro_sound_text\r\n media_location\r\n media_type_id\r\n media_location_enc\r\n intro_sound_location\r\n slide_pass_status\r\n statement_progress {\r\n statement_progress_id\r\n online_slide_id\r\n original_statement_id\r\n statement_answer_id\r\n quiz_statement_no\r\n elaboration_Text\r\n sound_text\r\n sound_location\r\n slide_pass_status\r\n statement_progress_answer\r\n }\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetLatestResultQuery__\r\n *\r\n * To run a query within a React component, call `useGetLatestResultQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetLatestResultQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetLatestResultQuery({\r\n * variables: {\r\n * base_quiz_id: // value for 'base_quiz_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetLatestResultQuery(baseOptions?: Apollo.QueryHookOptions<GetLatestResultQuery, GetLatestResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetLatestResultQuery, GetLatestResultQueryVariables>(GetLatestResultDocument, options);\r\n }\r\nexport function useGetLatestResultLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetLatestResultQuery, GetLatestResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetLatestResultQuery, GetLatestResultQueryVariables>(GetLatestResultDocument, options);\r\n }\r\nexport type GetLatestResultQueryHookResult = ReturnType<typeof useGetLatestResultQuery>;\r\nexport type GetLatestResultLazyQueryHookResult = ReturnType<typeof useGetLatestResultLazyQuery>;\r\nexport type GetLatestResultQueryResult = Apollo.QueryResult<GetLatestResultQuery, GetLatestResultQueryVariables>;\r\nexport const GetQuizResultDocument = gql`\r\n query getQuizResult($online_quiz_id: ID!) {\r\n getQuizResult(online_quiz_id: $online_quiz_id) {\r\n online_quiz_id\r\n quiz_test_name\r\n quiz_pass_status\r\n slide_amount\r\n slides_failed\r\n slide_progress {\r\n progress_is_marked\r\n progress_id\r\n original_slide_id\r\n online_quiz_id\r\n explanation_location\r\n intro_sound_text\r\n media_location\r\n media_type_id\r\n media_location_enc\r\n intro_sound_location\r\n slide_pass_status\r\n statement_progress {\r\n statement_progress_id\r\n online_slide_id\r\n original_statement_id\r\n statement_answer_id\r\n quiz_statement_no\r\n elaboration_Text\r\n sound_text\r\n sound_location\r\n slide_pass_status\r\n statement_progress_answer\r\n }\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetQuizResultQuery__\r\n *\r\n * To run a query within a React component, call `useGetQuizResultQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetQuizResultQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetQuizResultQuery({\r\n * variables: {\r\n * online_quiz_id: // value for 'online_quiz_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetQuizResultQuery(baseOptions: Apollo.QueryHookOptions<GetQuizResultQuery, GetQuizResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetQuizResultQuery, GetQuizResultQueryVariables>(GetQuizResultDocument, options);\r\n }\r\nexport function useGetQuizResultLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetQuizResultQuery, GetQuizResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetQuizResultQuery, GetQuizResultQueryVariables>(GetQuizResultDocument, options);\r\n }\r\nexport type GetQuizResultQueryHookResult = ReturnType<typeof useGetQuizResultQuery>;\r\nexport type GetQuizResultLazyQueryHookResult = ReturnType<typeof useGetQuizResultLazyQuery>;\r\nexport type GetQuizResultQueryResult = Apollo.QueryResult<GetQuizResultQuery, GetQuizResultQueryVariables>;\r\nexport const CreateClassOnlineQuizDocument = gql`\r\n mutation createClassOnlineQuiz($online_quiz: Online_quiz_input) {\r\n createClassOnlineQuiz(online_quiz: $online_quiz) {\r\n quiz_token_id\r\n online_quiz_id\r\n }\r\n}\r\n `;\r\nexport type CreateClassOnlineQuizMutationFn = Apollo.MutationFunction<CreateClassOnlineQuizMutation, CreateClassOnlineQuizMutationVariables>;\r\n\r\n/**\r\n * __useCreateClassOnlineQuizMutation__\r\n *\r\n * To run a mutation, you first call `useCreateClassOnlineQuizMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useCreateClassOnlineQuizMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [createClassOnlineQuizMutation, { data, loading, error }] = useCreateClassOnlineQuizMutation({\r\n * variables: {\r\n * online_quiz: // value for 'online_quiz'\r\n * },\r\n * });\r\n */\r\nexport function useCreateClassOnlineQuizMutation(baseOptions?: Apollo.MutationHookOptions<CreateClassOnlineQuizMutation, CreateClassOnlineQuizMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<CreateClassOnlineQuizMutation, CreateClassOnlineQuizMutationVariables>(CreateClassOnlineQuizDocument, options);\r\n }\r\nexport type CreateClassOnlineQuizMutationHookResult = ReturnType<typeof useCreateClassOnlineQuizMutation>;\r\nexport type CreateClassOnlineQuizMutationResult = Apollo.MutationResult<CreateClassOnlineQuizMutation>;\r\nexport type CreateClassOnlineQuizMutationOptions = Apollo.BaseMutationOptions<CreateClassOnlineQuizMutation, CreateClassOnlineQuizMutationVariables>;\r\nexport const FinishClassOnlineQuizDocument = gql`\r\n mutation finishClassOnlineQuiz($quiz_class_id: ID!) {\r\n finishClassOnlineQuiz(quiz_class_id: $quiz_class_id) {\r\n quiz_test_name\r\n quiz_pass_status\r\n slide_amount\r\n slides_failed\r\n }\r\n}\r\n `;\r\nexport type FinishClassOnlineQuizMutationFn = Apollo.MutationFunction<FinishClassOnlineQuizMutation, FinishClassOnlineQuizMutationVariables>;\r\n\r\n/**\r\n * __useFinishClassOnlineQuizMutation__\r\n *\r\n * To run a mutation, you first call `useFinishClassOnlineQuizMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useFinishClassOnlineQuizMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [finishClassOnlineQuizMutation, { data, loading, error }] = useFinishClassOnlineQuizMutation({\r\n * variables: {\r\n * quiz_class_id: // value for 'quiz_class_id'\r\n * },\r\n * });\r\n */\r\nexport function useFinishClassOnlineQuizMutation(baseOptions?: Apollo.MutationHookOptions<FinishClassOnlineQuizMutation, FinishClassOnlineQuizMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<FinishClassOnlineQuizMutation, FinishClassOnlineQuizMutationVariables>(FinishClassOnlineQuizDocument, options);\r\n }\r\nexport type FinishClassOnlineQuizMutationHookResult = ReturnType<typeof useFinishClassOnlineQuizMutation>;\r\nexport type FinishClassOnlineQuizMutationResult = Apollo.MutationResult<FinishClassOnlineQuizMutation>;\r\nexport type FinishClassOnlineQuizMutationOptions = Apollo.BaseMutationOptions<FinishClassOnlineQuizMutation, FinishClassOnlineQuizMutationVariables>;\r\nexport const GetCorrectQuizzesDocument = gql`\r\n query getCorrectQuizzes {\r\n getCorrectQuizzes\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetCorrectQuizzesQuery__\r\n *\r\n * To run a query within a React component, call `useGetCorrectQuizzesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetCorrectQuizzesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetCorrectQuizzesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetCorrectQuizzesQuery(baseOptions?: Apollo.QueryHookOptions<GetCorrectQuizzesQuery, GetCorrectQuizzesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetCorrectQuizzesQuery, GetCorrectQuizzesQueryVariables>(GetCorrectQuizzesDocument, options);\r\n }\r\nexport function useGetCorrectQuizzesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetCorrectQuizzesQuery, GetCorrectQuizzesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetCorrectQuizzesQuery, GetCorrectQuizzesQueryVariables>(GetCorrectQuizzesDocument, options);\r\n }\r\nexport type GetCorrectQuizzesQueryHookResult = ReturnType<typeof useGetCorrectQuizzesQuery>;\r\nexport type GetCorrectQuizzesLazyQueryHookResult = ReturnType<typeof useGetCorrectQuizzesLazyQuery>;\r\nexport type GetCorrectQuizzesQueryResult = Apollo.QueryResult<GetCorrectQuizzesQuery, GetCorrectQuizzesQueryVariables>;\r\nexport const GetAchievementTypesDocument = gql`\r\n query getAchievementTypes($category: Int) {\r\n getAchievementTypes(category: $category) {\r\n achievement_type_id\r\n achievement_category\r\n achievement_language\r\n achievement_name\r\n achievement_desc\r\n achievement_type_desc\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetAchievementTypesQuery__\r\n *\r\n * To run a query within a React component, call `useGetAchievementTypesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetAchievementTypesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetAchievementTypesQuery({\r\n * variables: {\r\n * category: // value for 'category'\r\n * },\r\n * });\r\n */\r\nexport function useGetAchievementTypesQuery(baseOptions?: Apollo.QueryHookOptions<GetAchievementTypesQuery, GetAchievementTypesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetAchievementTypesQuery, GetAchievementTypesQueryVariables>(GetAchievementTypesDocument, options);\r\n }\r\nexport function useGetAchievementTypesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetAchievementTypesQuery, GetAchievementTypesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetAchievementTypesQuery, GetAchievementTypesQueryVariables>(GetAchievementTypesDocument, options);\r\n }\r\nexport type GetAchievementTypesQueryHookResult = ReturnType<typeof useGetAchievementTypesQuery>;\r\nexport type GetAchievementTypesLazyQueryHookResult = ReturnType<typeof useGetAchievementTypesLazyQuery>;\r\nexport type GetAchievementTypesQueryResult = Apollo.QueryResult<GetAchievementTypesQuery, GetAchievementTypesQueryVariables>;\r\nexport const GetStudentAchievementsDocument = gql`\r\n query getStudentAchievements($achievement_type: ID) {\r\n getStudentAchievements(achievement_type: $achievement_type) {\r\n dash_track_id\r\n achievement_id\r\n achievement_name\r\n achievement_location\r\n achievement_media_type\r\n achievement_languages\r\n dash_status\r\n dash_has_fails\r\n dash_quiz_id\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentAchievementsQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentAchievementsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentAchievementsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentAchievementsQuery({\r\n * variables: {\r\n * achievement_type: // value for 'achievement_type'\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentAchievementsQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentAchievementsQuery, GetStudentAchievementsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentAchievementsQuery, GetStudentAchievementsQueryVariables>(GetStudentAchievementsDocument, options);\r\n }\r\nexport function useGetStudentAchievementsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentAchievementsQuery, GetStudentAchievementsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentAchievementsQuery, GetStudentAchievementsQueryVariables>(GetStudentAchievementsDocument, options);\r\n }\r\nexport type GetStudentAchievementsQueryHookResult = ReturnType<typeof useGetStudentAchievementsQuery>;\r\nexport type GetStudentAchievementsLazyQueryHookResult = ReturnType<typeof useGetStudentAchievementsLazyQuery>;\r\nexport type GetStudentAchievementsQueryResult = Apollo.QueryResult<GetStudentAchievementsQuery, GetStudentAchievementsQueryVariables>;\r\nexport const ManageAchievementDocument = gql`\r\n mutation manageAchievement($achievement: Achievement_grade!) {\r\n manageAchievement(achievement: $achievement)\r\n}\r\n `;\r\nexport type ManageAchievementMutationFn = Apollo.MutationFunction<ManageAchievementMutation, ManageAchievementMutationVariables>;\r\n\r\n/**\r\n * __useManageAchievementMutation__\r\n *\r\n * To run a mutation, you first call `useManageAchievementMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageAchievementMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageAchievementMutation, { data, loading, error }] = useManageAchievementMutation({\r\n * variables: {\r\n * achievement: // value for 'achievement'\r\n * },\r\n * });\r\n */\r\nexport function useManageAchievementMutation(baseOptions?: Apollo.MutationHookOptions<ManageAchievementMutation, ManageAchievementMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageAchievementMutation, ManageAchievementMutationVariables>(ManageAchievementDocument, options);\r\n }\r\nexport type ManageAchievementMutationHookResult = ReturnType<typeof useManageAchievementMutation>;\r\nexport type ManageAchievementMutationResult = Apollo.MutationResult<ManageAchievementMutation>;\r\nexport type ManageAchievementMutationOptions = Apollo.BaseMutationOptions<ManageAchievementMutation, ManageAchievementMutationVariables>;\r\nexport const CreateFreeQuizDocument = gql`\r\n mutation createFreeQuiz($online_quiz: Online_quiz_input) {\r\n createFreeQuiz(online_quiz: $online_quiz) {\r\n online_quiz_id\r\n quiz_token_id\r\n }\r\n}\r\n `;\r\nexport type CreateFreeQuizMutationFn = Apollo.MutationFunction<CreateFreeQuizMutation, CreateFreeQuizMutationVariables>;\r\n\r\n/**\r\n * __useCreateFreeQuizMutation__\r\n *\r\n * To run a mutation, you first call `useCreateFreeQuizMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useCreateFreeQuizMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [createFreeQuizMutation, { data, loading, error }] = useCreateFreeQuizMutation({\r\n * variables: {\r\n * online_quiz: // value for 'online_quiz'\r\n * },\r\n * });\r\n */\r\nexport function useCreateFreeQuizMutation(baseOptions?: Apollo.MutationHookOptions<CreateFreeQuizMutation, CreateFreeQuizMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<CreateFreeQuizMutation, CreateFreeQuizMutationVariables>(CreateFreeQuizDocument, options);\r\n }\r\nexport type CreateFreeQuizMutationHookResult = ReturnType<typeof useCreateFreeQuizMutation>;\r\nexport type CreateFreeQuizMutationResult = Apollo.MutationResult<CreateFreeQuizMutation>;\r\nexport type CreateFreeQuizMutationOptions = Apollo.BaseMutationOptions<CreateFreeQuizMutation, CreateFreeQuizMutationVariables>;\r\nexport const GetFailedSlidesDocument = gql`\r\n query getFailedSlides {\r\n getFailedSlides\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetFailedSlidesQuery__\r\n *\r\n * To run a query within a React component, call `useGetFailedSlidesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetFailedSlidesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetFailedSlidesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetFailedSlidesQuery(baseOptions?: Apollo.QueryHookOptions<GetFailedSlidesQuery, GetFailedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetFailedSlidesQuery, GetFailedSlidesQueryVariables>(GetFailedSlidesDocument, options);\r\n }\r\nexport function useGetFailedSlidesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetFailedSlidesQuery, GetFailedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetFailedSlidesQuery, GetFailedSlidesQueryVariables>(GetFailedSlidesDocument, options);\r\n }\r\nexport type GetFailedSlidesQueryHookResult = ReturnType<typeof useGetFailedSlidesQuery>;\r\nexport type GetFailedSlidesLazyQueryHookResult = ReturnType<typeof useGetFailedSlidesLazyQuery>;\r\nexport type GetFailedSlidesQueryResult = Apollo.QueryResult<GetFailedSlidesQuery, GetFailedSlidesQueryVariables>;\r\nexport const MarkSlideDocument = gql`\r\n mutation MarkSlide($marked_slides: [ID]) {\r\n MarkSlide(marked_slides: $marked_slides)\r\n}\r\n `;\r\nexport type MarkSlideMutationFn = Apollo.MutationFunction<MarkSlideMutation, MarkSlideMutationVariables>;\r\n\r\n/**\r\n * __useMarkSlideMutation__\r\n *\r\n * To run a mutation, you first call `useMarkSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useMarkSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [markSlideMutation, { data, loading, error }] = useMarkSlideMutation({\r\n * variables: {\r\n * marked_slides: // value for 'marked_slides'\r\n * },\r\n * });\r\n */\r\nexport function useMarkSlideMutation(baseOptions?: Apollo.MutationHookOptions<MarkSlideMutation, MarkSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<MarkSlideMutation, MarkSlideMutationVariables>(MarkSlideDocument, options);\r\n }\r\nexport type MarkSlideMutationHookResult = ReturnType<typeof useMarkSlideMutation>;\r\nexport type MarkSlideMutationResult = Apollo.MutationResult<MarkSlideMutation>;\r\nexport type MarkSlideMutationOptions = Apollo.BaseMutationOptions<MarkSlideMutation, MarkSlideMutationVariables>;\r\nexport const UnmarkSlideDocument = gql`\r\n mutation UnmarkSlide($unmarked_slides: [ID]) {\r\n UnmarkSlide(unmarked_slides: $unmarked_slides)\r\n}\r\n `;\r\nexport type UnmarkSlideMutationFn = Apollo.MutationFunction<UnmarkSlideMutation, UnmarkSlideMutationVariables>;\r\n\r\n/**\r\n * __useUnmarkSlideMutation__\r\n *\r\n * To run a mutation, you first call `useUnmarkSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useUnmarkSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [unmarkSlideMutation, { data, loading, error }] = useUnmarkSlideMutation({\r\n * variables: {\r\n * unmarked_slides: // value for 'unmarked_slides'\r\n * },\r\n * });\r\n */\r\nexport function useUnmarkSlideMutation(baseOptions?: Apollo.MutationHookOptions<UnmarkSlideMutation, UnmarkSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<UnmarkSlideMutation, UnmarkSlideMutationVariables>(UnmarkSlideDocument, options);\r\n }\r\nexport type UnmarkSlideMutationHookResult = ReturnType<typeof useUnmarkSlideMutation>;\r\nexport type UnmarkSlideMutationResult = Apollo.MutationResult<UnmarkSlideMutation>;\r\nexport type UnmarkSlideMutationOptions = Apollo.BaseMutationOptions<UnmarkSlideMutation, UnmarkSlideMutationVariables>;\r\nexport const GetMarkedSlidesDocument = gql`\r\n query getMarkedSlides {\r\n getMarkedSlides {\r\n slide_pass_status\r\n original_slide_id\r\n media_location\r\n intro_sound_text\r\n media_type_id\r\n slide_statements {\r\n statement_progress_id\r\n statement_progress_answer\r\n online_slide_id\r\n original_statement_id\r\n statement_answer_id\r\n quiz_statement_no\r\n elaboration_Text\r\n sound_text\r\n slide_pass_status\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetMarkedSlidesQuery__\r\n *\r\n * To run a query within a React component, call `useGetMarkedSlidesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetMarkedSlidesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetMarkedSlidesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetMarkedSlidesQuery(baseOptions?: Apollo.QueryHookOptions<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>(GetMarkedSlidesDocument, options);\r\n }\r\nexport function useGetMarkedSlidesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>(GetMarkedSlidesDocument, options);\r\n }\r\nexport type GetMarkedSlidesQueryHookResult = ReturnType<typeof useGetMarkedSlidesQuery>;\r\nexport type GetMarkedSlidesLazyQueryHookResult = ReturnType<typeof useGetMarkedSlidesLazyQuery>;\r\nexport type GetMarkedSlidesQueryResult = Apollo.QueryResult<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>;\r\nexport const GetStudentPubLessonsDocument = gql`\r\n query getStudentPubLessons {\r\n getStudentPubLessons {\r\n lesson_id\r\n lesson_name\r\n ach_pub_lesson_view_date\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentPubLessonsQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentPubLessonsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentPubLessonsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentPubLessonsQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentPubLessonsQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentPubLessonsQuery, GetStudentPubLessonsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentPubLessonsQuery, GetStudentPubLessonsQueryVariables>(GetStudentPubLessonsDocument, options);\r\n }\r\nexport function useGetStudentPubLessonsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentPubLessonsQuery, GetStudentPubLessonsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentPubLessonsQuery, GetStudentPubLessonsQueryVariables>(GetStudentPubLessonsDocument, options);\r\n }\r\nexport type GetStudentPubLessonsQueryHookResult = ReturnType<typeof useGetStudentPubLessonsQuery>;\r\nexport type GetStudentPubLessonsLazyQueryHookResult = ReturnType<typeof useGetStudentPubLessonsLazyQuery>;\r\nexport type GetStudentPubLessonsQueryResult = Apollo.QueryResult<GetStudentPubLessonsQuery, GetStudentPubLessonsQueryVariables>;\r\nexport const StudentViewLessonDocument = gql`\r\n mutation studentViewLesson($lesson_id: ID, $time_spent: String) {\r\n studentViewLesson(lesson_id: $lesson_id, time_spent: $time_spent)\r\n}\r\n `;\r\nexport type StudentViewLessonMutationFn = Apollo.MutationFunction<StudentViewLessonMutation, StudentViewLessonMutationVariables>;\r\n\r\n/**\r\n * __useStudentViewLessonMutation__\r\n *\r\n * To run a mutation, you first call `useStudentViewLessonMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useStudentViewLessonMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [studentViewLessonMutation, { data, loading, error }] = useStudentViewLessonMutation({\r\n * variables: {\r\n * lesson_id: // value for 'lesson_id'\r\n * time_spent: // value for 'time_spent'\r\n * },\r\n * });\r\n */\r\nexport function useStudentViewLessonMutation(baseOptions?: Apollo.MutationHookOptions<StudentViewLessonMutation, StudentViewLessonMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<StudentViewLessonMutation, StudentViewLessonMutationVariables>(StudentViewLessonDocument, options);\r\n }\r\nexport type StudentViewLessonMutationHookResult = ReturnType<typeof useStudentViewLessonMutation>;\r\nexport type StudentViewLessonMutationResult = Apollo.MutationResult<StudentViewLessonMutation>;\r\nexport type StudentViewLessonMutationOptions = Apollo.BaseMutationOptions<StudentViewLessonMutation, StudentViewLessonMutationVariables>;\r\nexport const DeactivateNotificationDocument = gql`\r\n mutation deactivateNotification($notification_id: Int) {\r\n deactivateNotification(notification_id: $notification_id)\r\n}\r\n `;\r\nexport type DeactivateNotificationMutationFn = Apollo.MutationFunction<DeactivateNotificationMutation, DeactivateNotificationMutationVariables>;\r\n\r\n/**\r\n * __useDeactivateNotificationMutation__\r\n *\r\n * To run a mutation, you first call `useDeactivateNotificationMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeactivateNotificationMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deactivateNotificationMutation, { data, loading, error }] = useDeactivateNotificationMutation({\r\n * variables: {\r\n * notification_id: // value for 'notification_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeactivateNotificationMutation(baseOptions?: Apollo.MutationHookOptions<DeactivateNotificationMutation, DeactivateNotificationMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeactivateNotificationMutation, DeactivateNotificationMutationVariables>(DeactivateNotificationDocument, options);\r\n }\r\nexport type DeactivateNotificationMutationHookResult = ReturnType<typeof useDeactivateNotificationMutation>;\r\nexport type DeactivateNotificationMutationResult = Apollo.MutationResult<DeactivateNotificationMutation>;\r\nexport type DeactivateNotificationMutationOptions = Apollo.BaseMutationOptions<DeactivateNotificationMutation, DeactivateNotificationMutationVariables>;\r\nexport const GetCorrectQuizzesResultDocument = gql`\r\n query getCorrectQuizzesResult {\r\n getCorrectQuizzesResult {\r\n quiz_pass_status\r\n online_quiz_id\r\n quiz_test_name\r\n quiz_expired\r\n end_time\r\n achievement_name\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetCorrectQuizzesResultQuery__\r\n *\r\n * To run a query within a React component, call `useGetCorrectQuizzesResultQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetCorrectQuizzesResultQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetCorrectQuizzesResultQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetCorrectQuizzesResultQuery(baseOptions?: Apollo.QueryHookOptions<GetCorrectQuizzesResultQuery, GetCorrectQuizzesResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetCorrectQuizzesResultQuery, GetCorrectQuizzesResultQueryVariables>(GetCorrectQuizzesResultDocument, options);\r\n }\r\nexport function useGetCorrectQuizzesResultLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetCorrectQuizzesResultQuery, GetCorrectQuizzesResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetCorrectQuizzesResultQuery, GetCorrectQuizzesResultQueryVariables>(GetCorrectQuizzesResultDocument, options);\r\n }\r\nexport type GetCorrectQuizzesResultQueryHookResult = ReturnType<typeof useGetCorrectQuizzesResultQuery>;\r\nexport type GetCorrectQuizzesResultLazyQueryHookResult = ReturnType<typeof useGetCorrectQuizzesResultLazyQuery>;\r\nexport type GetCorrectQuizzesResultQueryResult = Apollo.QueryResult<GetCorrectQuizzesResultQuery, GetCorrectQuizzesResultQueryVariables>;\r\nexport const GetClassStudentResultDocument = gql`\r\n query getClassStudentResult($class_quiz_id: ID!) {\r\n getClassStudentResult(class_quiz_id: $class_quiz_id) {\r\n progress_id\r\n progress_is_marked\r\n intro_sound_text\r\n intro_sound_location\r\n slide_pass_status\r\n slide_statements {\r\n statement_progress_answer\r\n statement_answer_id\r\n sound_text\r\n slide_pass_status\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetClassStudentResultQuery__\r\n *\r\n * To run a query within a React component, call `useGetClassStudentResultQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetClassStudentResultQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetClassStudentResultQuery({\r\n * variables: {\r\n * class_quiz_id: // value for 'class_quiz_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetClassStudentResultQuery(baseOptions: Apollo.QueryHookOptions<GetClassStudentResultQuery, GetClassStudentResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetClassStudentResultQuery, GetClassStudentResultQueryVariables>(GetClassStudentResultDocument, options);\r\n }\r\nexport function useGetClassStudentResultLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetClassStudentResultQuery, GetClassStudentResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetClassStudentResultQuery, GetClassStudentResultQueryVariables>(GetClassStudentResultDocument, options);\r\n }\r\nexport type GetClassStudentResultQueryHookResult = ReturnType<typeof useGetClassStudentResultQuery>;\r\nexport type GetClassStudentResultLazyQueryHookResult = ReturnType<typeof useGetClassStudentResultLazyQuery>;\r\nexport type GetClassStudentResultQueryResult = Apollo.QueryResult<GetClassStudentResultQuery, GetClassStudentResultQueryVariables>;\r\nexport const GetClassStudentParticipantDocument = gql`\r\n query getClassStudentParticipant($class_quiz_id: ID!) {\r\n getClassStudentParticipant(class_quiz_id: $class_quiz_id) {\r\n student_amount\r\n student_passed\r\n student_failed\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetClassStudentParticipantQuery__\r\n *\r\n * To run a query within a React component, call `useGetClassStudentParticipantQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetClassStudentParticipantQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetClassStudentParticipantQuery({\r\n * variables: {\r\n * class_quiz_id: // value for 'class_quiz_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetClassStudentParticipantQuery(baseOptions: Apollo.QueryHookOptions<GetClassStudentParticipantQuery, GetClassStudentParticipantQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetClassStudentParticipantQuery, GetClassStudentParticipantQueryVariables>(GetClassStudentParticipantDocument, options);\r\n }\r\nexport function useGetClassStudentParticipantLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetClassStudentParticipantQuery, GetClassStudentParticipantQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetClassStudentParticipantQuery, GetClassStudentParticipantQueryVariables>(GetClassStudentParticipantDocument, options);\r\n }\r\nexport type GetClassStudentParticipantQueryHookResult = ReturnType<typeof useGetClassStudentParticipantQuery>;\r\nexport type GetClassStudentParticipantLazyQueryHookResult = ReturnType<typeof useGetClassStudentParticipantLazyQuery>;\r\nexport type GetClassStudentParticipantQueryResult = Apollo.QueryResult<GetClassStudentParticipantQuery, GetClassStudentParticipantQueryVariables>;\r\nexport const AddAiStudentDocument = gql`\r\n mutation AddAIStudent($configId: Int!) {\r\n addAIStudent(config_id: $configId)\r\n}\r\n `;\r\nexport type AddAiStudentMutationFn = Apollo.MutationFunction<AddAiStudentMutation, AddAiStudentMutationVariables>;\r\n\r\n/**\r\n * __useAddAiStudentMutation__\r\n *\r\n * To run a mutation, you first call `useAddAiStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useAddAiStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [addAiStudentMutation, { data, loading, error }] = useAddAiStudentMutation({\r\n * variables: {\r\n * configId: // value for 'configId'\r\n * },\r\n * });\r\n */\r\nexport function useAddAiStudentMutation(baseOptions?: Apollo.MutationHookOptions<AddAiStudentMutation, AddAiStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<AddAiStudentMutation, AddAiStudentMutationVariables>(AddAiStudentDocument, options);\r\n }\r\nexport type AddAiStudentMutationHookResult = ReturnType<typeof useAddAiStudentMutation>;\r\nexport type AddAiStudentMutationResult = Apollo.MutationResult<AddAiStudentMutation>;\r\nexport type AddAiStudentMutationOptions = Apollo.BaseMutationOptions<AddAiStudentMutation, AddAiStudentMutationVariables>;\r\nexport const GetClassQuizByConfigIdDocument = gql`\r\n query getClassQuizByConfigID($config_id: Int!) {\r\n getClassQuizByConfigID(config_id: $config_id)\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetClassQuizByConfigIdQuery__\r\n *\r\n * To run a query within a React component, call `useGetClassQuizByConfigIdQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetClassQuizByConfigIdQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetClassQuizByConfigIdQuery({\r\n * variables: {\r\n * config_id: // value for 'config_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetClassQuizByConfigIdQuery(baseOptions: Apollo.QueryHookOptions<GetClassQuizByConfigIdQuery, GetClassQuizByConfigIdQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetClassQuizByConfigIdQuery, GetClassQuizByConfigIdQueryVariables>(GetClassQuizByConfigIdDocument, options);\r\n }\r\nexport function useGetClassQuizByConfigIdLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetClassQuizByConfigIdQuery, GetClassQuizByConfigIdQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetClassQuizByConfigIdQuery, GetClassQuizByConfigIdQueryVariables>(GetClassQuizByConfigIdDocument, options);\r\n }\r\nexport type GetClassQuizByConfigIdQueryHookResult = ReturnType<typeof useGetClassQuizByConfigIdQuery>;\r\nexport type GetClassQuizByConfigIdLazyQueryHookResult = ReturnType<typeof useGetClassQuizByConfigIdLazyQuery>;\r\nexport type GetClassQuizByConfigIdQueryResult = Apollo.QueryResult<GetClassQuizByConfigIdQuery, GetClassQuizByConfigIdQueryVariables>;\r\nexport const AddTeoriLessonStudentDocument = gql`\r\n mutation AddTeoriLessonStudent($lessonId: String) {\r\n addTeoriLessonStudent(lesson_id: $lessonId)\r\n}\r\n `;\r\nexport type AddTeoriLessonStudentMutationFn = Apollo.MutationFunction<AddTeoriLessonStudentMutation, AddTeoriLessonStudentMutationVariables>;\r\n\r\n/**\r\n * __useAddTeoriLessonStudentMutation__\r\n *\r\n * To run a mutation, you first call `useAddTeoriLessonStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useAddTeoriLessonStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [addTeoriLessonStudentMutation, { data, loading, error }] = useAddTeoriLessonStudentMutation({\r\n * variables: {\r\n * lessonId: // value for 'lessonId'\r\n * },\r\n * });\r\n */\r\nexport function useAddTeoriLessonStudentMutation(baseOptions?: Apollo.MutationHookOptions<AddTeoriLessonStudentMutation, AddTeoriLessonStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<AddTeoriLessonStudentMutation, AddTeoriLessonStudentMutationVariables>(AddTeoriLessonStudentDocument, options);\r\n }\r\nexport type AddTeoriLessonStudentMutationHookResult = ReturnType<typeof useAddTeoriLessonStudentMutation>;\r\nexport type AddTeoriLessonStudentMutationResult = Apollo.MutationResult<AddTeoriLessonStudentMutation>;\r\nexport type AddTeoriLessonStudentMutationOptions = Apollo.BaseMutationOptions<AddTeoriLessonStudentMutation, AddTeoriLessonStudentMutationVariables>;\r\nexport const GetStudentTipsDocument = gql`\r\n query getStudentTips($categoryId: Int!) {\r\n getStudentTips(category_id: $categoryId)\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentTipsQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentTipsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentTipsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentTipsQuery({\r\n * variables: {\r\n * categoryId: // value for 'categoryId'\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentTipsQuery(baseOptions: Apollo.QueryHookOptions<GetStudentTipsQuery, GetStudentTipsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentTipsQuery, GetStudentTipsQueryVariables>(GetStudentTipsDocument, options);\r\n }\r\nexport function useGetStudentTipsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentTipsQuery, GetStudentTipsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentTipsQuery, GetStudentTipsQueryVariables>(GetStudentTipsDocument, options);\r\n }\r\nexport type GetStudentTipsQueryHookResult = ReturnType<typeof useGetStudentTipsQuery>;\r\nexport type GetStudentTipsLazyQueryHookResult = ReturnType<typeof useGetStudentTipsLazyQuery>;\r\nexport type GetStudentTipsQueryResult = Apollo.QueryResult<GetStudentTipsQuery, GetStudentTipsQueryVariables>;\r\nexport const GetStudentNotificationsDocument = gql`\r\nquery getStudentNotifications {\r\ngetStudentNotifications {\r\nnotification_student_id\r\nmessage\r\n}\r\n}\r\n`;\r\n\r\n/**\r\n* __useGetStudentNotificationsQuery__\r\n*\r\n* To run a query within a React component, call `useGetStudentNotificationsQuery` and pass it any options that fit your needs.\r\n* When your component renders, `useGetStudentNotificationsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n* you can use to render your UI.\r\n*\r\n* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n*\r\n* @example\r\n* const { data, loading, error } = useGetStudentNotificationsQuery({\r\n* variables: {\r\n* },\r\n* });\r\n*/\r\nexport function useGetStudentNotificationsQuery(baseOptions?: Apollo.QueryHookOptions<GetNotificationQuery, GetNotificationQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetNotificationQuery, GetNotificationQueryVariables>(GetStudentNotificationsDocument, options);\r\n }\r\nexport function useGetStudentNotificationsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetNotificationQuery, GetNotificationQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetNotificationQuery, GetNotificationQueryVariables>(GetStudentNotificationsDocument, options);\r\n }\r\nexport type GetStudentNotificationsQueryHookResult = ReturnType<typeof useGetStudentNotificationsQuery>;\r\nexport type GetStudentNotificationsLazyQueryHookResult = ReturnType<typeof useGetStudentNotificationsLazyQuery>;\r\nexport type GetStudentNotificationsQueryResult = Apollo.QueryResult<GetNotificationQuery, GetNotificationQueryVariables>;","import React, { useEffect, useState } from \"react\";\r\nimport ReactStopwatch from \"react-stopwatch\";\r\n\r\nexport type IStopwatchProps = {\r\n setNewTime: (value: React.SetStateAction<string>) => void;\r\n};\r\n\r\nconst Stopwatch: React.FC<IStopwatchProps> = (props: IStopwatchProps) => {\r\n const [time, settime] = useState(0);\r\n\r\n useEffect(() => {\r\n \r\n setTimeout(() => settime(time + 1), 1000);\r\n }, []);\r\n\r\n useEffect(() => {\r\n setTimeout(() => settime(time + 1), 1000)\r\n }, [time]);\r\n\r\n useEffect(() => {\r\n const date = new Date(0);\r\n date.setSeconds(time); // specify value for SECONDS here\r\n const timeString = date.toISOString().substring(11, 19);\r\n props.setNewTime(timeString);\r\n }, [time]);\r\n return <></>;\r\n};\r\n\r\nexport { Stopwatch };\r\n","export default __webpack_public_path__ + \"static/media/fail_icon.1a10c4a7.png\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAABHNCSVQICAgIfAhkiAAAA7RJREFUeF7tmzFoFEEUhu8qsVKxsvJSWYhoQFu9NLYGGwWLnL3gVYIWcnaWCfYSG9EuKe2iraIJCGIjp7UEtVGr8//PWTk2s7Pv7e2tevkHhhy7/8yb+ebtvL3Lm3ZLxUygbVZK2BIshxMIlmA5CDik8izBchBwSOVZguUg4JDKswTLQcAhlWc1BWs0GnVg6zTqGdRu+Hs4YX8b9/7Udrv93DHWFuzRzvGm7OXH5vasAOgSOuqFQXvmG9Nu4OIGwD2K3QyAVnBvGZWLM035QlvB3qa3IzMsDJoD7tcEKDbObCL3AG4Y7A1qAFTEhPZWUddgj59LSymsBgYdG+RwhpDy9szQCmEBEveeF6inSpHPh+AbprECL+NjGi0pWNx8z88HB/Ms6GWL3AZiLVKwPqPBUYOZHWi2UMdRDob4d08JnjoZNbsQHTL0n5fM2t4S5sD57CkpWLtQHymYzEdc5+bIKBZdBQsEAGSEY2XwSJXvuHmnBnu9YI/RPFZ+4OKxog0/Bes1Gi5GemS0GlhgWDXhdYR9FkF7CptXrf2V6WDvITTXI7rHsHOtqH0K1ks0OhtpeA4dviobUJX7mMQNtHsQaVs3LD4VNyN2+pjb2v8C6woG+kSwDK4GzxIsA6exRLCspATLQUqwBGuWrw7a4K3+pQ3eSkp7loOUYAmWNvi8D2Cz/RtfpBUNrQ+joqGVlDZ4BynBEixFQ0XDMQH9rBxxBP0Gb90h8YoiWIL1m4D+FRbZS/R1x/F4CJZgWQk4dPoiLVgzSwzRnmV1rn3xGIb0a+bDd1CZi8oMv8nC9MMsI3ALn3diCWNWWNBdCDZoy22v0Td4DJAplMyeY9Ze1+o5EYAEtw5w45z0BKxnuP0u2MovhNX8EELaY4LtEmoj+VnvYeiEdYRGXZYD/wn6u8Y208h+ovGBSAe1/+owzSD/9baC5Vih29gS7hfpUzmlH9BowWFoHqS7gFWYzl41tTsP5isuMNpxA52MfJkui1gdXOAGzcg5TZmlvUp58G8xm5OJGTEXfp21Si78RA48I6rl8AAPC9CeO/c+HFjIcu6LcuCzqS5UOWFxEa0ZsvOFx1QGRacQvO4SJtJHO9YYtDe4frnKgsTGMmHvFu4fzGk2YYdQoyV5Kgwd99CKP8FyEnwXWq0LUn40YRK0R2g8gMnzh1yUoXcBLPrIItEJllPH6UqP0FkM7xeNYDlWWrAEy0HAIZVnCZaDgEMqzxIsBwGHVJ4lWA4CDqk8S7AcBBxSeZYD1i9G09hqGdTy4wAAAABJRU5ErkJggg==\"","import { gql } from '@apollo/client';\r\nimport * as Apollo from '@apollo/client';\r\nexport type Maybe<T> = T | null;\r\nexport type InputMaybe<T> = Maybe<T>;\r\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\r\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\r\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\r\nconst defaultOptions = {}\r\n/** All built-in and custom scalars, mapped to their actual values */\r\nexport type Scalars = {\r\n ID: string;\r\n String: string;\r\n Boolean: boolean;\r\n Int: number;\r\n Float: number;\r\n DateTime: any;\r\n JSON: any;\r\n Time: any;\r\n};\r\n\r\nexport type Achievement = {\r\n achievement_1?: InputMaybe<Scalars['Boolean']>;\r\n achievement_2?: InputMaybe<Scalars['Boolean']>;\r\n achievement_3?: InputMaybe<Scalars['Boolean']>;\r\n achievement_4?: InputMaybe<Scalars['Boolean']>;\r\n achievement_5?: InputMaybe<Scalars['Boolean']>;\r\n achievement_id?: InputMaybe<Scalars['ID']>;\r\n student_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\n/** Generic Objects */\r\nexport type Achievement_Type = {\r\n __typename?: 'Achievement_type';\r\n achievement_category?: Maybe<Scalars['Int']>;\r\n achievement_dash?: Maybe<Array<Maybe<Student_Ach_Get>>>;\r\n achievement_desc?: Maybe<Scalars['String']>;\r\n achievement_language?: Maybe<Scalars['Int']>;\r\n achievement_name?: Maybe<Scalars['String']>;\r\n achievement_type_desc?: Maybe<Scalars['String']>;\r\n achievement_type_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Activity = {\r\n __typename?: 'Activity';\r\n activity_date?: Maybe<Scalars['DateTime']>;\r\n activity_id?: Maybe<Scalars['ID']>;\r\n activity_result?: Maybe<Scalars['String']>;\r\n activity_time?: Maybe<Scalars['String']>;\r\n activity_title?: Maybe<Scalars['String']>;\r\n activity_type?: Maybe<Scalars['ID']>;\r\n dash_quiz_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Blocked_Slide = {\r\n __typename?: 'Blocked_slide';\r\n block_create_time?: Maybe<Scalars['DateTime']>;\r\n block_id?: Maybe<Scalars['ID']>;\r\n block_update_time?: Maybe<Scalars['DateTime']>;\r\n quiz_slide_id?: Maybe<Scalars['ID']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Category = {\r\n __typename?: 'Category';\r\n cat_id?: Maybe<Scalars['ID']>;\r\n cat_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Class = {\r\n __typename?: 'Class';\r\n class_id?: Maybe<Scalars['ID']>;\r\n class_name?: Maybe<Scalars['String']>;\r\n creation_date?: Maybe<Scalars['DateTime']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Class_Quiz_Config_I = {\r\n ai_quiz_students?: InputMaybe<Scalars['String']>;\r\n ai_quiz_toggle?: InputMaybe<Scalars['Boolean']>;\r\n base_quiz_id?: InputMaybe<Scalars['ID']>;\r\n class_quiz_config_id?: InputMaybe<Scalars['ID']>;\r\n config_name?: InputMaybe<Scalars['String']>;\r\n include_teori?: InputMaybe<Scalars['Boolean']>;\r\n quiz_language?: InputMaybe<Scalars['ID']>;\r\n quiz_learning_mode?: InputMaybe<Scalars['Boolean']>;\r\n quiz_read_only?: InputMaybe<Scalars['Boolean']>;\r\n quiz_speed?: InputMaybe<Scalars['ID']>;\r\n quiz_speed_value?: InputMaybe<Scalars['Int']>;\r\n quiz_subtitles?: InputMaybe<Scalars['ID']>;\r\n save_for_later?: InputMaybe<Scalars['Boolean']>;\r\n slide_amount?: InputMaybe<Scalars['Int']>;\r\n tags?: InputMaybe<Array<InputMaybe<Tag_Input>>>;\r\n teacher_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Class_Quiz_Input = {\r\n class_quiz_config_id?: InputMaybe<Scalars['ID']>;\r\n class_quiz_id?: InputMaybe<Scalars['ID']>;\r\n class_seed?: InputMaybe<Scalars['Int']>;\r\n teacher_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Class_Result = {\r\n __typename?: 'Class_result';\r\n slide_id?: Maybe<Scalars['ID']>;\r\n slide_pass_percentage?: Maybe<Scalars['Float']>;\r\n};\r\n\r\nexport type Combined_Lesson = {\r\n lesson_name?: InputMaybe<Scalars['String']>;\r\n lesson_owner?: InputMaybe<Scalars['ID']>;\r\n lessons?: InputMaybe<Array<InputMaybe<Subject_Lesson>>>;\r\n};\r\n\r\nexport type Content_Input = {\r\n content_id?: InputMaybe<Scalars['ID']>;\r\n media_default?: InputMaybe<Scalars['Boolean']>;\r\n media_location?: InputMaybe<Scalars['String']>;\r\n media_location_enc?: InputMaybe<Scalars['String']>;\r\n media_owner?: InputMaybe<Scalars['Int']>;\r\n media_type_id?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Dashboard = {\r\n __typename?: 'Dashboard';\r\n class_quiz_configs?: Maybe<Array<Maybe<Class_Quiz_Config>>>;\r\n default_lessons?: Maybe<Array<Maybe<Lesson>>>;\r\n default_quizzes?: Maybe<Array<Maybe<Quiz>>>;\r\n teacher_lessons?: Maybe<Array<Maybe<Lesson>>>;\r\n};\r\n\r\nexport type Department = {\r\n __typename?: 'Department';\r\n department_name?: Maybe<Scalars['String']>;\r\n department_province?: Maybe<Scalars['String']>;\r\n department_zipcode?: Maybe<Scalars['String']>;\r\n email_id?: Maybe<Scalars['String']>;\r\n is_department?: Maybe<Scalars['Boolean']>;\r\n language_choice?: Maybe<Scalars['Int']>;\r\n optional_note?: Maybe<Scalars['String']>;\r\n phone_number?: Maybe<Scalars['String']>;\r\n role_id?: Maybe<Scalars['Int']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n subuser_id: Scalars['ID'];\r\n};\r\n\r\nexport type Language = {\r\n __typename?: 'Language';\r\n language_name?: Maybe<Scalars['String']>;\r\n teori_language_id?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Lesson_Input = {\r\n lesson_category?: InputMaybe<Scalars['Int']>;\r\n lesson_content_desc?: InputMaybe<Scalars['String']>;\r\n lesson_date_format?: InputMaybe<Scalars['String']>;\r\n lesson_default?: InputMaybe<Scalars['Boolean']>;\r\n lesson_default_language?: InputMaybe<Scalars['Int']>;\r\n lesson_id?: InputMaybe<Scalars['ID']>;\r\n lesson_logo?: InputMaybe<Scalars['String']>;\r\n lesson_name?: InputMaybe<Scalars['String']>;\r\n lesson_owner?: InputMaybe<Scalars['ID']>;\r\n lesson_published?: InputMaybe<Scalars['Boolean']>;\r\n lesson_subject?: InputMaybe<Scalars['Boolean']>;\r\n slides?: InputMaybe<Array<InputMaybe<Slide_Input>>>;\r\n};\r\n\r\nexport type Mark_Slide = {\r\n __typename?: 'Mark_slide';\r\n explanation_location?: Maybe<Scalars['String']>;\r\n intro_sound_location?: Maybe<Scalars['String']>;\r\n intro_sound_text?: Maybe<Scalars['String']>;\r\n mark_count?: Maybe<Scalars['Int']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['ID']>;\r\n online_quiz_id: Scalars['ID'];\r\n original_slide_id?: Maybe<Scalars['Int']>;\r\n progress_id: Scalars['ID'];\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n slide_statements?: Maybe<Array<Maybe<Statement_Student>>>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n};\r\n\r\nexport type Mutation = {\r\n __typename?: 'Mutation';\r\n AddStudentAccess: Scalars['JSON'];\r\n AdminCodeGeneration?: Maybe<Scalars['Boolean']>;\r\n /** Slide Block Management */\r\n BlockSlide: Scalars['JSON'];\r\n ClearStudentAccess: Scalars['JSON'];\r\n /** Management of New Student Access */\r\n CreateStudentAccess: Scalars['JSON'];\r\n DeleteSlideBlock: Scalars['JSON'];\r\n /** Management of User (School, Teacher) object */\r\n LoginUser: UserToken;\r\n RefreshUser: UserToken;\r\n UnlinkStudent?: Maybe<Scalars['String']>;\r\n UnmarkSlide?: Maybe<Scalars['JSON']>;\r\n UnmarkSlideTeacher?: Maybe<Scalars['JSON']>;\r\n UpdateStudentAccess: Scalars['JSON'];\r\n UserLogout: Scalars['JSON'];\r\n addStudentClass: Scalars['JSON'];\r\n cloneLesson: Scalars['JSON'];\r\n combineLesson: Scalars['JSON'];\r\n createSchoolCategory?: Maybe<Scalars['String']>;\r\n deleteClass?: Maybe<Scalars['String']>;\r\n deleteClassConfig: Scalars['JSON'];\r\n deleteContent: Scalars['JSON'];\r\n deleteLesson: Scalars['JSON'];\r\n deleteNotice: Scalars['JSON'];\r\n deleteQuiz: Scalars['JSON'];\r\n deleteQuizSlide: Scalars['JSON'];\r\n deleteQuizStatement: Scalars['JSON'];\r\n deleteQuizTag: Scalars['JSON'];\r\n deleteSlide: Scalars['JSON'];\r\n deleteSlideTag: Scalars['JSON'];\r\n deleteStudent?: Maybe<Scalars['String']>;\r\n deleteStudentClass?: Maybe<Scalars['String']>;\r\n deleteStudentNote?: Maybe<Scalars['String']>;\r\n deleteSubuser?: Maybe<Scalars['String']>;\r\n deleteTag: Scalars['JSON'];\r\n editStudentClassStart: Scalars['JSON'];\r\n insertClassQuiz: Class_Quiz;\r\n manageAchievement: Scalars['JSON'];\r\n /** Management of Class object */\r\n manageClass: Scalars['JSON'];\r\n /** Class Quiz Management */\r\n manageClassConfig: Class_Quiz_Config;\r\n manageContent: Scalars['JSON'];\r\n manageDefaultContent: Scalars['JSON'];\r\n /** Management of Lesson Service */\r\n manageLesson: Scalars['JSON'];\r\n manageNote: Scalars['JSON'];\r\n manageNotice: Scalars['JSON'];\r\n /** Management of Quiz Service */\r\n manageQuiz: Scalars['JSON'];\r\n /** Admin Code Gen */\r\n manageSchool?: Maybe<Scalars['JSON']>;\r\n manageSlide: Scalars['JSON'];\r\n /** Management of Student object */\r\n manageStudent: Scalars['JSON'];\r\n /** Management of Subuser (Teacher, Department) object */\r\n manageSubuser: Scalars['JSON'];\r\n publishLesson: Scalars['JSON'];\r\n setSchoolStatus?: Maybe<Scalars['JSON']>;\r\n unlinkSlide?: Maybe<Scalars['JSON']>;\r\n /** Admin Notification */\r\n addStudentsNotification: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type MutationAddStudentAccessArgs = {\r\n access_student: Student_Access;\r\n};\r\n\r\n\r\nexport type MutationAdminCodeGenerationArgs = {\r\n code_amount?: InputMaybe<Scalars['Int']>;\r\n product_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\n\r\nexport type MutationBlockSlideArgs = {\r\n slides?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\r\n};\r\n\r\n\r\nexport type MutationClearStudentAccessArgs = {\r\n student_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type MutationCreateStudentAccessArgs = {\r\n category_id?: InputMaybe<Scalars['ID']>;\r\n expiry_date?: InputMaybe<Scalars['DateTime']>;\r\n should_send_sms?: InputMaybe<Scalars['Boolean']>;\r\n student_phone_number?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n\r\nexport type MutationDeleteSlideBlockArgs = {\r\n slides?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>;\r\n};\r\n\r\n\r\nexport type MutationLoginUserArgs = {\r\n email: Scalars['String'];\r\n password: Scalars['String'];\r\n};\r\n\r\n\r\nexport type MutationRefreshUserArgs = {\r\n old_token: Scalars['String'];\r\n};\r\n\r\n\r\nexport type MutationUnlinkStudentArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationUnmarkSlideArgs = {\r\n unmarked_slides?: InputMaybe<Array<InputMaybe<Student_Mark>>>;\r\n};\r\n\r\n\r\nexport type MutationUnmarkSlideTeacherArgs = {\r\n unmarked_original_slides?: InputMaybe<Array<InputMaybe<Student_Mark_Teacher>>>;\r\n};\r\n\r\n\r\nexport type MutationUpdateStudentAccessArgs = {\r\n new_expiry_date: Scalars['DateTime'];\r\n student_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type MutationAddStudentClassArgs = {\r\n student_class?: InputMaybe<Student_Class>;\r\n};\r\n\r\n\r\nexport type MutationCloneLessonArgs = {\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationCombineLessonArgs = {\r\n combined_lesson?: InputMaybe<Combined_Lesson>;\r\n};\r\n\r\n\r\nexport type MutationCreateSchoolCategoryArgs = {\r\n category_id: Scalars['Int'];\r\n school_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type MutationDeleteClassArgs = {\r\n class_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteClassConfigArgs = {\r\n class_quiz_config_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteContentArgs = {\r\n content_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteLessonArgs = {\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteNoticeArgs = {\r\n notice_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteQuizArgs = {\r\n quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteQuizSlideArgs = {\r\n quiz_slide_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteQuizStatementArgs = {\r\n quiz_statement_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteQuizTagArgs = {\r\n tag_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteSlideArgs = {\r\n slide_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteSlideTagArgs = {\r\n delete_quiz_slide_id?: InputMaybe<Scalars['ID']>;\r\n delete_tag_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\n\r\nexport type MutationDeleteStudentArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteStudentClassArgs = {\r\n class_id: Scalars['ID'];\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteStudentNoteArgs = {\r\n school_id: Scalars['ID'];\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteSubuserArgs = {\r\n subuser_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationDeleteTagArgs = {\r\n tag_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type MutationEditStudentClassStartArgs = {\r\n students?: InputMaybe<Array<InputMaybe<Student_Class_Start>>>;\r\n};\r\n\r\n\r\nexport type MutationInsertClassQuizArgs = {\r\n class_quiz: Class_Quiz_Input;\r\n};\r\n\r\n\r\nexport type MutationManageAchievementArgs = {\r\n achievement: Achievement;\r\n};\r\n\r\n\r\nexport type MutationManageClassArgs = {\r\n new_class: New_Class;\r\n};\r\n\r\n\r\nexport type MutationManageClassConfigArgs = {\r\n class_quiz_config: Class_Quiz_Config_I;\r\n};\r\n\r\n\r\nexport type MutationManageContentArgs = {\r\n content: Content_Input;\r\n};\r\n\r\n\r\nexport type MutationManageDefaultContentArgs = {\r\n content: Content_Input;\r\n};\r\n\r\n\r\nexport type MutationManageLessonArgs = {\r\n lesson: Lesson_Input;\r\n};\r\n\r\n\r\nexport type MutationManageNoteArgs = {\r\n note: New_Note;\r\n};\r\n\r\n\r\nexport type MutationManageNoticeArgs = {\r\n notice: New_Notice;\r\n};\r\n\r\n\r\nexport type MutationManageQuizArgs = {\r\n quiz: Quiz_Input;\r\n};\r\n\r\n\r\nexport type MutationManageSchoolArgs = {\r\n school: SchoolInput;\r\n};\r\n\r\n\r\nexport type MutationManageSlideArgs = {\r\n slide: Slide_Input;\r\n};\r\n\r\n\r\nexport type MutationManageStudentArgs = {\r\n student: New_Student;\r\n};\r\n\r\n\r\nexport type MutationManageSubuserArgs = {\r\n subuser: New_Subuser;\r\n};\r\n\r\n\r\nexport type MutationPublishLessonArgs = {\r\n lesson_id?: InputMaybe<Scalars['ID']>;\r\n lesson_published?: InputMaybe<Scalars['Boolean']>;\r\n};\r\n\r\n\r\nexport type MutationSetSchoolStatusArgs = {\r\n school_id: Scalars['Int'];\r\n school_status: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type MutationUnlinkSlideArgs = {\r\n lesson_slide_id: Scalars['ID'];\r\n tag_id: Scalars['ID'];\r\n};\r\n\r\nexport type MutationAdminAddStudentsNotificationArgs = {\r\n school_id: Maybe<Array<Scalars['Int']>>;\r\n language_id: Scalars['Int'];\r\n expiry_date: Scalars['DateTime'];\r\n message: Scalars['String'];\r\n}\r\n\r\nexport type New_Student = {\r\n expiry_date?: InputMaybe<Scalars['DateTime']>;\r\n first_name?: InputMaybe<Scalars['String']>;\r\n language_choice?: InputMaybe<Scalars['Int']>;\r\n last_name?: InputMaybe<Scalars['String']>;\r\n optional_value?: InputMaybe<Scalars['String']>;\r\n school_id?: InputMaybe<Scalars['ID']>;\r\n student_category?: InputMaybe<Scalars['Int']>;\r\n student_class_start?: InputMaybe<Scalars['DateTime']>;\r\n student_email?: InputMaybe<Scalars['String']>;\r\n student_id?: InputMaybe<Scalars['ID']>;\r\n student_name?: InputMaybe<Scalars['String']>;\r\n student_phone_number?: InputMaybe<Scalars['String']>;\r\n teori_department?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type New_Class = {\r\n class_id?: InputMaybe<Scalars['ID']>;\r\n class_name?: InputMaybe<Scalars['String']>;\r\n creation_date?: InputMaybe<Scalars['DateTime']>;\r\n school_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type New_Note = {\r\n note_desc?: InputMaybe<Scalars['String']>;\r\n note_id?: InputMaybe<Scalars['ID']>;\r\n school_id?: InputMaybe<Scalars['ID']>;\r\n student_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type New_Notice = {\r\n notice_background_color?: InputMaybe<Scalars['String']>;\r\n notice_body?: InputMaybe<Scalars['String']>;\r\n notice_expire_on?: InputMaybe<Scalars['DateTime']>;\r\n notice_id?: InputMaybe<Scalars['ID']>;\r\n notice_language?: InputMaybe<Scalars['Int']>;\r\n notice_publish_on?: InputMaybe<Scalars['DateTime']>;\r\n notice_student_dashboard?: InputMaybe<Scalars['Boolean']>;\r\n notice_students_landing?: InputMaybe<Scalars['Boolean']>;\r\n notice_teacher_landing?: InputMaybe<Scalars['Boolean']>;\r\n};\r\n\r\nexport type New_Subuser = {\r\n department_name?: InputMaybe<Scalars['String']>;\r\n department_zipcode?: InputMaybe<Scalars['String']>;\r\n email_id?: InputMaybe<Scalars['String']>;\r\n is_department?: InputMaybe<Scalars['Boolean']>;\r\n password?: InputMaybe<Scalars['String']>;\r\n school_id?: InputMaybe<Scalars['Int']>;\r\n skip_bill_check?: InputMaybe<Scalars['Boolean']>;\r\n subuser_id?: InputMaybe<Scalars['ID']>;\r\n teacher_name?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\nexport type Note = {\r\n __typename?: 'Note';\r\n note_desc?: Maybe<Scalars['String']>;\r\n note_id?: Maybe<Scalars['ID']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Notice = {\r\n __typename?: 'Notice';\r\n notice_background_color?: Maybe<Scalars['String']>;\r\n notice_body?: Maybe<Scalars['String']>;\r\n notice_expire_on?: Maybe<Scalars['DateTime']>;\r\n notice_id?: Maybe<Scalars['ID']>;\r\n notice_language?: Maybe<Scalars['Int']>;\r\n notice_publish_on?: Maybe<Scalars['DateTime']>;\r\n notice_student_dashboard?: Maybe<Scalars['Boolean']>;\r\n notice_students_landing?: Maybe<Scalars['Boolean']>;\r\n notice_teacher_landing?: Maybe<Scalars['Boolean']>;\r\n};\r\n\r\nexport type Online_Quiz = {\r\n __typename?: 'Online_quiz';\r\n achievement_name?: Maybe<Scalars['String']>;\r\n base_quiz?: Maybe<Scalars['ID']>;\r\n end_time?: Maybe<Scalars['DateTime']>;\r\n include_teori?: Maybe<Scalars['Boolean']>;\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n quiz_date?: Maybe<Scalars['DateTime']>;\r\n quiz_evaluation_test?: Maybe<Scalars['Boolean']>;\r\n quiz_language?: Maybe<Scalars['ID']>;\r\n quiz_learning_mode?: Maybe<Scalars['Boolean']>;\r\n quiz_pass_status?: Maybe<Scalars['Boolean']>;\r\n quiz_read_only?: Maybe<Scalars['Boolean']>;\r\n quiz_speed?: Maybe<Scalars['ID']>;\r\n quiz_speed_value?: Maybe<Scalars['Int']>;\r\n quiz_subtitles?: Maybe<Scalars['Boolean']>;\r\n quiz_test_name?: Maybe<Scalars['String']>;\r\n quiz_token_id?: Maybe<Scalars['String']>;\r\n save_for_later?: Maybe<Scalars['Boolean']>;\r\n slide_amount?: Maybe<Scalars['Int']>;\r\n start_time?: Maybe<Scalars['DateTime']>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Online_Quiz_Result = {\r\n __typename?: 'Online_quiz_result';\r\n achievement_name?: Maybe<Scalars['String']>;\r\n base_quiz?: Maybe<Scalars['ID']>;\r\n class_quiz_id?: Maybe<Scalars['ID']>;\r\n end_time?: Maybe<Scalars['DateTime']>;\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n quiz_date?: Maybe<Scalars['DateTime']>;\r\n quiz_language?: Maybe<Scalars['ID']>;\r\n quiz_learning_mode?: Maybe<Scalars['Boolean']>;\r\n quiz_pass_status?: Maybe<Scalars['Boolean']>;\r\n quiz_test_name?: Maybe<Scalars['String']>;\r\n slide_amount?: Maybe<Scalars['Int']>;\r\n slide_progress?: Maybe<Array<Maybe<Progress>>>;\r\n slides_failed?: Maybe<Scalars['Int']>;\r\n start_time?: Maybe<Scalars['DateTime']>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Query = {\r\n __typename?: 'Query';\r\n GetTeoriLessonStudents?: Maybe<Array<Maybe<Scalars['Int']>>>;\r\n getNotificationStudentsCount?: Maybe<Maybe<Scalars['Int']>>;\r\n /** General User Queries */\r\n getActiveNotices?: Maybe<Array<Maybe<Notice>>>;\r\n getAdminStudentLoginInfo?: Maybe<Student_Admin_Info>;\r\n getAllCategories?: Maybe<Array<Maybe<Category>>>;\r\n getAllSchools?: Maybe<Array<Maybe<School>>>;\r\n getAllSlides?: Maybe<Array<Maybe<Quiz_Slide>>>;\r\n getAvailableTags?: Maybe<Array<Maybe<Tag>>>;\r\n getBaseQuizInfo?: Maybe<Quiz>;\r\n getBlockedSlides?: Maybe<Array<Maybe<Blocked_Slide>>>;\r\n getCategories?: Maybe<Array<Maybe<Category>>>;\r\n /** Class Quiz Lookouts */\r\n getClassConfig?: Maybe<Array<Maybe<Class_Quiz_Config>>>;\r\n getClassInfo?: Maybe<Class>;\r\n getClassQuiz?: Maybe<Array<Maybe<Class_Quiz>>>;\r\n getClassQuizByID?: Maybe<Array<Maybe<Class_Quiz>>>;\r\n getClassQuizResult?: Maybe<Array<Maybe<Class_Result>>>;\r\n getClassQuizzes?: Maybe<Array<Maybe<Online_Quiz>>>;\r\n getClassStudents: Array<Maybe<Student>>;\r\n getCompleteQuizEdit?: Maybe<Quiz_Edit>;\r\n getCompleteQuizInfo?: Maybe<Quiz>;\r\n getConfigCountByID?: Maybe<Scalars['Int']>;\r\n getContentByType?: Maybe<Array<Maybe<Content>>>;\r\n getContentQuizInfo?: Maybe<Class_Quiz_Config>;\r\n getDepartmentInfo: Department;\r\n getFailedSlidesTag?: Maybe<Array<Maybe<Progress>>>;\r\n getLanguages?: Maybe<Array<Maybe<Language>>>;\r\n /** Lesson Service Lookoutsy */\r\n getLessonCategories: Array<Maybe<Lesson_Categories>>;\r\n getLessonEdit?: Maybe<Array<Maybe<Lesson_Edit>>>;\r\n getLessonInfo?: Maybe<Array<Maybe<Lesson>>>;\r\n getLessonTags?: Maybe<Array<Maybe<Tag>>>;\r\n getMarkedSlides?: Maybe<Array<Maybe<Mark_Slide>>>;\r\n getMarkedSlidesCount?: Maybe<Array<Maybe<Mark_Slide>>>;\r\n getMediaTypes: Array<Maybe<Media_Types>>;\r\n getOwnedContent?: Maybe<Array<Maybe<Content>>>;\r\n getPersonalConfig?: Maybe<Array<Maybe<Class_Quiz_Config>>>;\r\n getPubLessons?: Maybe<Array<Maybe<Lesson>>>;\r\n getQuizResult?: Maybe<Array<Maybe<Online_Quiz_Result>>>;\r\n getQuizSlidePreview?: Maybe<Array<Maybe<Quiz_Slide>>>;\r\n /** Azure queries */\r\n getSAS: Scalars['String'];\r\n getSchoolCategory?: Maybe<Array<Maybe<Category>>>;\r\n getSchoolClass?: Maybe<Array<Maybe<Class>>>;\r\n getSchoolClassQuiz?: Maybe<Array<Maybe<Class_Quiz>>>;\r\n getSchoolDepartments?: Maybe<Array<Department>>;\r\n /** School service data lookouts */\r\n getSchoolInfo: School;\r\n getSchoolList?: Maybe<Array<Maybe<School>>>;\r\n getSchoolStudents: Array<Maybe<School_Student>>;\r\n getSchoolSubusers?: Maybe<Array<Subuser>>;\r\n getSchoolSubusersAdmin?: Maybe<Array<Subuser>>;\r\n getSlideExplanation?: Maybe<Slide_Explanation>;\r\n /** Quiz Service Lookouts */\r\n getSlideTag?: Maybe<Array<Maybe<Quiz_Slide>>>;\r\n getSlidesPreview?: Maybe<Array<Maybe<Short_Slide>>>;\r\n getSoundContent?: Maybe<Array<Maybe<Sound_Content>>>;\r\n getSpokenLanguages?: Maybe<Array<Maybe<Language>>>;\r\n getStatementElaboration?: Maybe<Statement_Elaboration>;\r\n getStudentAchTypes?: Maybe<Array<Maybe<Achievement_Type>>>;\r\n getStudentAchievements?: Maybe<Array<Maybe<Student_Ach_Get>>>;\r\n getStudentActivity?: Maybe<Array<Maybe<Activity>>>;\r\n getStudentFailedTags?: Maybe<Array<Maybe<Failed_Tag>>>;\r\n /** Student service data lookouts */\r\n getStudentInfo: Student;\r\n getStudentNote: Note;\r\n getStudentProgress?: Maybe<Array<Maybe<Student_Progress>>>;\r\n getStudentsAdmin?: Maybe<Array<Maybe<Student>>>;\r\n getStudentsSchoolDeleted?: Maybe<Array<Maybe<School_Student>>>;\r\n getSubLanguages?: Maybe<Array<Maybe<Language>>>;\r\n getSubjectLessons?: Maybe<Array<Maybe<Lesson>>>;\r\n /** Teacher service data lookouts */\r\n getSubuserInfo: Subuser;\r\n getTeacherConfig?: Maybe<Array<Maybe<Class_Quiz_Config>>>;\r\n getTeacherDashboard?: Maybe<Dashboard>;\r\n getTeoriContent?: Maybe<Array<Maybe<Content>>>;\r\n};\r\n\r\n\r\nexport type QueryGetTeoriLessonStudentsArgs = {\r\n lesson_id?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n\r\nexport type QueryGetAdminStudentLoginInfoArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetAllSchoolsArgs = {\r\n is_active: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type QueryGetAllSlidesArgs = {\r\n included_slides?: InputMaybe<Scalars['Int']>;\r\n language_chosen?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type QueryGetBaseQuizInfoArgs = {\r\n quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassConfigArgs = {\r\n class_quiz_config_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassInfoArgs = {\r\n class_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassQuizArgs = {\r\n teacher_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassQuizByIdArgs = {\r\n class_quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassQuizResultArgs = {\r\n class_quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassQuizzesArgs = {\r\n class_quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetClassStudentsArgs = {\r\n class_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetCompleteQuizEditArgs = {\r\n language_id: Scalars['ID'];\r\n quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetCompleteQuizInfoArgs = {\r\n quiz_id: Scalars['ID'];\r\n sound_language?: InputMaybe<Scalars['Int']>;\r\n text_language?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type QueryGetConfigCountByIdArgs = {\r\n config_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type QueryGetContentByTypeArgs = {\r\n limit?: InputMaybe<Scalars['Int']>;\r\n media_type_id?: InputMaybe<Scalars['Int']>;\r\n offset?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type QueryGetContentQuizInfoArgs = {\r\n class_quiz_id: Scalars['ID'];\r\n language_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\n\r\nexport type QueryGetDepartmentInfoArgs = {\r\n department_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetFailedSlidesTagArgs = {\r\n quiz_date?: InputMaybe<Scalars['DateTime']>;\r\n student_id: Scalars['ID'];\r\n tag_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetLessonEditArgs = {\r\n language_id: Scalars['ID'];\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetLessonInfoArgs = {\r\n language_id: Scalars['ID'];\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetLessonTagsArgs = {\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetMarkedSlidesArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetMarkedSlidesCountArgs = {\r\n student_ids: Scalars['String'];\r\n};\r\n\r\n\r\nexport type QueryGetOwnedContentArgs = {\r\n limit?: InputMaybe<Scalars['Int']>;\r\n offset?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type QueryGetQuizResultArgs = {\r\n online_quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetQuizSlidePreviewArgs = {\r\n language_id: Scalars['ID'];\r\n quiz_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetSchoolCategoryArgs = {\r\n school_id?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n\r\nexport type QueryGetSchoolClassQuizArgs = {\r\n koreskole_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetSchoolSubusersAdminArgs = {\r\n school_id: Scalars['Int'];\r\n};\r\n\r\n\r\nexport type QueryGetSlideExplanationArgs = {\r\n explanation_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetSlideTagArgs = {\r\n tag_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetSlidesPreviewArgs = {\r\n language_id: Scalars['ID'];\r\n lesson_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStatementElaborationArgs = {\r\n elaboration_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentAchTypesArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentAchievementsArgs = {\r\n achievement_type: Scalars['ID'];\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentActivityArgs = {\r\n limit?: InputMaybe<Scalars['Int']>;\r\n offset?: InputMaybe<Scalars['Int']>;\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentFailedTagsArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentInfoArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentNoteArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetStudentProgressArgs = {\r\n student_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetSubuserInfoArgs = {\r\n subuser_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetTeacherConfigArgs = {\r\n teacher_id: Scalars['ID'];\r\n};\r\n\r\n\r\nexport type QueryGetTeacherDashboardArgs = {\r\n category_id?: InputMaybe<Array<InputMaybe<Scalars['Int']>>>;\r\n};\r\n\r\n\r\nexport type QueryGetTeoriContentArgs = {\r\n limit?: InputMaybe<Scalars['Int']>;\r\n offset?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Quiz_Input = {\r\n quiz_Id?: InputMaybe<Scalars['ID']>;\r\n quiz_content_Desc?: InputMaybe<Scalars['String']>;\r\n quiz_default_language?: InputMaybe<Scalars['Int']>;\r\n quiz_is_draft?: InputMaybe<Scalars['Boolean']>;\r\n quiz_logo?: InputMaybe<Scalars['String']>;\r\n quiz_name?: InputMaybe<Scalars['String']>;\r\n quiz_time_to_complete?: InputMaybe<Scalars['DateTime']>;\r\n slides?: InputMaybe<Array<InputMaybe<Quiz_Slide_Input>>>;\r\n};\r\n\r\n/** School / Teacher objects */\r\nexport type School = {\r\n __typename?: 'School';\r\n address?: Maybe<Scalars['String']>;\r\n city?: Maybe<Scalars['String']>;\r\n contact_name?: Maybe<Scalars['String']>;\r\n email_id?: Maybe<Scalars['String']>;\r\n language_choice?: Maybe<Scalars['Int']>;\r\n mobile_number?: Maybe<Scalars['String']>;\r\n optional_note?: Maybe<Scalars['String']>;\r\n password?: Maybe<Scalars['String']>;\r\n phone_number?: Maybe<Scalars['String']>;\r\n school_departments?: Maybe<Array<Maybe<Department>>>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n school_name: Scalars['String'];\r\n skip_bill_check?: Maybe<Scalars['Boolean']>;\r\n vat_number?: Maybe<Scalars['String']>;\r\n zipcode?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type SchoolInput = {\r\n city?: InputMaybe<Scalars['String']>;\r\n contact_name?: InputMaybe<Scalars['String']>;\r\n email_id?: InputMaybe<Scalars['String']>;\r\n language_choice?: InputMaybe<Scalars['Int']>;\r\n optional_note?: InputMaybe<Scalars['String']>;\r\n password?: InputMaybe<Scalars['String']>;\r\n school_id?: InputMaybe<Scalars['Int']>;\r\n school_name?: InputMaybe<Scalars['String']>;\r\n skip_bill_check?: InputMaybe<Scalars['Boolean']>;\r\n vat_number?: InputMaybe<Scalars['Int']>;\r\n zipcode?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\nexport type School_Student = {\r\n __typename?: 'School_Student';\r\n access_code?: Maybe<Scalars['String']>;\r\n correct_quizzes?: Maybe<Scalars['Int']>;\r\n create_date?: Maybe<Scalars['DateTime']>;\r\n expiry_date?: Maybe<Scalars['DateTime']>;\r\n has_marks?: Maybe<Scalars['Boolean']>;\r\n student_category?: Maybe<Scalars['Int']>;\r\n student_class_start?: Maybe<Scalars['DateTime']>;\r\n student_email?: Maybe<Scalars['String']>;\r\n student_id: Scalars['ID'];\r\n student_name?: Maybe<Scalars['String']>;\r\n student_phone_number?: Maybe<Scalars['String']>;\r\n student_progress?: Maybe<Scalars['String']>;\r\n teori_department?: Maybe<Scalars['ID']>;\r\n total_quizzes?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Slide_Input = {\r\n lesson_id?: InputMaybe<Scalars['ID']>;\r\n slide_id?: InputMaybe<Scalars['ID']>;\r\n slide_order?: InputMaybe<Scalars['Int']>;\r\n slide_translations: Array<InputMaybe<Slide_Translation_Input>>;\r\n tags?: InputMaybe<Array<InputMaybe<Tag_Input>>>;\r\n};\r\n\r\nexport type Slide_Translation_Input = {\r\n keywords?: InputMaybe<Scalars['String']>;\r\n language_id?: InputMaybe<Scalars['Int']>;\r\n slide_note?: InputMaybe<Scalars['String']>;\r\n slide_sound_location?: InputMaybe<Scalars['String']>;\r\n slide_translation_id?: InputMaybe<Scalars['ID']>;\r\n translation_content?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\n/** Student objects */\r\nexport type Student = {\r\n __typename?: 'Student';\r\n create_date?: Maybe<Scalars['DateTime']>;\r\n expiry_date?: Maybe<Scalars['DateTime']>;\r\n first_name?: Maybe<Scalars['String']>;\r\n language_choice?: Maybe<Scalars['Int']>;\r\n last_name?: Maybe<Scalars['String']>;\r\n optional_value?: Maybe<Scalars['String']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n school_name?: Maybe<Scalars['String']>;\r\n student_category?: Maybe<Scalars['ID']>;\r\n student_category_desc?: Maybe<Scalars['String']>;\r\n student_class_start?: Maybe<Scalars['DateTime']>;\r\n student_code?: Maybe<Scalars['String']>;\r\n student_email?: Maybe<Scalars['String']>;\r\n student_id: Scalars['ID'];\r\n student_name?: Maybe<Scalars['String']>;\r\n student_phone_number?: Maybe<Scalars['String']>;\r\n teori_department?: Maybe<Scalars['ID']>;\r\n update_time?: Maybe<Scalars['DateTime']>;\r\n};\r\n\r\nexport type Student_Class = {\r\n class_id?: InputMaybe<Scalars['Int']>;\r\n student_id?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Student_Access = {\r\n first_name?: InputMaybe<Scalars['String']>;\r\n language_choice: Scalars['Int'];\r\n last_name?: InputMaybe<Scalars['String']>;\r\n optional_value?: InputMaybe<Scalars['String']>;\r\n student_category: Scalars['Int'];\r\n student_email?: InputMaybe<Scalars['String']>;\r\n student_id: Scalars['ID'];\r\n student_name: Scalars['String'];\r\n student_phone: Scalars['String'];\r\n};\r\n\r\nexport type Student_Ach_Get = {\r\n __typename?: 'Student_ach_get';\r\n achievement_id?: Maybe<Scalars['ID']>;\r\n achievement_location?: Maybe<Scalars['String']>;\r\n achievement_media_type?: Maybe<Scalars['ID']>;\r\n achievement_name?: Maybe<Scalars['String']>;\r\n dash_has_fails?: Maybe<Scalars['Int']>;\r\n dash_quiz_id?: Maybe<Scalars['Int']>;\r\n dash_status?: Maybe<Scalars['Int']>;\r\n dash_track_id?: Maybe<Scalars['ID']>;\r\n dash_track_update?: Maybe<Scalars['DateTime']>;\r\n student_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Student_Admin_Info = {\r\n __typename?: 'Student_admin_info';\r\n student_id: Scalars['ID'];\r\n student_phone_number?: Maybe<Scalars['String']>;\r\n student_pin?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Student_Class_Start = {\r\n student_class_start?: InputMaybe<Scalars['DateTime']>;\r\n student_id: Scalars['ID'];\r\n};\r\n\r\nexport type Student_Progress = {\r\n __typename?: 'Student_progress';\r\n achievement_name?: Maybe<Scalars['String']>;\r\n dash_status?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Subject_Lesson = {\r\n lesson_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Subuser = {\r\n __typename?: 'Subuser';\r\n department_name?: Maybe<Scalars['String']>;\r\n department_zipcode?: Maybe<Scalars['String']>;\r\n email_id?: Maybe<Scalars['String']>;\r\n is_department?: Maybe<Scalars['Boolean']>;\r\n school_id?: Maybe<Scalars['ID']>;\r\n skip_bill_check?: Maybe<Scalars['Boolean']>;\r\n subuser_id: Scalars['ID'];\r\n teacher_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\n/** Generic inputs */\r\nexport type Tag_Input = {\r\n tag_id?: InputMaybe<Scalars['ID']>;\r\n tag_name?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\n/** User objects */\r\nexport type UserToken = {\r\n __typename?: 'UserToken';\r\n accessToken?: Maybe<Scalars['String']>;\r\n refreshToken?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Class_Quiz = {\r\n __typename?: 'class_quiz';\r\n class_quiz_config_id?: Maybe<Scalars['ID']>;\r\n class_quiz_create_date?: Maybe<Scalars['DateTime']>;\r\n class_quiz_id?: Maybe<Scalars['ID']>;\r\n class_seed?: Maybe<Scalars['Int']>;\r\n teacher_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Class_Quiz_Config = {\r\n __typename?: 'class_quiz_config';\r\n ai_quiz_students?: Maybe<Scalars['String']>;\r\n ai_quiz_toggle?: Maybe<Scalars['Boolean']>;\r\n base_quiz_id?: Maybe<Scalars['ID']>;\r\n class_quiz_config_id?: Maybe<Scalars['ID']>;\r\n config_creation_date?: Maybe<Scalars['DateTime']>;\r\n config_name?: Maybe<Scalars['String']>;\r\n config_update_date?: Maybe<Scalars['DateTime']>;\r\n include_teori?: Maybe<Scalars['Boolean']>;\r\n quiz_language?: Maybe<Scalars['ID']>;\r\n quiz_learning_mode?: Maybe<Scalars['Boolean']>;\r\n quiz_read_only?: Maybe<Scalars['Boolean']>;\r\n quiz_speed?: Maybe<Scalars['ID']>;\r\n quiz_speed_value?: Maybe<Scalars['Int']>;\r\n quiz_subtitles?: Maybe<Scalars['ID']>;\r\n save_for_later?: Maybe<Scalars['Boolean']>;\r\n slide_amount?: Maybe<Scalars['Int']>;\r\n slides?: Maybe<Array<Maybe<Quiz_Slide>>>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n teacher_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Content = {\r\n __typename?: 'content';\r\n content_id?: Maybe<Scalars['ID']>;\r\n media_default?: Maybe<Scalars['Boolean']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_owner?: Maybe<Scalars['Int']>;\r\n media_type_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Failed_Tag = {\r\n __typename?: 'failed_tag';\r\n slides_failed?: Maybe<Scalars['Float']>;\r\n tag_id?: Maybe<Scalars['ID']>;\r\n tag_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Lesson = {\r\n __typename?: 'lesson';\r\n lesson_category?: Maybe<Scalars['Int']>;\r\n lesson_content_desc?: Maybe<Scalars['String']>;\r\n lesson_creation_date?: Maybe<Scalars['DateTime']>;\r\n lesson_date_format?: Maybe<Scalars['String']>;\r\n lesson_default?: Maybe<Scalars['Boolean']>;\r\n lesson_default_language?: Maybe<Scalars['Int']>;\r\n lesson_id?: Maybe<Scalars['ID']>;\r\n lesson_logo?: Maybe<Scalars['String']>;\r\n lesson_name?: Maybe<Scalars['String']>;\r\n lesson_owner?: Maybe<Scalars['ID']>;\r\n lesson_published?: Maybe<Scalars['Boolean']>;\r\n lesson_subject?: Maybe<Scalars['Boolean']>;\r\n slides?: Maybe<Array<Maybe<Slide>>>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n};\r\n\r\n/** Lesson Objects */\r\nexport type Lesson_Categories = {\r\n __typename?: 'lesson_categories';\r\n cat_id?: Maybe<Scalars['ID']>;\r\n cat_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Lesson_Edit = {\r\n __typename?: 'lesson_edit';\r\n lesson_category?: Maybe<Scalars['Int']>;\r\n lesson_content_desc?: Maybe<Scalars['String']>;\r\n lesson_date_format?: Maybe<Scalars['String']>;\r\n lesson_default?: Maybe<Scalars['Int']>;\r\n lesson_default_language?: Maybe<Scalars['Int']>;\r\n lesson_id?: Maybe<Scalars['ID']>;\r\n lesson_logo?: Maybe<Scalars['String']>;\r\n lesson_name?: Maybe<Scalars['String']>;\r\n lesson_owner?: Maybe<Scalars['ID']>;\r\n slides?: Maybe<Array<Maybe<Slide_Edit>>>;\r\n};\r\n\r\nexport type Media_Types = {\r\n __typename?: 'media_types';\r\n media_type_desc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['ID']>;\r\n media_type_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Progress = {\r\n __typename?: 'progress';\r\n explanation_location?: Maybe<Scalars['String']>;\r\n intro_sound_location?: Maybe<Scalars['String']>;\r\n intro_sound_text?: Maybe<Scalars['String']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['ID']>;\r\n online_quiz_id?: Maybe<Scalars['ID']>;\r\n original_slide_id?: Maybe<Scalars['ID']>;\r\n progress_id?: Maybe<Scalars['ID']>;\r\n progress_is_marked?: Maybe<Scalars['Boolean']>;\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n statement_progress?: Maybe<Array<Maybe<Statement_Student>>>;\r\n};\r\n\r\n/** Quiz Objects */\r\nexport type Quiz = {\r\n __typename?: 'quiz';\r\n quiz_Content_Desc?: Maybe<Scalars['String']>;\r\n quiz_Id?: Maybe<Scalars['ID']>;\r\n quiz_Logo?: Maybe<Scalars['String']>;\r\n quiz_creation_date?: Maybe<Scalars['DateTime']>;\r\n quiz_default_language?: Maybe<Scalars['Int']>;\r\n quiz_is_draft?: Maybe<Scalars['Boolean']>;\r\n quiz_name?: Maybe<Scalars['String']>;\r\n quiz_time_to_complete?: Maybe<Scalars['DateTime']>;\r\n slides?: Maybe<Array<Maybe<Quiz_Slide>>>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n};\r\n\r\nexport type Quiz_Edit = {\r\n __typename?: 'quiz_edit';\r\n quiz_Content_Desc?: Maybe<Scalars['String']>;\r\n quiz_Id: Scalars['ID'];\r\n quiz_Logo?: Maybe<Scalars['String']>;\r\n quiz_creation_date?: Maybe<Scalars['DateTime']>;\r\n quiz_default_language?: Maybe<Scalars['Int']>;\r\n quiz_is_draft?: Maybe<Scalars['Boolean']>;\r\n quiz_name?: Maybe<Scalars['String']>;\r\n quiz_time_to_complete?: Maybe<Scalars['DateTime']>;\r\n slides: Array<Maybe<Quiz_Slide_Edit>>;\r\n};\r\n\r\nexport type Quiz_Slide = {\r\n __typename?: 'quiz_slide';\r\n explanation_id?: Maybe<Scalars['String']>;\r\n explanation_location?: Maybe<Scalars['String']>;\r\n intro_sound_location?: Maybe<Scalars['String']>;\r\n intro_sound_text?: Maybe<Scalars['String']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['ID']>;\r\n quiz_id: Scalars['ID'];\r\n quiz_slide_id: Scalars['ID'];\r\n slide_is_accesible?: Maybe<Scalars['Int']>;\r\n slide_statements?: Maybe<Array<Maybe<Statement_View>>>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n};\r\n\r\nexport type Quiz_Slide_Edit = {\r\n __typename?: 'quiz_slide_edit';\r\n explanation_id?: Maybe<Scalars['ID']>;\r\n intro_question_content?: Maybe<Scalars['ID']>;\r\n intro_question_sound?: Maybe<Array<Maybe<Sound_Content>>>;\r\n quiz_id: Scalars['ID'];\r\n quiz_slide_id: Scalars['ID'];\r\n slide_content?: Maybe<Array<Maybe<Content>>>;\r\n slide_explanations?: Maybe<Array<Maybe<Slide_Explanation>>>;\r\n slide_is_accesible?: Maybe<Scalars['Int']>;\r\n slide_statements?: Maybe<Array<Maybe<Statement_Edit>>>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n translation_content?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Quiz_Slide_Input = {\r\n explanation_id?: InputMaybe<Scalars['ID']>;\r\n intro_question_content?: InputMaybe<Scalars['ID']>;\r\n intro_question_sound?: InputMaybe<Array<InputMaybe<Sound_Content_I>>>;\r\n quiz_id?: InputMaybe<Scalars['ID']>;\r\n quiz_slide_id?: InputMaybe<Scalars['ID']>;\r\n slide_content?: InputMaybe<Array<InputMaybe<Content_Input>>>;\r\n slide_explanations?: InputMaybe<Array<InputMaybe<Slide_Explanation_Input>>>;\r\n slide_is_accesible?: InputMaybe<Scalars['Int']>;\r\n slide_statements?: InputMaybe<Array<InputMaybe<Statement>>>;\r\n tags?: InputMaybe<Array<InputMaybe<Tag_Input>>>;\r\n translation_content?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Short_Slide = {\r\n __typename?: 'short_slide';\r\n language_id?: Maybe<Scalars['Int']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_name?: Maybe<Scalars['String']>;\r\n slide_id?: Maybe<Scalars['ID']>;\r\n slide_note?: Maybe<Scalars['String']>;\r\n slide_order?: Maybe<Scalars['Int']>;\r\n slide_sound_location?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Slide = {\r\n __typename?: 'slide';\r\n keywords?: Maybe<Scalars['String']>;\r\n language_id?: Maybe<Scalars['Int']>;\r\n media_location?: Maybe<Scalars['String']>;\r\n media_location_enc?: Maybe<Scalars['String']>;\r\n media_type_id?: Maybe<Scalars['Int']>;\r\n slide_id?: Maybe<Scalars['ID']>;\r\n slide_note?: Maybe<Scalars['String']>;\r\n slide_order?: Maybe<Scalars['Int']>;\r\n slide_sound_location?: Maybe<Scalars['String']>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n};\r\n\r\nexport type Slide_Edit = {\r\n __typename?: 'slide_edit';\r\n lesson_id?: Maybe<Scalars['Int']>;\r\n slide_id?: Maybe<Scalars['ID']>;\r\n slide_order?: Maybe<Scalars['Int']>;\r\n slide_translations?: Maybe<Array<Maybe<Slide_Translation_Edit>>>;\r\n tags?: Maybe<Array<Maybe<Tag>>>;\r\n};\r\n\r\nexport type Slide_Explanation = {\r\n __typename?: 'slide_explanation';\r\n explanation_id?: Maybe<Scalars['ID']>;\r\n explanation_is_original?: Maybe<Scalars['Boolean']>;\r\n explanation_language?: Maybe<Scalars['ID']>;\r\n explanation_location?: Maybe<Scalars['String']>;\r\n explanation_original?: Maybe<Scalars['Int']>;\r\n explanation_owner?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Slide_Explanation_Input = {\r\n explanation_id?: InputMaybe<Scalars['ID']>;\r\n explanation_is_original?: InputMaybe<Scalars['Boolean']>;\r\n explanation_language?: InputMaybe<Scalars['ID']>;\r\n explanation_location?: InputMaybe<Scalars['String']>;\r\n explanation_original?: InputMaybe<Scalars['Int']>;\r\n explanation_owner?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Slide_Translation_Edit = {\r\n __typename?: 'slide_translation_edit';\r\n content?: Maybe<Array<Maybe<Content>>>;\r\n keywords?: Maybe<Scalars['String']>;\r\n language_id?: Maybe<Scalars['ID']>;\r\n slide_note?: Maybe<Scalars['String']>;\r\n slide_sound_location?: Maybe<Scalars['String']>;\r\n slide_translation_id?: Maybe<Scalars['ID']>;\r\n translation_content?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Sound_Content = {\r\n __typename?: 'sound_content';\r\n sound_content_id?: Maybe<Scalars['ID']>;\r\n sound_language?: Maybe<Scalars['Int']>;\r\n sound_location?: Maybe<Scalars['String']>;\r\n sound_text?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Sound_Content_I = {\r\n sound_content_id?: InputMaybe<Scalars['ID']>;\r\n sound_language?: InputMaybe<Scalars['Int']>;\r\n sound_location?: InputMaybe<Scalars['String']>;\r\n sound_text?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\nexport type Statement = {\r\n elaboration_id?: InputMaybe<Scalars['ID']>;\r\n quiz_Statement_Id?: InputMaybe<Scalars['ID']>;\r\n quiz_slide_id?: InputMaybe<Scalars['ID']>;\r\n quiz_statement_content?: InputMaybe<Scalars['ID']>;\r\n quiz_statement_elaboration?: InputMaybe<Array<InputMaybe<Statement_Elaboration_Input>>>;\r\n quiz_statement_no?: InputMaybe<Scalars['ID']>;\r\n quiz_statement_sound?: InputMaybe<Array<InputMaybe<Sound_Content_I>>>;\r\n statement_answer_id?: InputMaybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Statement_Edit = {\r\n __typename?: 'statement_edit';\r\n elaboration_id?: Maybe<Scalars['ID']>;\r\n quiz_Statement_Id?: Maybe<Scalars['ID']>;\r\n quiz_slide_id?: Maybe<Scalars['ID']>;\r\n quiz_statement_content?: Maybe<Scalars['ID']>;\r\n quiz_statement_elaboration?: Maybe<Array<Maybe<Statement_Elaboration>>>;\r\n quiz_statement_no?: Maybe<Scalars['ID']>;\r\n quiz_statement_sound?: Maybe<Array<Maybe<Sound_Content>>>;\r\n statement_answer_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Statement_Elaboration = {\r\n __typename?: 'statement_elaboration';\r\n elaboration_id?: Maybe<Scalars['ID']>;\r\n elaboration_is_original?: Maybe<Scalars['Boolean']>;\r\n elaboration_language?: Maybe<Scalars['ID']>;\r\n elaboration_original?: Maybe<Scalars['Int']>;\r\n elaboration_owner?: Maybe<Scalars['ID']>;\r\n elaboration_text?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type Statement_Elaboration_Input = {\r\n elaboration_id?: InputMaybe<Scalars['ID']>;\r\n elaboration_is_original?: InputMaybe<Scalars['Boolean']>;\r\n elaboration_language?: InputMaybe<Scalars['ID']>;\r\n elaboration_original?: InputMaybe<Scalars['Int']>;\r\n elaboration_owner?: InputMaybe<Scalars['ID']>;\r\n elaboration_text?: InputMaybe<Scalars['String']>;\r\n};\r\n\r\nexport type Statement_Marked = {\r\n __typename?: 'statement_marked';\r\n elaboration_id?: Maybe<Scalars['ID']>;\r\n elaboration_text?: Maybe<Scalars['String']>;\r\n quiz_Slide_id?: Maybe<Scalars['ID']>;\r\n quiz_Statement_Id?: Maybe<Scalars['ID']>;\r\n quiz_statement_content?: Maybe<Scalars['ID']>;\r\n quiz_statement_no?: Maybe<Scalars['ID']>;\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n sound_language?: Maybe<Scalars['Int']>;\r\n sound_location?: Maybe<Scalars['String']>;\r\n sound_text?: Maybe<Scalars['String']>;\r\n statement_answer_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Statement_Student = {\r\n __typename?: 'statement_student';\r\n elaboration_Text?: Maybe<Scalars['String']>;\r\n online_slide_id?: Maybe<Scalars['ID']>;\r\n original_statement_id?: Maybe<Scalars['ID']>;\r\n quiz_statement_no?: Maybe<Scalars['Int']>;\r\n slide_pass_status?: Maybe<Scalars['Boolean']>;\r\n sound_location?: Maybe<Scalars['String']>;\r\n sound_text?: Maybe<Scalars['String']>;\r\n statement_answer_id?: Maybe<Scalars['Int']>;\r\n statement_progress_answer?: Maybe<Scalars['Int']>;\r\n statement_progress_id?: Maybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Statement_View = {\r\n __typename?: 'statement_view';\r\n elaboration_text?: Maybe<Scalars['String']>;\r\n quiz_Statement_Id?: Maybe<Scalars['ID']>;\r\n quiz_elaboration_id?: Maybe<Scalars['ID']>;\r\n quiz_slide_id?: Maybe<Scalars['ID']>;\r\n quiz_statement_no?: Maybe<Scalars['ID']>;\r\n sound_language?: Maybe<Scalars['ID']>;\r\n sound_location?: Maybe<Scalars['String']>;\r\n sound_text?: Maybe<Scalars['String']>;\r\n statement_answer_id?: Maybe<Scalars['Int']>;\r\n};\r\n\r\nexport type Student_Mark = {\r\n progress_id?: InputMaybe<Scalars['ID']>;\r\n student_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Student_Mark_Teacher = {\r\n slide_id?: InputMaybe<Scalars['ID']>;\r\n student_id?: InputMaybe<Scalars['ID']>;\r\n};\r\n\r\nexport type Tag = {\r\n __typename?: 'tag';\r\n tag_id?: Maybe<Scalars['ID']>;\r\n tag_name?: Maybe<Scalars['String']>;\r\n};\r\n\r\nexport type LoginMutationVariables = Exact<{\r\n email: Scalars['String'];\r\n password: Scalars['String'];\r\n}>;\r\n\r\n\r\nexport type LoginMutation = (\r\n { __typename?: 'Mutation' }\r\n & { LoginUser: (\r\n { __typename?: 'UserToken' }\r\n & Pick<UserToken, 'accessToken' | 'refreshToken'>\r\n ) }\r\n);\r\n\r\nexport type GetSasQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetSasQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getSAS'>\r\n);\r\n\r\nexport type RefreshUserMutationVariables = Exact<{\r\n old_token: Scalars['String'];\r\n}>;\r\n\r\n\r\nexport type RefreshUserMutation = (\r\n { __typename?: 'Mutation' }\r\n & { RefreshUser: (\r\n { __typename?: 'UserToken' }\r\n & Pick<UserToken, 'refreshToken' | 'accessToken'>\r\n ) }\r\n);\r\n\r\nexport type GetSchoolStudentsQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetSchoolStudentsQuery = (\r\n { __typename?: 'Query' }\r\n & { getSchoolStudents: Array<Maybe<(\r\n { __typename?: 'School_Student' }\r\n & Pick<School_Student, 'student_id' | 'correct_quizzes' | 'student_progress' | 'student_name' | 'student_email' | 'create_date' | 'student_class_start' | 'student_category' | 'student_phone_number' | 'access_code' | 'expiry_date' | 'has_marks' | 'total_quizzes'>\r\n )>> }\r\n);\r\n\r\nexport type GetStudentProgressQueryVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetStudentProgressQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentProgress?: Maybe<Array<Maybe<(\r\n { __typename?: 'Student_progress' }\r\n & Pick<Student_Progress, 'achievement_name' | 'dash_status'>\r\n )>>> }\r\n);\r\n\r\nexport type GetStudentFailedTagsQueryVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetStudentFailedTagsQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentFailedTags?: Maybe<Array<Maybe<(\r\n { __typename?: 'failed_tag' }\r\n & Pick<Failed_Tag, 'tag_id' | 'tag_name' | 'slides_failed'>\r\n )>>> }\r\n);\r\n\r\nexport type DeleteLessonMutationVariables = Exact<{\r\n lesson_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type DeleteLessonMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteLesson'>\r\n);\r\n\r\nexport type GetFailedSlidesTagQueryVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n tag_id: Scalars['ID'];\r\n quiz_date?: Maybe<Scalars['DateTime']>;\r\n}>;\r\n\r\n\r\nexport type GetFailedSlidesTagQuery = (\r\n { __typename?: 'Query' }\r\n & { getFailedSlidesTag?: Maybe<Array<Maybe<(\r\n { __typename?: 'progress' }\r\n & Pick<Progress, 'online_quiz_id' | 'progress_id' | 'original_slide_id' | 'explanation_location' | 'intro_sound_text' | 'media_location' | 'media_type_id' | 'media_location_enc' | 'intro_sound_location' | 'slide_pass_status'>\r\n & { statement_progress?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement_student' }\r\n & Pick<Statement_Student, 'statement_progress_id' | 'online_slide_id' | 'original_statement_id' | 'statement_answer_id' | 'quiz_statement_no' | 'elaboration_Text' | 'sound_text' | 'sound_location' | 'slide_pass_status'>\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type DeleteStudentMutationVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type DeleteStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteStudent'>\r\n);\r\n\r\nexport type GetTeoriContentQueryVariables = Exact<{\r\n offset?: Maybe<Scalars['Int']>;\r\n limit?: Maybe<Scalars['Int']>;\r\n}>;\r\n\r\n\r\nexport type GetTeoriContentQuery = (\r\n { __typename?: 'Query' }\r\n & { getTeoriContent?: Maybe<Array<Maybe<(\r\n { __typename?: 'content' }\r\n & Pick<Content, 'content_id' | 'media_type_id' | 'media_location'>\r\n )>>> }\r\n);\r\n\r\nexport type EditStudentClassStartMutationVariables = Exact<{\r\n students?: Maybe<Array<Maybe<Student_Class_Start>> | Maybe<Student_Class_Start>>;\r\n}>;\r\n\r\n\r\nexport type EditStudentClassStartMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'editStudentClassStart'>\r\n);\r\n\r\nexport type GetOwnedContentQueryVariables = Exact<{\r\n offset?: Maybe<Scalars['Int']>;\r\n limit?: Maybe<Scalars['Int']>;\r\n}>;\r\n\r\n\r\nexport type GetOwnedContentQuery = (\r\n { __typename?: 'Query' }\r\n & { getOwnedContent?: Maybe<Array<Maybe<(\r\n { __typename?: 'content' }\r\n & Pick<Content, 'content_id' | 'media_type_id' | 'media_location'>\r\n )>>> }\r\n);\r\n\r\nexport type GetSlidesPreviewQueryVariables = Exact<{\r\n lesson_id: Scalars['ID'];\r\n language_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetSlidesPreviewQuery = (\r\n { __typename?: 'Query' }\r\n & { getSlidesPreview?: Maybe<Array<Maybe<(\r\n { __typename?: 'short_slide' }\r\n & Pick<Short_Slide, 'slide_id' | 'media_type_name' | 'media_location' | 'media_location_enc'>\r\n )>>> }\r\n);\r\n\r\nexport type GetLessonInfoQueryVariables = Exact<{\r\n lesson_id: Scalars['ID'];\r\n language_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetLessonInfoQuery = (\r\n { __typename?: 'Query' }\r\n & { getLessonInfo?: Maybe<Array<Maybe<(\r\n { __typename?: 'lesson' }\r\n & Pick<Lesson, 'lesson_name' | 'lesson_default_language' | 'lesson_category'>\r\n & { slides?: Maybe<Array<Maybe<(\r\n { __typename?: 'slide' }\r\n & Pick<Slide, 'slide_id' | 'language_id' | 'media_type_id' | 'slide_note' | 'media_location' | 'keywords' | 'slide_sound_location'>\r\n & { tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_id' | 'tag_name'>\r\n )>>> }\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type GetAvailableTagsQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetAvailableTagsQuery = (\r\n { __typename?: 'Query' }\r\n & { getAvailableTags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_id' | 'tag_name'>\r\n )>>> }\r\n);\r\n\r\nexport type ManageContentMutationVariables = Exact<{\r\n content: Content_Input;\r\n}>;\r\n\r\n\r\nexport type ManageContentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageContent'>\r\n);\r\n\r\nexport type ManageLessonMutationVariables = Exact<{\r\n lesson: Lesson_Input;\r\n}>;\r\n\r\n\r\nexport type ManageLessonMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageLesson'>\r\n);\r\n\r\nexport type ManageQuizMutationVariables = Exact<{\r\n quiz: Quiz_Input;\r\n}>;\r\n\r\n\r\nexport type ManageQuizMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageQuiz'>\r\n);\r\n\r\nexport type GetSoundContentQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetSoundContentQuery = (\r\n { __typename?: 'Query' }\r\n & { getSoundContent?: Maybe<Array<Maybe<(\r\n { __typename?: 'sound_content' }\r\n & Pick<Sound_Content, 'sound_content_id' | 'sound_text' | 'sound_location'>\r\n )>>> }\r\n);\r\n\r\nexport type GetLessonEditQueryVariables = Exact<{\r\n lesson_id: Scalars['ID'];\r\n language_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetLessonEditQuery = (\r\n { __typename?: 'Query' }\r\n & { getLessonEdit?: Maybe<Array<Maybe<(\r\n { __typename?: 'lesson_edit' }\r\n & Pick<Lesson_Edit, 'lesson_id' | 'lesson_name' | 'lesson_default_language' | 'lesson_category'>\r\n & { slides?: Maybe<Array<Maybe<(\r\n { __typename?: 'slide_edit' }\r\n & Pick<Slide_Edit, 'slide_id'>\r\n & { tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_id' | 'tag_name'>\r\n )>>>, slide_translations?: Maybe<Array<Maybe<(\r\n { __typename?: 'slide_translation_edit' }\r\n & Pick<Slide_Translation_Edit, 'slide_translation_id' | 'language_id' | 'slide_note' | 'slide_sound_location' | 'translation_content' | 'keywords'>\r\n & { content?: Maybe<Array<Maybe<(\r\n { __typename?: 'content' }\r\n & Pick<Content, 'content_id' | 'media_type_id' | 'media_location'>\r\n )>>> }\r\n )>>> }\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type GetCompleteQuizEditQueryVariables = Exact<{\r\n quiz_id: Scalars['ID'];\r\n language_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetCompleteQuizEditQuery = (\r\n { __typename?: 'Query' }\r\n & { getCompleteQuizEdit?: Maybe<(\r\n { __typename?: 'quiz_edit' }\r\n & Pick<Quiz_Edit, 'quiz_Id' | 'quiz_name' | 'quiz_is_draft'>\r\n & { slides: Array<Maybe<(\r\n { __typename?: 'quiz_slide_edit' }\r\n & Pick<Quiz_Slide_Edit, 'quiz_id' | 'quiz_slide_id' | 'slide_is_accesible'>\r\n & { tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_id' | 'tag_name'>\r\n )>>>, intro_question_sound?: Maybe<Array<Maybe<(\r\n { __typename?: 'sound_content' }\r\n & Pick<Sound_Content, 'sound_language' | 'sound_text' | 'sound_location' | 'sound_content_id'>\r\n )>>>, slide_explanations?: Maybe<Array<Maybe<(\r\n { __typename?: 'slide_explanation' }\r\n & Pick<Slide_Explanation, 'explanation_id' | 'explanation_language' | 'explanation_location' | 'explanation_is_original'>\r\n )>>>, slide_content?: Maybe<Array<Maybe<(\r\n { __typename?: 'content' }\r\n & Pick<Content, 'media_owner' | 'media_location_enc' | 'media_location' | 'media_type_id' | 'content_id'>\r\n )>>>, slide_statements?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement_edit' }\r\n & Pick<Statement_Edit, 'quiz_Statement_Id' | 'quiz_statement_no' | 'statement_answer_id' | 'quiz_statement_content'>\r\n & { quiz_statement_elaboration?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement_elaboration' }\r\n & Pick<Statement_Elaboration, 'elaboration_id' | 'elaboration_language' | 'elaboration_text' | 'elaboration_is_original'>\r\n )>>>, quiz_statement_sound?: Maybe<Array<Maybe<(\r\n { __typename?: 'sound_content' }\r\n & Pick<Sound_Content, 'sound_language' | 'sound_text' | 'sound_location' | 'sound_content_id'>\r\n )>>> }\r\n )>>> }\r\n )>> }\r\n )> }\r\n);\r\n\r\nexport type ManageClassConfigMutationVariables = Exact<{\r\n class_quiz_config: Class_Quiz_Config_I;\r\n}>;\r\n\r\n\r\nexport type ManageClassConfigMutation = (\r\n { __typename?: 'Mutation' }\r\n & { manageClassConfig: (\r\n { __typename?: 'class_quiz_config' }\r\n & Pick<Class_Quiz_Config, 'class_quiz_config_id'>\r\n ) }\r\n);\r\n\r\nexport type DeleteClassConfigMutationVariables = Exact<{\r\n class_quiz_config_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type DeleteClassConfigMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteClassConfig'>\r\n);\r\n\r\nexport type InsertClassQuizMutationVariables = Exact<{\r\n class_quiz: Class_Quiz_Input;\r\n}>;\r\n\r\n\r\nexport type InsertClassQuizMutation = (\r\n { __typename?: 'Mutation' }\r\n & { insertClassQuiz: (\r\n { __typename?: 'class_quiz' }\r\n & Pick<Class_Quiz, 'class_quiz_id'>\r\n ) }\r\n);\r\n\r\nexport type GetContentQuizInfoQueryVariables = Exact<{\r\n class_quiz_id: Scalars['ID'];\r\n language_id?: Maybe<Scalars['ID']>;\r\n}>;\r\n\r\n\r\nexport type GetContentQuizInfoQuery = (\r\n { __typename?: 'Query' }\r\n & { getContentQuizInfo?: Maybe<(\r\n { __typename?: 'class_quiz_config' }\r\n & { slides?: Maybe<Array<Maybe<(\r\n { __typename?: 'quiz_slide' }\r\n & Pick<Quiz_Slide, 'quiz_slide_id' | 'media_type_id' | 'intro_sound_text' | 'intro_sound_location' | 'media_location' | 'media_location_enc'>\r\n & { slide_statements?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement_view' }\r\n & Pick<Statement_View, 'quiz_statement_no' | 'sound_text' | 'sound_location' | 'statement_answer_id' | 'elaboration_text'>\r\n )>>> }\r\n )>>> }\r\n )> }\r\n);\r\n\r\nexport type GetTeacherDashboardQueryVariables = Exact<{\r\n category_id?: Maybe<Array<Maybe<Scalars['Int']>> | Maybe<Scalars['Int']>>;\r\n}>;\r\n\r\n\r\nexport type GetTeacherDashboardQuery = (\r\n { __typename?: 'Query' }\r\n & { getTeacherDashboard?: Maybe<(\r\n { __typename?: 'Dashboard' }\r\n & { class_quiz_configs?: Maybe<Array<Maybe<(\r\n { __typename?: 'class_quiz_config' }\r\n & Pick<Class_Quiz_Config, 'class_quiz_config_id' | 'config_name' | 'config_creation_date' | 'quiz_speed' | 'quiz_language' | 'quiz_subtitles' | 'include_teori' | 'slide_amount' | 'save_for_later' | 'base_quiz_id'>\r\n & { tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_name' | 'tag_id'>\r\n )>>> }\r\n )>>>, default_quizzes?: Maybe<Array<Maybe<(\r\n { __typename?: 'quiz' }\r\n & Pick<Quiz, 'quiz_Id' | 'quiz_name' | 'quiz_creation_date'>\r\n & { tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_name' | 'tag_id'>\r\n )>>> }\r\n )>>>, teacher_lessons?: Maybe<Array<Maybe<(\r\n { __typename?: 'lesson' }\r\n & Pick<Lesson, 'lesson_id' | 'lesson_name' | 'lesson_creation_date' | 'lesson_category' | 'lesson_published'>\r\n & { tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_name' | 'tag_id'>\r\n )>>> }\r\n )>>>, default_lessons?: Maybe<Array<Maybe<(\r\n { __typename?: 'lesson' }\r\n & Pick<Lesson, 'lesson_id' | 'lesson_name' | 'lesson_creation_date' | 'lesson_category'>\r\n & { tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_name' | 'tag_id'>\r\n )>>> }\r\n )>>> }\r\n )> }\r\n);\r\n\r\nexport type DeleteSlideMutationVariables = Exact<{\r\n slide_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type DeleteSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteSlide'>\r\n);\r\n\r\nexport type DeleteSlideTagMutationVariables = Exact<{\r\n delete_quiz_slide_id?: Maybe<Scalars['ID']>;\r\n delete_tag_id?: Maybe<Scalars['ID']>;\r\n}>;\r\n\r\n\r\nexport type DeleteSlideTagMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteSlideTag'>\r\n);\r\n\r\nexport type DeleteQuizSlideMutationVariables = Exact<{\r\n quiz_slide_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type DeleteQuizSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteQuizSlide'>\r\n);\r\n\r\nexport type DeleteQuizStatementMutationVariables = Exact<{\r\n quiz_statement_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type DeleteQuizStatementMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteQuizStatement'>\r\n);\r\n\r\nexport type GetStudentsAdminQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStudentsAdminQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentsAdmin?: Maybe<Array<Maybe<(\r\n { __typename?: 'Student' }\r\n & Pick<Student, 'student_id' | 'expiry_date' | 'student_email' | 'create_date' | 'school_name' | 'first_name' | 'last_name' | 'student_phone_number' | 'optional_value' | 'student_category_desc' | 'student_code' | 'language_choice' | 'school_id' | 'student_category'>\r\n )>>> }\r\n);\r\n\r\nexport type ManageStudentMutationVariables = Exact<{\r\n student: New_Student;\r\n}>;\r\n\r\n\r\nexport type ManageStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageStudent'>\r\n);\r\n\r\nexport type GetCategoriesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetCategoriesQuery = (\r\n { __typename?: 'Query' }\r\n & { getCategories?: Maybe<Array<Maybe<(\r\n { __typename?: 'Category' }\r\n & Pick<Category, 'cat_id' | 'cat_name'>\r\n )>>> }\r\n);\r\n\r\nexport type GetSchoolListQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetSchoolListQuery = (\r\n { __typename?: 'Query' }\r\n & { getSchoolList?: Maybe<Array<Maybe<(\r\n { __typename?: 'School' }\r\n & Pick<School, 'school_id' | 'school_name' | 'zipcode'>\r\n )>>> }\r\n);\r\n\r\nexport type GetAdminStudentLoginInfoQueryVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetAdminStudentLoginInfoQuery = (\r\n { __typename?: 'Query' }\r\n & { getAdminStudentLoginInfo?: Maybe<(\r\n { __typename?: 'Student_admin_info' }\r\n & Pick<Student_Admin_Info, 'student_pin' | 'student_phone_number'>\r\n )> }\r\n);\r\n\r\nexport type GetStudentActivityQueryVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n limit?: Maybe<Scalars['Int']>;\r\n offset?: Maybe<Scalars['Int']>;\r\n}>;\r\n\r\n\r\nexport type GetStudentActivityQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentActivity?: Maybe<Array<Maybe<(\r\n { __typename?: 'Activity' }\r\n & Pick<Activity, 'activity_id' | 'activity_type' | 'activity_title' | 'activity_result' | 'dash_quiz_id' | 'activity_date' | 'activity_time'>\r\n )>>> }\r\n);\r\n\r\nexport type BlockSlideMutationVariables = Exact<{\r\n slides?: Maybe<Array<Maybe<Scalars['ID']>> | Maybe<Scalars['ID']>>;\r\n}>;\r\n\r\n\r\nexport type BlockSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'BlockSlide'>\r\n);\r\n\r\nexport type DeleteSlideBlockMutationVariables = Exact<{\r\n slides?: Maybe<Array<Maybe<Scalars['ID']>> | Maybe<Scalars['ID']>>;\r\n}>;\r\n\r\n\r\nexport type DeleteSlideBlockMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'DeleteSlideBlock'>\r\n);\r\n\r\nexport type GetBlockedSlidesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetBlockedSlidesQuery = (\r\n { __typename?: 'Query' }\r\n & { getBlockedSlides?: Maybe<Array<Maybe<(\r\n { __typename?: 'Blocked_slide' }\r\n & Pick<Blocked_Slide, 'quiz_slide_id'>\r\n )>>> }\r\n);\r\n\r\nexport type GetMarkedSlidesQueryVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetMarkedSlidesQuery = (\r\n { __typename?: 'Query' }\r\n & { getMarkedSlides?: Maybe<Array<Maybe<(\r\n { __typename?: 'Mark_slide' }\r\n & Pick<Mark_Slide, 'progress_id' | 'online_quiz_id' | 'original_slide_id' | 'explanation_location' | 'intro_sound_text' | 'media_location' | 'media_location_enc' | 'media_type_id'>\r\n & { slide_statements?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement_student' }\r\n & Pick<Statement_Student, 'original_statement_id' | 'statement_answer_id' | 'quiz_statement_no' | 'elaboration_Text' | 'sound_text' | 'slide_pass_status' | 'statement_progress_answer'>\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type UnmarkSlideMutationVariables = Exact<{\r\n unmarked_slides?: Maybe<Array<Maybe<Student_Mark>> | Maybe<Student_Mark>>;\r\n}>;\r\n\r\n\r\nexport type UnmarkSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'UnmarkSlide'>\r\n);\r\n\r\nexport type UnmarkSlideTeacherMutationVariables = Exact<{\r\n unmarked_original_slides?: Maybe<Array<Maybe<Student_Mark_Teacher>> | Maybe<Student_Mark_Teacher>>;\r\n}>;\r\n\r\n\r\nexport type UnmarkSlideTeacherMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'UnmarkSlideTeacher'>\r\n);\r\n\r\nexport type GetMarkedSlidesCountQueryVariables = Exact<{\r\n student_ids: Scalars['String'];\r\n}>;\r\n\r\n\r\nexport type GetMarkedSlidesCountQuery = (\r\n { __typename?: 'Query' }\r\n & { getMarkedSlidesCount?: Maybe<Array<Maybe<(\r\n { __typename?: 'Mark_slide' }\r\n & Pick<Mark_Slide, 'progress_id' | 'online_quiz_id' | 'original_slide_id' | 'explanation_location' | 'intro_sound_text' | 'media_location' | 'media_location_enc' | 'media_type_id' | 'mark_count'>\r\n & { slide_statements?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement_student' }\r\n & Pick<Statement_Student, 'original_statement_id' | 'statement_answer_id' | 'quiz_statement_no' | 'elaboration_Text' | 'sound_text' | 'slide_pass_status' | 'statement_progress_answer'>\r\n )>>>, tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_id' | 'tag_name'>\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type GetSubjectLessonsQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetSubjectLessonsQuery = (\r\n { __typename?: 'Query' }\r\n & { getSubjectLessons?: Maybe<Array<Maybe<(\r\n { __typename?: 'lesson' }\r\n & Pick<Lesson, 'lesson_id' | 'lesson_name' | 'lesson_category'>\r\n )>>> }\r\n);\r\n\r\nexport type CombineLessonMutationVariables = Exact<{\r\n combined_lesson?: Maybe<Combined_Lesson>;\r\n}>;\r\n\r\n\r\nexport type CombineLessonMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'combineLesson'>\r\n);\r\n\r\nexport type PublishLessonMutationVariables = Exact<{\r\n lesson_id?: Maybe<Scalars['ID']>;\r\n lesson_published?: Maybe<Scalars['Boolean']>;\r\n}>;\r\n\r\n\r\nexport type PublishLessonMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'publishLesson'>\r\n);\r\n\r\nexport type GetStudentAchTypesQueryVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetStudentAchTypesQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentAchTypes?: Maybe<Array<Maybe<(\r\n { __typename?: 'Achievement_type' }\r\n & Pick<Achievement_Type, 'achievement_name' | 'achievement_type_desc'>\r\n & { achievement_dash?: Maybe<Array<Maybe<(\r\n { __typename?: 'Student_ach_get' }\r\n & Pick<Student_Ach_Get, 'achievement_name' | 'dash_status'>\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\nexport type GetStudentsSchoolDeletedQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetStudentsSchoolDeletedQuery = (\r\n { __typename?: 'Query' }\r\n & { getStudentsSchoolDeleted?: Maybe<Array<Maybe<(\r\n { __typename?: 'School_Student' }\r\n & Pick<School_Student, 'student_id' | 'correct_quizzes' | 'student_progress' | 'student_name' | 'student_email' | 'create_date' | 'student_class_start' | 'student_category' | 'student_phone_number' | 'access_code' | 'expiry_date' | 'has_marks'>\r\n )>>> }\r\n);\r\n\r\nexport type UnlinkStudentMutationVariables = Exact<{\r\n student_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type UnlinkStudentMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'UnlinkStudent'>\r\n);\r\n\r\nexport type UnlinkSlideMutationVariables = Exact<{\r\n lesson_slide_id: Scalars['ID'];\r\n tag_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type UnlinkSlideMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'unlinkSlide'>\r\n);\r\n\r\nexport type CloneLessonMutationVariables = Exact<{\r\n lesson_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type CloneLessonMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'cloneLesson'>\r\n);\r\n\r\nexport type GetClassQuizResultQueryVariables = Exact<{\r\n class_quiz_id: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type GetClassQuizResultQuery = (\r\n { __typename?: 'Query' }\r\n & { getClassQuizResult?: Maybe<Array<Maybe<(\r\n { __typename?: 'Class_result' }\r\n & Pick<Class_Result, 'slide_id' | 'slide_pass_percentage'>\r\n )>>> }\r\n);\r\n\r\nexport type GetAllSchoolsQueryVariables = Exact<{\r\n is_active: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type GetAllSchoolsQuery = (\r\n { __typename?: 'Query' }\r\n & { getAllSchools?: Maybe<Array<Maybe<(\r\n { __typename?: 'School' }\r\n & Pick<School, 'school_id' | 'school_name' | 'contact_name' | 'email_id' | 'optional_note' | 'language_choice' | 'zipcode' | 'city' | 'password' | 'vat_number' | 'skip_bill_check'>\r\n )>>> }\r\n);\r\n\r\nexport type GetNotificationStudentsCountQueryVariables = Exact<{\r\n school_id: Array<Scalars['Int']>;\r\n language_id: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type GetNotificationStudentsCountQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getNotificationStudentsCount'>\r\n);\r\n\r\nexport type AddStudentsNotificationVariables = Exact<{\r\n school_id: Array<Scalars['Int']>;\r\n language_id: Scalars['Int'];\r\n expiry_date: Scalars['DateTime'];\r\n message: Scalars['String'];\r\n}>;\r\n\r\n\r\nexport type AddStudentsNotificationMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'addStudentsNotification'>\r\n);\r\n\r\nexport type SetSchoolStatusMutationVariables = Exact<{\r\n school_id: Scalars['Int'];\r\n school_status: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type SetSchoolStatusMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'setSchoolStatus'>\r\n);\r\n\r\nexport type ManageSchoolMutationVariables = Exact<{\r\n school: SchoolInput;\r\n}>;\r\n\r\n\r\nexport type ManageSchoolMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageSchool'>\r\n);\r\n\r\nexport type GetConfigCountByIdQueryVariables = Exact<{\r\n configId: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type GetConfigCountByIdQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'getConfigCountByID'>\r\n);\r\n\r\nexport type CreateSchoolCategoryMutationVariables = Exact<{\r\n schoolId: Scalars['Int'];\r\n categoryId: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type CreateSchoolCategoryMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'createSchoolCategory'>\r\n);\r\n\r\nexport type GetSchoolCategoryQueryVariables = Exact<{\r\n schoolId?: Maybe<Scalars['Int']>;\r\n}>;\r\n\r\n\r\nexport type GetSchoolCategoryQuery = (\r\n { __typename?: 'Query' }\r\n & { getSchoolCategory?: Maybe<Array<Maybe<(\r\n { __typename?: 'Category' }\r\n & Pick<Category, 'cat_id' | 'cat_name'>\r\n )>>> }\r\n);\r\n\r\nexport type GetSchoolSubusersAdminQueryVariables = Exact<{\r\n schoolId: Scalars['Int'];\r\n}>;\r\n\r\n\r\nexport type GetSchoolSubusersAdminQuery = (\r\n { __typename?: 'Query' }\r\n & { getSchoolSubusersAdmin?: Maybe<Array<(\r\n { __typename?: 'Subuser' }\r\n & Pick<Subuser, 'subuser_id' | 'teacher_name' | 'email_id' | 'school_id' | 'is_department' | 'department_name' | 'department_zipcode' | 'skip_bill_check'>\r\n )>> }\r\n);\r\n\r\nexport type ManageSubuserMutationVariables = Exact<{\r\n subuser: New_Subuser;\r\n}>;\r\n\r\n\r\nexport type ManageSubuserMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'manageSubuser'>\r\n);\r\n\r\nexport type DeleteSubuserMutationVariables = Exact<{\r\n subuserId: Scalars['ID'];\r\n}>;\r\n\r\n\r\nexport type DeleteSubuserMutation = (\r\n { __typename?: 'Mutation' }\r\n & Pick<Mutation, 'deleteSubuser'>\r\n);\r\n\r\nexport type GetAllCategoriesQueryVariables = Exact<{ [key: string]: never; }>;\r\n\r\n\r\nexport type GetAllCategoriesQuery = (\r\n { __typename?: 'Query' }\r\n & { getAllCategories?: Maybe<Array<Maybe<(\r\n { __typename?: 'Category' }\r\n & Pick<Category, 'cat_id' | 'cat_name'>\r\n )>>> }\r\n);\r\n\r\nexport type GetTeoriLessonStudentsQueryVariables = Exact<{\r\n lessonId?: Maybe<Scalars['String']>;\r\n}>;\r\n\r\n\r\nexport type GetTeoriLessonStudentsQuery = (\r\n { __typename?: 'Query' }\r\n & Pick<Query, 'GetTeoriLessonStudents'>\r\n);\r\n\r\nexport type GetAllSlidesQueryVariables = Exact<{\r\n included_slides?: Maybe<Scalars['Int']>;\r\n language_chosen?: Maybe<Scalars['Int']>;\r\n}>;\r\n\r\n\r\nexport type GetAllSlidesQuery = (\r\n { __typename?: 'Query' }\r\n & { getAllSlides?: Maybe<Array<Maybe<(\r\n { __typename?: 'quiz_slide' }\r\n & Pick<Quiz_Slide, 'quiz_slide_id' | 'media_type_id' | 'intro_sound_text' | 'intro_sound_location' | 'media_location' | 'media_location_enc' | 'quiz_id'>\r\n & { slide_statements?: Maybe<Array<Maybe<(\r\n { __typename?: 'statement_view' }\r\n & Pick<Statement_View, 'quiz_statement_no' | 'sound_text' | 'sound_location' | 'statement_answer_id' | 'elaboration_text'>\r\n )>>>, tags?: Maybe<Array<Maybe<(\r\n { __typename?: 'tag' }\r\n & Pick<Tag, 'tag_id' | 'tag_name'>\r\n )>>> }\r\n )>>> }\r\n);\r\n\r\n\r\nexport const LoginDocument = gql`\r\n mutation Login($email: String!, $password: String!) {\r\n LoginUser(email: $email, password: $password) {\r\n accessToken\r\n refreshToken\r\n }\r\n}\r\n `;\r\nexport type LoginMutationFn = Apollo.MutationFunction<LoginMutation, LoginMutationVariables>;\r\n\r\n/**\r\n * __useLoginMutation__\r\n *\r\n * To run a mutation, you first call `useLoginMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useLoginMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [loginMutation, { data, loading, error }] = useLoginMutation({\r\n * variables: {\r\n * email: // value for 'email'\r\n * password: // value for 'password'\r\n * },\r\n * });\r\n */\r\nexport function useLoginMutation(baseOptions?: Apollo.MutationHookOptions<LoginMutation, LoginMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<LoginMutation, LoginMutationVariables>(LoginDocument, options);\r\n }\r\nexport type LoginMutationHookResult = ReturnType<typeof useLoginMutation>;\r\nexport type LoginMutationResult = Apollo.MutationResult<LoginMutation>;\r\nexport type LoginMutationOptions = Apollo.BaseMutationOptions<LoginMutation, LoginMutationVariables>;\r\nexport const GetSasDocument = gql`\r\n query getSAS {\r\n getSAS\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSasQuery__\r\n *\r\n * To run a query within a React component, call `useGetSasQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSasQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSasQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetSasQuery(baseOptions?: Apollo.QueryHookOptions<GetSasQuery, GetSasQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSasQuery, GetSasQueryVariables>(GetSasDocument, options);\r\n }\r\nexport function useGetSasLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSasQuery, GetSasQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSasQuery, GetSasQueryVariables>(GetSasDocument, options);\r\n }\r\nexport type GetSasQueryHookResult = ReturnType<typeof useGetSasQuery>;\r\nexport type GetSasLazyQueryHookResult = ReturnType<typeof useGetSasLazyQuery>;\r\nexport type GetSasQueryResult = Apollo.QueryResult<GetSasQuery, GetSasQueryVariables>;\r\nexport const RefreshUserDocument = gql`\r\n mutation RefreshUser($old_token: String!) {\r\n RefreshUser(old_token: $old_token) {\r\n refreshToken\r\n accessToken\r\n }\r\n}\r\n `;\r\nexport type RefreshUserMutationFn = Apollo.MutationFunction<RefreshUserMutation, RefreshUserMutationVariables>;\r\n\r\n/**\r\n * __useRefreshUserMutation__\r\n *\r\n * To run a mutation, you first call `useRefreshUserMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useRefreshUserMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [refreshUserMutation, { data, loading, error }] = useRefreshUserMutation({\r\n * variables: {\r\n * old_token: // value for 'old_token'\r\n * },\r\n * });\r\n */\r\nexport function useRefreshUserMutation(baseOptions?: Apollo.MutationHookOptions<RefreshUserMutation, RefreshUserMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<RefreshUserMutation, RefreshUserMutationVariables>(RefreshUserDocument, options);\r\n }\r\nexport type RefreshUserMutationHookResult = ReturnType<typeof useRefreshUserMutation>;\r\nexport type RefreshUserMutationResult = Apollo.MutationResult<RefreshUserMutation>;\r\nexport type RefreshUserMutationOptions = Apollo.BaseMutationOptions<RefreshUserMutation, RefreshUserMutationVariables>;\r\nexport const GetSchoolStudentsDocument = gql`\r\n query getSchoolStudents {\r\n getSchoolStudents {\r\n student_id\r\n correct_quizzes\r\n student_progress\r\n student_name\r\n student_email\r\n create_date\r\n student_class_start\r\n student_category\r\n student_phone_number\r\n access_code\r\n expiry_date\r\n has_marks\r\n total_quizzes\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSchoolStudentsQuery__\r\n *\r\n * To run a query within a React component, call `useGetSchoolStudentsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSchoolStudentsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSchoolStudentsQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetSchoolStudentsQuery(baseOptions?: Apollo.QueryHookOptions<GetSchoolStudentsQuery, GetSchoolStudentsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSchoolStudentsQuery, GetSchoolStudentsQueryVariables>(GetSchoolStudentsDocument, options);\r\n }\r\nexport function useGetSchoolStudentsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSchoolStudentsQuery, GetSchoolStudentsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSchoolStudentsQuery, GetSchoolStudentsQueryVariables>(GetSchoolStudentsDocument, options);\r\n }\r\nexport type GetSchoolStudentsQueryHookResult = ReturnType<typeof useGetSchoolStudentsQuery>;\r\nexport type GetSchoolStudentsLazyQueryHookResult = ReturnType<typeof useGetSchoolStudentsLazyQuery>;\r\nexport type GetSchoolStudentsQueryResult = Apollo.QueryResult<GetSchoolStudentsQuery, GetSchoolStudentsQueryVariables>;\r\nexport const GetStudentProgressDocument = gql`\r\n query getStudentProgress($student_id: ID!) {\r\n getStudentProgress(student_id: $student_id) {\r\n achievement_name\r\n dash_status\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentProgressQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentProgressQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentProgressQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentProgressQuery({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentProgressQuery(baseOptions: Apollo.QueryHookOptions<GetStudentProgressQuery, GetStudentProgressQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentProgressQuery, GetStudentProgressQueryVariables>(GetStudentProgressDocument, options);\r\n }\r\nexport function useGetStudentProgressLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentProgressQuery, GetStudentProgressQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentProgressQuery, GetStudentProgressQueryVariables>(GetStudentProgressDocument, options);\r\n }\r\nexport type GetStudentProgressQueryHookResult = ReturnType<typeof useGetStudentProgressQuery>;\r\nexport type GetStudentProgressLazyQueryHookResult = ReturnType<typeof useGetStudentProgressLazyQuery>;\r\nexport type GetStudentProgressQueryResult = Apollo.QueryResult<GetStudentProgressQuery, GetStudentProgressQueryVariables>;\r\nexport const GetStudentFailedTagsDocument = gql`\r\n query getStudentFailedTags($student_id: ID!) {\r\n getStudentFailedTags(student_id: $student_id) {\r\n tag_id\r\n tag_name\r\n slides_failed\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentFailedTagsQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentFailedTagsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentFailedTagsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentFailedTagsQuery({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentFailedTagsQuery(baseOptions: Apollo.QueryHookOptions<GetStudentFailedTagsQuery, GetStudentFailedTagsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentFailedTagsQuery, GetStudentFailedTagsQueryVariables>(GetStudentFailedTagsDocument, options);\r\n }\r\nexport function useGetStudentFailedTagsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentFailedTagsQuery, GetStudentFailedTagsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentFailedTagsQuery, GetStudentFailedTagsQueryVariables>(GetStudentFailedTagsDocument, options);\r\n }\r\nexport type GetStudentFailedTagsQueryHookResult = ReturnType<typeof useGetStudentFailedTagsQuery>;\r\nexport type GetStudentFailedTagsLazyQueryHookResult = ReturnType<typeof useGetStudentFailedTagsLazyQuery>;\r\nexport type GetStudentFailedTagsQueryResult = Apollo.QueryResult<GetStudentFailedTagsQuery, GetStudentFailedTagsQueryVariables>;\r\nexport const DeleteLessonDocument = gql`\r\n mutation deleteLesson($lesson_id: ID!) {\r\n deleteLesson(lesson_id: $lesson_id)\r\n}\r\n `;\r\nexport type DeleteLessonMutationFn = Apollo.MutationFunction<DeleteLessonMutation, DeleteLessonMutationVariables>;\r\n\r\n/**\r\n * __useDeleteLessonMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteLessonMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteLessonMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteLessonMutation, { data, loading, error }] = useDeleteLessonMutation({\r\n * variables: {\r\n * lesson_id: // value for 'lesson_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteLessonMutation(baseOptions?: Apollo.MutationHookOptions<DeleteLessonMutation, DeleteLessonMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteLessonMutation, DeleteLessonMutationVariables>(DeleteLessonDocument, options);\r\n }\r\nexport type DeleteLessonMutationHookResult = ReturnType<typeof useDeleteLessonMutation>;\r\nexport type DeleteLessonMutationResult = Apollo.MutationResult<DeleteLessonMutation>;\r\nexport type DeleteLessonMutationOptions = Apollo.BaseMutationOptions<DeleteLessonMutation, DeleteLessonMutationVariables>;\r\nexport const GetFailedSlidesTagDocument = gql`\r\n query getFailedSlidesTag($student_id: ID!, $tag_id: ID!, $quiz_date: DateTime) {\r\n getFailedSlidesTag(\r\n student_id: $student_id\r\n tag_id: $tag_id\r\n quiz_date: $quiz_date\r\n ) {\r\n online_quiz_id\r\n progress_id\r\n original_slide_id\r\n online_quiz_id\r\n explanation_location\r\n intro_sound_text\r\n media_location\r\n media_type_id\r\n media_location_enc\r\n intro_sound_location\r\n slide_pass_status\r\n statement_progress {\r\n statement_progress_id\r\n online_slide_id\r\n original_statement_id\r\n statement_answer_id\r\n quiz_statement_no\r\n elaboration_Text\r\n sound_text\r\n sound_location\r\n slide_pass_status\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetFailedSlidesTagQuery__\r\n *\r\n * To run a query within a React component, call `useGetFailedSlidesTagQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetFailedSlidesTagQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetFailedSlidesTagQuery({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * tag_id: // value for 'tag_id'\r\n * quiz_date: // value for 'quiz_date'\r\n * },\r\n * });\r\n */\r\nexport function useGetFailedSlidesTagQuery(baseOptions: Apollo.QueryHookOptions<GetFailedSlidesTagQuery, GetFailedSlidesTagQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetFailedSlidesTagQuery, GetFailedSlidesTagQueryVariables>(GetFailedSlidesTagDocument, options);\r\n }\r\nexport function useGetFailedSlidesTagLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetFailedSlidesTagQuery, GetFailedSlidesTagQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetFailedSlidesTagQuery, GetFailedSlidesTagQueryVariables>(GetFailedSlidesTagDocument, options);\r\n }\r\nexport type GetFailedSlidesTagQueryHookResult = ReturnType<typeof useGetFailedSlidesTagQuery>;\r\nexport type GetFailedSlidesTagLazyQueryHookResult = ReturnType<typeof useGetFailedSlidesTagLazyQuery>;\r\nexport type GetFailedSlidesTagQueryResult = Apollo.QueryResult<GetFailedSlidesTagQuery, GetFailedSlidesTagQueryVariables>;\r\nexport const DeleteStudentDocument = gql`\r\n mutation deleteStudent($student_id: ID!) {\r\n deleteStudent(student_id: $student_id)\r\n}\r\n `;\r\nexport type DeleteStudentMutationFn = Apollo.MutationFunction<DeleteStudentMutation, DeleteStudentMutationVariables>;\r\n\r\n/**\r\n * __useDeleteStudentMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteStudentMutation, { data, loading, error }] = useDeleteStudentMutation({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteStudentMutation(baseOptions?: Apollo.MutationHookOptions<DeleteStudentMutation, DeleteStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteStudentMutation, DeleteStudentMutationVariables>(DeleteStudentDocument, options);\r\n }\r\nexport type DeleteStudentMutationHookResult = ReturnType<typeof useDeleteStudentMutation>;\r\nexport type DeleteStudentMutationResult = Apollo.MutationResult<DeleteStudentMutation>;\r\nexport type DeleteStudentMutationOptions = Apollo.BaseMutationOptions<DeleteStudentMutation, DeleteStudentMutationVariables>;\r\nexport const GetTeoriContentDocument = gql`\r\n query getTeoriContent($offset: Int, $limit: Int) {\r\n getTeoriContent(offset: $offset, limit: $limit) {\r\n content_id\r\n media_type_id\r\n media_location\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetTeoriContentQuery__\r\n *\r\n * To run a query within a React component, call `useGetTeoriContentQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetTeoriContentQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetTeoriContentQuery({\r\n * variables: {\r\n * offset: // value for 'offset'\r\n * limit: // value for 'limit'\r\n * },\r\n * });\r\n */\r\nexport function useGetTeoriContentQuery(baseOptions?: Apollo.QueryHookOptions<GetTeoriContentQuery, GetTeoriContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetTeoriContentQuery, GetTeoriContentQueryVariables>(GetTeoriContentDocument, options);\r\n }\r\nexport function useGetTeoriContentLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetTeoriContentQuery, GetTeoriContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetTeoriContentQuery, GetTeoriContentQueryVariables>(GetTeoriContentDocument, options);\r\n }\r\nexport type GetTeoriContentQueryHookResult = ReturnType<typeof useGetTeoriContentQuery>;\r\nexport type GetTeoriContentLazyQueryHookResult = ReturnType<typeof useGetTeoriContentLazyQuery>;\r\nexport type GetTeoriContentQueryResult = Apollo.QueryResult<GetTeoriContentQuery, GetTeoriContentQueryVariables>;\r\nexport const EditStudentClassStartDocument = gql`\r\n mutation editStudentClassStart($students: [Student_class_start]) {\r\n editStudentClassStart(students: $students)\r\n}\r\n `;\r\nexport type EditStudentClassStartMutationFn = Apollo.MutationFunction<EditStudentClassStartMutation, EditStudentClassStartMutationVariables>;\r\n\r\n/**\r\n * __useEditStudentClassStartMutation__\r\n *\r\n * To run a mutation, you first call `useEditStudentClassStartMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useEditStudentClassStartMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [editStudentClassStartMutation, { data, loading, error }] = useEditStudentClassStartMutation({\r\n * variables: {\r\n * students: // value for 'students'\r\n * },\r\n * });\r\n */\r\nexport function useEditStudentClassStartMutation(baseOptions?: Apollo.MutationHookOptions<EditStudentClassStartMutation, EditStudentClassStartMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<EditStudentClassStartMutation, EditStudentClassStartMutationVariables>(EditStudentClassStartDocument, options);\r\n }\r\nexport type EditStudentClassStartMutationHookResult = ReturnType<typeof useEditStudentClassStartMutation>;\r\nexport type EditStudentClassStartMutationResult = Apollo.MutationResult<EditStudentClassStartMutation>;\r\nexport type EditStudentClassStartMutationOptions = Apollo.BaseMutationOptions<EditStudentClassStartMutation, EditStudentClassStartMutationVariables>;\r\nexport const GetOwnedContentDocument = gql`\r\n query getOwnedContent($offset: Int, $limit: Int) {\r\n getOwnedContent(offset: $offset, limit: $limit) {\r\n content_id\r\n media_type_id\r\n media_location\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetOwnedContentQuery__\r\n *\r\n * To run a query within a React component, call `useGetOwnedContentQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetOwnedContentQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetOwnedContentQuery({\r\n * variables: {\r\n * offset: // value for 'offset'\r\n * limit: // value for 'limit'\r\n * },\r\n * });\r\n */\r\nexport function useGetOwnedContentQuery(baseOptions?: Apollo.QueryHookOptions<GetOwnedContentQuery, GetOwnedContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetOwnedContentQuery, GetOwnedContentQueryVariables>(GetOwnedContentDocument, options);\r\n }\r\nexport function useGetOwnedContentLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetOwnedContentQuery, GetOwnedContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetOwnedContentQuery, GetOwnedContentQueryVariables>(GetOwnedContentDocument, options);\r\n }\r\nexport type GetOwnedContentQueryHookResult = ReturnType<typeof useGetOwnedContentQuery>;\r\nexport type GetOwnedContentLazyQueryHookResult = ReturnType<typeof useGetOwnedContentLazyQuery>;\r\nexport type GetOwnedContentQueryResult = Apollo.QueryResult<GetOwnedContentQuery, GetOwnedContentQueryVariables>;\r\nexport const GetSlidesPreviewDocument = gql`\r\n query getSlidesPreview($lesson_id: ID!, $language_id: ID!) {\r\n getSlidesPreview(lesson_id: $lesson_id, language_id: $language_id) {\r\n slide_id\r\n media_type_name\r\n media_location\r\n media_location_enc\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSlidesPreviewQuery__\r\n *\r\n * To run a query within a React component, call `useGetSlidesPreviewQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSlidesPreviewQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSlidesPreviewQuery({\r\n * variables: {\r\n * lesson_id: // value for 'lesson_id'\r\n * language_id: // value for 'language_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetSlidesPreviewQuery(baseOptions: Apollo.QueryHookOptions<GetSlidesPreviewQuery, GetSlidesPreviewQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSlidesPreviewQuery, GetSlidesPreviewQueryVariables>(GetSlidesPreviewDocument, options);\r\n }\r\nexport function useGetSlidesPreviewLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSlidesPreviewQuery, GetSlidesPreviewQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSlidesPreviewQuery, GetSlidesPreviewQueryVariables>(GetSlidesPreviewDocument, options);\r\n }\r\nexport type GetSlidesPreviewQueryHookResult = ReturnType<typeof useGetSlidesPreviewQuery>;\r\nexport type GetSlidesPreviewLazyQueryHookResult = ReturnType<typeof useGetSlidesPreviewLazyQuery>;\r\nexport type GetSlidesPreviewQueryResult = Apollo.QueryResult<GetSlidesPreviewQuery, GetSlidesPreviewQueryVariables>;\r\nexport const GetLessonInfoDocument = gql`\r\n query getLessonInfo($lesson_id: ID!, $language_id: ID!) {\r\n getLessonInfo(lesson_id: $lesson_id, language_id: $language_id) {\r\n lesson_name\r\n lesson_default_language\r\n lesson_category\r\n lesson_default_language\r\n slides {\r\n slide_id\r\n language_id\r\n media_type_id\r\n language_id\r\n slide_note\r\n media_location\r\n keywords\r\n slide_sound_location\r\n tags {\r\n tag_id\r\n tag_name\r\n }\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetLessonInfoQuery__\r\n *\r\n * To run a query within a React component, call `useGetLessonInfoQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetLessonInfoQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetLessonInfoQuery({\r\n * variables: {\r\n * lesson_id: // value for 'lesson_id'\r\n * language_id: // value for 'language_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetLessonInfoQuery(baseOptions: Apollo.QueryHookOptions<GetLessonInfoQuery, GetLessonInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetLessonInfoQuery, GetLessonInfoQueryVariables>(GetLessonInfoDocument, options);\r\n }\r\nexport function useGetLessonInfoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetLessonInfoQuery, GetLessonInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetLessonInfoQuery, GetLessonInfoQueryVariables>(GetLessonInfoDocument, options);\r\n }\r\nexport type GetLessonInfoQueryHookResult = ReturnType<typeof useGetLessonInfoQuery>;\r\nexport type GetLessonInfoLazyQueryHookResult = ReturnType<typeof useGetLessonInfoLazyQuery>;\r\nexport type GetLessonInfoQueryResult = Apollo.QueryResult<GetLessonInfoQuery, GetLessonInfoQueryVariables>;\r\nexport const GetAvailableTagsDocument = gql`\r\n query getAvailableTags {\r\n getAvailableTags {\r\n tag_id\r\n tag_name\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetAvailableTagsQuery__\r\n *\r\n * To run a query within a React component, call `useGetAvailableTagsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetAvailableTagsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetAvailableTagsQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetAvailableTagsQuery(baseOptions?: Apollo.QueryHookOptions<GetAvailableTagsQuery, GetAvailableTagsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetAvailableTagsQuery, GetAvailableTagsQueryVariables>(GetAvailableTagsDocument, options);\r\n }\r\nexport function useGetAvailableTagsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetAvailableTagsQuery, GetAvailableTagsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetAvailableTagsQuery, GetAvailableTagsQueryVariables>(GetAvailableTagsDocument, options);\r\n }\r\nexport type GetAvailableTagsQueryHookResult = ReturnType<typeof useGetAvailableTagsQuery>;\r\nexport type GetAvailableTagsLazyQueryHookResult = ReturnType<typeof useGetAvailableTagsLazyQuery>;\r\nexport type GetAvailableTagsQueryResult = Apollo.QueryResult<GetAvailableTagsQuery, GetAvailableTagsQueryVariables>;\r\nexport const ManageContentDocument = gql`\r\n mutation manageContent($content: Content_input!) {\r\n manageContent(content: $content)\r\n}\r\n `;\r\nexport type ManageContentMutationFn = Apollo.MutationFunction<ManageContentMutation, ManageContentMutationVariables>;\r\n\r\n/**\r\n * __useManageContentMutation__\r\n *\r\n * To run a mutation, you first call `useManageContentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageContentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageContentMutation, { data, loading, error }] = useManageContentMutation({\r\n * variables: {\r\n * content: // value for 'content'\r\n * },\r\n * });\r\n */\r\nexport function useManageContentMutation(baseOptions?: Apollo.MutationHookOptions<ManageContentMutation, ManageContentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageContentMutation, ManageContentMutationVariables>(ManageContentDocument, options);\r\n }\r\nexport type ManageContentMutationHookResult = ReturnType<typeof useManageContentMutation>;\r\nexport type ManageContentMutationResult = Apollo.MutationResult<ManageContentMutation>;\r\nexport type ManageContentMutationOptions = Apollo.BaseMutationOptions<ManageContentMutation, ManageContentMutationVariables>;\r\nexport const ManageLessonDocument = gql`\r\n mutation manageLesson($lesson: Lesson_input!) {\r\n manageLesson(lesson: $lesson)\r\n}\r\n `;\r\nexport type ManageLessonMutationFn = Apollo.MutationFunction<ManageLessonMutation, ManageLessonMutationVariables>;\r\n\r\n/**\r\n * __useManageLessonMutation__\r\n *\r\n * To run a mutation, you first call `useManageLessonMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageLessonMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageLessonMutation, { data, loading, error }] = useManageLessonMutation({\r\n * variables: {\r\n * lesson: // value for 'lesson'\r\n * },\r\n * });\r\n */\r\nexport function useManageLessonMutation(baseOptions?: Apollo.MutationHookOptions<ManageLessonMutation, ManageLessonMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageLessonMutation, ManageLessonMutationVariables>(ManageLessonDocument, options);\r\n }\r\nexport type ManageLessonMutationHookResult = ReturnType<typeof useManageLessonMutation>;\r\nexport type ManageLessonMutationResult = Apollo.MutationResult<ManageLessonMutation>;\r\nexport type ManageLessonMutationOptions = Apollo.BaseMutationOptions<ManageLessonMutation, ManageLessonMutationVariables>;\r\nexport const ManageQuizDocument = gql`\r\n mutation manageQuiz($quiz: Quiz_input!) {\r\n manageQuiz(quiz: $quiz)\r\n}\r\n `;\r\nexport type ManageQuizMutationFn = Apollo.MutationFunction<ManageQuizMutation, ManageQuizMutationVariables>;\r\n\r\n/**\r\n * __useManageQuizMutation__\r\n *\r\n * To run a mutation, you first call `useManageQuizMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageQuizMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageQuizMutation, { data, loading, error }] = useManageQuizMutation({\r\n * variables: {\r\n * quiz: // value for 'quiz'\r\n * },\r\n * });\r\n */\r\nexport function useManageQuizMutation(baseOptions?: Apollo.MutationHookOptions<ManageQuizMutation, ManageQuizMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageQuizMutation, ManageQuizMutationVariables>(ManageQuizDocument, options);\r\n }\r\nexport type ManageQuizMutationHookResult = ReturnType<typeof useManageQuizMutation>;\r\nexport type ManageQuizMutationResult = Apollo.MutationResult<ManageQuizMutation>;\r\nexport type ManageQuizMutationOptions = Apollo.BaseMutationOptions<ManageQuizMutation, ManageQuizMutationVariables>;\r\nexport const GetSoundContentDocument = gql`\r\n query getSoundContent {\r\n getSoundContent {\r\n sound_content_id\r\n sound_text\r\n sound_location\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSoundContentQuery__\r\n *\r\n * To run a query within a React component, call `useGetSoundContentQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSoundContentQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSoundContentQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetSoundContentQuery(baseOptions?: Apollo.QueryHookOptions<GetSoundContentQuery, GetSoundContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSoundContentQuery, GetSoundContentQueryVariables>(GetSoundContentDocument, options);\r\n }\r\nexport function useGetSoundContentLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSoundContentQuery, GetSoundContentQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSoundContentQuery, GetSoundContentQueryVariables>(GetSoundContentDocument, options);\r\n }\r\nexport type GetSoundContentQueryHookResult = ReturnType<typeof useGetSoundContentQuery>;\r\nexport type GetSoundContentLazyQueryHookResult = ReturnType<typeof useGetSoundContentLazyQuery>;\r\nexport type GetSoundContentQueryResult = Apollo.QueryResult<GetSoundContentQuery, GetSoundContentQueryVariables>;\r\nexport const GetLessonEditDocument = gql`\r\n query getLessonEdit($lesson_id: ID!, $language_id: ID!) {\r\n getLessonEdit(lesson_id: $lesson_id, language_id: $language_id) {\r\n lesson_id\r\n lesson_name\r\n lesson_default_language\r\n lesson_category\r\n slides {\r\n slide_id\r\n tags {\r\n tag_id\r\n tag_name\r\n }\r\n slide_translations {\r\n slide_translation_id\r\n language_id\r\n slide_note\r\n slide_sound_location\r\n translation_content\r\n keywords\r\n content {\r\n content_id\r\n media_type_id\r\n media_location\r\n }\r\n }\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetLessonEditQuery__\r\n *\r\n * To run a query within a React component, call `useGetLessonEditQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetLessonEditQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetLessonEditQuery({\r\n * variables: {\r\n * lesson_id: // value for 'lesson_id'\r\n * language_id: // value for 'language_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetLessonEditQuery(baseOptions: Apollo.QueryHookOptions<GetLessonEditQuery, GetLessonEditQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetLessonEditQuery, GetLessonEditQueryVariables>(GetLessonEditDocument, options);\r\n }\r\nexport function useGetLessonEditLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetLessonEditQuery, GetLessonEditQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetLessonEditQuery, GetLessonEditQueryVariables>(GetLessonEditDocument, options);\r\n }\r\nexport type GetLessonEditQueryHookResult = ReturnType<typeof useGetLessonEditQuery>;\r\nexport type GetLessonEditLazyQueryHookResult = ReturnType<typeof useGetLessonEditLazyQuery>;\r\nexport type GetLessonEditQueryResult = Apollo.QueryResult<GetLessonEditQuery, GetLessonEditQueryVariables>;\r\nexport const GetCompleteQuizEditDocument = gql`\r\n query getCompleteQuizEdit($quiz_id: ID!, $language_id: ID!) {\r\n getCompleteQuizEdit(quiz_id: $quiz_id, language_id: $language_id) {\r\n quiz_Id\r\n quiz_name\r\n quiz_is_draft\r\n slides {\r\n quiz_id\r\n quiz_slide_id\r\n slide_is_accesible\r\n tags {\r\n tag_id\r\n tag_name\r\n }\r\n intro_question_sound {\r\n sound_language\r\n sound_text\r\n sound_location\r\n sound_content_id\r\n }\r\n slide_explanations {\r\n explanation_id\r\n explanation_language\r\n explanation_location\r\n explanation_is_original\r\n }\r\n slide_content {\r\n media_owner\r\n media_location_enc\r\n media_location\r\n media_type_id\r\n content_id\r\n }\r\n slide_statements {\r\n quiz_Statement_Id\r\n quiz_statement_no\r\n statement_answer_id\r\n quiz_statement_content\r\n quiz_statement_elaboration {\r\n elaboration_id\r\n elaboration_language\r\n elaboration_text\r\n elaboration_is_original\r\n }\r\n quiz_statement_sound {\r\n sound_language\r\n sound_text\r\n sound_location\r\n sound_content_id\r\n }\r\n }\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetCompleteQuizEditQuery__\r\n *\r\n * To run a query within a React component, call `useGetCompleteQuizEditQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetCompleteQuizEditQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetCompleteQuizEditQuery({\r\n * variables: {\r\n * quiz_id: // value for 'quiz_id'\r\n * language_id: // value for 'language_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetCompleteQuizEditQuery(baseOptions: Apollo.QueryHookOptions<GetCompleteQuizEditQuery, GetCompleteQuizEditQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetCompleteQuizEditQuery, GetCompleteQuizEditQueryVariables>(GetCompleteQuizEditDocument, options);\r\n }\r\nexport function useGetCompleteQuizEditLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetCompleteQuizEditQuery, GetCompleteQuizEditQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetCompleteQuizEditQuery, GetCompleteQuizEditQueryVariables>(GetCompleteQuizEditDocument, options);\r\n }\r\nexport type GetCompleteQuizEditQueryHookResult = ReturnType<typeof useGetCompleteQuizEditQuery>;\r\nexport type GetCompleteQuizEditLazyQueryHookResult = ReturnType<typeof useGetCompleteQuizEditLazyQuery>;\r\nexport type GetCompleteQuizEditQueryResult = Apollo.QueryResult<GetCompleteQuizEditQuery, GetCompleteQuizEditQueryVariables>;\r\nexport const ManageClassConfigDocument = gql`\r\n mutation manageClassConfig($class_quiz_config: Class_quiz_config_i!) {\r\n manageClassConfig(class_quiz_config: $class_quiz_config) {\r\n class_quiz_config_id\r\n }\r\n}\r\n `;\r\nexport type ManageClassConfigMutationFn = Apollo.MutationFunction<ManageClassConfigMutation, ManageClassConfigMutationVariables>;\r\n\r\n/**\r\n * __useManageClassConfigMutation__\r\n *\r\n * To run a mutation, you first call `useManageClassConfigMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageClassConfigMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageClassConfigMutation, { data, loading, error }] = useManageClassConfigMutation({\r\n * variables: {\r\n * class_quiz_config: // value for 'class_quiz_config'\r\n * },\r\n * });\r\n */\r\nexport function useManageClassConfigMutation(baseOptions?: Apollo.MutationHookOptions<ManageClassConfigMutation, ManageClassConfigMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageClassConfigMutation, ManageClassConfigMutationVariables>(ManageClassConfigDocument, options);\r\n }\r\nexport type ManageClassConfigMutationHookResult = ReturnType<typeof useManageClassConfigMutation>;\r\nexport type ManageClassConfigMutationResult = Apollo.MutationResult<ManageClassConfigMutation>;\r\nexport type ManageClassConfigMutationOptions = Apollo.BaseMutationOptions<ManageClassConfigMutation, ManageClassConfigMutationVariables>;\r\nexport const DeleteClassConfigDocument = gql`\r\n mutation deleteClassConfig($class_quiz_config_id: ID!) {\r\n deleteClassConfig(class_quiz_config_id: $class_quiz_config_id)\r\n}\r\n `;\r\nexport type DeleteClassConfigMutationFn = Apollo.MutationFunction<DeleteClassConfigMutation, DeleteClassConfigMutationVariables>;\r\n\r\n/**\r\n * __useDeleteClassConfigMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteClassConfigMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteClassConfigMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteClassConfigMutation, { data, loading, error }] = useDeleteClassConfigMutation({\r\n * variables: {\r\n * class_quiz_config_id: // value for 'class_quiz_config_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteClassConfigMutation(baseOptions?: Apollo.MutationHookOptions<DeleteClassConfigMutation, DeleteClassConfigMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteClassConfigMutation, DeleteClassConfigMutationVariables>(DeleteClassConfigDocument, options);\r\n }\r\nexport type DeleteClassConfigMutationHookResult = ReturnType<typeof useDeleteClassConfigMutation>;\r\nexport type DeleteClassConfigMutationResult = Apollo.MutationResult<DeleteClassConfigMutation>;\r\nexport type DeleteClassConfigMutationOptions = Apollo.BaseMutationOptions<DeleteClassConfigMutation, DeleteClassConfigMutationVariables>;\r\nexport const InsertClassQuizDocument = gql`\r\n mutation insertClassQuiz($class_quiz: Class_quiz_input!) {\r\n insertClassQuiz(class_quiz: $class_quiz) {\r\n class_quiz_id\r\n }\r\n}\r\n `;\r\nexport type InsertClassQuizMutationFn = Apollo.MutationFunction<InsertClassQuizMutation, InsertClassQuizMutationVariables>;\r\n\r\n/**\r\n * __useInsertClassQuizMutation__\r\n *\r\n * To run a mutation, you first call `useInsertClassQuizMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useInsertClassQuizMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [insertClassQuizMutation, { data, loading, error }] = useInsertClassQuizMutation({\r\n * variables: {\r\n * class_quiz: // value for 'class_quiz'\r\n * },\r\n * });\r\n */\r\nexport function useInsertClassQuizMutation(baseOptions?: Apollo.MutationHookOptions<InsertClassQuizMutation, InsertClassQuizMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<InsertClassQuizMutation, InsertClassQuizMutationVariables>(InsertClassQuizDocument, options);\r\n }\r\nexport type InsertClassQuizMutationHookResult = ReturnType<typeof useInsertClassQuizMutation>;\r\nexport type InsertClassQuizMutationResult = Apollo.MutationResult<InsertClassQuizMutation>;\r\nexport type InsertClassQuizMutationOptions = Apollo.BaseMutationOptions<InsertClassQuizMutation, InsertClassQuizMutationVariables>;\r\nexport const GetContentQuizInfoDocument = gql`\r\n query getContentQuizInfo($class_quiz_id: ID!, $language_id: ID) {\r\n getContentQuizInfo(class_quiz_id: $class_quiz_id, language_id: $language_id) {\r\n slides {\r\n quiz_slide_id\r\n media_type_id\r\n intro_sound_text\r\n intro_sound_location\r\n media_location\r\n media_location_enc\r\n slide_statements {\r\n quiz_statement_no\r\n sound_text\r\n sound_location\r\n statement_answer_id\r\n elaboration_text\r\n }\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetContentQuizInfoQuery__\r\n *\r\n * To run a query within a React component, call `useGetContentQuizInfoQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetContentQuizInfoQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetContentQuizInfoQuery({\r\n * variables: {\r\n * class_quiz_id: // value for 'class_quiz_id'\r\n * language_id: // value for 'language_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetContentQuizInfoQuery(baseOptions: Apollo.QueryHookOptions<GetContentQuizInfoQuery, GetContentQuizInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetContentQuizInfoQuery, GetContentQuizInfoQueryVariables>(GetContentQuizInfoDocument, options);\r\n }\r\nexport function useGetContentQuizInfoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetContentQuizInfoQuery, GetContentQuizInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetContentQuizInfoQuery, GetContentQuizInfoQueryVariables>(GetContentQuizInfoDocument, options);\r\n }\r\nexport type GetContentQuizInfoQueryHookResult = ReturnType<typeof useGetContentQuizInfoQuery>;\r\nexport type GetContentQuizInfoLazyQueryHookResult = ReturnType<typeof useGetContentQuizInfoLazyQuery>;\r\nexport type GetContentQuizInfoQueryResult = Apollo.QueryResult<GetContentQuizInfoQuery, GetContentQuizInfoQueryVariables>;\r\nexport const GetTeacherDashboardDocument = gql`\r\n query getTeacherDashboard($category_id: [Int]) {\r\n getTeacherDashboard(category_id: $category_id) {\r\n class_quiz_configs {\r\n class_quiz_config_id\r\n config_name\r\n config_creation_date\r\n quiz_speed\r\n quiz_language\r\n quiz_subtitles\r\n include_teori\r\n slide_amount\r\n save_for_later\r\n base_quiz_id\r\n tags {\r\n tag_name\r\n tag_id\r\n }\r\n }\r\n default_quizzes {\r\n quiz_Id\r\n quiz_name\r\n quiz_creation_date\r\n tags {\r\n tag_name\r\n tag_id\r\n }\r\n }\r\n teacher_lessons {\r\n lesson_id\r\n lesson_name\r\n lesson_creation_date\r\n lesson_category\r\n lesson_published\r\n tags {\r\n tag_name\r\n tag_id\r\n }\r\n }\r\n default_lessons {\r\n lesson_id\r\n lesson_name\r\n lesson_creation_date\r\n lesson_category\r\n tags {\r\n tag_name\r\n tag_id\r\n }\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetTeacherDashboardQuery__\r\n *\r\n * To run a query within a React component, call `useGetTeacherDashboardQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetTeacherDashboardQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetTeacherDashboardQuery({\r\n * variables: {\r\n * category_id: // value for 'category_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetTeacherDashboardQuery(baseOptions?: Apollo.QueryHookOptions<GetTeacherDashboardQuery, GetTeacherDashboardQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetTeacherDashboardQuery, GetTeacherDashboardQueryVariables>(GetTeacherDashboardDocument, options);\r\n }\r\nexport function useGetTeacherDashboardLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetTeacherDashboardQuery, GetTeacherDashboardQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetTeacherDashboardQuery, GetTeacherDashboardQueryVariables>(GetTeacherDashboardDocument, options);\r\n }\r\nexport type GetTeacherDashboardQueryHookResult = ReturnType<typeof useGetTeacherDashboardQuery>;\r\nexport type GetTeacherDashboardLazyQueryHookResult = ReturnType<typeof useGetTeacherDashboardLazyQuery>;\r\nexport type GetTeacherDashboardQueryResult = Apollo.QueryResult<GetTeacherDashboardQuery, GetTeacherDashboardQueryVariables>;\r\nexport const DeleteSlideDocument = gql`\r\n mutation deleteSlide($slide_id: ID!) {\r\n deleteSlide(slide_id: $slide_id)\r\n}\r\n `;\r\nexport type DeleteSlideMutationFn = Apollo.MutationFunction<DeleteSlideMutation, DeleteSlideMutationVariables>;\r\n\r\n/**\r\n * __useDeleteSlideMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteSlideMutation, { data, loading, error }] = useDeleteSlideMutation({\r\n * variables: {\r\n * slide_id: // value for 'slide_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteSlideMutation(baseOptions?: Apollo.MutationHookOptions<DeleteSlideMutation, DeleteSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteSlideMutation, DeleteSlideMutationVariables>(DeleteSlideDocument, options);\r\n }\r\nexport type DeleteSlideMutationHookResult = ReturnType<typeof useDeleteSlideMutation>;\r\nexport type DeleteSlideMutationResult = Apollo.MutationResult<DeleteSlideMutation>;\r\nexport type DeleteSlideMutationOptions = Apollo.BaseMutationOptions<DeleteSlideMutation, DeleteSlideMutationVariables>;\r\nexport const DeleteSlideTagDocument = gql`\r\n mutation deleteSlideTag($delete_quiz_slide_id: ID, $delete_tag_id: ID) {\r\n deleteSlideTag(\r\n delete_quiz_slide_id: $delete_quiz_slide_id\r\n delete_tag_id: $delete_tag_id\r\n )\r\n}\r\n `;\r\nexport type DeleteSlideTagMutationFn = Apollo.MutationFunction<DeleteSlideTagMutation, DeleteSlideTagMutationVariables>;\r\n\r\n/**\r\n * __useDeleteSlideTagMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteSlideTagMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteSlideTagMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteSlideTagMutation, { data, loading, error }] = useDeleteSlideTagMutation({\r\n * variables: {\r\n * delete_quiz_slide_id: // value for 'delete_quiz_slide_id'\r\n * delete_tag_id: // value for 'delete_tag_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteSlideTagMutation(baseOptions?: Apollo.MutationHookOptions<DeleteSlideTagMutation, DeleteSlideTagMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteSlideTagMutation, DeleteSlideTagMutationVariables>(DeleteSlideTagDocument, options);\r\n }\r\nexport type DeleteSlideTagMutationHookResult = ReturnType<typeof useDeleteSlideTagMutation>;\r\nexport type DeleteSlideTagMutationResult = Apollo.MutationResult<DeleteSlideTagMutation>;\r\nexport type DeleteSlideTagMutationOptions = Apollo.BaseMutationOptions<DeleteSlideTagMutation, DeleteSlideTagMutationVariables>;\r\nexport const DeleteQuizSlideDocument = gql`\r\n mutation deleteQuizSlide($quiz_slide_id: ID!) {\r\n deleteQuizSlide(quiz_slide_id: $quiz_slide_id)\r\n}\r\n `;\r\nexport type DeleteQuizSlideMutationFn = Apollo.MutationFunction<DeleteQuizSlideMutation, DeleteQuizSlideMutationVariables>;\r\n\r\n/**\r\n * __useDeleteQuizSlideMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteQuizSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteQuizSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteQuizSlideMutation, { data, loading, error }] = useDeleteQuizSlideMutation({\r\n * variables: {\r\n * quiz_slide_id: // value for 'quiz_slide_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteQuizSlideMutation(baseOptions?: Apollo.MutationHookOptions<DeleteQuizSlideMutation, DeleteQuizSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteQuizSlideMutation, DeleteQuizSlideMutationVariables>(DeleteQuizSlideDocument, options);\r\n }\r\nexport type DeleteQuizSlideMutationHookResult = ReturnType<typeof useDeleteQuizSlideMutation>;\r\nexport type DeleteQuizSlideMutationResult = Apollo.MutationResult<DeleteQuizSlideMutation>;\r\nexport type DeleteQuizSlideMutationOptions = Apollo.BaseMutationOptions<DeleteQuizSlideMutation, DeleteQuizSlideMutationVariables>;\r\nexport const DeleteQuizStatementDocument = gql`\r\n mutation deleteQuizStatement($quiz_statement_id: ID!) {\r\n deleteQuizStatement(quiz_statement_id: $quiz_statement_id)\r\n}\r\n `;\r\nexport type DeleteQuizStatementMutationFn = Apollo.MutationFunction<DeleteQuizStatementMutation, DeleteQuizStatementMutationVariables>;\r\n\r\n/**\r\n * __useDeleteQuizStatementMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteQuizStatementMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteQuizStatementMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteQuizStatementMutation, { data, loading, error }] = useDeleteQuizStatementMutation({\r\n * variables: {\r\n * quiz_statement_id: // value for 'quiz_statement_id'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteQuizStatementMutation(baseOptions?: Apollo.MutationHookOptions<DeleteQuizStatementMutation, DeleteQuizStatementMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteQuizStatementMutation, DeleteQuizStatementMutationVariables>(DeleteQuizStatementDocument, options);\r\n }\r\nexport type DeleteQuizStatementMutationHookResult = ReturnType<typeof useDeleteQuizStatementMutation>;\r\nexport type DeleteQuizStatementMutationResult = Apollo.MutationResult<DeleteQuizStatementMutation>;\r\nexport type DeleteQuizStatementMutationOptions = Apollo.BaseMutationOptions<DeleteQuizStatementMutation, DeleteQuizStatementMutationVariables>;\r\nexport const GetStudentsAdminDocument = gql`\r\n query getStudentsAdmin {\r\n getStudentsAdmin {\r\n student_id\r\n expiry_date\r\n student_email\r\n create_date\r\n school_name\r\n first_name\r\n last_name\r\n student_phone_number\r\n optional_value\r\n student_category_desc\r\n student_code\r\n language_choice\r\n school_id\r\n student_category\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentsAdminQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentsAdminQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentsAdminQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentsAdminQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentsAdminQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentsAdminQuery, GetStudentsAdminQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentsAdminQuery, GetStudentsAdminQueryVariables>(GetStudentsAdminDocument, options);\r\n }\r\nexport function useGetStudentsAdminLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentsAdminQuery, GetStudentsAdminQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentsAdminQuery, GetStudentsAdminQueryVariables>(GetStudentsAdminDocument, options);\r\n }\r\nexport type GetStudentsAdminQueryHookResult = ReturnType<typeof useGetStudentsAdminQuery>;\r\nexport type GetStudentsAdminLazyQueryHookResult = ReturnType<typeof useGetStudentsAdminLazyQuery>;\r\nexport type GetStudentsAdminQueryResult = Apollo.QueryResult<GetStudentsAdminQuery, GetStudentsAdminQueryVariables>;\r\nexport const ManageStudentDocument = gql`\r\n mutation manageStudent($student: New_Student!) {\r\n manageStudent(student: $student)\r\n}\r\n `;\r\nexport type ManageStudentMutationFn = Apollo.MutationFunction<ManageStudentMutation, ManageStudentMutationVariables>;\r\n\r\n/**\r\n * __useManageStudentMutation__\r\n *\r\n * To run a mutation, you first call `useManageStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageStudentMutation, { data, loading, error }] = useManageStudentMutation({\r\n * variables: {\r\n * student: // value for 'student'\r\n * },\r\n * });\r\n */\r\nexport function useManageStudentMutation(baseOptions?: Apollo.MutationHookOptions<ManageStudentMutation, ManageStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageStudentMutation, ManageStudentMutationVariables>(ManageStudentDocument, options);\r\n }\r\nexport type ManageStudentMutationHookResult = ReturnType<typeof useManageStudentMutation>;\r\nexport type ManageStudentMutationResult = Apollo.MutationResult<ManageStudentMutation>;\r\nexport type ManageStudentMutationOptions = Apollo.BaseMutationOptions<ManageStudentMutation, ManageStudentMutationVariables>;\r\nexport const GetCategoriesDocument = gql`\r\n query getCategories {\r\n getCategories {\r\n cat_id\r\n cat_name\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetCategoriesQuery__\r\n *\r\n * To run a query within a React component, call `useGetCategoriesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetCategoriesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetCategoriesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetCategoriesQuery(baseOptions?: Apollo.QueryHookOptions<GetCategoriesQuery, GetCategoriesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetCategoriesQuery, GetCategoriesQueryVariables>(GetCategoriesDocument, options);\r\n }\r\nexport function useGetCategoriesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetCategoriesQuery, GetCategoriesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetCategoriesQuery, GetCategoriesQueryVariables>(GetCategoriesDocument, options);\r\n }\r\nexport type GetCategoriesQueryHookResult = ReturnType<typeof useGetCategoriesQuery>;\r\nexport type GetCategoriesLazyQueryHookResult = ReturnType<typeof useGetCategoriesLazyQuery>;\r\nexport type GetCategoriesQueryResult = Apollo.QueryResult<GetCategoriesQuery, GetCategoriesQueryVariables>;\r\nexport const GetSchoolListDocument = gql`\r\n query getSchoolList {\r\n getSchoolList {\r\n school_id\r\n school_name\r\n zipcode\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSchoolListQuery__\r\n *\r\n * To run a query within a React component, call `useGetSchoolListQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSchoolListQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSchoolListQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetSchoolListQuery(baseOptions?: Apollo.QueryHookOptions<GetSchoolListQuery, GetSchoolListQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSchoolListQuery, GetSchoolListQueryVariables>(GetSchoolListDocument, options);\r\n }\r\nexport function useGetSchoolListLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSchoolListQuery, GetSchoolListQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSchoolListQuery, GetSchoolListQueryVariables>(GetSchoolListDocument, options);\r\n }\r\nexport type GetSchoolListQueryHookResult = ReturnType<typeof useGetSchoolListQuery>;\r\nexport type GetSchoolListLazyQueryHookResult = ReturnType<typeof useGetSchoolListLazyQuery>;\r\nexport type GetSchoolListQueryResult = Apollo.QueryResult<GetSchoolListQuery, GetSchoolListQueryVariables>;\r\nexport const GetAdminStudentLoginInfoDocument = gql`\r\n query getAdminStudentLoginInfo($student_id: ID!) {\r\n getAdminStudentLoginInfo(student_id: $student_id) {\r\n student_pin\r\n student_phone_number\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetAdminStudentLoginInfoQuery__\r\n *\r\n * To run a query within a React component, call `useGetAdminStudentLoginInfoQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetAdminStudentLoginInfoQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetAdminStudentLoginInfoQuery({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetAdminStudentLoginInfoQuery(baseOptions: Apollo.QueryHookOptions<GetAdminStudentLoginInfoQuery, GetAdminStudentLoginInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetAdminStudentLoginInfoQuery, GetAdminStudentLoginInfoQueryVariables>(GetAdminStudentLoginInfoDocument, options);\r\n }\r\nexport function useGetAdminStudentLoginInfoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetAdminStudentLoginInfoQuery, GetAdminStudentLoginInfoQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetAdminStudentLoginInfoQuery, GetAdminStudentLoginInfoQueryVariables>(GetAdminStudentLoginInfoDocument, options);\r\n }\r\nexport type GetAdminStudentLoginInfoQueryHookResult = ReturnType<typeof useGetAdminStudentLoginInfoQuery>;\r\nexport type GetAdminStudentLoginInfoLazyQueryHookResult = ReturnType<typeof useGetAdminStudentLoginInfoLazyQuery>;\r\nexport type GetAdminStudentLoginInfoQueryResult = Apollo.QueryResult<GetAdminStudentLoginInfoQuery, GetAdminStudentLoginInfoQueryVariables>;\r\nexport const GetStudentActivityDocument = gql`\r\n query getStudentActivity($student_id: ID!, $limit: Int, $offset: Int) {\r\n getStudentActivity(student_id: $student_id, limit: $limit, offset: $offset) {\r\n activity_id\r\n activity_type\r\n activity_title\r\n activity_result\r\n dash_quiz_id\r\n activity_date\r\n activity_time\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentActivityQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentActivityQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentActivityQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentActivityQuery({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * limit: // value for 'limit'\r\n * offset: // value for 'offset'\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentActivityQuery(baseOptions: Apollo.QueryHookOptions<GetStudentActivityQuery, GetStudentActivityQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentActivityQuery, GetStudentActivityQueryVariables>(GetStudentActivityDocument, options);\r\n }\r\nexport function useGetStudentActivityLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentActivityQuery, GetStudentActivityQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentActivityQuery, GetStudentActivityQueryVariables>(GetStudentActivityDocument, options);\r\n }\r\nexport type GetStudentActivityQueryHookResult = ReturnType<typeof useGetStudentActivityQuery>;\r\nexport type GetStudentActivityLazyQueryHookResult = ReturnType<typeof useGetStudentActivityLazyQuery>;\r\nexport type GetStudentActivityQueryResult = Apollo.QueryResult<GetStudentActivityQuery, GetStudentActivityQueryVariables>;\r\nexport const BlockSlideDocument = gql`\r\n mutation BlockSlide($slides: [ID]) {\r\n BlockSlide(slides: $slides)\r\n}\r\n `;\r\nexport type BlockSlideMutationFn = Apollo.MutationFunction<BlockSlideMutation, BlockSlideMutationVariables>;\r\n\r\n/**\r\n * __useBlockSlideMutation__\r\n *\r\n * To run a mutation, you first call `useBlockSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useBlockSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [blockSlideMutation, { data, loading, error }] = useBlockSlideMutation({\r\n * variables: {\r\n * slides: // value for 'slides'\r\n * },\r\n * });\r\n */\r\nexport function useBlockSlideMutation(baseOptions?: Apollo.MutationHookOptions<BlockSlideMutation, BlockSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<BlockSlideMutation, BlockSlideMutationVariables>(BlockSlideDocument, options);\r\n }\r\nexport type BlockSlideMutationHookResult = ReturnType<typeof useBlockSlideMutation>;\r\nexport type BlockSlideMutationResult = Apollo.MutationResult<BlockSlideMutation>;\r\nexport type BlockSlideMutationOptions = Apollo.BaseMutationOptions<BlockSlideMutation, BlockSlideMutationVariables>;\r\nexport const DeleteSlideBlockDocument = gql`\r\n mutation DeleteSlideBlock($slides: [ID]) {\r\n DeleteSlideBlock(slides: $slides)\r\n}\r\n `;\r\nexport type DeleteSlideBlockMutationFn = Apollo.MutationFunction<DeleteSlideBlockMutation, DeleteSlideBlockMutationVariables>;\r\n\r\n/**\r\n * __useDeleteSlideBlockMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteSlideBlockMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteSlideBlockMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteSlideBlockMutation, { data, loading, error }] = useDeleteSlideBlockMutation({\r\n * variables: {\r\n * slides: // value for 'slides'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteSlideBlockMutation(baseOptions?: Apollo.MutationHookOptions<DeleteSlideBlockMutation, DeleteSlideBlockMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteSlideBlockMutation, DeleteSlideBlockMutationVariables>(DeleteSlideBlockDocument, options);\r\n }\r\nexport type DeleteSlideBlockMutationHookResult = ReturnType<typeof useDeleteSlideBlockMutation>;\r\nexport type DeleteSlideBlockMutationResult = Apollo.MutationResult<DeleteSlideBlockMutation>;\r\nexport type DeleteSlideBlockMutationOptions = Apollo.BaseMutationOptions<DeleteSlideBlockMutation, DeleteSlideBlockMutationVariables>;\r\nexport const GetBlockedSlidesDocument = gql`\r\n query getBlockedSlides {\r\n getBlockedSlides {\r\n quiz_slide_id\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetBlockedSlidesQuery__\r\n *\r\n * To run a query within a React component, call `useGetBlockedSlidesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetBlockedSlidesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetBlockedSlidesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetBlockedSlidesQuery(baseOptions?: Apollo.QueryHookOptions<GetBlockedSlidesQuery, GetBlockedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetBlockedSlidesQuery, GetBlockedSlidesQueryVariables>(GetBlockedSlidesDocument, options);\r\n }\r\nexport function useGetBlockedSlidesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetBlockedSlidesQuery, GetBlockedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetBlockedSlidesQuery, GetBlockedSlidesQueryVariables>(GetBlockedSlidesDocument, options);\r\n }\r\nexport type GetBlockedSlidesQueryHookResult = ReturnType<typeof useGetBlockedSlidesQuery>;\r\nexport type GetBlockedSlidesLazyQueryHookResult = ReturnType<typeof useGetBlockedSlidesLazyQuery>;\r\nexport type GetBlockedSlidesQueryResult = Apollo.QueryResult<GetBlockedSlidesQuery, GetBlockedSlidesQueryVariables>;\r\nexport const GetMarkedSlidesDocument = gql`\r\n query getMarkedSlides($student_id: ID!) {\r\n getMarkedSlides(student_id: $student_id) {\r\n progress_id\r\n online_quiz_id\r\n original_slide_id\r\n explanation_location\r\n intro_sound_text\r\n media_location\r\n media_location_enc\r\n media_type_id\r\n slide_statements {\r\n original_statement_id\r\n statement_answer_id\r\n quiz_statement_no\r\n elaboration_Text\r\n sound_text\r\n slide_pass_status\r\n statement_progress_answer\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetMarkedSlidesQuery__\r\n *\r\n * To run a query within a React component, call `useGetMarkedSlidesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetMarkedSlidesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetMarkedSlidesQuery({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetMarkedSlidesQuery(baseOptions: Apollo.QueryHookOptions<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>(GetMarkedSlidesDocument, options);\r\n }\r\nexport function useGetMarkedSlidesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>(GetMarkedSlidesDocument, options);\r\n }\r\nexport type GetMarkedSlidesQueryHookResult = ReturnType<typeof useGetMarkedSlidesQuery>;\r\nexport type GetMarkedSlidesLazyQueryHookResult = ReturnType<typeof useGetMarkedSlidesLazyQuery>;\r\nexport type GetMarkedSlidesQueryResult = Apollo.QueryResult<GetMarkedSlidesQuery, GetMarkedSlidesQueryVariables>;\r\nexport const UnmarkSlideDocument = gql`\r\n mutation UnmarkSlide($unmarked_slides: [student_mark]) {\r\n UnmarkSlide(unmarked_slides: $unmarked_slides)\r\n}\r\n `;\r\nexport type UnmarkSlideMutationFn = Apollo.MutationFunction<UnmarkSlideMutation, UnmarkSlideMutationVariables>;\r\n\r\n/**\r\n * __useUnmarkSlideMutation__\r\n *\r\n * To run a mutation, you first call `useUnmarkSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useUnmarkSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [unmarkSlideMutation, { data, loading, error }] = useUnmarkSlideMutation({\r\n * variables: {\r\n * unmarked_slides: // value for 'unmarked_slides'\r\n * },\r\n * });\r\n */\r\nexport function useUnmarkSlideMutation(baseOptions?: Apollo.MutationHookOptions<UnmarkSlideMutation, UnmarkSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<UnmarkSlideMutation, UnmarkSlideMutationVariables>(UnmarkSlideDocument, options);\r\n }\r\nexport type UnmarkSlideMutationHookResult = ReturnType<typeof useUnmarkSlideMutation>;\r\nexport type UnmarkSlideMutationResult = Apollo.MutationResult<UnmarkSlideMutation>;\r\nexport type UnmarkSlideMutationOptions = Apollo.BaseMutationOptions<UnmarkSlideMutation, UnmarkSlideMutationVariables>;\r\nexport const UnmarkSlideTeacherDocument = gql`\r\n mutation UnmarkSlideTeacher($unmarked_original_slides: [student_mark_teacher]) {\r\n UnmarkSlideTeacher(unmarked_original_slides: $unmarked_original_slides)\r\n}\r\n `;\r\nexport type UnmarkSlideTeacherMutationFn = Apollo.MutationFunction<UnmarkSlideTeacherMutation, UnmarkSlideTeacherMutationVariables>;\r\n\r\n/**\r\n * __useUnmarkSlideTeacherMutation__\r\n *\r\n * To run a mutation, you first call `useUnmarkSlideTeacherMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useUnmarkSlideTeacherMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [unmarkSlideTeacherMutation, { data, loading, error }] = useUnmarkSlideTeacherMutation({\r\n * variables: {\r\n * unmarked_original_slides: // value for 'unmarked_original_slides'\r\n * },\r\n * });\r\n */\r\nexport function useUnmarkSlideTeacherMutation(baseOptions?: Apollo.MutationHookOptions<UnmarkSlideTeacherMutation, UnmarkSlideTeacherMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<UnmarkSlideTeacherMutation, UnmarkSlideTeacherMutationVariables>(UnmarkSlideTeacherDocument, options);\r\n }\r\nexport type UnmarkSlideTeacherMutationHookResult = ReturnType<typeof useUnmarkSlideTeacherMutation>;\r\nexport type UnmarkSlideTeacherMutationResult = Apollo.MutationResult<UnmarkSlideTeacherMutation>;\r\nexport type UnmarkSlideTeacherMutationOptions = Apollo.BaseMutationOptions<UnmarkSlideTeacherMutation, UnmarkSlideTeacherMutationVariables>;\r\nexport const GetMarkedSlidesCountDocument = gql`\r\n query getMarkedSlidesCount($student_ids: String!) {\r\n getMarkedSlidesCount(student_ids: $student_ids) {\r\n progress_id\r\n online_quiz_id\r\n original_slide_id\r\n explanation_location\r\n intro_sound_text\r\n media_location\r\n media_location_enc\r\n media_type_id\r\n mark_count\r\n slide_statements {\r\n original_statement_id\r\n statement_answer_id\r\n quiz_statement_no\r\n elaboration_Text\r\n sound_text\r\n slide_pass_status\r\n statement_progress_answer\r\n }\r\n tags {\r\n tag_id\r\n tag_name\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetMarkedSlidesCountQuery__\r\n *\r\n * To run a query within a React component, call `useGetMarkedSlidesCountQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetMarkedSlidesCountQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetMarkedSlidesCountQuery({\r\n * variables: {\r\n * student_ids: // value for 'student_ids'\r\n * },\r\n * });\r\n */\r\nexport function useGetMarkedSlidesCountQuery(baseOptions: Apollo.QueryHookOptions<GetMarkedSlidesCountQuery, GetMarkedSlidesCountQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetMarkedSlidesCountQuery, GetMarkedSlidesCountQueryVariables>(GetMarkedSlidesCountDocument, options);\r\n }\r\nexport function useGetMarkedSlidesCountLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetMarkedSlidesCountQuery, GetMarkedSlidesCountQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetMarkedSlidesCountQuery, GetMarkedSlidesCountQueryVariables>(GetMarkedSlidesCountDocument, options);\r\n }\r\nexport type GetMarkedSlidesCountQueryHookResult = ReturnType<typeof useGetMarkedSlidesCountQuery>;\r\nexport type GetMarkedSlidesCountLazyQueryHookResult = ReturnType<typeof useGetMarkedSlidesCountLazyQuery>;\r\nexport type GetMarkedSlidesCountQueryResult = Apollo.QueryResult<GetMarkedSlidesCountQuery, GetMarkedSlidesCountQueryVariables>;\r\nexport const GetSubjectLessonsDocument = gql`\r\n query getSubjectLessons {\r\n getSubjectLessons {\r\n lesson_id\r\n lesson_name\r\n lesson_category\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSubjectLessonsQuery__\r\n *\r\n * To run a query within a React component, call `useGetSubjectLessonsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSubjectLessonsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSubjectLessonsQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetSubjectLessonsQuery(baseOptions?: Apollo.QueryHookOptions<GetSubjectLessonsQuery, GetSubjectLessonsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSubjectLessonsQuery, GetSubjectLessonsQueryVariables>(GetSubjectLessonsDocument, options);\r\n }\r\nexport function useGetSubjectLessonsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSubjectLessonsQuery, GetSubjectLessonsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSubjectLessonsQuery, GetSubjectLessonsQueryVariables>(GetSubjectLessonsDocument, options);\r\n }\r\nexport type GetSubjectLessonsQueryHookResult = ReturnType<typeof useGetSubjectLessonsQuery>;\r\nexport type GetSubjectLessonsLazyQueryHookResult = ReturnType<typeof useGetSubjectLessonsLazyQuery>;\r\nexport type GetSubjectLessonsQueryResult = Apollo.QueryResult<GetSubjectLessonsQuery, GetSubjectLessonsQueryVariables>;\r\nexport const CombineLessonDocument = gql`\r\n mutation combineLesson($combined_lesson: Combined_lesson) {\r\n combineLesson(combined_lesson: $combined_lesson)\r\n}\r\n `;\r\nexport type CombineLessonMutationFn = Apollo.MutationFunction<CombineLessonMutation, CombineLessonMutationVariables>;\r\n\r\n/**\r\n * __useCombineLessonMutation__\r\n *\r\n * To run a mutation, you first call `useCombineLessonMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useCombineLessonMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [combineLessonMutation, { data, loading, error }] = useCombineLessonMutation({\r\n * variables: {\r\n * combined_lesson: // value for 'combined_lesson'\r\n * },\r\n * });\r\n */\r\nexport function useCombineLessonMutation(baseOptions?: Apollo.MutationHookOptions<CombineLessonMutation, CombineLessonMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<CombineLessonMutation, CombineLessonMutationVariables>(CombineLessonDocument, options);\r\n }\r\nexport type CombineLessonMutationHookResult = ReturnType<typeof useCombineLessonMutation>;\r\nexport type CombineLessonMutationResult = Apollo.MutationResult<CombineLessonMutation>;\r\nexport type CombineLessonMutationOptions = Apollo.BaseMutationOptions<CombineLessonMutation, CombineLessonMutationVariables>;\r\nexport const PublishLessonDocument = gql`\r\n mutation publishLesson($lesson_id: ID, $lesson_published: Boolean) {\r\n publishLesson(lesson_id: $lesson_id, lesson_published: $lesson_published)\r\n}\r\n `;\r\nexport type PublishLessonMutationFn = Apollo.MutationFunction<PublishLessonMutation, PublishLessonMutationVariables>;\r\n\r\n/**\r\n * __usePublishLessonMutation__\r\n *\r\n * To run a mutation, you first call `usePublishLessonMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `usePublishLessonMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [publishLessonMutation, { data, loading, error }] = usePublishLessonMutation({\r\n * variables: {\r\n * lesson_id: // value for 'lesson_id'\r\n * lesson_published: // value for 'lesson_published'\r\n * },\r\n * });\r\n */\r\nexport function usePublishLessonMutation(baseOptions?: Apollo.MutationHookOptions<PublishLessonMutation, PublishLessonMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<PublishLessonMutation, PublishLessonMutationVariables>(PublishLessonDocument, options);\r\n }\r\nexport type PublishLessonMutationHookResult = ReturnType<typeof usePublishLessonMutation>;\r\nexport type PublishLessonMutationResult = Apollo.MutationResult<PublishLessonMutation>;\r\nexport type PublishLessonMutationOptions = Apollo.BaseMutationOptions<PublishLessonMutation, PublishLessonMutationVariables>;\r\nexport const GetStudentAchTypesDocument = gql`\r\n query getStudentAchTypes($student_id: ID!) {\r\n getStudentAchTypes(student_id: $student_id) {\r\n achievement_name\r\n achievement_type_desc\r\n achievement_dash {\r\n achievement_name\r\n dash_status\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentAchTypesQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentAchTypesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentAchTypesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentAchTypesQuery({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentAchTypesQuery(baseOptions: Apollo.QueryHookOptions<GetStudentAchTypesQuery, GetStudentAchTypesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentAchTypesQuery, GetStudentAchTypesQueryVariables>(GetStudentAchTypesDocument, options);\r\n }\r\nexport function useGetStudentAchTypesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentAchTypesQuery, GetStudentAchTypesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentAchTypesQuery, GetStudentAchTypesQueryVariables>(GetStudentAchTypesDocument, options);\r\n }\r\nexport type GetStudentAchTypesQueryHookResult = ReturnType<typeof useGetStudentAchTypesQuery>;\r\nexport type GetStudentAchTypesLazyQueryHookResult = ReturnType<typeof useGetStudentAchTypesLazyQuery>;\r\nexport type GetStudentAchTypesQueryResult = Apollo.QueryResult<GetStudentAchTypesQuery, GetStudentAchTypesQueryVariables>;\r\nexport const GetStudentsSchoolDeletedDocument = gql`\r\n query getStudentsSchoolDeleted {\r\n getStudentsSchoolDeleted {\r\n student_id\r\n correct_quizzes\r\n student_progress\r\n student_name\r\n student_email\r\n create_date\r\n student_class_start\r\n student_category\r\n student_phone_number\r\n access_code\r\n expiry_date\r\n has_marks\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetStudentsSchoolDeletedQuery__\r\n *\r\n * To run a query within a React component, call `useGetStudentsSchoolDeletedQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetStudentsSchoolDeletedQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetStudentsSchoolDeletedQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetStudentsSchoolDeletedQuery(baseOptions?: Apollo.QueryHookOptions<GetStudentsSchoolDeletedQuery, GetStudentsSchoolDeletedQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetStudentsSchoolDeletedQuery, GetStudentsSchoolDeletedQueryVariables>(GetStudentsSchoolDeletedDocument, options);\r\n }\r\nexport function useGetStudentsSchoolDeletedLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetStudentsSchoolDeletedQuery, GetStudentsSchoolDeletedQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetStudentsSchoolDeletedQuery, GetStudentsSchoolDeletedQueryVariables>(GetStudentsSchoolDeletedDocument, options);\r\n }\r\nexport type GetStudentsSchoolDeletedQueryHookResult = ReturnType<typeof useGetStudentsSchoolDeletedQuery>;\r\nexport type GetStudentsSchoolDeletedLazyQueryHookResult = ReturnType<typeof useGetStudentsSchoolDeletedLazyQuery>;\r\nexport type GetStudentsSchoolDeletedQueryResult = Apollo.QueryResult<GetStudentsSchoolDeletedQuery, GetStudentsSchoolDeletedQueryVariables>;\r\nexport const UnlinkStudentDocument = gql`\r\n mutation UnlinkStudent($student_id: ID!) {\r\n UnlinkStudent(student_id: $student_id)\r\n}\r\n `;\r\nexport type UnlinkStudentMutationFn = Apollo.MutationFunction<UnlinkStudentMutation, UnlinkStudentMutationVariables>;\r\n\r\n/**\r\n * __useUnlinkStudentMutation__\r\n *\r\n * To run a mutation, you first call `useUnlinkStudentMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useUnlinkStudentMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [unlinkStudentMutation, { data, loading, error }] = useUnlinkStudentMutation({\r\n * variables: {\r\n * student_id: // value for 'student_id'\r\n * },\r\n * });\r\n */\r\nexport function useUnlinkStudentMutation(baseOptions?: Apollo.MutationHookOptions<UnlinkStudentMutation, UnlinkStudentMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<UnlinkStudentMutation, UnlinkStudentMutationVariables>(UnlinkStudentDocument, options);\r\n }\r\nexport type UnlinkStudentMutationHookResult = ReturnType<typeof useUnlinkStudentMutation>;\r\nexport type UnlinkStudentMutationResult = Apollo.MutationResult<UnlinkStudentMutation>;\r\nexport type UnlinkStudentMutationOptions = Apollo.BaseMutationOptions<UnlinkStudentMutation, UnlinkStudentMutationVariables>;\r\nexport const UnlinkSlideDocument = gql`\r\n mutation unlinkSlide($lesson_slide_id: ID!, $tag_id: ID!) {\r\n unlinkSlide(lesson_slide_id: $lesson_slide_id, tag_id: $tag_id)\r\n}\r\n `;\r\nexport type UnlinkSlideMutationFn = Apollo.MutationFunction<UnlinkSlideMutation, UnlinkSlideMutationVariables>;\r\n\r\n/**\r\n * __useUnlinkSlideMutation__\r\n *\r\n * To run a mutation, you first call `useUnlinkSlideMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useUnlinkSlideMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [unlinkSlideMutation, { data, loading, error }] = useUnlinkSlideMutation({\r\n * variables: {\r\n * lesson_slide_id: // value for 'lesson_slide_id'\r\n * tag_id: // value for 'tag_id'\r\n * },\r\n * });\r\n */\r\nexport function useUnlinkSlideMutation(baseOptions?: Apollo.MutationHookOptions<UnlinkSlideMutation, UnlinkSlideMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<UnlinkSlideMutation, UnlinkSlideMutationVariables>(UnlinkSlideDocument, options);\r\n }\r\nexport type UnlinkSlideMutationHookResult = ReturnType<typeof useUnlinkSlideMutation>;\r\nexport type UnlinkSlideMutationResult = Apollo.MutationResult<UnlinkSlideMutation>;\r\nexport type UnlinkSlideMutationOptions = Apollo.BaseMutationOptions<UnlinkSlideMutation, UnlinkSlideMutationVariables>;\r\nexport const CloneLessonDocument = gql`\r\n mutation cloneLesson($lesson_id: ID!) {\r\n cloneLesson(lesson_id: $lesson_id)\r\n}\r\n `;\r\nexport type CloneLessonMutationFn = Apollo.MutationFunction<CloneLessonMutation, CloneLessonMutationVariables>;\r\n\r\n/**\r\n * __useCloneLessonMutation__\r\n *\r\n * To run a mutation, you first call `useCloneLessonMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useCloneLessonMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [cloneLessonMutation, { data, loading, error }] = useCloneLessonMutation({\r\n * variables: {\r\n * lesson_id: // value for 'lesson_id'\r\n * },\r\n * });\r\n */\r\nexport function useCloneLessonMutation(baseOptions?: Apollo.MutationHookOptions<CloneLessonMutation, CloneLessonMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<CloneLessonMutation, CloneLessonMutationVariables>(CloneLessonDocument, options);\r\n }\r\nexport type CloneLessonMutationHookResult = ReturnType<typeof useCloneLessonMutation>;\r\nexport type CloneLessonMutationResult = Apollo.MutationResult<CloneLessonMutation>;\r\nexport type CloneLessonMutationOptions = Apollo.BaseMutationOptions<CloneLessonMutation, CloneLessonMutationVariables>;\r\nexport const GetClassQuizResultDocument = gql`\r\n query getClassQuizResult($class_quiz_id: ID!) {\r\n getClassQuizResult(class_quiz_id: $class_quiz_id) {\r\n slide_id\r\n slide_pass_percentage\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetClassQuizResultQuery__\r\n *\r\n * To run a query within a React component, call `useGetClassQuizResultQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetClassQuizResultQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetClassQuizResultQuery({\r\n * variables: {\r\n * class_quiz_id: // value for 'class_quiz_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetClassQuizResultQuery(baseOptions: Apollo.QueryHookOptions<GetClassQuizResultQuery, GetClassQuizResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetClassQuizResultQuery, GetClassQuizResultQueryVariables>(GetClassQuizResultDocument, options);\r\n }\r\nexport function useGetClassQuizResultLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetClassQuizResultQuery, GetClassQuizResultQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetClassQuizResultQuery, GetClassQuizResultQueryVariables>(GetClassQuizResultDocument, options);\r\n }\r\nexport type GetClassQuizResultQueryHookResult = ReturnType<typeof useGetClassQuizResultQuery>;\r\nexport type GetClassQuizResultLazyQueryHookResult = ReturnType<typeof useGetClassQuizResultLazyQuery>;\r\nexport type GetClassQuizResultQueryResult = Apollo.QueryResult<GetClassQuizResultQuery, GetClassQuizResultQueryVariables>;\r\nexport const GetAllSchoolsDocument = gql`\r\n query getAllSchools($is_active: Int!) {\r\n getAllSchools(is_active: $is_active) {\r\n school_id\r\n school_name\r\n contact_name\r\n email_id\r\n optional_note\r\n language_choice\r\n zipcode\r\n city\r\n password\r\n vat_number\r\n skip_bill_check\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetAllSchoolsQuery__\r\n *\r\n * To run a query within a React component, call `useGetAllSchoolsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetAllSchoolsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetAllSchoolsQuery({\r\n * variables: {\r\n * is_active: // value for 'is_active'\r\n * },\r\n * });\r\n */\r\nexport function useGetAllSchoolsQuery(baseOptions: Apollo.QueryHookOptions<GetAllSchoolsQuery, GetAllSchoolsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetAllSchoolsQuery, GetAllSchoolsQueryVariables>(GetAllSchoolsDocument, options);\r\n }\r\nexport function useGetAllSchoolsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetAllSchoolsQuery, GetAllSchoolsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetAllSchoolsQuery, GetAllSchoolsQueryVariables>(GetAllSchoolsDocument, options);\r\n }\r\nexport type GetAllSchoolsQueryHookResult = ReturnType<typeof useGetAllSchoolsQuery>;\r\nexport type GetAllSchoolsLazyQueryHookResult = ReturnType<typeof useGetAllSchoolsLazyQuery>;\r\nexport type GetAllSchoolsQueryResult = Apollo.QueryResult<GetAllSchoolsQuery, GetAllSchoolsQueryVariables>;\r\nexport const GetNotificationStudentsCountDocument = gql`\r\n query getNotificationStudentsCount($school_id: [Int], $language_id: Int!) {\r\n getNotificationStudentsCount(school_id: $school_id, language_id: $language_id)\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetNotificationStudentsCountQuery__\r\n *\r\n * To run a query within a React component, call `useGetNotificationStudentsCountQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetNotificationStudentsCountQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetNotificationStudentsCountQuery({\r\n * variables: {\r\n * school_id: // value for 'school_id'\r\n * language_id: // value for 'language_id'\r\n * },\r\n * });\r\n */\r\nexport function useGetNotificationStudentsCountQuery(baseOptions?: Apollo.QueryHookOptions<GetNotificationStudentsCountQuery, GetNotificationStudentsCountQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetNotificationStudentsCountQuery, GetNotificationStudentsCountQueryVariables>(GetNotificationStudentsCountDocument, options);\r\n }\r\nexport function useGetNotificationStudentsCountLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetNotificationStudentsCountQuery, GetNotificationStudentsCountQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetNotificationStudentsCountQuery, GetNotificationStudentsCountQueryVariables>(GetNotificationStudentsCountDocument, options);\r\n }\r\nexport type GetNotificationStudentsCountQueryHookResult = ReturnType<typeof useGetNotificationStudentsCountQuery>;\r\nexport type GetNotificationStudentsCountLazyQueryHookResult = ReturnType<typeof useGetNotificationStudentsCountLazyQuery>;\r\nexport type GetNotificationStudentsCountQueryResult = Apollo.QueryResult<GetNotificationStudentsCountQuery, GetNotificationStudentsCountQueryVariables>;\r\nexport const AddStudentsNotificationDocument = gql`\r\n mutation addStudentsNotification($school_id: [Int], $language_id: Int!, $expiry_date: DateTime, $message: String!) {\r\n addStudentsNotification(school_id: $school_id, language_id: $language_id, expiry_date: $expiry_date, message: $message)\r\n}\r\n `;\r\nexport type AddStudentsNotificationMutationFn = Apollo.MutationFunction<AddStudentsNotificationMutation, AddStudentsNotificationVariables>;\r\n\r\n/**\r\n * __useAddStudentsNotificationMutation__\r\n *\r\n * To run a mutation, you first call `useAddStudentsNotificationMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useAddStudentsNotificationMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [addStudentsNotificationMutation, { data, loading, error }] = useAddStudentsNotificationMutation({\r\n * variables: {\r\n * school_id: // value for 'slides'\r\n * language_id: // value for 'language_id'\r\n * expiry_date: // value for 'expiry_date'\r\n * message: // value for 'message'\r\n * },\r\n * });\r\n */\r\nexport function useAddStudentsNotificationMutation(baseOptions?: Apollo.MutationHookOptions<AddStudentsNotificationMutation, AddStudentsNotificationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<AddStudentsNotificationMutation, AddStudentsNotificationVariables>(AddStudentsNotificationDocument, options);\r\n }\r\nexport type AddStudentsNotificationMutationHookResult = ReturnType<typeof useAddStudentsNotificationMutation>;\r\nexport type AddStudentsNotificationMutationResult = Apollo.MutationResult<AddStudentsNotificationMutation>;\r\nexport type AddStudentsNotificationMutationOptions = Apollo.BaseMutationOptions<AddStudentsNotificationMutation, AddStudentsNotificationVariables>;\r\nexport const SetSchoolStatusDocument = gql`\r\n mutation setSchoolStatus($school_id: Int!, $school_status: Int!) {\r\n setSchoolStatus(school_id: $school_id, school_status: $school_status)\r\n}\r\n `;\r\nexport type SetSchoolStatusMutationFn = Apollo.MutationFunction<SetSchoolStatusMutation, SetSchoolStatusMutationVariables>;\r\n\r\n/**\r\n * __useSetSchoolStatusMutation__\r\n *\r\n * To run a mutation, you first call `useSetSchoolStatusMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useSetSchoolStatusMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [setSchoolStatusMutation, { data, loading, error }] = useSetSchoolStatusMutation({\r\n * variables: {\r\n * school_id: // value for 'school_id'\r\n * school_status: // value for 'school_status'\r\n * },\r\n * });\r\n */\r\nexport function useSetSchoolStatusMutation(baseOptions?: Apollo.MutationHookOptions<SetSchoolStatusMutation, SetSchoolStatusMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<SetSchoolStatusMutation, SetSchoolStatusMutationVariables>(SetSchoolStatusDocument, options);\r\n }\r\nexport type SetSchoolStatusMutationHookResult = ReturnType<typeof useSetSchoolStatusMutation>;\r\nexport type SetSchoolStatusMutationResult = Apollo.MutationResult<SetSchoolStatusMutation>;\r\nexport type SetSchoolStatusMutationOptions = Apollo.BaseMutationOptions<SetSchoolStatusMutation, SetSchoolStatusMutationVariables>;\r\nexport const ManageSchoolDocument = gql`\r\n mutation manageSchool($school: SchoolInput!) {\r\n manageSchool(school: $school)\r\n}\r\n `;\r\nexport type ManageSchoolMutationFn = Apollo.MutationFunction<ManageSchoolMutation, ManageSchoolMutationVariables>;\r\n\r\n/**\r\n * __useManageSchoolMutation__\r\n *\r\n * To run a mutation, you first call `useManageSchoolMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageSchoolMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageSchoolMutation, { data, loading, error }] = useManageSchoolMutation({\r\n * variables: {\r\n * school: // value for 'school'\r\n * },\r\n * });\r\n */\r\nexport function useManageSchoolMutation(baseOptions?: Apollo.MutationHookOptions<ManageSchoolMutation, ManageSchoolMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageSchoolMutation, ManageSchoolMutationVariables>(ManageSchoolDocument, options);\r\n }\r\nexport type ManageSchoolMutationHookResult = ReturnType<typeof useManageSchoolMutation>;\r\nexport type ManageSchoolMutationResult = Apollo.MutationResult<ManageSchoolMutation>;\r\nexport type ManageSchoolMutationOptions = Apollo.BaseMutationOptions<ManageSchoolMutation, ManageSchoolMutationVariables>;\r\nexport const GetConfigCountByIdDocument = gql`\r\n query getConfigCountByID($configId: Int!) {\r\n getConfigCountByID(config_id: $configId)\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetConfigCountByIdQuery__\r\n *\r\n * To run a query within a React component, call `useGetConfigCountByIdQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetConfigCountByIdQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetConfigCountByIdQuery({\r\n * variables: {\r\n * configId: // value for 'configId'\r\n * },\r\n * });\r\n */\r\nexport function useGetConfigCountByIdQuery(baseOptions: Apollo.QueryHookOptions<GetConfigCountByIdQuery, GetConfigCountByIdQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetConfigCountByIdQuery, GetConfigCountByIdQueryVariables>(GetConfigCountByIdDocument, options);\r\n }\r\nexport function useGetConfigCountByIdLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetConfigCountByIdQuery, GetConfigCountByIdQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetConfigCountByIdQuery, GetConfigCountByIdQueryVariables>(GetConfigCountByIdDocument, options);\r\n }\r\nexport type GetConfigCountByIdQueryHookResult = ReturnType<typeof useGetConfigCountByIdQuery>;\r\nexport type GetConfigCountByIdLazyQueryHookResult = ReturnType<typeof useGetConfigCountByIdLazyQuery>;\r\nexport type GetConfigCountByIdQueryResult = Apollo.QueryResult<GetConfigCountByIdQuery, GetConfigCountByIdQueryVariables>;\r\nexport const CreateSchoolCategoryDocument = gql`\r\n mutation CreateSchoolCategory($schoolId: Int!, $categoryId: Int!) {\r\n createSchoolCategory(school_id: $schoolId, category_id: $categoryId)\r\n}\r\n `;\r\nexport type CreateSchoolCategoryMutationFn = Apollo.MutationFunction<CreateSchoolCategoryMutation, CreateSchoolCategoryMutationVariables>;\r\n\r\n/**\r\n * __useCreateSchoolCategoryMutation__\r\n *\r\n * To run a mutation, you first call `useCreateSchoolCategoryMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useCreateSchoolCategoryMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [createSchoolCategoryMutation, { data, loading, error }] = useCreateSchoolCategoryMutation({\r\n * variables: {\r\n * schoolId: // value for 'schoolId'\r\n * categoryId: // value for 'categoryId'\r\n * },\r\n * });\r\n */\r\nexport function useCreateSchoolCategoryMutation(baseOptions?: Apollo.MutationHookOptions<CreateSchoolCategoryMutation, CreateSchoolCategoryMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<CreateSchoolCategoryMutation, CreateSchoolCategoryMutationVariables>(CreateSchoolCategoryDocument, options);\r\n }\r\nexport type CreateSchoolCategoryMutationHookResult = ReturnType<typeof useCreateSchoolCategoryMutation>;\r\nexport type CreateSchoolCategoryMutationResult = Apollo.MutationResult<CreateSchoolCategoryMutation>;\r\nexport type CreateSchoolCategoryMutationOptions = Apollo.BaseMutationOptions<CreateSchoolCategoryMutation, CreateSchoolCategoryMutationVariables>;\r\nexport const GetSchoolCategoryDocument = gql`\r\n query GetSchoolCategory($schoolId: Int) {\r\n getSchoolCategory(school_id: $schoolId) {\r\n cat_id\r\n cat_name\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSchoolCategoryQuery__\r\n *\r\n * To run a query within a React component, call `useGetSchoolCategoryQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSchoolCategoryQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSchoolCategoryQuery({\r\n * variables: {\r\n * schoolId: // value for 'schoolId'\r\n * },\r\n * });\r\n */\r\nexport function useGetSchoolCategoryQuery(baseOptions?: Apollo.QueryHookOptions<GetSchoolCategoryQuery, GetSchoolCategoryQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSchoolCategoryQuery, GetSchoolCategoryQueryVariables>(GetSchoolCategoryDocument, options);\r\n }\r\nexport function useGetSchoolCategoryLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSchoolCategoryQuery, GetSchoolCategoryQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSchoolCategoryQuery, GetSchoolCategoryQueryVariables>(GetSchoolCategoryDocument, options);\r\n }\r\nexport type GetSchoolCategoryQueryHookResult = ReturnType<typeof useGetSchoolCategoryQuery>;\r\nexport type GetSchoolCategoryLazyQueryHookResult = ReturnType<typeof useGetSchoolCategoryLazyQuery>;\r\nexport type GetSchoolCategoryQueryResult = Apollo.QueryResult<GetSchoolCategoryQuery, GetSchoolCategoryQueryVariables>;\r\nexport const GetSchoolSubusersAdminDocument = gql`\r\n query GetSchoolSubusersAdmin($schoolId: Int!) {\r\n getSchoolSubusersAdmin(school_id: $schoolId) {\r\n subuser_id\r\n teacher_name\r\n email_id\r\n school_id\r\n is_department\r\n department_name\r\n department_zipcode\r\n skip_bill_check\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetSchoolSubusersAdminQuery__\r\n *\r\n * To run a query within a React component, call `useGetSchoolSubusersAdminQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetSchoolSubusersAdminQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetSchoolSubusersAdminQuery({\r\n * variables: {\r\n * schoolId: // value for 'schoolId'\r\n * },\r\n * });\r\n */\r\nexport function useGetSchoolSubusersAdminQuery(baseOptions: Apollo.QueryHookOptions<GetSchoolSubusersAdminQuery, GetSchoolSubusersAdminQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetSchoolSubusersAdminQuery, GetSchoolSubusersAdminQueryVariables>(GetSchoolSubusersAdminDocument, options);\r\n }\r\nexport function useGetSchoolSubusersAdminLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetSchoolSubusersAdminQuery, GetSchoolSubusersAdminQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetSchoolSubusersAdminQuery, GetSchoolSubusersAdminQueryVariables>(GetSchoolSubusersAdminDocument, options);\r\n }\r\nexport type GetSchoolSubusersAdminQueryHookResult = ReturnType<typeof useGetSchoolSubusersAdminQuery>;\r\nexport type GetSchoolSubusersAdminLazyQueryHookResult = ReturnType<typeof useGetSchoolSubusersAdminLazyQuery>;\r\nexport type GetSchoolSubusersAdminQueryResult = Apollo.QueryResult<GetSchoolSubusersAdminQuery, GetSchoolSubusersAdminQueryVariables>;\r\nexport const ManageSubuserDocument = gql`\r\n mutation ManageSubuser($subuser: New_subuser!) {\r\n manageSubuser(subuser: $subuser)\r\n}\r\n `;\r\nexport type ManageSubuserMutationFn = Apollo.MutationFunction<ManageSubuserMutation, ManageSubuserMutationVariables>;\r\n\r\n/**\r\n * __useManageSubuserMutation__\r\n *\r\n * To run a mutation, you first call `useManageSubuserMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useManageSubuserMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [manageSubuserMutation, { data, loading, error }] = useManageSubuserMutation({\r\n * variables: {\r\n * subuser: // value for 'subuser'\r\n * },\r\n * });\r\n */\r\nexport function useManageSubuserMutation(baseOptions?: Apollo.MutationHookOptions<ManageSubuserMutation, ManageSubuserMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<ManageSubuserMutation, ManageSubuserMutationVariables>(ManageSubuserDocument, options);\r\n }\r\nexport type ManageSubuserMutationHookResult = ReturnType<typeof useManageSubuserMutation>;\r\nexport type ManageSubuserMutationResult = Apollo.MutationResult<ManageSubuserMutation>;\r\nexport type ManageSubuserMutationOptions = Apollo.BaseMutationOptions<ManageSubuserMutation, ManageSubuserMutationVariables>;\r\nexport const DeleteSubuserDocument = gql`\r\n mutation DeleteSubuser($subuserId: ID!) {\r\n deleteSubuser(subuser_id: $subuserId)\r\n}\r\n `;\r\nexport type DeleteSubuserMutationFn = Apollo.MutationFunction<DeleteSubuserMutation, DeleteSubuserMutationVariables>;\r\n\r\n/**\r\n * __useDeleteSubuserMutation__\r\n *\r\n * To run a mutation, you first call `useDeleteSubuserMutation` within a React component and pass it any options that fit your needs.\r\n * When your component renders, `useDeleteSubuserMutation` returns a tuple that includes:\r\n * - A mutate function that you can call at any time to execute the mutation\r\n * - An object with fields that represent the current status of the mutation's execution\r\n *\r\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\r\n *\r\n * @example\r\n * const [deleteSubuserMutation, { data, loading, error }] = useDeleteSubuserMutation({\r\n * variables: {\r\n * subuserId: // value for 'subuserId'\r\n * },\r\n * });\r\n */\r\nexport function useDeleteSubuserMutation(baseOptions?: Apollo.MutationHookOptions<DeleteSubuserMutation, DeleteSubuserMutationVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useMutation<DeleteSubuserMutation, DeleteSubuserMutationVariables>(DeleteSubuserDocument, options);\r\n }\r\nexport type DeleteSubuserMutationHookResult = ReturnType<typeof useDeleteSubuserMutation>;\r\nexport type DeleteSubuserMutationResult = Apollo.MutationResult<DeleteSubuserMutation>;\r\nexport type DeleteSubuserMutationOptions = Apollo.BaseMutationOptions<DeleteSubuserMutation, DeleteSubuserMutationVariables>;\r\nexport const GetAllCategoriesDocument = gql`\r\n query GetAllCategories {\r\n getAllCategories {\r\n cat_id\r\n cat_name\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetAllCategoriesQuery__\r\n *\r\n * To run a query within a React component, call `useGetAllCategoriesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetAllCategoriesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetAllCategoriesQuery({\r\n * variables: {\r\n * },\r\n * });\r\n */\r\nexport function useGetAllCategoriesQuery(baseOptions?: Apollo.QueryHookOptions<GetAllCategoriesQuery, GetAllCategoriesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetAllCategoriesQuery, GetAllCategoriesQueryVariables>(GetAllCategoriesDocument, options);\r\n }\r\nexport function useGetAllCategoriesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetAllCategoriesQuery, GetAllCategoriesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetAllCategoriesQuery, GetAllCategoriesQueryVariables>(GetAllCategoriesDocument, options);\r\n }\r\nexport type GetAllCategoriesQueryHookResult = ReturnType<typeof useGetAllCategoriesQuery>;\r\nexport type GetAllCategoriesLazyQueryHookResult = ReturnType<typeof useGetAllCategoriesLazyQuery>;\r\nexport type GetAllCategoriesQueryResult = Apollo.QueryResult<GetAllCategoriesQuery, GetAllCategoriesQueryVariables>;\r\nexport const GetTeoriLessonStudentsDocument = gql`\r\n query GetTeoriLessonStudents($lessonId: String) {\r\n GetTeoriLessonStudents(lesson_id: $lessonId)\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetTeoriLessonStudentsQuery__\r\n *\r\n * To run a query within a React component, call `useGetTeoriLessonStudentsQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetTeoriLessonStudentsQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetTeoriLessonStudentsQuery({\r\n * variables: {\r\n * lessonId: // value for 'lessonId'\r\n * },\r\n * });\r\n */\r\nexport function useGetTeoriLessonStudentsQuery(baseOptions?: Apollo.QueryHookOptions<GetTeoriLessonStudentsQuery, GetTeoriLessonStudentsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetTeoriLessonStudentsQuery, GetTeoriLessonStudentsQueryVariables>(GetTeoriLessonStudentsDocument, options);\r\n }\r\nexport function useGetTeoriLessonStudentsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetTeoriLessonStudentsQuery, GetTeoriLessonStudentsQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetTeoriLessonStudentsQuery, GetTeoriLessonStudentsQueryVariables>(GetTeoriLessonStudentsDocument, options);\r\n }\r\nexport type GetTeoriLessonStudentsQueryHookResult = ReturnType<typeof useGetTeoriLessonStudentsQuery>;\r\nexport type GetTeoriLessonStudentsLazyQueryHookResult = ReturnType<typeof useGetTeoriLessonStudentsLazyQuery>;\r\nexport type GetTeoriLessonStudentsQueryResult = Apollo.QueryResult<GetTeoriLessonStudentsQuery, GetTeoriLessonStudentsQueryVariables>;\r\nexport const GetAllSlidesDocument = gql`\r\n query getAllSlides($included_slides: Int, $language_chosen: Int) {\r\n getAllSlides(\r\n included_slides: $included_slides\r\n language_chosen: $language_chosen\r\n ) {\r\n quiz_slide_id\r\n media_type_id\r\n intro_sound_text\r\n intro_sound_location\r\n media_location\r\n media_location_enc\r\n quiz_id\r\n slide_statements {\r\n quiz_statement_no\r\n sound_text\r\n sound_location\r\n statement_answer_id\r\n elaboration_text\r\n }\r\n tags {\r\n tag_id\r\n tag_name\r\n }\r\n }\r\n}\r\n `;\r\n\r\n/**\r\n * __useGetAllSlidesQuery__\r\n *\r\n * To run a query within a React component, call `useGetAllSlidesQuery` and pass it any options that fit your needs.\r\n * When your component renders, `useGetAllSlidesQuery` returns an object from Apollo Client that contains loading, error, and data properties\r\n * you can use to render your UI.\r\n *\r\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\r\n *\r\n * @example\r\n * const { data, loading, error } = useGetAllSlidesQuery({\r\n * variables: {\r\n * included_slides: // value for 'included_slides'\r\n * language_chosen: // value for 'language_chosen'\r\n * },\r\n * });\r\n */\r\nexport function useGetAllSlidesQuery(baseOptions?: Apollo.QueryHookOptions<GetAllSlidesQuery, GetAllSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useQuery<GetAllSlidesQuery, GetAllSlidesQueryVariables>(GetAllSlidesDocument, options);\r\n }\r\nexport function useGetAllSlidesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetAllSlidesQuery, GetAllSlidesQueryVariables>) {\r\n const options = {...defaultOptions, ...baseOptions}\r\n return Apollo.useLazyQuery<GetAllSlidesQuery, GetAllSlidesQueryVariables>(GetAllSlidesDocument, options);\r\n }\r\nexport type GetAllSlidesQueryHookResult = ReturnType<typeof useGetAllSlidesQuery>;\r\nexport type GetAllSlidesLazyQueryHookResult = ReturnType<typeof useGetAllSlidesLazyQuery>;\r\nexport type GetAllSlidesQueryResult = Apollo.QueryResult<GetAllSlidesQuery, GetAllSlidesQueryVariables>;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABVCAYAAADJ/vPXAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF+GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTExLTAyVDE1OjQxOjU4KzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMS0wMlQxNTo0ODoyOSswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMS0wMlQxNTo0ODoyOSswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MjdlNWQ3ZC00MGY0LTQ1MTktOWRiYi1hMGRmMjBhZGJiZTciIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplYjhmOGRjMC1kNDhiLTNiNDctYWU3Ny0wOTYyNzE3YzhlOGMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4MTI1MDFjNS1lZDBlLTQ0OGYtODI2MS1kMTE1NGYxMGExMDMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjgxMjUwMWM1LWVkMGUtNDQ4Zi04MjYxLWQxMTU0ZjEwYTEwMyIgc3RFdnQ6d2hlbj0iMjAyMS0xMS0wMlQxNTo0MTo1OCswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjcyN2U1ZDdkLTQwZjQtNDUxOS05ZGJiLWEwZGYyMGFkYmJlNyIgc3RFdnQ6d2hlbj0iMjAyMS0xMS0wMlQxNTo0ODoyOSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+T0zQWAAACQVJREFUeJztnV+MXFUdxz/n3Lu7bRfc9A+L7m2zsopYLdS6sZgaRmok1LgxPgiGB0yoJeqDiVETXiBi1KQ8GU2MEeKqBDExIUIYUopNqFNAtBRasA2IbqnbO7BrLYW2LLtz5/x8uHdbut2dOefemdmZ2fkk87Jz/s03Z3/39zt/fleJCB3qj17sASwVOkI3iI7QDaIjdIPwqxVQSjViHAsSqpwCPKCLeGJ4yVcGKAMloBxIYVGf6tWcClW1QIOFDlVOA33AWuAKiNYB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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAuCAYAAABu3ppsAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF+GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTExLTAyVDE2OjA4OjQwKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMS0wMlQxNjoxNDowOSswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMS0wMlQxNjoxNDowOSswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3YjAxMDEyZS00NWE4LTQ5ODktYmViOS0yOGRmMWRlNzZhNjkiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpjMTgyNGM3Yi0yMzMwLTNlNDQtYmUxNy0xYmM3MTkzNmNjMDgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphYmNkOGY3Mi02YWNhLTQ1ZWItYTMxMC1kYzQ2MGMzNTZmZGEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmFiY2Q4ZjcyLTZhY2EtNDVlYi1hMzEwLWRjNDYwYzM1NmZkYSIgc3RFdnQ6d2hlbj0iMjAyMS0xMS0wMlQxNjowODo0MCswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjdiMDEwMTJlLTQ1YTgtNDk4OS1iZWI5LTI4ZGYxZGU3NmE2OSIgc3RFdnQ6d2hlbj0iMjAyMS0xMS0wMlQxNjoxNDowOSswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+AVh0SwAABUtJREFUaIHVml1sFFUYhp+z7Nas/BiU8iPYIAEhhEgEmwYJGtQL4x8RFUPVxEhSabwUvPHWG2h63USvNKHhwjR6ZaIikmJIUCm0/EhpIlKh0LWKitju7M7rxZktO9vZ2ZntbglvssnuzDfnvO8535nzne9bI4k7GYnbTWC6SBb/MMbUrGFJyaL2c0DeGFOT6S72mmSIXdTGDJAG7gNWA48Aa4FlwBzP7F/gN0nngD7gZ2AMuDldUVUL8IgvATYDTwEtwApgNtY1S6dTgAvcBH4BjgOHJB0Frhhj3GqJTH5iPJOWtEPSl5JGJeUkuYoO13vmd0lfS3pdUroqznEESDKSmiR9LGk8BuFKGJf0qaQHZWe29gIkpSQ9I+mIpGwNyRfgSPpe0jZJqZoKkJSUtFPSRUn5OpAvIC/pkqS3wkRUI+Bpj/xM4bKkFyQF7lOxBEhaJ+m44i3S6cKVdEJS87QESFos6RvZN8ZMIyfpO0n3hwkoG0rI+uAu4ElgVjm7OmIW8DjwrqSGckZhsdAqYAdTN6SZhAFeBtaVMwgT8Dw2NLjdeBB4sdzNcqt8HvAGcFfUXux6qmzn9A/h9A9FsvXQAOyQdE/QzXIz8CwxRj+fB6ejm9ymdrL7u3EDohoJsvu7oa0T2jpxOrrjiFgJbAu6MSWY8xbvq0DobugT0NmN6ekl0zdAIzZ2Tu1tpTg6dzoKNmcA0Qg4QMP7rVG6SAI7JR00xmRDBQCNwEZiLF7T08uly2OknTyZH/unkHOyeORPg5ODROxzlAGagUXAcCUBD2Bj+8hwj3TR9EQ7l90cDSMjZH6yIgpDZXp6yZz0yM9K0LjxYbR9C6m9kUa/gPnA8igClhHDfQAaGmD8cBdLt7Yz4uZJXhudnAmATN8AOHlI3CKf3ON3sQhIeAJ6KwlYQMyzsjGQToOOdbFkUzsjEsnRDJnjJ31GjY9a8hH9PggLSy/4iOrW8bCqzcsYyB3uYsnypZDyj01j8/pq3KYUaZWcF2qelUheGLJfyrwia5g3sP35GzeSNF6++3A4DtDWyeiZQUwu57uX6Ts9ubCn4UL/eRwnLwStgTHs4TsyJMgNDEFbJ5n+s5jxrPX55vUAjJ4fwvx1w/d2Kt0nIiJTeiHIhYaxe1FkFMiPnhuCIvLavoXxr7pYuHol7oJ7Ie+S6TuN6enF6eiOS94Ffo0qYCxqq06/R/7sIOafGz7yyT2tzJkL5mgXi1Y0oXmzwcmROWlFxMxqXsemYyoKyGCTT7GaN1nHRz61t5VEwi7aZBL46D0WrlmF5s5heGUL2r4lTvMCTgDXpt4JOJFJelMRMw+uK03sO6Bsy25lW3ZrYt8BOY69XmqXPXVh0mZiItbpLCtpVxBnU0y8kBuVNB84ik0RVh4eMenTYYtTAte1s1L4RMR54DFjzB8FAcWjHXgmlvSBpHjjVB9kJX1Ywq3ymRj4AhiMPEb1w0Usl0CECRgEPqPKTa1GEPA5MFDeIjytskzSD6pvNq4c8pL6JDWFcg4T4BlvkE0yzXRiq1/S5oqDHkGAkfScbM5ypjAi6RVJgfmoWAK8B1KyCdcR1T+5e1XSOwpJZsUWUCTiJUnHZFPhtYYju95eCyNftQDvQSPpIUmfqLYFjglJByWtVZmMdE0EFDWQlg03jkj6U9WVmPKSrssWNd6WdHeM/sNDiYiNGGwGYyu2yLcBaMIW+QzBRT5hi3zD2IDxEPAtcClOkc/HuVoBRY0lgLnAYmANsB6b1VvqicEjfQUb05wCzgFXgb+rqU7WVEBIJyn8he5cPQrdPgF3Iu74/0r8DzYp703+ivzqAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAABOCAYAAACzOEF7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAF+GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTExLTAyVDE2OjA4OjMzKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMS0wMlQxNjoxMDo1NiswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMS0wMlQxNjoxMDo1NiswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpmZTgyYTkxNC1hOTNmLTQ5NzQtOWQzZS0zNDJmMDk4YzJmNGMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxNTRhYjFlNi04YTZhLTc3NDgtOGRiMS1lZDQxODdiZTdiNTciIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphZmM4MzFmOS04ZTdkLTQyNTEtYTcyYS0yNzFhZDdmODVhYjMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmFmYzgzMWY5LThlN2QtNDI1MS1hNzJhLTI3MWFkN2Y4NWFiMyIgc3RFdnQ6d2hlbj0iMjAyMS0xMS0wMlQxNjowODozMyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZlODJhOTE0LWE5M2YtNDk3NC05ZDNlLTM0MmYwOThjMmY0YyIgc3RFdnQ6d2hlbj0iMjAyMS0xMS0wMlQxNjoxMDo1NiswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjQgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Y0oXdgAAB1pJREFUeJztnH+MXFUVxz/3zOy0pbvQWpHAWxX8EYKY2sQaqshDBEGCqTFE408E/9BEDcZGS2sgapQ0ELWkaf/QiBo0AZsA0T9aY0qQByhp0RQk8AcWs9JHdi1Wu3QpOzvvXv+4s926cd677819M/Om+0nmj8k778yZ79z77rl3zr3KGMMS3SP9DmBYWBLSE0tCemJJSE/U0y4qpXoSRKxCBawAzgRWAa8DVoMeBRqAAmZBZoCj7dcxYBo4EZhI9yLOtIFZpV4sWchY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\"","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/invertedfail_icon.2eb4c2fc.png\";","export default \"data:image/png;base64,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\"","import React, { useEffect, useState } from \"react\";\r\nimport { EndSlide, MediaType, VideoType } from \"../../../../model\";\r\nimport StatementRow from \"./StatementRow\";\r\nimport star from \"../../../../../assets/star_icon.png\";\r\nimport arrow from \"../../../../../assets/red_Arrow2.png\";\r\nimport headphones from \"../../../../../assets/headphone_icon.png\";\r\nimport \"./styles/Slide.scss\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../../translations/translationProvider\";\r\nimport closeIcon from \"../../../../../assets/red_cross.png\";\r\nimport { LessonPageVideo } from \"../../../../Teacher/lessonPage/components/LessonPageVideo\";\r\nimport { TransformComponent, TransformWrapper } from \"react-zoom-pan-pinch\";\r\nimport { LAPTOP_VIEW_WIDTH } from \"../../../../../constants/viewConstants\";\r\nimport { useWindowDimensions } from \"../../../../../hooks/useWindowDimensions\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport expandIcon from \"../../../../../assets/expandIcon.png\";\r\nimport { useMarkSlideMutation, useUnmarkSlideMutation } from \"../../../../../graphql/generated/graphqlStudent\";\r\nimport ChangeHistoryRoundedIcon from '@mui/icons-material/ChangeHistoryRounded';\r\n\r\ninterface SlideProps {\r\n key: number;\r\n slide: EndSlide;\r\n isStats?: boolean;\r\n}\r\n\r\nconst Slide: React.FC<SlideProps> = (props: SlideProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [isMarked, setIsMarked] = useState<boolean>(props.slide.isMarked ? props.slide.isMarked : false);\r\n const [isEnlarged, setisEnlarged] = useState(false);\r\n\r\n const [markSlide] = useMarkSlideMutation({variables:{marked_slides:[String(props.slide.progressID)]}});\r\n const [unmarkSlide] = useUnmarkSlideMutation({variables:{unmarked_slides:[String(props.slide.progressID)]}});\r\n\r\n const renderStatements = (): JSX.Element[] => {\r\n const statementArray: JSX.Element[] = [];\r\n props.slide.statements.forEach((statement, index) => {\r\n statementArray.push(<StatementRow statement={statement} key={index} />);\r\n });\r\n return statementArray;\r\n };\r\n\r\n const goToTrafficSigns = (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\r\n event.stopPropagation();\r\n window.open(\"https://www.teoriundervisning.dk/faerdselstavler/\", \"blank\")\r\n }\r\n\r\n const onImageClick = () => {\r\n setisEnlarged(!isEnlarged);\r\n };\r\n\r\n const onMarkedClick = () => {\r\n if(!isMarked){\r\n markSlide();\r\n }else{\r\n unmarkSlide();\r\n }\r\n setIsMarked(!isMarked);\r\n };\r\n\r\n const onExplanationClick = () => {\r\n alert(\"EXPLANATION CLICK\");\r\n };\r\n\r\n const { width, height } = useWindowDimensions();\r\n\r\n const [isLaptopView, setIsLaptopView] = useState<boolean>(\r\n LAPTOP_VIEW_WIDTH <= width\r\n );\r\n\r\n useEffect(() => {\r\n setIsLaptopView(LAPTOP_VIEW_WIDTH <= width);\r\n }, [width, height]);\r\n\r\n const zoomAbleSlide = () => {\r\n return (\r\n <div className=\"zoomableImage\" onClick={() => onImageClick()}>\r\n <TransformWrapper\r\n initialScale={isLaptopView ? 1.2 : 0.5}\r\n minScale={0.3}\r\n centerZoomedOut={true}\r\n maxScale={2}\r\n centerOnInit\r\n >\r\n <TransformComponent wrapperClass=\"zoomContainer\">\r\n {props.slide.mediaType === MediaType.AZUREIMG ? (\r\n <img alt=\"SLIDE-IMG\" src={props.slide.media}></img>\r\n ) : (\r\n <div className=\"SLIDE-VID\">\r\n <LessonPageVideo\r\n key={props.slide.media}\r\n video={props.slide.media}\r\n videoType={VideoType.STREAM}\r\n />\r\n </div>\r\n )}\r\n </TransformComponent>\r\n </TransformWrapper>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {isEnlarged ? zoomAbleSlide() : null}\r\n {props.slide ? (\r\n <>\r\n <div className={props.isStats ? \"Slide-expanded\" : \"Slide\"}>\r\n <div className=\"imageAndMarkers\">\r\n {props.slide.mediaType === MediaType.AZUREIMG ? (\r\n <div className=\"image\" onClick={() => onImageClick()}>\r\n <Button onClick={event => goToTrafficSigns(event)} className=\"trafficSign\"><ChangeHistoryRoundedIcon/></Button>\r\n <img alt=\"SLIDE-IMG\" src={props.slide.media}></img>\r\n <Button\r\n className=\"expandButton\"\r\n onClick={() => onImageClick()}\r\n >\r\n <img src={expandIcon}></img>\r\n </Button>\r\n </div>\r\n ) : (\r\n <div className=\"SLIDE-VID\">\r\n <LessonPageVideo\r\n key={props.slide.media}\r\n video={props.slide.media}\r\n videoType={VideoType.STREAM}\r\n />\r\n <Button className=\"expandButton\" onClick={() => onImageClick()}>\r\n <img src={expandIcon}></img>\r\n </Button>\r\n </div>\r\n )}\r\n <div className=\"icons\">\r\n {props.slide.explanation ? (\r\n <div>\r\n <button onClick={onExplanationClick}>\r\n <img src={headphones} alt=\"HEADPHONES-ICON\"></img>\r\n </button>\r\n <label>\r\n <h3>\r\n {\" \"}\r\n {isLaptopView\r\n ? languageString.studentQuizPage.End\r\n .soundExplainedShorthand\r\n : null}\r\n </h3>\r\n {isLaptopView\r\n ? languageString.studentQuizPage.End.soundExplained\r\n : null}\r\n </label>\r\n </div>\r\n ) : null}\r\n <div>\r\n <button\r\n onClick={onMarkedClick}\r\n className={isMarked ? \"marked\" : \"unmarked\"}\r\n >\r\n <img src={star} alt=\"STAR-ICON\"></img>\r\n </button>\r\n <label>\r\n <h3>\r\n {isLaptopView\r\n ? languageString.studentQuizPage.End\r\n .dontLikeImageShorthand\r\n : null}\r\n </h3>\r\n {isLaptopView\r\n ? languageString.studentQuizPage.End.dontLikeImage\r\n : languageString.studentQuizPage.End\r\n .dontLikeImageShorthand}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={\"statementUI\"}>\r\n <div className=\"rows\">\r\n <div className=\"introQuestion\">{props.slide.introQuestion}</div>\r\n <hr></hr>\r\n {renderStatements()}\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n ) : (\r\n <div>{\"NO SLIDE SELECTED\"}</div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Slide;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAYAAABX5MJvAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TxSoVETuIiGSoThZERRylikWwUNoKrTqYXPoFTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ/ABxc3NSdJES/5cUWsR4cNyPd/ced+8AoV5mqtkxAaiaZSRjUTGTXRW7XtGNfgQAjEjM1OOpxTQ8x9c9fHy9i/As73N/jl4lZzLAJxLPMd2wiDeIZzYtnfM+cYgVJYX4nHjcoAsSP3JddvmNc8FhgWeGjHRynjhELBbaWG5jVjRU4mnisKJqlC9kXFY4b3FWy1XWvCd/YTCnraS4TnMYMSwhjgREyKiihDIsRGjVSDGRpP2oh3/I8SfIJZOrBEaOBVSgQnL84H/wu1szPzXpJgWjQOeLbX+MAl27QKNm29/Htt04AfzPwJXW8lfqwOwn6bWWFj4C+raBi+uWJu8BlzvA4JMuGZIj+WkK+TzwfkbflAUGboGeNbe35j5OH4A0dbV8AxwcAmMFyl73eHegvbd/zzT7+wEsxXKLP1QfIQAAAAZiS0dEAMUAHAA45Yg+XgAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+UJEQwNCjOJHC0AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB1UlEQVRYw2NgIBLcqe4S/fvr94f/RIDvz1/uZaAmuN89XeU/BYAYOxjxSRJrCFEWMTLitIsJm+CNzBo2ajqAZA89mDpfH1/w/nz3/iwlUUdU4sOl+dWuA0mk+Pzr/UcriXUIIzFBhi8+yY0GZDOZ8Cn+9/PXG0ocgM8Dvz58vERUXFI7YeI1n9YOYGBgYLjT2C+Fbgc8NLAlxtd7D6cz0AD8/fHzNTbPMv778+crIzMzF7USIqkJ9emy9S4MpJQDNEsbtE4L6ODzrXvzB9wR1xPLGNHtZES3mJbpAVe6YGIYBICJmIRzI7OGjRzDX27bG0NUGURs4+T5mi2+pDjg5+u3x4lu+FC7lYQvBHABRlIM//vj53MWTg4pqjZgsKWJBz0zVBmhAF2OmYNdkpy08fXew6UwM3+9/3COYJpAlns4c7EJOVGCT8+rXQeS0OXxZtFfdx/doXZ2/P3+4zOiGrq0BP/+/P094I5gYmFmHXBHfLt08yxJjuDU1zSmtiP+vPv4kagS8/mG7UEfL1zpIrfAwqbv9YGjOW8OHMuhuMT89vjZZnIdgbckfr5hexC1i21sbQaCZhJT1pMa94/mLrcky0xsCj/fuDOL2i3sn6/fHkdWAwBZe87CIPfe1wAAAABJRU5ErkJggg==\"","import React from 'react';\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from '../../../../../translations/translationProvider';\r\nimport \"./styles/ResultView.scss\";\r\nimport DoneRoundedIcon from '@mui/icons-material/DoneRounded';\r\nimport CloseRoundedIcon from '@mui/icons-material/CloseRounded';\r\nimport { Button } from '@material-ui/core';\r\n\r\nexport type IResultViewProps = {\r\n passStatus: boolean;\r\n amountCorrect: number;\r\n amount: number;\r\n isFreeQuiz?: boolean;\r\n}\r\n\r\nconst ResultView: React.FC<IResultViewProps> = (props: IResultViewProps) => {\r\n\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage()); \r\n\r\n const renderStatus = () => {\r\n if(props.passStatus){\r\n return(\r\n <div className=\"passed\">\r\n <h3>{languageString.studentQuizPage.End.youpassed}</h3>\r\n <hr></hr>\r\n </div>\r\n )\r\n }else{\r\n return(\r\n <div className=\"failed\">\r\n <h3>{languageString.studentQuizPage.End.youfailed}</h3>\r\n <hr></hr>\r\n </div>\r\n )\r\n }\r\n }\r\n return (\r\n <div className='ResultView'>\r\n <div className=\"ResultViewBox\">\r\n <div className=\"leftView\">\r\n {props.passStatus ? <Button variant=\"outlined\"><DoneRoundedIcon className='success'/></Button> : <Button variant=\"outlined\"><CloseRoundedIcon className='failed'/></Button>}\r\n </div>\r\n <div className='rightView'>\r\n\r\n {renderStatus()}\r\n <div className='amount'>\r\n {languageString.studentQuizPage.End.youhad + \" \" + props.amountCorrect + \"/\" + props.amount + \" \" + languageString.studentQuizPage.End.imagesPassed}\r\n </div>\r\n </div>\r\n </div>\r\n {props.isFreeQuiz ? <div className='purchaseAccessBox'>\r\n <Button variant='contained' onClick={() => window.open(\"https://www.teoriundervisning.dk/#koebadgang\")}>{languageString.studentQuizPage.End.purchaseAccess}</Button>\r\n </div> : null}\r\n </div>\r\n );\r\n}\r\n\r\nexport { ResultView };","import React, { useEffect, useState } from \"react\";\r\nimport { EndSlide, MediaType } from \"../../../../model\";\r\nimport success from \"../../../../../assets/checkmark_icon.png\";\r\nimport failed from \"../../../../../assets/invertedfail_icon.png\";\r\nimport arrow from \"../../../../../assets/red_Arrow.png\";\r\nimport Slide from \"./Slide\";\r\nimport Loading from \"../../../../../globalComponents/Loading\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../../translations/translationProvider\";\r\nimport { PATH_DASHBOARD } from \"../../../../../constants/pathConstants\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport { ResultView } from \"./ResultView\";\r\nimport { Button } from \"@material-ui/core\";\r\n\r\ninterface endLocationProps{\r\n achivementTypeID?: string;\r\n}\r\n\r\ninterface SlideSelectorProps {\r\n slides: EndSlide[];\r\n result: boolean;\r\n refetch: () => void;\r\n isFailed: boolean;\r\n isTeacher?: boolean;\r\n isFreeQuiz?: boolean;\r\n}\r\n\r\nconst SlideSelector: React.FC<SlideSelectorProps> = (\r\n props: SlideSelectorProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [slideArray, setSlideArray] = useState<JSX.Element[]>();\r\n const history = useHistory();\r\n\r\n const location = useLocation<endLocationProps>();\r\n\r\n const [currentSlide, setCurrentSlide] = useState(-1);\r\n const setSlide = (id: number) => {\r\n setCurrentSlide(id - 1); //WEIRD ERROR APPARENTLY SETTED IT -1 OFF\r\n };\r\n\r\n const goBack = () => {\r\n if(props.isFreeQuiz){\r\n if(currentSlide === -1){\r\n window.open(\"https://www.teoriundervisning.dk/#koebadgang\");\r\n }else{\r\n setCurrentSlide(-1);\r\n }\r\n }else{\r\n history.push(PATH_DASHBOARD, {achievementTypeID: location.state ? location.state.achivementTypeID ? location.state.achivementTypeID : \"\" : \"\"});\r\n }\r\n };\r\n\r\n const goToBottom = () => {\r\n if (document.getElementById(\"slides\")) { \r\n document.getElementById(\"slides\")!.scrollTop =\r\n document.getElementById(\"slides\")!.scrollTop + \r\n document.getElementsByClassName(\"slide\")![0].scrollHeight * 2;\r\n }\r\n };\r\n\r\n\r\n function calculateCorrectAmount(){\r\n let amount = 0;\r\n props.slides.forEach((slide) => {\r\n if(slide.passed){\r\n amount++;\r\n }\r\n })\r\n return amount;\r\n }\r\n\r\n\r\n useEffect(() => {\r\n const TempSlideArray: JSX.Element[] = props.slides.map((slide) => {\r\n let errorCount = 0;\r\n slide.statements.forEach((statement) => {\r\n if(statement.answer !== statement.correctAnswer){\r\n errorCount++;\r\n } \r\n })\r\n return (\r\n <div\r\n className={currentSlide === slide.id ? \"slide selected clickable\" : \"slide clickable\"}\r\n onClick={() => setSlide(slide.id)}\r\n key={slide.id}\r\n >\r\n <img alt=\"thumbnail\" src={slide.mediaType === MediaType.STREAM ? slide.tempMedia : slide.media}></img>\r\n <img\r\n className=\"status\"\r\n alt=\"slideStatus\"\r\n src={slide.passed ? success : failed}\r\n ></img>\r\n <div className=\"slidename\">{slide.id + \". \" + slide.introQuestion}</div>\r\n </div>\r\n );\r\n });\r\n setSlideArray(TempSlideArray);\r\n }, [props.slides.length]);\r\n\r\n return (\r\n <>\r\n <div className=\"SlideSelector\">\r\n {props.isTeacher ? null :<div className=\"backButton\" >\r\n <button className=\"clickable\" onClick={goBack}>\r\n <img alt=\"arrowLeft\" src={arrow}></img>\r\n </button>\r\n <label className=\"clickable\" onClick={goBack}>{languageString.generalMessages.backButton}</label>\r\n </div>}\r\n <div className=\"slides\" id=\"slides\">\r\n {slideArray ? slideArray : <Loading />}\r\n </div>\r\n <button className=\"downButton clickable\" onClick={goToBottom}>\r\n <img alt=\"arrowDown\" src={arrow}></img>\r\n </button>\r\n </div>\r\n {props.isFailed ? <div className=\"retryButton\"><Button onClick={() => props.refetch()}>PRØV IGEN</Button></div> : \r\n (props.slides.length > 0 ? (\r\n currentSlide === -1 ? <ResultView passStatus={props.result} amountCorrect={calculateCorrectAmount()} amount={props.slides.length} isFreeQuiz={props.isFreeQuiz}/> : <Slide\r\n slide={props.slides[currentSlide]}\r\n key={props.slides[currentSlide].id}\r\n />\r\n \r\n ) : (\r\n <Loading />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default SlideSelector;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { EndSlide, EndStatement, MediaType } from \"../../../model\";\r\nimport SlideIMG from \"../../../../assets/testImage.jpg\";\r\nimport SlideSelector from \"./components/SlideSelector\";\r\nimport Slide from \"./components/Slide\";\r\nimport Loading from \"../../../../globalComponents/Loading\";\r\nimport \"./End.scss\";\r\nimport {\r\n Online_Quiz_Result,\r\n useGetLatestResultQuery,\r\n useGetQuizResultQuery,\r\n} from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { numberToMediaType } from \"../../../modelFunctions\";\r\nimport { useLocation } from \"react-router\";\r\n\r\n\r\n\r\nexport type IEndProps = {\r\n id: number;\r\n shouldFetchByOnlineID: boolean;\r\n onlineID?: string;\r\n isTeacher?: boolean;\r\n isFreeQuiz?:boolean;\r\n};\r\n\r\nconst End: React.FC<IEndProps> = (props: IEndProps) => {\r\n const [endContent, setendContent] = useState<EndSlide[]>([]);\r\n //TODO ADD SUPPORT FOR A VIDEO IN THIS COMPONENT\r\n const [result, setresult] = useState<boolean>(false);\r\n const [isFailed, setisFailed] = useState(false);\r\n const { data: resultData, loading: resultLoading, refetch } = useGetLatestResultQuery({\r\n variables: { base_quiz_id: props.id === 0 || !props.id ? undefined : String(props.id) },\r\n skip: props.isFreeQuiz ? true : props.shouldFetchByOnlineID,\r\n fetchPolicy:\"network-only\"\r\n });\r\n\r\n const {data: onlineQuizData, loading: onlineQuizLoading, refetch: onlineQuizRefetch} = useGetQuizResultQuery({\r\n variables: { online_quiz_id: props.onlineID ? props.onlineID : \"-1\" },\r\n skip: props.isFreeQuiz ? false : !props.shouldFetchByOnlineID,\r\n fetchPolicy:\"network-only\"\r\n });\r\n\r\n\r\n const refetchQuery = () => {\r\n setisFailed(false);\r\n if(!props.shouldFetchByOnlineID){\r\n refetch();\r\n }else{\r\n onlineQuizRefetch();\r\n }\r\n }\r\n\r\n const getThumbnail = async (mediaString: string) => {\r\n const slideAddress = mediaString.split(\"/\")[3];\r\n\r\n return await fetch(\r\n `https://vimeo.com/api/oembed.json?url=https://vimeo.com/${slideAddress}`\r\n )\r\n .then((data) => data.json())\r\n .then((result) => {\r\n return result.thumbnail_url;\r\n });\r\n };\r\n\r\n const decideStatementAnswer = (passStatus: boolean, answerID: number) => {\r\n if(passStatus){\r\n return answerID;\r\n }else{\r\n if(answerID === 1){\r\n return 2;\r\n }else{\r\n return 1;\r\n }\r\n }\r\n }\r\n\r\n async function convertAPIToEndState(apiState: Online_Quiz_Result) {\r\n const tempArray: EndSlide[] = [];\r\n let slideIndex = 1;\r\n if (apiState.slide_progress) {\r\n for (const slide of apiState.slide_progress) {\r\n if (slide) {\r\n const tempStatements: EndStatement[] = [];\r\n if (slide?.statement_progress) {\r\n let index = 1;\r\n for (const statement of slide.statement_progress) {\r\n if (statement) {\r\n tempStatements.push({\r\n id: index,\r\n text: statement.sound_text ? statement.sound_text : \"\",\r\n correctAnswer: statement.statement_answer_id!,\r\n answer: Number(statement.statement_progress_answer),\r\n explanation: statement.elaboration_Text\r\n ? statement.elaboration_Text\r\n : \"\",\r\n });\r\n }\r\n index++;\r\n }\r\n }\r\n tempArray.push({\r\n id: slideIndex,\r\n isMarked: slide.progress_is_marked!,\r\n progressID: slide.progress_id!,\r\n media: slide?.media_location ? slide.media_location : \" \",\r\n tempMedia: slide?.media_location\r\n ? numberToMediaType(Number(slide.media_type_id)) ===\r\n MediaType.STREAM\r\n ? await getThumbnail(slide.media_location)\r\n : slide.media_location\r\n : \" \",\r\n introQuestion: slide?.intro_sound_text\r\n ? slide.intro_sound_text\r\n : \"\",\r\n statements: tempStatements,\r\n passed: slide.slide_pass_status ? slide.slide_pass_status : false,\r\n mediaType: slide?.media_type_id\r\n ? numberToMediaType(Number(slide.media_type_id))!\r\n : MediaType.AZUREIMG,\r\n });\r\n }\r\n slideIndex++;\r\n }\r\n setresult(apiState.quiz_pass_status ? apiState.quiz_pass_status : false);\r\n return tempArray;\r\n }\r\n }\r\n useEffect(() => {\r\n if(!props.shouldFetchByOnlineID && !props.isFreeQuiz){\r\n if (!resultLoading) {\r\n if (resultData) {\r\n if (resultData.getLatestResult) {\r\n convertAPIToEndState(resultData.getLatestResult[0]!).then((data) => {\r\n if (data) {\r\n setendContent(data);\r\n }\r\n });\r\n }else{\r\n setisFailed(true);\r\n }\r\n }else{\r\n setisFailed(true);\r\n }\r\n }\r\n }else{\r\n if (!onlineQuizLoading) {\r\n if (onlineQuizData) {\r\n if (onlineQuizData.getQuizResult) {\r\n convertAPIToEndState(onlineQuizData.getQuizResult[0]!).then((data) => {\r\n if (data) {\r\n setendContent(data);\r\n }\r\n });\r\n }else{\r\n setisFailed(true);\r\n }\r\n }else{\r\n setisFailed(true);\r\n }\r\n }\r\n }\r\n }, [resultData, resultLoading, onlineQuizLoading, onlineQuizData]);\r\n return (\r\n <>\r\n <div className=\"QuizEnd\">\r\n <SlideSelector slides={endContent} result={result} refetch={refetchQuery} isFailed={isFailed} isTeacher={props.isTeacher} isFreeQuiz={props.isFreeQuiz} />\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport { End };","import { Button } from \"@material-ui/core\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../../../translations/translationProvider\";\r\nimport \"./Answers.scss\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\n\r\nexport type IAnswersProps = {\r\n handleYesAnswer: () => void;\r\n handleNoAnswer: () => void;\r\n isNoSound: boolean;\r\n currentAnswer?: number;\r\n soundPlayer?: HTMLAudioElement;\r\n nextSound?: string;\r\n currentSound?: string;\r\n handleNext?: () => void;\r\n isLearningMode: boolean;\r\n};\r\n\r\nconst Answers: React.FC<IAnswersProps> = (props: IAnswersProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [isYesActive, setisYesActive] = useState(\r\n props.currentAnswer === 1 ? true : false\r\n );\r\n const [isNoActive, setisNoActive] = useState(\r\n props.currentAnswer === 2 ? true : false\r\n );\r\n\r\n const handlePlayStatement = () => {\r\n if(props.isNoSound){\r\n\r\n }else{\r\n\r\n if (props.soundPlayer && props.currentSound) {\r\n props.soundPlayer.src = props.currentSound;\r\n props.soundPlayer.play();\r\n props.soundPlayer.onended = () => {\r\n props.soundPlayer!.onended = null;\r\n };\r\n }\r\n }\r\n };\r\n\r\n// useEffect(() => {\r\n// if (props.soundPlayer) {\r\n// console.log(props.soundPlayer.paused);\r\n \r\n// if (!props.soundPlayer.paused ) {\r\n// console.log(\"i am playing!!\");\r\n\r\n// sethasPlayed(true);\r\n// //Its playing...do your job\r\n// } else {\r\n// //Not playing...maybe paused, stopped or never played.\r\n// }\r\n// }\r\n// }, []);\r\n\r\n\r\n\r\n const handleYesAnswer = () => {\r\n if (isNoActive) {\r\n setisNoActive(false);\r\n }\r\n setisYesActive(true);\r\n props.handleYesAnswer();\r\n \r\n if (props.soundPlayer && props.nextSound) {\r\n // props.soundPlayer.src = props.nextSound;\r\n // setTimeout(() => props.soundPlayer!.play(), 250);\r\n }\r\n };\r\n\r\n const handleNoAnswer = () => {\r\n if (isYesActive) {\r\n setisYesActive(false);\r\n }\r\n setisNoActive(true);\r\n props.handleNoAnswer();\r\n if (props.soundPlayer && props.nextSound) {\r\n // props.soundPlayer.src = props.nextSound;\r\n // setTimeout(() => props.soundPlayer!.play(), 1000);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"Answers\">\r\n <div>\r\n <button\r\n className={\r\n isYesActive ? \"answerButton active left\" : \"answerButton left\"\r\n }\r\n onClick={handleYesAnswer}\r\n >\r\n {languageString.studentQuizPage.Quiz.yes}\r\n </button>\r\n </div>\r\n <div>\r\n <button\r\n className={\r\n isNoActive ? \"answerButton active right\" : \"answerButton right\"\r\n }\r\n onClick={handleNoAnswer}\r\n >\r\n {languageString.studentQuizPage.Quiz.no}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { Answers };\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport ReactPlayer from \"react-player\";\r\nimport { VideoNav } from \"../../../../../../globalComponents/VideoNav\";\r\nimport { VideoType } from \"../../../../../model\";\r\n\r\nexport type IVideoProps = {\r\n key: string;\r\n video: string;\r\n videoType: VideoType;\r\n hasVideoEnded: boolean;\r\n setHasVideoEnded: React.Dispatch<React.SetStateAction<boolean>>;\r\n isNoSound?: boolean;\r\n};\r\n\r\nconst Video: React.FC<IVideoProps> = (props: IVideoProps) => {\r\n const [src, setSrc] = useState<string>(props.video);\r\n const videoRef = useRef<any>();\r\n const [isPlaying, setisPlaying] = useState(props.isNoSound ? false : true);\r\n const [hasEnded, sethasEnded] = useState(false);\r\n\r\n const handlePlay = () => {\r\n if (props.videoType === VideoType.AZURE) {\r\n const player = amp(\"player\");\r\n player.play();\r\n } else if (\r\n props.videoType === VideoType.LOCALVIDEO &&\r\n videoRef.current instanceof HTMLVideoElement\r\n ) {\r\n videoRef.current.play();\r\n } else if (\r\n props.videoType === VideoType.STREAM &&\r\n videoRef.current instanceof ReactPlayer\r\n ) {\r\n setisPlaying(true);\r\n }\r\n };\r\n\r\n const handlePause = () => {\r\n if (props.videoType === VideoType.AZURE) {\r\n const player = amp(\"player\");\r\n player.pause();\r\n } else if (\r\n props.videoType === VideoType.LOCALVIDEO &&\r\n videoRef.current instanceof HTMLVideoElement\r\n ) {\r\n videoRef.current.pause();\r\n } else if (\r\n props.videoType === VideoType.STREAM &&\r\n videoRef.current instanceof ReactPlayer\r\n ) {\r\n setisPlaying(false);\r\n }\r\n };\r\n\r\n const createVideoPlayer = (amp) => {\r\n const video = amp(\r\n \"player\",\r\n {\r\n techOrder: [\r\n \"azureHtml5JS\",\r\n \"flashSS\",\r\n \"html5FairPlayHLS\",\r\n \"silverlightSS\",\r\n \"html5\",\r\n ],\r\n nativeControlsForTouch: false,\r\n controls: false,\r\n logo: { enabled: false },\r\n width: \"100%\",\r\n heigth: \"100%\",\r\n },\r\n function () {\r\n console.log(\"Good to go!\");\r\n // add an event listener\r\n video.addEventListener(\"ended\", function () {\r\n console.log(\"Finished!\");\r\n video.currentTime(video.duration());\r\n props.setHasVideoEnded(true);\r\n });\r\n }\r\n );\r\n\r\n video.addEventListener(amp.eventName.error, (errorDetails) => {\r\n console.log(errorDetails);\r\n });\r\n return video;\r\n };\r\n const waitForAmp = () => {\r\n return new Promise((resolve, reject) => {\r\n let waited = 0;\r\n const wait = (interval) => {\r\n setTimeout(() => {\r\n waited += interval;\r\n const amp = window[\"amp\"];\r\n if (amp !== undefined) {\r\n console.log(\"play resolved\");\r\n return resolve(amp);\r\n }\r\n if (waited >= 3000 * 100) {\r\n console.log(\"play failed\");\r\n return reject();\r\n }\r\n wait(interval * 2);\r\n return null;\r\n }, interval);\r\n };\r\n wait(30);\r\n });\r\n };\r\n\r\n const renderRenderer = () => {\r\n waitForAmp()\r\n .then((amp) => {\r\n const player = createVideoPlayer(amp);\r\n player.src([{ src: src, type: \"application/vnd.ms-sstr+xml\" }]);\r\n })\r\n .catch((e) =>\r\n console.error(\"Could not found Azure Media Player plugin\", e)\r\n );\r\n };\r\n\r\n const renderPlayer = () => {\r\n if (props.videoType === \"Azure\") {\r\n renderRenderer();\r\n } else if (props.videoType === \"Youtube\") {\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n setSrc(props.video);\r\n if (props.videoType === \"Azure\") {\r\n renderRenderer();\r\n\r\n return () => {\r\n const player = amp(\"player\");\r\n player.dispose();\r\n };\r\n }\r\n }, [props.video]);\r\n\r\n if (props.videoType === \"Azure\") {\r\n return (\r\n <>\r\n <video\r\n id=\"player\"\r\n className=\" azuremediaplayer amp-default-skin azurePlayer\"\r\n playsInline={true}\r\n controls={false}\r\n ref={videoRef}\r\n >\r\n <source src={src} type=\"application/vnd.ms-sstr+xml\" />\r\n <source src={src} type=\".mp4\" />\r\n </video>\r\n <VideoNav\r\n hasVideoEnded={false}\r\n handlePlayClick={handlePlay}\r\n handlePauseClick={handlePause}\r\n />\r\n </>\r\n );\r\n } else if (props.videoType === \"Youtube\") {\r\n return <video></video>;\r\n } else if (props.videoType === VideoType.LOCALVIDEO) {\r\n return (\r\n <>\r\n <video controls={false} ref={videoRef}>\r\n <source src={src} />\r\n </video>\r\n <VideoNav\r\n hasVideoEnded={false}\r\n handlePlayClick={handlePlay}\r\n handlePauseClick={handlePause}\r\n />\r\n </>\r\n );\r\n } else if (props.videoType === VideoType.STREAM) {\r\n return (\r\n <div className=\"videoStreamer\">\r\n {\r\n //@ts-ignore\r\n <ReactPlayer\r\n url={props.video}\r\n controls={true}\r\n ref={videoRef}\r\n playing={isPlaying}\r\n playsinline={true}\r\n width='100%'\r\n height='100%'\r\n onEnded={() => {\r\n props.setHasVideoEnded(true);\r\n }}\r\n />\r\n }\r\n {/* <VideoNav\r\n hasVideoEnded={false}\r\n handlePlayClick={handlePlay}\r\n handlePauseClick={handlePause}\r\n isPlaying={isPlaying}\r\n /> */}\r\n </div>\r\n );\r\n } else {\r\n return <span>\"WHOOPS SOMETHING WENT WRONG\"</span>;\r\n }\r\n};\r\n\r\nexport { Video };\r\n","import { Button } from \"@material-ui/core\";\r\nimport React, { useState } from \"react\";\r\nimport { TransformWrapper, TransformComponent } from \"react-zoom-pan-pinch\";\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\nimport ZoomOutMapIcon from '@mui/icons-material/ZoomOutMap';\r\nimport \"./Image.scss\";\r\n\r\nexport type IImageProps = {\r\n key: string;\r\n image: string;\r\n isNoSound?: boolean;\r\n};\r\n\r\nconst Image: React.FC<IImageProps> = (props: IImageProps) => {\r\n const [isZoomed, setisZoomed] = useState(false);\r\n\r\n const handleSetZoom = () => {\r\n if (props.isNoSound) {\r\n setisZoomed(!isZoomed);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {isZoomed ? (\r\n <div className=\"zoomedPic\" onClick={() => handleSetZoom()}>\r\n <Button className=\"close\" onClick={() => handleSetZoom()}>\r\n <ClearIcon />\r\n </Button>\r\n <TransformWrapper maxScale={2}>\r\n <TransformComponent\r\n wrapperClass=\"zoomProvider\"\r\n contentClass=\"zoomContent\"\r\n >\r\n <img src={props.image}></img>\r\n </TransformComponent>\r\n </TransformWrapper>\r\n </div>\r\n ) : null}\r\n<div onClick={() => handleSetZoom()} className=\"imageWrapper\">\r\n<img src={props.image} alt=\"SLIDE\" />\r\n{props.isNoSound && (\r\n <div className=\"expandIcon\">\r\n <ZoomOutMapIcon />\r\n </div>\r\n)}\r\n\r\n\r\n</div>\r\n\r\n </>\r\n );\r\n};\r\n\r\nexport { Image };\r\n","import React, { useState } from \"react\";\r\nimport { MediaType, VideoType } from \"../../../../../model\";\r\nimport { Video } from \"./Video\";\r\nimport { Image } from \"./Image\";\r\nimport \"./Media.scss\";\r\nimport { TransformWrapper, TransformComponent } from \"react-zoom-pan-pinch\";\r\n\r\nexport type IMediaProps = {\r\n isNoSound: boolean;\r\n media: string;\r\n mediaType: MediaType;\r\n hasVideoEnded: boolean;\r\n setHasVideoEnded: React.Dispatch<React.SetStateAction<boolean>>;\r\n};\r\n\r\n\r\n\r\nconst Media: React.FC<IMediaProps> = (props: IMediaProps) => {\r\n\r\n\r\n const videoOrSlide = (): JSX.Element => {\r\n let isVideo;\r\n const string = props.media.split(\"//\", 2);\r\n\r\n if (props.mediaType === MediaType.STREAM) {\r\n return (\r\n <div>\r\n <Video\r\n key={props.media}\r\n video={props.media}\r\n videoType={VideoType.STREAM}\r\n hasVideoEnded={props.hasVideoEnded}\r\n setHasVideoEnded={props.setHasVideoEnded}\r\n isNoSound={props.isNoSound}\r\n />\r\n </div>\r\n );\r\n } else {\r\n props.setHasVideoEnded(true);\r\n if(props.isNoSound){\r\n return (\r\n <div>\r\n <Image key={props.media} image={props.media} isNoSound={true} />\r\n </div>\r\n\r\n )\r\n }\r\n return (\r\n <div>\r\n\r\n <TransformWrapper maxScale={2}>\r\n <TransformComponent\r\n wrapperClass=\"zoomProvider\"\r\n contentClass=\"zoomContent\"\r\n >\r\n <Image key={props.media} image={props.media} />{\" \"}\r\n </TransformComponent>\r\n </TransformWrapper>\r\n </div>\r\n\r\n );\r\n }\r\n };\r\n\r\n return <div className=\"Media\">{videoOrSlide()}</div>;\r\n};\r\n\r\nexport { Media };\r\n","export default \"data:image/png;base64,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ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczppcHRjRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6cGx1cz0iaHR0cDovL25zLnVzZXBsdXMub3JnL2xkZi94bXAvMS4wLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6OTcwNzExMWMtZDlkNy00Y2M3LWIwOTktMDE0Mzc0NTU3OGU0IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjczOGVlYTU1LTVjNTktNGYyNS05ZDgzLWFkZDgwMTJlZjA0MCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjE3YmJmODI1LTFjMmYtNGVlNS1hOThjLTNjYmQ0MTdjYTJmMyIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iV2luZG93cyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzE4NjU3NTcxOTIyNTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yMiIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3duPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6M2I4ZmVlYmItZjQyZi00NjVmLWJjZjUtYjY0NGE1N2UxOTkxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIxLTA5LTE3VDEwOjAyOjM3Ii8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHBsdXM6SW1hZ2VTdXBwbGllcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlU3VwcGxpZXI+CiAgIDxwbHVzOkltYWdlQ3JlYXRvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlQ3JlYXRvcj4KICAgPHBsdXM6Q29weXJpZ2h0T3duZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpDb3B5cmlnaHRPd25lcj4KICAgPHBsdXM6TGljZW5zb3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpMaWNlbnNvcj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pmtm7ugAAAAGYktHRADFABwAOOWIPl4AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQflCREIAiUYyZVnAAAA7ElEQVRYw+3Y0Q3CMAwE0F7mYBAk5kdiEPaAL35QWuK7sy0E+awqvSZOYtfb9msD7w+up/Nj9uLlfkMavIdm4FhF3R8wumJMwZHVsc9YxaWlVnA5xiwO1wyiOx3O5YvgcMduFUfGxlnBkbVrP+HIPDJHOLLP6x6OistihqPispjh4fTmwqm86sDphK7iUiWh4HIJY8lOlfh3zrglxmrNhQ6UOk4OtPSupq9MJ1qSj+m0mIGm1lx06ZOJptTVdHlbgVr/nehfmErU1opgeiKjA5VhpfszOlAadvS5wsfJ1d1r62UeJghHI+0/XuMJDwGW4LkU4s8AAAAASUVORK5CYII=\"","import React from 'react';\r\nimport arrow from \"../../../../../../assets/red_Arrow2.png\";\r\nimport \"./SlideArrows.scss\"\r\n\r\nexport type ISlideArrowsProps = {\r\n handleNext: () => void;\r\n handlePrevious: () => void;\r\n}\r\n\r\nconst SlideArrows: React.FC<ISlideArrowsProps> = (props: ISlideArrowsProps) => {\r\n return (\r\n <>\r\n <div className={\"leftarrow Arrow\"}>\r\n <button onClick={props.handlePrevious}><img src={arrow}></img></button>\r\n </div>\r\n <div className=\"rightarrow Arrow\">\r\n <button onClick={props.handleNext}><img src={arrow}></img></button>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport { SlideArrows };","import React, { useEffect, useState } from \"react\";\r\nimport AlertBox from \"../../../../../../globalComponents/AlertBox\";\r\nimport miniAudio from \"../../../../../../assets/miniAudio.mp3\";\r\nimport { PreloadMedia, MediaType } from \"react-preload-media\";\r\nimport { Button } from \"@mui/material\";\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\r\n\r\nexport type IAudioTrackProps = {\r\n handleNextSlide: () => void;\r\n handleAfterIntro: () => void;\r\n introQuestionSound: string;\r\n introQuestionText: string;\r\n indexSounds: string[];\r\n audioSounds: string[];\r\n indexPlayer: HTMLAudioElement;\r\n soundPlayer: HTMLAudioElement;\r\n pauseSeconds: number;\r\n isPlaying: boolean;\r\n setisPlaying: React.Dispatch<React.SetStateAction<boolean>>;\r\n};\r\n/*This component is responsible for playing sound if it is not LearningMode */\r\nconst AudioTrack: React.FC<IAudioTrackProps> = (props: IAudioTrackProps) => {\r\n const [currentCount, setcurrentCount] = useState(-1);\r\n const soundPlayer = props.soundPlayer;\r\n const indexPlayer = props.indexPlayer;\r\n\r\n\r\n const playSounds = () => {\r\n if (indexPlayer) {\r\n playCurrentSound();\r\n props.setisPlaying(true);\r\n }\r\n };\r\n\r\n\r\n const [isSoundError, setisSoundError] = useState(false);\r\n\r\n const onYes = () => {\r\n indexPlayer.src =\r\n \"https://teoricontentstorage.blob.core.windows.net/admincontainer/miniAudio.mp3\";\r\n soundPlayer.src =\r\n \"https://teoricontentstorage.blob.core.windows.net/admincontainer/miniAudio.mp3\";\r\n const indexPromise = indexPlayer.play();\r\n const soundPromise = soundPlayer.play();\r\n\r\n Promise.all([indexPromise, soundPromise]).then(() => {\r\n loadPlayersWithSound();\r\n playCurrentSound();\r\n });\r\n setisSoundError(false);\r\n };\r\n\r\n const loadPlayersWithSound = () => {\r\n if (currentCount === -1) {\r\n //THIS IS THE CASE FOR INDEX SOUND\r\n soundPlayer.src = props.introQuestionSound;\r\n soundPlayer.load();\r\n soundPlayer.addEventListener(\"error\", (e) => {\r\n\r\n setisSoundError(true);\r\n });\r\n } else {\r\n //THE CASE FOR EVERYTHING ELSE\r\n indexPlayer.src = props.indexSounds[currentCount];\r\n indexPlayer.load();\r\n indexPlayer.addEventListener(\"error\", (e) => {\r\n\r\n setisSoundError(true);\r\n });\r\n soundPlayer.src = props.audioSounds[currentCount];\r\n soundPlayer.load();\r\n soundPlayer.addEventListener(\"error\", (e) => {\r\n\r\n setisSoundError(true);\r\n });\r\n }\r\n };\r\n\r\n const playCurrentSound = () => {\r\n if (soundPlayer && indexPlayer) {\r\n loadPlayersWithSound();\r\n soundPlayer.onended = () => {\r\n setTimeout(() => {\r\n if (currentCount === props.audioSounds.length - 1) {\r\n setTimeout(() => props.handleNextSlide(), 500);\r\n } else {\r\n if (currentCount === -1) {\r\n props.handleAfterIntro();\r\n }\r\n increment();\r\n }\r\n }, props.pauseSeconds);\r\n };\r\n if (currentCount === -1) {\r\n const soundPromise = soundPlayer.play();\r\n soundPromise.catch((e) => {\r\n setisSoundError(true);\r\n });\r\n } else {\r\n indexPlayer.onended = () => {\r\n setTimeout(() => {\r\n soundPlayer.play();\r\n }, 500);\r\n };\r\n indexPlayer.play();\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (props.isPlaying) {\r\n playCurrentSound();\r\n }\r\n }, [currentCount]);\r\n\r\n const increment = () => {\r\n setcurrentCount(currentCount + 1);\r\n };\r\n\r\n const specialAlertBox = (\r\n <div className=\"specialAlert\">\r\n <div className=\"box\">\r\n <Button onClick={onYes} className={\"closeButton\"}>\r\n <ClearIcon />\r\n </Button>\r\n <div className=\"title\">VIGTIGT</div>\r\n <div className=\"description\">\r\n Lyden fejlede i at afspille, så vi skal have din tilladelse til at\r\n afspille den\r\n </div>\r\n <Button onClick={onYes} className={\"okButton\"}>\r\n OK\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <div>\r\n {!props.isPlaying ? (\r\n <div className=\"soundPrompt\">\r\n <Button onClick={playSounds}>\r\n <PlayArrowIcon />\r\n </Button>\r\n </div>\r\n ) : null}\r\n {isSoundError ? specialAlertBox : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { AudioTrack };\r\n","import { Button } from \"@material-ui/core\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport AlertBox from \"../../../../../../globalComponents/AlertBox\";\r\nimport { getChosenSpokenLanguage } from \"../../../../../../translations/translationProvider\";\r\nimport { StudentQuizStatement } from \"../../../../../model\";\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\n\r\nexport type IStatementProps = {\r\n indexNumber: number;\r\n learningMode: boolean;\r\n currentStatement: number;\r\n handleClick: (id: number) => void;\r\n statement: StudentQuizStatement;\r\n indexSoundSrc?: string;\r\n indexPlayer: HTMLAudioElement;\r\n soundPlayer: HTMLAudioElement;\r\n statementLength: number;\r\n handleNextSlide?: () => void;\r\n languageID: number;\r\n isNoSound?: boolean;\r\n};\r\n\r\nconst Statement: React.FC<IStatementProps> = (props: IStatementProps) => {\r\n const languageString = getChosenSpokenLanguage(props.languageID);\r\n const [isActive, setisActive] = useState(false);\r\n const indexSound = props.indexPlayer;\r\n const sound = props.soundPlayer;\r\n\r\n const [isSoundError, setisSoundError] = useState(false);\r\n\r\n const onYes = () => {\r\n if (props.currentStatement === 0) {\r\n if (props.statement.soundMedia) {\r\n sound.src = props.statement.soundMedia;\r\n sound.play();\r\n sound.onended = () => {\r\n props.handleClick(props.statement.id + 1);\r\n if (props.statementLength === 0) {\r\n if (props.handleNextSlide) {\r\n props.handleNextSlide();\r\n }\r\n }\r\n };\r\n }\r\n } else {\r\n if (props.indexSoundSrc) {\r\n indexSound.src = props.indexSoundSrc;\r\n indexSound.play();\r\n indexSound!.onended = () => {\r\n sound.play();\r\n };\r\n }\r\n }\r\n setisSoundError(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (props.learningMode) {\r\n if (props.currentStatement === props.statement.id) {\r\n setisActive(true);\r\n\r\n sound.src = props.statement.soundMedia;\r\n const soundPromise = sound.play();\r\n soundPromise.catch((e) => {\r\n setisSoundError(true);\r\n });\r\n sound.onended = () => {\r\n if (props.currentStatement === 0) {\r\n if (props.statementLength === 0) {\r\n if (props.handleNextSlide) {\r\n props.handleNextSlide();\r\n }\r\n }\r\n setTimeout(() => props.handleClick(props.statement.id + 1), 2000);\r\n }\r\n };\r\n } else {\r\n setisActive(false);\r\n }\r\n } else {\r\n if (props.currentStatement === props.statement.id) {\r\n setisActive(true);\r\n } else {\r\n setisActive(false);\r\n }\r\n }\r\n }, [props.currentStatement]);\r\n\r\n const specialAlertBox = (\r\n <div className=\"specialAlert\">\r\n <div className=\"box\">\r\n <Button onClick={onYes} className={\"closeButton\"}>\r\n <ClearIcon />\r\n </Button>\r\n <div className=\"title\">VIGTIGT</div>\r\n <div className=\"description\">\r\n Din browser fejlede i at afspille lyden, vi skal have din tilladelse\r\n for at afspille den igen\r\n </div>\r\n <Button onClick={onYes} className={\"okButton\"}>\r\n JA\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n className={isActive ? \"active Statement\" : \"Statement\"}\r\n onClick={() => props.handleClick(props.statement.id)}\r\n >\r\n <Button variant=\"contained\">\r\n {props.statement.id !== 0 ? props.indexNumber : \"?\"}\r\n </Button>\r\n </div>\r\n {isSoundError ? specialAlertBox : null}\r\n </>\r\n );\r\n};\r\n\r\nexport { Statement };\r\n","import React, { useState } from \"react\";\r\nimport {\r\n getChosenLanguage,\r\n getChosenSpokenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../../../translations/translationProvider\";\r\nimport { StudentQuizStatement } from \"../../../../../model\";\r\nimport { AudioTrack } from \"./AudioTrack\";\r\nimport { Statement } from \"./Statement\";\r\nimport { PreloadMedia, MediaType } from \"react-preload-media\";\r\n\r\nimport \"./Statements.scss\";\r\nimport { Button } from \"@material-ui/core\";\r\n\r\nexport type IStatementsProps = {\r\n isLearningMode: boolean;\r\n isNoSound: boolean;\r\n hasSubtitles: boolean;\r\n currentStatement: number;\r\n statements: StudentQuizStatement[];\r\n introQuestion: string;\r\n introQuestionMedia: string;\r\n indexPlayer: HTMLAudioElement;\r\n soundPlayer: HTMLAudioElement;\r\n speed: number;\r\n handleStatementClick: (id: number) => void;\r\n handleNextSlide: () => void;\r\n languageID: number;\r\n isPlaying: boolean;\r\n setisPlaying: React.Dispatch<React.SetStateAction<boolean>>;\r\n};\r\n\r\nconst Statements: React.FC<IStatementsProps> = (props: IStatementsProps) => {\r\n const languageString = getChosenSpokenLanguage(props.languageID);\r\n const isLearningMode = false;\r\n const hasSubtitles = true;\r\n\r\n const introStatement: StudentQuizStatement = {\r\n id: 0,\r\n soundMedia: props.introQuestionMedia,\r\n progressID: -1,\r\n text: props.introQuestion,\r\n correctAnswer: 1,\r\n explanation: \"\",\r\n };\r\n\r\n const indexSoundArray = [\r\n languageString.indexSounds.one,\r\n languageString.indexSounds.two,\r\n languageString.indexSounds.three,\r\n languageString.indexSounds.four,\r\n ];\r\n\r\n function getSoundMedia() {\r\n return props.statements.map((statement) => {\r\n return statement.soundMedia;\r\n });\r\n }\r\n\r\n const sounds = getSoundMedia().map((sound) => {\r\n return { type: MediaType.Audio, url: sound };\r\n });\r\n const indexSounds = indexSoundArray.map((indexSound) => {\r\n return { type: MediaType.Audio, url: props.isNoSound ? \"\" : indexSound };\r\n });\r\n\r\n const loadingDone = () => {};\r\n\r\n const renderStatements = (): JSX.Element[] => {\r\n const tempArray: JSX.Element[] = [];\r\n props.statements.forEach((statement, index) => {\r\n tempArray.push(\r\n <Statement\r\n learningMode={props.isLearningMode}\r\n handleClick={props.handleStatementClick}\r\n key={statement.id}\r\n indexNumber={index + 1}\r\n indexSoundSrc={indexSounds[statement.id - 1].url}\r\n currentStatement={props.currentStatement}\r\n statement={statement}\r\n indexPlayer={props.indexPlayer}\r\n soundPlayer={props.soundPlayer}\r\n languageID={props.languageID}\r\n isNoSound={props.isNoSound}\r\n statementLength={props.statements.length}\r\n />\r\n );\r\n });\r\n return tempArray;\r\n };\r\n\r\n const renderSubs = () => {\r\n if (props.isNoSound && props.currentStatement !== 0) {\r\n return props.statements[props.currentStatement - 1].text;\r\n } else if (props.isLearningMode && props.currentStatement !== 0) {\r\n return props.statements[props.currentStatement - 1].text;\r\n } else if (props.isNoSound || props.isLearningMode) {\r\n return props.introQuestion;\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className={\r\n props.isNoSound\r\n ? \"noSound Statements\"\r\n : props.isLearningMode\r\n ? \"Statements\"\r\n : \"Statements noText\"\r\n }\r\n >\r\n {props.isNoSound ? null : (\r\n <PreloadMedia\r\n media={sounds.concat(indexSounds)}\r\n onFinished={() => loadingDone()}\r\n ></PreloadMedia>\r\n )}\r\n\r\n <Statement\r\n learningMode={props.isLearningMode}\r\n handleClick={props.handleStatementClick}\r\n key={0}\r\n indexNumber={-1}\r\n currentStatement={props.currentStatement}\r\n statement={introStatement}\r\n indexPlayer={props.indexPlayer}\r\n soundPlayer={props.soundPlayer}\r\n statementLength={props.statements.length}\r\n languageID={props.languageID}\r\n handleNextSlide={props.handleNextSlide}\r\n />\r\n {!props.isLearningMode && !props.isNoSound ? (\r\n <AudioTrack\r\n handleNextSlide={props.handleNextSlide}\r\n handleAfterIntro={() => props.handleStatementClick(1)}\r\n pauseSeconds={props.speed}\r\n introQuestionSound={props.introQuestionMedia}\r\n introQuestionText={props.introQuestion}\r\n audioSounds={getSoundMedia()}\r\n indexSounds={indexSoundArray}\r\n soundPlayer={props.soundPlayer}\r\n indexPlayer={props.indexPlayer}\r\n isPlaying={props.isPlaying}\r\n setisPlaying={props.setisPlaying}\r\n />\r\n ) : null}\r\n {renderStatements()}\r\n {props.statements.length !== 0 ? (\r\n <div className=\"text\">{renderSubs()}</div>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { Statements };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../../../translations/translationProvider\";\r\nimport { StudentQuizSlide } from \"../../../../../model\";\r\nimport StatementRow from \"../../../End/components/StatementRow\";\r\nimport \"./LearningMode.scss\";\r\nimport star from \"../../../../../../assets/star_icon.png\";\r\nimport KeyboardArrowDownRoundedIcon from '@mui/icons-material/KeyboardArrowDownRounded';\r\nimport headphones from \"../../../../../../assets/headphone_icon.png\";\r\nimport { LAPTOP_VIEW_WIDTH } from \"../../../../../../constants/viewConstants\";\r\nimport { useWindowDimensions } from \"../../../../../../hooks/useWindowDimensions\";\r\nimport { useMarkSlideMutation, useUnmarkSlideMutation } from \"../../../../../../graphql/generated/graphqlStudent\";\r\n\r\nexport type ILearningModeProps = {\r\n slide: StudentQuizSlide;\r\n learningModeGradeSlide: () => void;\r\n};\r\n\r\nconst LearningMode: React.FC<ILearningModeProps> = (\r\n props: ILearningModeProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const [isShown, setisShown] = useState(true);\r\n const [isMarked, setIsMarked] = useState<boolean>(props.slide.isMarked ? props.slide.isMarked : false);\r\n const [markSlide] = useMarkSlideMutation({variables:{marked_slides:[String(props.slide.id)]}});\r\n const [unmarkSlide] = useUnmarkSlideMutation({variables:{unmarked_slides:[String(props.slide.id)]}});\r\n\r\n const renderStatements = (): JSX.Element[] => {\r\n const statementArray: JSX.Element[] = [];\r\n props.slide.statements.forEach((statement, index) => {\r\n statementArray.push(<StatementRow statement={statement} key={index} isQuiz={true} />);\r\n });\r\n return statementArray;\r\n };\r\n\r\n const { width, height } = useWindowDimensions();\r\n\r\n const [isLaptopView, setIsLaptopView] = useState<boolean>(\r\n LAPTOP_VIEW_WIDTH <= width\r\n );\r\n\r\n\r\n useEffect(() => {\r\n props.learningModeGradeSlide();\r\n }, []);\r\n\r\n const onDetailsClick = () => {\r\n setisShown(!isShown);\r\n };\r\n\r\n const onMarkedClick = () => {\r\n if(!isMarked){\r\n markSlide();\r\n }else{\r\n unmarkSlide();\r\n }\r\n setIsMarked(!isMarked);\r\n }\r\n\r\n const onExplanationClick = () => {\r\n alert(\"EXPLANATION CLICK\");\r\n }\r\n\r\n return (\r\n <div className=\"LearningMode\">\r\n <div className={isShown ? \"statementUI\" : \"statementUI hidden\"}>\r\n <div className=\"rows\">\r\n <div className=\"introQuestion\">{props.slide.introQuestion}</div>\r\n {renderStatements()}\r\n </div>\r\n <div className=\"icons\">\r\n <div>\r\n <button\r\n onClick={onMarkedClick}\r\n className={isMarked ? \"marked\" : \"unmarked\"}\r\n >\r\n <img src={star} alt=\"STAR-ICON\"></img>\r\n </button>\r\n {isLaptopView ? <label><h3>{languageString.studentQuizPage.End.dontLikeImageShorthand}</h3>{languageString.studentQuizPage.End.dontLikeImage}</label> : <label><h3>{languageString.studentQuizPage.End.dontLikeImageShorthand}</h3></label>}\r\n \r\n </div>\r\n {/* <div> //TODO ADD BACK IN WHEN WE HAVE EXPLANATIONS READY FOR ONLINE QUIZ\r\n <button onClick={onExplanationClick}>\r\n <img src={headphones} alt=\"HEADPHONES-ICON\"></img>\r\n </button>\r\n <label>{languageString.studentQuizPage.End.soundExplained}</label>\r\n </div> */}\r\n </div>\r\n <button\r\n className={\r\n isShown ? \"detailsCloseButton clickable\" : \"hidden\"\r\n }\r\n onClick={onDetailsClick}\r\n >\r\n <KeyboardArrowDownRoundedIcon className=\"arrow\"/>\r\n </button>\r\n </div>\r\n\r\n <button\r\n className={\r\n !isShown ? \"detailsButton clickable\" : \"hidden\"\r\n }\r\n onClick={onDetailsClick}\r\n >\r\n <KeyboardArrowDownRoundedIcon className=\"arrow\"/>\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\nexport { LearningMode };\r\n","export default __webpack_public_path__ + \"static/media/sound_icon.2acb996a.png\";","import React, { useEffect, useState } from 'react';\r\nimport { StudentQuizStatement } from '../../../../../model';\r\nimport { Checkbox } from '@material-ui/core';\r\nimport \"./DigitalStatements.scss\";\r\nimport soundIcon from \"../../../../../../assets/sound_icon.png\";\r\n\r\ninterface DigitalStatementsProps {\r\n statements: StudentQuizStatement[];\r\n introQuestion: string;\r\n introQuestionMedia: string;\r\n indexPlayer: HTMLAudioElement;\r\n soundPlayer: HTMLAudioElement;\r\n handleStatementClick: (id: number) => void;\r\n \r\n}\r\n\r\nconst DigitalStatements: React.FC<DigitalStatementsProps> = (props: DigitalStatementsProps) => {\r\n\r\n\r\n const [shouldUpdate, setshouldUpdate] = useState(false);\r\n\r\n const handleStatementClickIOC = (index: number) => {\r\n setshouldUpdate(!shouldUpdate);\r\n props.handleStatementClick(index + 1);\r\n } \r\n\r\n const handleIntroQuestionSoundPlay = () => {\r\n if (props.introQuestionMedia !== '') {\r\n playTextSound(props.introQuestionMedia);\r\n } \r\n }\r\n\r\n const handleStatementSoundPlay = (index: number, e, stopPropagation: boolean) => {\r\n if (props.statements[index].soundMedia && props.statements[index].soundMedia !== '') {\r\n playTextSound(props.statements[index].soundMedia);\r\n };\r\n\r\n if (stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n function playTextSound(mediaSrc: string) {\r\n props.soundPlayer.src = mediaSrc;\r\n props.soundPlayer.load();\r\n props.soundPlayer.play();\r\n }\r\n\r\n const renderStatement = (statement: StudentQuizStatement, index: number) => {\r\n return (\r\n <div key={index} className={statement.answer === 1 ? \"DigitalStatement marked\" : 'DigitalStatement'} onClick={() => handleStatementClickIOC(index)}>\r\n <div className='checkBoxDiv'>\r\n <Checkbox checked={statement.answer === 1}/>\r\n </div>\r\n <span className=\"icon\" onClick={(e) => handleStatementSoundPlay(index, e, true)}><img alt=\"SOUND-ICON\" src={soundIcon}/></span>\r\n <div className='textDiv' onClick={(e) => handleStatementSoundPlay(index, e, false)}>\r\n {statement.text}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n\r\n return (\r\n <div className='DigitalStatements'>\r\n <div className=\"IntroQuestion\" onClick={handleIntroQuestionSoundPlay}><h1> <span className=\"icon\"><img alt=\"SOUND-ICON\" src={soundIcon}/></span>{props.introQuestion}</h1></div>\r\n {/*<div className='helperText'>Vælg det eller de korrekte svar</div>*/} \r\n <div className='statementBox'>{props.statements.map((statement, index) => renderStatement(statement, index))}</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DigitalStatements;","import React, { useEffect, useState } from \"react\";\r\nimport { MediaType, StudentQuizSlide } from \"../../../../model\";\r\nimport { Answers } from \"./SlideComponents/Answers\";\r\nimport { Media } from \"./SlideComponents/Media\";\r\nimport { SlideArrows } from \"./SlideComponents/SlideArrows\";\r\nimport { Statements } from \"./SlideComponents/Statements\";\r\nimport \"./Slide.scss\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../../translations/translationProvider\";\r\nimport { LearningMode } from \"./SlideComponents/LearningMode\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport PauseIcon from \"@mui/icons-material/Pause\";\r\nimport ArrowForwardIcon from \"@mui/icons-material/ArrowForward\";\r\nimport DigitalStatements from \"./SlideComponents/DigitalStatements\";\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\nexport type ISlideProps = {\r\n isLearningMode: boolean;\r\n isNoSound: boolean;\r\n hasSubtitles: boolean;\r\n slide: StudentQuizSlide;\r\n soundPlayer: HTMLAudioElement;\r\n indexPlayer: HTMLAudioElement;\r\n speed: number;\r\n handleNextSlide: () => void;\r\n handlePreviousSlide: () => void;\r\n handleSetAnswer: (statementNumber: number, answer: number) => void;\r\n learningModeGradeSlide: () => void;\r\n languageID: number;\r\n isPlaying: boolean;\r\n setisPlaying: React.Dispatch<React.SetStateAction<boolean>>;\r\n};\r\n\r\nconst Slide: React.FC<ISlideProps> = (props: ISlideProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n //THIS IS WHERE WE SET THE TIME\r\n\r\n const [hasVideoEnded, sethasVideoEnded] = useState(false);\r\n const [isStatementsDone, setisStatementsDone] = useState(false);\r\n const [currentStatement, setcurrentStatement] = useState(0);\r\n\r\n\r\n const location = useLocation();\r\n const nameOfTest = location.state ? location.state.nameOfTest ? location.state.nameOfTest : \"\" : \"\";\r\n\r\n const [isPlaying, setisPlaying] = useState(false);\r\n const [hasFirstStatementPlayed, sethasFirstStatementPlayed] = useState(false);\r\n\r\n const handleAnswerPress = () => {\r\n if (currentStatement !== props.slide.statements.length) {\r\n setcurrentStatement(currentStatement + 1);\r\n } else if (props.isLearningMode) {\r\n setisStatementsDone(true);\r\n }\r\n };\r\n\r\n const handleYesAnswer = () => {\r\n props.handleSetAnswer(currentStatement, 1);\r\n setTimeout(() => handleAnswerPress(), 500);\r\n if (currentStatement === props.slide.statements.length && props.isNoSound) {\r\n setTimeout(() => props.handleNextSlide(), 500);\r\n }\r\n };\r\n const handleNoAnswer = () => {\r\n props.handleSetAnswer(currentStatement, 2);\r\n setTimeout(() => handleAnswerPress(), 500);\r\n if (currentStatement === props.slide.statements.length && props.isNoSound) {\r\n setTimeout(() => props.handleNextSlide(), 500);\r\n }\r\n };\r\n\r\n //Some logic for the new digital teoritest.\r\n //The method should explain itself in how it works\r\n const handleDigitalClick = (statementNumber: number) => {\r\n\r\n props.slide.statements.forEach((statement, index) => {\r\n if(statement.answer){\r\n }else{\r\n props.handleSetAnswer(index + 1, 2);\r\n }\r\n })\r\n \r\n if (props.slide.statements[statementNumber - 1].answer === 1) {\r\n \r\n props.handleSetAnswer(statementNumber, 2);\r\n } else {\r\n props.handleSetAnswer(statementNumber, 1);\r\n }\r\n };\r\n\r\n const handleStatementClick = (id: number) => {\r\n setcurrentStatement(id);\r\n };\r\n\r\n const displayDigitalTest = () => {\r\n return (\r\n <div className=\"DigitalQuizSlide\">\r\n <div className=\"header\"><h4>{nameOfTest}</h4></div>\r\n <div className=\"content\">\r\n\r\n <Media\r\n isNoSound={props.isNoSound}\r\n media={props.slide.media}\r\n setHasVideoEnded={sethasVideoEnded}\r\n hasVideoEnded={hasVideoEnded}\r\n mediaType={props.slide.mediaType}\r\n />\r\n <DigitalStatements\r\n statements={props.slide.statements}\r\n introQuestion={props.slide.introQuestion}\r\n introQuestionMedia={props.slide.introQuestionMedia}\r\n indexPlayer={props.indexPlayer}\r\n soundPlayer={props.soundPlayer}\r\n handleStatementClick={handleDigitalClick}\r\n />\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n if (props.isNoSound) {\r\n return displayDigitalTest();\r\n } else {\r\n return (\r\n <div\r\n className=\"QuizSlide\"\r\n style={{\r\n backgroundColor: props.isLearningMode ? \"#ffffff\" : \"#1d1e20\",\r\n }}\r\n >\r\n <Media\r\n isNoSound={props.isNoSound}\r\n media={props.slide.media}\r\n setHasVideoEnded={sethasVideoEnded}\r\n hasVideoEnded={hasVideoEnded}\r\n mediaType={props.slide.mediaType}\r\n />\r\n\r\n {\r\n //ADDED SLIDE ARROWS TO CONFORM TO THE NEW TEST WHERE YOU CAN NAVIGATE THROUGH WHOLE QUIZ\r\n props.isNoSound ? (\r\n <SlideArrows\r\n handleNext={props.handleNextSlide}\r\n handlePrevious={props.handlePreviousSlide}\r\n />\r\n ) : null\r\n }\r\n {hasVideoEnded ? (\r\n <>\r\n {!isStatementsDone ? (\r\n <>\r\n <Statements\r\n languageID={props.languageID}\r\n isLearningMode={props.isLearningMode}\r\n isNoSound={props.isNoSound}\r\n hasSubtitles={props.isNoSound ? true : props.hasSubtitles}\r\n currentStatement={currentStatement}\r\n statements={props.slide.statements}\r\n introQuestion={props.slide.introQuestion}\r\n introQuestionMedia={props.slide.introQuestionMedia}\r\n indexPlayer={props.indexPlayer}\r\n soundPlayer={props.soundPlayer}\r\n handleStatementClick={handleStatementClick}\r\n handleNextSlide={props.handleNextSlide}\r\n speed={props.speed}\r\n isPlaying={props.isPlaying}\r\n setisPlaying={props.setisPlaying}\r\n />\r\n {props.isNoSound && currentStatement === 0 ? (\r\n <div className=\"Answers\">\r\n <div>\r\n <Button\r\n onClick={() => setcurrentStatement(1)}\r\n className=\"answerButton\"\r\n >\r\n <ArrowForwardIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n ) : null}\r\n {currentStatement !== 0 &&\r\n props.slide.statements.length !== 0 ? (\r\n <Answers\r\n key={currentStatement}\r\n handleNoAnswer={handleNoAnswer}\r\n handleYesAnswer={handleYesAnswer}\r\n isNoSound={props.isNoSound}\r\n currentAnswer={\r\n props.slide.statements[currentStatement - 1].answer\r\n }\r\n nextSound={\r\n currentStatement !== props.slide.statements.length\r\n ? localStorage.getItem(\"iOSAccepted\") === \"TRUE\"\r\n ? props.slide.statements[currentStatement].soundMedia\r\n : undefined\r\n : undefined\r\n }\r\n currentSound={\r\n localStorage.getItem(\"iOSAccepted\") === \"TRUE\"\r\n ? props.slide.statements[currentStatement - 1]\r\n .soundMedia\r\n : undefined\r\n }\r\n soundPlayer={\r\n localStorage.getItem(\"iOSAccepted\") === \"TRUE\"\r\n ? props.soundPlayer\r\n : undefined\r\n }\r\n handleNext={\r\n currentStatement === props.slide.statements.length\r\n ? props.isLearningMode\r\n ? () => setisStatementsDone(true)\r\n : props.handleNextSlide\r\n : undefined\r\n }\r\n isLearningMode={props.isLearningMode}\r\n />\r\n ) : null}\r\n </>\r\n ) : null}\r\n </>\r\n ) : null}\r\n {isStatementsDone ? (\r\n <>\r\n <SlideArrows\r\n handleNext={props.handleNextSlide}\r\n handlePrevious={props.handlePreviousSlide}\r\n />\r\n <LearningMode\r\n slide={props.slide}\r\n learningModeGradeSlide={props.learningModeGradeSlide}\r\n />\r\n </>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n};\r\n\r\nexport { Slide };\r\n","export default __webpack_public_path__ + \"static/media/ur.0d031e3f.png\";","export default __webpack_public_path__ + \"static/media/iconForTest.af9085b5.png\";","import React, { useEffect, useState } from \"react\";\r\nimport IntermediaryLoading from \"../../../../../globalComponents/IntermediaryLoading\";\r\nimport Loading from \"../../../../../globalComponents/Loading\";\r\nimport {\r\n Slide_Progress,\r\n Statement_Grade,\r\n useFinishQuizMutation,\r\n useGradeSlideMutation,\r\n} from \"../../../../../graphql/generated/graphqlStudent\";\r\nimport { MediaType, StudentQuiz, StudentQuizSlide } from \"../../../../model\";\r\nimport CloseRoundedIcon from \"@mui/icons-material/CloseRounded\";\r\nimport \"./Main.scss\";\r\nimport { Slide } from \"./Slide\";\r\nimport { Button } from \"@mui/material\";\r\nimport ArrowBackIcon from \"@mui/icons-material/ArrowBack\";\r\nimport ArrowForwardIcon from \"@mui/icons-material/ArrowForward\";\r\nimport watch from \"../../../../../assets/ur.png\";\r\nimport icon from \"../../../../../assets/iconForTest.png\";\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\n//A RANDOM FUNCTION FOR SHOWING MINUTES\r\nfunction fancyTimeFormat(duration) {\r\n // Hours, minutes and seconds\r\n const hrs = ~~(duration / 3600);\r\n const mins = ~~((duration % 3600) / 60);\r\n const secs = ~~duration % 60;\r\n\r\n // Output like \"1:01\" or \"4:03:59\" or \"123:03:59\"\r\n let ret = \"\";\r\n\r\n let digitalDisplay = \"\";\r\n\r\n if (hrs > 0) {\r\n ret += \"\" + hrs + \":\" + (mins < 10 ? \"0\" : \"\");\r\n }\r\n\r\n ret += \"\" + mins + \":\" + (secs < 10 ? \"0\" : \"\");\r\n ret += \"\" + secs;\r\n\r\n digitalDisplay += (mins === 0 ? \"mindre end 1\" : mins) + \" min\"\r\n\r\n return digitalDisplay;\r\n}\r\n\r\nexport type IMainProps = {\r\n QuizState: StudentQuiz;\r\n setQuizState: React.Dispatch<React.SetStateAction<StudentQuiz | undefined>>;\r\n isLearningMode: boolean;\r\n isNoSound: boolean;\r\n hasSubtitles: boolean;\r\n setToEnd: () => void;\r\n manageAchievement: any;\r\n languageID: number;\r\n \r\n};\r\n\r\nconst Main: React.FC<IMainProps> = (props: IMainProps) => {\r\n const [currentCount, setcurrentCount] = useState(0);\r\n const [isVideo, setisVideo] = useState();\r\n\r\n const [time, settime] = useState<number>(1500);\r\n\r\n useEffect(() => {\r\n const intervalId = setInterval(() => {\r\n if (time === 0 && props.isNoSound) {\r\n finishQuizMethod();\r\n clearInterval(intervalId);\r\n } else {\r\n settime((prevTime) => prevTime - 1);\r\n }\r\n }, 1000);\r\n\r\n return () => clearInterval(intervalId); // Cleanup the interval on component unmount\r\n }, [time, props.isNoSound]);\r\n\r\n const [isPlaying, setisPlaying] = useState(false);\r\n\r\n const [gradeSlide] = useGradeSlideMutation();\r\n const [finishQuiz] = useFinishQuizMutation();\r\n const [isFinishLoading, setisFinishLoading] = useState(false);\r\n\r\n //WE PRELOAD THE NEXT IMAGE HERE\r\n useEffect(() => {\r\n if (props.QuizState.slides[currentCount + 1]) {\r\n if (\r\n props.QuizState.slides[currentCount + 1].mediaType ===\r\n MediaType.AZUREIMG\r\n ) {\r\n new Image().src = props.QuizState.slides[currentCount + 1].media;\r\n }\r\n if (props.QuizState.slides[currentCount + 1]) {\r\n props.QuizState.slides[currentCount + 1].statements.forEach(\r\n (statement) => {\r\n new Audio().src = statement.soundMedia;\r\n }\r\n );\r\n }\r\n }\r\n }, [currentCount]);\r\n\r\n function gradeSlidetoAPI(slide: StudentQuizSlide) {\r\n let gradedSlide: Slide_Progress;\r\n const gradedStatements: Statement_Grade[] = [];\r\n for (const statement of slide.statements) {\r\n if (statement.answer) {\r\n if (statement.correctAnswer === 3) {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: true,\r\n statement_progress_answer: statement.answer,\r\n });\r\n } else {\r\n if (statement.correctAnswer === statement.answer) {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: true,\r\n statement_progress_answer: statement.answer,\r\n });\r\n } else {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: false,\r\n statement_progress_answer: statement.answer,\r\n });\r\n }\r\n }\r\n } else {\r\n gradedStatements.push({\r\n statement_progress_id: String(statement.progressID),\r\n slide_pass_status: false,\r\n statement_progress_answer: statement.answer,\r\n });\r\n }\r\n }\r\n gradedSlide = {\r\n progress_id: String(slide.id),\r\n statement_progress: gradedStatements,\r\n };\r\n return gradedSlide;\r\n }\r\n\r\n const handleNextSlide = () => {\r\n const newSlide = gradeSlidetoAPI(props.QuizState?.slides[currentCount]);\r\n let retryCount = 0;\r\n\r\n if (currentCount < props.QuizState.slides.length - 1) {\r\n if (!props.isLearningMode) {\r\n gradeSlide({ variables: { gradedSlide: newSlide } });\r\n }\r\n setcurrentCount(currentCount + 1);\r\n } else {\r\n setisFinishLoading(true);\r\n if (!props.isLearningMode) {\r\n gradeSlide({ variables: { gradedSlide: newSlide } }).then(async () => {\r\n await finishQuizMethod();\r\n });\r\n } else {\r\n finishQuizMethod();\r\n }\r\n }\r\n };\r\n\r\n const learningModeGradeSlide = () => {\r\n if (!props.isLearningMode) {\r\n return;\r\n }\r\n const newSlide = gradeSlidetoAPI(props.QuizState?.slides[currentCount]);\r\n gradeSlide({ variables: { gradedSlide: newSlide } });\r\n };\r\n\r\n const finishQuizMethod = async () => {\r\n setisFinishLoading(true);\r\n return await finishQuiz({\r\n variables: {\r\n online_quiz_id: localStorage.getItem(\"STUDENT_ONLINE_QUIZ\"),\r\n online_quiz_token: localStorage.getItem(\"STUDENT_ONLINE_QUIZ_TOKEN\"),\r\n },\r\n }).then((data) => {\r\n if (data.data?.finishQuiz) {\r\n props.manageAchievement(\r\n data.data?.finishQuiz?.quiz_pass_status,\r\n data.data.finishQuiz.slides_failed !== 0 ? true : false,\r\n Number(localStorage.getItem(\"STUDENT_ONLINE_QUIZ\"))\r\n );\r\n props.setToEnd();\r\n } else {\r\n return \"error\";\r\n }\r\n });\r\n };\r\n const handlePreviousSlide = () => {\r\n if (currentCount > 0) {\r\n setcurrentCount(currentCount - 1);\r\n }\r\n };\r\n\r\n\r\n// Inside your component\r\nconst [open, setOpen] = useState(false);\r\n\r\nconst handleClickOpen = () => {\r\n setOpen(true);\r\n};\r\n\r\nconst handleClose = () => {\r\n setOpen(false);\r\n};\r\n\r\nconst handleProceed = () => {\r\n // Place your finishQuizMethod logic here\r\n finishQuizMethod();\r\n setOpen(false);\r\n};\r\n\r\n\r\n const handleSetAnswer = (statementNumber: number, answer: number) => {\r\n props.setQuizState((prevState) => {\r\n const copyState = prevState;\r\n if (copyState) {\r\n copyState.slides[currentCount].statements[statementNumber - 1].answer =\r\n answer;\r\n return copyState;\r\n }\r\n });\r\n };\r\n //<div className=\"countdown\">{fancyTimeFormat(time)}</div> : null\r\n \r\n return (\r\n <>\r\n {props.isNoSound ? (\r\n <div className=\"DigitalTestHeader\">\r\n <div className=\"logoNName\">\r\n <div className=\"newLogo\">\r\n <img src={icon}></img>\r\n </div>\r\n <div className=\"name\">Easypiecy Teoritest</div>\r\n </div>\r\n <div className=\"time\">\r\n <div className=\"newLogo\">\r\n <img src={watch}></img>\r\n </div>\r\n <div className=\"timeShow\">{fancyTimeFormat(time)}</div>\r\n </div>\r\n <Button className=\"finishDigitalButton\" onClick={handleClickOpen}>\r\n <CloseRoundedIcon className=\"failed\" />\r\n </Button>\r\n <Dialog\r\n open={open}\r\n onClose={handleClose}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">{\"Afslut teoritest?\"}</DialogTitle>\r\n <DialogContent>\r\n <DialogContentText id=\"alert-dialog-description\">\r\n Er du sikker på du vil afslutte teoritesten før tid?\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={handleClose} color=\"primary\">\r\n Annuller\r\n </Button>\r\n <Button onClick={handleProceed} color=\"primary\" autoFocus>\r\n Afslut test\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n </div>\r\n ) : null}\r\n {props.isNoSound ? null : (\r\n <div className=\"counter\">\r\n {currentCount + 1 + \" : \" + props.QuizState.slides.length}\r\n </div>\r\n )}\r\n {props.isNoSound ? null : (\r\n <Button className=\"finishNowButton\" onClick={finishQuizMethod}>\r\n <CloseRoundedIcon\r\n className=\"failed\"\r\n style={{ color: props.isLearningMode ? \"#1d1e20\" : \"#ffffff\" }}\r\n />\r\n </Button>\r\n )}\r\n <Slide\r\n isLearningMode={props.isLearningMode}\r\n isNoSound={props.isNoSound}\r\n hasSubtitles={props.hasSubtitles}\r\n key={currentCount}\r\n slide={props.QuizState?.slides[currentCount]}\r\n indexPlayer={props.QuizState.indexPlayer}\r\n soundPlayer={props.QuizState.soundPlayer}\r\n handleNextSlide={handleNextSlide}\r\n handlePreviousSlide={handlePreviousSlide}\r\n handleSetAnswer={handleSetAnswer}\r\n speed={props.QuizState.speed}\r\n learningModeGradeSlide={learningModeGradeSlide}\r\n languageID={props.languageID}\r\n isPlaying={isPlaying}\r\n setisPlaying={setisPlaying}\r\n />\r\n {props.isNoSound ? (\r\n <div className=\"DigitalNextButtons\">\r\n {\r\n <Button\r\n variant=\"contained\"\r\n onClick={handlePreviousSlide}\r\n className={currentCount === 0 ? \"hidden\" : \"\"}\r\n >\r\n <ArrowBackIcon />\r\n <div className=\"textContainer\">Forrige</div>\r\n </Button>\r\n }\r\n <div className=\"status\">\r\n {\"Spørgsmål \" +\r\n (currentCount + 1) +\r\n \" ud af \" +\r\n props.QuizState.slides.length}\r\n </div>\r\n <Button variant=\"contained\" onClick={handleNextSlide}>\r\n <div className=\"textContainer\">Næste</div>\r\n <ArrowForwardIcon />\r\n </Button>\r\n </div>\r\n ) : null}\r\n {isFinishLoading ? <IntermediaryLoading /> : null}\r\n </>\r\n );\r\n};\r\n\r\nexport { Main };\r\n","import React from 'react';\r\nimport ReplayIcon from '@mui/icons-material/Replay';\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from '../../../../../translations/translationProvider';\r\nimport { Button } from '@mui/material';\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\r\nimport { useHistory } from 'react-router';\r\nimport { PATH_DASHBOARD } from '../../../../../constants/pathConstants';\r\nimport \"./QuizError.scss\";\r\n\r\nexport type IQuizErrorProps = {\r\n refresh: () => void;\r\n}\r\n\r\nconst QuizError: React.FC<IQuizErrorProps> = (props :IQuizErrorProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const history = useHistory();\r\n\r\n return (\r\n <div className='QuizError'>\r\n <div>\r\n <h3>{languageString.studentQuizPage.Quiz.errorPage.somethingwentWrong}</h3>\r\n </div>\r\n <div className='tryAgain'>\r\n <Button onClick={props.refresh}>{languageString.studentQuizPage.Quiz.errorPage.tryagain}<ReplayIcon/></Button>\r\n </div>\r\n <div className=\"backButton\">\r\n <Button onClick={() => history.push(PATH_DASHBOARD)}><ArrowBackIcon/></Button>\r\n <span>{languageString.studentQuizPage.Quiz.errorPage.returntodashboard}</span>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport { QuizError };","import React, { useEffect, useState } from \"react\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport {\r\n MediaType,\r\n QuizState,\r\n StudentQuiz,\r\n StudentQuizSlide,\r\n StudentQuizStatement,\r\n} from \"../../../model\";\r\nimport { Main } from \"./components/Main\";\r\n\r\nimport shortGiggle from \"../../../../assets/short_giggle.mp3\";\r\nimport shortFlute from \"../../../../assets/short_flute.mp3\";\r\nimport shortMedieval from \"../../../../assets/short_medieval.mp3\";\r\nimport randomImage from \"../../../../assets/testImage.jpg\";\r\nimport Loading from \"../../../../globalComponents/Loading\";\r\nimport {\r\n Online_Quiz,\r\n useCreateFreeQuizMutation,\r\n useCreateQuizMutation,\r\n useStartContentMutation,\r\n} from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { numberToMediaType } from \"../../../modelFunctions\";\r\nimport { QuizError } from \"./components/QuizError\";\r\nimport \"./Quiz.scss\";\r\nimport ScreenRotationIcon from \"@mui/icons-material/ScreenRotation\";\r\nimport { Button } from \"@material-ui/core\";\r\n\r\ninterface locationProps {\r\n isLearningMode: boolean;\r\n hasSubtitles: boolean;\r\n randomEvaluation: boolean;\r\n quizType?: number;\r\n tagString?: string;\r\n slideString?: string;\r\n shouldRefetchByOnlineID?: boolean;\r\n isStrengthTest?: boolean;\r\n}\r\n\r\nexport type IQuizProps = {\r\n setQuizState: React.Dispatch<React.SetStateAction<QuizState>>;\r\n isLearningMode: boolean;\r\n isNoSound: boolean;\r\n languageID: number;\r\n subtitlesID: number;\r\n manageAchievement: any;\r\n id: number;\r\n setonlineID: React.Dispatch<React.SetStateAction<string | undefined>>;\r\n testName: string;\r\n isStudentTeacher?: boolean;\r\n studentTeacherID?: string;\r\n studentTeacherToken?: string;\r\n isFreeQuiz?: boolean;\r\n isDigital?: boolean;\r\n};\r\n\r\nconst Quiz: React.FC<IQuizProps> = (props: IQuizProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const location = useLocation<locationProps>();\r\n const [quizState, setquizState] = useState<StudentQuiz>();\r\n const [hasSubtitles, sethasSubtitles] = useState(\r\n localStorage.getItem(\"studentTestChosenSubs\") !== \"0\" ? true : false\r\n );\r\n const [isError, setisError] = useState(false);\r\n const [shouldRefresh, setshouldRefresh] = useState(false);\r\n\r\n const refresh = () => {\r\n setshouldRefresh(!shouldRefresh);\r\n setisError(false);\r\n };\r\n\r\n const decideQuizType = () => {\r\n if (location.state.shouldRefetchByOnlineID) {\r\n return \"-1\";\r\n } else {\r\n return String(props.id);\r\n }\r\n };\r\n\r\n const convertStringToTagIDs = (stringToSeparate: string) => {\r\n const array = stringToSeparate.split(\",\");\r\n const newarray = array.map((tag) => {\r\n return { tag_id: tag.trim() };\r\n });\r\n return newarray;\r\n };\r\n const convertStringToSlideIDs = (stringToSeparate: string) => {\r\n const array = stringToSeparate.split(\",\");\r\n const newarray = array.map((slide, index) => {\r\n return { quiz_slide_id: slide.trim() };\r\n });\r\n return newarray;\r\n };\r\n\r\n /* THIS IS USED IF THE QUIZ IS A FREE QUIZ */\r\n const [createFreeQuiz] = useCreateFreeQuizMutation({\r\n variables: {\r\n online_quiz: {\r\n quiz_speed: \"2\",\r\n quiz_subtitles:\r\n String(props.subtitlesID) === \"0\"\r\n ? String(props.languageID)\r\n : String(props.subtitlesID),\r\n quiz_language: String(props.languageID),\r\n quiz_read_only: false,\r\n slide_amount: 25,\r\n quiz_learning_mode: props.isLearningMode ? true : undefined,\r\n },\r\n },\r\n });\r\n\r\n /* ###########CRITICAL################# */\r\n /* WE CREATE THE QUIZ WITH THIS MUTATION */\r\n /* BASE-QUIZ ID IS THE DECIDER FOR WHICH KIND OF QUIZ. */\r\n /* -1 FOR TAGS, 0 FOR RANDOM EVALUATION QUIZ, NORMAL FLOW -> TAKES THE QUIZ CONTENT FROM THE ORIGINAL QUIZ*/\r\n const [createQuiz] = useCreateQuizMutation({\r\n variables: {\r\n online_quiz: {\r\n quiz_test_name: location.state\r\n ? location.state.quizType === 10\r\n ? \"Evaluerende slide test\"\r\n : undefined\r\n : undefined,\r\n base_quiz: location.state\r\n ? location.state.randomEvaluation\r\n ? undefined\r\n : decideQuizType()\r\n : undefined,\r\n quiz_speed: \"2\",\r\n quiz_subtitles:\r\n String(props.subtitlesID) === \"0\"\r\n ? String(props.languageID)\r\n : String(props.subtitlesID),\r\n quiz_language: String(props.languageID),\r\n quiz_read_only: false,\r\n slide_amount: 25,\r\n quiz_strength_test: location.state\r\n ? location.state.isStrengthTest\r\n ? true\r\n : false\r\n : false,\r\n quiz_learning_mode: props.isLearningMode ? true : undefined,\r\n quiz_random_evaluation_test: location.state\r\n ? location.state.randomEvaluation || false\r\n : false,\r\n online_Quiz_Tags: location.state\r\n ? location.state.tagString\r\n ? convertStringToTagIDs(location.state.tagString)\r\n : undefined\r\n : undefined,\r\n online_Quiz_Slides: location.state\r\n ? location.state.slideString\r\n ? convertStringToSlideIDs(location.state.slideString)\r\n : undefined\r\n : undefined,\r\n achievement_name: props.testName,\r\n },\r\n },\r\n });\r\n const [startContent] = useStartContentMutation();\r\n\r\n const setQuizStateToEnd = () => {\r\n props.setQuizState(QuizState.End);\r\n };\r\n\r\n //TO REMOVE THE HELP BOX\r\n useEffect(() => {\r\n const element = document.getElementById(\"LeadboosterContainer\");\r\n if (element) {\r\n element.remove();\r\n }\r\n\r\n // Tilføj fjernelse af chatbot-elementet\r\n const chatBotElement = document.getElementById(\"ChatbaseContainer\");\r\n if (chatBotElement) {\r\n chatBotElement.remove();\r\n }\r\n }, []);\r\n\r\n // function fillState() {\r\n // const tempArray: StudentQuizSlide[] = [];\r\n // for (let i = 1; i < 3; i++) {\r\n // const tempStatements: StudentQuizStatement[] = [];\r\n // for (let j = 1; j < 5; j++) {\r\n // tempStatements.push({\r\n // id: j,\r\n // text:\r\n // \"This is statement \" +\r\n // j +\r\n // \" from slide \" +\r\n // i +\r\n // \" hutlithutythl aidattiafk aidattiafk hutlithutythl aidattiafk aidattiafk hutlithutythl aidattiafk aidattiafk\",\r\n // correctAnswer: 1,\r\n // soundMedia: shortMedieval,\r\n // explanation: \"This is explanation\" + j,\r\n // });\r\n // }\r\n\r\n // tempArray.push({\r\n // id: i,\r\n // introQuestion: \"This is slide \" + i,\r\n // introQuestionMedia: shortFlute,\r\n // statements: tempStatements,\r\n // media: i % 2 ? \"https://vimeo.com/546047157/6b3cd844d3\" : randomImage,\r\n // });\r\n // }\r\n // setquizState({\r\n // slides: tempArray,\r\n // indexPlayer: new Audio(),\r\n // soundPlayer: new Audio(),\r\n // });\r\n // }\r\n function convertAPIToQuiz(state: Online_Quiz) {\r\n const tempArray: StudentQuizSlide[] = [];\r\n if (state.slide_progress) {\r\n for (const slide of state.slide_progress) {\r\n const tempStatements: StudentQuizStatement[] = [];\r\n if (slide?.statement_progress) {\r\n let index = 1;\r\n for (const statement of slide.statement_progress) {\r\n if (statement) {\r\n tempStatements.push({\r\n id: index,\r\n progressID: Number(statement.statement_progress_id),\r\n text: statement.sound_text ? statement.sound_text : \"\",\r\n correctAnswer: statement.statement_answer_id!,\r\n soundMedia: statement.sound_location\r\n ? statement.sound_location\r\n : \"\",\r\n explanation: statement.elaboration_Text\r\n ? statement.elaboration_Text\r\n : \"\",\r\n });\r\n }\r\n index++;\r\n }\r\n }\r\n tempArray.push({\r\n id: Number(slide?.progress_id),\r\n media: slide?.media_location!,\r\n isMarked: slide?.progress_is_marked!,\r\n introQuestion: slide?.intro_sound_text ? slide.intro_sound_text : \"\",\r\n introQuestionMedia: slide?.intro_sound_location\r\n ? slide.intro_sound_location\r\n : \"\",\r\n statements: tempStatements,\r\n mediaType: slide?.media_type_id\r\n ? numberToMediaType(Number(slide.media_type_id))!\r\n : MediaType.AZUREIMG,\r\n });\r\n }\r\n }\r\n return tempArray;\r\n }\r\n\r\n useEffect(() => {\r\n if (\r\n props.isStudentTeacher &&\r\n props.studentTeacherID &&\r\n props.studentTeacherID\r\n ) {\r\n startContent({\r\n variables: {\r\n quiz_token_id: props.studentTeacherToken,\r\n online_quiz_id: props.studentTeacherID,\r\n },\r\n }).then((data) => {\r\n if (data.data?.startContent) {\r\n const newState = convertAPIToQuiz(data.data?.startContent);\r\n setquizState({\r\n slides: newState,\r\n indexPlayer: new Audio(),\r\n soundPlayer: new Audio(),\r\n speed: data.data.startContent.quiz_speed_value\r\n ? Number(data.data.startContent.quiz_speed_value)\r\n : 3000,\r\n });\r\n } else {\r\n setisError(true);\r\n }\r\n });\r\n } else {\r\n if (props.isFreeQuiz) {\r\n createFreeQuiz().then((data) => {\r\n if (data.data) {\r\n localStorage.setItem(\r\n \"STUDENT_ONLINE_QUIZ\",\r\n data.data?.createFreeQuiz!.online_quiz_id!\r\n );\r\n localStorage.setItem(\r\n \"STUDENT_ONLINE_QUIZ_TOKEN\",\r\n data.data.createFreeQuiz!.quiz_token_id!\r\n );\r\n props.setonlineID(data.data.createFreeQuiz!.online_quiz_id!);\r\n startContent({\r\n variables: {\r\n quiz_token_id: data.data?.createFreeQuiz?.quiz_token_id,\r\n online_quiz_id: data.data?.createFreeQuiz?.online_quiz_id,\r\n },\r\n }).then((data) => {\r\n if (data.data?.startContent) {\r\n const newState = convertAPIToQuiz(data.data?.startContent);\r\n setquizState({\r\n slides: newState,\r\n indexPlayer: new Audio(),\r\n soundPlayer: new Audio(),\r\n speed: data.data.startContent.quiz_speed_value\r\n ? Number(data.data.startContent.quiz_speed_value)\r\n : 3000,\r\n });\r\n } else {\r\n setisError(true);\r\n }\r\n });\r\n } else {\r\n setisError(true);\r\n }\r\n });\r\n } else {\r\n createQuiz().then((data) => {\r\n if (data.data) {\r\n localStorage.setItem(\r\n \"STUDENT_ONLINE_QUIZ\",\r\n data.data?.createQuiz!.online_quiz_id!\r\n );\r\n localStorage.setItem(\r\n \"STUDENT_ONLINE_QUIZ_TOKEN\",\r\n data.data.createQuiz!.quiz_token_id!\r\n );\r\n props.setonlineID(data.data.createQuiz!.online_quiz_id!);\r\n startContent({\r\n variables: {\r\n quiz_token_id: data.data?.createQuiz?.quiz_token_id,\r\n online_quiz_id: data.data?.createQuiz?.online_quiz_id,\r\n },\r\n }).then((data) => {\r\n if (data.data?.startContent) {\r\n const newState = convertAPIToQuiz(data.data?.startContent);\r\n setquizState({\r\n slides: newState,\r\n indexPlayer: new Audio(),\r\n soundPlayer: new Audio(),\r\n speed: data.data.startContent.quiz_speed_value\r\n ? Number(data.data.startContent.quiz_speed_value)\r\n : 3000,\r\n });\r\n } else {\r\n setisError(true);\r\n }\r\n });\r\n } else {\r\n setisError(true);\r\n }\r\n });\r\n }\r\n }\r\n //fillState();\r\n }, [shouldRefresh]);\r\n\r\n if (quizState) {\r\n return (\r\n <>\r\n <div className=\"Main\">\r\n <Main\r\n QuizState={quizState}\r\n setQuizState={setquizState}\r\n isLearningMode={props.isLearningMode}\r\n isNoSound={props.isDigital ? true : props.isNoSound}\r\n hasSubtitles={hasSubtitles}\r\n languageID={Number(props.languageID)}\r\n setToEnd={setQuizStateToEnd}\r\n manageAchievement={props.manageAchievement}\r\n />\r\n </div>\r\n <div\r\n className=\"screenRotate\"\r\n style={{\r\n backgroundColor: props.isLearningMode ? \"#ffffff\" : \"#1d1e20\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <div\r\n className=\"screenRotateBox\"\r\n style={{\r\n backgroundColor: props.isLearningMode ? \"#1d1e20\" : \"#ffffff\",\r\n }}\r\n >\r\n <ScreenRotationIcon\r\n style={{ color: props.isLearningMode ? \"#ffffff\" : \"#1d1e20\" }}\r\n />\r\n </div>\r\n {/* Opdateret tekst med linjeskift og engelsk tekst */}\r\n <p style={{\r\n color: \"#ffffff\",\r\n fontWeight: \"bold\",\r\n marginTop: \"10px\",\r\n marginBottom: \"10px\",\r\n textAlign: \"center\" // Centrer teksten\r\n }}>\r\n Vend skærmen! <br/> Rotate horizontal.\r\n </p>\r\n </div>\r\n </>\r\n );\r\n } else {\r\n if (isError) {\r\n return <QuizError refresh={refresh} />;\r\n } else {\r\n return (\r\n <Loading\r\n loadingText={languageString.studentQuizPage.Quiz.loadingText}\r\n />\r\n );\r\n }\r\n }\r\n};\r\n\r\nexport { Quiz };\r\n","import {\r\n Button,\r\n Checkbox,\r\n FormControlLabel,\r\n FormLabel,\r\n Radio,\r\n RadioGroup,\r\n} from \"@material-ui/core\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport redArrow from \"../../../../assets/red_Arrow.png\";\r\nimport \"./Setup.scss\";\r\nimport { PATH_DASHBOARD } from \"../../../../constants/pathConstants\";\r\nimport { QuizState } from \"../../../model\";\r\nimport QuestionMarkIcon from \"@mui/icons-material/QuestionMark\";\r\ninterface Inputs {\r\n mode: string;\r\n chosenLanguage: number;\r\n chosenSubtitles: number;\r\n}\r\n\r\nexport type ISetupProps = {\r\n id: number;\r\n isLearningMode: boolean;\r\n setIsLearningMode: React.Dispatch<React.SetStateAction<boolean>>;\r\n isNoSound: boolean;\r\n setIsNoSound: React.Dispatch<React.SetStateAction<boolean>>;\r\n isDigital: boolean;\r\n setIsDigital: React.Dispatch<React.SetStateAction<boolean>>;\r\n testIcon?: string;\r\n nameOfTest: string;\r\n testType: string;\r\n setQuizState: React.Dispatch<React.SetStateAction<QuizState>>;\r\n languageID: number;\r\n setlanguageID: React.Dispatch<React.SetStateAction<number>>;\r\n subtitlesID: number;\r\n setsubtitlesID: React.Dispatch<React.SetStateAction<number>>;\r\n isTabletMode: boolean;\r\n setisTabletMode: React.Dispatch<React.SetStateAction<boolean>>;\r\n quizLanguage: string;\r\n};\r\n\r\nconst Setup: React.FC<ISetupProps> = (props: ISetupProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const history = useHistory();\r\n const { register, handleSubmit, watch } = useForm<Inputs>();\r\n const [learningMode, setLearningMode] = useState(false);\r\n const [chosenTestLanguage, setChosenTestLanguage] = useState(\r\n Number(localStorage.getItem(\"studentTestChosenLanguage\")) || 0\r\n );\r\n const [chosenTestSubs, setChosenTestSubs] = useState(\r\n Number(localStorage.getItem(\"studentTestChosenSubs\")) || 0\r\n );\r\n\r\n const [iOS, setiOS] = useState(\r\n localStorage.getItem(\"iOSAccepted\") === \"TRUE\" ? true : false\r\n );\r\n\r\n useEffect(() => {\r\n const isSafari = navigator.vendor == \"Apple Computer, Inc.\";\r\n if (isSafari) {\r\n props.setIsDigital(true);\r\n props.setIsNoSound(true);\r\n }\r\n }, []);\r\n\r\n const [iOSAlert, setiOSAlert] = useState(false);\r\n\r\n const [isDescription1Expanded, setisDescription1Expanded] =\r\n useState<boolean>(false);\r\n const [isDescription2Expanded, setisDescription2Expanded] =\r\n useState<boolean>(false);\r\n const [isDescription3Expanded, setisDescription3Expanded] =\r\n useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n if (iOS) {\r\n localStorage.setItem(\"iOSAccepted\", \"TRUE\");\r\n } else {\r\n localStorage.setItem(\"iOSAccepted\", \"FALSE\");\r\n }\r\n }, [iOS]);\r\n\r\n const handleChangeiOS = () => {\r\n if (!iOS) {\r\n setiOSAlert(true);\r\n }\r\n setiOS(!iOS);\r\n };\r\n\r\n const onSubmit: SubmitHandler<Inputs> = async (submitData) => {\r\n localStorage.setItem(\r\n \"studentTestChosenLanguage\",\r\n String(submitData.chosenLanguage)\r\n );\r\n localStorage.setItem(\r\n \"studentTestChosenSubs\",\r\n String(submitData.chosenSubtitles)\r\n );\r\n props.setlanguageID(submitData.chosenLanguage);\r\n props.setsubtitlesID(\r\n submitData.chosenSubtitles ? submitData.chosenSubtitles : 0\r\n );\r\n props.setQuizState(QuizState.Quiz);\r\n };\r\n\r\n const backToDashboard = () => {\r\n history.push(PATH_DASHBOARD);\r\n };\r\n\r\n const handleLearningModeChange = (event) => {\r\n if (event.target.value === \"1\") {\r\n props.setIsLearningMode(true);\r\n props.setIsNoSound(false);\r\n props.setIsDigital(false);\r\n } else if (event.target.value === \"2\") {\r\n props.setIsDigital(true);\r\n props.setIsNoSound(true);\r\n props.setIsLearningMode(false);\r\n } else {\r\n props.setIsLearningMode(false);\r\n props.setIsNoSound(false);\r\n props.setIsDigital(false);\r\n }\r\n };\r\n\r\n const [languages, setLanguages] = useState([\r\n {\r\n id: 1,\r\n name: languageString.studentQuizPage.Setup.languages.danish,\r\n },\r\n {\r\n id: 2,\r\n name: languageString.studentQuizPage.Setup.languages.english,\r\n },\r\n ]);\r\n const [subs, setSubs] = useState([\r\n { id: 0, name: languageString.studentQuizPage.Setup.languages.none },\r\n {\r\n id: 1,\r\n name: languageString.studentQuizPage.Setup.languages.danish,\r\n },\r\n {\r\n id: 2,\r\n name: languageString.studentQuizPage.Setup.languages.english,\r\n },\r\n {\r\n id: 3,\r\n name: languageString.studentQuizPage.Setup.languages.faerosk,\r\n },\r\n {\r\n id: 4,\r\n name: languageString.studentQuizPage.Setup.languages.polish,\r\n },\r\n {\r\n id: 5,\r\n name: languageString.studentQuizPage.Setup.languages.arabic,\r\n },\r\n {\r\n id: 6,\r\n name: languageString.studentQuizPage.Setup.languages.german,\r\n },\r\n ]);\r\n\r\n const renderLanguages = () => {\r\n const languageArray: JSX.Element[] = [];\r\n const allowed = props.quizLanguage\r\n ? props.quizLanguage.split(\",\").map((string) => {\r\n return Number(string);\r\n })\r\n : null;\r\n if (allowed !== null && allowed.includes(0)) {\r\n languages.forEach((language) => {\r\n if (language.id === 1) {\r\n if (language.id === chosenTestLanguage) {\r\n languageArray.push(\r\n <option selected key={language.id} value={language.id}>\r\n {language.name}\r\n </option>\r\n );\r\n } else {\r\n languageArray.push(\r\n <option key={language.id} value={language.id}>\r\n {language.name}\r\n </option>\r\n );\r\n }\r\n }\r\n });\r\n } else {\r\n languages.forEach((language) => {\r\n if (language.id === chosenTestLanguage) {\r\n languageArray.push(\r\n <option selected key={language.id} value={language.id}>\r\n {language.name}\r\n </option>\r\n );\r\n } else {\r\n languageArray.push(\r\n <option key={language.id} value={language.id}>\r\n {language.name}\r\n </option>\r\n );\r\n }\r\n });\r\n }\r\n return languageArray;\r\n };\r\n\r\n const renderSubs = () => {\r\n const subArray: JSX.Element[] = [];\r\n if (props.quizLanguage === \"ALL\") {\r\n subs.forEach((sub) => {\r\n if (props.isNoSound && sub.id === 0) {\r\n } else {\r\n if (sub.id === chosenTestSubs) {\r\n subArray.push(\r\n <option selected key={sub.id} value={sub.id}>\r\n {sub.name}\r\n </option>\r\n );\r\n } else {\r\n subArray.push(\r\n <option key={sub.id} value={sub.id}>\r\n {sub.name}\r\n </option>\r\n );\r\n }\r\n }\r\n });\r\n } else {\r\n const allowed = props.quizLanguage\r\n ? props.quizLanguage.split(\",\").map((string) => {\r\n return Number(string);\r\n })\r\n : null;\r\n if (allowed !== null && allowed.includes(0)) {\r\n subs.forEach((sub) => {\r\n if (props.isNoSound && sub.id === 0) {\r\n } else {\r\n if (sub.id === chosenTestSubs) {\r\n subArray.push(\r\n <option selected key={sub.id} value={sub.id}>\r\n {sub.name}\r\n </option>\r\n );\r\n } else {\r\n if (allowed.includes(sub.id)) {\r\n subArray.push(\r\n <option key={sub.id} value={sub.id}>\r\n {sub.name}\r\n </option>\r\n );\r\n }\r\n }\r\n }\r\n });\r\n }else{\r\n subs.forEach((sub) => {\r\n if (props.isNoSound && sub.id === 0) {\r\n } else {\r\n if (sub.id === chosenTestSubs) {\r\n subArray.push(\r\n <option selected key={sub.id} value={sub.id}>\r\n {sub.name}\r\n </option>\r\n );\r\n } else {\r\n subArray.push(\r\n <option key={sub.id} value={sub.id}>\r\n {sub.name}\r\n </option>\r\n );\r\n }\r\n }\r\n });\r\n }\r\n }\r\n return subArray;\r\n };\r\n\r\n const setupInputs = (\r\n <div className=\"inputs\">\r\n <h3>{languageString.studentQuizPage.Setup.setupOfTest}</h3>\r\n\r\n <div>\r\n <FormLabel component=\"legend\" className=\"modeHeader\">\r\n {languageString.studentQuizPage.Setup.smallHeader}\r\n </FormLabel>\r\n <RadioGroup\r\n aria-label=\"Prøve-type\"\r\n defaultValue={\"2\"}\r\n {...register(\"mode\")}\r\n onChange={handleLearningModeChange}\r\n >\r\n <FormControlLabel\r\n value=\"2\"\r\n control={<Radio />}\r\n label={\r\n <>\r\n {languageString.studentSettings.iOSCheckbox}{\" \"}\r\n <Button\r\n className={\r\n isDescription3Expanded\r\n ? \"descriptionButton active\"\r\n : \"descriptionButton\"\r\n }\r\n onClick={() =>\r\n setisDescription3Expanded(!isDescription3Expanded)\r\n }\r\n >\r\n <QuestionMarkIcon />\r\n </Button>\r\n </>\r\n }\r\n />\r\n {isDescription3Expanded ? (\r\n <FormLabel className=\"description\">\r\n {languageString.studentQuizPage.Setup.iOSExplainer}\r\n </FormLabel>\r\n ) : null}\r\n\r\n <FormControlLabel\r\n value=\"0\"\r\n control={<Radio />}\r\n label={\r\n <>\r\n {languageString.studentQuizPage.Setup.standardMode}{\" \"}\r\n <Button\r\n className={\r\n isDescription1Expanded\r\n ? \"descriptionButton active\"\r\n : \"descriptionButton\"\r\n }\r\n onClick={() =>\r\n setisDescription1Expanded(!isDescription1Expanded)\r\n }\r\n >\r\n <QuestionMarkIcon />\r\n </Button>\r\n </>\r\n }\r\n />\r\n {isDescription1Expanded ? (\r\n <FormLabel className=\"description\">\r\n {languageString.studentQuizPage.Setup.standardModeDescription}\r\n </FormLabel>\r\n ) : null}\r\n\r\n <FormControlLabel\r\n value=\"1\"\r\n control={<Radio />}\r\n label={\r\n <>\r\n {languageString.studentQuizPage.Setup.learningMode}{\" \"}\r\n <Button\r\n className={\r\n isDescription2Expanded\r\n ? \"descriptionButton active\"\r\n : \"descriptionButton\"\r\n }\r\n onClick={() =>\r\n setisDescription2Expanded(!isDescription2Expanded)\r\n }\r\n >\r\n <QuestionMarkIcon />\r\n </Button>\r\n </>\r\n }\r\n />\r\n\r\n {isDescription2Expanded ? (\r\n <FormLabel className=\"description\">\r\n {languageString.studentQuizPage.Setup.learningModeDescription}\r\n </FormLabel>\r\n ) : null}\r\n </RadioGroup>\r\n <label></label>\r\n {/* <div className=\"tabletCheck\">\r\n <div className=\"header\">\r\n <Checkbox className=\"tabletCheckbox\" value={props.isTabletMode} onChange={() => props.setIsLearningMode(!props.isTabletMode)} />\r\n <label>Tablet mode</label>\r\n </div>\r\n </div> */}\r\n </div>\r\n <div className=\"select\">\r\n <label>{languageString.studentQuizPage.Setup.chooseTestSound}</label>{\" \"}\r\n <select {...register(\"chosenLanguage\")}>\r\n {renderLanguages()}\r\n </select>\r\n </div>\r\n <div className=\"select\">\r\n <label>{languageString.studentQuizPage.Setup.chooseTestSubs}</label>\r\n <select\r\n {...register(\"chosenSubtitles\")}\r\n disabled={!props.isLearningMode && !props.isDigital}\r\n value={!props.isLearningMode && !props.isDigital ? 0 : undefined}\r\n >\r\n {renderSubs()}\r\n </select>\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"QuizSetup\">\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <div className=\"leftSide\">\r\n <div className=\"backButton clickable\" onClick={backToDashboard}>\r\n <button className=\"clickable\">\r\n <img alt=\"LEFT-ARROW\" src={redArrow}></img>\r\n </button>\r\n <span>{languageString.generalMessages.backButton}</span>\r\n </div>\r\n <div className=\"header\">\r\n <h1>{props.testType}</h1>\r\n <hr></hr>\r\n <div>\r\n {props.testIcon ? <img src={props.testIcon} /> : null}\r\n <span>{props.nameOfTest}</span>\r\n <span className=\"description\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"rightSide\">\r\n {setupInputs}\r\n\r\n <Button variant=\"contained\" className=\"finishButton\" type=\"submit\">\r\n {languageString.studentQuizPage.Setup.startTest}\r\n </Button>\r\n </div>\r\n </form>\r\n {iOSAlert ? (\r\n <div className=\"iOSAlert\">\r\n <div className=\"box\">\r\n <div className=\"text\">\r\n {languageString.studentSettings.iOSAlertText}\r\n </div>\r\n <Button onClick={() => setiOSAlert(false)}>\r\n {languageString.studentSettings.continue}\r\n </Button>\r\n </div>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { Setup };","import React, { useEffect, useState } from \"react\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport {\r\n useManageAchievementMutation,\r\n useManageBeforeDrivingMutation,\r\n useManageEvalTestsMutation,\r\n useManageStartContentMutation,\r\n useManageSubjectMutation,\r\n} from \"../../../graphql/generated/graphqlStudent\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../translations/translationProvider\";\r\nimport { QuizState } from \"../../model\";\r\nimport { End } from \"./End/End\";\r\nimport { Quiz } from \"./Quiz/Quiz\";\r\nimport { Setup } from \"./Setup/Setup\";\r\nimport bookIcon from \"../../../assets/iconsStudentDashboard/book_icon.png\";\r\nimport { Stopwatch } from \"../../../globalComponents/Stopwatch\";\r\n\r\ninterface stateReceived {\r\n id: number;\r\n nameOfTest: string;\r\n testType: string;\r\n img: string;\r\n errorCheck?: boolean;\r\n quizType?: number;\r\n achievementID?: number;\r\n shouldRefetchByOnlineID?: boolean;\r\n onlineQuizID: string;\r\n achievementTypeID?: string;\r\n quizLanguage?: string;\r\n}\r\n\r\nexport type IStudentQuizPageProps = {\r\n isStudentTeacher?: boolean;\r\n studentTeacherID?: string;\r\n studentTeacherToken?: string;\r\n isFreeQuiz?: boolean;\r\n isDigital?: boolean;\r\n};\r\n\r\nconst StudentQuizPage: React.FC<IStudentQuizPageProps> = (\r\n props: IStudentQuizPageProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const location = useLocation<stateReceived>();\r\n const id = location.state ? location.state.id : 0;\r\n const [isLearningMode, setisLearningMode] = useState<boolean>(false);\r\n const [isNoSound, setisNoSound] = useState<boolean>(true);\r\n const [isDigital, setIsDigital] = useState<boolean>(true);\r\n const [languageID, setlanguageID] = useState(1);\r\n const [subtitlesID, setsubtitlesID] = useState(0);\r\n\r\n const [timeString, settimeString] = useState(\"00:00:00\");\r\n\r\n /*This is the state that controls where we are in the quiz*/\r\n const [quizState, setQuizState] = useState<QuizState>(\r\n location.state\r\n ? location.state.errorCheck\r\n ? QuizState.End\r\n : QuizState.Setup\r\n : props.isFreeQuiz\r\n ? QuizState.Setup\r\n : QuizState.Quiz\r\n );\r\n\r\n const [isTabletMode, setisTabletMode] = useState(false);\r\n\r\n const [shouldFetchByOnlineID, setshouldFetchByOnlineID] = useState(\r\n location.state\r\n ? location.state.shouldRefetchByOnlineID\r\n ? true\r\n : false\r\n : false\r\n );\r\n const [onlineID, setonlineID] = useState<string | undefined>(\r\n location.state\r\n ? location.state.onlineQuizID\r\n ? location.state.onlineQuizID\r\n : undefined\r\n : undefined\r\n );\r\n\r\n const [manageAchievementMutation] = useManageAchievementMutation();\r\n\r\n useEffect(() => {\r\n const element = document.getElementById(\"LeadboosterContainer\");\r\n if (element) {\r\n element.remove();\r\n }\r\n }, []);\r\n\r\n /* THIS IS RESPONSIBLE FOR UPDATING THE ACHIEVEMENT ON THE STUDENT DASHBOARD */\r\n const manageAchievement = async (\r\n passStatus: boolean,\r\n hasFails: boolean,\r\n onlineQuizID?: number\r\n ) => {\r\n if (!props.isFreeQuiz) {\r\n if (!props.isStudentTeacher) {\r\n if (location.state.quizType && location.state.achievementID) {\r\n return manageAchievementMutation({\r\n variables: {\r\n achievement: {\r\n achievement_has_fails: hasFails ? 1 : 0,\r\n achievement_id: String(location.state.achievementID),\r\n achievement_status: passStatus ? 1 : 0,\r\n achievement_quiz_id: onlineQuizID ? onlineQuizID : undefined,\r\n time_spent: timeString\r\n },\r\n },\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n const renderQuizState = () => {\r\n switch (quizState) {\r\n case QuizState.Setup:\r\n return (\r\n <Setup\r\n id={id}\r\n isLearningMode={isLearningMode}\r\n setIsLearningMode={setisLearningMode}\r\n isNoSound={isNoSound}\r\n setIsNoSound={setisNoSound}\r\n isDigital={isDigital}\r\n setIsDigital={setIsDigital}\r\n nameOfTest={\r\n props.isFreeQuiz\r\n ? languageString.studentQuizPage.Setup.freeQuizFreeTest\r\n : location.state.nameOfTest\r\n }\r\n testType={\r\n props.isFreeQuiz\r\n ? \"TEORIUNDERVISNING.DK\"\r\n : location.state.testType\r\n }\r\n setQuizState={setQuizState}\r\n testIcon={props.isFreeQuiz ? bookIcon : location.state.img}\r\n languageID={languageID}\r\n setlanguageID={setlanguageID}\r\n subtitlesID={subtitlesID}\r\n setsubtitlesID={setsubtitlesID}\r\n isTabletMode={isTabletMode}\r\n setisTabletMode={setisTabletMode}\r\n quizLanguage={props.isFreeQuiz ? \"\" : location.state.quizLanguage}\r\n />\r\n );\r\n case QuizState.Quiz:\r\n return (\r\n <>\r\n <Stopwatch setNewTime={settimeString}/>\r\n <Quiz\r\n id={id}\r\n isLearningMode={isLearningMode}\r\n isNoSound={isNoSound}\r\n languageID={languageID}\r\n subtitlesID={subtitlesID}\r\n setQuizState={setQuizState}\r\n manageAchievement={manageAchievement}\r\n setonlineID={setonlineID}\r\n testName={\r\n location.state ? location.state.nameOfTest : \"Klasse test\"\r\n }\r\n isStudentTeacher={props.isStudentTeacher}\r\n studentTeacherID={props.studentTeacherID}\r\n studentTeacherToken={props.studentTeacherToken}\r\n isFreeQuiz={props.isFreeQuiz}\r\n isDigital={props.isDigital}\r\n /></>\r\n );\r\n case QuizState.End:\r\n return (\r\n <End\r\n id={id}\r\n shouldFetchByOnlineID={\r\n props.isStudentTeacher ? true : shouldFetchByOnlineID\r\n }\r\n onlineID={\r\n props.isStudentTeacher ? props.studentTeacherID : onlineID\r\n }\r\n isFreeQuiz={props.isFreeQuiz}\r\n />\r\n );\r\n }\r\n };\r\n\r\n return <div style={{ height: \"100%\" }}>{renderQuizState()}</div>;\r\n};\r\n\r\nexport default StudentQuizPage;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport arrowIcon from \"../../../../assets/white_Arrow.png\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useVerifyStudentMutation } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { LoginStep } from \"../../../model\";\r\nimport \"../style/AccessCode.scss\";\r\nimport { Button } from \"@mui/material\";\r\nimport DoneOutlineRoundedIcon from '@mui/icons-material/DoneOutlineRounded';\r\n\r\ninterface Inputs {\r\n passcode: string;\r\n mobileNumber: string;\r\n}\r\n\r\nexport type IAccessCodeProps = {\r\n setLoginStep: any;\r\n mobileNumber: string;\r\n setMobileNumber: (value: string | ((prevState: string) => string)) => void;\r\n setIsLoading: (value: boolean | ((prevState: boolean) => boolean)) => void;\r\n setpreFix: (value: string) => void\r\n preFix: string;\r\n};\r\n\r\nconst AccessCode: React.FC<IAccessCodeProps> = (props: IAccessCodeProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n const [errorMessage, setErrorMessage] = useState<string>();\r\n\r\n const {\r\n register,\r\n handleSubmit,\r\n watch,\r\n formState: { errors },\r\n setError,\r\n setValue\r\n } = useForm<Inputs>();\r\n\r\n const [activateCode] = useVerifyStudentMutation();\r\n\r\n useEffect(() => {\r\n if(props.mobileNumber){\r\n setValue(\"mobileNumber\", props.mobileNumber)\r\n }\r\n }, []);\r\n\r\n const onSubmit: SubmitHandler<Inputs> = async (submitData) => {\r\n props.setIsLoading(true);\r\n activateCode({\r\n variables: {\r\n student_phone_number: props.preFix + submitData.mobileNumber,\r\n entry_code: submitData.passcode,\r\n },\r\n }).then((data) => {\r\n switch (data.data?.VerifyStudent) {\r\n case \"NOT_FOUND\":\r\n setErrorMessage(\r\n languageString.studentLoginPage.AccessCode.errorMessages.notFound\r\n );\r\n break;\r\n case \"MAXIMUM_USES_CODE\":\r\n setErrorMessage(\r\n languageString.studentLoginPage.AccessCode.errorMessages.alreadyUsed\r\n );\r\n break;\r\n case \"EXPIRED_CODE\":\r\n setErrorMessage(\r\n languageString.studentLoginPage.AccessCode.errorMessages.expired\r\n );\r\n break;\r\n case \"DUPLICATE_NUMBER\":\r\n setErrorMessage(\r\n languageString.studentLoginPage.AccessCode.errorMessages.mobileUsed\r\n );\r\n break;\r\n case \"USER_VERIFIED\":\r\n setErrorMessage(\r\n languageString.studentLoginPage.AccessCode.errorMessages.success\r\n );\r\n props.setMobileNumber(watch(\"mobileNumber\"));\r\n setTimeout(() => {props.setLoginStep(LoginStep.CreatePin)}, 1500)\r\n break;\r\n case \"ACCESS_EXTENDED\":\r\n setErrorMessage(\r\n languageString.studentLoginPage.AccessCode.errorMessages.alreadyExisting\r\n );\r\n props.setMobileNumber(watch(\"mobileNumber\"));\r\n setTimeout(() => {props.setLoginStep(LoginStep.CreatePin)}, 1500)\r\n break;\r\n default:\r\n setErrorMessage(\"Kritisk fejl, kontakt supportchatten\");\r\n break;\r\n }\r\n props.setIsLoading(false)\r\n });\r\n \r\n };\r\n\r\n return (\r\n <div className=\"AccessCodePage\">\r\n <div className=\"lastColumn\">\r\n <form onSubmit={handleSubmit(onSubmit)}>\r\n <div className=\"firstInput\">\r\n <input\r\n defaultValue={\"\"}\r\n placeholder={\r\n languageString.studentLoginPage.AccessCode.typeCodePlaceholder\r\n }\r\n {...register(\"passcode\", { required: true })}\r\n className={errors.passcode ? \"codeInput formError\" : \"codeInput\"}\r\n />\r\n </div>\r\n <div className=\"firstInput\">\r\n <input\r\n value={props.preFix}\r\n onChange={(event) => props.setpreFix(event.target.value)}\r\n className=\"preFix\"\r\n />\r\n <input\r\n defaultValue={props.mobileNumber}\r\n placeholder={\r\n languageString.studentLoginPage.mobileNumberPlaceholder\r\n }\r\n {...register(\"mobileNumber\", { required: true })}\r\n className={errors.mobileNumber ? \"mobileInput formError\" : \"mobileInput\"}\r\n />\r\n </div>\r\n <span className=\"error\">{errorMessage ? errorMessage : null}</span>\r\n\r\n <div className=\"bottomButton\">\r\n <Button type=\"submit\" variant=\"contained\">\r\n <span>{languageString.studentLoginPage.continueButton}</span><DoneOutlineRoundedIcon/>\r\n </Button>\r\n \r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { AccessCode };\r\n","import { Button } from '@mui/material';\r\nimport React from 'react';\r\nimport { getStringsForChosenLanguage, getChosenLanguage } from '../../../../translations/translationProvider';\r\nimport \"../style/AccessExpired.scss\";\r\n\r\ninterface AccessExpiredProps {\r\n \r\n}\r\n\r\nconst AccessExpired: React.FC<AccessExpiredProps> = () => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n\r\n\r\n const handleExtend = () => {\r\n window.open(\"https://www.teoriundervisning.dk/forlaeng\");\r\n }\r\n \r\n return (\r\n <div className=\"AccessExpiredPage\">\r\n <div></div>\r\n <div>{languageString.studentLoginPage.expiredCode}</div>\r\n <div><Button onClick={handleExtend} variant=\"contained\">{languageString.studentLoginPage.extend}</Button></div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AccessExpired;","import React, { useEffect, useState } from \"react\";\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport arrowIcon from \"../../../../assets/white_Arrow.png\";\r\nimport VerificationInput from \"../../../../globalComponents/VerificationInput\";\r\nimport { fillArrayWithEmptyStrings } from \"../../../../services/utilFunctions\";\r\nimport { LoginStep } from \"../../../model\";\r\nimport { useVerifyMobileNoLazyQuery } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { Button } from \"@mui/material\";\r\nimport SendIcon from \"@mui/icons-material/Send\";\r\nimport \"../style/Confirmation.scss\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\n\r\nexport type IConfirmationProps = {\r\n setLoginStep: any;\r\n setMobileNumber: (value: string | ((prevState: string) => string)) => void;\r\n mobileNumber: string;\r\n confirmationCode: string;\r\n isAccessCode: boolean;\r\n setpreFix: (value: string) => void\r\n preFix: string;\r\n};\r\n\r\nconst Confirmation: React.FC<IConfirmationProps> = (\r\n props: IConfirmationProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [verificationCode, setVerificationCode] = useState<string>(\"\");\r\n const [code, setCode] = useState<string>(props.confirmationCode);\r\n const [isSMSsent, setisSMSsent] = useState(false);\r\n const [isLoading, setisLoading] = useState(false);\r\n const [verificationInput, setVerificationInput] = useState<string[]>(() =>\r\n fillArrayWithEmptyStrings(6)\r\n );\r\n const [error, setError] = useState(false);\r\n const [confirmationError, setconfirmationError] = useState<string>();\r\n const [goodToGo, setGoodToGo] = useState(false);\r\n\r\n const [getConfirmationCode, { data, loading }] = useVerifyMobileNoLazyQuery({\r\n fetchPolicy: \"network-only\",\r\n onCompleted: (data) => {\r\n if (data.verifyMobileNo.firstString === \"student_not_found\") {\r\n setconfirmationError(\"Nummeret har ikke adgang til siden\");\r\n setisLoading(false);\r\n } else if (\r\n data.verifyMobileNo.firstString === \"\" &&\r\n data.verifyMobileNo.secondString === \"\"\r\n ) {\r\n setconfirmationError(\"Nummeret har allerede en bruger koblet til\");\r\n } else {\r\n setCode(\r\n data.verifyMobileNo.firstString + data.verifyMobileNo.secondString\r\n );\r\n setisSMSsent(true);\r\n }\r\n setisLoading(false);\r\n },\r\n onError: (data) => {\r\n setisLoading(false);\r\n setconfirmationError(\"Noget gik galt, prøv igen\");\r\n },\r\n nextFetchPolicy: \"network-only\",\r\n });\r\n\r\n useEffect(() => {\r\n if (isLoading) {\r\n setisLoading(false);\r\n }\r\n }, [loading]);\r\n\r\n useEffect(() => {\r\n if (verificationCode.length > 5 && verificationCode === code) {\r\n setGoodToGo(true);\r\n setError(false);\r\n } else if (verificationCode.length > 5 && verificationCode !== code) {\r\n setError(true);\r\n } else {\r\n setGoodToGo(false);\r\n setError(false);\r\n }\r\n }, [verificationCode]);\r\n\r\n const errorMessage = (\r\n <span>{languageString.studentLoginPage.Confirmation.errorMessage}</span>\r\n );\r\n\r\n const handleContinue = () => {\r\n if (props.isAccessCode) {\r\n props.setLoginStep(LoginStep.FirstLoginAccessCode);\r\n } else {\r\n props.setLoginStep(LoginStep.CreatePin);\r\n }\r\n };\r\n\r\n const handleSendSMS = () => {\r\n if (props.mobileNumber) {\r\n setisLoading(true);\r\n getConfirmationCode({\r\n variables: { student_phone_number: props.preFix + props.mobileNumber },\r\n });\r\n }\r\n };\r\n const handleChangePhoneNumber = (event) => {\r\n const re = /^[0-9\\b]+$/;\r\n if (event.target.value === \"\" || re.test(event.target.value)) {\r\n props.setMobileNumber(event.target.value);\r\n }\r\n };\r\n\r\n const renderMobileInput = () => {\r\n return (\r\n <div className=\"mobileInput\">\r\n <div className=\"firstInput\">\r\n <input\r\n value={props.preFix}\r\n onChange={(event) => props.setpreFix(event.target.value)}\r\n className=\"preFix\"\r\n />\r\n <input\r\n placeholder={\r\n languageString.studentLoginPage.mobileNumberPlaceholder\r\n }\r\n value={props.mobileNumber}\r\n onChange={handleChangePhoneNumber}\r\n className=\"mobileNumber\"\r\n ></input>\r\n </div>\r\n <span>{confirmationError ? confirmationError : null}</span>\r\n <div className=\"sendButton\">\r\n <Button onClick={handleSendSMS} variant=\"contained\" fullWidth>\r\n <label>\r\n {\r\n languageString.studentLoginPage.Confirmation\r\n .sendConfirmationCode\r\n }\r\n </label>\r\n <SendIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"ConfirmationPage\">\r\n {loading ? <IntermediaryLoading /> : null}\r\n {isSMSsent ? (\r\n <div className=\"confirmationInput\">\r\n <div className=\"top\">\r\n <span>\r\n {languageString.studentLoginPage.Confirmation.weSentASMS}\r\n </span>\r\n <div className=\"pinContainer6char\">\r\n <VerificationInput\r\n setCode={setVerificationCode}\r\n VerificationInputState={verificationInput}\r\n setVerificationInputState={setVerificationInput}\r\n className={goodToGo ? \"verifyInputs correct\" : \"verifyInputs\"}\r\n />\r\n </div>\r\n <div className=\"error\">{error ? errorMessage : null}</div>\r\n <div className=\"bottomButton\">\r\n <Button\r\n variant=\"contained\"\r\n disabled={!goodToGo}\r\n onClick={handleContinue}\r\n >\r\n BEKRÆFT\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n ) : (\r\n renderMobileInput()\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport { Confirmation };\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport arrowIcon from \"../../../../assets/white_Arrow.png\";\r\nimport VerificationInput from \"../../../../globalComponents/VerificationInput\";\r\nimport { fillArrayWithEmptyStrings } from \"../../../../services/utilFunctions\";\r\nimport { LoginStep } from \"../../../model\";\r\nimport { useConfirmMobileNoLazyQuery, useVerifyMobileNoLazyQuery } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { Button } from \"@mui/material\";\r\nimport SendIcon from \"@mui/icons-material/Send\";\r\nimport \"../style/Confirmation.scss\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\n\r\nexport type IConfirmationMobileAccessProps = {\r\n setLoginStep: any;\r\n setMobileNumber: (value: string | ((prevState: string) => string)) => void;\r\n mobileNumber: string;\r\n confirmationMobileAccessCode: string;\r\n isAccessCode: boolean\r\n setpreFix: (value: string) => void\r\n preFix: string;\r\n};\r\n\r\nconst ConfirmationMobileAccess: React.FC<IConfirmationMobileAccessProps> = (\r\n props: IConfirmationMobileAccessProps\r\n) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [verificationCode, setVerificationCode] = useState<string>(\"\");\r\n const [code, setCode] = useState<string>(props.confirmationMobileAccessCode);\r\n const [isSMSsent, setisSMSsent] = useState(false);\r\n const [isLoading, setisLoading] = useState(false);\r\n const [verificationInput, setVerificationInput] = useState<string[]>(() =>\r\n fillArrayWithEmptyStrings(6)\r\n );\r\n const [error, setError] = useState(false);\r\n const [confirmationMobileAccessError, setconfirmationMobileAccessError] = useState<string>();\r\n const [goodToGo, setGoodToGo] = useState(false);\r\n\r\n const [getConfirmationMobileAccessCode, { data, loading }] = useConfirmMobileNoLazyQuery({fetchPolicy: \"network-only\",\r\n onCompleted: (data) => {\r\n if (!data.confirmMobileNo) {\r\n setconfirmationMobileAccessError(\"Nummeret har ikke adgang til siden\");\r\n } else if (\r\n data.confirmMobileNo.firstString === \"\" &&\r\n data.confirmMobileNo.secondString === \"\"\r\n ) {\r\n setconfirmationMobileAccessError(\"Nummeret har allerede en bruger koblet til\");\r\n } else {\r\n setCode(\r\n data.confirmMobileNo.firstString + data.confirmMobileNo.secondString\r\n );\r\n setisSMSsent(true);\r\n }\r\n setisLoading(false);\r\n },\r\n onError: (data) => {\r\n setisLoading(false);\r\n setconfirmationMobileAccessError(\"Noget gik galt, prøv igen\");\r\n },\r\n nextFetchPolicy: \"network-only\",\r\n });\r\n\r\n useEffect(() => {\r\n if (verificationCode.length > 5 && verificationCode === code) {\r\n setGoodToGo(true);\r\n setError(false);\r\n } else if (verificationCode.length > 5 && verificationCode !== code) {\r\n setError(true);\r\n } else {\r\n setGoodToGo(false);\r\n setError(false);\r\n }\r\n }, [verificationCode]);\r\n\r\n const errorMessage = (\r\n <span>{languageString.studentLoginPage.Confirmation.errorMessage}</span>\r\n );\r\n\r\n const handleContinue = () => {\r\n props.setLoginStep(LoginStep.FirstLoginAccessCode);\r\n };\r\n\r\n const handleSendSMS = () => {\r\n if (props.mobileNumber) {\r\n setisLoading(true);\r\n getConfirmationMobileAccessCode({\r\n variables: { student_phone_number: props.preFix + props.mobileNumber },\r\n });\r\n }\r\n };\r\n const handleChangePhoneNumber = (event) => {\r\n const re = /^[0-9\\b]+$/;\r\n if (event.target.value === \"\" || re.test(event.target.value)) {\r\n props.setMobileNumber(event.target.value);\r\n }\r\n };\r\n\r\n const renderMobileInput = () => {\r\n return (\r\n <div className=\"mobileInput\">\r\n <div className=\"firstInput\">\r\n <input\r\n value={props.preFix}\r\n onChange={(event) => props.setpreFix(event.target.value)}\r\n className=\"preFix\"\r\n />\r\n <input\r\n placeholder={\r\n languageString.studentLoginPage.mobileNumberPlaceholder\r\n }\r\n value={props.mobileNumber}\r\n onChange={handleChangePhoneNumber}\r\n className=\"mobileNumber\"\r\n ></input>\r\n </div>\r\n <span>{confirmationMobileAccessError ? confirmationMobileAccessError : null}</span>\r\n <div className=\"sendButton\">\r\n <Button onClick={handleSendSMS} variant=\"contained\" fullWidth>\r\n <label>{languageString.studentLoginPage.Confirmation.sendConfirmationCode}</label>\r\n <SendIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"ConfirmationPage\">\r\n {isLoading ? <IntermediaryLoading /> : null}\r\n {isSMSsent ? (\r\n <div className=\"confirmationInput\">\r\n <div className=\"top\">\r\n <span>\r\n {languageString.studentLoginPage.Confirmation.weSentASMS}\r\n </span>\r\n <div className=\"pinContainer6char\">\r\n <VerificationInput\r\n setCode={setVerificationCode}\r\n VerificationInputState={verificationInput}\r\n setVerificationInputState={setVerificationInput}\r\n className={goodToGo ? \"verifyInputs correct\" : \"verifyInputs\"}\r\n />\r\n </div>\r\n <div className=\"error\">{error ? errorMessage : null}</div>\r\n <div className=\"bottomButton\">\r\n <Button\r\n variant=\"contained\"\r\n disabled={!goodToGo}\r\n onClick={handleContinue}\r\n >\r\n BEKRÆFT\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n ) : (\r\n renderMobileInput()\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport { ConfirmationMobileAccess };\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport PinInput from \"../../../../globalComponents/PinInput\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport arrowIcon from \"../../../../assets/white_Arrow.png\";\r\nimport { fillArrayWithEmptyStrings } from \"../../../../services/utilFunctions\";\r\nimport { useAddPinStudentMutation } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { LoginStep } from \"../../../model\";\r\nimport DoneOutlineRoundedIcon from \"@mui/icons-material/DoneOutlineRounded\";\r\nimport \"../style/CreatePin.scss\";\r\nimport { Button } from \"@mui/material\";\r\n\r\nexport type ICreatePinProps = {\r\n setLoginStep: any;\r\n mobileNumber: string;\r\n setIsLoading: (value: boolean | ((prevState: boolean) => boolean)) => void;\r\n setPINCode: (value: string | ((prevState: string) => string)) => void;\r\n preFix: string;\r\n setpreFix: (value: string) => void\r\n};\r\n\r\nconst CreatePin: React.FC<ICreatePinProps> = (props: ICreatePinProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [createPIN, setCreatePIN] = useState(\"\");\r\n const [createPINInputState, setCreatePINInputState] = useState<string[]>(() =>\r\n fillArrayWithEmptyStrings(4)\r\n );\r\n const [repeatPIN, setRepeatPIN] = useState(\"\");\r\n const [repeatPINInputState, setRepeatPINInputState] = useState<string[]>(() =>\r\n fillArrayWithEmptyStrings(4)\r\n );\r\n const [error, setError] = useState(false);\r\n const [goodToGo, setGoodToGo] = useState(false);\r\n\r\n const [addPINtoStudent] = useAddPinStudentMutation();\r\n\r\n const handleNextClick = () => {\r\n props.setIsLoading(true);\r\n addPINtoStudent({\r\n variables: {\r\n phone_number: props.preFix + props.mobileNumber,\r\n pin_code: createPIN,\r\n },\r\n }).then((data) => {\r\n props.setIsLoading(false);\r\n if (data.data?.AddPinStudent === \"1\") {\r\n props.setLoginStep(LoginStep.Initial);\r\n } else {\r\n }\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (\r\n createPIN.length > 3 &&\r\n repeatPIN.length > 3 &&\r\n createPIN === repeatPIN\r\n ) {\r\n setGoodToGo(true);\r\n setError(false);\r\n } else if (\r\n createPIN.length > 3 &&\r\n repeatPIN.length > 3 &&\r\n createPIN !== repeatPIN\r\n ) {\r\n setError(true);\r\n } else {\r\n setGoodToGo(false);\r\n setError(false);\r\n }\r\n }, [createPIN, repeatPIN]);\r\n\r\n useEffect(() => {\r\n const firstpininput = document.getElementsByClassName(\"pinInput\")[0];\r\n if(firstpininput && firstpininput instanceof HTMLInputElement){\r\n firstpininput.focus();\r\n }\r\n }, []);\r\n\r\n const errorMessage = (\r\n <span>{languageString.studentLoginPage.CreatePIN.errorMessage}</span>\r\n );\r\n\r\n return (\r\n <div className=\"CreatePINPage\">\r\n <div className=\"firstColumn\">\r\n <div className=\"pinNmessage\">\r\n <span>{languageString.studentLoginPage.CreatePIN.createPIN}</span>\r\n <div className=\"pinContainer\">\r\n <PinInput\r\n setPIN={setCreatePIN}\r\n setPINInputState={setCreatePINInputState}\r\n PINInputState={createPINInputState}\r\n className=\"pinInput\"\r\n />\r\n </div>\r\n </div>\r\n <div className=\"pinNmessage\">\r\n <span>{languageString.studentLoginPage.CreatePIN.repeatPIN}</span>\r\n <div className=\"pinContainer\">\r\n <PinInput\r\n setPIN={setRepeatPIN}\r\n setPINInputState={setRepeatPINInputState}\r\n PINInputState={repeatPINInputState}\r\n className=\"pinInput\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"error\">{error ? errorMessage : null}</div>\r\n <div className=\"lastColumn\">\r\n <div className=\"bottomButton\">\r\n <Button\r\n disabled={!goodToGo}\r\n variant=\"contained\"\r\n onClick={handleNextClick}\r\n >\r\n {languageString.studentLoginPage.CreatePIN.setPIN}{\" \"}\r\n <DoneOutlineRoundedIcon />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport { CreatePin };\r\n","import React, { useState } from \"react\";\r\nimport {\r\n getChosenLanguage,\r\n getStringsForChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport arrowIcon from \"../../../../assets/white_Arrow.png\";\r\nimport { LoginStep } from \"../../../model\";\r\nimport { SubmitHandler, useForm } from \"react-hook-form\";\r\nimport { useVerifyMobileNoLazyQuery } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport { ToggleButton, ToggleButtonGroup } from \"@mui/material\";\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport \"../style/FirstLogin.scss\";\r\n\r\ninterface Inputs {\r\n mobileNumber: string;\r\n}\r\n\r\nexport type IFirstLoginProps = {\r\n setLoginStep: any;\r\n mobileNumber: string;\r\n setConfirmationCode: (\r\n value: string | ((prevState: string) => string)\r\n ) => void;\r\n setIsLoading: (value: boolean | ((prevState: boolean) => boolean)) => void;\r\n setisAccessCode: React.Dispatch<React.SetStateAction<boolean>>;\r\n setpreFix: (value: string) => void\r\n preFix: string;\r\n};\r\n\r\nconst FirstLogin: React.FC<IFirstLoginProps> = (props: IFirstLoginProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const {\r\n register,\r\n handleSubmit,\r\n watch,\r\n formState: { errors },\r\n setError,\r\n } = useForm<Inputs>();\r\n\r\n const [isFirstTime, setisFirstTime] = useState<boolean>();\r\n const [hasPasscode, sethasPasscode] = useState<boolean>();\r\n\r\n const [getConfirmationCode, { data, loading }] = useVerifyMobileNoLazyQuery({\r\n onCompleted: (data) => {\r\n props.setConfirmationCode(\r\n data.verifyMobileNo.firstString + data.verifyMobileNo.secondString\r\n );\r\n props.setIsLoading(false);\r\n props.setLoginStep(LoginStep.Confirmation);\r\n },\r\n nextFetchPolicy: \"network-only\",\r\n });\r\n\r\n const handleIsFirstTime = (event, newValue) => {\r\n if (newValue === false) {\r\n props.setLoginStep(LoginStep.Initial);\r\n localStorage.setItem(\"TEORIFIRSTTIME\", \"NO\");\r\n }\r\n setisFirstTime(newValue);\r\n };\r\n const handleHasPasscode = (event, newValue) => {\r\n if(newValue === false){\r\n props.setLoginStep(LoginStep.Confirmation);\r\n }\r\n if(newValue === true){\r\n props.setLoginStep(LoginStep.ConfirmMobileAccess);\r\n }\r\n sethasPasscode(newValue);\r\n };\r\n\r\n return (\r\n <div className=\"FirstLoginPage\">\r\n <div className=\"toggleGroup\">\r\n <label>{languageString.studentLoginPage.FirstLogin.firstTimeVisiting}</label>\r\n <ToggleButtonGroup\r\n value={isFirstTime}\r\n exclusive\r\n onChange={handleIsFirstTime}\r\n >\r\n <ToggleButton value={true}>{languageString.generalMessages.yes}</ToggleButton>\r\n <ToggleButton value={false}>{languageString.generalMessages.no}</ToggleButton>\r\n </ToggleButtonGroup>\r\n </div>\r\n {isFirstTime === true ? (\r\n <div className=\"toggleGroup\">\r\n <label>{languageString.studentLoginPage.FirstLogin.havePasscode}</label>\r\n <ToggleButtonGroup\r\n value={hasPasscode}\r\n exclusive\r\n onChange={handleHasPasscode}\r\n >\r\n <ToggleButton value={true}>{languageString.generalMessages.yes}</ToggleButton>\r\n <ToggleButton value={false}>{languageString.generalMessages.no}</ToggleButton>\r\n </ToggleButtonGroup>\r\n </div>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { FirstLogin };\r\n","import { Button } from '@mui/material';\r\nimport React, { useEffect, useState } from 'react';\r\nimport \"../style/InformationSide.scss\";\r\nimport ArrowBackRoundedIcon from '@mui/icons-material/ArrowBackRounded';\r\nimport studentIcon from \"../../../../assets/iconsStudentDashboard/studentHat_icon.png\"\r\nimport TeoriLogoWhite from \"../../../../assets/TeoriLogoHvid.png\";\r\nimport { LAPTOP_VIEW_WIDTH } from '../../../../constants/viewConstants';\r\nimport { useWindowDimensions } from '../../../../hooks/useWindowDimensions';\r\nimport toClass from \"../../../../assets/toClass.png\";\r\nimport { useHistory, useLocation } from \"react-router\";\r\n\r\nexport type IInformationSideProps = {\r\n header: string;\r\n underHeader: string;\r\n underHeaderExplainer: string;\r\n buttonText?: string;\r\n buttonAction?: () => void;\r\n}\r\n\r\nconst InformationSide: React.FC<IInformationSideProps> = (props: IInformationSideProps) => {\r\n const { width, height } = useWindowDimensions();\r\n\r\n const history = useHistory(); \r\n\r\n const [isLaptopView, setIsLaptopView] = useState<boolean>(\r\n LAPTOP_VIEW_WIDTH <= width\r\n );\r\n\r\n const handleClickToClass = () => {\r\n history.push(\"/skole\");\r\n }\r\n \r\n useEffect(() => {\r\n setIsLaptopView(LAPTOP_VIEW_WIDTH <= width);\r\n }, [width, height]);\r\n if(isLaptopView){\r\n\r\n return (\r\n <div className='InformationSide'>\r\n <div className='backButton clickable' onClick={props.buttonAction}>\r\n <Button size={\"small\"}><ArrowBackRoundedIcon/></Button>\r\n <label className='clickable'>Til forsiden</label></div>\r\n <div className='content'>\r\n <div className='whiteLogo'><img src={TeoriLogoWhite}></img></div>\r\n <h3>{props.header}</h3>\r\n <hr className='line'></hr>\r\n <div className='underHeader'>\r\n <img src={studentIcon}></img><h4>{props.underHeader}</h4>\r\n <div className='underHeaderText'>\r\n \r\n <span className='spanText'>{props.underHeaderExplainer}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='toClass'><Button onClick={handleClickToClass}><img src={toClass}></img></Button></div>\r\n </div>\r\n );\r\n}else{\r\n return (\r\n <div className='InformationSide'>\r\n <div className='backButton clickable' onClick={props.buttonAction}>\r\n <Button size={\"small\"}><ArrowBackRoundedIcon/></Button>\r\n <label className='clickable'>Til forsiden</label></div>\r\n <div className='content'>\r\n <div className='whiteLogo'><img src={TeoriLogoWhite}></img></div>\r\n {/* <h3>{props.header}</h3> */}\r\n {/* <hr className='line'></hr> */}\r\n <div className='underHeader'>\r\n <img src={studentIcon}></img><h4>{props.underHeader}</h4>\r\n <div className='underHeaderText'>\r\n \r\n <span className='spanText'>{props.underHeaderExplainer}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='toClass'><Button onClick={handleClickToClass}><img src={toClass}></img></Button></div>\r\n </div>\r\n);\r\n}\r\n}\r\n\r\nexport { InformationSide };","import React, { useContext, useEffect, useState } from \"react\";\r\nimport PinInput from \"../../../../globalComponents/PinInput\";\r\nimport { fillArrayWithEmptyStrings } from \"../../../../services/utilFunctions\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n} from \"../../../../translations/translationProvider\";\r\nimport { LoginStep } from \"../../../model\";\r\nimport arrowIcon from \"../../../../assets/white_Arrow.png\";\r\nimport { useLoginStudentMutation } from \"../../../../graphql/generated/graphqlStudent\";\r\nimport IntermediaryLoading from \"../../../../globalComponents/IntermediaryLoading\";\r\nimport failIcon from \"../../../../assets/fail_icon.png\";\r\nimport successIcon from \"../../../../assets/checkmark_icon.png\";\r\nimport { AppStateStudentContext } from \"../../../../apollo/TeoriStudentProvider\";\r\nimport {\r\n PATH_DASHBOARD,\r\n PATH_PROFILE,\r\n} from \"../../../../constants/pathConstants\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Button } from \"@mui/material\";\r\nimport { TeoriLogo } from \"../../../../globalComponents/TeoriLogo\";\r\nimport \"../style/Initial.scss\";\r\n\r\ninterface loginType {}\r\n\r\nexport type IInitialProps = {\r\n setLoginStep: any;\r\n mobileNumber: string;\r\n setMobileNumber: (value: string | ((prevState: string) => string)) => void;\r\n PIN: string;\r\n setPIN: (value: string | ((prevState: string) => string)) => void;\r\n setIsLoading: (value: boolean | ((prevState: boolean) => boolean)) => void;\r\n buttonText?: string;\r\n buttonAction?: () => void;\r\n setpreFix: (value: string) => void\r\n preFix: string;\r\n handleActivationClick: () => void;\r\n handleRemoveSupport: () => void;\r\n};\r\n\r\nconst Initial: React.FC<IInitialProps> = (props: IInitialProps) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [goodToGo, setGoodToGo] = useState(false);\r\n const [Login, { loading }] = useLoginStudentMutation({fetchPolicy: \"no-cache\"});\r\n const context = useContext(AppStateStudentContext);\r\n const history = useHistory();\r\n\r\n const [localLoading, setLocalLoading] = useState(false);\r\n\r\n const [error, setError] = useState<string>();\r\n\r\n const [PINInputState, setPINInputState] = useState<string[]>(() =>\r\n fillArrayWithEmptyStrings(4)\r\n );\r\n\r\n const handleChangePhoneNumber = (event) => {\r\n const re = /^[0-9\\b]+$/;\r\n if (event.target.value === \"\" || re.test(event.target.value)) {\r\n props.setMobileNumber(event.target.value);\r\n }\r\n };\r\n\r\n const handleFirstTimeButton = () => {\r\n props.setLoginStep(LoginStep.FirstLogin);\r\n };\r\n\r\n const handleForgotPIN = () => {\r\n props.setLoginStep(LoginStep.Confirmation);\r\n }\r\n\r\n const handleLoginClick = async () => {\r\n setLocalLoading(true);\r\n await Login({\r\n variables: {\r\n phone_number: props.preFix + props.mobileNumber,\r\n pin_code: props.PIN,\r\n }, onError: (e) => {\r\n if(e.message === \"pin_not_set\"){\r\n props.setLoginStep(LoginStep.CreatePin);\r\n }else if(e.message === \"user_expired\"){\r\n props.setLoginStep(LoginStep.AccessExpired);\r\n }else{\r\n setError(languageString.studentLoginPage.Initial.errorMessage);\r\n }\r\n } \r\n })\r\n .then((data) => {\r\n\r\n const tokens = data.data?.LoginStudent;\r\n if (tokens) {\r\n if (!tokens.login_before) {\r\n sessionStorage.setItem(\"has_login\", \"false\");\r\n }\r\n props.handleRemoveSupport();\r\n setTimeout(() => {\r\n localStorage.setItem(\"TEORIFIRSTTIME\", \"NO\");\r\n context.appSetLogin(tokens.accessToken!, tokens.refreshToken!);\r\n }, 1500);\r\n }\r\n })\r\n .catch((e) => {\r\n \r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (props.mobileNumber.length >= 4 && props.PIN.length > 3) {\r\n setGoodToGo(true);\r\n } else {\r\n setGoodToGo(false);\r\n }\r\n }, [props.mobileNumber, props.PIN]);\r\n\r\n useEffect(() => {\r\n if (localLoading) {\r\n if (error) {\r\n setTimeout(() => {\r\n setLocalLoading(false);\r\n setError(undefined);\r\n }, 2200);\r\n }\r\n }\r\n }, [localLoading, error]);\r\n\r\n const handleKeyDown = (event) => {\r\n if(event.code === \"Enter\"){\r\n handleLoginClick();\r\n }\r\n }\r\n\r\n const finalLoader = () => {\r\n while (loading) {\r\n return <IntermediaryLoading />;\r\n }\r\n\r\n return (\r\n <div className=\"opaqueContainer\">\r\n {error ? (\r\n <div className=\"error\">\r\n <img src={failIcon} alt=\"errorImage\"></img>\r\n <span>{error}</span>\r\n </div>\r\n ) : (\r\n <div className=\"success\">\r\n <img src={successIcon} alt=\"successImage\"></img>\r\n <span>{languageString.studentLoginPage.Initial.loginSuccess}</span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"InitialPage\">\r\n <div className=\"loginInput\">\r\n <label>\r\n {languageString.studentLoginPage.Initial.phonenumberLabel}\r\n </label>\r\n <div className=\"firstInput\">\r\n <input\r\n value={props.preFix}\r\n onChange={(event) => props.setpreFix(event.target.value)}\r\n className=\"preFix\"\r\n />\r\n <input\r\n placeholder={\r\n languageString.studentLoginPage.mobileNumberPlaceholder\r\n }\r\n value={props.mobileNumber}\r\n onChange={handleChangePhoneNumber}\r\n type=\"tel\"\r\n ></input>\r\n </div>\r\n <label>{languageString.studentLoginPage.Initial.passwordLabel}</label>\r\n <div className=\"pinContainer\" onKeyDown={handleKeyDown}>\r\n <PinInput\r\n className=\"PINInput\"\r\n setPIN={props.setPIN}\r\n setPINInputState={setPINInputState}\r\n PINInputState={PINInputState}\r\n type={\"password\"}\r\n />\r\n </div>\r\n <div className=\"bottomButton\">\r\n <Button\r\n className={!goodToGo ? \"disabledButton loginButton\" : \"loginButton\"}\r\n onClick={handleLoginClick}\r\n >\r\n {languageString.studentLoginPage.Initial.loginButton}\r\n </Button>\r\n <div className=\"forgot\" onClick={handleForgotPIN}>{languageString.studentLoginPage.Initial.forgot}</div>\r\n </div>\r\n <div className=\"registerButton\">\r\n <Button onClick={props.buttonAction}>{props.buttonText}</Button>\r\n <Button className=\"accessCode\" onClick={props.handleActivationClick}>{languageString.studentLoginPage.Initial.haveAccessCode}</Button>\r\n </div>\r\n </div>\r\n {localLoading ? finalLoader() : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { Initial };\r\n","import React, { FC, useEffect, useState } from \"react\";\r\nimport { useHistory, useLocation } from \"react-router\";\r\nimport { TransitionGroup, CSSTransition } from \"react-transition-group\";\r\nimport { LAPTOP_VIEW_WIDTH } from \"../../../constants/viewConstants\";\r\nimport { A2HSComponent } from \"../../../globalComponents/A2HSComponent\";\r\nimport IntermediaryLoading from \"../../../globalComponents/IntermediaryLoading\";\r\nimport { TeoriLogo } from \"../../../globalComponents/TeoriLogo\";\r\nimport { useLoginStudentMutation } from \"../../../graphql/generated/graphqlStudent\";\r\nimport { useWindowDimensions } from \"../../../hooks/useWindowDimensions\";\r\nimport {\r\n getStringsForChosenLanguage,\r\n getChosenLanguage,\r\n setLanguage,\r\n} from \"../../../translations/translationProvider\";\r\nimport { LanguageType } from \"../../../translations/translationTypes\";\r\nimport { LoginStep } from \"../../model\";\r\nimport { AccessCode } from \"./components/AccessCode\";\r\nimport AccessExpired from \"./components/AccessExpired\";\r\nimport { Confirmation } from \"./components/Confirmation\";\r\nimport { ConfirmationMobileAccess } from \"./components/ConfirmationMobileAccess\";\r\nimport { CreatePin } from \"./components/CreatePin\";\r\nimport { FirstLogin } from \"./components/FirstLogin\";\r\nimport { InformationSide } from \"./components/InformationSide\";\r\nimport { Initial } from \"./components/Initial\";\r\nimport \"./LoginPage.scss\";\r\n\r\nexport type ILoginPageProps = {};\r\n\r\nconst LoginPage: React.FC<ILoginPageProps> = ({}) => {\r\n const languageString = getStringsForChosenLanguage(getChosenLanguage());\r\n const [loginStep, setLoginStep] = useState<LoginStep>(LoginStep.Initial);\r\n const [IsLoading, setIsLoading] = useState<boolean>(false);\r\n\r\n const history = useHistory();\r\n\r\n const [forcedRerender, setforcedRerender] = useState(false);\r\n\r\n const [mobileNumber, setMobileNumber] = useState<string>(\"\");\r\n const [PINCode, setPINCode] = useState<string>(\"\");\r\n\r\n /* For ConfirmationPage */\r\n const [confirmationCode, setConfirmationCode] = useState(\"\");\r\n\r\n const [preFix, setpreFix] = useState(\"+45\");\r\n\r\n const handleChangePrefix = (value: string) => {\r\n if(value.length < 5){\r\n if(value.length > 0 && value[0] === \"+\"){\r\n setpreFix(value);\r\n }\r\n }\r\n }\r\n\r\n const { width, height } = useWindowDimensions();\r\n\r\n const [isLaptopView, setIsLaptopView] = useState<boolean>(\r\n LAPTOP_VIEW_WIDTH <= width\r\n );\r\n\r\n const [isAccessCode, setisAccessCode] = useState(false);\r\n\r\n useEffect(() => {\r\n setIsLaptopView(LAPTOP_VIEW_WIDTH <= width);\r\n }, [width, height]);\r\n\r\n const script = document.createElement(\"script\");\r\n const script2 = document.createElement(\"script\");\r\n\r\n /*useEffect(() => {\r\n if (isLaptopView) {\r\n const chatBot = document.getElementById(\"LeadboosterContainer\");\r\n if (!chatBot) {\r\n\r\n script2.text =\r\n \"window.pipedriveLeadboosterConfig = {base: 'leadbooster-chat.pipedrive.com',companyId: 7803695,playbookUuid: '61d6f774-c7b6-4f7a-ada0-589d225c8fa6',version: 2};(function () {var w = window;if (w.LeadBooster) {console.warn('LeadBooster already exists');} else {w.LeadBooster = {q: [],on: function (n, h) {this.q.push({ t: 'o', n: n, h: h });},trigger: function (n) {this.q.push({ t: 't', n: n });},};}})();\";\r\n script.src = \"https://leadbooster-chat.pipedrive.com/assets/loader.js\";\r\n script.async = true;\r\n\r\n document.body.appendChild(script2);\r\n document.body.appendChild(script);\r\n return () => {\r\n document.body.removeChild(script);\r\n document.body.removeChild(script2);\r\n };\r\n }\r\n }\r\n\r\n }, [isLaptopView]);\r\n*/\r\n\r\nuseEffect(() => {\r\n if (isLaptopView) {\r\n const chatBot = document.getElementById(\"ChatbaseContainer\");\r\n if (!chatBot) {\r\n const scriptConfig = document.createElement(\"script\");\r\n const scriptLoader = document.createElement(\"script\");\r\n\r\n scriptConfig.text = `\r\n window.embeddedChatbotConfig = {\r\n chatbotId: \"gB-ZcPwS6ECEJsPGNC33L\",\r\n domain: \"www.chatbase.co\"\r\n };\r\n `;\r\n\r\n scriptLoader.src = \"https://www.chatbase.co/embed.min.js\";\r\n scriptLoader.setAttribute(\"chatbotId\", \"gB-ZcPwS6ECEJsPGNC33L\");\r\n scriptLoader.setAttribute(\"domain\", \"www.chatbase.co\");\r\n scriptLoader.defer = true;\r\n\r\n document.body.appendChild(scriptConfig);\r\n document.body.appendChild(scriptLoader);\r\n\r\n // Cleanup on unmount\r\n return () => {\r\n document.body.removeChild(scriptConfig);\r\n document.body.removeChild(scriptLoader);\r\n };\r\n }\r\n }\r\n}, [isLaptopView]);\r\n\r\n const removeLoginSupport = () => {\r\n try{\r\n console.log(\"i actually try \");\r\n const chatbox = document.getElementById(\"LeadboosterContainer\");\r\n if(chatbox){\r\n chatbox.remove();\r\n }\r\n }catch(e){\r\n }\r\n }\r\n\r\n const handleLanguageClick = () => {\r\n if (getChosenLanguage() === LanguageType.Danish) {\r\n setLanguage(LanguageType.English);\r\n } else {\r\n setLanguage(LanguageType.Danish);\r\n }\r\n setforcedRerender(!forcedRerender);\r\n };\r\n\r\n const handleRegisterButton = () => {\r\n setLoginStep(LoginStep.FirstLogin);\r\n };\r\n\r\n const handleActivationCode = () => {\r\n setisAccessCode(true);\r\n setLoginStep(LoginStep.ConfirmMobileAccess);\r\n }\r\n\r\n const renderLoginState = (): JSX.Element => {\r\n switch (loginStep) {\r\n case LoginStep.Initial: {\r\n return (\r\n <Initial\r\n mobileNumber={mobileNumber}\r\n setMobileNumber={setMobileNumber}\r\n setLoginStep={setLoginStep}\r\n setPIN={setPINCode}\r\n PIN={PINCode}\r\n setIsLoading={setIsLoading}\r\n buttonText={\r\n languageString.studentLoginPage.InformationSide.Initial.buttonText\r\n }\r\n preFix={preFix}\r\n setpreFix={handleChangePrefix}\r\n buttonAction={handleRegisterButton}\r\n handleActivationClick={handleActivationCode}\r\n handleRemoveSupport={removeLoginSupport}\r\n />\r\n );\r\n }\r\n case LoginStep.FirstLogin: {\r\n return (\r\n <FirstLogin\r\n setLoginStep={setLoginStep}\r\n mobileNumber={mobileNumber}\r\n preFix={preFix}\r\n setpreFix={handleChangePrefix}\r\n setConfirmationCode={setConfirmationCode}\r\n setIsLoading={setIsLoading}\r\n setisAccessCode={setisAccessCode}\r\n />\r\n );\r\n } \r\n case LoginStep.FirstLoginAccessCode: {\r\n return (\r\n <AccessCode\r\n setLoginStep={setLoginStep}\r\n setMobileNumber={setMobileNumber}\r\n mobileNumber={mobileNumber}\r\n setIsLoading={setIsLoading}\r\n setpreFix={handleChangePrefix}\r\n preFix={preFix}\r\n />\r\n );\r\n }\r\n case LoginStep.Confirmation: {\r\n return (\r\n <Confirmation\r\n setLoginStep={setLoginStep}\r\n setMobileNumber={setMobileNumber}\r\n mobileNumber={mobileNumber}\r\n confirmationCode={confirmationCode}\r\n isAccessCode={isAccessCode}\r\n preFix={preFix}\r\n setpreFix={handleChangePrefix}\r\n />\r\n );\r\n }\r\n case LoginStep.CreatePin: {\r\n return (\r\n <CreatePin\r\n setLoginStep={setLoginStep}\r\n mobileNumber={mobileNumber}\r\n setIsLoading={setIsLoading}\r\n setPINCode={setPINCode}\r\n preFix={preFix}\r\n setpreFix={handleChangePrefix}\r\n />\r\n );\r\n }\r\n case LoginStep.AccessExpired: {\r\n return <AccessExpired />;\r\n }\r\n case LoginStep.ConfirmMobileAccess: {\r\n return (\r\n <ConfirmationMobileAccess\r\n setLoginStep={setLoginStep}\r\n setMobileNumber={setMobileNumber}\r\n mobileNumber={mobileNumber}\r\n confirmationMobileAccessCode={confirmationCode}\r\n isAccessCode={isAccessCode}\r\n preFix={preFix}\r\n setpreFix={handleChangePrefix}\r\n />\r\n );\r\n }\r\n default: {\r\n return (\r\n <Initial\r\n mobileNumber={mobileNumber}\r\n setMobileNumber={setMobileNumber}\r\n setLoginStep={setLoginStep}\r\n setPIN={setPINCode}\r\n PIN={PINCode}\r\n setIsLoading={setIsLoading}\r\n buttonText={\r\n languageString.studentLoginPage.InformationSide.Initial.buttonText\r\n }\r\n buttonAction={handleRegisterButton}\r\n preFix={preFix}\r\n setpreFix={handleChangePrefix}\r\n handleActivationClick={handleActivationCode}\r\n handleRemoveSupport={removeLoginSupport}\r\n />\r\n );\r\n }\r\n }\r\n };\r\n\r\n /* useEffect(() => {\r\n if (!localStorage.getItem(\"TEORIFIRSTTIME\")) {\r\n setLoginStep(LoginStep.FirstLogin);\r\n } else {\r\n }\r\n }, []);\r\n */\r\n const renderInformationSide = () => {\r\n switch (loginStep) {\r\n case LoginStep.Initial: {\r\n return (\r\n <InformationSide\r\n header={languageString.studentLoginPage.InformationSide.header}\r\n underHeader={\r\n languageString.studentLoginPage.InformationSide.Initial\r\n .underHeader\r\n }\r\n underHeaderExplainer={\r\n languageString.studentLoginPage.InformationSide.Initial\r\n .underHeaderExplainer\r\n }\r\n buttonAction={handleTeoriLogoClick}\r\n />\r\n );\r\n }\r\n case LoginStep.FirstLogin: {\r\n return (\r\n <InformationSide\r\n header={languageString.studentLoginPage.InformationSide.header}\r\n underHeader={\r\n languageString.studentLoginPage.InformationSide.FirstLogin\r\n .underHeader\r\n }\r\n underHeaderExplainer={\r\n languageString.studentLoginPage.InformationSide.FirstLogin\r\n .underHeaderExplainer\r\n }\r\n buttonAction={backToStart}\r\n />\r\n );\r\n }\r\n case LoginStep.FirstLoginAccessCode: {\r\n return (\r\n <InformationSide\r\n header={languageString.studentLoginPage.InformationSide.header}\r\n underHeader={\r\n languageString.studentLoginPage.InformationSide.AccessCode\r\n .underHeader\r\n }\r\n underHeaderExplainer={\r\n languageString.studentLoginPage.InformationSide.AccessCode\r\n .underHeaderExplainer\r\n }\r\n buttonAction={backToStart}\r\n />\r\n );\r\n }\r\n case LoginStep.Confirmation: {\r\n return (\r\n <InformationSide\r\n header={languageString.studentLoginPage.InformationSide.header}\r\n underHeader={\r\n languageString.studentLoginPage.InformationSide.Confirmation\r\n .underHeader\r\n }\r\n underHeaderExplainer={\r\n languageString.studentLoginPage.InformationSide.Confirmation\r\n .underHeaderExplainer\r\n }\r\n buttonAction={backToStart}\r\n />\r\n );\r\n }\r\n case LoginStep.CreatePin: {\r\n return (\r\n <InformationSide\r\n header={languageString.studentLoginPage.InformationSide.header}\r\n underHeader={\r\n languageString.studentLoginPage.InformationSide.CreatePIN\r\n .underHeader\r\n }\r\n underHeaderExplainer={\r\n languageString.studentLoginPage.InformationSide.CreatePIN\r\n .underHeaderExplainer\r\n }\r\n buttonAction={backToStart}\r\n />\r\n );\r\n }\r\n case LoginStep.ConfirmMobileAccess: {\r\n return (\r\n <InformationSide\r\n header={languageString.studentLoginPage.InformationSide.header}\r\n underHeader={\r\n languageString.studentLoginPage.InformationSide.Confirmation\r\n .underHeader\r\n }\r\n underHeaderExplainer={\r\n languageString.studentLoginPage.InformationSide.Confirmation\r\n .underHeaderExplainer\r\n }\r\n buttonAction={backToStart}\r\n />\r\n );\r\n }\r\n default: {\r\n return (\r\n <InformationSide\r\n header={languageString.studentLoginPage.InformationSide.header}\r\n underHeader={\r\n languageString.studentLoginPage.InformationSide.Initial\r\n .underHeader\r\n }\r\n underHeaderExplainer={\r\n languageString.studentLoginPage.InformationSide.Initial\r\n .underHeaderExplainer\r\n }\r\n buttonText={\r\n languageString.studentLoginPage.InformationSide.Initial.buttonText\r\n }\r\n buttonAction={handleTeoriLogoClick}\r\n />\r\n );\r\n }\r\n }\r\n };\r\n\r\n const handleTeoriLogoClick = () => {\r\n window.location.href = \"https://www.teoriundervisning.dk/\";\r\n };\r\n const backToStart = () => {\r\n setLoginStep(LoginStep.Initial);\r\n };\r\n return (\r\n <div className=\"studentLogin\">\r\n {renderInformationSide()}\r\n <div className=\"logoAndPages\">\r\n <div className=\"languageLink\" onClick={handleLanguageClick}>\r\n {getChosenLanguage() === LanguageType.English ? \"Dansk\" : \"English\"}\r\n </div>\r\n <TeoriLogo studentPage={true} onClick={handleTeoriLogoClick} />\r\n <div className=\"interactionPages\">\r\n <TransitionGroup className={\"transitionGroup\"}>\r\n <CSSTransition\r\n key={loginStep}\r\n classNames=\"studentLoginTransition\"\r\n timeout={300}\r\n >\r\n {renderLoginState()}\r\n </CSSTransition>\r\n </TransitionGroup>\r\n </div>\r\n </div>\r\n {IsLoading ? <IntermediaryLoading /> : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport default LoginPage;\r\n","import { LinearProgress } from '@material-ui/core';\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nexport type ILoadingBarProps = {\r\n key: number\r\n progress: number;\r\n total: number;\r\n name: number;\r\n}\r\n\r\nconst LoadingBar: React.FC<ILoadingBarProps> = (props: ILoadingBarProps) => {\r\n const [ïnsideProgress, setïnsideProgress] = useState(props.progress);\r\n\r\n\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => setïnsideProgress((prevState) => {return prevState + 1.5}), 500);\r\n }, [props.progress]);\r\n\r\n return (\r\n <div className=\"loadingBar\">\r\n <LinearProgress variant=\"determinate\" value={(ïnsideProgress / props.total) * 100} />\r\n {/* <span>{props.name}</span> */}\r\n </div>\r\n );\r\n}\r\n\r\nexport { LoadingBar };","import React from 'react';\r\nimport \"./style/Loading.scss\";\r\nimport customLoader from \"../assets/customLoader.gif\";\r\nimport customLoader24 from \"../assets/customLoader24fps.gif\";\r\nimport { LoadingBar } from './LoadingBar';\r\n\r\nexport type ILoadingProps = {\r\n loadingText?: string;\r\n progress?: any;\r\n}\r\n\r\nconst Loading: React.FC<ILoadingProps> = (props: ILoadingProps) => {\r\n\r\n const loadingElement = <img src={customLoader24}/>;\r\n\r\n if(props.loadingText){\r\n return( <div className=\"Loading\">\r\n <div>{loadingElement}</div>\r\n <h3>{props.loadingText}</h3>\r\n </div>)\r\n\r\n }\r\n if(props.progress){\r\n return(\r\n <div className='Loading loadingBar'>\r\n {loadingElement}\r\n {props.progress ? <LoadingBar key={props.progress.progress} progress={props.progress.progress} name={props.progress.name} total={props.progress.total}/> : null}\r\n </div>\r\n )\r\n }\r\n return (\r\n <div className=\"Loading\">\r\n {loadingElement}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Loading ;","import React from \"react\";\r\nimport \"./style/IntermediaryLoading.scss\";\r\nimport customLoader from \"../assets/customLoader.gif\";\r\nimport customLoader24 from \"../assets/customLoader24fps.gif\";\r\n\r\nexport type IIntermediaryLoadingProps = {};\r\n\r\nconst IntermediaryLoading: React.FC<IIntermediaryLoadingProps> = ({}) => {\r\n return (\r\n <div className=\"opaqueContainer\">\r\n <div className=\"loadingElement\"><img src={customLoader24}/></div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default IntermediaryLoading;\r\n","export default __webpack_public_path__ + \"static/media/TeoriLogo_small.2a5214c1.png\";","import React from 'react';\r\nimport logo from \"../assets/TeoriLogo_small.png\"\r\nimport Teacherlogo from \"../assets/EasyPiecy_Undervisning.png\";\r\nimport \"./style/TeoriLogo.scss\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { PATH_DASHBOARD } from '../constants/pathConstants';\r\n\r\nexport type ITeoriLogoProps = {\r\n studentPage?: boolean;\r\n onClick?: () => void;\r\n}\r\n\r\nconst TeoriLogo: React.FC<ITeoriLogoProps> = (props: ITeoriLogoProps) => {\r\n const history = useHistory();\r\n return (\r\n <div className=\"logoContainer\" onClick ={props.onClick ? props.onClick : () => history.push(PATH_DASHBOARD)}>\r\n <img src={logo} alt=\"TEORI-LOGO\" className=\"logo\"/>\r\n </div>\r\n \r\n );\r\n}\r\n\r\nexport { TeoriLogo };\r\n","import { BaseType, MediaType } from \"./model\";\r\n\r\n/**\r\n * Function return item based on passed ID\r\n */\r\nexport function findById<T1 extends BaseType>(\r\n items: T1[],\r\n itemId: number | null\r\n): T1 | undefined {\r\n return items.find((tag) => tag.id === itemId);\r\n}\r\n\r\n/**\r\n * Function return index of item based on passed ID\r\n */\r\nexport function findIndexById<T1 extends BaseType>(\r\n items: T1[],\r\n itemId: number | null\r\n): number {\r\n return items.findIndex((tag) => tag.id === itemId);\r\n}\r\n\r\n/**\r\n * Function removes item whose ID was given\r\n */\r\nexport function filterById<T1 extends BaseType>(\r\n items: T1[],\r\n itemIdToDelete: number\r\n): T1[] {\r\n return items.filter((item) => item.id !== itemIdToDelete);\r\n}\r\n\r\n/**\r\n * Function do numeric sort of array\r\n */\r\nexport function sortById<T1 extends BaseType>(items: T1[]): T1[] {\r\n return items.sort((first, second) => first.id - second.id);\r\n}\r\n\r\n/**\r\n * Function removes item whose ID was given and then do numeric sort of array\r\n */\r\nexport function filterAndSortById<T1 extends BaseType>(\r\n items: T1[],\r\n itemIdToDelete: number\r\n): T1[] {\r\n return sortById(filterById(items, itemIdToDelete));\r\n}\r\n\r\nexport function numberToMediaType(number: Number) {\r\n switch (number) {\r\n case 1:\r\n return MediaType.STREAM;\r\n case 4:\r\n return MediaType.LOCALVIDEO;\r\n case 3:\r\n return MediaType.YOUTUBE;\r\n case 2:\r\n return MediaType.WEB_LINK;\r\n case 5:\r\n return MediaType.AZUREIMG;\r\n }\r\n}\r\n\r\nexport function makeid(length) {\r\n var result = \"\";\r\n var characters =\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n var charactersLength = characters.length;\r\n for (var i = 0; i < length; i++) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n }\r\n return result;\r\n}\r\n","import React from \"react\";\r\nimport { BaseEnum } from \"./utilTypes\";\r\n\r\nexport const checkIfStringContains = (text: string, query: string): boolean => {\r\n\tif (text) {\r\n\t\treturn text.toLowerCase().includes(query.toLowerCase());\r\n\t} else {\r\n\t\treturn false;\r\n\t}\r\n};\r\n\r\nexport const getEnumAsArray = (enumType: BaseEnum): string[] => {\r\n\treturn Object.keys(enumType);\r\n};\r\n\r\nexport const getIntegerValuesFromEnum = (enumType: BaseEnum): number[] => {\r\n\treturn Object.keys(enumType)\r\n\t\t.filter((item) => !isNaN(parseInt(item)))\r\n\t\t.map((item) => parseInt(item));\r\n};\r\n\r\nexport const getNumberOrEmptyStringFromEventTarget = (eventTarget: EventTarget & HTMLInputElement): number | string => {\r\n\treturn isNaN(eventTarget.valueAsNumber) ? eventTarget.value : eventTarget.valueAsNumber;\r\n};\r\n\r\nexport const parseHtmlSelectValueToEnum = (eventTarget: EventTarget & HTMLSelectElement): number => {\r\n\treturn parseInt(eventTarget.value);\r\n};\r\n\r\nexport const fillArrayWithEmptyStrings = (numberOfItemsInArray: number): string[] => {\r\n\tconst inputValues: string[] = [];\r\n\tfor (let i = 0; i < numberOfItemsInArray; i++) {\r\n\t\tinputValues.push(\"\");\r\n\t}\r\n\r\n\treturn inputValues;\r\n};\r\n\r\nexport const getMergedStringsFromArray = (arrayToConvert: string[]): string => {\r\n\treturn arrayToConvert.toString().split(\",\").join(\"\");\r\n};\r\n\r\nexport function getNextSiblingsFromRefObject<T1 extends Element, T2 extends Element>(\r\n\trefObject: React.RefObject<T1>,\r\n): T2 {\r\n\treturn refObject.current?.nextSibling as T2;\r\n}\r\n\r\nexport function getPreviousSiblingsFromRefObject<T1 extends Element, T2 extends Element>(\r\n\trefObject: React.RefObject<T1>,\r\n): T2 {\r\n\treturn refObject.current?.previousSibling as T2;\r\n}\r\n\r\nexport function getParentFromRefObject<T1 extends Element, T2 extends Element>(refObject: React.RefObject<T1>): T2 {\r\n\treturn refObject.current?.parentElement as unknown as T2;\r\n}\r\n\r\nexport function clearJsxElementArray<T1 extends JSX.Element[]>(array: T1): void {\r\n\tarray.splice(0, array.length);\r\n}\r\n\r\nexport function convertNulltoZero(inputValue: any) {\r\n\tconst conversion = Number(inputValue);\r\n\tif (conversion === null) {\r\n\t\treturn 0;\r\n\t} else if (inputValue === \"-\") {\r\n\t\treturn 0;\r\n\t} else {\r\n\t\treturn inputValue;\r\n\t}\r\n}\r\n\r\nexport function isEndUser(pathString: string): boolean {\r\n\tif (pathString.includes(\"/easypiecylink/\")) {\r\n\t\treturn true;\r\n\t} else {\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nexport function convertStringToValue(string: any): any {\r\n\tif (string == \"\" || string == \" \") {\r\n\t\treturn -1;\r\n\t} else {\r\n\t\treturn Number(string);\r\n\t}\r\n}\r\nexport function convertValueToString(value: any): any {\r\n\tif (value === -1) {\r\n\t\treturn \"\";\r\n\t} else {\r\n\t\treturn value;\r\n\t}\r\n}"],"sourceRoot":""}