{"version":3,"sources":["config/Config.js","utils/DeepLinking.js","payloads/APIResponse.js","services/ApiService.js","utils/ApiPath.js","services/ApiSimulatorService.js","services/MockService.js","utils/ResponseUtil.js","services/LocalStorageService.js","services/SessionService.js","services/ProfileService.js","utils/StringUtils.js","images/logo_reverse.svg","services/AuthService.js","components/widgets/forms/LoginForm.jsx","components/widgets/footer/Footer.jsx","components/widgets/brochure/SignInBrochure.jsx","components/views/common/login/LoginView.jsx","services/ClassService.js","utils/RoleUtils.js","utils/SidebarMenuUtils.js","components/widgets/icons/ShopIcon.jsx","components/widgets/hamburger/MobileMenuOption.jsx","images/logo.svg","components/widgets/hamburger/MobileMenu.jsx","components/widgets/modals/ConfirmExitModal.jsx","components/widgets/buttons/BackButton.jsx","components/widgets/icons/CartIcon.jsx","components/widgets/buttons/CartButton.jsx","components/widgets/buttons/LogoutButton.jsx","components/widgets/buttons/SettingsButton.jsx","components/widgets/buttons/BookstoreButton.jsx","services/CourseService.js","components/widgets/buttons/StudentModeButton.jsx","components/widgets/buttons/InstructorModeButton.jsx","images/bookstore_logo.png","components/widgets/header/Header.jsx","services/LtiService.js","components/views/common/lti/LtiView.jsx","components/views/common/logout/LogoutView.jsx","payloads/Signup.js","services/RegistrationService.js","components/widgets/forms/RegisterForm.jsx","components/widgets/brochure/SignUpBrochure.jsx","components/views/common/register/RegisterView.jsx","payloads/Recovery.js","components/widgets/forms/RecoveryForm.jsx","components/widgets/brochure/RecoveryBrochure.jsx","components/views/common/recovery/RecoveryView.jsx","components/widgets/sidebar/SidebarMenuOption.jsx","services/SchoolService.js","utils/VideoTimeUtils.js","utils/LimespringUtils.js","components/widgets/sidebar/SidebarMenu.jsx","components/widgets/breadcrumb/LSBreadcrumb.jsx","utils/ObjectUtils.js","services/CacheService.js","services/StudentService.js","images/check.svg","components/widgets/modals/PasswordChangeModal.jsx","payloads/Student.js","components/widgets/forms/AccountSettingsForm.jsx","components/views/common/settings/SettingsView.jsx","components/views/common/notfound/NotFoundView.jsx","payloads/ForgotPass.js","components/widgets/forms/ForgotForm.jsx","components/widgets/brochure/ForgotBrochure.jsx","components/views/common/forgot/ForgotView.jsx","components/views/common/plans/PlanWidget.jsx","services/SubscriptionService.js","components/views/common/plans/PlanView.jsx","components/views/common/plans/PlanConfirmationView.jsx","components/views/common/payment/PaymentWidget.jsx","components/views/common/payment/PaymentMethodsWidget.jsx","components/views/common/payment/PaymentView.jsx","services/BookstoreService.js","utils/NumberUtils.js","services/CartService.js","images/default_video_thumbnail.png","components/widgets/tile/BookstoreTile.jsx","components/views/common/bookstore/BookstoreLibraryRow.jsx","components/views/common/bookstore/BookstoreLibrary.jsx","components/views/common/bookstore/BookstoreView.jsx","components/views/common/bookstore/BookstoreConfirmationWidget.jsx","components/views/common/bookstore/BookstoreConfirmationView.jsx","services/UnitService.js","services/AssessmentService.js","services/LectureService.js","components/views/common/bookstore/BookstoreCartOrderWidget.jsx","components/views/common/bookstore/BookstoreCartSummaryWidget.jsx","components/views/common/bookstore/BookstoreCartView.jsx","components/views/common/bookstore/BookstorePaymentWidget.jsx","components/views/common/bookstore/BookstorePaymentView.jsx","images/holder.png","components/views/common/bookstore/BookstoreReviewsRow.jsx","services/InstructorService.js","services/ProductReviewService.js","components/widgets/icons/LikeIcon.jsx","components/widgets/icons/SmileEmojiIcon.jsx","components/widgets/icons/BadgeCCIcon.jsx","components/widgets/icons/LevelIcon.jsx","components/views/common/bookstore/BookstoreDetailsView.jsx","components/views/common/maintenance/MaintenanceView.jsx","components/widgets/accessibility/AccessibilityToolbar.jsx","services/AssetService.js","utils/ArrayUtils.js","services/StudentLogService.js","services/MarkerService.js","models/VideoTrack.js","services/TrackService.js","components/widgets/videoplayer/YouTubeVideoPlayer.jsx","components/views/instructor/builders/LectureVideoViewer.jsx","utils/DateUtils.js","services/AnnouncementService.js","services/TaskService.js","components/widgets/announcements/Announcements.jsx","images/medal-gold.png","images/medal-silver.png","images/medal-bronze.png","images/medal-pending.svg","components/widgets/tile/AwesomeTile.jsx","components/widgets/class-list/ClassList.jsx","components/widgets/tile/UnitTile.jsx","components/widgets/unit-list/UnitList.jsx","components/views/student/dashboard/DashboardView.jsx","services/FeedbackService.js","components/widgets/rater/Star.jsx","components/widgets/rater/Rater.jsx","components/widgets/modals/RateLectureModal.jsx","components/widgets/videoplayer/VideoJSPlayer.jsx","images/watermark.png","components/widgets/videoplayer/LimespringVideoPlayer.jsx","payloads/Playlist.js","proxies/PlaylistProxy.js","components/widgets/playlist/PlayVideoQuizzes.jsx","components/widgets/playlist/PlayVideoButton.jsx","components/widgets/playlist/PlayVideoExamButton.jsx","components/widgets/playlist/PlayVideoWorkbookButton.jsx","components/widgets/playlist/PlayVideoAssignmentButton.jsx","services/AttemptService.js","images/image_icon.png","images/txt_icon.png","components/widgets/playlist/PlayAncillaryItem.jsx","images/pdf_icon.png","images/word_icon.png","images/excel_icon.png","images/ppt_icon.png","images/link_icon.png","components/widgets/playlist/PlaylistTranscript.jsx","services/TranscriptService.js","services/CompileService.js","utils/CodeInputUtils.js","components/views/student/unit/UnitLayout.jsx","components/views/student/unit/UnitView.jsx","components/views/student/class/ClassView.jsx","components/widgets/pagination/AssessmentPager.jsx","components/widgets/math/MathDisplayField.jsx","images/math/keyboard.png","components/widgets/keyboard/KeyboardTile.jsx","utils/KeyboardLayoutUtils.js","components/widgets/keyboard/MathKeyboard.jsx","hooks/KeyboardInputContext.js","components/widgets/keyboard/MathKeyboardDrawer.jsx","utils/LatexUtils.js","components/widgets/math/StudentMathInputField.jsx","services/QuestionService.js","components/widgets/modals/IncorrectQuestionModal.jsx","components/widgets/modals/ImagePreviewModal.jsx","components/widgets/assessments/AssessmentQuestion.jsx","payloads/Answer.js","utils/AssessmentUtils.js","utils/RandomUtils.js","payloads/Attempt.js","components/widgets/stopwatch/Stopwatch.jsx","images/timesup.svg","components/widgets/modals/TimeUpModal.jsx","components/widgets/modals/ExamCompleteModal.jsx","components/widgets/modals/MissingSavedAnswerModal.jsx","components/views/student/assessments/ExamView.jsx","components/views/student/assessments/ExamResults.jsx","components/views/student/assessments/PlacementExamResults.jsx","images/quiz-waytogo.png","components/widgets/modals/QuizSuccessModal.jsx","components/widgets/modals/QuizSuccessTokenModal.jsx","components/widgets/modals/QuizTryAgainModal.jsx","images/quiz-tryagain.png","components/widgets/modals/QuizHintModal.jsx","components/widgets/modals/ExplanationModal.jsx","components/widgets/modals/SubmitWaitModal.jsx","components/widgets/pagination/QuizPager.jsx","utils/RangeUtils.js","utils/MathInputUtils.js","utils/StudentAnswersUtils.js","utils/DelayUtils.js","components/views/student/assessments/QuizView.jsx","components/widgets/modals/WorkbookCompletedModal.jsx","images/workbook.png","components/views/student/assessments/WorkbookView.jsx","services/AssignmentService.js","components/views/student/assessments/AssignmentView.jsx","components/views/student/gradebook/GradebookView.jsx","images/inprogress.svg","components/views/student/gradebook/GradebookUnitsView.jsx","images/retry.svg","images/caret-right-square_green.svg","images/caret-right-square_grey.svg","components/widgets/gradebooktable/GradebookTable.jsx","components/views/student/gradebook/GradebookUnitsTableView.jsx","images/createmanage.png","images/students.png","images/tutorials.png","components/widgets/links/DashboardLinks.jsx","images/otheroptions.png","components/widgets/tables/StudentsFeedbackTable.jsx","components/views/instructor/dashboard/panels/HomePanel.jsx","payloads/School.js","components/widgets/modals/instructor/SchoolModal.jsx","components/widgets/modals/instructor/ConfirmDeleteModal.jsx","components/views/instructor/dashboard/panels/SchoolsPanel.jsx","payloads/Instructor.js","components/widgets/modals/instructor/InstructorModal.jsx","components/widgets/drawer/Drawer.jsx","components/widgets/texteditor/SimpleTextEditor.jsx","components/widgets/imagecropper/ImageCropper.jsx","services/SearchService.js","components/widgets/pickers/MultiSelectPicker.jsx","payloads/Class.js","components/widgets/modals/instructor/StudentModal.jsx","payloads/Course.js","payloads/Unit.js","components/widgets/texteditor/TranscriptEditor.jsx","payloads/Lecture.js","models/Track.js","models/Transcript.js","components/widgets/thumbnails/ThumbnailCreator.jsx","payloads/Marker.js","components/widgets/panel-searchbar/PanelSearchBar.jsx","payloads/Asset.js","components/widgets/library/LibraryItem.jsx","utils/FileUtils.js","models/Question.js","components/widgets/modals/instructor/QuestionBuilderModalHeader.jsx","images/math/sourcecode.png","components/widgets/math/MathInputArea.jsx","images/math/multimedia.png","components/widgets/texteditor/QuestionMultimedia.jsx","components/widgets/texteditor/MathTextEditor.jsx","images/algebra_keyboard_template.png","components/widgets/keyboard/MathKeyboardLayoutSelectorButton.jsx","components/widgets/keyboard/MathKeyboardLayoutSelector.jsx","images/math/keyboard.svg","components/widgets/modals/instructor/MultimediaModal.jsx","components/widgets/modals/instructor/QuestionHintModal.jsx","components/widgets/modals/instructor/QuestionSourceCodeModal.jsx","components/widgets/modals/instructor/QuestionExplanationModal.jsx","images/matheq.svg","models/Choice.js","components/widgets/choices/MultipleChoiceMenu.jsx","components/widgets/math/MathRangePreciseSelector.jsx","components/widgets/choices/ShortAnswerMenu.jsx","components/widgets/choices/CodeInputMenu.jsx","components/widgets/modals/instructor/QuestionBuilderModalQuestionChoices.jsx","components/widgets/modals/instructor/ChoicesWarningModal.jsx","images/icon_warning.png","components/widgets/modals/instructor/QuestionBuilderModalQuestion.jsx","services/StepService.js","components/widgets/modals/instructor/QuestionBuilderModalQuestionTabs.jsx","components/widgets/modals/instructor/QuestionBuilderModal.jsx","utils/QuestionDecoratorUtil.js","components/widgets/sortable-list/SortableItem.jsx","components/widgets/sortable-list/SortableList.jsx","components/widgets/modals/instructor/ImportQuestionsModal.jsx","components/widgets/modals/instructor/BatchImportModal.jsx","utils/IndexUtils.js","components/widgets/modals/instructor/AssessmentPreviewModal.jsx","payloads/Assessment.js","utils/ExcelUtils.js","components/views/instructor/drawers/AssessmentDrawer.jsx","components/widgets/modals/instructor/LinkAssetModal.jsx","components/widgets/modals/instructor/AncillaryModal.jsx","components/widgets/videoplayer/AncillaryVideoPlayer.jsx","components/widgets/ancillary/AncillaryTable.jsx","components/widgets/modals/instructor/TranscriptImportModal.jsx","components/widgets/translate/TranslateDropdown.jsx","services/LanguageService.js","components/widgets/texteditor/TranscriptEditorRow.jsx","components/widgets/modals/instructor/TranslationWarningModal.jsx","components/views/instructor/builders/LectureBuilder.jsx","components/views/instructor/drawers/LectureDrawer.jsx","components/views/instructor/builders/UnitBuilder.jsx","components/views/instructor/drawers/UnitDrawer.jsx","components/views/instructor/builders/CourseBuilder.jsx","components/views/instructor/drawers/CourseDrawer.jsx","components/views/instructor/builders/ClassBuilder.jsx","components/views/instructor/drawers/ClassDrawer.jsx","components/views/instructor/dashboard/panels/InstructorsPanel.jsx","services/PaginationService.js","models/Student.js","components/widgets/modals/instructor/BatchStudentsImportModal.jsx","components/views/instructor/dashboard/panels/StudentsPanel.jsx","components/views/instructor/dashboard/panels/ClassesPanel.jsx","components/widgets/lecture-tile/LectureExpandable.jsx","components/views/instructor/dashboard/panels/UnitsPanel.jsx","components/views/instructor/dashboard/panels/LecturesPanel.jsx","components/widgets/tooltips/ChoiceTooltip.jsx","components/widgets/modals/instructor/EmailInputModal.jsx","components/views/instructor/dashboard/panels/AssessmentsPanel.jsx","components/widgets/modals/instructor/LibrarypanelEditModal.jsx","components/widgets/dragndrop/DropZone.jsx","components/views/instructor/dashboard/panels/LibraryPanel.jsx","components/views/instructor/dashboard/panels/ReportsPanel.jsx","components/views/instructor/dashboard/panels/QuestionsPanel.jsx","services/AdminService.js","payloads/Admin.js","components/widgets/modals/instructor/AdminModal.jsx","components/views/instructor/dashboard/panels/AdminPanel.jsx","components/views/instructor/dashboard/panels/CoursesPanel.jsx","components/widgets/toolbar/ToolbarItem.jsx","components/widgets/toolbar/ToolbarButton.jsx","components/widgets/toolbar/Toolbar.jsx","config/NetworkConfig.js","components/widgets/network/LSNodeDecorator.jsx","images/default_exam_thumbnail.png","images/default_workbook_thumbnail.png","services/PlotService.js","components/widgets/modals/instructor/LectureModal.jsx","components/widgets/network/LSNetwork.jsx","components/views/instructor/builders/CourseBuilderView.jsx","services/ReportService.js","services/ChartService.js","utils/ReportUtils.js","components/widgets/reports/class/StudentsPerformanceTable.jsx","components/widgets/reports/class/StudentsUnitsCompletedChart.jsx","services/KpiService.js","components/widgets/math/ReportDynamicMathField.jsx","components/widgets/tooltips/ReportAssessmentTooltip.jsx","components/widgets/reports/QuestionAttemptRow.jsx","utils/TimeUtils.js","components/widgets/modals/instructor/QuestionAssessmentsModal.jsx","components/widgets/accordion/AccordionToggle.jsx","components/widgets/reports/student/StudentUnitScoresTable.jsx","components/widgets/reports/student/StudentVideoToQuizTimeChart.jsx","components/widgets/reports/student/StudentQuizAttemptsChart.jsx","components/widgets/modals/instructor/ConfirmResetModal.jsx","components/widgets/modals/instructor/KpiReportModal.jsx","components/widgets/charts/ScatterChart.jsx","components/views/instructor/drawers/StudentReportDrawer.jsx","components/views/instructor/drawers/ReportDrawer.jsx","services/AnalyticsService.js","components/views/instructor/dashboard/panels/AnalyticsPanel.jsx","components/widgets/links/DashboardCreateManageContentLinks.jsx","images/createcontent.png","components/views/instructor/dashboard/panels/CreateManageContentPanel.jsx","images/invite-student.png","components/widgets/links/DashboardManageStudentsLinks.jsx","images/AddStudents.png","components/views/instructor/dashboard/panels/ManageStudentsPanel.jsx","components/widgets/links/DashboardOtherOptionsLinks.jsx","images/plan.png","images/shoppingcart.png","components/views/instructor/dashboard/panels/ManageOtherOptionsPanel.jsx","images/units.png","images/lessons.png","images/Quizzes.png","components/widgets/links/DashboardManageCreateContentLinks.jsx","images/course.png","components/views/instructor/dashboard/panels/CreateContentPanel.jsx","components/widgets/links/DashboardManageContentLinks.jsx","images/Questions.png","components/views/instructor/dashboard/panels/ManageContentPanel.jsx","components/widgets/modals/instructor/TutorialsModal.jsx","services/TutorialService.js","payloads/Tutorial.js","components/widgets/tutorials/TutorialBuilder.jsx","components/widgets/tutorials/TutorialModal.jsx","components/widgets/links/DashboardVideoTutorials.jsx","components/widgets/banner/Banner.jsx","components/views/instructor/dashboard/panels/TutorialsPanel.jsx","components/views/instructor/dashboard/DashboardView.jsx","components/app/App.jsx","serviceWorker.js","index.js"],"names":["activeProfile","baseURL","localURL","defaultPasswordLength","playbackServerTimer","googleAnalyticsTrackingId","LOGIN_VIEW_PATH","LTI_VIEW_PATH","LTI_13_CALLBACK_PATH","SIGN_UP_VIEW_PATH","RECOVERY_VIEW_PATH","LOGOUT_VIEW_PATH","LECTURE_VIDEO_PATH","ASSESSMENT_QUIZ_ANONYMOUS","SETTINGS_VIEW_PATH","CATALOG_VIEW_PATH","SHOP_VIEW_PATH","FORGOT_PASSWORD_VIEW_PATH","PLAN_VIEW_PATH","PLAN_PAYMENT_VIEW_PATH","PLAN_CONFIRMATION_VIEW_PATH","BOOKSTORE_VIEW_PATH","BOOKSTORE_CONFIRMATION_VIEW_PATH","BOOKSTORE_CART_VIEW_PATH","BOOKSTORE_CHECKOUT_VIEW_PATH","BOOKSTORE_DETAILS_VIEW_PATH","MAINTENANCE_VIEW_PATH","STUDENT","DASHBOARD_VIEW_PATH","GRADEBOOK_VIEW_PATH","GRADEBOOK_UNITS_VIEW_PATH","GRADEBOOK_UNITS_TABLE_VIEW_PATH","SECTION_VIEW_PATH","UNIT_VIEW_PATH","CLASS_VIEW_PATH","EXAM_VIEW_PATH","EXAM_RESULTS_PATH","PLACEMENT_EXAM_RESULTS_PATH","QUIZ_VIEW_PATH","WORKBOOK_VIEW","ASSIGNMENT_VIEW","MANAGEMENT","ROOT_VIEW_PATH","DASHBOARD_CREATE_MANAGE_CONTENT_PATH","DASHBOARD_MANAGE_STUDENTS_PATH","DASHBOARD_CREATE_CONTENT_PATH","DASHBOARD_MANAGE_CONTENT_PATH","DASHBOARD_OTHER_OPTIONS_PATH","DASHBOARD_TUTORIALS_PATH","COURSES_VIEW_PATH","ADMINS_VIEW_PATH","INSTRUCTORS_VIEW_PATH","STUDENTS_INVITE_PATH","STUDENTS_VIEW_PATH","SECTIONS_VIEW_PATH","APIResponse","status","data","error","this","JSON","stringify","ApiService","setup","axios","defaults","Config","headers","common","SessionService","getToken","post","get","endpoint","payload","res","response","console","document","location","href","message","delete","upload","key","form","FormData","append","HEALTH_ENDPOINT","MAINTENANCE_STATUS_ENDPOINT","LOGIN_ENDPOINT","LOGOUT_ENDPOINT","MIMIC_ENDPOINT","GET_SECTIONS_ENDPOINT","SIGN_UP_USER_ENDPOINT","FORGOT_PASS_ENDPOINT","RECOVER_ACCT_ENDPOINT","SEARCH_ENDPOINT","PAGINATION_ENDPOINT","ANALYTICS_ENDPOINT","GET_ASSIGNMENT_ENDPOINT","COMPILE_CODE_ENDPOINT","COMPILE_QUESTION_ENDPOINT","GET_SESSIONS_ENDPOINT","GET_LANGUAGES_ENDPOINT","LTI_VALIDATE_ENDPOINT","LTI_GRADEBOOK_SYNC_ENDPOINT","REFRESH_CACHE","RELOAD_CACHE","LOGIN_CACHE","SYNC_CACHE","UPDATE_PASSWORD_ENDPOINT","SETTINGS_RESET_PASSWORD_ENDPOINT","GET_FEEDBACKS_ENDPOINT","DOWNLOAD_FEEDBACKS_ENDPOINT","CREATE_CART_ENDPOINT","GET_CART_ENDPOINT","UPDATE_CART_ENDPOINT","APPLY_PROMOCODE_CART_ENDPOINT","CHECKOUT_CART_ENDPOINT","SUBMIT_PAYMENT_ENDPOINT","GET_ROSTERS_ENDPOINT","GET_ROSTER_ENDPOINT","CREATE_ROSTER_ENDPOINT","UPDATE_ROSTER_ENDPOINT","REMOVE_ROSTER_ENDPOINT","GET_SCHOOLS_ENDPOINT","GET_SCHOOL_ENDPOINT","CREATE_SCHOOL_ENDPOINT","UPDATE_SCHOOL_ENDPOINT","REMOVE_SCHOOL_ENDPOINT","GET_ADMINS_ENDPOINT","CREATE_ADMIN_ENDPOINT","UPDATE_ADMIN_ENDPOINT","REMOVE_ADMIN_ENDPOINT","GET_INSTRUCTORS_ENDPOINT","CREATE_INSTRUCTOR_ENDPOINT","GET_INSTRUCTORS_BY_IDS_ENDPOINT","UPDATE_INSTRUCTOR_ENDPOINT","REMOVE_INSTRUCTOR_ENDPOINT","GET_STUDENTS_ENDPOINT","CREATE_STUDENT_ENDPOINT","GET_STUDENT_ENDPOINT","GET_STUDENTS_BY_IDS_ENDPOINT","UPDATE_STUDENT_ENDPOINT","UPDATE_STUDENT_SETTINGS_ENDPOINT","REMOVE_STUDENT_ENDPOINT","BATCH_STUDENTS_ENDPOINT","INVITE_STUDENT_ENDPOINT","GET_CLASSES_ENDPOINT","GET_ONLY_CLASSES_ENDPOINT","GET_CLASS_ENDPOINT","GET_CLASS_POPULATE_ENDPOINT","CREATE_CLASS_ENDPOINT","UPDATE_CLASS_ENDPOINT","REMOVE_CLASS_ENDPOINT","CLASS_THUMBNAIL_ENDPOINT","GET_ANNOUNCEMENTS_ENDPOINT","CREATE_ANNOUNCEMENT_ENDPOINT","UPDATE_ANNOUNCEMENT_ENDPOINT","REMOVE_ANNOUNCEMENT_ENDPOINT","GET_QAS_ENDPOINT","PUBLISH_QA_ENDPOINT","UPDATE_QA_ENDPOINT","REMOVE_QA_ENDPOINT","GET_ASSETS_ENDPOINT","GET_ASSET_ENDPOINT","GET_ASSET_ANONYMOUS_ENDPOINT","CREATE_ASSET_ENDPOINT","UPDATE_ASSET_ENDPOINT","REMOVE_ASSET_ENDPOINT","GET_ASSESSMENTS_ENDPOINT","GET_ASSESSMENT_ENDPOINT","GET_ASSESSMENTS_BY_IDS_ENDPOINT","GENERATE_ASSESSMENT_URL","GET_ASSESSMENT_QUIZ_ANONYMOUS","CREATE_ASSESSMENT_ENDPOINT","UPDATE_ASSESSMENT_ENDPOINT","REMOVE_ASSESSMENT_ENDPOINT","GET_LECTURES_ENDPOINT","GET_LECTURES_BY_IDS_ENDPOINT","CREATE_LECTURE_ENDPOINT","UPDATE_LECTURE_ENDPOINT","REMOVE_LECTURE_ENDPOINT","CHECK_LECTURE_TRANSCRIPTS_ENDPOINT","GENERATE_LECTURE_TRANSCRIPT_ENDPOINT","REMOVE_LECTURE_TRANSCRIPTS_ENDPOINT","GENERATE_LECTURE_URL","GET_LECTURE_VIDEO","GET_MARKERS_ENDPOINT","GET_MARKERS_BY_IDS_ENDPOINT","CREATE_MARKER_ENDPOINT","UPDATE_MARKER_ENDPOINT","REMOVE_MARKER_ENDPOINT","GET_COURSES_ENDPOINT","GET_COURSE_ENDPOINT","CREATE_COURSE_ENDPOINT","UPDATE_COURSE_ENDPOINT","REMOVE_COURSE_ENDPOINT","GET_UNITS_ENDPOINT","GET_UNIT_ENDPOINT","CREATE_UNIT_ENDPOINT","UPDATE_UNIT_ENDPOINT","REMOVE_UNIT_ENDPOINT","GET_QUESTIONS_ENDPOINT","GET_QUESTIONS_REMOTE_ENDPOINT","CREATE_QUESTION_ENDPOINT","BATCH_QUESTIONS_ENDPOINT","UPDATE_QUESTION_ENDPOINT","REMOVE_QUESTION_ENDPOINT","GET_LATEST_QUESTION_REMOTE_ENDPOINT","UPDATE_QUESTIONSET_ENDPOINT","TRACKER_CLASS_ENDPOINT","TRACKER_UNIT_ENDPOINT","TRACKER_LECTURE_ENDPOINT","TRACKER_MARKER_ENDPOINT","TRACKER_ASSESSMENT_ENDPOINT","GET_FEEDBACK_ENDPOINT","CREATE_FEEDBACK_ENDPOINT","UPDATE_FEEDBACK_ENDPOINT","REMOVE_FEEDBACK_ENDPOINT","GET_SUBSCRIPTION_PLANS_ENDPOINT","CREATE_SUBSCRIPTION_PLAN_ENDPOINT","UPDATE_SUBSCRIPTION_PLAN_ENDPOINT","REMOVE_SUBSCRIPTION_PLAN_ENDPOINT","SUBMIT_ATTEMPT_ENDPOINT","SUBMIT_ATTEMPT_TOKEN_ENDPOINT","UPDATE_ATTEMPT_ENDPOINT","GET_ATTEMPTS_ENDPOINT","REMOVE_ATTEMPTS_ENDPOINT","GET_ATTEMPT_FOR_ASSESSMENT_ENDPOINT","GET_BEST_ATTEMPT_FOR_ASSESSMENT_ENDPOINT","GET_SYSTEMLOGS_ENDPOINT","GET_LOG_FOR_STUDENT_ENDPOINT","RESET_LOG_ENDPOINT","GET_REPORTS_ENDPOINT","GET_REPORT_ENDPOINT","GET_REPORT_BY_CLASSID_ENDPOINT","GET_REPORT_BY_CLASSID_STUDENTID_ENDPOINT","GET_TRANSCRIPT_BY_ID_ENDPOINT","GET_TRANSCRIPT_LANGUAGE_CODE_ENDPOINT","CREATE_TRANSCRIPT_LANGUAGE_CODE_ENDPOINT","GET_CHART_CLASS_ENDPOINT","GET_CHART_CLASS_STUDENT_ENDPOINT","GET_KPI_CLASS_STUDENT_ENDPOINT","GET_TUTORIALS_ENDPOINT","CREATE_TUTORIAL_ENDPOINT","mockSuccessfulAPIResponse","mockFailedAPIResponse","mockNotFoundAPIResponse","mockLongAPIResponse","millis","delay","ms","Promise","resolve","reject","setTimeout","log","maintenance","ApiSimulatorService","login","authData","enroll","forgot","recover","resetPassword","createSchool","updateSchool","schoolsData","removeSchool","createAdmin","adminsData","updateAdmin","removeAdmin","createInstructor","instructorsData","updateInstructor","removeInstructor","createStudent","studentsData","updateStudent","removeStudent","createClass","updateClass","classesData","removeClass","getAsset","assetsData","createAsset","updateAsset","removeAsset","createAssessment","assessmentsData","updateAssessment","removeAssessment","createQuestion","questionsData","batchQuestion","updateQuestion","removeQuestion","updateQuestionSet","getLectures","lecturesData","createLecture","updateLecture","removeLecture","createMarker","markersData","updateMarker","removeMarker","createCourse","coursesData","updateCourse","removeCourse","createUnit","unitsData","updateUnit","removeUnit","removeAnnouncement","announcementsData","createFeedback","feedbacksData","updateFeedback","removeFeedback","getSubscriptionPlans","subscriptionPlansData","createSubscriptionPlan","updateSubscriptionPlan","removeSubscriptionPlan","trackClass","studentLogsData","trackUnit","trackLecture","trackMarker","trackAssessment","timersData","likeQa","qasData","publishQa","refreshCache","cacheData","reloadCache","syncCache","getSystemLogs","systemLogsData","getAttempts","attemptsData","removeAttempts","updateAttempts","submitExam","examResultsData","getAttemptForAssessment","updatePassword","createCart","cartData","addItemToCart","removeItemFromCart","applyPromoCodeToCart","submitPayment","paymentInfo","validateLti","syncGradebookLti","checkTranscripts","generateTranscript","addThumbnailToClass","logout","logoutData","getCart","getReports","reportsData","getReport","reportData","getPlots","plotsData","getQas","getAssessments","getTests","getMarkers","getQuestions","getQuestionSets","questionSetsData","getTasks","tasksData","getUnits","getAssets","getAnnouncements","getInstructors","getClasses","getCourses","userData","sessionData","serverSessionData","bookstoreData","productReviewData","achievementsData","videotracksData","languagesData","isOK","isRedirect","obj","localStorage","setItem","clear","type","MockService","getSession","parse","getItem","getProfile","getSchools","getAdmins","getStudents","getStudentLogs","getRosters","getFeedbacks","getVideoTracks","getTimers","getTranscripts","LocalStorageService","getAllFromServer","ResponseUtil","getSessions","ApiPath","sessions","getCurrentUserId","session","userId","token","profile","role","s","charAt","toUpperCase","slice","toLowerCase","undefined","html","txt","createElement","innerHTML","value","genericString","char","startsWith","includes","test","substr","trim","replace","genericStringWithNoCommas","numberFromString","Number","NaN","isNaN","filename","email","password","mimicStudent","sessionId","_id","LoginForm","history","useHistory","useState","showWrongInputAlert","setShowWrongInputAlert","showFailedLoginAlert","setShowFailedLoginAlert","setEmailInput","setPasswordInput","disableForm","setDisableForm","handleSubmit","e","preventDefault","StringUtils","AuthService","user","library","push","DeepLinking","Alert","variant","show","onClose","dismissible","id","className","style","backgroundImage","logo","size","Form","Group","controlId","Control","disabled","placeholder","name","defaultValue","onChange","target","Button","onClick","Spinner","animation","to","Footer","currentYear","Date","getFullYear","SignInBrochure","LoginView","useEffect","title","ReactGA","pageview","window","pathname","search","getAllSimpleFromRemote","classes","getAllFromRemote","getFromRemote","cls","getClassPopulated","getAll","find","_class","getByIds","ids","map","getClassesForInstructor","length","filter","instructors","getClassesForStudent","students","getAllStudentsForClass","clone","createdBy","create","addThumbnail","classId","update","remove","ShopIcon","props","width","height","mode","viewBox","fill","xmlns","fillRule","d","MobileMenuOption","label","handler","getIcon","MobileMenu","menuOpen","setMenuOpen","setProfile","ProfileService","loadPage","RoleUtils","UNITS_VIEW_PATH","LECTURES_VIEW_PATH","ASSESSMENTS_VIEW_PATH","QUESTIONS_VIEW_PATH","LIBRARY_VIEW_PATH","REPORTS_VIEW_PATH","ANALYTICS_VIEW_PATH","isOpen","onStateChange","state","src","menuItems","SidebarMenuUtils","menuItem","index","renderMenuItems","ConfirmExitModal","onHide","onCancel","onProceed","Modal","centered","backdrop","Header","closeButton","Title","BackButton","currentView","modalShow","setModalShow","go","goBack","cursor","CartIcon","CartButton","LogoutButton","adjust","SettingsButton","BookstoreButton","items","courses","course","_courses","c","getLatest","getCoursesForUnit","unitId","units","unit","StudentModeButton","showAssignedClasses","ClassService","forEach","CourseService","concat","_c","InstructorModeButton","userAdmin","sessionAdmin","logAdmin","logs","removeItem","showSettings","showStudentMode","showInstructorMode","showBookstore","showBack","showLogout","showCart","fromAdminInstructor","BookstoreLogo","LimespringLogo","backgroundColor","validate","syncGradebook","studentId","LtiView","showFailedLaunch","setShowFailedLaunch","runValidation","LtiService","success","LogoutView","logoutMessage","fareWell","onLoad","alt","Signup","signature","phoneNumber","termsAccepted","RegisterForm","query","showInputAlert","setShowInputAlert","showFailedRegisterAlert","setShowFailedRegisterAlert","showSuccess","setShowSuccess","emailInput","passwordInput","phoneNumberInput","setPhoneNumberInput","termsAndConditionsInput","setTermsAndConditionsInput","issueInConfirmPass","setIssueInConfirmPass","confirmPasswordInput","setConfirmPasswordInput","input","RegistrationService","validateConfirmPass","Check","custom","Fragment","checked","color","SignUpBrochure","RegisterView","Recovery","RecoveryForm","showFailedAlert","setShowFailedAlert","lockFields","setLockFields","clearWarnings","checkConfirmation","RecoveryBrochure","RecoveryView","SidebarMenuOption","path","active","allData","schools","school","durationInSeconds","_seconds","Math","round","hours","floor","minutes","seconds","timeLeft","timestamp","parts","split","_minutes","parseInt","decimalGrade","firstName","lastName","schoolIds","SchoolService","reduce","prev","curr","marker","text","assessment","assetType","targetId","asset","content","VideoTimeUtils","cuePoint","tracks","t","highlight","SidebarMenu","redirect","panel","showStudentFromAdminInstructor","version","currentTarget","setCurrentTarget","useLocation","activateMenuOption","handleInstructorViewClick","LimespringUtils","renderUserInfo","LSBreadcrumb","paths","Breadcrumb","Item","Object","keys","constructor","refresh","sync","syncLogin","reloadData","parentId","targetData","ObjectUtil","p","reload","student","getSomeFromRemote","getSchoolStudents","schoolId","regenerateCredentials","sendInviteToStudent","updateByStudentSettings","batch","PasswordChangeModal","step","setStep","currentPassword","setCurrentPassword","viewPassword","setViewPassword","setDisabled","showErrorAlert","setShowErrorAlert","reset","showPassword","savePassword","Body","checkIcon","margin","display","Student","mobile","conditions","cloud9Access","AccountSettingsForm","showAlert","setShowAlert","setMessage","userAvatar","setUserAvatar","modalState","setModalState","setFirstName","setLastName","userPhoneNumber","setUserPhoneNumber","setStudent","loading","setLoading","fetchStudent","profileData","StudentService","studentData","avatar","handleUpdateProfile","aws","closeAlert","handleUserAvatar","getElementById","click","handleNewFile","file","files","reader","FileReader","onload","event","result","readAsDataURL","SettingsView","isStudent","setIsStudent","NotFoundView","ForgotPass","ForgotBrochure","ForgotForm","ForgotView","PlanWidget","track","features","price","current","feature","textToDisplay","plan","plans","PlanView","setPlans","getPlans","SubscriptionService","getPlanType","category","showMenuSideButtons","showSearchBar","showLogoPlaceholder","showBackButton","costUSD","PlanConfirmationView","planId","setPlan","getPlan","PaymentWidget","PaymentMethodsWidget","PaymentView","getBookstore","getById","bookstore","b","n","toFixed","pow","places","multiplier","isFinite","cart","addItem","item","itemprices","ci","subtotal","a","total","taxes","discount","Error","applyPromo","promocode","code","scope","amount","discounts","NumberUtils","checkout","processPayment","BookstoreTile","addCourseToCart","addToCart","CartService","Card","controls","poster","thumbnail","ThumbnailBackupImage","rating","rate","interactive","BookstoreLibraryRow","populateBookstoreTile","BookstoreLibrary","bookstoreLibrary","populateCategories","settings","categories","as","InputGroup","Prepend","Text","FormControl","allCourses","matrix","m","populateRows","BookstoreView","setBookstoreLibrary","setCart","BookstoreService","BookstoreConfirmationWidget","BookstoreConfirmationView","_units","u","assessments","getByIdsFromRemote","join","getWorkbookByIds","fa","getExamByIds","getLatestWorkbook","workbooks","getLatestExam","exams","getQuizzes","getExams","getPracticeTests","getQuizzesForLectures","lectureIds","lectures","LectureService","lectureQuizIds","lecture","getRemote","generateUrl","emails","getQuizAnonymous","getTranscript","lectureId","transcript","getLectureVideo","_lectures","assignedLectures","l","assignedLecture","quizIds","quizzes","quizId","quiz","AssessmentService","generateAutomaticTranscript","BookstoreCartOrderWidget","callback","setCourses","columns","dataField","sort","headerAlign","align","headerClasses","formatter","cellContent","row","UnitService","preview","keyField","baseProps","striped","hover","condensed","bootstrap4","bordered","noDataIndication","renderOrderSumary","BookstoreCartSummaryWidget","promoCode","setPromoCode","orderSummaryCheckout","BookstoreCartView","render","setRender","renderUpdate","BookstorePaymentWidget","orderSumary","BookstorePaymentView","BookstoreReviewsRow","courseReview","review","reviewerFullname","hasPremiumPlan","AvatarBackupImage","comment","instructor","i","getSchoolInstructors","getInstructorNames","getInstructorEmails","Set","getProductReviews","productReviews","pr","productId","LikeIcon","SmileEmojiIcon","BadgeCCIcon","LevelIcon","BookstoreDetailsView","courseId","bookstoreLibraryTile","setCourse","courseReviews","setCourseReviews","ProductReviewService","_instructor","InstructorService","fullName","views","reviews","Tabs","defaultActiveKey","transition","Tab","eventKey","description","quantity","topics","topic","_lecture","MaintenanceView","AccessibilityToolbar","fontSize","setFontSize","expanded","setExpanded","zoom","entry","newFontSize","getElementsByTagName","contrastAndBrightness","setting","htmlTag","classList","contains","add","invert","bodyTag","showDyslexiaFont","assets","getAllFromRemoteAndStore","getFromRemoteAnonymous","allAssets","limit","numberOfSets","ceil","sets","set","j","arr","findIndex","unshift","every","getFromRemoteForStudentId","getFullUnitLog","playlist","getUnit","unitlog","unitLog","lectureids","lecturelogs","lectureLog","assessmentids","assessmentLogs","assessmentslogs","assessmentLog","apply","quizzeslogs","getLogForClass","classLog","getIsStartOn","isStartOn","getStartOn","getLogForUnit","getLogForLecture","getLogForLectures","getLogForAssessments","getLogForMarkers","markersLogs","markers","markersLog","getLogForLikes","likes","getLogForGradebook","allLogs","unitLogs","lectureLogs","classlog","unitlogs","classUnit","ArrayUtils","unitLectures","unitAssessments","lectureslog","unitLecture","unitLectureAssessmentIds","assessmentslog","uaid","unitAssessment","resetAssessmentLog","logId","assessmentId","allmarkers","mk","VideoTrack","playbackTime","events","timers","createOrUpdateVideoProgressTrack","videotracks","videotrack","v","getVideoProgressTrack","getVideoProgressTracksByIds","resetVideoProgressTracks","vt","YouTubeVideoPlayer","isStudentView","showsYouTubeVideoUrl","onChangeThumbnail","onSetYoutubeDuration","onSetYoutubeUrl","youtubeVideoUrl","youtubeThumbnailUrl","autoplay","stop","onTimeUpdate","videoUrl","setVideoUrl","setIsLoading","thumbnailUrl","setThumbnailUrl","youtubePlayerRef","useRef","videoDuration","setVideoDuration","youtubePlayer","setYoutubePlayer","setOverlays","overlays","ready","setData","setLectureLog","setLectureLoaded","setVideoUrlSet","setDataPrepared","setPlayerReady","lastMarkerCheckRef","isYoutubePlayingRef","intervalIdRef","pauseVideo","StudentLogService","videoProgressTrack","TrackerService","lastCuePoint","videoMarkers","AssetService","time","required","buttonText","start","end","isAssessment","overlay","url","_url","originValue","separator","encodeURIComponent","_isStartOn","_markers","internalPlayer","playVideo","initializeUpdateCurrentTime","currTime","videoProgressStatus","seekTo","loadCuePoint","intervalId","setInterval","getCurrentTime","then","_currentTime","roundedTime","createOverlaysFromMarkers","applyOverlaysToPlayer","videoTrack","markerTracks","markerTrack","mt","markerId","resetYoutubeVideo","_asset","openInNewTab","catch","clearInterval","saveCuePoint","storedCuePoint","newWindow","open","alert","player","_overlays","getIframe","iframe","getDuration","durationVideo","currentTop","stopImmediatePropagation","querySelectorAll","getAttribute","getElementsByClassName","overlayDiv","position","bottom","top","right","zIndex","padding","border","borderRadius","playerWidth","offsetWidth","duration","addEventListener","parentNode","appendChild","opts","playerVars","disablekb","enablejsapi","fs","hl","showinfo","origin","getIdVideo","videoId","ampersandPosition","indexOf","substring","handleStateChange","playerState","YouTube","PlayerState","PLAYING","currentTime","abs","BUFFERING","handleOnReady","mrkr","MarkerService","_videoId","_thumbnailUrl","handleOnPlay","handleOnPause","handleOnEnd","handleOnPlaybackRateChange","handleOnError","handleOnPlaybackQualityChange","onSubmit","onBlur","containerId","onProgress","onReady","onPlay","onPause","onEnd","onError","onPlaybackRateChange","onPlaybackQualityChange","ref","LectureVideoViewer","DOMParser","setLecture","isYoutubeVideo","setIsYoutubeVideo","fetchVideoUrl","moment","day","format","date","dateToConvert","formattedDate","month","getMonth","getDate","formattedMonth","toString","padStart","formattedDay","tasks","pendingTasks","task","action","pendingTask","dueDate","assetId","toLocaleDateString","remaining","DateUtils","displayableLatestTasks","pendingVideoTasks","displayableVideoTasks","pendingVideoTask","dueTime","secondsLeft","announcements","instructorAnnouncements","announcement","systemAnnouncements","instructorAnnouncementColl","instructorAnnouncement","instructorId","from","icon","systemAnnouncementColl","systemAnnouncement","Announcements","callout","setAnnouncements","AnnouncementService","AwesomeTile","progress","isgradebook","ProgressBar","now","ClassList","studentGradebookTile","setClasses","setInstructors","setLog","getClassDescription","getClassProgress","cl","renderClass","UnitTile","studentUnitTile","setUnitlog","setLectures","numberOfLectures","totalOfQuizzes","getTotalOfQuizzes","getWorkbook","getExam","ReactHtmlParser","minWidth","UnitList","displayedUnits","setDisplayedUnits","renderUnit","DashboardView","setFromAdminInstructor","setCallout","setUnits","CacheService","feedbacks","feedback","allfeedbacks","fb","downloadCsv","timeout","Star","activate","onClicked","Rater","onRating","star0Activate","setStar0Activate","star1Activate","setStar1Activate","star2Activate","setStar2Activate","star3Activate","setStar3Activate","star4Activate","setStar4Activate","onStarClicked","RateLectureModal","onFeedback","stars","setStars","setComment","VideoPlayer","playerId","uuidv4","handleKeyPress","keyCode","paused","play","pause","init_player","nextProps","set_controls_visibility","hideControls","dispose","playerOptions","generate_player_options","videojs","querySelector","seekButtons","forward","back","init_player_events","html5","nativeTextTracks","preload","bigPlayButton","hidePlaybackRates","playbackRates","hidden_controls","Controls","x","controlBar","hide","previousTime","lastTimerCheck","lastMarkerCheck","el_","setAttribute","timer","on","focus","image","offsetH","offsetV","fadeDelay","markerStyle","observer","MutationObserver","mutations","mutation","attributeName","Array","element","config","attributes","elements","observe","textTrackSettings","setValues","fontFamily","fontPercent","windowColor","windowOpacity","textTracks","el","stopPropagation","newTime","currentSeconds","off","one","onSeeking","completeTime","onSeeked","bigPlayButtonCentered","crossOrigin","kind","captionvtt","srcLang","default","Component","defaultProps","LimespringVideoPlayer","caption","dock","completed","scrub","setPlayer","setMarkers","cue","onEndVideo","VideoJSPlayer","_player","onPlayerReady","onForwardOrRewind","Playlist","PlayVideoQuizzes","tooltipText","renderQuiz","quizProgress","OverlayTrigger","placement","Tooltip","source","bestScore","Badge","bg","getTime","renderQuizzLocked","PlayVideoButton","videoLength","isActive","videoCompleted","loadLecture","playLectureVideo","greencheck","paddingLeft","marginLeft","Collapse","in","order","quizlogs","populateQuizzes","PlayVideoExamButton","score","defaultText","listener","PlayVideoWorkbookButton","grade","isTaken","PlayVideoAssignmentButton","submit","attempt","attempts","submitWithToken","body","getForAssessment","getForAssessmentBestAttempt","getFirstPendingAttemptIndex","qindex","context","attemptIds","reports","PlayAncillaryItem","setIcon","setTitle","setTimestamp","getTitle","getTypeIcon","IconIMAGE","IconTXT","clickHandler","getThumbnail","PlaylistTranscript","gotoCuePoint","openAncillaryItem","transcriptLog","setTranscriptLog","setTracks","lastCue","setLastCue","$","dataset","cuePointInSecs","_tracks","processTranscriptLog","MathJax","typeset","getFromLocal","transcriptId","transcripts","getDefaultTranscript","createTranscript","languageCode","removeAllTranscripts","compile","output","compileQuestion","questionId","codeInput","updatedCodeInput","single_regex","inputs","match","exec","RegExp","newInput","newMessage","messageArray","lastEntry","pop","UnitLayout","currentLecture","playLectureOnDemand","preassessment","setPreassessment","preassessmentScore","setPreassessmentScore","hasPlacementExam","setHasPlacementExam","setPlaylist","SetLog","activeKey","setActiveKey","setTranscript","setPlaybackTime","finalAssessment","setFinalAssessment","setScrub","initialInputProcessed","setInitialInputProcessed","previousCodeInput","setPreviousCodeInput","setCodeInput","compiledOutput","setCompiledOutput","showInputPrompt","setShowInputPrompt","inputPromptMessage","setInputPromptMessage","promptInputCapture","setPromptInputCapture","setIsStartOn","startOn","setStartOn","editorOptions","readOnly","minimap","enabled","load","_startOn","Proxy","placementExam","placementExamLog","al","placementExamScore","trscRef","TranscriptService","_transcript","showLoader","fontHandler","currentSize","newSize","showWorkbook","workbook","nextWorkbookId","showAssignment","assignment","showExamResults","examParam","exam","AttemptService","examResult","showPreassessmentResults","populateList","lineHeight","lecturelog","formatedDate","loadLectureVideo","populateAssignment","assignmentLog","populateExam","bookExams","workBookLog","bookExamLog","showExam","populateWorbook","qualificationRange","showAncillaryItem","showTranscript","scrubVideoToCuepoint","showAncillaryItems","helpful_markers","getLectureCaptionUrl","lect","captionUrl","transcriptRef","showVideoPlayer","updatePlaybackTime","clearPreviousCodeInput","val","compileCode","transformedCodeInput","CodeInputUtils","lang","previousInput","CompileService","trigger","showCodeEditor","theme","line","options","defaultLanguage","whiteSpace","autoFocus","onKeyDown","onInputKeyDownHandler","onInputChangeHandler","showTabbedPlaylist","onSelect","k","addClass","onTabSelectedHandler","getFinalAssessmentForUnit","showAssessmentResults","finals","showAssessmentView","showFinalExam","taken","checkIfAssessmentHasBeenTaken","practiceTest","getFinalPracticeTestForUnit","practiceTestIsTaken","checkIfFinalPracticeTestIsTaken","questions","timeBased","durationInMinutes","showAssessmentAsPending","showFinalAssessmentScreen","UnitView","setUnit","setCurrentLecture","completeShow","setCompleteShow","loadCacheAndStart","_unit","lects","lectIds","scrollTo","onFeedbackProvided","FeedbackService","ClassView","setGrade","clazz","setClazz","setClassTitle","getClass","currentGrade","placementUnits","placementExamId","AssessmentPager","isExam","clickable","onItemClickHandler","addToast","useToasts","itemSets","setItemSets","currentSetIndex","setCurrentSetIndex","currentQuestion","setCurrentQuestion","maxItemsInSet","findCurrentQuestionIndex","q","getStatus","getItemsFromSet","Pagination","activeLabel","appearance","autoDismiss","itemClickHandler","prevNextClickHandler","paginationItems","Prev","Next","showItems","MathDisplayField","statement","css","htmlSupport","forceRender","enableMultiline","node","KeyboardTile","latex","tooltip","random","MathKeyboard","layout","userRole","maxHeight","keyboard","activeLayoutContent","KeyboardLayoutUtils","getKeyboardType","ObjectUtils","rows","buttons","mathOption","ltx","renderKeyboardType","KeyboardInputContext","createContext","inputFieldId","keyboardInput","showKeyboardDrawer","toggleShowKeyboardDrawer","updateInputFieldId","MathKeyboardDrawer","insert","foreign","close","isVisible","setIsVisible","keyboardInputContext","useContext","layouts","activeTab","setActiveTab","keyLayout","hasParenthesesOrSquareBrackets","addStyles","StudentMathInputField","onStatementUpdate","keyboardLayout","externalValue","setLatex","isDrawerOpen","setIsDrawerOpen","internalLatex","setInternalLatex","inputField","mathquillRef","prevLatexRef","LatexUtils","attr","useCallback","write","latexAfterInsert","requestAnimationFrame","handleLatexChange","mf","newLatex","mathField","onKeyPress","which","checkEnterKeyPressed","mathquillDidMount","keyboardIcon","question","all_questions","store","getLatestFromRemote","getLatestN","getAsAttempts","questions_copy","steppedQuestions","sq","steps","parent","isStepParent","timeSpentInSecs","selectedChoiceIds","inputChoice","viewHint","viewExplanation","claimedAsCorrect","choices","IncorrectQuestionModal","onTryAgain","onNextQuestion","hint","ImagePreviewModal","AssessmentQuestion","isWorkbook","retry","last","onAnswerSubmit","onHint","onExplanation","examSubmit","stepIndex","onStepExplanation","onStepHint","onStepAnswerSubmit","onStepsFinished","onChoiceUpdate","resetHasChanged","onResetChoiceUpdate","answer","setAnswer","setRetryQuestion","setAnimation","nextQuestionDisabled","setNextQuestionDisabled","showIncorrectQuestionModal","setShowIncorrectQuestionModal","initiallySelected","setInitiallySelected","steppedQuestion","setSteppedQuestion","currentStep","setCurrentStep","stepQuestions","setStepQuestions","showImageModal","setShowImageModal","imageUrl","setImageUrl","multimediaAsset","setMultimediaAsset","textInput","setTextInput","focusInputRef","focusInputRef1","initialInputState","setInitialInputState","hasChanged","setHasChanged","stepData","setStepData","loadAsset","initialState","getSelectedChoiceIds","getInputChoice","numberOfAttempts","animations","bounceIn","setupStepQuestion","_textInput","subtype","getPreviousInputAttempt","stepQuestionId","getInitialCodeInput","cssClass","getStepStatusCSS","stepNumber","resetState","handleInputChange","newValue","multimedia","QuestionService","sorted","checkAndSubmit","_answer","checkAndNextStep","saveInput","sentence","saveSelect","choiceId","onKeyPressed","renderMathInput","renderInput","choice","tabIndex","getPreviousCheckAttempt","onFocus","showTextArea","saveCodeInput","handleCancel","showNextOrSubmitButton","showCancelButton","isUndoButtonRenderable","subTitle","renderQuestionStatement","audio","currentStepQuestion","renderQuestionInput","onExplanationViewed","Answer","textInputChoice","timeSpentInMs","isCorrect","Random","array","knuthShuffle","Attempt","answers","timeSpent","contextId","timeTrigger","Stopwatch","initialTime","onUpdate","onFinish","onReset","setTimer","increment","tick","getSeconds","getMinutes","getHours","formatTime","TimeUpModal","timeIsUpIcon","retake","onRetakeHandler","ExamCompleteModal","onReview","MissingSavedAnswerModal","ExamView","examId","setExam","setQuestions","examLog","setExamLog","questionAttempts","setQuestionAttempts","currentQuestionIndex","setCurrentQuestionIndex","startTime","setStartTime","examDuration","setExamDuration","setExamStatus","setTimeBased","showRetakeOption","setShowRetakeOption","showTimeUpModal","setShowTimeUpModal","showExamCompleteModal","setShowExamCompleteModal","showMissingSaveAnswerModal","setShowMissingSaveAnswerModal","answerPendingToBeSaved","setAnswerPendingToBeSaved","isPlacementExam","setIsPlacementExam","currentStepIndex","setCurrentStepIndex","setIsTimedUp","resetTimer","setResetTimer","resetHasChangedAssessment","setResetHasChangedAssessment","getExamFromServer","submitExamToServer","qa","_profile","_exam","examTitle","_questions","examLogs","gotoExamResults","gotoUnitView","inProgressAttempts","_durationInit","getExamInitialDuration","_duration","getElapsedTimeFromServer","_questionAttempts1","buildExamWithPreviousAttempts","getNumberOfAnsweredAttemptsParam","forceTimeIsUp","buildNewExam","resetFlags","timeCondition","parseFloat","reloadNewExam","scrambleChoices","scrambledChoices","RandomUtils","_attempts","attemptLog","existingQuestionAttemptLog","alq","textAnswer","isStepChild","_examDuration","TrackService","elapsedTime","onReviewExamen","examStatus","examAttempt","answerAttempts","AssessmentUtils","setAnswers","setTimeSpent","goToNextQuestion","isLastQuestion","nextIndex","checkIfExamIsReady","processAnswer","_questionAttempts","parentQuestionId","goToNextStep","counter","questionAttempt","timeIsUp","onTimerProgress","qst","resetCurrentQuestion","ans","showQuestion","onCallback","ExamResults","userChoices","questionIds","populatedQuestions","qu","setState","DOM_nodes","all_Nodes","IDs","ID","selectedOption","timebased","selectedChoices","option","selected","explanationMedia","mediaAsset","explanation","parsed","getChoices","renderMultipleChoice","renderInputChoice","Dropdown","ButtonGroup","ek","filterUpdate","Toggle","Menu","showTimer","showExamAnswer","zoomImage","renderExercises","renderExplanation","React","PlacementExamResults","setScore","showPracticeButton","setShowPracticeButton","showNextButton","setShowNextButton","nextUnitId","goToNextUnit","QuizSuccessModal","cupImage","QuizSuccessTokenModal","QuizTryAgainModal","QuizHintModal","ExplanationModal","media","stepped","onCorrected","resetAndHide","renderMedia","showButtons","showErrorNotificationButton","restoreFocus","SubmitWaitModal","QuizPager","orientation","operator","operatorObj","op","trimmedDescription","trimmedAnswer","numeric","rounded","descriptionAsNumber","answerAsNumber","decimals","trimmedLeftLimit","range","leftLimit","trimmedRightLimit","rightLimit","leftOperator","rightOperator","leftLimitAsNumber","rightLimitAsNumber","leftValidationMember","RangeUtils","rightValidationMember","checkPlainTextAnswer","originalChoiceId","ch","checkMathTextAnswer","check","MathInputUtils","checkMultipleChoiceAnswers","choiceIds","correctChoices","qc","cc","checkCodeInput","QuizView","setQuiz","setRating","retryQuestion","setCurrentStepQuestion","showStepHintModal","setShowStepHintModal","showStepExplanationModal","setShowStepExplanationModal","showSuccessModal","setShowSuccessModal","showTryAgainModal","setShowTryAgainModal","showHintModal","setShowHintModal","showExplanationModal","setShowExplanationModal","showSubmitWaitModal","setShowSubmitWaitModal","showLandingPage","setShowLandingPage","timeCounterBegin","setTimeCounterBegin","timeCounterEnd","setTimeCounterEnd","setError","showSuccessWithTokenModal","setShowSuccessWithTokenModal","quizMessage","setQuizMessage","fetchQuiz","_quiz","submitQuizToServer","submitQuizWithToken","quizAttempt","setTimeTrigger","gradeReport","checkAnswer","StudentAnswersUtils","correct","checkedAnswer","parent_questions","onStepHintViewed","onStepExplanationViewed","processStepAnswer","_steps","stepAttempts","parentQuestionStatus","allStepsStatus","sa","correctOnes","incorrectOnes","parentQuestionAttempt","checkStepsAndShowNextQuestion","totalQuestions","real_questions","marginTop","renderQuizLandingPage","DelayUtils","markAnswerAsCorrected","WorkbookCompletedModal","WorkbookView","workbookId","hasNext","setWorkbook","workbookPreviouslyTaken","setWorkbookPreviouslyTaken","enablePagerClick","setEnablePagerClick","setShowToast","showCompleteModal","setShowCompleteModal","setParentQuestionId","getWorkbookFromServer","_workbook","checkIfWorkbookIsReady","checkIfWorkbookHasIncorrectAnswers","wasLastPendingQuestion","findFirstPendingOrIncorrectQuestionIndex","submitWorkbookToServer","_parentQuestionId","workbookComplete","parentStatus","correctStatus","incorrectStatus","indexFound","onlyQuestionsAttempts","workbookAttempt","currentWorkbook","idx","ToggleButton","AssignmentView","assignmentId","AssignmentService","GradebookView","setClasslog","GradebookUnitsView","getExamScore","textDecoration","modulename","moduleprogress","PendingIcon","examgrade","starsEarned","moduleaward","GoldMedal","SilverMedal","PendingMedal","BronzeMedal","getUnitsforThisClass","GradebookTable","showUnit","lectureQuizzes","fullQuiz","lectureGreenIcon","retryIcon","colSpan","Table","createGradebookTable","GradebookUnitsTableView","_clazz","gradebookLog","getClassInstructors","getInstructorsEmails","getQuizzesAverage","globalBestScore","getBookexamScoreForUnit","bookexamlog","getWorkbookScoreForUnit","wokbooklog","ul","DashboardLinks","dashboardLinks","destination","CMC_icon","isDisabled","MIS_icon","WT_icon","dashboardLink","link","StudentsFeedbackTable","SearchBar","Search","CSVExport","ExportCSVButton","loadingCsv","setLoadingCsv","setFeedbacks","CustomExportCSVButton","exportCSV","survey","csvContent","encodedUri","encodeURI","csvProps","searchProps","pagination","paginationFactory","sizePerPage","sizePerPageList","HomePanel","School","address","contactInfo","ltiEnabled","SchoolModal","alertShow","setAlertShow","setAddress","setContactInfo","setLtiEnabled","dataInTransit","setDataInTransit","apiKey","apiSecret","validateForm","addNewSchool","showApiCredentials","ConfirmDeleteModal","SchoolsPanel","setSchools","showModal","setShowModal","showWarningModal","setShowWarningModal","showProgressAlert","setShowProgressAlert","showSucceedAlert","setShowSucceedAlert","currentSchool","setCurrentSchool","deleteSchool","succeeded","hideAndRefreshData","headerStyle","column","colIndex","textAlign","contact","lti","editSchool","schoolData","totalStudents","totalInstructors","Instructor","InstructorModal","setEmail","setMobile","setSchool","setPassword","confirmPassword","setConfirmPassword","enableCloud9Access","setEnableCloud9Access","showCredentialsReset","setShowCredentialsReset","disableSchool","selectedClasses","setSelectedClasses","emailError","setEmailError","successMessage","setSuccessMessage","wrongInputMessage","setWrongInputMessage","resetFields","validateEmail","updateInstructorPassword","confirm","sc","addNewInstructor","inputEmail","renderClassLabels","isClearable","isMulti","schoolOptions","defaultSchool","showSchoolsSelect","Drawer","children","emergent","setOpen","SimpleTextEditor","onTextEditorUpdate","RichTextEditor","createEmptyValue","setValue","createValueFromString","onEditorChange","ImageCropper","defaultCropWidth","defaultCropHeight","finished","setFinished","imageRef","setImageRef","setSrc","croppedImageUrl","setCroppedImageUrl","isCoverImageAvailable","setIsCoverImageAvailable","showCropBtn","setShowCropBtn","aspect","crop","setCrop","makeClientCrop","_crop","getCroppedImg","_croppedImageUrl","fileName","canvas","scaleX","naturalWidth","scaleY","naturalHeight","getContext","drawImage","y","toBlob","blob","fileUrl","URL","createObjectURL","accept","revokeObjectURL","onImageUploaded","background","ruleOfThirds","onImageLoaded","onComplete","onCropComplete","onCropChange","resource","results","MultiSelectPicker","models","onSelectedOption","selectedModels","isMultiple","contextCallback","filterValue","onFilterChange","updateServerSearchResults","searchOnEachCharacter","setItems","setLocalFilteredItems","selectedItems","setSelectedItems","isLoading","inputValue","setInputValue","filteredItems","convertModelsToItems","_models","_model","fixOrder","_selectedItems","selectedItem","si","finalSelectedItems","getServerSearchResponse","SearchService","serverItems","handleKeyDown","localFilteredItems","combinedItems","uniqueItems","Map","values","orderedItems","filteredSelectedItems","some","filteredItem","nonSelectedItems","sortItemsWithSelectedFirst","showSelectAll","maxSelectedItems","handleChange","filterFunction","renderMultiSelect","Class","startsOn","tags","capture","StudentModal","onDismiss","timeMultiplier","setTimeMultiplier","loadingClasses","setLoadingClasses","localClasses","setLocalClasses","searchInput","setSearchInput","setDefaultSchool","setSchoolOptions","renderSchool","setRenderSchool","_schoolOptions","firstSchool","studentClassesToBeDisplayed","studentClasses","finally","updateStudentPassword","handleImmediateSearch","buildCondition","addNewStudent","styles","modalContent","boxSizing","marginBottom","closeMenuOnSelect","onInputChange","menuIsOpen","onMenuOpen","onMenuClose","noOptionsMessage","Course","plot","Unit","optional","TranscriptEditor","editableArea","execCommand","innerRef","Lecture","difficulty","youtubeUrl","captions","chapters","_schools","Track","Transcript","ThumbnailCreator","originalThumbnail","snapshotAtTime","onGenerated","videoEl","canvasEl","metadataLoaded","setMetadataLoaded","dataLoaded","setDataLoaded","suspended","setSuspended","seeked","setSeeked","snapshot","setSnapshot","getSnapshot","video","videoHeight","videoWidth","toDataURL","muted","onLoadedMetadata","onLoadedData","onSuspend","Marker","priority","showForInSecs","PanelSearchBar","fullWidth","OnFilterInput","Asset","extension","LibraryItem","onSelected","onUnselected","selectable","showDelete","showLoadingOverlay","showCompletedOverlay","showDescriptionOverlay","setShowDescriptionOverlay","showSelectedOverlay","setShowSelectedOverlay","showInput","setShowInput","saveTextInput","checkIsEditable","deleteItem","onMouseOver","onMouseOut","Question","subcategory","group","hintMedia","points","tag","QuestionBuilderModalHeader","multistep","isModify","onMultistepChange","onCategoryInput","onSubcategoryInput","Row","Label","sm","Col","MathInputArea","foreignKeyboard","showKeyboardIcon","showMultimediaIcon","onRenderForeignKeyboard","onToggleMultimedia","foreignKeyboardInput","showSourceCodeIcon","onToggleSourceCode","tabHandler","questionStatement","setQuestionStatement","componentId","textArea","sourceId","selectionStart","selectionEnd","before","after","saveHtmlResponse","onKeyDownHandler","sourceCodeIcon","QuestionMultimedia","onRemove","setMultimedia","MathTextEditor","onShowModal","onShowSourceCodeModal","setStatement","onEditorMenuBtnClick","btn","removeMultimedia","newStatement","MathKeyboardLayoutSelectorButton","setActive","showTemplate","setShowTemplate","algebraTemplate","MathKeyboardLayoutSelector","onLayoutSelectedHandler","onLayoutGroupSelectedHandler","categoryObject","onLayoutSelected","getAllCategories","MultimediaModal","setKey","allMultimedia","setAllMultimedia","searchExpression","setSearchExpression","setUploadedAssets","fileLoader","setFileLoader","progressUpload","setProgressUpload","uploadAll","uploadFiles","uploadFile","FileUtils","fetch","r","onUploadProgress","ProgressEvent","loaded","addMultimedia","animated","onDrop","acceptedFiles","assign","getRootProps","getInputProps","searchstring","showMultimediaGallery","onSave","QuestionHintModal","setHint","hintTemp","setHintTemp","showKeyboard","setShowKeyboard","setKeyboardInput","expr","QuestionSourceCodeModal","sourceCode","setSourceCode","QuestionExplanationModal","setExplanation","explanationTemp","setExplanationTemp","showMultimediaModal","setShowMultimediaModal","Choice","MultipleChoiceMenu","setChoices","choiceToFocus","setChoiceToFocus","_choices","onAddChoice","addCorrectChoice","addChoiceDescription","showPreviewOnFocus","onTabHandler","filteredChoices","deleteChoice","MathRangePreciseSelector","onInputUpdate","onNumericDecimalPlacesUpdate","onRangeChoiceDescriptionUpdate","onRangeOperatorUpdate","inputType","setInputType","setRoudingDecimalPlaces","setLeftOperator","setRightOperator","onRangeOperatorHandler","pos","paddingTop","o","ShortAnswerMenu","defaultChoice","renderChoices","newChoice","appendedChoices","CodeInputMenu","setSubtype","setIsCorrect","QuestionBuilderModalQuestionChoices","onChoiceBack","initialPanel","choicePanel","ChoicesWarningModal","QuestionBuilderModalQuestion","save","activeTabKey","updateTabKey","showSourceCodeModal","setShowSourceCodeModal","showChoicesWarningModal","setShowChoicesWarningModal","warningMessage","setWarningMessage","openModal","showkeyboardLayoutSelector","kl","updateKeyboardLayout","g","updateKeyboardLayoutGroup","nextStepButton","nextStep","validateAndGoNextStep","mathIcon","modal","mediaId","onProceedQuestionExplanationModal","onProceedQuestionHintModal","ancillaryId","onProceedQuestionSourceCodeModal","QuestionBuilderModalQuestionTabs","onAdd","setActiveTabKey","StepService","setSteps","tabAdded","setTabAdded","tabRemoved","setTabRemoved","onTabClick","QuestionBuilderModal","setIsModify","setQuestion","isMultiStep","setIsMultiStep","setShowKeyboardDrawer","setInputFieldId","_question","onSaveStepped","populate","parentQuestion","populateMultiple","prop","onNewStepQuestion","_stepQuestions","step_question","Provider","q1","q2","stepQuestionSubType","steQuestionContext","stepQuestion","checkMultiStep","sid","populateStep","onRemoveStepQuestion","captureAndForwardInput","QuestionDecoratorUtil","isAlternative","SortableItem","edit","removeAlt","editAlt","cloneAlt","alts","setAlts","getAltQuestions","qset","qs","altQuestions","aq","SortableList","altHandler","cloneHandler","editHandler","deleteHandler","removeAltHandler","editAltHandler","cloneAltHandler","copyHandler","onSortHandler","cloneAssessmentQuestion","clonedQuestion","cloneAssessmentAltQuestion","list","setList","handle","editAssessmentQuestion","deleteAssessmentQuestion","ImportQuestionsModal","onImport","modalTitle","setModalTitle","optionSelected","setOptionSelected","questionSets","setQuestionSets","questionsToImport","setQuestionsToImport","searchInProgress","setSearchInProgress","searchRemote","searchVal","onImportClick","optionButtonClick","selectQuestion","currentQuestions","filteredQuestions","questionToImport","questionSet","questionids","firstStep","hasBeenPreviouslySelected","qi","Checkbox","BatchImportModal","enableAlternate","existingQuestions","showError","setShowError","setSets","errorMessage","setErrorMessage","showOverlay","setShowOverlay","handleMouseEnter","handleMouseLeave","relatedTarget","closest","download","Popover","onMouseEnter","onMouseLeave","onFileLoaded","fileInfo","_sets","questionData","questionContext","questionType","setContext","setCategory","setSubcategory","setDifficulty","getSubtype","correctQuestionNumber","questionNumber","setDescription","onCsvUploaded","_context","readonly","_q","expandRow","showExpandColumn","expandByColumnOnly","renderer","renderQuestions","ALPHABET","AssessmentPreviewModal","renderChoice","renderHintAndExplanation","explanationMediaUrl","processQuestion","allAltQuestions","altQuestion","IndexUtils","qdata","renderQuestion","generatePreview","Assessment","mandatory","shuffleQuestions","readme","curateData","curatedData","report","quizzesScore","averageStars","workbookScore","examScore","downloadQuestionsToXls","ExcelJS","created","creator","worksheet","addWorksheet","header","maxChoices","max","correctchoice","qd","indexChoiceInCsv","addRow","getRow","eachCell","cell","font","bold","pattern","fgColor","argb","xlsx","writeBuffer","buffer","Blob","removeChild","createExcel","sheet_headers","fullname","examscore","workbookscore","quizScore","addRows","pageSetup","horizontalCentered","verticalCentered","parentElement","AssessmentDrawer","setAssessment","showNewQuestionModal","setShowNewQuestionModal","showImportQuestionModal","setShowImportQuestionModal","showBatchModal","setShowBatchModal","showPreviewModal","setShowPreviewModal","showMarkdownEditor","setShowMarkdownEditor","validationAlertShow","setValidationAlertShow","tempQuestions","setTempQuestions","assessmentTitle","setAssessmentTitle","assessmentType","setAssessmentType","setDuration","setMandatory","shuffle","setShuffle","scramble","setScramble","markdownText","setMarkdownText","validationMessage","setValidationMessage","alternateParentQuestion","setAlternateParentQuestion","isAlternateFlow","setIsAlternateFlow","selectedSchool","setSelectedSchool","loadSchools","_defaultSchool","currentAlts","remoteQuestions","buildPayload","buildUpdatePayload","_school","setDurationInMinutes","setShuffleQuestions","setScrambleChoices","setReadme","createOrUpdateSet","_alts","createParentSets","hideAndUpdateRefreshData","updatedQuestion","tempQuestion","existingSets","editAltQuestionHandler","addAltsForClonedQuestion","existingsets","filteredsetquestions","clonedAlts","filteredsetquestionId","filteredsetquestion","clonedAlt","ca","parentIds","_set","createOrUpdateSetMultiple","questionsToAdd","qid","quid","removeAltQuestionHandler","_tempQuestions","_newParentQuestion","splice","onImportSuccess","originalSets","importedQuestions","tempSetsToRemove","parentMatchingSet","os","tempSetIds","ts","questionsToTakeOut","fq","sortedFilterQuestions","exportAsXls","assessmentQuestions","decoratedQuestions","createDecoratedQuestions","ExcelUtils","parentMap","altId","decoratedAltQuestion","setIsAlternative","onMenuButtonClick","paddingBottom","_selectedOption","showSchoolDropdown","isTimeBased","updateDuration","altQuestionHandler","editQuestion","cloneAltQuestion","deleteQuestion","cloneAltQuestionHandler","cloneQuestion","iq","hideAndUpdateQuestions","qids","LinkAssetModal","setUrl","AncillaryModal","ancillaryType","allQuizzes","setAllQuizzes","setShowLoadingOverlay","setShowCompletedOverlay","showLinkModal","setShowLinkModal","showEmergentDrawer","setShowEmergentDrawer","onHideEmergentQuiz","allAssessments","createAssetLinkHandler","linkInfo","selectedQuizzes","_quizzes","selectedQuiz","onQuizSelected","AncillaryVideoPlayer","currentVideoTime","onSeek","videoPlayer2","onseeked","allowAnyClick","onStart","onStop","defaultPosition","AncillaryTable","videoSource","existingMarkers","onMarkersUpdate","showAncillaryModal","setShowAncillaryModal","showAncillaryVideoPlayer","setShowAncillaryVideoPlayer","setAncillaryType","videoSelectedMarker","setVideoSelectedMarker","videoSelectedTime","setVideoSelectedTime","renderMarkers","updatedMarkers","mkr","newMarkers","onEditUpdate","allMarkers","updatedMarker","editable","pill","assetTitle","legend","cellEdit","cellEditFactory","blurToSave","afterSaveCell","oldValue","videoTime","TranscriptImportModal","showParseError","setShowParseError","valid","no_error","transcriptData","setContent","setType","tracksData","renderTracks","TranslateDropdown","getLanguages","languages","processedLangCodes","onGenerate","activeSelection","setActiveSelection","supportedLanguages","processedLanguages","onItemClick","language","nativeName","pl","overflow","overflowY","Divider","TranscriptEditorRow","onInsertBelowOrAbove","modifyTimestamp","onEnterContent","modifyFormatOption","onAssetPickerCalled","showAncillaryPickerMenu","TranslationWarningModal","operationSuccess","setOperationSuccess","onProceedClick","LectureBuilder","parser","videoCueForScreenshot","setVideoCueForScreenshot","videoDurationInSecs","setVideoDurationInSecs","videoThumbnail","setVideoThumbnail","setThumbnail","setTranscripts","setAssessments","setScope","tempLecture","setTempLecture","setIsThumbnailGenerated","allInstructors","setAllInstructors","setVideoSource","videoPlayer1","lectureVideoUpload","setProgress","trackContent","setTrackContent","showRemoveTranscriptModal","setShowRemoveTranscriptModal","showImportTranscriptModal","setShowImportTranscriptModal","showTranslationModal","setShowTranslationModal","showTranscriptAlert","setShowTranscriptAlert","showFlaggedForTranscript","setShowFlaggedForTranscript","showTranscriptInProgress","setShowTranscriptInProgress","currentPendingAncillaryTrack","setCurrentPendingAncillaryTrack","setTranscriptTextModified","languageToTranslateTo","setLanguageToTranslateTo","showYouTubeVideo","setShowYouTubeVideo","setYoutubeThumbnailUrl","setYoutubeUrl","setIsEmptyTrack","isNewVideoSelected","setIsNewVideoSelected","trscrpt","reloadTrackContent","getAllInstructors","getCurrentUserAsInstructor","instructorIds","quizMarkers","mrk","markerIds","captureBlob","_videoDuration","updatedThumbnail","onVPSeeked","XLSX","aoa_to_sheet","wscols","wch","book_new","book_append_sheet","autoGenerateTranscript","_transcripts","marginRight","labelKey","multiple","Select","validateStep1","onloadedmetadata","onFileSelected","thumb","validateStep2","onGenerateNewTranslation","xmlDoc","parseFromString","nodes","childNodes","tracksCopy","_track","_t","textEditorParseXML","mrks","assetName","ancillaryItemId","ancillaryItemType","assignAncillaryItemToTrack","LectureDrawer","UnitBuilder","allLectures","setAllLectures","allExams","setAllExams","allWorkbooks","setAllWorkbooks","allPlacementExams","setAllPlacementExams","allAssignments","setAllAssignments","setExams","setWorkbooks","placementExams","setPlacementExams","assignments","setAssignments","setOptional","setPlacement","initialLectures","setInitialLectures","initialWorkbooks","setInitialWorkbooks","initialExams","setInitialExams","initialPlacementExams","setInitialPlacementExams","initialAssignments","setInitialAssignments","defaultDescription","setDefaultDescription","showEmergentLectureDrawer","setShowEmergentLectureDrawer","showEmergentAssessmentDrawer","setShowEmergentAssessmentDrawer","setStepIndex","stepObject","setStepObject","uniqueStepRef","showAssignments","setShowAssignments","enabledSteps","useMemo","placementexams","filterValues","setFilterValues","loadAll","_assessments","prevSteps","transformPickerData","singledata","onPlacementExamSelected","selectedPlacementExams","_placementExams","selectedPlacementExam","onWorkbookSelected","selectedWorkbooks","_workbooks","selectedWorkbook","onExamSelected","selectedExams","_exams","selectedExam","onAssignmentSelected","selectedAssignments","_assignments","selectedAssignment","onCreateEmergentLecture","onCreateEmergentAssessment","onHideEmergentAssessment","wbs","exs","changeStep","selectedLectures","selectedLecture","onLecturesSelected","prevStep","reverse","onHideEmergentLecture","UnitDrawer","CourseBuilder","courseTitle","setCourseTitle","courseDescription","setCourseDescription","courseUnits","setCourseUnits","initialUnits","setInitialUnits","showEmergentUnitDrawer","setShowEmergentUnitDrawer","allUnits","unitIds","cu","getUnitsWithUnderscoreId","getInitialUnitsWithUnderscoreId","onCreateEmergentUnit","onHideEmergentUnit","selectedUnits","selectedUnit","onUnitsSelected","CourseDrawer","ClassBuilder","setStartsOn","setTags","setStudents","setCapture","weeksAhead","setWeeksAhead","weeksAheadEnable","setWeeksAheadEnable","setAllCourses","setAllUnits","allStudents","setAllStudents","initialCourses","setInitialCourses","initialStudents","setInitialStudents","showEmergentStudentModal","setShowEmergentStudentModal","showEmergentCourseDrawer","setShowEmergentCourseDrawer","serverSearchResults","setServerSearchResults","initInstructors","fetchedStudents","combinedStudents","mergeAndRemoveDuplicates","array1","array2","newResults","prevAllStudents","allStudentIds","uniqueNewResults","has","prevServerSearchResults","serverStudentIds","uniqueNewServerResults","getStudentModelForPicker","_students","_student","getCourseModelForPicker","_course","onHideEmergentCourse","hideModalAndReloadStudents","studentIds","courseIds","captureAsBase64","placeholderText","isCheck","updateWeeksAheadEnable","_weeksAhead","updateWeeksAhead","selectedCourses","selectedCourse","onCoursesSelected","selectedStudents","selectedStudent","Boolean","onStudentsSelected","ClassDrawer","currentClass","setCurrentClass","InstructorsPanel","currentInstructor","setCurrentInstructor","setShowEmergentSectionDrawer","setShowEmergentSectionClass","deleteInstructor","classListTable","instructorData","renderInstructors","paginate","page","BatchStudentsImportModal","imported","setImported","renderStudents","updatedStudents","importResult","sl","_s","dialogClassName","StudentsPanel","showDrawer","showFailedInviteAlert","setShowFailedInviteAlert","showSucceedInviteAlert","setShowSucceedInviteAlert","showFailedMimicNoStudentAlert","setShowFailedMimicNoStudentAlert","currentStudent","setCurrentStudent","searchText","searchInputRef","latestSearchTextRef","isMounted","fetchAllStudents","deleteStudent","mimicStudentSession","fillDataAndShowDrawer","selectedClass","inviteStudent","fullNameFormatter","deleted","DropdownButton","_currentStudent","editStudent","toolkitprops","debouncedSearch","cancel","handleSearchChange","autoComplete","debounce","remote","onTableChange","pagonTableChangeination","textToSearch","hideBatchAndRefreshData","onBatchSuccess","ClassesPanel","expandedRows","setExpandedRows","expandedData","setExpandedData","fetchData","deleteClass","handleRowExpand","isExpand","expandedDataForRow","renderExpandedRow","expandedDataRow","ListGroup","classPopulated","assignTemporaryClass","clss","holder","isEditable","onExpand","classUnits","classSchools","renderClasses","LectureExpandable","setQuizzes","showCaret","renderQuizzes","UnitsPanel","currentUnit","setCurrentUnit","deleteUnit","renderUnits","LecturesPanel","groupToRemove","setGroupToRemove","showRemoveBulkButton","setShowRemoveBulkButton","showGroupRemovalInProgress","setShowGroupRemovalInProgress","lectureVideoUrl","setLectureVideoUrl","setShow","buttonVariant","setButtonVariant","copyButtonText","setCopyButtonText","showVideoModal","setShowVideoModal","selectedVideoUrl","setSelectedVideoUrl","selectedVideoTitle","setSelectedVideoTitle","handleClose","init","clearSelectionFields","removeBulk","errors","youtubeId","openVideoModal","verticalAlign","CheckIcon","inProgressIcon","lectureMarkerLabels","lectureMarker","transcriptStatus","selectRow","clickToSelect","isSelect","onSelectAll","renderLectures","overflowX","navigator","clipboard","writeText","ChoiceTooltip","questionid","onEntered","EmailInputModal","onSend","handleSend","emailRegex","invalidEmails","isInvalid","Feedback","AssessmentsPanel","currentAssessment","setCurrentAssessment","questionToUpdate","setQuestionToUpdate","showQuestionModal","setShowQuestionModal","showEmailModal","setShowEmailModal","selectedAssessmentId","setSelectedAssessmentId","deleteAssessment","handleSendEmail","onlyOneExpanding","ri","showQuestionEditor","renderAssessments","LibrarypanelEditModal","fn","newName","setNewName","Dropzone","thumbnails","setThumbnails","filterByType","setFilterByType","removeThumbnailId","setRemoveThumbnailId","useDropzone","getFilesFromEvent","fileGetter","_files","fileList","dataTransfer","defineProperty","proceedDelete","payloadFactory","ext","buildPreview","cards","searchString","ButtonToolbar","editModalBuilder","LibraryPanel","ReportPanel","currentPage","setCurrentPage","handlePageChange","spp","PaginationService","paginated_results","handleTableChange","newState","filtered_results","filtered_result","onPageChange","alwaysShowAllBtns","withFirstAndLast","showTotal","totalSize","QuestionsPanel","refreshQuestionList","latestQuestions","_questionsClone","lq","saveQuestion","createSteps","maxWidth","addExplanation","hasHint","hasExplanation","colum","rchoices","rcontext","paginationOptions","admins","admin","Admin","AdminModal","setRole","rolesSelectOptions","setDisableSchool","updateAdminPassword","AdminService","addNewAdmin","populateRole","AdminPanel","setAdmins","currentAdmin","setCurrentAdmin","deleteAdmin","renderAdmins","CoursePanel","currentCourse","setCurrentCourse","deleteCourse","lastUpdated","updatedAt","direction","labelPlacement","renderCourses","ToolbarItem","draggable","onDragStart","displayIcon","displayCategoryName","ToolbarButton","Toolbar","autoResize","physics","fixed","borderWidth","borderWidthSelected","shadow","shape","shapeProperties","useBorderWithImage","face","edges","smooth","dashes","randomSeed","improvedLayout","hierarchical","interaction","multiselect","manipulation","initiallyActive","addNode","nodeData","editNode","deleteNode","addEdge","deleteEdge","edgeData","LSNodeDecorator","LectureModal","LSNetwork","getLectureIcon","Icons","getExamIcon","getWorkbookIcon","updateNodePositions","positions","visNetwork","network","getPositions","clickedNode","addEdgeMode","clicked","properties","pointer","getNodeIcon","getNodeImage","examThumbnail","workbookThumbnail","processEvent","unitid","selectNodes","deleteSelected","_plot","targetUnit","edge","renderNodes","decorator","renderEdges","showNetwork","NetworkConfig","onDragEnd","onDoubleClick","addLectures","createRef","CourseBuilderView","lsNetwork","setPlot","PlotService","onDragOver","getData","onDragLeave","getFromServer","getClassReportFromServer","getClassReport","class","getClassReportByStudentId","getReportHistoryByStudentId","studentsReports","studentReport","getQuizReportByStudentId","classReport","studentLogs","finalReport","getChartByClassFromRemote","kpis","getChartByClassAndStudentFromRemote","unitQuizzes","studentLog","studentBookexamReport","ua","studentWorkBookReport","studentAssignmentReport","studentPlacementExamReport","studentAllQuizReports","uq","studentTakenQuizReports","studentScore","studentTakenQuizReport","allQuizzesInUnit","quizHistory","studentQuizReport","lectureTitle","quizInUnit","bestTimeTrigger","quizAttemptIds","str","examAttemptId","placementExamAttemptId","workbookAttemptId","assignmentAttemptId","quizzesCompleted","overallPerformance","overallEffort","confidence","assignmentScore","StudentsPerformanceTable","onStudentClicked","unitSelected","setUnitSelected","selectHandler","sortFunc","_a_lastname","_b_lastname","getColumns","ReportUtils","homework","placementexam","performance","effort","renderStudentsTable","StudentsUnitsCompletedChart","labels","datasets","dataSet","borderColor","completedTotal","reportUnits","reportUnit","ru","buildDataSets","getByClassAndStudentFromRemote","kpi","ReportDynamicMathField","showEditAnswerField","dynamic","selectedAnswer","onInputBlur","ReportAssessmentTooltip","QuestionAttemptRow","answerId","correctChoicesDescription","hintViewed","explanationViewed","selectedIsCorrect","onModifyAttempt","setShowEditAnswerField","QuestionAssessmentsModal","remoteReport","onAttemptRemoved","onAttemptModified","setReport","currentAttempt","setCurrentAttempt","createStudentAnswersTable","attemptsSorted","submitDate","latestAttempt","ReportService","rep","rep1","answerInfo","selectedChoiceId","selectedChoice","correctChoice","modifyAttempt","removeAttempt","correctChoiceIds","showTime","timeInMillis","timeInSecs","TimeUtils","timeTaken","selectedAttemptIndex","populateAttempts","AccordionToggle","decoratedOnClick","useAccordionButton","StudentUnitScoresTable","reloadReport","tempReport","setTempReport","currentQuiz","setCurrentQuiz","openAssessmentModal","updated","createHistoryRows","claimedCorrectCount","createStudentTable","createStudentQuizzesHistoryTable","Accordion","onHideQuestionAssessmentModal","StudentVideoToQuizTimeChart","setLabels","setSelectedUnit","setUnitLectures","setStudentReport","DEFAULT_QUIZZES_BG_COLOR","plugins","callbacks","raw","getDataSetForAllLectures","quizIndex","quizzesData","bestTriggerTimeForQuiz","attemptsForQuiz","quizName","quizLog","triggerTime","getDataSets","StudentQuizAttemptsChart","bestScoreForQuiz","ConfirmResetModal","KpiReportModal","setKpi","getCourseMetrics","lectureWatchTotal","videoToQuizTimeTotal","quizScoreTotal","pointsTotal","effortTotal","metrics","unitMetric","getLectureMetrics","lectureMetrics","totalPoints","totalEffort","getCourseTotals","metricsData","lmetric","lectureWatchKPI","indicators","indicator","videoToQuizTimeKPI","quizScoreKPI","getModuleRow","renderStats","getUnitRows","ScatterChart","set_color","currentTooltipStudentId","setCurrentTooltipStudentId","pointStyle","pointRadius","responsive","scales","suggestedMin","suggestedMax","beginAtZero","ticks","usePointStyle","redraw","StudentReportDrawer","setSelectedClass","setSelectedStudent","gradebookSyncStatus","setGradebookSyncStatus","gradebookResetStatus","setGradebookResetStatus","showKpiModal","setShowKpiModal","showResetWarningModal","setShowResetWarningModal","highPerformanceLowEffortDataSet","setHighPerformanceLowEffortDataSet","highPerformanceHighEffortDataSet","setHighPerformanceHighEffortDataSet","lowPerformanceHighEffort","setLowPerformanceHighEffort","lowPerformanceLowEffort","setLowPerformanceLowEffort","ChartService","_kpis","KpiService","_kpi","initKpisData","chart","getRequiredUnitsOnly","onNewStudentSelected","onNewClassSelected","resetGradebook","studentlogs","getKpiReport","reportTabs","headerName","populateAccordionTab","ReportDrawer","openStudentDetailDrawer","setOpenStudentDetailDrawer","studentDetailData","setStudentDetailData","setKpis","loadNewClassReport","getCharByClassFromRemote","requiredOnly","onViewStudentDetails","selectedIndex","utils","singleReportData","json_to_sheet","max_width","w","sheet_add_aoa","writeFile","compression","exportXls","claimedCorrectQuizCount","getForCourse","analytics","AnalyticsPanel","setAnalytics","setSelectedCourse","onCourseSelected","AnalyticsService","_analytics","populateSelectData","analytic","retentionRate","averageFinalScore","renderAnalytics","DashboardCreateManageContentLinks","MC_icon","CreateManageContentPanel","DashboardManageStudentsLinks","showNewStudentDrawer","setShowNewStudentDrawer","IS_icon1","hideNewStudentModal","ManageStudentsPanel","DashboardOtherOptionsLinks","ManageOtherOptionsPanel","DashboardManageCreateContentLinks","showEmergentCoursesDrawer","setShowEmergentCoursesDrawer","showEmergentUnitsDrawer","setShowEmergentUnitsDrawer","showEmergentLessonsDrawer","setShowEmergentLessonsDrawer","showEmergentAssessmentsDrawer","setShowEmergentAssessmentsDrawer","emergentLessonTarget","setEmergentLessonTarget","emergentUnitTarget","setEmergentUnitTarget","emergentCourseTarget","setEmergentCourseTarget","emergentAssessmentTarget","setEmergentAssessmentTarget","showToast","CU_icon","CL_icon","QZ_icon","openDashboardTilesTo","creatingSuccess","arg","lastContents","lastContentData","createdAt","lastContent","renderLastAddedSumary","CreateContentPanel","DashboardManageContentLinks","CO_icon","UN_icon","LE_icon","MU_icon","ManageContentPanel","TutorialsModal","GET_TUTORIALS_BY_IDS_ENDPOINT","tutorials","UPDATE_TUTORIAL_ENDPOINT","REMOVE_TUTORIAL_ENDPOINT","Tutorial","TutorialBuilder","tutorial","TutorialModal","onProceedToTutorials","DashboardVideoTutorials","showVideoPlayerModal","setShowVideoPlayerModal","setVideo","selectedVideo","setTutorials","showTutorialModal","setShowTutorialModal","selectedTutorial","setSelectedTutorial","isSuperAdmin","TutorialService","handleSearch","onProceedFromTutorialModal","flex","tutorialsData","hideSelectColumn","renderTutorials","Banner","TutorialsPanel","setShowDrawer","setReload","hideDrawer","CoursesPanel","ReportsPanel","renderPanel","App","showAccessibilityTool","setShowAccessibilityTool","initialize","isLoggedIn","isInstructorOrAdmin","component","exact","queryString","info","isStrudentFromInstructorOrAdmin","hasNextWorkbook","isAuthorized","hostname","container","createRoot","serviceWorker","registration","unregister"],"mappings":"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","file":"static/js/main.fe7761da.chunk.js","sourcesContent":["export default {\n activeProfile: \"prod\",\n mockAPI: false,\n connectivityCheckInSecs: 15,\n cacheTTL: 10, //seconds\n minimumScore: 0.8,\n mathRenderTimer: 500,\n defaultThumbnailSeconds: 3,\n videoForwardBackSecs: 10,\n showErrorNotifyButton: true,\n showKpiReportTestButton: true,\n environmentConfig: activeProfile => {\n if (activeProfile === \"dev\") {\n return { \n baseURL: \"http://localhost:4400\", \n localURL: \"http://localhost:3000/\",\n defaultPasswordLength: 8,\n playbackServerTimer: 10,\n googleAnalyticsTrackingId: 'G-5M1X6JYJY9'\n };\n }\n if (activeProfile === \"uat\") {\n return {\n baseURL: \"https://api.limespring.live\",\n localURL: \"https://portal.limespring.live/\",\n defaultPasswordLength: 8,\n playbackServerTimer: 10,\n googleAnalyticsTrackingId: 'G-5M1X6JYJY9'\n };\n }\n if (activeProfile === \"prod\") {\n return {\n baseURL: \"https://api.limespring.org\",\n localURL: \"https://portal.limespring.org/\",\n defaultPasswordLength: 8,\n playbackServerTimer: 10,\n googleAnalyticsTrackingId: 'G-5M1X6JYJY9'\n };\n }\n }\n};\n","export default {\n LOGIN_VIEW_PATH: \"/\",\n LTI_VIEW_PATH: \"/lti\",\n LTI_13_CALLBACK_PATH: \"/lti_13/v1/callback\",\n SIGN_UP_VIEW_PATH: \"/signup\",\n RECOVERY_VIEW_PATH: \"/recovery\",\n LOGOUT_VIEW_PATH: \"/logout\",\n LECTURE_VIDEO_PATH: \"/lecture/video\",\n ASSESSMENT_QUIZ_ANONYMOUS: \"/assessment/quiz/anonymous\",\n SETTINGS_VIEW_PATH: \"/settings\",\n CATALOG_VIEW_PATH: \"/catalog\",\n SHOP_VIEW_PATH: \"/shop\",\n FORGOT_PASSWORD_VIEW_PATH: \"/forgotpass\",\n PLAN_VIEW_PATH: \"/plans\",\n PLAN_PAYMENT_VIEW_PATH: \"/payment\",\n PLAN_CONFIRMATION_VIEW_PATH: \"/confirmation\",\n BOOKSTORE_VIEW_PATH: \"/bookstore\",\n BOOKSTORE_CONFIRMATION_VIEW_PATH: \"/bookstore/confirmation\",\n BOOKSTORE_CART_VIEW_PATH: \"/bookstore/cart\",\n BOOKSTORE_CHECKOUT_VIEW_PATH: \"/bookstore/checkout\",\n BOOKSTORE_DETAILS_VIEW_PATH: \"/bookstore/details\",\n MAINTENANCE_VIEW_PATH: \"/maintenance\",\n STUDENT: {\n DASHBOARD_VIEW_PATH: \"/dashboard\",\n GRADEBOOK_VIEW_PATH: \"/gradebook\",\n GRADEBOOK_UNITS_VIEW_PATH: \"/gradebook/units/:id\",\n GRADEBOOK_UNITS_TABLE_VIEW_PATH: \"/gradebook/units/table/:id\",\n SECTION_VIEW_PATH: \"/section\",\n UNIT_VIEW_PATH: \"/unit/:id\",\n CLASS_VIEW_PATH: \"/class/:id\",\n EXAM_VIEW_PATH: \"/exam/:id\",\n EXAM_RESULTS_PATH: \"/exam/results\",\n PLACEMENT_EXAM_RESULTS_PATH: \"/placement/exam/results\",\n QUIZ_VIEW_PATH: \"/quiz/:id\",\n WORKBOOK_VIEW: \"/workbook/:id\",\n ASSIGNMENT_VIEW: \"/assignment/:id\"\n },\n MANAGEMENT: {\n ROOT_VIEW_PATH: \"/management/*\",\n DASHBOARD_VIEW_PATH: \"/management/dashboard\",\n DASHBOARD_CREATE_MANAGE_CONTENT_PATH: \"/management/create-manage-content\",\n DASHBOARD_MANAGE_STUDENTS_PATH: \"/management/manage-students\",\n DASHBOARD_CREATE_CONTENT_PATH: \"/management/create-content\",\n DASHBOARD_MANAGE_CONTENT_PATH: \"/management/manage-content\",\n DASHBOARD_OTHER_OPTIONS_PATH: \"/management/manage-options\",\n DASHBOARD_TUTORIALS_PATH: \"/management/tutorials\",\n COURSES_VIEW_PATH: \"/management/courses\",\n ADMINS_VIEW_PATH: \"/management/administrators\",\n INSTRUCTORS_VIEW_PATH: \"/management/instructors\",\n STUDENTS_INVITE_PATH: \"/management/students-invite\",\n STUDENTS_VIEW_PATH: \"/management/students\",\n SECTIONS_VIEW_PATH: \"/management/sections\",\n COURSES_VIEW_PATH: \"/management/courses\",\n UNITS_VIEW_PATH: \"/management/units\",\n LECTURES_VIEW_PATH: \"/management/lectures\",\n ASSESSMENTS_VIEW_PATH: \"/management/assessments\",\n QUESTIONS_VIEW_PATH: \"/management/questions\",\n LIBRARY_VIEW_PATH: \"/management/library\",\n REPORTS_VIEW_PATH: \"/management/reports\",\n ANALYTICS_VIEW_PATH: \"/management/analytics\"\n }\n};\n","export default class APIResponse{\n\n constructor(status, data, error){\n this.status = status;\n this.data = data;\n this.error = error;\n }\n\n getStatus(){\n return this.status; \n }\n\n setStatus(status){\n this.status = status;\n }\n\n getData(){\n return this.status; \n }\n\n setData(data){\n this.data = data;\n }\n\n getError(){\n return this.error; \n }\n\n setError(error){\n this.error = error;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import axios from \"axios\";\nimport APIResponse from \"./../payloads/APIResponse\";\nimport SessionService from './SessionService';\nimport Config from './../config/Config';\n\nexport default class ApiService {\n constructor() {\n axios.defaults.baseURL = Config.environmentConfig(Config.activeProfile).baseURL;\n axios.defaults.headers.common[\"Authorization\"] = SessionService.getToken();\n axios.defaults.headers.post[\"Content-Type\"] = \"application/json\";\n axios.defaults.headers.get[\"Content-Type\"] = \"application/json\";\n }\n\n setup = () => {\n axios.defaults.baseURL = Config.environmentConfig(Config.activeProfile).baseURL;\n axios.defaults.headers.common[\"Authorization\"] = SessionService.getToken();\n axios.defaults.headers.post[\"Content-Type\"] = \"application/json\";\n axios.defaults.headers.get[\"Content-Type\"] = \"application/json\";\n };\n\n post = async (endpoint, payload) => {\n try {\n let res = await axios.post(endpoint, payload);\n return new APIResponse(res.status, res.data, null);\n } catch (error) {\n if(error.response.status === 401) { \n console.error('post() | User session has expired. Logging out.')\n document.location.href = '/logout'\n }\n console.error(\"post() | API Error: %s\", error.message);\n return new APIResponse(null, null, error.message);\n }\n };\n\n get = async endpoint => {\n try {\n let res = await axios.get(endpoint);\n return new APIResponse(res.status, res.data, null);\n } catch (error) {\n if(error.response.status === 401) { \n console.error('get() | User session has expired. Logging out.')\n document.location.href = '/logout'\n }\n console.error(\"get() | API Error: %s\", error.message);\n return new APIResponse(null, null, error.message);\n }\n };\n\n delete = async endpoint => {\n try {\n let res = await axios.delete(endpoint);\n return new APIResponse(res.status, res.data, null);\n } catch (error) {\n if(error.response.status === 401) { \n console.error('delete() | User session has expired. Logging out.')\n document.location.href = '/logout'\n }\n console.error(\"delete() | API Error: %s\", error.message);\n return new APIResponse(null, null, error.message);\n }\n } \n\n upload = async (endpoint, payload) => {\n try {\n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n let res = await axios.post(endpoint, form, { headers: {'Content-Type': 'multipart/form-data'} });\n return new APIResponse(res.status, res.data, null);\n } catch (error) {\n if(error.response.status === 401) { \n console.error('upload() | User session has expired. Logging out.')\n document.location.href = '/logout'\n }\n console.error(\"upload() | API Error: %s\", error.message);\n return new APIResponse(null, null, error.message);\n }\n }\n}\n","export default {\n HEALTH_ENDPOINT: \"/health\",\n MAINTENANCE_STATUS_ENDPOINT: \"/maintenance\",\n LOGIN_ENDPOINT: \"/session/login\",\n LOGOUT_ENDPOINT: \"/session/logout\",\n MIMIC_ENDPOINT: \"/session/mimic\",\n GET_SECTIONS_ENDPOINT: \"/sections\",\n SIGN_UP_USER_ENDPOINT: \"/signup\",\n FORGOT_PASS_ENDPOINT: \"/session/forgot\",\n RECOVER_ACCT_ENDPOINT: \"/recovery\",\n SEARCH_ENDPOINT: \"/search\",\n PAGINATION_ENDPOINT: \"/paginate/:resource/page/:page\",\n\n //-- ANALYTICS ENDPOINTS --//\n ANALYTICS_ENDPOINT: \"/analytics/:id\",\n\n //-- ASSIGNMENT ENDPOINTS --//\n GET_ASSIGNMENT_ENDPOINT: \"/assignment/:id\",\n\n //-- COMPILE ENDPOINTS --//\n COMPILE_CODE_ENDPOINT: \"/compile\",\n COMPILE_QUESTION_ENDPOINT: \"/compiler/question/:id\",\n\n //-- SESSION ENDPOINTS --//\n GET_SESSIONS_ENDPOINT: \"/sessions\",\n\n //-- LANGUAGES ENDPOINTS --//\n GET_LANGUAGES_ENDPOINT: \"/languages\",\n\n //-- LTI ENDPOINTS --//\n LTI_VALIDATE_ENDPOINT: \"/lti/validate\",\n LTI_GRADEBOOK_SYNC_ENDPOINT: \"/lti/gradebook\",\n\n //-- CACHE ENDPOINTS --//\n REFRESH_CACHE: \"/cache/refresh\",\n RELOAD_CACHE: \"/cache/reload/:target/:id\",\n LOGIN_CACHE: \"/cache/login\",\n SYNC_CACHE: \"/cache/sync\",\n\n //-- PASSWORD ENDPOINTS --//\n UPDATE_PASSWORD_ENDPOINT: \"/regenerate/:id\",\n SETTINGS_RESET_PASSWORD_ENDPOINT: \"/session/active/reset\",\n\n //-- FEEDBACK ENDPOINTS --//\n GET_FEEDBACKS_ENDPOINT: \"/feedbacks\",\n DOWNLOAD_FEEDBACKS_ENDPOINT: \"/feedbacks/download\",\n\n //-- CART ENDPOINTS --//\n CREATE_CART_ENDPOINT: \"/cart\",\n GET_CART_ENDPOINT: \"/cart\",\n UPDATE_CART_ENDPOINT: \"/cart\",\n APPLY_PROMOCODE_CART_ENDPOINT: \"/cart/promo/:code\",\n CHECKOUT_CART_ENDPOINT: \"/cart/:id/checkout\",\n SUBMIT_PAYMENT_ENDPOINT: \"/cart/:id/payment\",\n\n //-- ROSTER ENDPOINTS --//\n GET_ROSTERS_ENDPOINT: \"/rosters\",\n GET_ROSTER_ENDPOINT: \"/roster/:id\",\n CREATE_ROSTER_ENDPOINT: \"/roster\",\n UPDATE_ROSTER_ENDPOINT: \"/roster/:id\",\n REMOVE_ROSTER_ENDPOINT: \"/roster/:id\",\n\n //-- SCHOOL ENDPOINTS --//\n GET_SCHOOLS_ENDPOINT: \"/schools/:allData\",\n GET_SCHOOL_ENDPOINT: \"/school/:id\",\n CREATE_SCHOOL_ENDPOINT: \"/school\",\n UPDATE_SCHOOL_ENDPOINT: \"/school/:id\",\n REMOVE_SCHOOL_ENDPOINT: \"/school/:id\",\n\n //-- ADMIN ENDPOINTS --//\n GET_ADMINS_ENDPOINT: \"/admins\",\n CREATE_ADMIN_ENDPOINT: \"/admin\",\n UPDATE_ADMIN_ENDPOINT: \"/admin/:id\",\n REMOVE_ADMIN_ENDPOINT: \"/admin/:id\",\n\n //-- INSTRUCTOR ENDPOINTS --//\n GET_INSTRUCTORS_ENDPOINT: \"/instructors\",\n CREATE_INSTRUCTOR_ENDPOINT: \"/instructor\",\n GET_INSTRUCTORS_BY_IDS_ENDPOINT: \"/instructors/:ids\",\n UPDATE_INSTRUCTOR_ENDPOINT: \"/instructor/:id\",\n REMOVE_INSTRUCTOR_ENDPOINT: \"/instructor/:id\",\n\n //-- STUDENT ENDPOINTS --//\n GET_STUDENTS_ENDPOINT: \"/students\",\n CREATE_STUDENT_ENDPOINT: \"/student\",\n GET_STUDENT_ENDPOINT: \"/student/:id\",\n GET_STUDENTS_BY_IDS_ENDPOINT: \"/student/bulk/:ids\",\n UPDATE_STUDENT_ENDPOINT: \"/student/:id\",\n UPDATE_STUDENT_SETTINGS_ENDPOINT: \"/student/settings/:id\",\n REMOVE_STUDENT_ENDPOINT: \"/student/:id\",\n BATCH_STUDENTS_ENDPOINT: \"/students/batch\",\n INVITE_STUDENT_ENDPOINT: \"/student/invite/:id\",\n\n //-- CLASS ENDPOINTS --//\n GET_CLASSES_ENDPOINT: \"/classes\",\n GET_ONLY_CLASSES_ENDPOINT: \"/classes/simple\",\n GET_CLASS_ENDPOINT: \"/class/:id\",\n GET_CLASS_POPULATE_ENDPOINT: \"/class/populate/:id\",\n CREATE_CLASS_ENDPOINT: \"/class\",\n UPDATE_CLASS_ENDPOINT: \"/class/:id\",\n REMOVE_CLASS_ENDPOINT: \"/class/:id\",\n CLASS_THUMBNAIL_ENDPOINT: \"/class/:id/thumbnail\",\n\n // -- ANNOUNCEMENT ENDPOINT --//\n GET_ANNOUNCEMENTS_ENDPOINT: \"/announcements\",\n CREATE_ANNOUNCEMENT_ENDPOINT: \"/announcement\",\n UPDATE_ANNOUNCEMENT_ENDPOINT: \"/announcement/:id\",\n REMOVE_ANNOUNCEMENT_ENDPOINT: \"/announcement/:id\",\n\n // -- QA ENDPOINT --//\n GET_QAS_ENDPOINT: \"/qas\",\n PUBLISH_QA_ENDPOINT: \"/qa\",\n UPDATE_QA_ENDPOINT: \"/qa/:id\",\n REMOVE_QA_ENDPOINT: \"/qa/:id\",\n\n //-- ASSET ENDPOINTS --//\n GET_ASSETS_ENDPOINT: \"/assets\",\n GET_ASSET_ENDPOINT: \"/asset/:id\",\n GET_ASSET_ANONYMOUS_ENDPOINT: \"/asset/anonymous/:id/:token\",\n CREATE_ASSET_ENDPOINT: \"/asset\",\n UPDATE_ASSET_ENDPOINT: \"/asset/:id\",\n REMOVE_ASSET_ENDPOINT: \"/asset/:id\",\n\n //-- ASSESSMENT ENDPOINTS --//\n GET_ASSESSMENTS_ENDPOINT: \"/assessments\",\n GET_ASSESSMENT_ENDPOINT: \"/assessment/:id\",\n GET_ASSESSMENTS_BY_IDS_ENDPOINT: \"/assessments/:ids\",\n GENERATE_ASSESSMENT_URL: \"/assessment/generate-url/:id\",\n GET_ASSESSMENT_QUIZ_ANONYMOUS: \"/assessment/quiz/anonymous/:token\",\n CREATE_ASSESSMENT_ENDPOINT: \"/assessment\",\n UPDATE_ASSESSMENT_ENDPOINT: \"/assessment/:id\",\n REMOVE_ASSESSMENT_ENDPOINT: \"/assessment/:id\",\n\n //-- LECTURE ENDPOINTS --//\n GET_LECTURES_ENDPOINT: \"/lectures\",\n GET_LECTURES_BY_IDS_ENDPOINT: \"/lectures/:ids\",\n CREATE_LECTURE_ENDPOINT: \"/lecture\",\n UPDATE_LECTURE_ENDPOINT: \"/lecture/:id?vtt=:status\",\n REMOVE_LECTURE_ENDPOINT: \"/lecture/:id\",\n CHECK_LECTURE_TRANSCRIPTS_ENDPOINT: \"/lectures/check/transcripts\",\n GENERATE_LECTURE_TRANSCRIPT_ENDPOINT: \"/lecture/transcript/generate\",\n REMOVE_LECTURE_TRANSCRIPTS_ENDPOINT: \"/lecture/:id/transcripts\",\n GENERATE_LECTURE_URL: \"/lecture/generate-url/:id\",\n GET_LECTURE_VIDEO: \"/lecture/video/:token\",\n\n //-- MARKER ENDPOINTS --//\n GET_MARKERS_ENDPOINT: \"/markers\",\n GET_MARKERS_BY_IDS_ENDPOINT: \"/markers/:ids\",\n CREATE_MARKER_ENDPOINT: \"/marker\",\n UPDATE_MARKER_ENDPOINT: \"/marker/:id\",\n REMOVE_MARKER_ENDPOINT: \"/marker/:id\",\n\n //-- COURSE ENDPOINTS --//\n GET_COURSES_ENDPOINT: \"/courses\",\n GET_COURSE_ENDPOINT: \"/course/:id\",\n CREATE_COURSE_ENDPOINT: \"/course\",\n UPDATE_COURSE_ENDPOINT: \"/course/:id\",\n REMOVE_COURSE_ENDPOINT: \"/course/:id\",\n\n //-- UNIT ENDPOINTS --//\n GET_UNITS_ENDPOINT: \"/units\",\n GET_UNIT_ENDPOINT: \"/unit/:id\",\n CREATE_UNIT_ENDPOINT: \"/unit\",\n UPDATE_UNIT_ENDPOINT: \"/unit/:id\",\n REMOVE_UNIT_ENDPOINT: \"/unit/:id\",\n\n //-- QUESTION ENDPOINTS --//\n GET_QUESTIONS_ENDPOINT: \"/questions\",\n GET_QUESTIONS_REMOTE_ENDPOINT: \"/questions/list\",\n CREATE_QUESTION_ENDPOINT: \"/question\",\n BATCH_QUESTIONS_ENDPOINT: \"/questions/batch\",\n UPDATE_QUESTION_ENDPOINT: \"/question/:id\",\n REMOVE_QUESTION_ENDPOINT: \"/question/:id\",\n GET_LATEST_QUESTION_REMOTE_ENDPOINT: \"/question/latest\",\n\n //-- QUESTIONSET ENDPOINTS --//\n UPDATE_QUESTIONSET_ENDPOINT: \"/question/:id/set\",\n\n //-- TRACKER ENDPOINTS --//\n TRACKER_CLASS_ENDPOINT: \"/track/class/:id\",\n TRACKER_UNIT_ENDPOINT: \"/track/unit/:id\",\n TRACKER_LECTURE_ENDPOINT: \"/track/lecture/:id\",\n TRACKER_MARKER_ENDPOINT: \"/track/marker/:id\",\n TRACKER_ASSESSMENT_ENDPOINT: \"/track/assessment/:id\",\n\n //-- FEEDBACK ENDPOINTS --//\n GET_FEEDBACK_ENDPOINT: \"/feedbacks\",\n CREATE_FEEDBACK_ENDPOINT: \"/feedback\",\n UPDATE_FEEDBACK_ENDPOINT: \"/feedback/:id\",\n REMOVE_FEEDBACK_ENDPOINT: \"/feedback/:id\",\n\n //-- SUBSCRIPTION PLAN ENDPOINTS --//\n GET_SUBSCRIPTION_PLANS_ENDPOINT: \"/subscription/plans\",\n CREATE_SUBSCRIPTION_PLAN_ENDPOINT: \"/subscription/plan\",\n UPDATE_SUBSCRIPTION_PLAN_ENDPOINT: \"/subscription/plan/:id\",\n REMOVE_SUBSCRIPTION_PLAN_ENDPOINT: \"/subscription/plan/:id\",\n\n //-- ATTEMPT ENDPOINTS --//\n SUBMIT_ATTEMPT_ENDPOINT: \"/attempt/status/:status\",\n SUBMIT_ATTEMPT_TOKEN_ENDPOINT: \"/attempt/anonymous/:status/:token\",\n UPDATE_ATTEMPT_ENDPOINT: \"/attempt/:id\",\n GET_ATTEMPTS_ENDPOINT: \"/attempts\",\n REMOVE_ATTEMPTS_ENDPOINT: \"/remove/attempts\",\n GET_ATTEMPT_FOR_ASSESSMENT_ENDPOINT:\"/attempt/assessment/:id\",\n GET_BEST_ATTEMPT_FOR_ASSESSMENT_ENDPOINT:\"/attempt/best/assessment/:id\",\n\n //-- SYSTEM LOGS ENDPOINTS --//\n GET_SYSTEMLOGS_ENDPOINT: \"/logs\",\n GET_LOG_FOR_STUDENT_ENDPOINT: \"/log/student/:studentId\",\n RESET_LOG_ENDPOINT: \"/log/:id\",\n\n //-- REPORT ENDPOINTS --//\n GET_REPORTS_ENDPOINT: \"/reports\",\n GET_REPORT_ENDPOINT: \"/report/:id\",\n GET_REPORT_BY_CLASSID_ENDPOINT: \"/report/class/:id\",\n GET_REPORT_BY_CLASSID_STUDENTID_ENDPOINT: \"/report/class/:id/student/:studentId\",\n\n //-- TRANSCRIPTS ENDPOINTS --//\n GET_TRANSCRIPT_BY_ID_ENDPOINT: \"/transcript/:transcriptId\",\n GET_TRANSCRIPT_LANGUAGE_CODE_ENDPOINT: \"/transcript/lecture/:lectureId/code/:code\",\n CREATE_TRANSCRIPT_LANGUAGE_CODE_ENDPOINT: \"/transcript/lecture/:lectureId/code/:code\",\n\n //-- CHARTS ENDPOINTS --//\n GET_CHART_CLASS_ENDPOINT: \"/chart/kpis/class/:id\",\n GET_CHART_CLASS_STUDENT_ENDPOINT: \"/chart/kpis/class/:classId/student/:studentId\",\n\n //-- KPI ENDPOINTS --//\n GET_KPI_CLASS_STUDENT_ENDPOINT: \"/kpi/class/:classId/student/:studentId\",\n\n //-- TUTORIALS ENDPOINTS --//\n GET_TUTORIALS_ENDPOINT: \"/tutorials\",\n CREATE_TUTORIAL_ENDPOINT: \"/tutorial\",\n GET_LECTURES_BY_IDS_ENDPOINT: \"/tutorials/:ids\",\n // CREATE_LECTURE_ENDPOINT: \"/lecture\",\n UPDATE_TUTORIAL_ENDPOINT: \"/tutorial/:id?vtt=:status\",\n REMOVE_TUTORIAL_ENDPOINT: \"/tutorial/:id\",\n\n};\n","import APIResponse from \"./../payloads/APIResponse\";\n\nexport default {\n\n mockSuccessfulAPIResponse: (data) => {\n return new APIResponse(200, data, null);\n },\n \n mockFailedAPIResponse: () => {\n return new APIResponse(500, null, \"There was an error processing request. Please try again\");\n },\n \n mockNotFoundAPIResponse: () => {\n return new APIResponse(404, null, \"Resource not found\");\n },\n \n mockLongAPIResponse: async (data, millis) => {\n const delay = (ms) => new Promise((resolve,reject) => setTimeout(()=>{\n console.log(`Mock Delay applied for: ${ms/1000} secs`);\n resolve();\n }, ms));\n await delay(millis);\n return new APIResponse(200, data, null);\n },\n}","import userData from \"./../data/profile.json\";\nimport logoutData from \"./../data/logout.json\";\nimport assessmentsData from \"./../data/assessments.json\";\nimport questionsData from \"./../data/questions.json\";\nimport questionSetsData from \"./../data/questionsets.json\";\nimport tasksData from \"./../data/tasks.json\";\nimport unitsData from \"./../data/units.json\";\nimport assetsData from \"./../data/assets.json\";\nimport announcementsData from \"./../data/announcements.json\";\nimport instructorsData from \"./../data/instructors.json\";\nimport lecturesData from \"./../data/lectures.json\";\nimport studentLogsData from \"./../data/studentlogs.json\";\nimport examResultsData from \"./../data/examresults.json\";\nimport sessionData from \"./../data/session.json\";\nimport serverSessionData from \"./../data/serversessions.json\";\nimport schoolsData from \"./../data/schools.json\";\nimport studentsData from \"./../data/students.json\"\nimport classesData from \"./../data/classes.json\";\nimport coursesData from \"./../data/courses.json\";\nimport adminsData from \"./../data/administrators.json\";\nimport authData from \"./../data/authentication.json\";\nimport markersData from \"./../data/markers.json\";\nimport qasData from \"./../data/qas.json\";\nimport cacheData from \"./../data/cache.json\";\nimport reportsData from \"./../data/reports.json\";\nimport reportData from \"./../data/report.json\";\nimport plotsData from \"./../data/plots.json\";\nimport attemptsData from \"./../data/attempts.json\";\nimport systemLogsData from \"./../data/systemlogs.json\";\nimport feedbacksData from \"./../data/feedbacks.json\";\nimport bookstoreData from \"./../data/bookstore.json\";\nimport subscriptionPlansData from \"./../data/subscriptionplans.json\";\nimport achievementsData from './../data/achievements.json';\nimport productReviewData from './../data/reviews.json';\nimport cartData from './../data/cart.json';\nimport videotracksData from './../data/videotracks.json';\nimport timersData from './../data/timers.json';\nimport languagesData from './../data/languages.json';\nimport ApiSimulatorService from \"./ApiSimulatorService\";\n\nexport default {\n\n maintenance: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({status: false}, 2000);\n },\n\n login: async () => {\n return await ApiSimulatorService.mockLongAPIResponse(authData, 2000);\n },\n\n enroll: async () => {\n //simulate 10 secs success response\n return await ApiSimulatorService.mockLongAPIResponse(authData, 2000);\n },\n\n forgot: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({}, 2000);\n },\n\n recover: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ authData }, 2000);\n },\n\n resetPassword: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({\"message\": \"success\"}, 2000);\n },\n\n createSchool: async () => {\n return await ApiSimulatorService.mockFailedAPIResponse();\n //return await ApiSimulatorService.mockLongAPIResponse({schoolsData}, 3000);\n },\n\n updateSchool: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ schoolsData }, 3000);\n },\n\n removeSchool: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ schoolsData }, 5000);\n },\n\n createAdmin: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ adminsData }, 3000);\n },\n\n updateAdmin: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ adminsData }, 3000);\n },\n\n removeAdmin: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ adminsData }, 5000);\n },\n\n createInstructor: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse(\n { instructorsData },\n 3000\n );\n },\n\n updateInstructor: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse(\n { instructorsData },\n 3000\n );\n },\n\n removeInstructor: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse(\n { instructorsData },\n 5000\n );\n },\n\n createStudent: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse(\n { studentsData },\n 3000\n );\n },\n\n updateStudent: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse(\n { studentsData },\n 3000\n );\n },\n\n removeStudent: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ studentsData }, 2000);\n },\n\n createClass: async () => {\n return await ApiSimulatorService.mockFailedAPIResponse();\n //return await ApiSimulatorService.mockLongAPIResponse({classesData}, 3000);\n },\n\n updateClass: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ classesData }, 3000);\n },\n\n removeClass: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ classesData }, 5000);\n },\n\n getAsset: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({assetsData}, 3000);\n },\n\n createAsset: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({assetsData}, 3000);\n },\n\n updateAsset: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ assetsData }, 3000);\n },\n\n removeAsset: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ assetsData }, 2000);\n },\n\n createAssessment: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ assessmentsData }, 3000);\n },\n\n updateAssessment: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ assessmentsData }, 3000);\n },\n\n removeAssessment: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ assessmentsData }, 5000);\n },\n\n createQuestion: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ questionsData }, 3000);\n },\n\n batchQuestion: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ questionsData }, 3000);\n },\n\n updateQuestion: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ questionsData }, 3000);\n },\n\n removeQuestion: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ questionsData }, 5000);\n },\n\n updateQuestionSet: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ questionsData }, 1000);\n },\n\n getLectures: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ lecturesData }, 3000);\n },\n\n createLecture: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ lecturesData }, 3000);\n },\n\n updateLecture: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ lecturesData }, 3000);\n },\n\n removeLecture: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ lecturesData }, 2000);\n },\n\n createMarker: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ markersData }, 3000);\n },\n\n updateMarker: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ markersData }, 3000);\n },\n\n removeMarker: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ markersData }, 2000);\n },\n\n createCourse: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ coursesData }, 3000);\n },\n\n updateCourse: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ coursesData }, 3000);\n },\n\n removeCourse: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ coursesData }, 2000);\n },\n\n createUnit: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ unitsData }, 3000);\n },\n\n updateUnit: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ unitsData }, 3000);\n },\n\n removeUnit: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ unitsData }, 2000);\n },\n\n removeAnnouncement: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse(\n { announcementsData },\n 5000\n );\n },\n\n createFeedback: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ feedbacksData }, 3000);\n },\n\n updateFeedback: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ feedbacksData }, 3000);\n },\n\n removeFeedback: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ feedbacksData }, 2000);\n },\n\n getSubscriptionPlans: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ subscriptionPlansData }, 2000);\n },\n\n createSubscriptionPlan: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ subscriptionPlansData }, 3000);\n },\n\n updateSubscriptionPlan: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ subscriptionPlansData }, 3000);\n },\n\n removeSubscriptionPlan: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ subscriptionPlansData }, 3000);\n },\n\n trackClass: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ studentLogsData }, 3000);\n },\n\n trackUnit: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ studentLogsData }, 3000);\n },\n\n trackLecture: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ studentLogsData }, 3000);\n },\n\n trackMarker: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ studentLogsData }, 3000);\n },\n\n trackAssessment: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ timersData }, 3000);\n },\n\n likeQa: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ qasData }, 3000);\n },\n\n publishQa: async () => {\n //return await ApiSimulatorService.mockFailedAPIResponse();\n return await ApiSimulatorService.mockLongAPIResponse({ qasData }, 3000);\n },\n\n refreshCache: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ cacheData }, 5000);\n },\n\n reloadCache: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ cacheData }, 5000);\n },\n\n syncCache: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ cacheData }, 5000);\n },\n\n getSystemLogs: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ systemLogsData }, 2000);\n },\n\n getAttempts: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ attemptsData }, 2000);\n },\n\n removeAttempts: async() => {\n return await ApiSimulatorService.mockLongAPIResponse({ studentLogsData }, 2000);\n },\n \n updateAttempts: async() => {\n return await ApiSimulatorService.mockLongAPIResponse({ studentLogsData }, 2000);\n },\n\n submitExam: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ examResultsData }, 2000);\n },\n\n getAttemptForAssessment: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ examResultsData }, 2000);\n },\n\n updatePassword: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 2000);\n },\n\n createCart: async () => {\n return await ApiSimulatorService.mockLongAPIResponse(cartData, 2000);\n },\n\n addItemToCart: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 2000);\n },\n\n removeItemFromCart: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 2000);\n },\n\n applyPromoCodeToCart: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 3000);\n },\n\n submitPayment: async (paymentInfo) => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 5000);\n },\n\n validateLti: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 5000);\n },\n\n syncGradebookLti: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 5000);\n },\n\n checkTranscripts: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 5000);\n },\n\n generateTranscript: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ }, 5000);\n },\n\n addThumbnailToClass: async () => {\n return await ApiSimulatorService.mockLongAPIResponse(true, 5000); \n },\n\n logout: () => {\n return logoutData;\n },\n\n getCart: () => {\n return cartData;\n },\n\n getReports: () => {\n return reportsData;\n },\n\n getReport: async () => {\n return await ApiSimulatorService.mockLongAPIResponse({ reportData }, 1000);\n },\n\n getPlots: () => {\n return plotsData;\n },\n\n getQas: () => {\n return qasData;\n },\n\n getAssessments: () => {\n return assessmentsData;\n },\n\n getTests: () => {\n return assessmentsData;\n },\n\n getMarkers: () => {\n return markersData;\n },\n\n getQuestions: () => {\n return questionsData;\n },\n\n getQuestionSets: () => {\n return questionSetsData;\n },\n\n getTasks: () => {\n return tasksData;\n },\n\n getUnits: () => {\n return unitsData;\n },\n\n getAssets: () => {\n return assetsData;\n },\n\n getAnnouncements: () => {\n return announcementsData;\n },\n\n getInstructors: () => {\n return instructorsData;\n },\n\n getClasses: () => {\n return classesData;\n },\n\n getCourses: () => {\n return coursesData;\n },\n\n getLectures: () => {\n return lecturesData;\n },\n\n getStudentLogs: () => {\n return studentLogsData;\n },\n\n getProfile: () => {\n return userData;\n },\n\n getSession: () => {\n return sessionData;\n },\n\n getSessions: () => {\n return serverSessionData;\n },\n\n getSchools: () => {\n return schoolsData;\n },\n\n getStudents: () => {\n return studentsData;\n },\n\n getAdmins: () => {\n return adminsData;\n },\n\n getFeedbacks: () => {\n return feedbacksData;\n },\n\n getBookstore: () => {\n return bookstoreData;\n },\n\n getProductReviews: () => {\n return productReviewData;\n },\n\n getAchievements: () => {\n return achievementsData;\n },\n\n getVideoTracks: () => {\n return videotracksData;\n },\n\n getTimers: () => {\n return timersData;\n },\n\n getLanguages: () => {\n return languagesData;\n },\n\n getTranscripts: () => {\n return [];\n },\n\n reloadCache: () => {\n return [];\n }\n};\n","export default {\n\n isOK: res => {\n if(!res) return false;\n if(res.status && (res.status === 200 || res.status === 201)) {\n return true;\n } else {\n return false;\n }\n },\n isRedirect: res => {\n if(!res) return \"\";\n if(res.status && (res.status === 302)) {\n return res.headers['location'];\n } else {\n return \"\";\n }\n }\n};\n","import Config from \"./../config/Config\";\nimport MockService from \"./MockService\";\n\nexport default {\n\n store: (obj) => {\n for (const key in obj) {\n localStorage.setItem(key, JSON.stringify(obj[key]));\n }\n },\n\n flush: () => {\n localStorage.clear();\n },\n\n get: type => {\n if (type === \"session\") {\n return Config.mockAPI ? MockService.getSession() : JSON.parse(localStorage.getItem('session'));\n }\n if (type === \"profile\") {\n return Config.mockAPI ? MockService.getProfile() : JSON.parse(localStorage.getItem('user'));\n }\n if (type === \"announcements\") {\n return Config.mockAPI ? MockService.getAnnouncements() : JSON.parse(localStorage.getItem('announcements'));\n }\n if (type === \"schools\") {\n return Config.mockAPI ? MockService.getSchools() : JSON.parse(localStorage.getItem('schools'));\n }\n if (type === \"administrators\") {\n return Config.mockAPI ? MockService.getAdmins() : JSON.parse(localStorage.getItem('administrators'));\n }\n if (type === \"instructors\") {\n return Config.mockAPI ? MockService.getInstructors() : JSON.parse(localStorage.getItem('instructors'));\n }\n if (type === \"students\") {\n return Config.mockAPI ? MockService.getStudents() : JSON.parse(localStorage.getItem('students'));\n }\n if (type === \"classes\") {\n return Config.mockAPI ? MockService.getClasses() : JSON.parse(localStorage.getItem('classes'));\n }\n if(type === \"qas\") {\n return Config.mockAPI ? MockService.getQas() : JSON.parse(localStorage.getItem('qas'));\n }\n if(type === \"courses\") {\n return Config.mockAPI ? MockService.getCourses() : JSON.parse(localStorage.getItem('courses'));\n }\n if(type === \"reports\") {\n return Config.mockAPI ? MockService.getReports() : JSON.parse(localStorage.getItem('reports'));\n }\n if(type === \"plots\") {\n return Config.mockAPI ? MockService.getPlots() : JSON.parse(localStorage.getItem('plots'));\n }\n if (type === \"assets\") {\n return Config.mockAPI ? MockService.getAssets() : JSON.parse(localStorage.getItem('assets'));\n }\n if (type === \"assessments\") {\n return Config.mockAPI ? MockService.getAssessments() : JSON.parse(localStorage.getItem('assessments'));\n }\n if (type === \"questions\") {\n return Config.mockAPI ? MockService.getQuestions() : JSON.parse(localStorage.getItem('questions'));\n }\n if (type === \"questionsets\") {\n return Config.mockAPI ? MockService.getQuestionSets() : JSON.parse(localStorage.getItem('questionsets'));\n }\n if (type === \"tasks\") {\n return Config.mockAPI ? MockService.getTasks() : JSON.parse(localStorage.getItem('tasks'));\n }\n if (type === \"units\") {\n return Config.mockAPI ? MockService.getUnits() : JSON.parse(localStorage.getItem('units'));\n }\n if (type === \"assets\") {\n return Config.mockAPI ? MockService.getAssets() : JSON.parse(localStorage.getItem('assets'));\n }\n if (type === \"lectures\") {\n return Config.mockAPI ? MockService.getLectures() : JSON.parse(localStorage.getItem('lectures'));\n }\n if (type === \"logs\") {\n return Config.mockAPI ? MockService.getStudentLogs() : JSON.parse(localStorage.getItem('logs'));\n }\n if (type === \"rosters\") {\n return Config.mockAPI ? MockService.getRosters() : JSON.parse(localStorage.getItem('rosters'));\n }\n if (type === \"schools\") {\n return Config.mockAPI ? MockService.getSchools() : JSON.parse(localStorage.getItem('schools'));\n }\n if (type === \"markers\") {\n return Config.mockAPI ? MockService.getMarkers() : JSON.parse(localStorage.getItem('markers'));\n }\n if (type === \"feedbacks\") {\n return Config.mockAPI ? MockService.getFeedbacks() : JSON.parse(localStorage.getItem('feedbacks'));\n }\n if (type === \"cart\") {\n return Config.mockAPI ? MockService.getCart() : JSON.parse(localStorage.getItem('cart'));\n }\n if (type === \"videotracks\") {\n return Config.mockAPI ? MockService.getVideoTracks() : JSON.parse(localStorage.getItem('videotracks'));\n }\n if(type === \"timers\") {\n return Config.mockAPI ? MockService.getTimers() : JSON.parse(localStorage.getItem('timers'));\n }\n if(type === \"tests\") {\n return Config.mockAPI ? MockService.getTests() : JSON.parse(localStorage.getItem('tests'));\n }\n if(type === \"transcripts\") {\n return Config.mockAPI ? MockService.getTranscripts() : JSON.parse(localStorage.getItem('transcripts'));\n }\n if(type === \"isStartOn\") {\n return Config.mockAPI ? true : JSON.parse(localStorage.getItem('isStartOn'));\n }\n if(type === \"startOn\") {\n return Config.mockAPI ? true : JSON.parse(localStorage.getItem('startOn'));\n }\n if(type === \"userAdmin\") {\n return Config.mockAPI ? true : JSON.parse(localStorage.getItem('userAdmin'));\n }\n if(type === \"sessionAdmin\") {\n return Config.mockAPI ? true : JSON.parse(localStorage.getItem('sessionAdmin'));\n }\n if(type === \"libraryAdmin\") {\n return Config.mockAPI ? true : JSON.parse(localStorage.getItem('libraryAdmin'));\n }\n if (type === \"logAdmin\") {\n return Config.mockAPI ? MockService.getStudentLogs() : JSON.parse(localStorage.getItem('logAdmin'));\n }\n }\n};\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport ResponseUtil from './../utils/ResponseUtil';\nimport LocalStorageService from \"./LocalStorageService\";\n\nexport default {\n\n get: () => {\n return LocalStorageService.get(\"session\") || null;\n },\n\n getAllFromServer: async () => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.getSessions()); }\n try { \n let response = await new ApiService().get(ApiPath.GET_SESSIONS_ENDPOINT);\n if (ResponseUtil.isOK(response)) {\n return response.data.sessions;\n } else {\n return 0;\n }\n } catch (error) {\n return 0;\n }\n },\n\n getCurrentUserId: () => {\n const session = LocalStorageService.get(\"session\");\n if(!session) { return ''}\n return session.userId;\n },\n\n getToken: () => {\n const session = LocalStorageService.get(\"session\");\n if(!session) { return '';}\n return session.token;\n }\n};\n","import LocalStorageService from \"./LocalStorageService\";\n\nexport default {\n get: () => {\n return LocalStorageService.get(\"profile\");\n },\n\n getRole: () => {\n const profile = LocalStorageService.get(\"profile\");\n if(profile){\n return profile.role;\n }\n return \"\";\n }\n};\n","export default {\n \n capitalize: s => {\n if (typeof s !== \"string\") {\n return \"\";\n }\n if (s === \"\") {\n return \"\";\n }\n return s.charAt(0).toUpperCase() + s.slice(1);\n },\n\n lowercase: s => {\n if (typeof s !== \"string\") {\n return s;\n }\n if (s === \"\") {\n return \"\";\n }\n return s.toLowerCase();\n },\n\n isEmpty: s => {\n if (s === null || s === undefined) {\n return true;\n }\n if (s === \"\") {\n return true;\n }\n return false;\n },\n\n decodeHtml: (html) => {\n const txt = document.createElement(\"textarea\");\n txt.innerHTML = html;\n return txt.value;\n },\n\n replaceBetween: (origin, startIndex, endIndex, insertion) => {\n return origin.substring(0, startIndex) + insertion + origin.substring(endIndex);\n },\n\n replaceEncodedSpaces: (origin) => {\n return origin.replace(/ /g, ' ');\n },\n\n cleanupLatex: (mathquillLatex) => {\n const latex = mathquillLatex.trim();\n const latexAsArray = latex.split(\" \");\n let cleanlatexArray = [];\n if(latexAsArray && latexAsArray.length > 0){\n cleanlatexArray = latexAsArray.filter(lm => lm !== \"\");\n }\n const cleanlatex = cleanlatexArray.join(\" \")\n return cleanlatex;\n },\n\n startsWithCharacter(genericString, char) {\n return genericString.startsWith(char);\n },\n\n hasCharacter(genericString, char){\n return genericString.includes(char);\n },\n\n isDollarInput(genericString) {\n const pattern = /\\$\\$\\d{1,10}(\\.\\d{1,2})?\\$/;\n return pattern.test(genericString);\n },\n\n removeMathPlaceholderForDollarInput(genericString){\n return genericString.substr(1).slice(0, -1);\n },\n\n trim(genericString){\n if(!genericString) return '';\n return genericString.trim();\n },\n\n removeWhiteSpacesWithin(genericString){\n return genericString.replace(/\\s+/g, '');\n },\n\n removeMathPlaceholder(genericString){\n return genericString.replace(/[$]/g, '');\n },\n\n removeParenthesis(genericString){\n return genericString.replace(/[{}]/g, '');\n },\n\n isNumber(genericString){\n if(!genericString || genericString === '') return false;\n //remove commas!\n const genericStringWithNoCommas = genericString.replace(/,/g, '');\n const numberFromString = Number(genericStringWithNoCommas);\n if(numberFromString === undefined || numberFromString === NaN || isNaN(numberFromString) || numberFromString === \"NaN\") return false;\n return true;\n },\n\n toNumber(genericString){\n if(!genericString || genericString === '') return 0;\n //remove commas!\n const genericStringWithNoCommas = genericString.replace(/,/g, '');\n const numberFromString = Number(genericStringWithNoCommas);\n if(numberFromString === NaN || isNaN(numberFromString)) return 0;\n return numberFromString;\n },\n\n removeUnsupportedCharsExcel(filename){\n if(!filename || filename === '') return '';\n return filename.replace(':', '')\n .replace('&', '')\n .replace('?', '')\n .replace('[', '')\n .replace(']', '')\n .replace('*', '');\n }\n};\n","export default __webpack_public_path__ + \"static/media/logo_reverse.9aa72fa8.svg\";","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport SessionService from \"./SessionService\";\n\nexport default {\n \n login: async (email, password) => {\n if (Config.mockAPI) { return await MockService.login(); }\n let payload = { email: email, password: password };\n let response = await new ApiService().post(ApiPath.LOGIN_ENDPOINT, payload);\n return response || {};\n },\n\n mimicStudent: async (email) => {\n if (Config.mockAPI) { return await MockService.login(); }\n let payload = { email: email };\n let response = await new ApiService().post(ApiPath.MIMIC_ENDPOINT, payload);\n return response || {};\n },\n\n forgot: async (payload) => {\n if (Config.mockAPI) { return await MockService.forgot(); }\n let response = await new ApiService().post(ApiPath.FORGOT_PASS_ENDPOINT, payload);\n return response || {};\n },\n\n recover: async (payload) => {\n if (Config.mockAPI) { return await MockService.recover(); }\n let response = await new ApiService().post(ApiPath.RECOVER_ACCT_ENDPOINT, payload);\n return response || {};\n },\n\n resetPassword: async (payload) => {\n if (Config.mockAPI) { return await MockService.recover(); }\n try {\n await new ApiService().post(ApiPath.SETTINGS_RESET_PASSWORD_ENDPOINT, payload);\n return true;\n } catch (error) {\n console.error(`AuthService resetPassword | Error: ${error}`);\n return false;\n }\n },\n\n logout: async () => {\n if (Config.mockAPI) { return MockService.logout(); }\n try {\n const session = SessionService.get();\n const payload = {sessionId: session ? session._id: ''};\n await new ApiService().post(ApiPath.LOGOUT_ENDPOINT, payload);\n } catch (error) {\n console.error(`AuthService logout | Error: ${error}`);\n }\n }\n};\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Form, Alert, Button, Spinner } from \"react-bootstrap\";\nimport ResponseUtil from \"../../../utils/ResponseUtil\";\nimport StringUtils from \"./../../../utils/StringUtils\";\nimport DeepLinking from \"./.././../../utils/DeepLinking\";\nimport { Link } from \"react-router-dom\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport logo from \"./../../../images/logo_reverse.svg\";\nimport \"./loginform.css\";\n\n// SERVICES\nimport AuthService from \"../../../services/AuthService\";\nimport LocalStorageService from \"./../../../services/LocalStorageService\";\n\nconst LoginForm = () => {\n\n const history = useHistory();\n const [showWrongInputAlert, setShowWrongInputAlert] = useState(false);\n const [showFailedLoginAlert, setShowFailedLoginAlert] = useState(false);\n const [email, setEmailInput] = useState(\"\");\n const [password, setPasswordInput] = useState(\"\");\n const [disableForm, setDisableForm] = useState(\"\");\n\n const wrongInputErrorMessage =\n \"Email/Password are required. Please review and try again.\";\n const failedLoginErrorMessage =\n \"Login failed. Please review your credentials and try again\";\n\n const handleSubmit = async e => {\n e.preventDefault();\n setDisableForm(\"checked\");\n if (StringUtils.isEmpty(email) || StringUtils.isEmpty(password)) {\n setShowWrongInputAlert(true);\n setDisableForm(\"\");\n return;\n }\n\n const response = await AuthService.login(email, password);\n\n if (ResponseUtil.isOK(response)) {\n LocalStorageService.flush();\n const { user, library, session } = response.data;\n LocalStorageService.store({ user: user, session: session });\n LocalStorageService.store(library); //destruct library!\n\n if (\n user.role === \"Instructor\" ||\n user.role === \"Admin\" ||\n user.role === \"SuperAdmin\"\n ) {\n history.push(DeepLinking.MANAGEMENT.DASHBOARD_VIEW_PATH);\n } else if (user.role === \"Student\") {\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n }\n\n } else {\n setShowFailedLoginAlert(true);\n setDisableForm(\"\");\n return;\n }\n };\n\n return (\n
\n setShowWrongInputAlert(false)}\n dismissible\n >\n {wrongInputErrorMessage}\n \n\n setShowFailedLoginAlert(false)}\n dismissible\n >\n {failedLoginErrorMessage}\n \n\n
\n
\n\n

\n \n Sign In\n \n

\n\n
\n \n setEmailInput(e.target.value)}\n />\n \n\n \n setPasswordInput(e.target.value)}\n />\n \n\n handleSubmit(e)}\n >\n Sign In{\" \"}\n {disableForm === \"\" ? (\n \n ) : (\n \n )}\n \n\n
\n
\n \n support@limespring.com\n \n
\n \n Forgot Password?\n \n
\n
\n New Here? \n \n Sign up\n \n
\n \n
\n \n );\n};\n\nexport default LoginForm;\n","import React from 'react';\nimport './footer.css';\n\nconst Footer = () => {\n\n const currentYear = new Date().getFullYear();\n\n return (\n
\n
© {currentYear} Limespring. All Rights Reserved
\n
\n );\n}\n \nexport default Footer;\n","import React from \"react\";\nimport LoginForm from \"../forms/LoginForm\";\nimport \"./brochures.css\";\nimport Footer from \"../footer/Footer\";\n\nconst SignInBrochure = () => {\n return (\n
\n
\n \n
\n\n
\n );\n};\n\nexport default SignInBrochure;\n","import React, {useEffect} from \"react\";\nimport ReactGA from 'react-ga';\nimport SignInBrochure from \"./../../../widgets/brochure/SignInBrochure\";\nimport \"./loginview.css\";\n\nconst LoginView = () => {\n\n useEffect(() => {\n document.title = 'LimeSpring Portal - Login';\n \n //track page view (analytics)\n ReactGA.pageview(window.location.pathname + window.location.search);\n }, []);\n\n return (\n
\n \n
\n );\n};\n\nexport default LoginView;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n\n\n getAllSimpleFromRemote: async () => {\n const response = await new ApiService().get(ApiPath.GET_ONLY_CLASSES_ENDPOINT);\n if(response && response.status === 200) { \n const { classes } = response.data;\n return classes;\n } \n return [];\n },\n\n getAllFromRemote: async () => {\n const response = await new ApiService().get(ApiPath.GET_CLASSES_ENDPOINT);\n if(response && response.status === 200) { \n const { classes } = response.data;\n return classes;\n } \n return [];\n },\n\n getFromRemote: async (id) => {\n const response = await new ApiService().get(ApiPath.GET_CLASS_ENDPOINT.replace(':id', id));\n if(response && response.status === 200) { \n const { cls } = response.data;\n return cls;\n } \n return null;\n },\n getClassPopulated: async (id) => {\n const response = await new ApiService().get(ApiPath.GET_CLASS_POPULATE_ENDPOINT.replace(':id', id));\n if(response && response.status === 200) { \n let { cls } = response.data ;\n return cls;\n } \n return null;\n },\n\n getAll: () => {\n return LocalStorageService.get('classes') || [];\n },\n\n get: (id) => {\n return LocalStorageService.get('classes').find(_class => _class._id === id);\n },\n\n getByIds: (ids) => {\n const classes = LocalStorageService.get('classes');\n const assignedClasses = ids.map(id => classes.find(_class => _class._id === id));\n return assignedClasses;\n },\n\n getClassesForInstructor: (id) => {\n const classes = LocalStorageService.get('classes');\n if(!classes || classes.length === 0) { return [] }\n const assignedClasses = classes.filter(_class => _class.instructors.includes(id));\n return assignedClasses;\n },\n\n getClassesForStudent: (id) => {\n const classes = LocalStorageService.get('classes');\n if(!classes || classes.length === 0) { return [] }\n const assignedClasses = classes.filter(_class => _class.students.includes(id));\n return assignedClasses;\n },\n\n getAllStudentsForClass: (id) => {\n const _class = LocalStorageService.get('classes').find(_class => _class._id === id);\n if(!_class || _class.length === 0) { return [] }\n return _class.students || [];\n },\n\n clone: async (_class, user) => { \n const clone = {..._class};\n clone.title = _class.title + \" COPY\";\n clone.students = [];\n debugger;\n if(user && user.role === 'Instructor'){\n clone.instructors = [user.id || user._id];\n } else {\n clone.instructors = [];\n }\n\n if(clone.createdBy && (clone.createdBy !== user._id)){\n clone.createdBy = user._id\n }\n \n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.createClass()); }\n \n try { \n let response = await new ApiService().post(ApiPath.CREATE_CLASS_ENDPOINT, clone);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`ClassService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n create: async (payload) => {\n \n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.createClass()); }\n \n try { \n let response = await new ApiService().upload(ApiPath.CREATE_CLASS_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`ClassService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n addThumbnail: async (classId, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.addThumbnailToClass()); }\n \n try { \n let response = await new ApiService().upload(ApiPath.CLASS_THUMBNAIL_ENDPOINT.replace(':id', classId), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`ClassService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n update: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.updateClass()); }\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_CLASS_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`ClassService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n \n remove: async (id) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.removeClass()); }\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_CLASS_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`ClassService | Error while attempting to remove response: ${error}`);\n return false;\n }\n }\n }","export default {\n\n getRole: (user) => {\n return user.role;\n }\n}","export default {\n SUPERADMIN: [\n \"dashboard\",\n \"schools\",\n \"administrators\",\n \"instructors\",\n \"students\",\n \"sections\",\n \"courses\",\n \"units\",\n \"lectures\",\n \"assessments\",\n \"questions\",\n \"library\",\n \"reports\",\n \"analytics\",\n \"logout\"\n ],\n ADMIN: [\n \"dashboard\",\n \"instructors\",\n \"students\",\n \"sections\",\n \"courses\",\n \"units\",\n \"lectures\",\n \"assessments\",\n \"questions\",\n \"library\",\n \"reports\",\n \"analytics\",\n \"logout\"\n ],\n INSTRUCTOR: [\n \"dashboard\",\n \"students\",\n \"sections\",\n \"courses\",\n \"units\",\n \"lectures\",\n \"assessments\",\n \"questions\",\n \"library\",\n \"reports\",\n \"analytics\",\n \"logout\"\n ],\n STUDENT: [\n \"dashboard\",\n \"grades\",\n \"account\",\n \"logout\"\n ]\n}","import React from \"react\";\n\nconst ShopIcon = props => {\n\n const { width = 1, height = 1, mode = \"vertical\" } = props;\n\n return (\n \n \n \n );\n};\n\nexport default ShopIcon;\n","import React from 'react';\nimport * as Icons from \"react-bootstrap-icons\";\nimport ShopIcon from '../icons/ShopIcon';\nimport StringUtils from \"./../../../utils/StringUtils\";\nimport './mobilemenu.css';\n\nconst MobileMenuOption = (props) => {\n\n const { label, handler } = props;\n\n const getIcon = () => {\n\n switch (label) {\n case \"dashboard\":\n return ;\n \n case \"administrators\":\n return ;\n \n case \"students\":\n return ;\n \n case \"instructors\":\n return ;\n \n case \"lectures\":\n return ;\n \n case \"schools\":\n return ;\n \n case \"courses\":\n return ;\n \n case \"library\":\n return ;\n \n case \"assessments\":\n return ;\n \n case \"reports\":\n return ;\n \n case \"grades\":\n return ;\n \n case \"units\":\n return ;\n \n case \"sections\":\n return ;\n \n case \"questions\":\n return ;\n \n case \"analytics\":\n return ;\n \n case \"account\":\n return ;\n\n case \"bookstore\":\n return ;\n\n case \"logout\":\n return ;\n }\n };\n\n const getLabel = () => {\n if (label === \"questions\") {\n return \"Question Bank\";\n }\n return StringUtils.capitalize(label);\n };\n\n return (\n
handler(label)}>{getIcon()} {getLabel()}{\" \"}
\n );\n}\n \nexport default MobileMenuOption;","export default __webpack_public_path__ + \"static/media/logo.6ac714dd.svg\";","import React, {useState, useEffect} from 'react';\nimport {useHistory} from 'react-router-dom';\nimport { slide as Menu } from 'react-burger-menu';\nimport ProfileService from './../../../services/ProfileService';\nimport ClassService from './../../../services/ClassService';\nimport AuthService from './../../../services/AuthService';\nimport RoleUtils from \"./../../../utils/RoleUtils\";\nimport SidebarMenuUtils from \"./../../../utils/SidebarMenuUtils\";\nimport MobileMenuOption from \"./MobileMenuOption\";\nimport DeepLinking from './../../../utils/DeepLinking';\nimport logo from './../../../images/logo.svg';\nimport './mobilemenu.css';\n\nconst MobileMenu = () => {\n\n const history = useHistory();\n const [menuOpen, setMenuOpen] = useState(false);\n const [profile, setProfile] = useState(null);\n\n useEffect(() => {\n if(!profile) setProfile(ProfileService.get());\n }, []);\n\n const handleStateChange = (state) => {\n setMenuOpen(state.isOpen);\n }\n\n const closeMenu = () => {\n setMenuOpen(false);\n }\n\n const renderMenuItems = () => {\n \n if(!profile) { return <>; }\n\n let menuItems = [];\n \n if(profile) {\n const role = RoleUtils.getRole(profile);\n if(role === 'SuperAdmin') {\n menuItems = SidebarMenuUtils.SUPERADMIN;\n } else if(role === 'Admin'){\n menuItems = SidebarMenuUtils.ADMIN;\n } else if(role === 'Instructor'){\n menuItems = SidebarMenuUtils.INSTRUCTOR;\n } else if(role === 'Student') {\n menuItems = SidebarMenuUtils.STUDENT;\n }\n }\n \n return menuItems.map((menuItem, index) => {\n return (\n loadPage(target)}\n />\n );\n })\n }\n\n const renderLogo = () => {\n return \n }\n\n const loadPage = async (target) => { \n closeMenu();\n if(target === \"dashboard\"){\n const role = RoleUtils.getRole(profile);\n if(role === 'Student') {\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n } else {\n history.push(DeepLinking.MANAGEMENT.DASHBOARD_VIEW_PATH);\n } \n } else if (target === \"grades\") {\n history.push(DeepLinking.STUDENT.GRADEBOOK_VIEW_PATH);\n } else if (target === \"account\") {\n history.push(DeepLinking.SETTINGS_VIEW_PATH);\n } else if (target === \"logout\") {\n await AuthService.logout();\n history.push(DeepLinking.LOGOUT_VIEW_PATH);\n } else if(target === \"bookstore\") {\n history.push(DeepLinking.BOOKSTORE_VIEW_PATH);\n } else if(target === \"administrators\"){\n history.push(DeepLinking.MANAGEMENT.ADMINS_VIEW_PATH);\n } else if(target === \"students\"){\n history.push(DeepLinking.MANAGEMENT.STUDENTS_VIEW_PATH);\n } else if(target === \"instructors\"){\n history.push(DeepLinking.MANAGEMENT.INSTRUCTORS_VIEW_PATH);\n } else if(target === \"sections\"){\n history.push(DeepLinking.MANAGEMENT.SECTIONS_VIEW_PATH);\n } else if(target === \"courses\"){\n history.push(DeepLinking.MANAGEMENT.COURSES_VIEW_PATH);\n } else if(target === \"units\"){\n history.push(DeepLinking.MANAGEMENT.UNITS_VIEW_PATH);\n } else if(target === \"lectures\"){\n history.push(DeepLinking.MANAGEMENT.LECTURES_VIEW_PATH);\n } else if(target === \"assessments\"){\n history.push(DeepLinking.MANAGEMENT.ASSESSMENTS_VIEW_PATH);\n } else if(target === \"questions\"){\n history.push(DeepLinking.MANAGEMENT.QUESTIONS_VIEW_PATH);\n } else if(target === \"library\"){\n history.push(DeepLinking.MANAGEMENT.LIBRARY_VIEW_PATH);\n } else if(target === \"reports\"){\n history.push(DeepLinking.MANAGEMENT.REPORTS_VIEW_PATH);\n } else if(target === \"analytics\"){\n history.push(DeepLinking.MANAGEMENT.ANALYTICS_VIEW_PATH);\n }\n }\n\n return (\n
\n \n {renderLogo()}\n {renderMenuItems()}\n \n
\n );\n}\n \nexport default MobileMenu;","import React from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport \"./confirmexitmodal.css\";\n\nconst ConfirmExitModal = props => {\n const { show, onHide, onCancel, onProceed } = props;\n\n return (\n \n \n \n

\n You are about to exit this assessment. Want to save\n this for later?\n

\n
\n
\n \n {\n onProceed();\n }}\n >\n Don’t save\n \n {\n onCancel();\n }}\n >\n Save progress\n \n \n \n );\n};\n\nexport default ConfirmExitModal;\n","import React from \"react\";\nimport { useHistory, Link } from \"react-router-dom\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Modal from \"./../modals/ConfirmExitModal\";\nimport \"./buttons.css\";\nimport { useState } from \"react\";\n\nconst BackButton = props => {\n\n const history = useHistory();\n\n const { currentView, data } = props;\n const [modalShow, setModalShow] = useState(false);\n\n const onClickHandler = () => {\n if (currentView === \"quiz\") {\n //setModalShow(true); --> Do not show until fully fleshed!\n history.go(-1);\n } else if (currentView === \"workbook\") {\n history.goBack();\n } else if(currentView === \"exam-results\"){\n history.go(-2);\n } else if(currentView === \"placement-exam-results\"){\n history.go(-3);\n }else if(currentView === \"exam-results-skip\"){\n history.goBack();\n }else{\n history.goBack();\n }\n\n \n \n };\n\n const exitDontSave = () => {\n history.goBack();\n };\n\n const exitSave = () => {\n //history.goBack();\n };\n\n return (\n
\n
onClickHandler()}\n style={{ cursor: \"pointer\" }}\n className=\"menu-buttons me-0\">\n \n Back\n
\n setModalShow(false)}\n onCancel={() => exitSave()}\n onProceed={() => exitDontSave()}\n />\n
\n );\n};\n\nexport default BackButton;\n","import React from \"react\";\n\nconst CartIcon = props => {\n const { width, height } = props;\n\n return (\n \n \n \n );\n};\n\nexport default CartIcon;\n","import React from 'react';\nimport {useHistory} from 'react-router-dom';\nimport DeepLinking from './../../../utils/DeepLinking';\nimport CartIcon from './../icons/CartIcon';\nimport './buttons.css';\nconst CartButton = () => {\n\n const history = useHistory();\n\n const goToCart = () => {\n history.push(DeepLinking.BOOKSTORE_CART_VIEW_PATH)\n }\n\n return (\n
\n goToCart()}\n style={{ cursor: \"pointer\" }}\n className=\"menu-buttons me-0\">\n \n Cart\n
\n \n );\n}\n \nexport default CartButton;","import React from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport AuthService from \"./../../../services/AuthService\";\nimport \"./buttons.css\";\n\nconst LogoutButton = props => {\n const history = useHistory();\n const { adjust } = props;\n\n const logout = async () => {\n await AuthService.logout();\n history.push(DeepLinking.LOGOUT_VIEW_PATH);\n };\n\n return (\n \n logout()}\n style={{ cursor: \"pointer\" }}\n className=\"menu-buttons\"\n >\n \n Logout\n \n \n );\n};\n\nexport default LogoutButton;\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport \"./buttons.css\";\n\nconst SettingsButton = (props) => {\n\n const {show=true} = props;\n\n return (\n
\n \n \n Settings\n \n
\n );\n};\n\nexport default SettingsButton;\n","import React from \"react\";\nimport { useHistory, Link } from \"react-router-dom\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\nimport ShopIcon from './../icons/ShopIcon';\nimport \"./buttons.css\";\n\nconst BookstoreButton = props => {\n \n const history = useHistory();\n const { items } = props;\n\n const goToBookstore = () => {\n history.push(DeepLinking.BOOKSTORE_VIEW_PATH)\n }\n\n return (\n
\n goToBookstore()}\n style={{ cursor: \"pointer\" }}\n className=\"menu-buttons me-0 bookstore-button-disabled\">\n \n Bookstore\n
\n \n );\n};\n\nexport default BookstoreButton;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n\n getAllFromRemote: async () => {\n const response = await new ApiService().get(ApiPath.GET_COURSES_ENDPOINT);\n if(response && response.status === 200) { \n const { courses } = response.data;\n return courses;\n } \n return [];\n },\n\n getAll: () => {\n return LocalStorageService.get(\"courses\") || [];\n },\n\n get: id => {\n return LocalStorageService.get(\"courses\").find(course => course._id === id);\n },\n\n getFromRemote: async (id) => {\n try { \n let response = await new ApiService().get(ApiPath.GET_COURSE_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { course } = response.data;\n return course;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`CourseService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n getByIds: ids => {\n const courses = LocalStorageService.get('courses');\n const _courses = ids.map(id => courses.find(course => course._id === id));\n if(!_courses || _courses.length === 0) {return []}\n const assignedCourses = _courses.filter(c => c !== null && c !== undefined);\n return assignedCourses;\n },\n\n getLatest: () => {\n return LocalStorageService.get(\"courses\")[0];\n },\n\n getCoursesForUnit: unitId => {\n const courses = LocalStorageService.get('courses');\n const coursesAssigned = courses.filter((course) => {\n const units = course.units;\n if(units && units.length > 0){\n const unitFound = units.find((unit) => { return unit === unitId });\n if(unitFound) { return course; }\n }\n });\n return coursesAssigned || [];\n },\n\n clone: async (course) => {\n\n const clone = {...course};\n clone.title = course.title + \" COPY\";\n\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.createCourse()); }\n\n try { \n let response = await new ApiService().post(ApiPath.CREATE_COURSE_ENDPOINT, clone);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CourseService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n create: async (payload) => {\n \n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.createCourse()); }\n\n try { \n let response = await new ApiService().post(ApiPath.CREATE_COURSE_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CourseService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n \n update: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.updateCourse()); }\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_COURSE_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CourseService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n \n remove: async (id) => {\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_COURSE_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CourseService | Error while attempting to remove course. Response: ${error}`);\n return false;\n }\n }\n};\n","import React from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport ClassService from \"./../../../services/ClassService\";\nimport ProfileService from \"./../../../services/ProfileService\";\nimport CourseService from \"./../../../services/CourseService\";\nimport LocalStorageService from \"./../../../services/LocalStorageService\";\nimport \"./buttons.css\";\n\nconst StudentModeButton = () => {\n\n const history = useHistory();\n\n const showAssignedClasses = async () => {\n const user = ProfileService.get();\n\n if(user.role === 'SuperAdmin') {\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n return;\n }\n\n const classes = await ClassService.getAllFromRemote();\n if(classes && classes.length > 0){\n classes.forEach(c => { c._id = c.id });\n const courses = await CourseService.getAllFromRemote();\n if(courses && courses.length > 0){\n let units = [];\n courses.forEach(c => { units = units.concat(c.units); c._id = c.id });\n\n classes.forEach(c => {\n c.courses = c.courses.map(_c => _c.id);\n });\n\n LocalStorageService.store({classes: classes, courses: courses, units: units})\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n }\n }\n }\n return (\n
\n showAssignedClasses()}\n >\n \n Student\n \n
\n );\n};\n\nexport default StudentModeButton;\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\nimport { useHistory } from \"react-router-dom\";\nimport LocalStorageService from \"./../../../services/LocalStorageService\";\nimport \"./buttons.css\";\n\nconst InstructorModeButton = () => {\n\n const history = useHistory();\n\n const handleClick = () => {\n const userAdmin = LocalStorageService.get('userAdmin');\n const sessionAdmin = LocalStorageService.get('sessionAdmin');\n const logAdmin = LocalStorageService.get('logAdmin');\n\n if (userAdmin && sessionAdmin) {\n LocalStorageService.store({ user: userAdmin, session: sessionAdmin,logs: logAdmin });\n localStorage.removeItem(\"userAdmin\");\n localStorage.removeItem(\"sessionAdmin\");\n localStorage.removeItem(\"library\");\n localStorage.removeItem(\"units\");\n }\n\n history.push(DeepLinking.MANAGEMENT.DASHBOARD_VIEW_PATH);\n };\n\n return (\n
\n \n \n Instructor\n \n
\n );\n\n};\n\nexport default InstructorModeButton;\n","export default __webpack_public_path__ + \"static/media/bookstore_logo.840a4c97.png\";","import React from \"react\";\nimport MobileMenu from \"../hamburger/MobileMenu\";\nimport BackButton from \"./../buttons/BackButton\";\nimport CartButton from \"./../buttons/CartButton\";\nimport LogoutButton from \"../buttons/LogoutButton\";\nimport SettingsButton from \"../buttons/SettingsButton\";\nimport BookstoreButton from \"../buttons/BookstoreButton\";\nimport StudentModeButton from \"../buttons/StudentModeButton\";\nimport InstructorModeButton from \"../buttons/InstructorModeButton\";\nimport LimespringLogo from \"../../../images/logo.svg\";\nimport BookstoreLogo from \"../../../images/bookstore_logo.png\";\nimport Config from './../../../config/Config'\nimport \"./header.css\";\n\nconst Header = props => {\n const {\n showSettings = false,\n showStudentMode = false,\n showInstructorMode = false,\n showBookstore = false,\n showBack = false,\n showLogout = false,\n showCart = false,\n fromAdminInstructor = false,\n currentView = \"\",\n data = {}\n } = props;\n\n const renderStudentModeButton = () => {\n if (showStudentMode) {\n return ;\n } else {\n return <>;\n }\n }\n\n const renderInstructorModeButton = () => {\n if (showInstructorMode || fromAdminInstructor) {\n return ;\n } else {\n return <>;\n }\n }\n\n const renderSettingsButton = () => {\n if (showSettings) {\n return ;\n } else {\n return <>;\n }\n }\n\n const renderBackButton = () => {\n if (showBack) {\n return ;\n } else {\n return <>;\n }\n }\n\n const renderLogoutButton = () => {\n if (showLogout) {\n return ;\n } else {\n return;\n }\n };\n\n\n const renderBookstoreButton = () => {\n if (showBookstore) {\n return ;\n } else {\n return;\n }\n }\n\n const renderCartButton = () => {\n if (showCart) {\n return ;\n } else {\n return;\n }\n }\n\n return (\n \n\n \n\n
\n {renderBackButton()}\n
\n\n
\n {renderStudentModeButton()}\n {renderInstructorModeButton()}\n {renderBookstoreButton()}\n {renderSettingsButton()}\n {renderCartButton()}\n {renderLogoutButton()}\n
\n \n );\n};\n\nexport default Header;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n\n validate: async (token) => {\n if (Config.mockAPI) { \n await MockService.validateLti(); \n return true;\n }\n\n try { \n let response = await new ApiService().post(ApiPath.LTI_VALIDATE_ENDPOINT, {token: token});\n if (ResponseUtil.isOK(response)) {\n const { user, library, session } = response.data;\n LocalStorageService.store({ user: user, session: session });\n LocalStorageService.store(library); //destruct library!\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LtiService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n syncGradebook: async (classId, studentId) => {\n if (Config.mockAPI) { \n await MockService.validateLti(); \n return true;\n }\n\n try { \n let response = await new ApiService().post(ApiPath.LTI_GRADEBOOK_SYNC_ENDPOINT, {userId: studentId, classId: classId});\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LtiService | Error while attempting to get response: ${error}`);\n return false;\n }\n}\n}","import React, { useState, useEffect } from \"react\";\nimport Header from \"../../../widgets/header/Header\";\nimport { useHistory } from \"react-router-dom\";\nimport {Spinner} from 'react-bootstrap';\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport LtiService from \"./../../../../services/LtiService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./lti.css\";\nimport LocalStorageService from \"../../../../services/LocalStorageService\";\n\nconst LtiView = (props) => {\n\n const {token} = props;\n \n const history = useHistory();\n\n const [showFailedLaunch, setShowFailedLaunch] = useState(false);\n\n useEffect(() => {\n document.title = 'LimeSpring Portal - LTI';\n const runValidation = async () => {\n LocalStorageService.flush();\n const success = await LtiService.validate(token);\n const user = ProfileService.get();\n if(success){ \n if (user.role === \"Instructor\" || user.role === \"Admin\") {\n history.push(DeepLinking.MANAGEMENT.DASHBOARD_VIEW_PATH);\n } else if (user.role === \"Student\") {\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n }\n }else{\n setShowFailedLaunch(true);\n }\n }\n runValidation();\n }, []);\n\n return (\n
\n \n
\n \n
\n

Redirecting to your school account

\n

please wait...

\n \n
\n\n
\n \n

Unfortunately we were unable to log you in.

\n

Suggestions:

\n

1. Click on the LimeSpring link in your School Portal

\n

2. Contact us for technical support

\n
\n\n
\n\n
\n );\n};\n\nexport default LtiView;\n","import React, { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport logo from \"./../../../../images/logo.svg\";\nimport \"./logoutview.css\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport LocalStorageService from \"./../../../../services/LocalStorageService\";\n\nconst LogoutView = () => {\n const [logoutMessage, setLogoutMessage] = useState(\"You've signed out.\");\n const [fareWell, setFareWell] = useState(\"We hope to see you soon!\");\n\n const history = useHistory();\n\n const automaticRedirect = () => {\n LocalStorageService.flush();\n setTimeout(() => {\n history.push(DeepLinking.LOGIN_VIEW_PATH);\n }, 1000);\n };\n\n return (\n
\n
\n
\n \"logo\"\n
\n

\n {logoutMessage} {fareWell}\n

\n
\n
\n );\n};\n\nexport default LogoutView;\n","export default class Signup {\n\n constructor(token, signature, email, password, phoneNumber, termsAccepted){\n this.token = token;\n this.signature = signature;\n this.email = email;\n this.password = password;\n this.phoneNumber = phoneNumber;\n this.termsAccepted = termsAccepted;\n }\n\n getToken() {\n return this.token;\n }\n\n setToken(token){\n this.token = token;\n }\n\n getSignature() {\n return this.signature;\n }\n\n setSignature(signature){\n this.signature = signature;\n }\n\n getEmail() {\n return this.email;\n }\n\n setEmail(email){\n this.email = email;\n }\n\n getPassword() {\n return this.password;\n }\n\n setPassword(password){\n this.password = password;\n }\n\n getPhoneNumber() {\n return this.phoneNumber;\n }\n\n setPhoneNumber(phoneNumber){\n this.phoneNumber = phoneNumber;\n }\n\n getTermsAccepted() {\n return this.termsAccepted;\n }\n\n setTermsAccepted(termsAccepted){\n this.termsAccepted = termsAccepted;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import ApiService from \"./ApiService\";\nimport ApiPath from \"./../utils/ApiPath\";\nimport Config from \"./../config/Config\";\nimport MockService from \"./MockService\";\n\nexport default {\n\n enroll: async (payload) => {\n if (Config.mockAPI) { return await MockService.enroll(); }\n let response = await new ApiService().post(ApiPath.SIGN_UP_USER_ENDPOINT, payload);\n return response || {};\n }\n};\n","import React, { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Button, Form, Alert, Spinner } from \"react-bootstrap\";\nimport DeepLinking from \"./.././../../utils/DeepLinking\";\nimport { Link } from \"react-router-dom\";\nimport StringUtils from \"./../../../utils/StringUtils\";\nimport ResponseUtil from \"./../../../utils/ResponseUtil\";\nimport Signup from \"./../../../payloads/Signup\";\nimport LocalStorageService from \"./../../../services/LocalStorageService\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./registerform.css\";\nimport logo from \"./../../../images/logo_reverse.svg\";\n\n// SERVICES\nimport RegistrationService from \"./../../../services/RegistrationService\";\n\nconst RegisterForm = props => {\n const history = useHistory();\n const { query } = props;\n\n const [showInputAlert, setShowInputAlert] = useState(false);\n const [showFailedRegisterAlert, setShowFailedRegisterAlert] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [emailInput, setEmailInput] = useState(\"\");\n const [passwordInput, setPasswordInput] = useState(\"\");\n const [phoneNumberInput, setPhoneNumberInput] = useState(\"\");\n const [termsAndConditionsInput, setTermsAndConditionsInput] = useState(\"\");\n const [disableForm, setDisableForm] = useState(\"\");\n const [issueInConfirmPass, setIssueInConfirmPass] = useState(false);\n const [confirmPasswordInput, setConfirmPasswordInput] = useState(\"\");\n\n const inputErrorMessage = \"All fields are required. Please review\";\n const failedRegistrationErrorMessage =\n \"There was a problem with your registration process. Please contact administration.\";\n\n useEffect(() => {\n if(query && query.email !== \"\"){\n setEmailInput(query.email);\n }\n }, [query]);\n\n const validateConfirmPass = e => {\n setIssueInConfirmPass(false);\n setConfirmPasswordInput(e.target.value);\n const currentValue = e.target.value;\n if (currentValue !== passwordInput) {\n setIssueInConfirmPass(true);\n }\n };\n\n const formIsValid = () => {\n const allRequiredInputs = [\n emailInput,\n passwordInput,\n confirmPasswordInput,\n termsAndConditionsInput\n ];\n const emptyInputs = allRequiredInputs.filter(input => {\n return StringUtils.isEmpty(input);\n });\n\n if (emptyInputs.length > 0) {\n setShowInputAlert(true);\n setDisableForm(\"\");\n return false;\n }\n\n return true;\n };\n\n const handleSubmit = async e => {\n e.preventDefault();\n setDisableForm(\"checked\");\n if (!formIsValid()) {\n return;\n }\n\n //send API request\n let payload = new Signup(\n query.token,\n query.signature,\n emailInput,\n passwordInput,\n phoneNumberInput,\n termsAndConditionsInput\n );\n let response = await RegistrationService.enroll(payload);\n\n if (ResponseUtil.isOK(response)) {\n const { user, library, session } = response.data;\n LocalStorageService.store({\n user: user,\n library: library,\n session: session\n });\n setShowSuccess(true);\n } else {\n setShowFailedRegisterAlert(true);\n setDisableForm(\"\");\n return;\n }\n };\n\n const forwardToLogin = () => {\n history.push(DeepLinking.LOGIN_VIEW_PATH);\n };\n\n return (\n
\n setShowInputAlert(false)}\n dismissible\n >\n {inputErrorMessage}\n \n setShowFailedRegisterAlert(false)}\n dismissible\n >\n {failedRegistrationErrorMessage}\n \n
\n
\n\n

\n \n Sign Up\n \n

\n\n
\n \n setEmailInput(e.target.value)}\n />\n \n\n \n setPasswordInput(e.target.value)}\n />\n \n\n \n validateConfirmPass(e)}\n />\n \n * password does not match\n \n \n\n \n setPhoneNumberInput(e.target.value)}\n />\n \n
\n \n \n I have read and understand{\" \"}\n \n terms & conditions\n \n \n \n }\n type=\"checkbox\"\n id=\"terms_conditions_cb\"\n value={termsAndConditionsInput}\n checked={termsAndConditionsInput}\n onChange={e => setTermsAndConditionsInput(e.target.checked)}\n />\n
\n handleSubmit(e)}\n >\n Create Account{\" \"}\n {disableForm === \"\" ? (\n \n ) : (\n \n )}\n \n

\n Got an account already? \n \n Sign in\n \n

\n \n
\n\n
\n
\n \n \n You have been enrolled successfully. Have fun learning!\n \n forwardToLogin()}\n >\n Continue to Login \n \n
\n
\n \n );\n};\n\nexport default RegisterForm;\n","import React from \"react\";\nimport RegisterForm from \"../forms/RegisterForm\";\nimport Footer from \"./../footer/Footer\";\nimport \"./brochures.css\";\n\nconst SignUpBrochure = props => {\n const { query } = props;\n\n return (\n
\n
\n \n
\n\n
\n
\n );\n};\n\nexport default SignUpBrochure;\n","import React from \"react\";\nimport SignUpBrochure from \"./../../../widgets/brochure/SignUpBrochure\";\nimport \"./registerview.css\";\n\nconst RegisterView = (props) => {\n\n const {query} = props;\n\n return (\n
\n \n
\n );\n}\n\nexport default RegisterView;\n","export default class Recovery {\n\n constructor(password, token, signature){\n this.password = password;\n this.token = token;\n this.signature = signature;\n }\n\n getPassword() {\n return this.password;\n }\n\n setPassword(password){\n this.password = password;\n }\n\n getToken() {\n return this.token;\n }\n\n setToken(token){\n this.token = token;\n }\n\n getSignature() {\n return this.signature;\n }\n\n setSignature(signature){\n this.signature = signature;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, { useState, useContext } from \"react\";\nimport { Alert, Form, Button, Spinner } from \"react-bootstrap\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport { useHistory } from \"react-router-dom\";\nimport StringUtils from \"./../../../utils/StringUtils\";\nimport ResponseUtil from \"./../../../utils/ResponseUtil\";\nimport AuthService from \"./../../../services/AuthService\";\nimport Recovery from \"./../../../payloads/Recovery\";\nimport LocalStorageService from \"./../../../services/LocalStorageService\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport logo from \"./../../../images/logo_reverse.svg\";\n\nimport \"./recoveryform.css\";\n\nconst RecoveryForm = props => {\n const { query } = props;\n const history = useHistory();\n\n const [showWrongInputAlert, setShowWrongInputAlert] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [passwordInput, setPasswordInput] = useState(\"\");\n const [confirmPasswordInput, setConfirmPasswordInput] = useState(\"\");\n const [lockFields, setLockFields] = useState(\"\");\n const [issueInConfirmPass, setIssueInConfirmPass] = useState(false);\n\n const wrongInputErrorMessage = \"All fields are required. Please review\";\n const failedErrorMessage =\n \"It seems there was an error on our side. Please try again.\";\n\n const forwardToLogin = () => {\n clearWarnings();\n history.push(DeepLinking.LOGIN_VIEW_PATH);\n };\n\n const checkConfirmation = e => {\n setIssueInConfirmPass(false);\n setConfirmPasswordInput(e.target.value);\n const currentValue = e.target.value;\n if (currentValue !== passwordInput) {\n setIssueInConfirmPass(true);\n }\n };\n\n const clearWarnings = () => {\n setShowWrongInputAlert(false);\n setShowSuccess(false);\n setShowFailedAlert(false);\n };\n\n const validateForm = () => {\n return (\n !StringUtils.isEmpty(passwordInput) &&\n !StringUtils.isEmpty(confirmPasswordInput) &&\n passwordInput === confirmPasswordInput\n );\n };\n\n const handleSubmit = async e => {\n e.preventDefault();\n clearWarnings();\n if (validateForm()) {\n setLockFields(\"disabled\");\n let payload = new Recovery(passwordInput, query.token, query.signature);\n let response = await AuthService.recover(payload);\n if (ResponseUtil.isOK(response)) {\n const { user, library, session } = response.data;\n LocalStorageService.store({\n user: user,\n library: library,\n session: session\n });\n setShowSuccess(true);\n }\n } else {\n setShowWrongInputAlert(true);\n return;\n }\n };\n\n return (\n
\n setShowWrongInputAlert(false)}\n dismissible\n >\n {wrongInputErrorMessage}\n \n setShowFailedAlert(false)}\n dismissible\n >\n {failedErrorMessage}\n \n
\n
\n\n

\n \n Account Recovery\n \n

\n

Please enter your new password

\n
\n \n setPasswordInput(e.target.value)}\n />\n \n \n checkConfirmation(e)}\n />\n \n * password does not match\n \n \n
\n handleSubmit(e)}\n >\n {lockFields ? : \"\"}{\" \"}\n Save Information\n \n
\n\n
\n
\n \n \n Account updated successfully. Have fun learning!\n \n forwardToLogin()}\n >\n Continue to Login \n \n
\n
\n \n );\n};\n\nexport default RecoveryForm;\n","import React from \"react\";\nimport Footer from \"./../footer/Footer\";\nimport RecoveryForm from \"./../forms/RecoveryForm\";\nimport \"./brochures.css\";\n\nconst RecoveryBrochure = props => {\n const { query } = props;\n\n return (\n
\n
\n \n
\n\n
\n
\n );\n};\n\nexport default RecoveryBrochure;\n","import React from 'react';\nimport RecoveryBrochure from './../../../widgets/brochure/RecoveryBrochure';\nimport './recoveryview.css';\n\nconst RecoveryView = (props) => {\n\n const {query} = props;\n\n return ( \n
\n \n
\n );\n}\n \nexport default RecoveryView;","import React, { useState } from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport ShopIcon from './../icons/ShopIcon';\nimport StringUtils from \"./../../../utils/StringUtils\";\nimport \"./sidebarmenu.css\";\n\nconst SidebarMenuOption = props => {\n const { label, path, active = false, handler } = props;\n\n const activateOption = e => {\n handler(label);\n };\n\n const getIcon = () => {\n switch (label) {\n case \"dashboard\":\n return ;\n\n case \"administrators\":\n return ;\n\n case \"students\":\n return ;\n\n case \"instructors\":\n return ;\n\n case \"lectures\":\n return ;\n\n case \"schools\":\n return ;\n\n case \"courses\":\n return ;\n\n case \"library\":\n return ;\n\n case \"assessments\":\n return ;\n\n case \"reports\":\n return ;\n\n case \"grades\":\n return ;\n\n case \"units\":\n return ;\n\n case \"sections\":\n return ;\n\n case \"questions\":\n return ;\n\n case \"analytics\":\n return ;\n\n case \"account\":\n return ;\n\n case \"bookstore\":\n return ;\n\n case \"logout\":\n return ;\n\n case \"instructorview\":\n return ;\n }\n };\n\n const getLabel = () => {\n if (label === \"questions\") {\n return \"Question Bank\";\n }\n\n if(label === \"instructorview\"){\n return \"Back to Instructor View\";\n }\n\n return StringUtils.capitalize(label);\n };\n\n return (\n activateOption(e)}\n >\n {getIcon()} {getLabel()}{\" \"}\n {active ?
: \"\"}\n \n );\n};\n\nexport default SidebarMenuOption;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\n\nexport default {\n\n getAllFromRemote: async (allData) => {\n if (allData===undefined) {\n allData = true;\n }\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_SCHOOLS_ENDPOINT.replace(\":allData\", allData));\n if(response && response.status === 200) { \n const { schools } = response.data;\n return schools;\n } \n return [];\n },\n\n getAll: () => {\n return LocalStorageService.get(\"schools\") || [];\n },\n\n get: id => {\n return LocalStorageService.get(\"schools\").find(school => school._id === id);\n },\n\n getByIds: ids => {\n const schools = LocalStorageService.get(\"schools\");\n if (!schools) return schools;\n const assignedSchools = ids.map(id =>\n schools.find(school => school._id === id)\n );\n return assignedSchools;\n },\n\n create: async payload => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.createSchool());\n }\n\n try {\n let response = await new ApiService().post(\n ApiPath.CREATE_SCHOOL_ENDPOINT,\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `SchoolService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n update: async (id, payload) => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.updateSchool());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_SCHOOL_ENDPOINT.replace(\":id\", id),\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `SchoolService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n remove: async id => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.removeSchool());\n }\n try {\n let response = await new ApiService().delete(\n ApiPath.REMOVE_SCHOOL_ENDPOINT.replace(\":id\", id)\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `SchoolService | Error while attempting to remove response: ${error}`\n );\n return false;\n }\n }\n};\n","export default {\n formatVideoTime: durationInSeconds => {\n var _seconds = Math.round(durationInSeconds)\n var hours = Math.floor(_seconds / 3600);\n var minutes = Math.floor(_seconds / 60);\n var seconds = Math.floor(_seconds % 60);\n\n if (hours < 10) {\n hours = \"0\" + hours;\n }\n\n if (minutes < 10) {\n minutes = \"0\" + minutes;\n }\n\n if (seconds < 10) {\n seconds = \"0\" + seconds;\n }\n\n if(minutes > 59) {\n return hours + \":\" + (minutes - 60) + \":\" + seconds;\n } \n\n return minutes + \":\" + seconds;\n },\n\n getTimeLeft: durationInSeconds => {\n let hours = Math.floor(durationInSeconds / 3600);\n let minutes = Math.floor(durationInSeconds / 60);\n let seconds = Math.floor(durationInSeconds % 60);\n\n let timeLeft = \"\";\n if (hours > 0) {\n timeLeft += hours + \" hr \";\n }\n if (minutes > 0) {\n timeLeft += minutes + \" min \";\n }\n if (seconds > 0) {\n timeLeft += seconds + \" sec\";\n }\n\n return timeLeft;\n },\n\n getTrackTimeInMinutesAndSeconds: (timestamp) => {\n if(!timestamp) return {minutes: '00', seconds: '00'};\n const regex = new RegExp(\"((([0-5][0-9])|[0-9]):[0-9]{2,2})\");\n if(!regex.test(timestamp)) return {minutes: '00', seconds: '00'};\n\n if(timestamp.includes(':')){\n const parts = timestamp.split(':');\n if(!parts || parts.length !== 2) return {minutes: '00', seconds: '00'};\n return {minutes: parts[0], seconds: parts[1]}\n }\n return {minutes: timestamp, seconds: timestamp};\n },\n\n getTrackTimeInSeconds: (timestamp) => {\n if(!timestamp || timestamp === \"\") { return 0; }\n if(!timestamp.includes(\":\")) { return 0; }\n const parts = timestamp.split(':');\n if(!parts || parts.length !== 2) return 0;\n const _minutes = parts[0];\n const _seconds = parts[1];\n if(_minutes.length !== 2 || _seconds.length !== 2){ return 0;}\n const minutes = parseInt(_minutes);\n const seconds = parseInt(_seconds);\n\n return minutes*60 + seconds;\n }\n};\n","import SchoolService from \"./../services/SchoolService\";\nimport ClassService from \"./../services/ClassService\";\nimport VideoTimeUtils from \"./VideoTimeUtils\";\n\nexport default {\n getWeekForUnit: (unitId, units) => {\n return (\n units.findIndex(unit => {\n return unit === unitId;\n }) + 1\n );\n },\n\n getGradeAsPercent: decimalGrade => {\n return decimalGrade * 100;\n },\n\n getUserFullName: user => {\n return (\n (user.title ? user.title : \"\") +\n \" \" +\n user.firstName +\n \" \" +\n user.lastName\n );\n },\n\n getUserName: user => {\n return user.firstName;\n },\n\n getSchools: ids => {\n let schools = SchoolService.getByIds(ids);\n\n if (!schools) {\n const ss = SchoolService.getAllFromRemote();\n if (ss && ss.length > 0) {\n schools = ids.map(id =>\n ss.find(school => school._id === id)\n );\n }\n }\n return schools;\n },\n\n getUserSchoolsName: user => {\n const schoolIds = user.schools;\n if (!schoolIds || schoolIds.length === 0) {\n return \"LimeSpring\";\n }\n const schools = SchoolService.getByIds(schoolIds);\n if (!schools || schools.length === 0) {\n return \"LimeSpring\";\n }\n\n return schools\n .map(school => {\n return school ? school.title : \"LimeSpring\";\n })\n .reduce((prev, curr) => [prev, \", \", curr]);\n },\n\n getClassName: id => {\n const _class = ClassService.get(id);\n if (!_class) { return \"-\"; }\n return _class.title;\n },\n\n getReportStatus: status => {\n if (status === \"IN_PROGRESS\") {\n return \"In Progress\";\n } else if(status === \"NOT_STARTED\"){\n return \"Not Started\";\n }\n },\n\n getMarkerAsTrack: marker => {\n if(!marker) return;\n let text = marker.assessment && marker.assessment !== \"\" ? \"Open Quiz\" : \"Open Multimedia Example\";\n let assetType = marker.assessment && marker.assessment !== \"\" ? \"QUIZ\" : \"MULTIMEDIA\";\n let targetId = marker.assessment && marker.assessment !== \"\" ? marker.assessment : marker.asset;\n return {_id: marker._id, type:'PROMPT_ASSET', assetType: assetType, asset: targetId, content: text, timestamp: VideoTimeUtils.formatVideoTime(marker.cuePoint)};\n },\n\n getDecoratedTranscriptTracks: tracks => {\n if(!tracks || tracks.length === 0){ return []; }\n let content =[];\n tracks.forEach(t => {\n if(t.type === 'PLAIN'){ \n content.push(`${t.content}`);\n }else if(t.type === 'PARAGRAPH'){\n content.push(`

${t.content}

`);\n }else if(t.type === 'SECTION'){\n content.push(`
${t.content}
`);\n } else if(t.type === 'BULLET_LIST'){\n content.push(`
  • ${t.content}
`);\n } else if(t.type === 'SPACER'){\n content.push(`
`);\n } else if(t.type === 'CALLOUT'){\n content.push(`
${t.content}
`);\n } else if(t.type === 'PROMPT_ASSET'){\n content.push(`
${t.content}
`);\n }\n });\n\n return content;\n },\n\n getDecoratedTranscriptTracksClient: tracks => {\n if(!tracks || tracks.length === 0){ return []; }\n let content =[];\n tracks.forEach(t => {\n if(t.type === 'PLAIN'){ \n content.push(`${t.content}`);\n }else if(t.type === 'PARAGRAPH'){\n content.push(`

${t.content}

`);\n }else if(t.type === 'SECTION'){\n content.push(`
${t.content}
`);\n } else if(t.type === 'BULLET_LIST'){\n content.push(`
  • ${t.content}
`);\n } else if(t.type === 'SPACER'){\n content.push(`
`);\n } else if(t.type === 'CALLOUT'){\n content.push(`
${t.content}
`);\n } else if(t.type === 'PROMPT_ASSET'){\n content.push(`
${t.content}
`);\n }\n });\n\n return content;\n }\n};\n","import React, { useState, useEffect } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport SidebarMenuOption from \"./SidebarMenuOption\";\nimport ProfileService from \"./../../../services/ProfileService\";\nimport LocalStorageService from \"./../../../services/LocalStorageService\";\nimport RoleUtils from \"./../../../utils/RoleUtils\";\nimport SidebarMenuUtils from \"./../../../utils/SidebarMenuUtils\";\nimport LimespringUtils from \"./../../../utils/LimespringUtils\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\n\nimport \"./sidebarmenu.css\";\n\nconst SidebarMenu = props => {\n\n const { redirect, panel, showInstructorMode=false, showStudentFromAdminInstructor = false } = props;\n\n const history = useHistory();\n\n const [version, setVersion] = useState(\"2.1.1\");\n const [currentTarget, setCurrentTarget] = useState(panel);\n const location = useLocation();\n\n useEffect(() => {\n if (history.location.state && history.location.state.currentTarget) {\n setCurrentTarget(history.location.state.currentTarget);\n }\n }, [location]);\n\n const activateMenuOption = target => {\n setCurrentTarget(target);\n history.push({\n pathname: history.location.pathname,\n state: { currentTarget: target }\n });\n redirect(target);\n };\n\n const renderUserInfo = () => {\n const profile = ProfileService.get();\n return
\n
\n {LimespringUtils.getUserFullName(profile)}\n {RoleUtils.getRole(profile)}@{LimespringUtils.getUserSchoolsName(profile)}\n
\n }\n\n const redirectToDashboard = () => {\n history.push({\n pathname: DeepLinking.MANAGEMENT.DASHBOARD_VIEW_PATH\n });\n }\n\n const handleInstructorViewClick = () => {\n const userAdmin = LocalStorageService.get('userAdmin');\n const sessionAdmin = LocalStorageService.get('sessionAdmin');\n const logAdmin = LocalStorageService.get('logAdmin');\n if (userAdmin && sessionAdmin) {\n LocalStorageService.store({ user: userAdmin, session: sessionAdmin, logs: logAdmin });\n localStorage.removeItem(\"userAdmin\");\n localStorage.removeItem(\"sessionAdmin\");\n localStorage.removeItem(\"library\");\n localStorage.removeItem(\"units\");\n }\n\n history.push(DeepLinking.MANAGEMENT.DASHBOARD_VIEW_PATH);\n };\n\n const renderMenuItems = () => {\n if(showInstructorMode && !showStudentFromAdminInstructor) {\n return redirectToDashboard()}\n />\n };\n\n const profile = ProfileService.get();\n let menuItems = [];\n\n if(profile) {\n const role = RoleUtils.getRole(profile);\n if(role === 'SuperAdmin') {\n menuItems = SidebarMenuUtils.SUPERADMIN;\n } else if(role === 'Admin'){\n menuItems = SidebarMenuUtils.ADMIN;\n } else if(role === 'Instructor'){\n menuItems = SidebarMenuUtils.INSTRUCTOR;\n } else if(role === 'Student') {\n menuItems = SidebarMenuUtils.STUDENT;\n }\n }\n\n if (showStudentFromAdminInstructor) {\n return [\n ,\n ...menuItems.map((menuItem, index) => (\n activateMenuOption(target)}\n />\n ))\n ];\n }\n \n return menuItems.map((menuItem, index) => {\n return (\n activateMenuOption(target)}\n />\n );\n })\n }\n\n return (\n
\n {renderUserInfo()}\n {renderMenuItems()}\n
\n Version {version}\n
\n
\n );\n};\n\nexport default SidebarMenu;\n","import React from \"react\";\nimport {useHistory} from 'react-router-dom';\nimport {Breadcrumb} from 'react-bootstrap';\nimport \"./breadcrumb.css\";\n\nconst LSBreadcrumb = props => {\n\n const { paths } = props;\n\n const history = useHistory();\n\n const goto = (href) => {\n if(href === '#') return;\n history.push(href);\n }\n\n const renderItems = () => {\n if(!paths || paths.length === 0) { return <>}\n return paths.map((path, index) => {\n return goto(path.href)} className={path.href === '#' ? '' : 'breadcrumb-link'}>{path.text}\n })\n }\n\n return (\n
\n \n {renderItems()}\n \n
\n );\n};\n\nexport default LSBreadcrumb;\n","export default {\n\n getKeysAsArray: (obj) => {\n return Object.keys(obj);\n },\n\n isEmpty: (obj) => {\n return obj && Object.keys(obj).length === 0 && obj.constructor === Object\n }\n}","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\nimport ObjectUtil from './../utils/ObjectUtils';\n\nexport default {\n\n refresh: async() => {\n try {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.refreshCache()); } \n\n let response = await new ApiService().get(ApiPath.REFRESH_CACHE);\n if (ResponseUtil.isOK(response)) {\n const { library } = response.data;\n \n LocalStorageService.store(library);\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CacheService refresh() | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n sync: async() => {\n try {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.syncCache()); } \n\n let response = await new ApiService().get(ApiPath.SYNC_CACHE);\n if (ResponseUtil.isOK(response)) {\n const { library } = response.data;\n \n LocalStorageService.store(library);\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CacheService sync() | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n syncLogin: async () => {\n\n try {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.reloadCache()); } \n\n let response = await new ApiService().get(ApiPath.LOGIN_CACHE);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CacheService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n reloadData: async (target, parentId) => {\n\n try {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.reloadCache()); } \n\n let response = await new ApiService().get(ApiPath.RELOAD_CACHE.replace(':target', target).replace(':id', parentId));\n if (ResponseUtil.isOK(response)) {\n const targetData = response.data.data;\n const props = ObjectUtil.getKeysAsArray(targetData);\n props.forEach(p => {\n const data = {};\n data[p] = targetData[p];\n LocalStorageService.store(data);\n });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CacheService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n reload: async (target) => {\n \n let path = \"\";\n \n switch(target) {\n case 'schools':\n path = ApiPath.GET_SCHOOLS_ENDPOINT;\n break;\n \n case 'instructors':\n path = ApiPath.GET_INSTRUCTORS_ENDPOINT;\n break;\n\n case 'students':\n path = ApiPath.GET_STUDENTS_ENDPOINT;\n break;\n\n case 'classes':\n path = ApiPath.GET_CLASSES_ENDPOINT;\n break;\n }\n\n try {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.reloadCache()); } \n\n let response = await new ApiService().get(path);\n if (ResponseUtil.isOK(response)) {\n const { targetData } = response.data;\n LocalStorageService.store({ target: targetData });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`CacheService | Error while attempting to get response: ${error}`);\n return false;\n }\n }\n};\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport CacheService from \"./CacheService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\n\nexport default {\n\n getAllFromRemote: async () => {\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_STUDENTS_ENDPOINT);\n if(response && response.status === 200) { \n const { students } = response.data;\n return students;\n } \n return [];\n },\n\n getAll: () => {\n return LocalStorageService.get(\"students\") || [];\n },\n\n get: id => {\n return LocalStorageService.get(\"students\").find(\n student => student._id === id\n );\n },\n\n getSomeFromRemote: async (ids) => {\n try { \n let response = await new ApiService().get(ApiPath.GET_STUDENTS_BY_IDS_ENDPOINT.replace(':ids', ids));\n if (ResponseUtil.isOK(response)) {\n const { students } = response.data;\n return students;\n }\n } catch (error) {\n console.error(`StudentService | Error while attempting to get response: ${error}`);\n }\n return [];\n },\n\n getFromRemote: async(id) => {\n try { \n let response = await new ApiService().get(ApiPath.GET_STUDENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { student } = response.data;\n return student;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`StudentService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n getByIds: ids => {\n const students = LocalStorageService.get(\"students\");\n const assignedStudents = students.filter(student =>\n ids.find(id => id === student._id)\n );\n return assignedStudents;\n },\n\n getSchoolStudents: schoolId => {\n const allStudents = LocalStorageService.get(\"students\");\n const schoolStudents = allStudents.filter(student => {\n return student.schools.includes(schoolId);\n });\n\n return schoolStudents || [];\n },\n\n create: async payload => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.createStudent());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.CREATE_STUDENT_ENDPOINT,\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `StudentService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n regenerateCredentials: async (id, payload) => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.updatePassword());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_PASSWORD_ENDPOINT.replace(\":id\", id),\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `StudentService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n sendInviteToStudent: async (id) => {\n if (Config.mockAPI) {\n return true;\n }\n try {\n let response = await new ApiService().post(\n ApiPath.INVITE_STUDENT_ENDPOINT.replace(\":id\", id)\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `StudentService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n update: async (id, payload) => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.updateStudent());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_STUDENT_ENDPOINT.replace(\":id\", id),\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `StudentService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n updateByStudentSettings: async (id, payload) => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.updateStudent());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_STUDENT_SETTINGS_ENDPOINT.replace(\":id\", id),\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `StudentService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n batch: async (payload) => {\n try { \n let response = await new ApiService().post(ApiPath.BATCH_STUDENTS_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return {\n students: response.data.students,\n status: true\n }\n } else {\n return {\n students: response.data.students,\n status: true\n }\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return {\n students: null,\n status: true\n }\n }\n },\n\n remove: async id => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.removeStudent());\n }\n try {\n let response = await new ApiService().delete(\n ApiPath.REMOVE_STUDENT_ENDPOINT.replace(\":id\", id)\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `StudentService | Error while attempting to remove student. response: ${error}`\n );\n return false;\n }\n }\n};\n","export default __webpack_public_path__ + \"static/media/check.f492f50f.svg\";","import React, { useState, useEffect } from \"react\";\nimport Form from \"react-bootstrap/Form\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport AuthService from \"../../../services/AuthService\";\nimport Alert from \"react-bootstrap/Alert\";\nimport checkIcon from \"./../../../images/check.svg\";\n\nimport \"./passwordchangemodal.css\";\n\nconst PasswordChangeModal = props => {\n\n const { show, onHide, profile } = props;\n\n const [step, setStep] = useState(0);\n const [currentPassword, setCurrentPassword] = useState(\"\");\n const [passwordInput, setPasswordInput] = useState(\"\");\n const [viewPassword, setViewPassword] = useState(false);\n const [issueInConfirmPass, setIssueInConfirmPass] = useState(false);\n const [confirmPasswordInput, setConfirmPasswordInput] = useState(\"\");\n const [disabled, setDisabled] = useState(true);\n const [showInputAlert, setShowInputAlert] = useState(false);\n const [showErrorAlert, setShowErrorAlert] = useState(false);\n\n const inputErrorMessage = \"All fields are required. Please review\";\n const apiErrorMessage = \"Unable to save new password. Please try again.\";\n\n useEffect(() => {\n if(step === 1) {\n setTimeout(() => {\n onHide();\n }, 1000);\n }\n }, [step]);\n\n useEffect(() => {\n reset();\n }, [show]);\n\n const reset = () => {\n setStep(0);\n setCurrentPassword('');\n setPasswordInput('');\n setViewPassword(false);\n setIssueInConfirmPass(false);\n setConfirmPasswordInput('');\n setDisabled(true);\n setShowInputAlert(false);\n setShowErrorAlert(false);\n }\n\n const showPassword = () => {\n if (viewPassword === false) {\n setViewPassword(true);\n } else if (viewPassword === true) {\n setViewPassword(false);\n }\n };\n\n const validateConfirmPass = e => {\n setIssueInConfirmPass(false);\n setConfirmPasswordInput(e.target.value);\n const currentValue = e.target.value;\n if (currentValue !== passwordInput) {\n setIssueInConfirmPass(true);\n setDisabled(true);\n } else {\n setDisabled(false);\n }\n };\n\n const savePassword = async () => {\n if (\n passwordInput !== confirmPasswordInput ||\n !passwordInput || passwordInput === \"\"\n ) {\n setShowInputAlert(true);\n } else {\n setShowInputAlert(false);\n const response = await AuthService.resetPassword({\n email: profile.email,\n currentPassword: currentPassword,\n password: confirmPasswordInput\n });\n\n if(response){\n setStep(1);\n }else{\n setShowErrorAlert(true);\n }\n }\n };\n\n return (\n \n setShowInputAlert(false)}\n dismissible>\n {inputErrorMessage}\n \n\n setShowErrorAlert(false)}\n dismissible>\n {apiErrorMessage}\n \n\n \n \n
\n
\n \n \n Current password:\n \n setCurrentPassword(e.target.value)}\n />\n \n \n \n New Password:\n \n
\n setPasswordInput(e.target.value)}\n />\n {viewPassword === false ? (\n showPassword()}\n />\n ) : (\n showPassword()}\n />\n )}\n
\n
\n \n \n Confirm password:\n \n
\n validateConfirmPass(e)}\n />\n {viewPassword === false ? (\n showPassword()}\n />\n ) : (\n showPassword()}\n />\n )}\n
\n \n * password does not match\n \n
\n
\n
\n\n
\n \n
\n
\n \n
\n savePassword()}\n id=\"saveChanges\">\n Save changes\n \n
\n
\n \n );\n};\n\nexport default PasswordChangeModal;\n","export default class Student {\n\n constructor(firstName, lastName, email, mobile, title, school, classes, conditions, cloud9Access){\n this.firstName = firstName;\n this.lastName = lastName;\n this.email = email;\n this.mobile = mobile;\n this.title = title;\n this.school = school;\n this.classes = classes;\n this.role = \"Student\";\n this.conditions = conditions || [];\n this.cloud9Access = cloud9Access;\n }\n\n getFirstName() {\n return this.firstName;\n }\n\n setFirstName(firstName){\n this.firstName = firstName;\n }\n\n getLastName() {\n return this.lastName;\n }\n\n setLastName(lastName){\n this.lastName = lastName;\n }\n\n getEmail() {\n return this.email;\n }\n\n setEmail(email){\n this.email = email;\n }\n\n getMobile() {\n return this.mobile;\n }\n\n setMobile(mobile){\n this.mobile = mobile;\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getSchool() {\n return this.school;\n }\n\n setSchool(school){\n this.school = school;\n }\n\n getRole() {\n return this.role;\n }\n\n getClasses() {\n return this.classes;\n }\n\n setClasses(classes) {\n this.classes = classes;\n }\n\n getConditions() {\n return this.conditions;\n }\n\n setConditions(conditions) {\n this.conditions = conditions;\n }\n\n getCloud9Access(){\n return this.cloud9Access;\n }\n\n setCloud9Access(cloud9Access) {\n this.cloud9Access = cloud9Access;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, { useState, useEffect } from \"react\";\nimport { Form, Button, Alert, Spinner } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport ProfileService from \"../../../services/ProfileService\";\nimport StudentService from \"../../../services/StudentService\";\nimport PasswordChangeModal from \"./../modals/PasswordChangeModal\";\nimport Student from \"./../../../payloads/Student\";\nimport \"./accountsettingsform.css\";\n\nconst AccountSettingsForm = (props) => {\n const [showAlert, setShowAlert] = useState(false);\n const [message, setMessage] = useState({ text: \"\", type: \"\" });\n const [userAvatar, setUserAvatar] = useState(null);\n const [profile, setProfile] = useState(null);\n const [modalState, setModalState] = useState(false);\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [userPhoneNumber, setUserPhoneNumber] = useState(\"\");\n const [student, setStudent] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const history = useHistory();\n\n useEffect(() => {\n const fetchStudent = async () => {\n setLoading(true);\n try {\n const profileData = ProfileService.get();\n const studentData = await StudentService.getFromRemote(profileData.id || profileData._id);\n\n setProfile(profileData);\n setStudent(studentData);\n setFirstName(studentData?.firstName || \"\");\n setLastName(studentData?.lastName || \"\");\n setUserPhoneNumber(studentData?.mobile || \"N/A\");\n setUserAvatar(studentData?.avatar || null);\n } catch (error) {\n console.error(`Error while attempting to get student: ${error}`);\n } finally {\n setLoading(false);\n }\n };\n\n fetchStudent();\n }, []);\n\n const handleUpdateProfile = async () => {\n if (!firstName.trim() || !lastName.trim()) {\n setMessage({ text: \"All fields are required.\", type: \"danger\" });\n setShowAlert(true);\n return;\n }\n\n if (!student) {\n setMessage({ text: \"No student data available.\", type: \"danger\" });\n setShowAlert(true);\n return;\n }\n\n setLoading(true);\n try {\n let payload = new Student(\n firstName,\n lastName,\n student.email,\n userPhoneNumber,\n student.title,\n student.schools ? student.schools[0] : \"\",\n [],\n student.conditions,\n student.aws ? true : false\n );\n\n let success = await StudentService.updateByStudentSettings(student.id || student._id, payload);\n\n if (success) {\n setMessage({ text: \"Student updated successfully.\", type: \"success\" });\n } else {\n setMessage({ text: \"Error updating student.\", type: \"danger\" });\n }\n setShowAlert(true);\n } catch (error) {\n setMessage({ text: \"Unexpected error occurred.\", type: \"danger\" });\n setShowAlert(true);\n console.error(`Error while attempting to update student: ${error}`);\n } finally {\n setLoading(false);\n }\n };\n\n const closeAlert = () => {\n setShowAlert(false);\n setMessage({ text: \"\", type: \"\" });\n };\n\n const handleUserAvatar = () => {\n document.getElementById(\"inputFile\").click();\n };\n\n const handleNewFile = (e) => {\n const file = e.target.files[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (event) => {\n setUserAvatar(event.target.result);\n };\n reader.readAsDataURL(file);\n }\n };\n\n const settingsRender = () => {\n return profile ? (\n
\n {showAlert && (\n \n {message.text}\n \n )}\n\n {/* ✅ Avatar Restored */}\n
\n \n \n
\n \n

\n {profile.email}
\n {profile.schools ? profile.schools[0] : \"\"}\n

\n
\n\n
\n \n First Name:\n setFirstName(e.target.value)} />\n \n\n \n Last Name:\n setLastName(e.target.value)} />\n \n\n \n Phone number:\n setUserPhoneNumber(e.target.value)} />\n \n\n {/* ✅ Password Field Restored */}\n \n Password:\n
\n \n \n
\n
\n\n \n
\n\n setModalState(false)} />\n \n ) : (\n \n );\n };\n\n return profile ? settingsRender() : ;\n};\n\nexport default AccountSettingsForm;\n","import React, {useState, useEffect} from 'react';\nimport {useHistory} from 'react-router-dom';\nimport Header from \"../../../widgets/header/Header\";\nimport SidebarMenu from \"./../../../widgets/sidebar/SidebarMenu\";\nimport LSBreadcrumb from \"./../../../widgets/breadcrumb/LSBreadcrumb\";\nimport AccountSettingsForm from \"../../../widgets/forms/AccountSettingsForm\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport ProfileService from '../../../../services/ProfileService';\n\nimport \"./settingsview.css\";\n\nconst SettingsView = () => {\n\n const history = useHistory();\n const [isStudent, setIsStudent] = useState(false);\n\n\n useEffect(() => {\n const _profile = ProfileService.get();\n \n if(_profile.role === 'Student') {\n setIsStudent(true);\n } else {\n setIsStudent(false);\n }\n}, []);\n\n\n const loadPage = target => {\n if (target === \"grades\") {\n history.push(DeepLinking.STUDENT.GRADEBOOK_VIEW_PATH);\n }else if (target === \"dashboard\") {\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n } else if(target === \"bookstore\") {\n //history.push(DeepLinking.BOOKSTORE_VIEW_PATH);\n } else if(target === \"logout\") {\n history.push(DeepLinking.LOGOUT_VIEW_PATH);\n }\n };\n\n return (\n
\n \n
\n
\n loadPage(target)}/>\n
\n
\n {isStudent && }\n {!isStudent && }\n

My Account

\n \n
\n
\n
\n );\n};\n\nexport default SettingsView;\n","import React from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport { useHistory } from \"react-router-dom\";\nimport logo from \"./../../../../images/logo.svg\";\nimport \"./notfoundview.css\";\n\nconst NotFoundView = () => {\n const history = useHistory();\n\n const onClickHandler = e => {\n history.goBack();\n };\n\n return (\n
\n
\n
\n \"logo\"\n
\n

\n We’re sorry, looks like the page you’re looking for is not\n available right now. We’ll try to fix this asap!\n

\n
\n \n
\n
\n
\n );\n};\n\nexport default NotFoundView;\n","export default class ForgotPass {\n\n constructor(email){\n this.email = email;\n }\n\n getEmail() {\n return this.email;\n }\n\n setEmail(email){\n this.email = email;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, { useState } from \"react\";\nimport { Button, Form, Alert, Spinner } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"./.././../../utils/DeepLinking\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport { Link } from \"react-router-dom\";\nimport logo from \"./../../../images/logo_reverse.svg\";\nimport StringUtils from \"../../../utils/StringUtils\";\nimport AuthService from \"./../../../services/AuthService\";\nimport \"./forgotform.css\";\nimport ForgotPass from \"../../../payloads/ForgotPass\";\nimport ResponseUtil from \"./../../../utils/ResponseUtil\";\n\nconst RegisterForm = () => {\n const history = useHistory();\n\n const [showWrongInputAlert, setShowWrongInputAlert] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [emailInput, setEmailInput] = useState(\"\");\n const [lockFields, setLockFields] = useState(\"\");\n\n const wrongInputErrorMessage = \"Email is required. Please review\";\n const failedErrorMessage =\n \"It seems there was an error on our side. Please try again.\";\n\n const backToLogin = () => {\n clearWarnings();\n history.push(DeepLinking.LOGIN_VIEW_PATH);\n };\n\n const validateForm = () => {\n return !StringUtils.isEmpty(emailInput);\n };\n\n const clearWarnings = () => {\n setShowWrongInputAlert(false);\n setShowSuccess(false);\n setShowFailedAlert(false);\n };\n\n const handleSubmit = async e => {\n e.preventDefault();\n setLockFields(\"disabled\");\n clearWarnings();\n if (validateForm()) {\n const payload = new ForgotPass(emailInput);\n const response = await AuthService.forgot(payload);\n setLockFields(\"\");\n if (ResponseUtil.isOK(response)) {\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setShowWrongInputAlert(true);\n setLockFields(\"\");\n return false;\n }\n };\n\n return (\n
\n setShowWrongInputAlert(false)}\n dismissible\n >\n {wrongInputErrorMessage}\n \n setShowFailedAlert(false)}\n dismissible\n >\n {failedErrorMessage}\n \n
\n
\n\n

\n \n Forgot your password?\n \n

\n

\n Enter the email address you used when you joined and we’ll send\n you instructions to reset your password.\n

\n
\n \n setEmailInput(e.target.value)}\n />\n \n handleSubmit(e)}\n >\n {lockFields ? : \"\"}{\" \"}\n Reset Password\n \n
\n Not a member? \n \n Sign up\n \n
\n \n
\n
\n
\n \n \n Email sent successfully!. We've sent you instructions to\n restore your account.\n \n backToLogin()}\n >\n Back to login\n \n
\n
\n \n );\n};\n\nexport default RegisterForm;\n","import React from \"react\";\nimport ForgotForm from \"../forms/ForgotForm\";\nimport Footer from \"./../footer/Footer\";\nimport \"./brochures.css\";\n\nconst ForgotBrochure = () => {\n return (\n
\n
\n \n
\n\n
\n
\n );\n};\n\nexport default ForgotBrochure;\n","import React from \"react\";\nimport ForgotBrochure from \"../../../widgets/brochure/ForgotBrochure\";\nimport \"./forgotview.css\";\n\nconst ForgotView = () => {\n\n return (\n
\n \n
);\n};\n\nexport default ForgotView;\n","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport \"./planview.css\";\n\nconst PlanWidget = props => {\n const { id, type, track, features, price, current = false } = props;\n\n const history = useHistory();\n\n const populateFeatures = () => {\n return features.map((feature, index) => {\n return {feature.textToDisplay};\n });\n };\n const planUpgradeHandler = () => {\n history.push({\n pathname: DeepLinking.PLAN_PAYMENT_VIEW_PATH,\n state: {\n plan: id\n }\n });\n };\n return (\n \n
\n

{type}

\n
\n
\n

\n {price === \"0\" ? \"FREE\" : \"$\" + price}\n

\n {track}\n {populateFeatures()}\n
\n
\n planUpgradeHandler()}\n >\n {current ? \"Current plan\" : \"Choose plan\"}\n \n
\n \n );\n};\n\nexport default PlanWidget;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\n\nexport default {\n get: async id => {\n const plans = (await MockService.getSubscriptionPlans()).data\n .subscriptionPlansData.plans;\n return plans.find(plan => plan._id === id);\n },\n getAll: async () => {\n try {\n if (Config.mockAPI) {\n return (await MockService.getSubscriptionPlans()).data\n .subscriptionPlansData.plans;\n }\n\n //TODO get from server\n return (await MockService.getSubscriptionPlans()).data\n .subscriptionPlansData.plans;\n\n let response = await new ApiService().get(\n ApiPath.GET_SUBSCRIPTION_PLANS_ENDPOINT\n );\n if (ResponseUtil.isOK(response)) {\n const { plans } = response.data;\n return { plans: plans };\n } else {\n return { plans: [] };\n }\n } catch (error) {\n console.error(\n `SubscriptionService getAll() | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n create: async payload => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.createSubscriptionPlan());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.CREATE_SUBSCRIPTION_PLAN_ENDPOINT,\n payload\n );\n\n if (ResponseUtil.isOK(response)) {\n const { plans } = response.data;\n LocalStorageService.store({ plans: plans });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `SubscriptionService create | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n update: async (id, payload) => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.updateSubscriptionPlan());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_SUBSCRIPTION_PLAN_ENDPOINT.replace(\":id\", id),\n payload\n );\n\n if (ResponseUtil.isOK(response)) {\n const { plans } = response.data;\n LocalStorageService.store({ plans: plans });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `SubscriptionService update | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n remove: async id => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.removeSubscriptionPlan());\n }\n try {\n let response = await new ApiService().delete(\n ApiPath.REMOVE_SUBSCRIPTION_PLAN_ENDPOINT.replace(\":id\", id)\n );\n\n if (ResponseUtil.isOK(response)) {\n const { plans } = response.data;\n LocalStorageService.store({ plans: plans });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `SubscriptionService remove | Error while attempting to remove subscription. response: ${error}`\n );\n return false;\n }\n }\n};\n","import React, { useState, useEffect } from \"react\";\nimport Header from \"../../../widgets/header/Header\";\nimport PlanWidget from \"./PlanWidget\";\nimport SubscriptionService from \"../../../../services/SubscriptionService\";\nimport \"./planview.css\";\n\nconst PlanView = () => {\n const [plans, setPlans] = useState([]);\n\n useEffect(() => {\n const getPlans = async () => {\n setPlans(await SubscriptionService.getAll());\n };\n getPlans();\n }, []);\n const renderPlans = () => {\n return plans.map(plan => {\n return (\n \n );\n });\n };\n\n const getPlanType = category => {\n switch (category) {\n case \"FREE_SUBSCRIPTION\":\n return \"basic\";\n case \"STANDARD_SUBSCRIPTION\":\n return \"standard\";\n case \"PREMIUM_SUBSCRIPTION\":\n return \"premium\";\n }\n };\n return (\n
\n \n
\n

Unlock your fullest teaching potential by upgrading your plan

\n
\n {plans && plans.length > 0 ? renderPlans() : \"\"}\n
\n
\n
\n );\n};\n\nexport default PlanView;\n","import React, { useState, useEffect } from \"react\";\nimport Header from \"../../../widgets/header/Header\";\nimport Breadcrumb from \"react-bootstrap/Breadcrumb\";\nimport Button from \"react-bootstrap/Button\";\nimport SubscriptionService from \"../../../../services/SubscriptionService\";\nimport ProfileService from \"../../../../services/ProfileService\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\n\nconst PlanConfirmationView = props => {\n const { planId } = props;\n const history = useHistory();\n\n const [profile, setProfile] = useState(null);\n const [plan, setPlan] = useState(null);\n\n useEffect(() => {\n const getPlan = async () => {\n setPlan(await SubscriptionService.get(planId));\n setProfile(ProfileService.get());\n };\n getPlan();\n }, []);\n\n const paymentCompleteHandler = () => {\n history.push({\n pathname: DeepLinking.MANAGEMENT.DASHBOARD_VIEW_PATH\n });\n };\n\n const renderPaymentConfirmation = () => {\n return (\n
\n
\n

Congrats on upgrading your account!

\n

\n You now have the {plan.name}{\" \"}\n plan\n

\n paymentCompleteHandler()}\n >\n Go to dashboard\n \n

Thanks

\n

\n We’ve sent you a confirmation email to{\" \"}\n {profile ? profile.email : \"\"} with your invoice.\n

\n
\n );\n };\n\n return (\n
\n \n
\n \n Select plan\n Check out\n \n Confirmation\n \n \n
\n {plan ? renderPaymentConfirmation() : \"\"}\n
\n
\n
\n );\n};\n\nexport default PlanConfirmationView;\n","import React, { useState, useEffect } from \"react\";\nimport \"./paymentview.css\";\n\nconst PaymentWidget = props => {\n const { type, name, track, features, price } = props;\n const populateFeatures = () => {\n return features.map((feature, index) => {\n return {feature.textToDisplay};\n });\n };\n return (\n
\n
\n
Chosen plan
\n
\n
\n
{name}
\n
\n

${price}

\n {track}\n
\n
{populateFeatures()}
\n
\n
\n Total\n ${price}\n
\n
\n );\n};\n\nexport default PaymentWidget;\n","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./paymentview.css\";\n\nconst PaymentMethodsWidget = props => {\n const { type, track, features, price, current = false } = props;\n\n return (\n
\n
\n Accepted payment methods\n
\n
\n
\n
\n
\n );\n};\n\nexport default PaymentMethodsWidget;\n","import React, { useState, useEffect } from \"react\";\nimport Header from \"../../../widgets/header/Header\";\nimport { Button } from \"react-bootstrap\";\nimport PaymentWidget from \"../payment/PaymentWidget\";\nimport PaymentMethodsWidget from \"../payment/PaymentMethodsWidget\";\nimport SubscriptionService from \"./../../../../services/SubscriptionService\";\nimport Breadcrumb from \"react-bootstrap/Breadcrumb\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport \"./paymentview.css\";\n\nconst PaymentView = props => {\n const { planId } = props;\n\n const history = useHistory();\n\n const [plan, setPlan] = useState(null);\n\n useEffect(() => {\n const getPlan = async () => {\n setPlan(await SubscriptionService.get(planId));\n };\n getPlan();\n }, []);\n\n const getPlanType = category => {\n switch (category) {\n case \"FREE_SUBSCRIPTION\":\n return \"basic\";\n case \"STANDARD_SUBSCRIPTION\":\n return \"standard\";\n case \"PREMIUM_SUBSCRIPTION\":\n return \"premium\";\n }\n };\n const paidConfirmationPlan = () => {\n history.push({\n pathname: DeepLinking.PLAN_CONFIRMATION_VIEW_PATH,\n state: {\n plan: plan._id\n }\n });\n };\n return (\n
\n \n
\n \n Select plan\n \n Check out\n \n Confirmation\n \n
\n {plan ? (\n \n ) : (\n \"\"\n )}\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default PaymentView;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\n\nexport default {\n get: async () => {\n return await MockService.getBookstore();\n },\n\n getById: async id => {\n const bookstore = await MockService.getBookstore();\n\n return bookstore.courses.find(b => b._id === id);\n }\n};\n","export default {\n toFixed2NoRound: (n) => {\n var result = n.toFixed(2);\n return Number(result <= n ? result : (result - Math.pow(0.1,2)).toFixed(2));\n },\n\n roundToDecimalPlaces: (value, places) => {\n const multiplier = Math.pow(10, places);\n return (Math.round(value * multiplier) / multiplier);\n },\n\n isNumber: (value) => {\n if(!value) return false;\n return typeof(value) == 'number' && Number.isFinite(value);\n },\n};\n ","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\nimport NumberUtils from \"../utils/NumberUtils\";\n\nexport default {\n\n get: () => {\n return LocalStorageService.get('cart') || {};\n },\n\n create: async () => {\n if(Config.mockAPI){\n const cart = await MockService.createCart();\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n }\n\n try { \n let response = await new ApiService().post(ApiPath.CREATE_CART_ENDPOINT, {});\n if (ResponseUtil.isOK(response)) {\n const { cart } = response.data;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n } else {\n return null;\n }\n } catch (error) {\n console.error(`CartService | Error while attempting to get response: ${error}`);\n return null;\n }\n\n },\n\n addItem: async (item) => {\n if(Config.mockAPI){\n await MockService.addItemToCart();\n let cart = LocalStorageService.get('cart');\n if(!cart) { return null; }\n cart.items.push(item);\n const itemprices = cart.items.map(ci => parseInt(ci.price));\n cart.subtotal = itemprices.reduce((a, b) => a + b, 0);\n cart.total = cart.subtotal + cart.taxes - cart.discount;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n }\n\n try {\n let cart = LocalStorageService.get('cart'); \n if(!cart) { throw new Error('Cart not found. Please create a cart.') }\n cart.items.push(item);\n let response = await new ApiService().post(ApiPath.UPDATE_CART_ENDPOINT, cart);\n if (ResponseUtil.isOK(response)) {\n const { cart } = response.data;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n } else {\n return null;\n }\n } catch (error) {\n console.error(`CartService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n removeItem: async (id) => {\n if(Config.mockAPI){\n await MockService.removeItemFromCart();\n let cart = LocalStorageService.get('cart');\n cart.items = cart.items.filter(ci => ci._id !== id);\n const itemprices = cart.items.map(ci => parseInt(ci.price));\n cart.subtotal = itemprices.reduce((a, b) => a + b, 0);\n cart.total = cart.subtotal + cart.taxes - cart.discount;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n }\n\n try {\n let cart = LocalStorageService.get('cart'); \n if(!cart || !cart.items || cart.items.length === 0) { throw new Error('Cart items not found. Please add to cart.') }\n cart.items = cart.items.filter(ci => ci._id !== id);\n let response = await new ApiService().post(ApiPath.UPDATE_CART_ENDPOINT, cart);\n if (ResponseUtil.isOK(response)) {\n const { cart } = response.data;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n } else {\n return null;\n }\n } catch (error) {\n console.error(`CartService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n applyPromo: async (promocode) => {\n if(Config.mockAPI){\n await MockService.applyPromoCodeToCart();\n let cart = LocalStorageService.get('cart');\n const discount = {_id: \"2\", title: \"BLACK FRIDAY 20% OFF\", code: promocode, scope: 'PERCENT', amount: 20 };\n cart.discounts.push(discount);\n cart.discount = discount.scope === 'PERCENT' ? NumberUtils.toFixed2NoRound(cart.subtotal * (discount.amount/100)) : discount.amount;\n cart.total = cart.subtotal + cart.taxes - cart.discount;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n }\n\n try {\n let cart = LocalStorageService.get('cart'); \n if(!cart || !cart.items || cart.items.length === 0) { throw new Error('Cart items not found. Please add to cart.') }\n let response = await new ApiService().post(ApiPath.APPLY_PROMOCODE_CART_ENDPOINT.replace('code', promocode), cart);\n if (ResponseUtil.isOK(response)) {\n const { cart } = response.data;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n } else {\n return null;\n }\n } catch (error) {\n console.error(`CartService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n checkout: async () => {\n if(Config.mockAPI){\n await MockService.applyPromoCodeToCart();\n let cart = LocalStorageService.get('cart');\n cart.status = \"CHECKOUT\";\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n }\n\n try {\n let cart = LocalStorageService.get('cart'); \n if(!cart || !cart.items || cart.items.length === 0) { throw new Error('Cart items not found. Please add to cart.') }\n let response = await new ApiService().post(ApiPath.CHECKOUT_CART_ENDPOINT, cart);\n if (ResponseUtil.isOK(response)) {\n const { cart } = response.data;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n } else {\n return null;\n }\n } catch (error) {\n console.error(`CartService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n processPayment: async (paymentInfo) => {\n if(Config.mockAPI){\n await MockService.submitPayment(paymentInfo);\n let cart = LocalStorageService.get('cart');\n if(cart.status !== \"CHECKOUT\") { return false; }\n LocalStorageService.store({ cart: cart });\n return true;\n }\n\n try {\n let cart = LocalStorageService.get('cart'); \n if(!cart || cart.status !== \"CHECKOUT\" || !cart.items || cart.items.length === 0) { throw new Error('Cart items not found. Please add to cart.') }\n let response = await new ApiService().post(ApiPath.SUBMIT_PAYMENT_ENDPOINT, paymentInfo);\n if (ResponseUtil.isOK(response)) {\n const { cart } = response.data;\n LocalStorageService.store({ cart: cart });\n return LocalStorageService.get('cart');\n } else {\n return null;\n }\n } catch (error) {\n console.error(`CartService | Error while attempting to get response: ${error}`);\n return null;\n }\n } \n}","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAACQCAYAAAAhg3YBAAAKwWlDQ1BJQ0MgUHJvZmlsZQAASImVlgdUk8kWx+f70hstEIqU0HuXLr2G3puohCSEUEJIQcWOiCu4FkREwIasCCi4FkDWgohiYRGw1wVZVNR1sSAqKu8DHmH3vfPeO+9/zmR+ublzZ+7kzjkXAPIHpkCQCcsBkMUXCyP9vejxCYl03O8AAjAgABKwZbJEAs/w8GCAaHb+uz7eQbwR3TSfivXvv/9XybM5IhYAUDjCKWwRKwvhk8h4wBIIxQCgtiF23aViwRQjdqAoRA6I8JUp5s7woylOmeHRaZ/oSG8A0GgA8GQmU8gFgIxkCOi5LC4Sh2yFsBWfzeMjnIywGyuNyUZ4P8JmWVnZU9yNsFHKX+Jw/xYzRRqTyeRKeSaXaeF9eCJBJnP5/3kd/1tZmZLZPXSRQU4TBkQis8HUvWVkB0mZnxIaNss89rT/NKdJAmJmmSXyTpxlNtMnSLo2MzR4llN5fgxpHDEjepaF2ZHS+ByRb9QsM4Vze0kyYjyl+3IY0ph5adFxs5zLiw2dZVFGVNCcj7fULpRESs+cKvST5pgl+ktePIbUX5wWHSDNkTl3No4oXnoGNsfHV2rnx0h9BGIvaXxBZrjUn5PpL7WLcqOka8VIsc2tDZfeTzozMHyWQTRIAxLAB2zAAUKQArJBJhADOvABPCACAuQbEyClIuYsE08l5J0tWC7kcdPEdE/kRXHoDD7LwoxuY2WDVO7U+5z5+9/Tpt8dRLs2Z8tpB8CpCDFy52xMpE5OPwOA+nHOpvsOKR3kbZ3tZUmEuTM29NQHBhCBLFAEqkATqS8jYA5sgD1wAR7AFwSCMCSTBLAYsJB8spBMloKVYB0oBMVgG9gJKsA+cBAcBkfBcdACzoAL4DK4DnrBbfAQDIBh8AqMgo9gAoIgHESBqJAqpAXpQ6aQDeQIuUG+UDAUCSVAyRAX4kMSaCW0HiqGSqAK6ABUB/0MnYYuQFehPug+NAiNQO+gLzAKJsOKsAZsAFvCjrAnHARHw4tgLpwD58EF8Ba4HK6Gj8DN8AX4OnwbHoBfwWMogCKhaChtlDnKEeWNCkMlolJRQtRqVBGqDFWNakS1obpQN1EDqNeoz2gsmoqmo83RLugAdAyahc5Br0ZvRlegD6Ob0Z3om+hB9Cj6O4aCUceYYpwxDEw8hotZiinElGEOYU5hLmFuY4YxH7FYLA1riHXABmATsOnYFdjN2D3YJmw7tg87hB3D4XCqOFOcKy4Mx8SJcYW43bgjuPO4ftww7hOehNfC2+D98Il4Pj4fX4avx5/D9+Of4ycIcgR9gjMhjMAmLCdsJdQQ2gg3CMOECaI80ZDoSowmphPXEcuJjcRLxEfE9yQSSYfkRIog8UhrSeWkY6QrpEHSZ7IC2YTsTU4iS8hbyLXkdvJ98nsKhWJA8aAkUsSULZQ6ykXKE8onGaqMhQxDhi2zRqZSplmmX+aNLEFWX9ZTdrFsnmyZ7AnZG7Kv5QhyBnLecky51XKVcqfl7sqNyVPlreXD5LPkN8vXy1+Vf6GAUzBQ8FVgKxQoHFS4qDBERVF1qd5UFnU9tYZ6iTqsiFU0VGQopisWKx5V7FEcVVJQmq8Uq7RMqVLprNIADUUzoDFombSttOO0O7QvyhrKnsoc5U3Kjcr9yuMq81Q8VDgqRSpNKrdVvqjSVX1VM1S3q7aoPlZDq5moRagtVdurdknt9TzFeS7zWPOK5h2f90AdVjdRj1RfoX5QvVt9TENTw19DoLFb46LGa02apodmumap5jnNES2qlpsWT6tU67zWS7oS3ZOeSS+nd9JHtdW1A7Ql2ge0e7QndAx1YnTydZp0HusSdR11U3VLdTt0R/W09EL0Vuo16D3QJ+g76qfp79Lv0h83MDSIM9ho0GLwwlDFkGGYZ9hg+MiIYuRulGNUbXTLGGvsaJxhvMe41wQ2sTNJM6k0uWEKm9qb8kz3mPaZYcyczPhm1WZ3zcnmnua55g3mgxY0i2CLfIsWizeWepaJltstuyy/W9lZZVrVWD20VrAOtM63brN+Z2Niw7KptLllS7H1s11j22r7dr7pfM78vfPv2VHtQuw22nXYfbN3sBfaN9qPOOg5JDtUOdx1VHQMd9zseMUJ4+TltMbpjNNnZ3tnsfNx5z9dzF0yXOpdXiwwXMBZULNgyFXHlel6wHXAje6W7LbfbcBd253pXu3+1EPXg+1xyOO5p7FnuucRzzdeVl5Cr1Ne497O3qu8231QPv4+RT49vgq+Mb4Vvk/8dPy4fg1+o/52/iv82wMwAUEB2wPuMjQYLEYdYzTQIXBVYGcQOSgqqCLoabBJsDC4LQQOCQzZEfIoVD+UH9oSBsIYYTvCHocbhueE/xKBjQiPqIx4FmkduTKyK4oatSSqPupjtFf01uiHMUYxkpiOWNnYpNi62PE4n7iSuIF4y/hV8dcT1BJ4Ca2JuMTYxEOJYwt9F+5cOJxkl1SYdGeR4aJli64uVlucufjsEtklzCUnkjHJccn1yV+ZYcxq5lgKI6UqZZTlzdrFesX2YJeyRziunBLO81TX1JLUF1xX7g7uSJp7Wlnaa543r4L3Nj0gfV/6eEZYRm3GZGZcZlMWPis56zRfgZ/B78zWzF6W3ScwFRQKBnKcc3bmjAqDhIdEkGiRqFWsiDRC3RIjyQbJYK5bbmXup6WxS08sk1/GX9a93GT5puXP8/zyflqBXsFa0bFSe+W6lYOrPFcdWA2tTlndsUZ3TcGa4bX+aw+vI67LWPdrvlV+Sf6H9XHr2wo0CtYWDG3w39BQKFMoLLy70WXjvh/QP/B+6Nlku2n3pu9F7KJrxVbFZcVfN7M2X/vR+sfyHye3pG7p2Wq/de827Db+tjvb3bcfLpEvySsZ2hGyo7mUXlpU+mHnkp1Xy+aX7dtF3CXZNVAeXN66W2/3tt1fK9Iqbld6VTZVqVdtqhrfw97Tv9djb+M+jX3F+77s5+2/d8D/QHO1QXXZQezB3IPPamJrun5y/KnukNqh4kPfavm1A4cjD3fWOdTV1avXb22AGyQNI0eSjvQe9Tna2mjeeKCJ1lR8DByTHHv5c/LPd44HHe844Xii8aT+yapT1FNFzVDz8ubRlrSWgdaE1r7Tgac72lzaTv1i8UvtGe0zlWeVzm49RzxXcG7yfN75sXZB++sL3AtDHUs6Hl6Mv3irM6Kz51LQpSuX/S5f7PLsOn/F9cqZq85XT19zvNZy3f56c7dd96lf7X491WPf03zD4UZrr1NvW9+CvnP97v0XbvrcvHyLcev67dDbfXdi7ty7m3R34B773ov7mfffPsh9MPFw7SPMo6LHco/Lnqg/qf7N+LemAfuBs4M+g91Po54+HGINvfpd9PvX4YJnlGdlz7We172weXFmxG+k9+XCl8OvBK8mXhf+If9H1RujNyf/9PizezR+dPit8O3ku83vVd/Xfpj/oWMsfOzJx6yPE+NFn1Q/Hf7s+LnrS9yX5xNLv+K+ln8z/tb2Pej7o8msyUkBU8icbgVQyIBTUwF4VwsAJQHpHXoBIC6c6Z+nBc30/NME/hPP9NjTsgeg1gOAmLUABCM9yl5k6CNMRuapNinaA8C2ttLxT4lSbW1mYpGRrhLzaXLyvQYAuDYAvgknJyf2TE5+q0EOex+A9pyZvn1KWKQXLzFUtsQ/7jmWTAX/on8AMO4OF0P8ebMAAAAJcEhZcwAACxMAAAsTAQCanBgAAAIEaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xOTU8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzM4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CsHdjVUAABeiSURBVHgB7V0JcxvJdX4YDC6Sum+trDNe7Uq73o0rdlyOq5zkl/mXJVWpuGzHW7bW8TrWsaKklShxJVEnSRwzQL7vDUBhKV4YDAiM5psqkDimp3u+nq/f69fvvS6Vy+We6RACQuCDRiD4oO9ONycEhIAjIKLrQRACBUBARC9AJ+sWhYCIrmdACBQAARG9AJ2sWxQCIrqeASFQAARE9AJ0sm5RCIjoegaEQAEQENEL0Mm6RSEgousZEAIFQEBEL0An6xaFgIiuZ0AIFAABEb0AnaxbFAIiup4BIVAABET0AnSyblEIiOh6BoRAARAQ0QvQybpFISCi6xkQAgVAQEQvQCfrFoWAiK5nQAgUAAERvQCdrFsUAiK6ngEhUAAERPQCdLJuUQiI6HoGhEABEBDRC9DJukUhIKLrGRACBUBARC9AJ+sWhYCIrmdACBQAARG9AJ2sWxQCIrqeASFQAARE9AJ0sm5RCIjoegaEQAEQENEL0Mm6RSEgousZEAIFQEBEL0An6xaFgIiuZ0AIFAABEb0AnaxbFAIiup4BIVAABET0AnSyblEIiOh6BoRAARAQ0QvQybpFIRAKgg8YgVIJN8fX8DH43Bv6Eu/94/B3Qz/rbe4RENFz34WbbqAEJY2vHkjbjfDqJhzedNrwRx8PAjwKfLFcr4ufRfphjPL+vlQul9Wjue/FIckddZyi/k0YWKl+0Eq1eQuqDSuVQ4wBAbjcA5dj63Xa1muvWbf5xnrNdUeBDwPPcdLzSk76vAOk9kui5/kZGKjmJC0kdwB2B4dPWXjwuJXnDlp5Hq/6ghPcgrKVBufjnnsGqU1pz1enafHaa4vW3lj89qXFLx5Zt9VMBgwMDiiIAhwCJBPy+rhIouey50A8ks9V854F9YZVTl6y8NAJCxcOO8lLYRWzc5zDw/9Biv+Apxu/Jufgbw/Su9tctWj1pXXevLBoZcmiZw+T3zcIT7VeR94QENHz1mNkLYkbRVaqVq32o8+sduKclRsHrFSpQaRD7XZJHeN/Iul7GBB67aZ1Oy2X4C7ZQdygWrcAZUqc06NcCVKfkp8V9GJMAdrr1nn1zNYf3bKYhHeVARJe6nz+nhrN0XPUZyQkSAsaWuXMx1Y/8w+Q4sehmlc2JHwXhI7X31hEFfztC4tXX0ENX7de1MTg0AZJMQBwpKCEDusYLBpQ7+esvHAE2sBRC+cOQEOYTwYNQoNBI26tWuvpQ2s//LvFb1ZQrsofqALwDB05QEASPQed5E0sQdKCqAFU88alL6x67Kwb2BIVPgaxX1nnxZJ1Vh5b9HIJ0hgW9/5BOibTc6oCfPHgHB1cxbvBN0bBPnfYwiNncf0zVjlyChK/7oV7cYyBY8WaS99a68E3GCjQno25u19Qf2YYARF9hjtno2lUp2Ehr5y+ZI2LP/F5uEtxqOYRjGjt54+s/fiuxa++T1jLQYEq/HvHZgm8QfHkTEpoSvxuD1oCBPdpaA0nL1jl8ElIfhAev1P9by3fs/Vbv4MGj/N9SU7z9vegnrEvRPQZ65AfNgdEpNTEklntwnVrnPsElvRD/h3VcRK8tXTHIvx3yewqNcnKT3ylOFz0Y5DgPDzGNKFSturZT6x2+rJVDhxzlb8HzYJ1r936g3XX3iaqvE8JUtSnIvuCgIi+LzCnrIRzcpC8fuVLkPxTzJ3nnMRcCqOBrL34l4TOIeboPDI1kmGAccMeDHpQ22nNb1z5qVWPf2SlEEY/aBPtF09s9dYfrfv6mcie9MDM/i0HQfCbmW1dkRvmc3JI8ouf29z5azCYzYPHmCe/eW5r396AYewmyAWCU613gqeU4Dth7JoBluFQTw8Guc7TRbMKjXeJsY7/yzDeRa+fuuPNhpPNTtfUb1NBQESfCuy7VAqSUz2uwqo+f/kLSPIFJ3P08ikk6B+sA7XZl9JcXZ4AwTc3jwMJ5+Kw1kVPv3P1nRK+VKliWQ8OObU5rLfjew4MrvpvvoA+TxsBEX3aPbC5/r66Hh49a/M//ikkJubkIFrnFUn+PzC4PU1ITmeZfT36JIYGET1fcuKHWJKjY06yht+wzvcPEg0jrX1gX++nWJVtZZotFgIzdbeYF4PUQSW0uQvXLJw/7Fb0CGvha3dvWASS+xr2biTnYDEJyTow8kGVby7esOaTu9A8Ou5iWzt53qrnrrpNwYNqZgpXNUZEn6VngMYvGL4q565jDfs0yBrA2WXN1h/8zV1RKT0Th5ftGo35NMYKGvBoMXfCZU14kp0vSPbmzd+79b2HuuhkQweeoNHwwcpHqO2aqe/3HQERfd8h36ZCV9nbVj54AoS5BPW8DuEeWevJPevAI80Nb2502748CVc5jXn9F/9uIYJbnPCU/j6/3qZcqq+pxiMKDmXX7/0FATGvMMCUrIJgmvqFL32wklRPBezEConoE4M2xYXBnBrUX1fZQWpGkjW/+6v16GPuB6m1zcGBAkdQnXMnl4VPf2lzV/8ZkvYAotNaICas8/1ztrnCaF9z0ClXLYaBsLX8wLrtFubrITzqPjLaFyyGu22W9Y3WOp29CQERfRMgU/lI6Qh1Ozx+zqpwOy1BAjOopLl8H77qb8BeLKPtJM2HG83zMAUoHzhqjR99Yguf/5vVzl+3UhfEo0pP8mVFQCd7aK3FP1kHa+kchmiFr525gvYON0rvp40A10x0zAAClNkVSEISheGindfPrX3/hq9h7zwv39R4zsndaIbvMY+uHkboKq7ZPnLSpwHR8mLCQSyNMWBlPEaCzdAUsLwPqX4/CZHFXD08eMzKh45ZjHswBtzsdZDadCv6mB0CkujZYZnySiQmLO0IOa0wEo3OKVC121iqSs+Pgaqf0LhUa1jt5EVb+Phn1rj2S9gB4MoK33k/XLq/O3/km8BaPtscPb5pEWLYOYpwsGJgjKT6yGhOrICIPjFo93hhSmCIxPJRxpQfRKESwkzfIunDI0hkXmNUHZhSNqmbFvsIUpUpo6jOB4hZr5/92Oav/8qq8LhzjlOd5zGmOh9HCLCh+o4pB1cHKkfPJO330WqMgSRpnf6OiYBU9zEBHLs4iE5Nu3LsnCeCoJsr181jSkfGjI/K86EGccBY/ftvrXLiIoJSkIEGATEIbnDreAjSR/BbbyLqrb10KykF41qiRqSrlE49MYJtQqSxojMNQ167yFYz7n0M3ZLepkRAEj0lcJkV6wvgEPndaLWm62uEhBFONZey6Ujn7cMIwsSPzW//bG+/+W+fR1PKk8x0oa0cOQPvu3+y+c/+FcY7qPOo20cWWugHasGebhRhrVgZiF8te+45JK3Cil4Fg9dAfZdE3xOMEzxJRJ8guLtemmo7lqHKhxDvzTRQVNshEakCJ9QYg+T9ymnBp0SNX39vb7/+D3t76ytrP0NYK0kNY12A+Xv99EU78PmvrYE5fFCBjcAJz+bs8fGgSgJtoIeEkvH6a6+ZGWdD3FdyiOh9IKb2T6r71KBnxUy9DI7ACMfcbTxoiOsiaGVXBxk/ew9/WAHnyQHU8qBnnaXbFq88QIz5NajzF6Fmw5ce6jxTSTUQnFKBo03ryaK1kUXGhxmPcUd5XmeXg2dwoHKvPA4iSFPlx8Y8ffdr7FKFfk6JgIieErhMivUFXQCCUQKSTDRmcdHLEzY6QTKpKSE7qQvidjsdW7/7Z6SdWrI6HHTobltuMPS07tlkmNyicvS0NR/dRrTag0SL5/x9pzxx/YGAsfIx8tbR8h6gLmoMXaSTTsJpM7oXXWZkBET0kSHLsADIQa4HWGumC2kPS1VM1TSRgxVRoDK0FSo57QER5tSrL5fhNnsZ1vgrLs1pMackriGFFA1qbTjxNB/dRHIJrInTQ8/n71tJZtwLfu4hNzxVf94P6yhhXb0HKc85fNKAidydLroLAiL6LgDtx8+0hJN8zOTCFFHJsRWZMmqNS1+sf/ezx3YQhRYt38WS208wX7+c5IWnOg+1voFY+Cpyxq3jHGaB7dG1lfP+vgR/1yK0l/eAnV9cdccQ5umj+1OSd+fp3TQQENGngbrXSfHXJzONXi4OqbozHTOOrHm+1fU4NeD3dNLB/yZSU3XgOVe/8DkIz8Aa2A3oTgsHm3mQvnr4tK1/h0g6rvFvluy8Du8hRu74wZTD74sWfB6U6DqmhcAezarTal6B6u0TkVyZyoF6ve7O6vvVcxTg7+GAtO+fom9mGwFJ9Gn2z4DVLtlBJs5jByGlJHyf/Jk0cavrsX5KXXjOUUBXkICyfhabQjBzDNvB3/sOPC245LaWbmIzRmR93VJ1Z3vRYBjt3JDIRvMzHeH9yPJm+pfUvz0jIKLvGaqsT+SDT/aBD0wSAVKUwLZSNVlmG/zmJ2T+p0/wLtxfEa9eOXXJajTGYd2b2zQ5wdGeLnZ8aT1FSunHWJJ72c8Zvx3JfVCAIw7CZN3CjlGK8fSJE07mN6ALjoiAiD4iYNmezs2VKPSwzxnmtQGk4cbac9Zz2oFApeim5R2W8fKBI5iPf2ZVRM1xiS9ZAgNBEVvexmYQLSyvcc7uTcE83o/B/Ps9IBJX3hKywnJuT2Hew/5wzB4ri/t7YO37FyL6vkM+VGEi0JG0AXujUfqVauAaNj/EKVxqy/Sgio6DS1/lWs2qMLgxzxvVdPdF7/8WIZ001fT2o7/BeQdtcIcZspar+zsc/WkIA3PK/V1dGGPfo8utawE7lNVPE0dARJ84xDtU4Oo6DNWM+oIU7dXm3UOujMivCHuoZeId55ZvkJzLYuBrDbu9MMClAkt64naL9nEjRVfTH2Jftf/Fe0phlCHJRxhwOG6VqRnQ+Qdz87iDAQx1uh1ghOvsgJh+SomAiJ4SuEyKUUpCXe++WIajTNsQ0uKeZPR952aJWIkeuxrfRTXuWYgAk9rZH/fVdLqm4togOINc2ph/t+AU00EaZ67pexJK94Lbo1ZBaY6BhPYFpn7mwWXCCFsuJwfZrmOaCIjo00SfdZNv+MfNEivIykInFt8cgb+5ukyypydKcOAkwlTPWx2vwb5tfmmo1R3me4Ohrf34jlfhEp5W8pGlL+bn2HCRCSnLCFHlTdGVt/P8od/fOO1nW3WMj4CIPj6G412B6juu0IETSg1bFVMiMm48QE737jpiuceY33K7pIVr/4ItlLCbCtVpEhAEdzUdgSutezeSsQSuqsmIAztBqoN3gOU5ZLDlXuu8KPdn764iph7BLWOMU6lao0LvIyCiv4/J/n7DSSzU5XjlIQh4NQkGQebWCrKpth6Q6KNK9IR0vAla0plv3Q/Uw4CT1jPMwxnBxlBYkj/E+T6R3sXYllxlm7+YclQChKUiFRY0Evrrt1/AxsBLhpjr72bI2+aq+jo7BET07LBMeSUQHQazbrPpc9rKoRNYYoNVHBbx9nf9UNFRr+zE7RfCexKPkWoejYYBhRI22QwCTByXhFiuoyW/io0gw4WjrhjEcKrxbZvejTmj3oHOzxiBZM0l44vqcukQaIOMMaK/6FlGq3gVaZqTFM0juJ6S5DSO4Rp0xOkgOm118WsknfhP3+0FohcaBF4+D8e5Yx1kMpxk8I/JJ7mtM+vkEh33iPO6hgedsepS4XEQkEQfB72sylKqMpMqdiptw0uNBi3uVFpDJFnn+3tuGU/m6ntQr7ksxjnym5dQ03E9RJx1kTvOl+rY3nEl+PA9c+kO0rx+5R8xMB2FBaBkUXMVBr67Ltnd+CCiDyM2tfeS6FODfuuKW0jUyOSQEIfuzFI7/xmE5kDy7qAL9wnM5TJu4/T2m/+y5u2vMEggSIU53Pl71iT3NFgnPHbdveFgaefcvAM7QLIGv4eBaWsY9G3GCEiiZwxo6suRhCBkvPIESRzvwXqNjC9wWKmfuggL9go81W67lH8XJLKpJpSnca3z5A6k+M1EorrbKgaJjcCSTWXSfqSuzvrwr4G00b5sh2t1oLI3736dONv45hBpK1C5rBGQRM8a0XGuR3LAAt9++FefW4NNyMW+YHOYq3tGVc/PvtN8HX7qFP4kOC3qHDyyVp3JburkcIipf/wLqyIDDQcYZpFpPV60LmwMvqSmNbVxnoTMy4romUM6zgXBUlrgW20kePg/36WUZA+xj9rcpS+xto5EjpgTg1k7VzIJgrPGAcmxFl+/lGSj4S4tzCjjYaxIKGlck2f9OmYKgXIQBL+ZqRYVvjEgO9eikdu9i+gvLrfRMEdVvgwnmvjNShITToJlLa13wp6GN2oLIHX90hfWwHIarexsQwtGxLWbv8OPHKgo8XXMGgIi+qz1iLcnIbsvUUEt9kQQCP2k11kZe5Azd3qXBjsukzmxyMBJHSAuvdswzy/h1bj6c2sgMCYhOTaDhJ/+Go1+OyWkmFTTdN09IyCi7xmqKZyI+XqEtXUS2ndyQfhnGRlaQ0h5qvjxiycQqDCKcW18EoTnFKGEeT9UdRrc5q/+wnPJecw86u2g/tU7f3Ivu2RtXir7FJ6SPVWJYKXyJMXBnhqhk7ZDoK8GQ12uIUNr4/wnG9FhXDZrP39szfvfJDu78FTPvY7udJU+Zbf6gEHTTUJwXpaOO/Uzl91WwNTUTJTRQd1rd76yGCsCIvl2/Tc734vos9MX27SEqjOIB4t79aOrIPunkO6HQS4YvZCsInr7CnPk+1hWWwTpkj3b3If9B3Nlkn+Ly/s44n/e/YhBpYeBgtp6eOKyVbG8V8UGD4MUU9x2iY44a7f/iBh6pKbm4DJytNu76vRufxAQ0fcH5/FrcS80qNDIsd64cN3jyktQ5blRQheqNfdrY9gpXV7jZ/eTlbV+rc55lk/e9L8l+aFqwxmHY8CA7gEi3sLj55Ha+QR2cDmFuTgi31DO48uxMyp3X23d+xoFcD2PTJO6Pn7nTv4KIvrkMc6uBs6ZkdCxBInr6jQSSbi7LKU7iQeVuovtkGK4oXILY5Ke7q++qUKEHWBgTHOtnqwGeRlpVqo0PKFjiPxxvjUT5uLMEkNPN/rcd5niCtpEi0Ex95B9hju2DBxx/GLZ3Z6uNDkERPTJYTuZK7tUhjDG0hs3RqwhPXMV2WMYx56khgKLSUAQtMcMMiB4F8TvMlUVBoJkjRvnQBoHWLbzUFYSG5+TFwYMyHfu097FrisdZIlpLXNqgOQUPKSqJzjk7K+InrMOS5oLopLwTlxwdm4BWWQu+N5pIaLeuObuEp5SGwU459726A8ciajnAIJpAFR01wiQIYZx8uA8pD8t8BgE5AyzLZSz/IOIPsu9s1vbSDweZCKkNzkbYH5NTzpmqaGU53bM9F7zDRlo1Nsgf9fn3a7ug9wMhonWXoHk2A0Varqv0/PaPi3AhX2w2GHA4Lk6ZhYBEX1mu2aUhoGITnqQFyo9D34MajCkwZjGrYtLIQg/IC1+p2rOhBGefRYqerf5Gu+RnpllqQZsLNXJ2AY0cn+I6LnvwuEb6BOeTHUpD9KDubvJYSe2jwxD6rlU9GFgc/9eRM99F253AyQ9f/M/Q/+Hzx8eAjgiDH8ePk/v844A1mV0fJgIkLi8M5H3w+zf0e6qb80ZrZDOFgJCIF8IiOj56i+1VgikQkBETwWbCgmBfCEgouerv9RaIZAKARE9FWwqJATyhYCInq/+UmuFQCoERPRUsKmQEMgXAiJ6vvpLrRUCqRAQ0VPBpkJCIF8IiOj56i+1VgikQkBETwWbCgmBfCEgouerv9RaIZAKARE9FWwqJATyhYCInq/+UmuFQCoERPRUsKmQEMgXAiJ6vvpLrRUCqRAQ0VPBpkJCIF8IiOj56i+1VgikQkBETwWbCgmBfCEgouerv9RaIZAKARE9FWwqJATyhYCInq/+UmuFQCoERPRUsKmQEMgXAiJ6vvpLrRUCqRAQ0VPBpkJCIF8IiOj56i+1VgikQkBETwWbCgmBfCEgouerv9RaIZAKARE9FWwqJATyhYCInq/+UmuFQCoERPRUsKmQEMgXAiJ6vvpLrRUCqRAQ0VPBpkJCIF8IiOj56i+1VgikQkBETwWbCgmBfCEgouerv9RaIZAKARE9FWwqJATyhYCInq/+UmuFQCoERPRUsKmQEMgXAiJ6vvpLrRUCqRAQ0VPBpkJCIF8I/D+zBqnzjsatXQAAAABJRU5ErkJggg==\"","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Card, Button } from \"react-bootstrap\";\nimport Rater from \"react-rater\";\nimport VideoTimeUtils from \"./../../../utils/VideoTimeUtils\";\nimport ThumbnailBackupImage from \"./../../../images/default_video_thumbnail.png\";\nimport CartService from \"./../../../services/CartService\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\n\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./tile.css\";\n\nconst BookstoreTile = props => {\n const { course, addCourseToCart } = props;\n\n const history = useHistory();\n\n const viewDetails = () => {\n history.push(DeepLinking.BOOKSTORE_DETAILS_VIEW_PATH + \"?id=\" + course._id);\n };\n\n const addToCart = async(id)=>{\n const item = {\"_id\": id, \"quantity\": 1, \"price\": course.price, \"type\": \"UNIT\" };\n const cart = await CartService.addItem(item);\n }\n\n return (\n \n \n \n \n {course.title}\n \n
\n \n \n {\" \"}\n {VideoTimeUtils.formatVideoTime(course.length)}\n \n
\n
\n viewDetails()}>\n \n \n
\n addToCart(course._id)}\n >\n + Add to cart\n \n
\n
\n
\n
\n );\n};\n\nexport default BookstoreTile;\n","import React from \"react\";\nimport BookstoreTile from \"./../../../widgets/tile/BookstoreTile\";\nimport \"./bookstore.css\";\n\nconst BookstoreLibraryRow = props => {\n const { courses, category } = props;\n\n const populateBookstoreTile = course => {\n return ;\n };\n\n const populateBookstoreTiles = () => {\n return courses.map((course, index) => {\n return (\n
\n {populateBookstoreTile(course)}\n
\n );\n });\n };\n\n return (\n 0\n ? `bookstoreLibraryrow d-flex flex-column d-flex justify-content-start align-items-start p-xl-4 p-2`\n : \"hide\"\n }\n >\n

{category}

\n
\n {populateBookstoreTiles()}\n
\n \n );\n};\n\nexport default BookstoreLibraryRow;\n","import React from \"react\";\nimport { Button, Form, FormControl, InputGroup } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport BookstoreLibraryRow from \"./BookstoreLibraryRow\";\nimport \"./bookstore.css\";\n\nconst BookstoreLibrary = props => {\n \n const { bookstoreLibrary } = props;\n\n const populateRows = () => {\n const allCourses = bookstoreLibrary.courses;\n\n const categories = bookstoreLibrary.settings.categories;\n\n const matrix = categories.map(category => {\n return allCourses.filter(course => {\n return course.category === category;\n });\n });\n\n if (matrix.length === 0) {\n return \"\";\n }\n\n return matrix.map((m, index) => {\n return (\n \n );\n });\n };\n\n const populateCategories = ()=>{\n const categories = bookstoreLibrary.settings.categories;\n return categories.map((category, index) => {\n return (\n \n );\n })\n\n }\n\n return (\n
\n
\n
\n \n \n \n {populateCategories()}\n \n \n\n \n \n \n \n \n \n \n OnFilterInput()}\n />\n \n \n
\n paymentCompleteHandler()}\n >\n Go\n \n
\n\n
\n

\n Study smarter, not harder! Get unlimited access\n with our monthly subscription.\n

\n paymentCompleteHandler()}\n >\n Lean more\n \n
\n
\n \n \n \n {populateCategories()}\n \n \n
\n {populateRows()}\n
\n );\n};\n\nexport default BookstoreLibrary;\n","import React, { useState, useEffect } from \"react\";\nimport Header from \"../../../widgets/header/Header\";\nimport BookstoreService from \"./../../../../services/BookstoreService\";\nimport CartService from \"./../../../../services/CartService\";\nimport BookstoreLibrary from \"./BookstoreLibrary\";\nimport \"./bookstore.css\";\n\nconst BookstoreView = () => {\n const [bookstoreLibrary, setBookstoreLibrary] = useState(null);\n const [cart, setCart] = useState(null);\n\n useEffect(() => {\n document.title = 'LimeSpring Portal - Bookstore';\n const getBookstore = async () => {\n setBookstoreLibrary(await BookstoreService.get());\n if(!cart){\n await CartService.create();\n setCart(CartService.get());\n }\n };\n getBookstore();\n }, []);\n\n return (\n
\n \n {bookstoreLibrary ? (\n \n ) : (\n \"\"\n )}\n
\n );\n};\n\nexport default BookstoreView;\n","import React from \"react\";\nimport Button from \"react-bootstrap/Button\";\nimport \"./bookstore.css\";\n\nconst BookstoreConfirmationWidget = () => {\n return (\n
\n
\n

Thanks you for your purchase

\n

\n Your new material has been added to your dashboard, happy learning!\n

\n paymentCompleteHandler()}\n >\n Go to dashboard\n \n \n Or keep browsing\n \n
\n );\n};\n\nexport default BookstoreConfirmationWidget;\n","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport BookstoreConfirmationWidget from \"./BookstoreConfirmationWidget\";\nimport PaymentMethodsWidget from \"../payment/PaymentMethodsWidget\";\nimport SubscriptionService from \"../../../../services/SubscriptionService\";\nimport Header from \"../../../widgets/header/Header\";\nimport Breadcrumb from \"react-bootstrap/Breadcrumb\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport \"./bookstore.css\";\n\nconst BookstoreConfirmationView = props => {\n const { planId } = props;\n\n const history = useHistory();\n\n const [plan, setPlan] = useState(null);\n\n useEffect(() => {\n const getPlan = async () => {\n setPlan(await SubscriptionService.get(planId));\n };\n getPlan();\n }, []);\n\n const paidConfirmationPlan = () => {\n history.push({\n pathname: DeepLinking.BOOKSTORE_CONFIRMATION_VIEW_PATH\n });\n };\n return (\n
\n
\n
\n \n Shopping cart\n\n Check out\n \n Confirmation\n \n \n
\n \n
\n
\n
\n );\n};\n\nexport default BookstoreConfirmationView;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n\n getAllFromRemote: async () => {\n const response = await new ApiService().get(ApiPath.GET_UNITS_ENDPOINT);\n if(response && response.status === 200) { \n const { units } = response.data;\n return units;\n } \n return [];\n },\n\n getFromRemote: async (unitId) => {\n const response = await new ApiService().get(ApiPath.GET_UNIT_ENDPOINT.replace(':id', unitId));\n if(response && response.status === 200) { \n const { unit } = response.data;\n return unit;\n } \n return null;\n },\n\n getAll: () => {\n return LocalStorageService.get(\"units\") || [];\n },\n\n get: id => {\n return LocalStorageService.get(\"units\").find(unit => unit._id === id);\n },\n\n getByIds: ids => {\n const units = LocalStorageService.get(\"units\") || [];\n const _units = ids.map(id => units.find(unit => unit._id === id));\n if(!_units || _units.length === 0) {return []}\n const assignedUnits = _units.filter(u => u !== null && u !== undefined);\n return assignedUnits;\n },\n\n getLatest: () => {\n return LocalStorageService.get(\"units\")[0];\n },\n\n clone: async (unit) => {\n const clone = {...unit};\n clone.title = unit.title + \" COPY\";\n\n try { \n let response = await new ApiService().post(ApiPath.CREATE_UNIT_ENDPOINT, clone);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`UnitService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n create: async (payload) => {\n try { \n let response = await new ApiService().post(ApiPath.CREATE_UNIT_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`UnitService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n \n update: async (id, payload) => {\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_UNIT_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`UnitService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n \n remove: async (id) => {\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_UNIT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`UnitService | Error while attempting to remove unit. Response: ${error}`);\n return false;\n }\n }\n};\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\nimport LectureService from \"./LectureService\";\n\nexport default {\n\n getAllFromRemote: async () => {\n const response = await new ApiService().get(ApiPath.GET_ASSESSMENTS_ENDPOINT);\n if(response && response.status === 200) { \n const { assessments } = response.data;\n return assessments;\n } \n return [];\n },\n \n get: id => {\n return LocalStorageService.get(\"assessments\").find(\n assessment => assessment._id === id\n );\n },\n\n getFromRemote: async (id) => {\n try { \n let response = await new ApiService().get(ApiPath.GET_ASSESSMENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { assessment } = response.data;\n return assessment;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`AssessmentService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n getByIdsFromRemote: async (ids) => {\n const response = await new ApiService().get(\n ApiPath.GET_ASSESSMENTS_BY_IDS_ENDPOINT.replace(':ids', ids.join(','))\n );\n if(response && response.status === 200) { \n const { assessments } = response.data;\n return assessments;\n } \n return [];\n },\n\n getByIds: ids => {\n const assessments = LocalStorageService.get(\"assessments\");\n return ids.map(id => assessments.find(assessment => assessment._id === id));\n },\n\n getWorkbookByIds: ids => {\n const assessments = LocalStorageService.get(\"assessments\");\n const filteredAssessments = ids.map(id => assessments.find(assessment => assessment._id === id));\n return filteredAssessments.filter(fa => 'WORKBOOK' === fa.type);\n },\n\n getExamByIds: ids => {\n const assessments = LocalStorageService.get(\"assessments\");\n const filteredAssessments = ids.map(id => assessments.find(assessment => assessment._id === id));\n return filteredAssessments.filter(fa => 'BOOKEXAM' === fa.type);\n },\n\n getAll: () => {\n return LocalStorageService.get(\"assessments\");\n },\n\n getLatest: () => {\n const assessments = LocalStorageService.get(\"assessments\");\n if(!assessments || assessments.length === 0) return null;\n return assessments[0];\n },\n\n getLatestWorkbook: () => {\n const assessments = LocalStorageService.get(\"assessments\");\n const workbooks = assessments.filter(assessment => assessment.type === \"WORKBOOK\");\n if(!workbooks) return null;\n return workbooks[0];\n },\n\n getLatestExam: () => {\n const assessments = LocalStorageService.get(\"assessments\");\n const exams = assessments.filter(assessment => assessment.type === \"BOOKEXAM\");\n if(!exams) return null;\n return exams[0];\n },\n\n getQuizzes: () => {\n const assessments = LocalStorageService.get(\"assessments\");\n return assessments.filter(assessment => assessment.type === \"QUIZ\");\n },\n\n getExams: () => {\n const assessments = LocalStorageService.get(\"assessments\");\n return assessments ? assessments.filter(assessment => assessment.type === \"BOOKEXAM\") : [];\n },\n\n getPracticeTests: () => {\n const assessments = LocalStorageService.get(\"assessments\");\n return assessments? assessments.filter(assessment => assessment.type === \"WORKBOOK\") : [];\n },\n\n getQuizzesForLectures: (lectureIds) => {\n if(!lectureIds || lectureIds.length === 0) { return []; }\n const lectures = LectureService.getByIds(lectureIds);\n if(!lectures || lectures.length === 0) { return []; }\n let lectureQuizIds = [];\n lectures.forEach((lecture) => {\n if(lecture.assessments && lecture.assessments.length > 0){\n lectureQuizIds = lectureQuizIds.concat(lecture.assessments);\n }\n });\n return lectureQuizIds;\n },\n\n getRemote: async id => {\n try { \n let response = await new ApiService().get(ApiPath.GET_ASSESSMENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { assessment } = response.data;\n return assessment;\n }\n } catch (error) {\n console.error(`AssessmentService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n generateUrl : async (id, emails = []) => {\n try {\n let response = await new ApiService().post(ApiPath.GENERATE_ASSESSMENT_URL.replace(':id', id),{\n emails\n });\n if (ResponseUtil.isOK(response)) {\n return response;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`AssessmentService | Error while attempting to get response: ${error}`);\n return null; \n }\n },\n\n create: async assessment => {\n try { \n let response = await new ApiService().post(ApiPath.CREATE_ASSESSMENT_ENDPOINT, assessment);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AssessmentService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n clone: async (assessment) => {\n const clone = {...assessment};\n clone.title = assessment.title + \" COPY\";\n try { \n let response = await new ApiService().post(ApiPath.CREATE_ASSESSMENT_ENDPOINT, clone);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AssessmentService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n update: async (id, payload) => {\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_ASSESSMENT_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AssessmentService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n remove: async id => {\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_ASSESSMENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AssessmentService | Error while attempting to remove assessment. response: ${error}`);\n return false;\n }\n },\n getQuizAnonymous: async (token) => {\n const response = await new ApiService().get(ApiPath.GET_ASSESSMENT_QUIZ_ANONYMOUS.replace(':token', token));\n if(response && response.status === 200) { \n const { assessment } = response.data;\n return assessment;\n } \n return null;\n \n },\n};\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\nimport AssessmentService from \"./AssessmentService\";\n\nexport default {\n getAll: () => {\n return LocalStorageService.get(\"lectures\");\n },\n\n get: id => {\n return LocalStorageService.get(\"lectures\").find(\n lecture => lecture._id === id\n );\n },\n\n getLatest: () => {\n return LocalStorageService.get(\"lectures\")[0];\n },\n\n getTranscript: (lectureId) => {\n const lecture = LocalStorageService.get(\"lectures\").find(\n lecture => lecture._id === lectureId\n );\n if(!lecture || !lecture.transcript) { return null; }\n return lecture.transcript;\n },\n\n getByIdsFromRemote: async (ids) => {\n const response = await new ApiService().get(ApiPath.GET_LECTURES_BY_IDS_ENDPOINT.replace(':ids', ids));\n if(response && response.status === 200) { \n const { lectures } = response.data;\n return lectures;\n } \n return [];\n },\n\n getLectureVideo: async (token) => {\n const response = await new ApiService().get(ApiPath.GET_LECTURE_VIDEO.replace(':token', token));\n if(response && response.status === 200) { \n const { lecture } = response.data;\n return lecture;\n } \n return null;\n \n },\n\n getByIds: ids => {\n if(!ids || ids.length === 0) {return [] }\n const lectures = LocalStorageService.get(\"lectures\");\n const _lectures = ids.map(id => lectures.find(lecture => lecture._id === id));\n if(!_lectures || _lectures.length === 0) {return [] }\n const assignedLectures = _lectures.filter(l => l !== null && l !== undefined);\n\n //populate quizzes on every lecture\n assignedLectures.forEach(assignedLecture => {\n const quizIds = assignedLecture.assessments;\n if (quizIds && quizIds.length > 0) {\n //usually, when page is cached, the quizIds will\n //already be populated with the quiz, so we should not re-populate!\n if (typeof quizIds[0] === \"string\") {\n let quizzes = [];\n quizIds.forEach(quizId => {\n const quiz = AssessmentService.get(quizId);\n quizzes.push(quiz);\n });\n assignedLecture.assessments = quizzes;\n }\n }\n });\n\n return assignedLectures;\n },\n\n clone: async (lecture) => {\n const clone = {...lecture};\n delete clone._id;\n clone.title = lecture.title + \" COPY\";\n try { \n let response = await new ApiService().post(ApiPath.CREATE_LECTURE_ENDPOINT, clone);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n getAllFromRemote: async () => {\n try { \n let response = await new ApiService().get(ApiPath.GET_LECTURES_ENDPOINT);\n if (ResponseUtil.isOK(response)) {\n const { lectures } = response.data;\n return lectures;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n create: async (payload) => {\n try { \n let response = await new ApiService().upload(ApiPath.CREATE_LECTURE_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n generateAutomaticTranscript: async (payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.generateTranscript()); }\n try { \n let response = await new ApiService().post(ApiPath.GENERATE_LECTURE_TRANSCRIPT_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return response.data;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n checkTranscripts: async () => {\n try { \n let response = await new ApiService().get(ApiPath.CHECK_LECTURE_TRANSCRIPTS_ENDPOINT);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n},\n\n update: async (id, payload, status) => {\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_LECTURE_ENDPOINT.replace(':id', id).replace(':status', status), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n generateUrl: async (id) => {\n try { \n let response = await new ApiService().post(ApiPath.GENERATE_LECTURE_URL.replace(':id', id), {});\n if (ResponseUtil.isOK(response)) {\n return response;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n},\n\n remove: async (id) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.removeLecture()); }\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_LECTURE_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to remove lecture. response: ${error}`);\n return false;\n }\n }\n};\n","import React, { useState, useEffect, Link } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider from \"react-bootstrap-table2-toolkit\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport ThumbnailBackupImage from \"./../../../../images/default_video_thumbnail.png\";\nimport CartService from \"./../../../../services/CartService\";\nimport UnitService from \"./../../../../services/UnitService\";\nimport LectureService from \"./../../../../services/LectureService\";\nimport \"./bookstore.css\";\n\nconst BookstoreCartOrderWidget = props => {\n\n const {callback} = props;\n\n const [courses, setCourses] = useState(null);\n useEffect(() => {\n if(!courses){\n const cart = CartService.get();\n if(cart){\n setCourses(cart.items);\n }\n }\n }, []);\n\n const removeCourse = async (id)=>{\n const cart = await CartService.removeItem(id);\n setCourses(cart.items);\n callback();\n }\n\n const renderOrderSumary = () => {\n if (!courses) {\n return \"\";\n }\n\n const columns = [\n {\n dataField: \"preview\",\n text: \"Preview\",\n sort: false,\n headerAlign: \"left\",\n align: \"left\"\n },\n {\n dataField: \"name\",\n text: \"Name\",\n sort: false,\n headerAlign: \"left\",\n align: \"left\"\n },\n {\n dataField: \"price\",\n text: \"Price\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"left\",\n formatter: (cellContent, row) => {\n return (\n
\n ${row.price}\n removeCourse(row.id)}\n >\n \n \n
\n );\n }\n }\n ];\n\n const coursesData = courses.map(course => {\n let unit = course.type === \"UNIT\" ? UnitService.get(course._id) : LectureService.get(course._id);\n const thumbnail = () => {\n return (\n \n );\n };\n return {\n id: course._id,\n preview: thumbnail(),\n name: unit.title,\n price: course.price\n };\n });\n\n return (\n \n {props => (\n
\n \n
\n )}\n
\n );\n };\n\n return (\n
\n
\n
\n Your shopping cart ({courses ? courses.length : 0} items)\n
\n
{renderOrderSumary()}
\n
\n \n
\n );\n};\n\nexport default BookstoreCartOrderWidget;\n","import React from \"react\";\nimport { useState } from \"react\";\nimport { Button, Form, FormControl, InputGroup } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport CartService from \"./../../../../services/CartService\";\nimport \"./bookstore.css\";\n\nconst BookstoreCartSummaryWidget = props => {\n const { cart, callback } = props;\n const history = useHistory();\n\n const [promoCode, setPromoCode] = useState(\"\");\n\n const applyPromo = async ()=>{\n if(!promoCode || promoCode === \"\"){return;}\n\n const cart = await CartService.applyPromo(promoCode);\n callback();\n }\n\n const orderSummaryCheckout = async () => {\n await CartService.checkout();\n history.push({\n pathname: DeepLinking.BOOKSTORE_CHECKOUT_VIEW_PATH\n });\n };\n return (\n
\n
Order Summary
\n
\n
\n Items\n {cart.items.length}\n
\n
\n Have a promo code?\n
\n \n setPromoCode(e.target.value)} placeholder=\"Type it here\" />\n \n applyPromo()}\n >\n Apply\n \n
\n
\n
\n Subtotal\n ${cart.subtotal}\n
\n
\n Discounts\n ${cart.discount}\n
\n
\n Taxes\n ${cart.taxes}\n
\n
\n Total\n ${cart.total}\n
\n
\n orderSummaryCheckout()}\n >\n Checkout\n \n
\n
\n
\n );\n};\n\nexport default BookstoreCartSummaryWidget;\n","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport BookstoreCartOrderWidget from \"./BookstoreCartOrderWidget\";\nimport BookstoreCartSummaryWidget from \"./BookstoreCartSummaryWidget\";\nimport Header from \"../../../widgets/header/Header\";\nimport Breadcrumb from \"react-bootstrap/Breadcrumb\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport CartService from \"./../../../../services/CartService\";\nimport \"./bookstore.css\";\n\nconst BookstoreCartView = props => {\n const history = useHistory();\n\n const [cart, setCart] = useState(null);\n const [render, setRender] = useState(0);\n\n\n useEffect(() => {\n\n setCart(CartService.get());\n\n },[render])\n\n if(!cart){\n setCart(CartService.get());\n }\n\n const renderUpdate =()=>{\n setRender(render + 1);\n }\n\n const goToPlans = () => {\n history.push(DeepLinking.PLAN_VIEW_PATH);\n };\n return (\n
\n
\n
\n \n \n Shopping cart\n \n Check out\n Confirmation\n \n
\n renderUpdate()}/>\n
\n renderUpdate()}/>\n
\n
Get unlimited access by subscribing to our monthly plan
\n goToPlans()}\n variant=\"light\"\n className=\"w-75 font-weight-bold mt-3\"\n >\n View plans\n \n
\n
\n
\n \n {\" \"}\n Continue browsing\n \n
\n
\n );\n};\n\nexport default BookstoreCartView;\n","import React, { useState, useEffect } from \"react\";\nimport CartService from \"./../../../../services/CartService\";\nimport UnitService from \"./../../../../services/UnitService\";\nimport LectureService from \"./../../../../services/LectureService\";\nimport \"./bookstore.css\";\n\nconst BookstorePaymentWidget = props => {\n\n const [courses, setCourses] = useState(null);\n\n const [cart, setCart] = useState(null);\n useEffect(() => {\n if(!courses){\n const cart = CartService.get();\n if(cart){\n setCourses(cart.items);\n setCart(cart);\n }\n }\n }, []);\n\n const orderSumary = () => {\n if(!courses){\n return;\n }\n return courses.map((course, index) => {\n let unit = course.type === \"UNIT\" ? UnitService.get(course._id) : LectureService.get(course._id);\n return (\n
\n {unit.title}\n ${course.price}\n
\n );\n });\n };\n\n return (\n
\n
\n
Order Summary
\n
{orderSumary()}
\n
\n
\n Total\n ${cart ? cart.total : 0}\n
\n
\n );\n};\n\nexport default BookstorePaymentWidget;\n","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport BookstorePaymentWidget from \"./BookstorePaymentWidget\";\nimport PaymentMethodsWidget from \"../payment/PaymentMethodsWidget\";\nimport SubscriptionService from \"../../../../services/SubscriptionService\";\nimport Header from \"../../../widgets/header/Header\";\nimport Breadcrumb from \"react-bootstrap/Breadcrumb\";\nimport { useHistory } from \"react-router-dom\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport \"./bookstore.css\";\n\nconst BookstorePaymentView = props => {\n const { planId } = props;\n\n const history = useHistory();\n\n const [plan, setPlan] = useState(null);\n\n useEffect(() => {\n const getPlan = async () => {\n setPlan(await SubscriptionService.get(planId));\n };\n getPlan();\n }, []);\n\n const paidConfirmationPlan = () => {\n history.push({\n pathname: DeepLinking.BOOKSTORE_CONFIRMATION_VIEW_PATH\n });\n };\n return (\n
\n
\n
\n \n Shopping cart\n \n Check out\n \n Confirmation\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default BookstorePaymentView;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAABlBAMAAAA4xPUZAAAAG1BMVEViYmY3OUDIycnz8/MkKDJDREqRkZF+foAAAAJdoFu3AAABE0lEQVR4Ae3UMWvzMBAGYJkkpzUCmexf/ogFMlltvtpdz4OUVRnky9hO7c9utXW2NbTwvhxoOR4k0J1qTNVclavq2YMyvxkECBAgQIAAAQIECBAgQICuMtg2lcFu8da5Uva7yo3L4e12MCTRuZPjRVQnjWmleZVJZNwORuI4q7BqJh3MnJgoR3psB/njSWfF6Z1FsSU7DDqFt7ADvD1pvnPyaZVstfOrpNAHtwfU1PJ6ZumzoSbxLfNtMdvAtlvKk+fIlzvPMZtLZIopxuPmfzhOpU6TmrgvjcPL+TTwae/oOUvrw/jSbqzrs9s/y736gbQ1loP/w+sLIECAAAECBAgQIECAAKeqGQ/qs27+q391c/0CiO9+Kw43O3cAAAAASUVORK5CYII=\"","import React from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport AvatarBackupImage from \"./../../../../images/holder.png\";\nimport \"./bookstore.css\";\n\nconst BookstoreReviewsRow = props => {\n const { courseReview } = props;\n\n const review = [{ thumbnail: \"\" }];\n\n return(\n
\n
\n
{courseReview.reviewerFullname}
\n
\n {courseReview.hasPremiumPlan === true ? \n Premium\n : \"\"}\n {/*\n 15 lectures\n */}\n
\n
\n
\n
\n \n {courseReview.comment}\n \n
\n )\n \n \n};\n\nexport default BookstoreReviewsRow;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport CacheService from \"./CacheService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\nimport LimespringUtils from \"./../utils/LimespringUtils\";\n\nexport default {\n\n getAllFromRemote: async () => {\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_INSTRUCTORS_ENDPOINT);\n if(response && response.status === 200) { \n const { instructors } = response.data;\n return instructors;\n } \n return [];\n },\n\n getAll: () => {\n return LocalStorageService.get(\"instructors\") || [];\n },\n\n get: id => {\n return LocalStorageService.get(\"instructors\").find(\n instructor => instructor._id === id\n );\n },\n\n getByIdsFromRemote: async (ids) => {\n const response = await new ApiService().get(ApiPath.GET_INSTRUCTORS_BY_IDS_ENDPOINT.replace(':ids', ids));\n if(response && response.status === 200) { \n const { instructors } = response.data;\n return instructors;\n } \n return [];\n },\n\n getByIds: ids => {\n if (!ids) {\n return [];\n }\n let instructors = ids.map(id => {\n return LocalStorageService.get(\"instructors\").find(\n instructor => instructor._id === id\n );\n });\n\n instructors = instructors.filter(i => {\n return i != null;\n });\n\n return instructors;\n },\n\n getSchoolInstructors: schoolId => {\n const allInstructors = LocalStorageService.get(\"instructors\");\n const schoolInstructors = allInstructors.filter(instructor => {\n return instructor.schools.includes(schoolId);\n });\n\n return schoolInstructors || [];\n },\n\n getInstructorNames: instructors => {\n if(!instructors || instructors.length === 0) { return 'No Instructor Assigned' }\n return instructors\n .map(instructor => {\n return LimespringUtils.getUserFullName(instructor);\n })\n .reduce((prev, curr) => [prev, \", \", curr]);\n },\n\n getInstructorEmails: instructors => {\n if(!instructors || instructors.length === 0) { return 'No Instructor Assigned' }\n //remove duplicates\n instructors = [...new Set(instructors)];\n\n return instructors\n .map(instructor => {\n return instructor.email;\n })\n .reduce((prev, curr) => [prev, \",\", curr]);\n },\n\n regenerateCredentials: async (id, payload) => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.updatePassword());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_PASSWORD_ENDPOINT.replace(\":id\", id),\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `InstructorService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n create: async payload => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.createInstructor());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.CREATE_INSTRUCTOR_ENDPOINT,\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `InstructorService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n update: async (id, payload) => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.updateInstructor());\n }\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_INSTRUCTOR_ENDPOINT.replace(\":id\", id),\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `InstructorService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n remove: async id => {\n if (Config.mockAPI) {\n return ResponseUtil.isOK(await MockService.removeInstructor());\n }\n try {\n let response = await new ApiService().delete(\n ApiPath.REMOVE_INSTRUCTOR_ENDPOINT.replace(\":id\", id)\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `InstructorService | Error while attempting to remove instructor. response: ${error}`\n );\n return false;\n }\n }\n};\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\n\nexport default {\n getAll: async () => {\n return await MockService.getProductReviews();\n },\n\n get: async id => {\n const productReviews = await MockService.getProductReviews();\n return productReviews.find(pr => pr.productId === id);\n }\n};\n","import React from \"react\";\n\nconst LikeIcon = props => {\n const { width, height } = props;\n\n return (\n \n \n \n );\n};\n\nexport default LikeIcon;\n","import React from \"react\";\n\nconst SmileEmojiIcon = props => {\n const { width, height } = props;\n\n return (\n \n \n \n \n \n );\n};\n\nexport default SmileEmojiIcon;\n","import React from \"react\";\n\nconst BadgeCCIcon = props => {\n const { width, height } = props;\n\n return (\n \n \n \n \n );\n};\n\nexport default BadgeCCIcon;\n","import React from \"react\";\n\nconst LevelIcon = props => {\n const { width, height } = props;\n\n return (\n \n \n \n );\n};\n\nexport default LevelIcon;\n","import React, { useState, useEffect } from \"react\";\nimport { Button, Tab, Tabs } from \"react-bootstrap\";\nimport BookstoreReviewsRow from \"./BookstoreReviewsRow\";\nimport BookstoreService from \"../../../../services/BookstoreService\";\nimport InstructorService from \"../../../../services/InstructorService\";\nimport ProductReviewService from \"../../../../services/ProductReviewService\";\nimport LectureService from \"../../../../services/LectureService\";\nimport VideoTimeUtils from \"./../../../../utils/VideoTimeUtils\";\nimport LimespringUtils from \"./../../../../utils/LimespringUtils\";\nimport Header from \"../../../widgets/header/Header\";\nimport Breadcrumb from \"react-bootstrap/Breadcrumb\";\nimport AvatarBackupImage from \"./../../../../images/holder.png\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport LikeIcon from \"./../../../widgets/icons/LikeIcon\";\nimport SmileEmojiIcon from \"./../../../widgets/icons/SmileEmojiIcon\";\nimport BadgeCCIcon from \"./../../../widgets/icons/BadgeCCIcon\";\nimport LevelIcon from \"./../../../widgets/icons/LevelIcon\";\nimport ThumbnailBackupImage from \"./../../../../images/default_video_thumbnail.png\";\nimport { useHistory } from \"react-router-dom\";\nimport \"./bookstore.css\";\n\nconst BookstoreDetailsView = props => {\n const { courseId } = props;\n\n const history = useHistory();\n\n const bookstoreLibraryTile = [{ thumbnail: \"\" }];\n\n const tempLecture = \"\";\n\n const [course, setCourse] = useState(null);\n\n const [courseReviews,setCourseReviews] = useState(null);\n\n useEffect(() => {\n const getBookstore = async () => {\n \n setCourse(await BookstoreService.getById(courseId));\n setCourseReviews(await ProductReviewService.get(courseId));\n };\n getBookstore();\n }, []);\n const renderCourseDetail = () => {\n const unitContent = () => {\n return course.content.map((content, index) => {\n return (\n
\n {\" \"}\n {content.quantity} {content.title}\n
\n );\n });\n };\n\n const unitTopics = () => {\n return course.topics.map((topic, index) => {\n return (\n
\n {\" \"}\n {topic.text}\n
\n );\n });\n };\n\n const unitLectures = () => {\n return course.lectures.map((_lecture, index) => {\n let lecture = LectureService.get(_lecture);\n return (\n
\n {\" \"}\n {lecture ? lecture.title: \"\"}\n
\n );\n });\n };\n\n const renderInstructor = () => {\n return course.instructors.map((_instructor, index) => {\n const instructor = InstructorService.get(_instructor);\n let fullName = instructor ? LimespringUtils.getUserFullName(instructor) : \"N/A\";\n return (\n \n \n {fullName}\n \n );\n });\n };\n \n const populateBookstoreReviews = () => {\n return courseReviews.reviews.map((courseReview, index) => {\n return (\n \n );\n });\n };\n\n return (\n
\n
\n
\n \n LS Bookstore\n Units\n {course.title}\n \n View details\n \n \n
\n
\n

{course.title}

\n \n {renderInstructor()}\n
\n
\n
\n {courseReviews ? courseReviews.views : \"0\"} views\n
\n
\n {courseReviews ? courseReviews.reviews.length : \"0\"} reviews\n
\n
\n \n {VideoTimeUtils.formatVideoTime(course.length)}\n
\n
\n
\n \n 17\n lectures\n \n \n Ask\n questions, anytime\n \n \n 13 support\n resources\n \n \n Available from\n the app\n \n \n Online and at your\n own pace\n \n \n Audio:\n English\n \n \n Spanish, Portuguese,\n French\n \n \n Test your\n knowledge\n \n \n Level: Begginer\n \n
\n \n
\n \n \n \n
\n
\n Unit Description\n
\n

{course.description}

\n
\n
\n
Unit Content
\n
\n
\n {unitContent()}\n
\n
\n
\n
\n
\n What you’ll learn\n
\n
\n
\n {course.topics !== \"\"\n ? unitTopics()\n : \"No info to show\"}\n
\n
\n
\n
\n
Unit Lectures
\n
\n
\n {course.lectures !== \"\"\n ? unitLectures()\n : \"No info to show\"}\n
\n
\n
\n
\n ${course.price}\n paymentCompleteHandler()}\n >\n + Add to cart\n \n
\n
\n \n {courseReviews ? populateBookstoreReviews() : \"No info to show\"}\n \n \n
\n
\n
\n

${course.price}

\n paymentCompleteHandler()}\n >\n + Add to cart\n \n
\n \n 17\n lectures\n \n \n Ask\n questions, anytime\n \n \n 13 support\n resources\n \n \n Available from\n the app\n \n \n Online and at your\n own pace\n \n \n Audio:\n English\n \n \n Spanish, Portuguese,\n French\n \n \n Test your\n knowledge\n \n \n Level: Begginer\n \n
\n
\n
\n
\n \n );\n };\n\n return course ? renderCourseDetail() : \"\";\n};\n\nexport default BookstoreDetailsView;\n","import React, { useEffect } from \"react\";\nimport Header from \"../../../widgets/header/Header\";\nimport \"./maintenance.css\";\n\nconst MaintenanceView = () => {\n\n useEffect(() => {\n document.title = 'LimeSpring Portal - Maintenance';\n \n }, []);\n\n return (\n
\n \n
\n
\n
\n

Sorry! We’re currently
\n under maintenance.

\n

Our team is working hard on the issue,
please come back soon!

\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default MaintenanceView;\n","import React, { useState } from 'react';\nimport './accessibility-toolbar.css';\n\nconst AccessibilityToolbar = (props) => {\n\n const { show=false } = props;\n\n const [fontSize, setFontSize] = useState(16);\n const [expanded, setExpanded] = useState(0);\n\n const zoom = (entry) => {\n let newFontSize = fontSize;\n \n if(entry === '+') {\n newFontSize = fontSize + 1; \n }else if(entry === '-'){\n newFontSize = fontSize - 1;\n }\n setFontSize(newFontSize);\n document.getElementsByTagName('body')[0].style.fontSize = `${newFontSize}px`;\n }\n\n //cannot use body tag due to Chrome issue with css filter (adds space on top)\n const invert = () => {\n const htmlTag = document.getElementsByTagName('html')[0];\n if(htmlTag.classList.contains(\"invert-contrast\")){\n htmlTag.classList.remove('invert-contrast');\n }else{\n htmlTag.className = '';\n htmlTag.classList.add('invert-contrast');\n }\n }\n\n const contrastAndBrightness = (setting) => {\n const htmlTag = document.getElementsByTagName('html')[0];\n\n //check if already added\n if(setting === 'low') {\n if(htmlTag.classList.contains('invert-contrast-low-brightness')){\n htmlTag.className = '';\n return;\n }\n }\n\n if(setting === 'gray') {\n if(htmlTag.classList.contains('contrast-grayscale')){\n htmlTag.className = '';\n return;\n }\n }\n\n if(setting === 'high') {\n if(htmlTag.classList.contains('invert-contrast-high-brightness')){\n htmlTag.className = '';\n return;\n }\n }\n \n htmlTag.className = '';\n\n if(setting === 'low'){\n htmlTag.classList.add('invert-contrast-low-brightness');\n } else if(setting === 'gray'){\n htmlTag.classList.add('contrast-grayscale');\n } else if(setting === 'high'){\n htmlTag.classList.add('invert-contrast-high-brightness');\n }\n }\n\n const showDyslexiaFont = () => {\n const bodyTag = document.getElementsByTagName('body')[0];\n if(bodyTag.classList.contains('dyslexic')){\n bodyTag.classList.remove('dyslexic');\n }else{\n bodyTag.classList.add('dyslexic');\n }\n }\n\n return (\n
\n
\n
zoom(\"+\")}>
\n
zoom(\"-\")}>
\n
invert()}>
\n
contrastAndBrightness('gray')}>
\n
contrastAndBrightness('low')}>
\n
contrastAndBrightness('high')}>
\n
showDyslexiaFont()}>
\n
\n
setExpanded(expanded === 1 ? 0 : 1)}>
\n
\n );\n}\n \nexport default AccessibilityToolbar;","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from \"./LocalStorageService\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\n\nexport default {\n\n getAllFromRemote: async () => {\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_ASSETS_ENDPOINT);\n if(response && response.status === 200) { \n const { assets } = response.data;\n return assets;\n } \n return [];\n },\n\n getAllFromRemoteAndStore: async () => {\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_ASSETS_ENDPOINT);\n if(response && response.status === 200) { \n const { assets } = response.data;\n LocalStorageService.store({ assets: assets });\n } \n },\n\n getAll: () => {\n return LocalStorageService.get(\"assets\");\n },\n\n get: id => {\n const assets = LocalStorageService.get(\"assets\");\n return assets? assets.find(asset => asset._id === id): null;\n },\n\n getFromRemote: async (id) => {\n try {\n let response = await new ApiService().get(ApiPath.GET_ASSET_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { asset } = response.data;\n return asset;\n } else {\n return null;\n }\n } catch (error) {\n console.error(\n `AssetService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n getFromRemoteAnonymous: async (id, token) => {\n try {\n let response = await new ApiService().get(ApiPath.GET_ASSET_ANONYMOUS_ENDPOINT.replace(':id', id).replace(':token', token));\n if (ResponseUtil.isOK(response)) {\n const { asset } = response.data;\n return asset;\n } else {\n return null;\n }\n } catch (error) {\n console.error(\n `AssetService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n getByIds: ids => {\n const allAssets = LocalStorageService.get(\"assets\");\n return ids.map(id => {\n return allAssets.find(asset => {\n return asset._id === id;\n });\n });\n },\n\n getLatest: () => {\n const assets = LocalStorageService.get(\"assets\");\n if (!assets || assets.length === 0) {\n return null;\n }\n return assets[0];\n },\n\n create: async payload => {\n\n try {\n let response = await new ApiService().upload(\n ApiPath.CREATE_ASSET_ENDPOINT,\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `AssetService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n update: async (id, payload) => {\n try {\n let response = await new ApiService().post(\n ApiPath.UPDATE_ASSET_ENDPOINT.replace(\":id\", id),\n payload\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `AssetService | Error while attempting to get response: ${error}`\n );\n return false;\n }\n },\n\n remove: async id => {\n try {\n let response = await new ApiService().delete(\n ApiPath.REMOVE_ASSET_ENDPOINT.replace(\":id\", id)\n );\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(\n `AssetService | Error while attempting to remove response: ${error}`\n );\n return false;\n }\n }\n};\n","export default {\n\n isNotNullOrEmpty: (arr) => {\n if(arr === null || arr === undefined) { return false;}\n if(arr.length <= 0) { return false;}\n return true;\n },\n getAsSets: (input, limit) => {\n if(!input || input.length === 0) { return 0; }\n if(!limit || limit === 0) { return 0; }\n const numberOfSets = Math.ceil(input.length/limit);\n let sets = [];\n for (let i = 0; i < numberOfSets; i++) {\n const set = [];\n for (let j = i * limit; j < (i * limit + limit) ; j++) {\n if(input[j]){ set.push(input[j]) };\n } \n sets.push(set);\n }\n return sets;\n },\n\n addInFrontOrReplaceEntry: (arr, item) => {\n const index = arr.findIndex(a => a._id === item._id);\n if(~index){\n arr[index] = item;\n }else{\n arr.unshift(item);\n }\n return arr;\n },\n\n isAllObjects: (arr) => {\n return arr.every(item => typeof item === 'object' && item !== null)\n }\n}","import LocalStorageService from \"./LocalStorageService\";\nimport LectureService from './LectureService';\nimport ProfileService from './ProfileService';\nimport CourseService from \"./CourseService\";\nimport ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport ArrayUtils from \"../utils/ArrayUtils\";\n\nexport default {\n\n getFromRemoteForStudentId: async (studentId) => {\n const response = await new ApiService().get(ApiPath.GET_LOG_FOR_STUDENT_ENDPOINT.replace(':studentId', studentId));\n if(response && response.status === 200) { \n const { logs } = response.data;\n return logs;\n } \n return [];\n },\n\n get: () => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n if(!logs || logs.length === 0) { return null; }\n return logs.find(log => { return log.userId === profile._id });\n },\n\n getFullUnitLog: (playlist) => {\n\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n if(!logs || logs.length === 0) { return null; }\n const log = logs.find(log => { return log.userId === profile._id });\n\n const unit = playlist.getUnit();\n const lectures = playlist.getLectures();\n\n //get unit log\n let unitLogs = log.units;\n let unitlog = unitLogs.find(unitLog => unitLog._id === unit._id);\n\n //get lecture logs\n const lectureids = unit.lectures;\n let lectureLogs = log.lectures;\n let lecturelogs = lectureLogs.filter(lectureLog => lectureids.find(id => id === lectureLog._id) );\n\n //get unit-level assessments logs\n const assessmentids = unit.assessments.map(a => { return a._id} );\n let assessmentLogs = log.assessments;\n let assessmentslogs = assessmentLogs.filter(assessmentLog => assessmentids.find(id => id === assessmentLog._id) );\n\n //get lecture-level assessments logs\n let quizzes = lectures.map((lecture) => { return lecture.assessments });\n let quizIds = [].concat.apply([], quizzes);\n let quizzeslogs = assessmentLogs.filter(assessmentLog => quizIds.find( id => id === assessmentLog._id ));\n \n //join all assessments (WB/BE/QUIZ)\n assessmentslogs = assessmentslogs.concat(quizzeslogs);\n\n return { unitlog: unitlog, lecturelogs: lecturelogs, assessmentslogs: assessmentslogs};\n },\n\n getLogForClass: classId => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = logs.find(log => { return log.userId === profile._id });\n if(!log) {return null;}\n let classLogs = log.classes;\n return classLogs.find(classLog => classLog._id === classId);\n },\n\n getIsStartOn: classId => {\n const isStartOn = LocalStorageService.get(\"isStartOn\"); \n return isStartOn===null? true : isStartOn;\n },\n\n getStartOn: classId => {\n const _startOn = LocalStorageService.get(\"startOn\"); \n return _startOn;\n },\n\n getLogForUnit: unitId => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = logs.find(log => { return log.userId === profile._id });\n let unitLogs = log.units;\n return unitLogs.find(unitLog => unitLog._id === unitId);\n },\n\n getLogForLecture: id => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = logs.find(log => { return log.userId === profile._id });\n let lectureLogs = log.lectures;\n return lectureLogs.find(lectureLog => lectureLog._id === id);\n },\n\n getLogForLectures: ids => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = logs.find(log => { return log.userId === profile._id });\n let lectureLogs = log.lectures;\n return lectureLogs.filter(lectureLog => ids.find(id => id === lectureLog._id) );\n },\n\n getLogForAssessments: ids => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = logs.find(log => { return log.userId === profile._id });\n let assessmentLogs = log.assessments;\n return assessmentLogs.filter(assessmentLog => ids.find(id => id === assessmentLog._id) );\n },\n\n getLogForMarkers: ids => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = logs.find(log => { return log.userId === profile._id });\n let markersLogs = log.markers;\n return ids.map(id => { return markersLogs.find(markersLog => markersLog._id === id)});\n },\n\n getLogForLikes: () => {\n const logs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = logs.find(log => { return log.userId === profile._id });\n return log.likes;\n },\n\n getLogForGradebook: _class => {\n\n if(!_class) { return {};}\n const allLogs = LocalStorageService.get(\"logs\");\n const profile = ProfileService.get();\n const log = allLogs.find(log => { return log.userId === profile._id });\n\n //get class log\n const classLog = log.classes.find(classLog => classLog._id === _class._id);\n\n //build full unit log (unit + lectures + assessments)\n const courses = CourseService.getByIds(_class.courses);\n let units = [];\n courses.forEach(course => units = units.concat(course.units));\n units = units.concat(_class.units);\n \n const unitLogs = log.units;\n const lectureLogs = log.lectures;\n const assessmentLogs = log.assessments;\n\n const logs = units.map((classUnit) => { \n \n let lectureIds = classUnit.lectures;\n if(classUnit.lectures && ArrayUtils.isAllObjects(classUnit.lectures)){\n lectureIds = classUnit.lectures.map(l => {return l._id});\n }\n const unitLectures = LectureService.getByIds(lectureIds);\n let unitAssessments = classUnit.assessments;\n \n const unitlog = unitLogs.find(unitLog => unitLog._id === classUnit._id);\n\n const lectureslog = unitLectures.map((unitLecture) => {\n const unitLectureAssessmentIds = unitLecture.assessments.map(a => a._id);\n const assessmentslog = assessmentLogs.filter(assessmentLog => {\n return unitLectureAssessmentIds.find(uaid => assessmentLog._id === uaid);\n });\n const lecturelogs = lectureLogs.find(lectureLog => lectureLog._id === unitLecture._id);\n\n return { lecture: lecturelogs, assessments: assessmentslog};\n });\n \n const assessmentslog = unitAssessments ? unitAssessments.map((unitAssessment) => {\n return assessmentLogs.find(assessmentLog => assessmentLog._id === unitAssessment._id);\n }): [];\n\n return {unit: unitlog, lectures: lectureslog, assessments: assessmentslog}; \n });\n return {classlog: classLog, unitlogs: logs};\n },\n\n resetAssessmentLog: async (logId, assessmentId) => {\n const response = await new ApiService().get(ApiPath.RESET_LOG_ENDPOINT.replace(':id', logId).replace('assessmentId', assessmentId));\n if(response && response.status === 200) {\n return true;\n } \n return false;\n }\n};\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n \n getAll: () => {\n return LocalStorageService.get(\"markers\");\n },\n\n get: id => {\n return LocalStorageService.get(\"markers\").find(\n marker => marker._id === id\n );\n },\n\n getByIds: ids => {\n const allmarkers = LocalStorageService.get(\"markers\");\n const markers = ids.map(id => { return allmarkers.find(marker => marker._id === id)});\n if(!markers || markers.length === 0) {return []}\n const cleanedMarkers = markers.filter(mk => mk !== null && mk !== undefined);\n return cleanedMarkers.sort((a,b) => { return b.cuePoint > a.cuePoint});\n },\n\n getLatest: () => {\n return LocalStorageService.get(\"markers\")[0];\n },\n\n getByIdsFromRemote: async (ids) => {\n const response = await new ApiService().get(ApiPath.GET_MARKERS_BY_IDS_ENDPOINT.replace(':ids', ids));\n if(response && response.status === 200) { \n const { markers } = response.data;\n return markers;\n } \n return [];\n },\n\n create: async (payload) => {\n try { \n let response = await new ApiService().post(ApiPath.CREATE_MARKER_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n const { marker } = response.data;\n return marker;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`MarkerService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n update: async (id, payload) => {\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_MARKER_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n const { markers } = response.data;\n return markers;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`MarkerService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n remove: async (id) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.removeMarker()); }\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_MARKER_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`MarkerService | Error while attempting to remove marker. response: ${error}`);\n return false;\n }\n }\n};\n","export default class VideoTrack {\n\n constructor(lectureId, status=\"PENDING\", playbackTime=\"0\", markers=[], events=[]){\n this.lectureId = lectureId;\n this.status = status;\n this.playbackTime = playbackTime;\n this.markers = markers;\n this.events = events;\n }\n\n getLectureId(){\n return this.lectureId;\n }\n\n setLectureId(lectureId){\n this.lectureId = lectureId;\n }\n\n getStatus(){\n return this.status;\n }\n\n setStatus(status){\n this.status = status;\n }\n\n getPlaybackTime(){\n return this.playbackTime;\n }\n\n setPlaybackTime(playbackTime){\n this.playbackTime = playbackTime;\n }\n\n getEvents(){\n return this.events;\n }\n\n setEvents(events){\n this.events = events;\n }\n\n getMarkers(){\n return this.markers;\n }\n\n setMarkers(markers){\n this.markers = markers;\n }\n}","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\nimport VideoTrack from \"../models/VideoTrack\";\n\nexport default {\n\n trackClass: async (id, payload) => {\n \n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.trackClass()); }\n\n try { \n let response = await new ApiService().post(ApiPath.TRACKER_CLASS_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n const { logs } = response.data;\n LocalStorageService.store({ logs: logs });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`TrackService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n \n trackUnit: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.trackUnit()); }\n try { \n let response = await new ApiService().post(ApiPath.TRACKER_UNIT_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n const { logs } = response.data;\n LocalStorageService.store({ logs: logs });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`TrackService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n trackLecture: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.trackLecture()); }\n try { \n let response = await new ApiService().post(ApiPath.TRACKER_LECTURE_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n const { logs } = response.data;\n LocalStorageService.store({ logs: logs });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`TrackService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n trackMarker: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.trackMarker()); }\n try { \n let response = await new ApiService().post(ApiPath.TRACKER_MARKER_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n const { logs } = response.data;\n LocalStorageService.store({ logs: logs });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`TrackService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n trackAssessment: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.trackAssessment()); }\n try { \n let response = await new ApiService().post(ApiPath.TRACKER_ASSESSMENT_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n const { timers } = response.data;\n return timers;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`TrackService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n createOrUpdateVideoProgressTrack: (lectureId, playbackTime, status, markers, events) => {\n let videotracks = LocalStorageService.get('videotracks');\n if(!videotracks){ videotracks = []; }\n let videotrack = videotracks.find(v => v.lectureId === lectureId);\n if(!videotrack){\n videotrack = new VideoTrack(lectureId, status, playbackTime, markers ? markers : [], events);\n videotracks.push(videotrack);\n } else {\n videotrack.playbackTime = playbackTime;\n videotrack.status = status;\n videotrack.markers = markers ? markers : videotrack.markers;\n videotrack.events = events;\n }\n LocalStorageService.store({videotracks: videotracks})\n\n },\n\n getVideoProgressTrack: (lectureId) => {\n let videotracks = LocalStorageService.get('videotracks');\n if (!videotracks) return null;\n return videotracks.find(v => v.lectureId === lectureId) || null;\n},\n\n\n getVideoProgressTracksByIds: (lectureIds) => {\n let videotracks = LocalStorageService.get('videotracks');\n return lectureIds.map(lectureId => videotracks.find(videotrack => videotrack.lectureId === lectureId));\n },\n\n resetVideoProgressTracks: (lectureId) => {\n let videotracks = LocalStorageService.get('videotracks');\n if(!videotracks) return null;\n const vt = videotracks.find(v => v.lectureId === lectureId);\n if(vt && vt.markers && vt.markers.length > 0){\n vt.markers.map(m => m.status = 'PENDING');\n LocalStorageService.store({videotracks: videotracks})\n }\n }\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport YouTube from 'react-youtube';\nimport { Spinner } from 'react-bootstrap';\nimport \"./limespring-video-player.css\";\nimport AssetService from \"./../../../services/AssetService\";\nimport StudentLogService from \"./../../../services/StudentLogService\";\nimport AssessmentService from \"./../../../services/AssessmentService\";\nimport MarkerService from \"./../../../services/MarkerService\";\nimport TrackerService from \"./../../../services/TrackService\";\n import DeepLinking from \"./../../../utils/DeepLinking\";\n import Config from \"./../../../config/Config\"\n\nconst YouTubeVideoPlayer = props => {\n\nconst { isStudentView=false, showsYouTubeVideoUrl=true, onChangeThumbnail= () => {}, \n onSetYoutubeDuration= () => {}, onSetYoutubeUrl=() => {}, youtubeVideoUrl=\"\", youtubeThumbnailUrl= \"\", \n markers=[], history, classId, unit, lecture, autoplay=false, stop=false, onTimeUpdate} = props;\n const [videoUrl, setVideoUrl] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [thumbnailUrl, setThumbnailUrl] = useState('');\n const youtubePlayerRef = useRef(null);\n const [videoDuration, setVideoDuration] = useState(null);\n const [currentMarker, setCurrentMarker] = useState(null);\n const [youtubePlayer, setYoutubePlayer] = useState(null);\n const [overlays, setOverlays] = useState([]);\n const [data, setData] = useState({markers:[], overlays:[], ready: false, isStartOn: true});\n\n const [lectureLog, setLectureLog] = useState(null);\n\n const [lectureLoaded, setLectureLoaded] = useState(false);\n const [videoUrlSet, setVideoUrlSet] = useState(false);\n const [dataPrepared, setDataPrepared] = useState(false);\n const [playerReady, setPlayerReady] = useState(false);\n\n const lastMarkerCheckRef = useRef(0);\n const isYoutubePlayingRef = useRef(false);\n\n const intervalIdRef = useRef(null);\n\n useEffect(() => {\n if (stop) {\n if(youtubePlayer){ \n youtubePlayer.pauseVideo() \n };\n }\n }, [stop]);\n\n useEffect(() => {\n if (!lecture || !isStudentView) return;\n setLectureLog(StudentLogService.getLogForLecture(lecture._id));\n const videoProgressTrack = TrackerService.getVideoProgressTrack(lecture._id);\n \n let lastCuePoint = 0; \n let videoProgressStatus = 'PENDING';\n\n if (videoProgressTrack) {\n videoProgressStatus = videoProgressTrack.status;\n lastCuePoint = videoProgressTrack.playbackTime || 0; \n }\n setVideoDuration(lastCuePoint);\n\n if(markers && markers.length>0) {\n if (markers && markers.length > 0) {\n const videoMarkers = markers.map(marker => {\n let asset = null;\n if(marker.asset && marker.asset !== \"\") asset = AssetService.get(marker.asset);\n if(!asset && marker.assessment && marker.assessment !== \"\") asset = AssessmentService.get(marker.assessment);\n if(!asset) return;\n return { id: marker._id, time: marker.cuePoint, text: asset.title, assessment: marker.assessment, asset: marker.asset, required: marker.required };\n });\n data.markers = videoMarkers;\n }\n \n //set overlays\n let overlays = [];\n if (markers) {\n markers.forEach(marker => {\n if (!marker.required) {\n //get the marker's asset\n let asset = null;\n if(marker.asset && marker.asset !== \"\") asset = AssetService.get(marker.asset);\n if(!asset && marker.assessment && marker.assessment !== \"\") asset = AssessmentService.get(marker.assessment);\n if(!asset) return;\n \n const text = marker.buttonText && marker.buttonText !== \"\" ? marker.buttonText : `Click to View ${asset.title}`;\n const start = marker.cuePoint;\n const end = marker.cuePoint + 8;\n \n if (!asset) { return false; }\n let isAssessment = asset.type === 'QUIZ' || asset.type === 'WORKBOOK' || asset.type === 'BOOKEXAM';\n \n const overlay = {\n align: \"bottom-right\",\n content: `${text}`,\n start: start,\n render: false,\n end: end\n };\n overlays.push(overlay);\n }\n });\n data.overlays = overlays;\n }\n \n data.classId = classId;\n data.lecture = lecture;\n data.unit = unit;\n data.ready = true;\n data.isStartOn = false; \n setData(data);\n }\n }, [lecture]);\n\n useEffect(() => {\n let _url = youtubeVideoUrl;\n if (!_url.includes('origin=')) {\n const originValue = Config.environmentConfig(Config.activeProfile).localURL;\n const separator = _url.includes('?') ? '&' : '?';\n _url += `${separator}origin=${encodeURIComponent(originValue)}`;\n }\n setVideoUrl(_url);\n setThumbnailUrl(youtubeThumbnailUrl);\n setVideoUrlSet(true); \n },[youtubeVideoUrl]);\n\n useEffect(() => {\n if (!lecture || !isStudentView) return;\n\n const lectureLog = StudentLogService.getLogForLecture(lecture._id);\n const _isStartOn = StudentLogService.getIsStartOn(null);\n\n setLectureLog(lectureLog);\n let _markers = markers;\n\n //set markers\n if (_markers && _markers.length > 0) {\n const videoMarkers = _markers.map(marker => {\n let asset = null;\n if(marker.asset && marker.asset !== \"\") asset = AssetService.get(marker.asset);\n if(!asset && marker.assessment && marker.assessment !== \"\") asset = AssessmentService.get(marker.assessment);\n if(!asset) return;\n return { id: marker._id, time: marker.cuePoint, text: asset.title, assessment: marker.assessment, asset: marker.asset, required: marker.required };\n });\n data.markers = videoMarkers;\n }\n\n //set overlays\n let overlays = [];\n if (_markers) {\n _markers.forEach(marker => {\n if (!marker.required && _isStartOn) {\n //get the marker's asset\n let asset = null;\n if(marker.asset && marker.asset !== \"\") asset = AssetService.get(marker.asset);\n if(!asset && marker.assessment && marker.assessment !== \"\") asset = AssessmentService.get(marker.assessment);\n if(!asset) return;\n\n const text = marker.buttonText && marker.buttonText !== \"\" ? marker.buttonText : `Click to View ${asset.title}`;\n const start = marker.cuePoint;\n const end = marker.cuePoint + 8;\n\n if (!asset) { return false; }\n let isAssessment = asset.type === 'QUIZ' || asset.type === 'WORKBOOK' || asset.type === 'BOOKEXAM';\n\n const overlay = {\n align: \"bottom-right\",\n content: `${text}`,\n start: start,\n end: end\n };\n overlays.push(overlay);\n }\n });\n data.overlays = overlays;\n }\n \n data.classId = classId;\n data.lecture = lecture;\n data.unit = unit;\n data.ready = true;\n data.isStartOn = _isStartOn===null ? true : _isStartOn; \n setData(data);\n setDataPrepared(true);\n }, []);\n\nconst delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));\n\nuseEffect(() => {\n if (autoplay && youtubePlayerRef && youtubePlayerRef.current) {\n youtubePlayerRef.current.internalPlayer.playVideo();\n } else if (youtubePlayerRef && youtubePlayerRef.current) {\n youtubePlayerRef.current.internalPlayer.pauseVideo();\n } \n if (!lecture || !isStudentView) return;\n if (!youtubePlayerRef || !youtubePlayerRef.current) return; \n\n const initializeUpdateCurrentTime = async () => {\n await delay(2000);\n let currTime = 0;\n setLectureLog(StudentLogService.getLogForLecture(lecture._id));\n if (lectureLog && youtubePlayerRef && youtubePlayerRef.current) {\n let videoProgressStatus = lectureLog.status;\n let cuePoint = 0;\n if(videoProgressStatus === 'PENDING' || videoProgressStatus === 'IN_PROGRESS'){\n let cuePoint = lectureLog.lastCuePoint;\n if (youtubePlayerRef.current && typeof youtubePlayerRef.current.seekTo === 'function') {\n youtubePlayerRef.current.seekTo(cuePoint); \n lastMarkerCheckRef.current = cuePoint; \n } else {\n lastMarkerCheckRef.current = cuePoint;\n }\n } else if(videoProgressStatus === 'COMPLETED'){\n youtubePlayerRef.current.seekTo(cuePoint); \n lastMarkerCheckRef.current = cuePoint;\n }\n \n \n } \n\n if(lastMarkerCheckRef.current === 0) {\n lastMarkerCheckRef.current = loadCuePoint();\n }\n\n const updateCurrentTime = () => {\n if (youtubePlayerRef && youtubePlayerRef.current && youtubePlayerRef.current.internalPlayer) {\n youtubePlayerRef.current.internalPlayer.getCurrentTime().then(_currentTime => {\n if (!isYoutubePlayingRef.current) return;\n const roundedTime = Math.round(_currentTime);\n onTimeUpdate(roundedTime);\n if (roundedTime !== currTime) {\n currTime = roundedTime;\n if (!data || !data.overlays || data.overlays.length === 0) {\n data.overlays = createOverlaysFromMarkers(markers);\n }\n TrackerService.trackLecture(lecture._id, { lastCuePoint: roundedTime, status: \"IN_PROGRESS\" });\n TrackerService.createOrUpdateVideoProgressTrack(lecture._id, roundedTime, \"IN_PROGRESS\", null, []);\n applyOverlaysToPlayer(youtubePlayerRef.current.internalPlayer, data.overlays, roundedTime);\n if (markers && markers.length > 0 && roundedTime > lastMarkerCheckRef.current) {\n lastMarkerCheckRef.current = roundedTime;\n const marker = markers.find(mk => Math.floor(mk.cuePoint) === roundedTime); \n if (marker && marker.required) {\n const videoTrack = TrackerService.getVideoProgressTrack(lecture._id);\n let markerTracks = null;\n if (videoTrack) {\n markerTracks = videoTrack.markers;\n if (markerTracks && markerTracks.length > 0) {\n let markerTrack = markerTracks.find(mt => mt.markerId === marker._id);\n if (markerTrack && markerTrack.status === \"VIEWED\") {\n return;\n } else {\n markerTrack.status = \"VIEWED\";\n }\n }\n } \n youtubePlayerRef.current.internalPlayer.pauseVideo();\n if (marker.assessment && marker.assessment !== \"\") {\n resetYoutubeVideo(roundedTime);\n history.push({ pathname: DeepLinking.STUDENT.QUIZ_VIEW_PATH.replace(\":id\", marker.assessment), state: { classId: classId, unit: unit, lecture: lecture, autoplay: false } }); \n } else if(marker.asset !== \"\"){\n const _asset = AssetService.get(marker.asset);\n if(!_asset) { return; }\n const data = _asset.url;\n if(!data) { return; }\n const type = _asset.type;\n if (type === \"WWW\" || type === \"IMAGE\") {\n openInNewTab(data);\n } else if (type === \"PDF\") {\n openInNewTab(`https://docs.google.com/viewer?url=${data}&embedded=false`);\n }\n else if (type === \"DOCX\" || type === \"XLSX\" || type === \"PPTX\") {\n openInNewTab(`https://view.officeapps.live.com/op/view.aspx?src=${data}`);\n }\n \n }\n }\n }\n }\n }).catch(error => {\n console.error(\"Error getting current time:\", error);\n });\n }\n };\n const intervalId = setInterval(updateCurrentTime, 1000);\n return () => clearInterval(intervalId);\n \n };\n initializeUpdateCurrentTime();\n}, [youtubePlayerRef.current]);\n\n const resetYoutubeVideo = (cuePoint) => {\n setLectureLoaded(null);\n setYoutubePlayer(null);\n lastMarkerCheckRef.current = 0;\n setLectureLoaded(false);\n setVideoUrlSet(false);\n setDataPrepared(false);\n setPlayerReady(false);\n setOverlays([]);\n saveCuePoint(cuePoint);\n };\n\n const loadCuePoint = () => {\n if (lecture && lecture._id) {\n const storedCuePoint = localStorage.getItem(`cuePoint_${lecture._id}`);\n return storedCuePoint ? JSON.parse(storedCuePoint) : 0;\n }\n return 0;\n };\n\n const saveCuePoint = (cuePoint) => {\n if (lecture && lecture._id) {\n localStorage.setItem(`cuePoint_${lecture._id}`, JSON.stringify(cuePoint));\n }\n };\n\n const openInNewTab = (url) => {\n const newWindow = window.open('', '_blank');\n if (newWindow) {\n newWindow.location = url;\n } else {\n alert('We attempted to open a new tab, but your browser is currently blocking this action. To continue, please allow pop-ups for this site.');\n }\n };\n \n const createOverlaysFromMarkers = (markers) => {\n return markers.map(marker => {\n\n let asset = null;\n if(marker.asset && marker.asset !== \"\") asset = AssetService.get(marker.asset);\n if(!asset && marker.assessment && marker.assessment !== \"\") asset = AssessmentService.get(marker.assessment);\n if(!asset) return;\n\n const text = marker.buttonText && marker.buttonText !== \"\" ? marker.buttonText : `Click to View ${asset.title}`;\n const start = marker.cuePoint;\n const end = marker.cuePoint + 8;\n\n if (!asset) { return false; }\n let isAssessment = asset.type === 'QUIZ' || asset.type === 'WORKBOOK' || asset.type === 'BOOKEXAM';\n return {\n align: \"bottom-right\",\n start: start,\n render:false,\n end: end + 8,\n content: `${text}`\n };\n });\n };\n\n\n const applyOverlaysToPlayer = async (player, _overlays, time) => {\n if (!player) return;\n try {\n const iframe = await player.getIframe();\n const durationVideo = await player.getDuration();\n\n let currentTop = -150;\n let currentBottom = 150;\n const verticalSpacing = 5;\n\n for (const overlay of _overlays) {\n if (overlay.start == time || (overlay.start < time && overlay.render===false)) {\n if (iframe && iframe.width && durationVideo > 0) {\n overlay.render = true;\n const elements = document.getElementsByClassName(`youtube-overlay`);\n const overlayDiv = document.createElement('div');\n overlayDiv.className = \"youtube-overlay vjs-overlay vjs-overlay-bottom-right vjs-overlay-background\";\n overlayDiv.style.position = 'relative';\n overlayDiv.style.cursor = 'pointer';\n overlayDiv.style.bottom = `${currentBottom}px`;\n overlayDiv.style.top = `${currentTop}px`;\n overlayDiv.style.right = '-64%'; \n overlayDiv.style.zIndex = '999';\n overlayDiv.style.fontSize = '1.5rem';\n overlayDiv.style.color = '#ffffff';\n overlayDiv.style.padding = '10px';\n overlayDiv.style.backgroundColor = 'rgba(139, 195, 74, 0.83)';\n overlayDiv.style.border = '1px solid #b3de81';\n overlayDiv.style.borderRadius = '5px';\n\n const playerWidth = iframe.offsetWidth;\n const { start, end, content } = overlay;\n const duration = end - start;\n const leftOffset = Math.round((start / durationVideo) * playerWidth);\n overlayDiv.style.width = `35%`;\n\n overlayDiv.innerHTML = content;\n\n currentTop = ((150) * 1) + currentTop;\n\n overlayDiv.addEventListener(\"click\", handler);\n\n function handler(e) {\n e.stopImmediatePropagation();\n const parentNode = document.querySelectorAll(`.vjs-overlay:not(.vjs-hidden)`)[0];\n if (!parentNode) { return false; }\n const type = e.target.getAttribute(\"type\");\n const data = e.target.getAttribute(\"data-id\");\n if (youtubePlayerRef && youtubePlayerRef.current && youtubePlayerRef.current.internalPlayer) {\n youtubePlayerRef.current.internalPlayer.pauseVideo();\n }\n if (type === \"WWW\" || type === \"IMAGE\") {\n window.open(data, \"_blank\");\n } else if (type === \"PDF\") {\n window.open(\n `https://docs.google.com/viewer?url=${data}&embedded=false`,\n \"_blank\"\n );\n } else if (type === \"DOCX\" || type === \"XLSX\" || type === \"PPTX\") {\n window.open(\n `https://view.officeapps.live.com/op/view.aspx?src=${data}`,\n \"_blank\"\n );\n } else if (type === \"QUIZ\") {\n history.push({ pathname: DeepLinking.STUDENT.QUIZ_VIEW_PATH.replace(\":id\", data), state: { classId: classId, unit: unit, lecture: lecture, autoplay: false } });\n }\n }\n\n iframe.parentNode.appendChild(overlayDiv);\n\n setTimeout(() => {\n overlayDiv.remove();\n }, duration * 1000);\n\n }\n }\n }\n } catch (error) {\n console.error(\"Error al obtener el iframe del reproductor:\", error);\n }\n};\n\n const opts = {\n width: '100%', \n height: isStudentView? '900px' : '400px',\n playerVars: {\n autoplay:1,\n disablekb:1,\n enablejsapi:1,\n fs:1,\n hl:'en',\n controls: 1,\n showinfo: 0,\n origin: Config.environmentConfig(Config.activeProfile).localURL\n },\n };\n\n const getIdVideo = (url) => {\n if (typeof url !== 'string') {\n return null;\n }\n if (!url.includes('origin=')) {\n const originValue = Config.environmentConfig(Config.activeProfile).localURL;\n const separator = url.includes('?') ? '&' : '?';\n url += `${separator}origin=${encodeURIComponent(originValue)}`;\n }\n const videoId = url.split('v=')[1];\n const ampersandPosition = videoId ? videoId.indexOf('&') : -1;\n if (ampersandPosition !== -1) {\n return videoId.substring(0, ampersandPosition);\n }\n return videoId;\n };\n\n const handleStateChange = (event) => {\n const playerState = event.data;\n\n if (playerState === YouTube.PlayerState.PLAYING) {\n if (!intervalIdRef.current) {\n isYoutubePlayingRef.current = true;\n intervalIdRef.current = setInterval(async () => {\n if (youtubePlayerRef && youtubePlayerRef.current && youtubePlayerRef.current.internalPlayer) {\n const currentTime = await youtubePlayerRef.current.internalPlayer.getCurrentTime();\n const roundedTime = Math.floor(currentTime);\n if (Math.abs(roundedTime - lastMarkerCheckRef.current) > 1) {\n lastMarkerCheckRef.current = roundedTime; \n }\n }\n }, 500);\n }\n } else {\n isYoutubePlayingRef.current = false;\n if (intervalIdRef.current) {\n clearInterval(intervalIdRef.current);\n intervalIdRef.current = null;\n }\n\n if (playerState === YouTube.PlayerState.BUFFERING) {\n setIsLoading(true);\n } else {\n setIsLoading(false);\n }\n }\n};\n\n\n\n const handleSubmit = (event) => {\n event.preventDefault();\n };\n\n const handleBlur = () => {};\n\n const handleOnReady = (event) => {\n setIsLoading(false); \n const player = event.target;\n let cuePoint = 0;\n let videoProgressStatus = null;\n\n if (autoplay && player) {\n player.playVideo();\n } else if (player) {\n player.pauseVideo();\n }\n \n setYoutubePlayer(player);\n const duration = player.getDuration();\n onSetYoutubeDuration(duration);\n if (lecture && !lectureLog) {\n setLectureLog(StudentLogService.getLogForLecture(lecture._id));\n } \n\n if (lecture && lectureLog) {\n videoProgressStatus = lectureLog.status;\n if(videoProgressStatus === 'PENDING' || videoProgressStatus === 'IN_PROGRESS'){\n cuePoint = lectureLog.lastCuePoint;\n lastMarkerCheckRef.current = cuePoint;\n player.seekTo(cuePoint); \n } else if(videoProgressStatus === 'COMPLETED'){\n cuePoint = lectureLog.lastCuePoint;\n lastMarkerCheckRef.current = cuePoint;\n player.seekTo(cuePoint); \n } \n }\n\n if (lecture) {\n const videoProgressTrack = TrackerService.getVideoProgressTrack(lecture._id);\n let _markers = [];\n let _events = [];\n\n if(!videoProgressTrack){\n if(markers && markers.length > 0) {\n _markers = markers.map(m => { \n return { markerId: m._id, status: \"PENDING\"} \n });\n }\n } else {\n _markers = videoProgressTrack.markers;\n\n _markers.forEach(m => {\n const mrkr = MarkerService.get(m.markerId);\n if(mrkr && Math.floor(mrkr.time) - cuePoint < -2 ){\n m.status = \"PENDING\";\n }\n });\n }\n \n TrackerService.createOrUpdateVideoProgressTrack(lecture._id, cuePoint, videoProgressStatus, _markers, _events);\n }\n\n if (isStudentView && videoDuration && player) {\n player.seekTo(videoDuration); \n }\n setYoutubePlayer(player);\n onSetYoutubeDuration(duration);\n setVideoDuration(duration);\n\n\n const _videoId = getIdVideo(videoUrl);\n if (!_videoId || _videoId === \"\") return;\n onSetYoutubeUrl(videoUrl);\n const _thumbnailUrl = \"https://img.youtube.com/vi/\" + _videoId + \"/default.jpg\";\n onChangeThumbnail(_thumbnailUrl);\n setThumbnailUrl(_thumbnailUrl);\n setPlayerReady(true)\n \n };\n\n const clearCuePoint = () => {\n if (lecture && lecture._id) {\n localStorage.removeItem(`cuePoint_${lecture._id}`);\n }\n };\n\n\n const handlePlayerProgress = (event) => {};\n\n const handleOnPlay = (event) => {}; \n \n const handleOnPause = (event) => {};\n\n const handleOnEnd = (event) => {\n clearCuePoint();\n };\n\n const handleOnPlaybackRateChange = (event) => {}; \n\n const handleOnError = (event) => {\n };\n \n const handleOnPlaybackQualityChange = (event) => { }; \n\n const renderYoutubeVideoPlayer = () => {\n if (!videoUrl || videoUrl===\"\") return <> ;\n return (\n <>\n handlePlayerProgress(event)}\n onReady={handleOnReady}\n onPlay={handleOnPlay} \n onPause={handleOnPause}\n onEnd={handleOnEnd}\n onError={handleOnError}\n onPlaybackRateChange={handleOnPlaybackRateChange}\n onPlaybackQualityChange={handleOnPlaybackQualityChange}\n ref={youtubePlayerRef}\n opts={opts} \n />\n \n );\n }\n\n return (\n
\n
\n
\n {!isStudentView && showsYouTubeVideoUrl && (\n setVideoUrl(e.target.value)}\n onBlur={handleBlur}\n />\n )}\n
\n
\n {renderYoutubeVideoPlayer()}\n {!isStudentView && \"}\n\n
\n );\n};\n\nexport default YouTubeVideoPlayer;\n","import React, { useState, useEffect, useRef } from \"react\";\n\nimport { Alert, Button, Badge, Spinner, Table, Form} from \"react-bootstrap\";\n\nimport LectureService from \"../../../../services/LectureService\";\nimport YouTubeVideoPlayer from \"../../../widgets/videoplayer/YouTubeVideoPlayer\";\n\nconst LectureVideoViewer = (props) => {\n const {query} = props;\n const parser = new DOMParser();\n\n const [loading, setLoading] = useState(true);\n const [videoUrl, setVideoUrl] = useState('');\n\n const [lecture, setLecture] = useState(null);\n const [isYoutubeVideo, setIsYoutubeVideo] = useState(false);\n\n useEffect(() => {\n \n fetchVideoUrl();\n \n }, []);\n\n const fetchVideoUrl = async () => {\n try {\n setLoading(true);\n const _lecture = await LectureService.getLectureVideo(query.token);\n setLecture(_lecture);\n setVideoUrl(_lecture.url); // Set the complete URL here\n setIsYoutubeVideo(!_lecture.isYoutubeVideo ? false : true);\n\n } catch (error) {\n console.error('Error fetching video URL:', error);\n } finally {\n setLoading(false);\n }\n };\n\n const renderVideoPlayer = () => {\n if (isYoutubeVideo) {\n return (\n
\n
\n \n
\n
\n );\n } else {\n return (\n
\n
\n \n \n \n
\n
\n );\n }\n };\n\n return (\n <>\n {loading ? (\n
\n \n
\n ) : (\n renderVideoPlayer()\n )}\n \n );\n};\n\n\nexport default LectureVideoViewer;","import moment from \"moment\";\n\nexport default {\n getRemainingDaysTillEndOfWeek: () => {\n return 7 - moment().day();\n },\n getCurrentDate: () => {\n return moment(new Date()).format(\"MMMM DD HH:mm\");\n },\n getCurrentDateTime: date => {\n return moment(date).format(\"llll\");\n },\n getDateCreateTime: date => {\n return moment(date).format('l');\n },\n formatStringDateToTooltipText: dateToConvert => {\n let formattedDate = \"\";\n try {\n let dateString = dateToConvert;\n let date = new Date(dateString);\n let month = date.getMonth() + 1; \n let day = date.getDate();\n let formattedMonth = month.toString().padStart(2, '0');\n let formattedDay = day.toString().padStart(2, '0');\n formattedDate = `${formattedMonth}/${formattedDay}`;\n } catch (error) {\n console.error(error);\n }\n \n return formattedDate;\n }\n};\n","import LocalStorageService from \"./LocalStorageService\";\nimport InstructorService from \"./InstructorService\";\nimport ClassService from \"./ClassService\";\nimport MockService from \"./MockService\";\nimport ApiService from \"./ApiService\";\nimport ApiPath from \"./../utils/ApiPath\";\nimport ResponseUtil from \"./../utils/ResponseUtil\";\nimport LimespringUtils from \"./../utils/LimespringUtils\";\nimport Config from \"./../config/Config\";\n\nexport default {\n\n getAll: () => {\n return LocalStorageService.get('announcements') || [];\n },\n\n get: id => {\n return LocalStorageService.get(\"announcements\").find(\n announcement => announcement._id === id\n );\n },\n\n getLatest: () => {\n\n let announcements = LocalStorageService.get(\"announcements\") || [];\n\n if(announcements.length === 0) { return []; }\n\n let instructorAnnouncements = announcements.filter(announcement => {\n return announcement.origin === \"INSTRUCTOR\";\n });\n\n let systemAnnouncements = announcements.filter(announcement => {\n return announcement.origin === \"SYSTEM\";\n });\n\n let instructorAnnouncementColl = [];\n \n if(instructorAnnouncements && instructorAnnouncements.length > 0){\n instructorAnnouncementColl = instructorAnnouncements.map(\n instructorAnnouncement => {\n const instructorId = instructorAnnouncement.from;\n const message = instructorAnnouncement.message;\n const type = instructorAnnouncement.type;\n\n let instructor = InstructorService.get(instructorId);\n const title = LimespringUtils.getUserFullName(instructor);\n\n return {\n _id: instructorAnnouncement._id,\n title: title,\n message: message,\n icon: type\n };\n }\n );\n }\n\n let systemAnnouncementColl = [];\n \n if(systemAnnouncements && systemAnnouncements.length > 0){\n systemAnnouncementColl = systemAnnouncements.map(systemAnnouncement => {\n const classId = systemAnnouncement.from;\n const message = systemAnnouncement.message;\n const type = systemAnnouncement.type;\n\n let _class = ClassService.get(classId);\n const title = _class ? _class.title : 'Important Info';\n\n return {\n _id: systemAnnouncement._id,\n title: title,\n message: message,\n icon: type\n };\n });\n }\n\n return instructorAnnouncementColl.concat(systemAnnouncementColl);\n },\n\n remove: async (id) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.removeAnnouncement()); }\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_ANNOUNCEMENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { announcements } = response.data;\n LocalStorageService.store({ announcements: announcements });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AnnouncementService | Error while attempting to remove response: ${error}`);\n return false;\n }\n }\n};\n","import LocalStorageService from \"./LocalStorageService\";\nimport UnitService from \"./UnitService\";\nimport AssetService from \"./AssetService\";\nimport AssessmentService from \"./AssessmentService\";\nimport LectureService from \"./LectureService\";\nimport DateUtils from \"./../utils/DateUtils\";\nimport VideoTimeUtils from \"./../utils/VideoTimeUtils\";\n\nexport default {\n getPending: async () => {\n const tasks = LocalStorageService.get(\"tasks\") || [];\n\n if (tasks.length === 0) {\n return [];\n }\n\n let pendingTasks = tasks.filter(task => {\n return task.status === \"PENDING\" && task.action === \"TAKE_ASSESSMENT\";\n });\n\n return pendingTasks.map(pendingTask => {\n let dueDate = new Date(pendingTask.dueDate);\n let unit = UnitService.get(pendingTask.unitId);\n let asset = AssetService.get(pendingTask.assetId);\n if (asset === null || asset === undefined) {\n asset = AssessmentService.get(pendingTask.assetId);\n }\n\n if (asset === null) {\n return null;\n }\n\n let displayableTask = {\n _id: pendingTask._id,\n dueDate: \"Due: \" + dueDate.toLocaleDateString(\"en-US\"),\n target: unit.title + \" \" + asset.type,\n remaining:\n DateUtils.getRemainingDaysTillEndOfWeek() + \" day(s) remaining\"\n };\n return displayableTask;\n });\n },\n getLatest: async () => {\n const tasks = LocalStorageService.get(\"tasks\");\n\n let pendingTasks = tasks.filter(task => {\n return task.status === \"PENDING\" && task.action === \"TAKE_ASSESSMENT\";\n });\n\n let displayableLatestTasks = pendingTasks.map(task => {\n let dueDate = new Date(task.dueDate);\n let unit = UnitService.get(task.unitId);\n let asset = AssetService.get(task.assetId);\n if (asset === null || asset === undefined) {\n asset = AssessmentService.get(task.assetId);\n }\n\n if (asset === null) {\n return null;\n }\n\n let displayableTask = {\n _id: task._id,\n dueDate: \"Due: \" + dueDate.toLocaleDateString(\"en-US\"),\n target: unit.title + \" \" + asset.type,\n remaining:\n DateUtils.getRemainingDaysTillEndOfWeek() + \" day(s) remaining\"\n };\n return displayableTask;\n });\n\n displayableLatestTasks.sort((a, b) => b.dueDate - a.dueDate);\n\n return [displayableLatestTasks[0]];\n },\n getCurrentVideoTasks: async () => {\n const tasks = LocalStorageService.get(\"tasks\") || [];\n \n let pendingVideoTasks = tasks.filter(task => {\n return task.status === \"PENDING\" && task.action === \"RESUME_VIDEO\";\n });\n\n let displayableVideoTasks = pendingVideoTasks.map(pendingVideoTask => {\n let dueDate = new Date(pendingVideoTask.dueDate);\n let unit = UnitService.get(pendingVideoTask.unitId);\n let asset = LectureService.get(pendingVideoTask.assetId);\n if (asset === null) {\n return;\n }\n let displayableTask = {\n _id: pendingVideoTask._id,\n dueTime: VideoTimeUtils.getTimeLeft(pendingVideoTask.secondsLeft),\n target: asset.title\n };\n return displayableTask;\n });\n\n return displayableVideoTasks;\n }\n};\n","import React, { useState, useEffect } from \"react\";\nimport AnnouncementService from \"../../../services/AnnouncementService.js\";\nimport * as Icons from \"react-bootstrap-icons\";\n\nimport \"./announcements.css\";\n\nconst Announcements = props => {\n\n const {callout} = props;\n\n const [announcements, setAnnouncements] = useState(null);\n\n useEffect(() => {\n if (!announcements) {\n getAnnouncements();\n }\n });\n\n const getAnnouncements = async () => {\n let res = await AnnouncementService.getLatest();\n setAnnouncements(res);\n };\n\n const dismissAnnouncement = (id) => {}\n\n const renderAnnouncement = announcement => {\n return (\n
  • \n
    \n {announcement.icon === \"EMAIL\" ? (\n \n ) : (\n \n )}\n
    \n dismissAnnouncement(announcement._id)}>\n x\n \n

    {announcement.title}

    \n

    {announcement.message}

    \n
    \n
    \n
  • \n );\n };\n\n return (\n
    \n
    \n

    {callout}

    \n
    \n
    \n );\n};\n\nexport default Announcements;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/medal-pending.fa59acfc.svg\";","import React from 'react';\nimport ReactGA from 'react-ga';\nimport {useHistory} from 'react-router-dom';\nimport {ProgressBar} from 'react-bootstrap';\nimport DeepLinking from \"../../../utils/DeepLinking\";\nimport './tile.css';\n\nconst AwesomeTile = (props) => {\n\n const { id, thumbnail, title, description, progress, isgradebook } = props;\n\n const history = useHistory();\n\n const showClass = () => {\n //track event in Google Analytics\n ReactGA.event({\n category: 'User',\n action: `View class: ${title}`\n });\n\n if(isgradebook){ \n history.push(DeepLinking.STUDENT.GRADEBOOK_UNITS_VIEW_PATH.replace(':id', id));\n } else {\n history.push(DeepLinking.STUDENT.CLASS_VIEW_PATH.replace(':id', id));\n }\n }\n\n return ( \n
    showClass()}>\n
    \n \n
    \n\n
    \n {title}\n
    \n
    \n );\n}\n \nexport default AwesomeTile;","import React, { useState, useEffect } from \"react\";\nimport {Button} from 'react-bootstrap';\nimport {useHistory} from 'react-router-dom';\nimport ClassService from \"../../../services/ClassService\";\nimport InstructorService from \"../../../services/InstructorService\";\nimport StudentLogService from \"./../../../services/StudentLogService\";\nimport ClassTile from \"../tile/ClassTile\";\nimport AwesomeTile from \"../tile/AwesomeTile\";\nimport DeepLinking from './../../../utils/DeepLinking';\nimport \"./classlist.css\";\nimport CourseService from \"../../../services/CourseService\";\n\nconst ClassList = (props) => {\n\n const { studentGradebookTile } = props;\n \n const history = useHistory();\n\n const [classes, setClasses] = useState(null);\n const [instructors, setInstructors] = useState(null);\n const [log, setLog] = useState(null);\n\n useEffect(() => {\n if (!classes) {\n setClasses(ClassService.getAll());\n if (!instructors) {\n setInstructors(InstructorService.getAll());\n }\n setLog(StudentLogService.get())\n }\n }, [classes, instructors]);\n\n const getClassDescription = (c) => {\n if(!c || !c.courses || c.courses.length === 0) return 'None Available';\n \n const courseId = c.courses[0];\n if(courseId === '') return 'None Available';\n \n const course = CourseService.get(courseId);\n if(!course || !course.description || course.description === \"\") return 'None Available';\n\n return course.description;\n }\n\n const renderClass = _class => {\n /*\n return (\n \n );*/\n return (\n \n );\n };\n\n const getClassProgress = (classId) => {\n let progress = 0;\n if(log && log.classes && log.classes.length > 0) {\n const classLog = log.classes.find(cl => cl._id === classId);\n if(classLog){\n progress = classLog.progress;\n }\n\n if(progress > 100) {\n progress = 100;\n }\n }\n return progress;\n }\n\n const openBookstore = () => {\n //history.push(DeepLinking.BOOKSTORE_VIEW_PATH);\n }\n\n return (\n
    \n
    \n

    {studentGradebookTile ? \"My Grades\" : \"My Courses\"}

    \n {/**/}\n
    \n
    \n {\n classes && classes.length > 0 ? (\n classes.map(_class => renderClass(_class))\n ) : (\n

    None assigned

    \n )}\n
    \n
    \n );\n};\n\nexport default ClassList;\n","import React, {useState, useEffect} from 'react';\nimport {Button, ProgressBar} from 'react-bootstrap';\nimport {useHistory} from 'react-router-dom';\nimport * as Icons from \"react-bootstrap-icons\";\nimport StudentLogService from \"./../../../services/StudentLogService\";\nimport LectureService from \"./../../../services/LectureService\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport ReactHtmlParser from 'react-html-parser'; \nimport AssessmentService from '../../../services/AssessmentService';\nimport './tile.css';\n\nconst UnitTile = (props) => {\n\n const { unit, classId, studentUnitTile } = props;\n\n const history = useHistory();\n const [unitlog, setUnitlog] = useState(null);\n const [lectures, setLectures] = useState([]);\n\n\n useEffect(() => {\n if (!unitlog) {\n setLectures(unit.lectures);\n setUnitlog(StudentLogService.getLogForUnit(unit._id));\n }\n }, [unit]);\n\n const showUnitStatus = () => {\n if (unitlog) {\n return (\n
    \n {getLectures()}\n {getWorkbook()}\n {getQuizzes()}\n {getExam()}\n
    \n )\n } else {\n return \"\";\n }\n };\n\n const getLectures = () => {\n let numberOfLectures = 0\n if(lectures && lectures.length > 0) numberOfLectures = lectures.length;\n if(numberOfLectures > 0){\n return
    Lectures: {numberOfLectures}
    \n } else {\n return <>;\n }\n }\n\n const getQuizzes = () => {\n const totalOfQuizzes = getTotalOfQuizzes();\n if(totalOfQuizzes > 0){\n return
    \n Quizzes: {totalOfQuizzes}\n
    \n } else {\n return <>;\n }\n }\n\n const getWorkbook = () => {\n if(!unit || !unit.assessments || unit.assessments.length === 0) { return <>; }\n const wb = unit.assessments.find(a => a.type === 'WORKBOOK');\n if(!wb) { return <>; }\n return
    \n
    Workbook
    ;\n }\n\n const getExam = () => {\n const exams = unit.assessments.filter(a => a.type === 'BOOKEXAM');\n if (exams && exams.length > 0 ) {\n return (\n
    \n
    Exams: {exams.length}\n
    \n );\n } else {\n return <>;\n }\n };\n\n const getTotalOfBookExams = () => {\n let totalBookExams = 0;\n if (unit && unit.assessments && unit.assessments.length > 0) {\n totalBookExams = unit.assessments.filter(a => a.type === 'BOOKEXAM').length;\n }\n return totalBookExams;\n };\n\n const getTotalOfQuizzes = () =>{\n let assessments = 0;\n if(lectures && lectures.length > 0){\n lectures.forEach(l => { \n if(l.assessments && l.assessments.length > 0){\n assessments += l.assessments.length;\n }\n });\n }\n return assessments\n }\n\n const showUnitDetails = () => {\n return
    \n
    {unit ? ReactHtmlParser(unit.description) : 'None Available'}
    \n
    ;\n }\n\n const showUnit = () => {\n history.push({pathname: DeepLinking.STUDENT.UNIT_VIEW_PATH.replace(\":id\", unit._id), state: {classId: classId}});\n };\n return (\n\n
    showUnit()}>\n {unit ? unit.title: ''}\n
    \n
    \n {showUnitDetails()}\n {showUnitStatus()}\n
    \n
    \n \n
    \n
    \n {unitlog ? \n 100 ? 100: Math.ceil(unitlog.progress)}% complete`}\n /> : \"\"}\n
    \n );\n}\n \nexport default UnitTile;","import React, { useEffect, useState } from \"react\";\nimport \"./unitlist.css\";\nimport UnitTile from './../tile/UnitTile';\n\nconst UnitList = props => {\n\n const { units, classId } = props;\n\n const [displayedUnits, setDisplayedUnits] = useState([]);\n\n useEffect(() => {\n setDisplayedUnits(units || []);\n }, [units]);\n\n const renderUnit = unit => {\n return (\n \n );\n };\n\n return (\n
    \n {displayedUnits.length > 0 ? (\n displayedUnits.map(unit => renderUnit(unit))\n ) : (\n

    No units found

    \n )}\n
    \n );\n};\n\nexport default UnitList;\n","import React, { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport Header from \"../../../widgets/header/Header\";\nimport PendingTasks from \"./../../../widgets/tasks/PendingTasks\";\nimport Announcements from \"./../../../widgets/announcements/Announcements\";\nimport Achievements from \"./../../../widgets/achievements/Achievements\";\nimport ClassList from \"../../../widgets/class-list/ClassList\";\nimport UnitList from \"../../../widgets/unit-list/UnitList\";\nimport ClassService from \"../../../../services/ClassService\";\nimport UnitService from \"../../../../services/UnitService\";\nimport LocalStorageService from \"../../../../services/LocalStorageService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport CacheService from \"./../../../../services/CacheService\";\nimport LimespringUtils from \"./../../../../utils/LimespringUtils\";\nimport SidebarMenu from \"./../../../widgets/sidebar/SidebarMenu\";\nimport \"./dashboardview.css\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\n\nconst DashboardView = () => {\n const history = useHistory();\n const [open, setOpen] = useState(false);\n const [isStudent, setIsStudent] = useState(true);\n const [fromAdminInstructor, setFromAdminInstructor] = useState(false);\n const [renderClass, setRenderClass] = useState(true);\n const [callout, setCallout] = useState(\"Welcome, Student\");\n const [units, setUnits] = useState([]);\n\n //cache refresh\n useEffect(() => {\n (async () => {\n await CacheService.syncLogin();\n })();\n }, []);\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Student Dashboard\";\n const user = ProfileService.get();\n setIsStudent(user.role === 'Student');\n const userAdmin = LocalStorageService.get(\"userAdmin\");\n if(userAdmin && userAdmin.role && (userAdmin.role==='SuperAdmin' || userAdmin.role==='Instructor')) {\n setFromAdminInstructor(true);\n setIsStudent(true);\n } else {\n setFromAdminInstructor(false);\n }\n const units = UnitService.getAll()\n setUnits(units);\n setCallout(`Welcome back, ${LimespringUtils.getUserName(user)}`);\n }, [callout]);\n\n const handleClick = e => {\n e.preventDefault();\n setOpen(!open);\n };\n\n const loadPage = target => {\n if (target === \"grades\") {\n history.push(DeepLinking.STUDENT.GRADEBOOK_VIEW_PATH);\n } else if (target === \"account\") {\n history.push(`/settings`);\n } else if(target === \"bookstore\") {\n //history.push(DeepLinking.BOOKSTORE_VIEW_PATH);\n } else if(target === \"logout\") {\n history.push(DeepLinking.LOGOUT_VIEW_PATH);\n }\n };\n\n return (\n
    \n \n
    \n
    \n loadPage(target)}\n showInstructorMode={ isStudent && !fromAdminInstructor ? false : true }\n showStudentFromAdminInstructor={ fromAdminInstructor}\n />\n
    \n
    \n
    \n {/**/}\n \n
    \n {renderClass ? (\n \n ) : (\n \n )}\n
    \n
    \n
    \n );\n};\n\nexport default DashboardView;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\nimport axios from \"axios\";\n\nexport default {\n \n getAll: () => {\n return LocalStorageService.get(\"feedbacks\");\n },\n\n getAllFromRemote: async () => {\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_FEEDBACKS_ENDPOINT);\n if(response && response.status === 200) { \n const { feedbacks } = response.data;\n return feedbacks;\n } \n return [];\n },\n\n get: id => {\n return LocalStorageService.get(\"feedbacks\").find(\n feedback => feedback._id === id\n );\n },\n\n getByIds: ids => {\n const allfeedbacks = LocalStorageService.get(\"feedbacks\");\n return ids.map(id => { return allfeedbacks.find(fb => fb._id === id)});\n },\n\n getLatest: () => {\n return LocalStorageService.get(\"feedbacks\")[0];\n },\n\n downloadCsv: async () => {\n return await axios.get(ApiPath.DOWNLOAD_FEEDBACKS_ENDPOINT, {\n timeout: 600000 \n });\n },\n\n create: async (payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.createFeedback()); }\n try { \n let response = await new ApiService().post(ApiPath.CREATE_FEEDBACK_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n const { feedbacks } = response.data;\n LocalStorageService.store({ feedbacks: feedbacks });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`FeedbackService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n update: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.updateFeedback()); }\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_FEEDBACK_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n const { feedbacks } = response.data;\n LocalStorageService.store({ feedbacks: feedbacks });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`FeedbackService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n remove: async (id) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.removeFeedback()); }\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_FEEDBACK_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { feedbacks } = response.data;\n LocalStorageService.store({ feedbacks: feedbacks });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`FeedbackService | Error while attempting to remove feedback. response: ${error}`);\n return false;\n }\n }\n};\n","import React, {useState, useEffect} from 'react';\nimport * as Icons from 'react-bootstrap-icons';\nimport './rater.css';\n\nconst Star = (props) => {\n\n const {size, activate, onClicked=()=>{}} = props;\n\n useEffect(()=> {}, [activate]);\n\n const renderIcon = () => {\n return activate ? : \n };\n\n return (\n
    onClicked({active: !activate})}>\n {renderIcon()}\n
    \n );\n}\n \nexport default Star;","import React, {useEffect, useState} from 'react';\n\nimport Star from \"./Star\";\n\nconst Rater = (props) => {\n\n const {id, onRating=()=>{}} = props;\n\n const [star0Activate, setStar0Activate] = useState(false);\n const [star1Activate, setStar1Activate] = useState(false);\n const [star2Activate, setStar2Activate] = useState(false);\n const [star3Activate, setStar3Activate] = useState(false);\n const [star4Activate, setStar4Activate] = useState(false);\n\n const setAllInactive = () => {\n setStar0Activate(false);\n setStar1Activate(false);\n setStar2Activate(false);\n setStar3Activate(false);\n setStar4Activate(false);\n }\n\n const onStarClicked = (e, index) => {\n setAllInactive();\n\n if(index === 4){\n setStar0Activate(true);\n setStar1Activate(true);\n setStar2Activate(true);\n setStar3Activate(true);\n setStar4Activate(true);\n onRating(5);\n } \n \n if(index === 3){\n setStar0Activate(true);\n setStar1Activate(true);\n setStar2Activate(true);\n setStar3Activate(true);\n onRating(4);\n } \n\n if(index === 2){\n setStar0Activate(true);\n setStar1Activate(true);\n setStar2Activate(true);\n onRating(3);\n } \n\n if(index === 1){\n setStar0Activate(true);\n setStar1Activate(true);\n onRating(2);\n } \n\n if(index === 0){\n setStar0Activate(true);\n onRating(1);\n } \n }\n\n return (\n
    \n onStarClicked(e, 0)}/>\n onStarClicked(e, 1)}/>\n onStarClicked(e, 2)}/>\n onStarClicked(e, 3)}/>\n onStarClicked(e, 4)}/>\n
    \n );\n}\n \nexport default Rater;","import React, {useState} from \"react\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport Rater from \"../rater/Rater\";\nimport \"react-rater/lib/react-rater.css\";\nimport \"./ratelecturemodal.css\";\n\nconst RateLectureModal = props => {\n\n const {show, onHide, onFeedback} = props;\n\n const [stars, setStars] = useState(0);\n const [comment, setComment] = useState('');\n\n return (\n onHide()}\n >\n \n \n

    We love feedback!

    \n
    \n
    \n \n

    \n Do you have a second to rate this lecture?\n

    \n setStars(rating)}/>\n

    Additional feedback: (optional)

    \n\n setComment(e.target.value)}\n />\n
    \n \n \n \n \n );\n};\n\nexport default RateLectureModal;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Controls from './Controls.json';\nimport videojs from 'video.js';\nimport 'video.js/dist/video-js.css';\nimport watermark from \"./../../../images/watermark.png\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport TrackerService from \"./../../../services/TrackService\"; \nimport AssetService from \"./../../../services/AssetService\";\nimport Config from \"./../../../config/Config\"\n\n//videojs plugins\nimport \"videojs-logo\";\nimport \"videojs-event-tracking\";\nimport \"videojs-overlay\";\nimport \"videojs-dock\";\nimport \"videojs-markers\";\nimport 'videojs-seek-buttons';\nimport \"./../../../../node_modules/videojs-logo/dist/videojs-logo.css\";\nimport \"./../../../../node_modules/videojs-overlay/dist/videojs-overlay.css\";\nimport \"./../../../../node_modules/videojs-dock/dist/videojs-dock.css\";\nimport \"./../../../../node_modules/videojs-markers/dist/videojs.markers.css\";\nimport \"./../../../../node_modules/videojs-seek-buttons/dist/videojs-seek-buttons.css\";\n\nclass VideoPlayer extends Component {\n\n playerId = `video-player-${uuidv4()}`\n player = null;\n \n componentDidMount() {\n this.init_player(this.props);\n }\n\n componentWillReceiveProps(nextProps){\n this.set_controls_visibility(this.player, nextProps.hideControls);\n if(this.props.src !== nextProps.src){\n this.init_player(nextProps);\n }\n }\n\n componentWillUnmount() {\n if (this.player) this.player.dispose(); \n }\n\n init_player(props) {\n const playerOptions = this.generate_player_options(props);\n this.player = videojs(document.querySelector(`#${this.playerId}`), playerOptions);\n props.type ? this.player.src({type: props.type, src: props.src}) : this.player.src(props.src);\n this.player.poster(props.poster);\n this.player.seekButtons({\n forward: Config.videoForwardBackSecs, \n back: Config.videoForwardBackSecs \n });\n this.set_controls_visibility(this.player, props.hideControls);\n this.init_player_events(props);\n }\n\n handleKeyPress = (event) => {\n if (event.keyCode === 32) { //space code\n if (this.player.paused()) {\n this.player.play();\n } else {\n this.player.pause();\n }\n }\n }\n\n generate_player_options(props){\n const playerOptions = {};\n playerOptions.controls = props.controls;\n playerOptions.html5 = {nativeTextTracks: true};\n playerOptions.autoplay = props.autoplay;\n playerOptions.preload = props.preload;\n playerOptions.width = props.width;\n playerOptions.height = props.height;\n playerOptions.bigPlayButton = props.bigPlayButton;\n const hidePlaybackRates = props.hidePlaybackRates || props.hideControls.includes('playbackrates');\n if (!hidePlaybackRates) playerOptions.playbackRates = props.playbackRates;\n return playerOptions;\n }\n\n set_controls_visibility(player, hidden_controls){\n Object.keys(Controls).map(x => { player.controlBar[Controls[x]].show() })\n hidden_controls.map(x => { player.controlBar[Controls[x]].hide() });\n }\n\n openInNewTab(url) {\n const newWindow = window.open('', '_blank');\n if (newWindow) {\n newWindow.location = url;\n } else {\n alert('We attempted to open a new tab, but your browser is currently blocking this action. To continue, please allow pop-ups for this site.');\n }\n };\n\n init_player_events(props) {\n let currentTime = 0;\n let previousTime = 0;\n let position = 0;\n let lastTimerCheck = 0;\n let lastMarkerCheck = 0;\n\n this.player.el_.setAttribute('tabindex', '0');\n\n let timer = Config.environmentConfig(Config.activeProfile).playbackServerTimer;\n\n this.player.on('click', () => {\n this.player.el_.focus();\n });\n\n this.player.ready(() => {\n // this.player.el_.focus();\n // set watermark\n this.player.logo({\n image: watermark,\n position: \"top-right\",\n offsetH: 10,\n offsetV: 5,\n fadeDelay: null\n });\n\n //set markers\n this.player.markers({\n markers: this.props.data.markers,\n markerStyle: {\n \"width\": \"5px\",\n \"background-color\": \"red\",\n \"border-radius\": \"0\"\n }\n });\n\n //set overlays\n this.player.overlay({ overlays: this.props.data.overlays });\n\n const adjustOverlays = () => {\n const visibleOverlays = Array.from(document.getElementsByClassName('vjs-overlay'))\n .filter(element => !element.classList.contains('vjs-hidden'));\n visibleOverlays.forEach((element, index) => {\n element.style.bottom = `${(index+1) * 50}px`;\n });\n };\n\n const observer = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.attributeName === 'class') {\n const target = mutation.target;\n if (target.classList.contains('vjs-overlay') && !target.classList.contains('vjs-hidden')) {\n adjustOverlays();\n }\n }\n });\n }); \n const config = { attributes: true };\n\n //listen to click events on overlays!\n const elements = document.getElementsByClassName(`vjs-overlay`);\n Array.from(elements).forEach((element, index) => {\n element.style.bottom = `${(index+1) * 50}px`;\n observer.observe(element, config);\n const handler = (e)=>{\n e.stopImmediatePropagation()\n const parentNode = document.querySelectorAll(`.vjs-overlay:not(.vjs-hidden)`)[0];\n if(!parentNode){ return false; }\n const type = e.target.getAttribute(\"type\");\n const data = e.target.getAttribute(\"data-id\");\n this.player.pause();\n \n if (type === \"WWW\") {\n window.open(data, \"_blank\");\n }\n if (type === \"IMAGE\") {\n window.open(data, \"_blank\");\n }\n if (type === \"PDF\") {\n window.open(\n `https://docs.google.com/viewer?url=${data}&embedded=false`,\n \"_blank\"\n );\n }\n if (type === \"DOCX\" || type === \"XLSX\" || type === \"PPTX\") {\n window.open(\n `https://view.officeapps.live.com/op/view.aspx?src=${data}`,\n \"_blank\"\n );\n }\n if (type === \"QUIZ\") {\n this.props.history.push({pathname: DeepLinking.STUDENT.QUIZ_VIEW_PATH.replace(\":id\", data), state: {classId: this.props.data.classId, unit: this.props.data.unit, lecture: this.props.data.lecture, autoplay: false}});\n }\n }\n\n \n\n element.addEventListener(\"click\", e => handler(e), false);\n });\n\n \n\n this.player.textTrackSettings.setValues({\n backgroundColor: \"#FF0\",\n color: \"#00F\",\n fontFamily: \"monospaceSansSerif\",\n fontPercent: 1.5,\n windowColor: \"#0FF\",\n windowOpacity: \"0.5\"\n });\n \n //hide CC only at the beginning\n this.player.textTracks()[0].mode = \"disabled\";\n\n //event tracking (needed?)\n //this.player.eventTracking({});\n //this.player.on('tracking:firstplay', (e, data) => console.log(`Firstplay: ${JSON.stringify(data)}`));\n props.onReady(this.player);\n });\n\n this.player.el().addEventListener('keydown', (e) => {\n if (this.props.active===true) {\n if (e.key === ' ' || e.keyCode === 32) {\n e.stopPropagation(); \n if (this.player.paused()) {\n this.player.play();\n } else {\n this.player.pause();\n }\n } else if (e.key === 'ArrowRight' || e.keyCode === 39) { // right arrow code\n e.preventDefault();\n let completeTime = Math.floor(this.player.currentTime());\n let newTime = completeTime + Config.videoForwardBackSecs;\n this.player.currentTime(newTime);\n } else if (e.key === 'ArrowLeft' || e.keyCode === 37) { // left arrow code\n e.preventDefault();\n let completeTime = Math.floor(this.player.currentTime());\n let newTime = completeTime - Config.videoForwardBackSecs;\n this.player.currentTime(newTime); \n }\n }\n });\n\n this.player.on('play', () => {\n props.onPlay(this.player.currentTime());\n });\n this.player.on('pause', () => {\n props.onPause(this.player.currentTime());\n });\n this.player.on('timeupdate', (e) => {\n \n props.onTimeUpdate(this.player.currentTime());\n\n previousTime = currentTime;\n currentTime = this.player.currentTime();\n\n if (previousTime < currentTime) {\n position = previousTime;\n previousTime = currentTime;\n }\n\n const currentSeconds = Math.floor(this.player.currentTime());\n\n //send to server every 15 secs (configurable)\n if(currentSeconds % timer === 0 && currentSeconds > lastTimerCheck) {\n lastTimerCheck = currentSeconds;\n TrackerService.trackLecture(this.props.data.lecture._id, { lastCuePoint: currentSeconds, status: \"IN_PROGRESS\" });\n }\n\n //store video tracker in cache!\n TrackerService.createOrUpdateVideoProgressTrack(this.props.data.lecture._id, currentSeconds, \"IN_PROGRESS\", null, [])\n\n if (this.props.data.markers && this.props.data.markers.length > 0 && currentSeconds > lastMarkerCheck) {\n lastMarkerCheck = currentSeconds;\n const marker = this.props.data.markers.find(mk => Math.floor(mk.time) === currentSeconds);\n \n if (marker && marker.required && !this.player.paused()) {\n console.log(`checking markers @currentSeconds: ${currentSeconds} @lastRecordedSeconds: ${lastMarkerCheck}`);\n const videoTrack = TrackerService.getVideoProgressTrack(this.props.data.lecture._id);\n let markerTracks = null;\n if(videoTrack) {\n markerTracks = videoTrack.markers;\n if(markerTracks && markerTracks.length > 0){\n let markerTrack = markerTracks.find(mt => mt.markerId === marker.id);\n if(markerTrack){\n if(markerTrack.status === \"VIEWED\"){\n return;\n } else {\n markerTrack.status = \"VIEWED\";\n }\n }\n }\n }\n\n //update local and remote!\n TrackerService.createOrUpdateVideoProgressTrack(this.props.data.lecture._id, currentSeconds, \"IN_PROGRESS\", markerTracks,[])\n TrackerService.trackLecture(this.props.data.lecture._id, { lastCuePoint: currentSeconds, status: \"IN_PROGRESS\" });\n if (this.props.data.isStartOn) { this.player.pause(); }\n if(marker.assessment !== \"\" && this.props.data.isStartOn){\n this.props.history.push({pathname: DeepLinking.STUDENT.QUIZ_VIEW_PATH.replace(\":id\", marker.assessment), state: {classId: this.props.data.classId, unit: this.props.data.unit, lecture: this.props.data.lecture, autoplay: true}});\n } else {\n if(marker.asset !== \"\"){\n\n const _asset = AssetService.get(marker.asset);\n if(!_asset) { return; }\n \n const data = _asset.url;\n if(!data) { return; }\n\n const type = _asset.type;\n\n if (type === \"WWW\") {\n this.player.pause();\n this.openInNewTab(data);\n }\n if (type === \"IMAGE\") {\n this.player.pause();\n this.openInNewTab(data);\n }\n if (type === \"PDF\") {\n this.player.pause();\n this.openInNewTab(`https://docs.google.com/viewer?url=${data}&embedded=false`);\n }\n if (type === \"DOCX\" || type === \"XLSX\" || type === \"PPTX\") {\n this.player.pause();\n this.openInNewTab(`https://view.officeapps.live.com/op/view.aspx?src=${data}`);\n }\n }\n }\n }\n }\n });\n this.player.on('seeking', () => {\n this.player.off('timeupdate', () => { });\n this.player.one('seeked', () => { });\n props.onSeeking(this.player.currentTime());\n });\n\n this.player.on('seeked', () => {\n let completeTime = Math.floor(this.player.currentTime());\n lastTimerCheck = completeTime;\n lastMarkerCheck = completeTime;\n props.onSeeked(position, completeTime);\n });\n this.player.on('ended', () => {\n props.onEnd();\n });\n }\n \n\n render() {\n return (\n \n )\n }\n}\n\nVideoPlayer.propTypes = {\n data: PropTypes.object,\n src: PropTypes.string,\n poster: PropTypes.string,\n captionvtt: PropTypes.string,\n controls: PropTypes.bool,\n autoplay: PropTypes.bool,\n preload: PropTypes.oneOf(['auto', 'none', 'metadata']),\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n hideControls: PropTypes.arrayOf(PropTypes.string),\n bigPlayButton: PropTypes.bool,\n bigPlayButtonCentered: PropTypes.bool,\n onReady: PropTypes.func,\n onPlay: PropTypes.func,\n onPause: PropTypes.func,\n onTimeUpdate: PropTypes.func,\n onSeeking: PropTypes.func,\n onSeeked: PropTypes.func,\n onEnd: PropTypes.func,\n playbackRates: PropTypes.arrayOf(PropTypes.number),\n hidePlaybackRates: PropTypes.bool,\n className: PropTypes.string\n}\n\nVideoPlayer.defaultProps = {\n data: {},\n src: \"\",\n poster: \"\",\n captionvtt: \"\",\n controls: true,\n autoplay: false,\n preload: 'auto',\n playbackRates: [0.5, 1, 1.5, 2],\n hidePlaybackRates: false,\n className: \"\",\n hideControls: [],\n bigPlayButton: true,\n bigPlayButtonCentered: true,\n onReady: () => { },\n onPlay: () => { },\n onPause: () => { },\n onTimeUpdate: () => { },\n onSeeking: () => { },\n onSeeked: () => { },\n onEnd: () => { }\n}\n\n\nexport default VideoPlayer;","export default \"data:image/png;base64,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\"","import React, { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport VideoJSPlayer from \"./VideoJSPlayer\";\nimport \"./limespring-video-player.css\";\nimport AssetService from \"./../../../services/AssetService\";\nimport AssessmentService from \"./../../../services/AssessmentService\";\nimport StudentLogService from \"./../../../services/StudentLogService\";\nimport MarkerService from \"./../../../services/MarkerService\";\nimport TrackerService from \"./../../../services/TrackService\";\n\nconst LimespringVideoPlayer = props => {\n\n const { classId='', lecture, unit, active, caption, dock, autoplay = false, stop = false, preview = false, completed, onTimeUpdate, scrub=null} = props;\n\n const history = useHistory();\n const [player, setPlayer] = useState(null);\n const [markers, setMarkers] = useState(null);\n const [data, setData] = useState({markers:[], overlays:[], ready: false, isStartOn: true});\n const [lectureLog, setLectureLog] = useState(null);\n\n useEffect(() => {\n if (stop) {\n if(player){ player.pause() };\n }\n }, [stop]);\n\n useEffect(() => {\n if(scrub && player){\n player.currentTime(scrub.cue);\n //player.pause();\n }\n }, [scrub]);\n\n useEffect(() => {\n const lectureLog = StudentLogService.getLogForLecture(lecture._id);\n const _isStartOn = StudentLogService.getIsStartOn(null);\n //const _markers = MarkerService.getByIds(lecture.markers);\n const _markers = lecture.markers;\n setLectureLog(lectureLog);\n setMarkers(_markers);\n\n //set markers\n if (_markers && _markers.length > 0) {\n const videoMarkers = _markers.map(marker => {\n let asset = null;\n if(marker.asset && marker.asset !== \"\") asset = AssetService.get(marker.asset);\n if(!asset && marker.assessment && marker.assessment !== \"\") asset = AssessmentService.get(marker.assessment);\n if(!asset) return;\n return { id: marker._id, time: marker.cuePoint, text: asset.title, assessment: marker.assessment, asset: marker.asset, required: marker.required };\n });\n data.markers = videoMarkers;\n }\n\n //set overlays\n let overlays = [];\n if (_markers) {\n _markers.forEach(marker => {\n if (!marker.required && _isStartOn) {\n //get the marker's asset\n let asset = null;\n if(marker.asset && marker.asset !== \"\") asset = AssetService.get(marker.asset);\n if(!asset && marker.assessment && marker.assessment !== \"\") asset = AssessmentService.get(marker.assessment);\n if(!asset) return;\n\n const text = marker.buttonText && marker.buttonText !== \"\" ? marker.buttonText : `Click to View ${asset.title}`;\n const start = marker.cuePoint;\n const end = marker.cuePoint + 8;\n\n if (!asset) { return false; }\n let isAssessment = asset.type === 'QUIZ' || asset.type === 'WORKBOOK' || asset.type === 'BOOKEXAM';\n\n const overlay = {\n align: \"bottom-right\",\n content: `${text}`,\n start: start,\n end: end\n };\n overlays.push(overlay);\n }\n });\n data.overlays = overlays;\n }\n \n data.classId = classId;\n data.lecture = lecture;\n data.unit = unit;\n data.ready = true;\n data.isStartOn = _isStartOn===null ? true : _isStartOn; \n setData(data);\n \n }, []);\n\n const onPlayerReady = _player => {\n\n setPlayer(_player);\n\n let videoProgressStatus = 'PENDING';\n let cuePoint = 0;\n\n if (lectureLog) {\n videoProgressStatus = lectureLog.status;\n\n if(videoProgressStatus === 'PENDING' || videoProgressStatus === 'IN_PROGRESS'){\n cuePoint = lectureLog.lastCuePoint;\n _player.currentTime(cuePoint);\n } else if(videoProgressStatus === 'COMPLETED'){\n _player.currentTime(cuePoint);\n }\n }\n //workaround Safari!\n _player.on('loadedmetadata', () => {\n _player.currentTime(cuePoint);\n });\n\n //iPhone/iPad need to play first, then set the time\n /*\n let initdone = false;\n player.on(\"canplaythrough\", () => {\n if(!initdone){\n player.currentTime(cuePoint);\n initdone = true;\n }\n });*/\n\n //create or update track\n const videoProgressTrack = TrackerService.getVideoProgressTrack(lecture._id);\n\n let _markers = [];\n let _events = [];\n\n if(!videoProgressTrack){\n if(markers && markers.length > 0) {\n _markers = markers.map(m => { \n return { markerId: m._id, status: \"PENDING\"} \n });\n }\n } else {\n _markers = videoProgressTrack.markers;\n\n _markers.forEach(m => {\n const mrkr = MarkerService.get(m.markerId);\n if(mrkr && Math.floor(mrkr.time) - cuePoint < -2 ){\n m.status = \"PENDING\";\n }\n });\n }\n \n TrackerService.createOrUpdateVideoProgressTrack(lecture._id, cuePoint, videoProgressStatus, _markers, _events);\n\n if(autoplay) _player.play()\n };\n\n const onEndVideo = async () => {\n await TrackerService.trackLecture(lecture._id, {\n lastCuePoint: lecture.duration,\n status: \"COMPLETED\"\n });\n completed();\n }\n\n const onForwardOrRewind = (p,t) => {\n //rewind\n if (active===true && player) {\n player.currentTime(t);\n }\n if(t < p) {\n TrackerService.resetVideoProgressTracks(lecture._id);\n }\n }\n\n const showVideoPlayer = () => {\n if(!data || !data.ready) { return <>Video could not be loaded}\n \n return onPlayerReady(player)}\n onEnd={() => onEndVideo()}\n onTimeUpdate={(time) => onTimeUpdate(time)}\n onSeeked={(p,t) => onForwardOrRewind(p,t)}\n />\n }\n\n return (\n
    \n { showVideoPlayer() }\n
    \n );\n};\n\nexport default LimespringVideoPlayer;\n","export default class Playlist {\n constructor(unit, lectures, assessments) {\n this.unit = unit;\n this.lectures = lectures;\n this.assessments = assessments;\n }\n\n getUnit() {\n return this.unit;\n }\n\n setUnit(unit) {\n this.unit = unit;\n }\n\n getLectures() {\n return this.lectures;\n }\n\n setLectures(lectures) {\n this.lectures = lectures;\n }\n\n getAssessments() {\n return this.assessments;\n }\n\n setAssessments(assessments) {\n this.assessments = assessments;\n }\n\n toString() {\n return JSON.stringify(this);\n }\n}\n","import UnitService from \"./../services/UnitService\";\nimport LectureService from \"./../services/LectureService\";\nimport Playlist from \"./../payloads/Playlist\";\n\nexport default {\n getByUnitId: id => {\n const unit = UnitService.get(id);\n const lectures = unit.lectures;\n const assessments = unit.assessments;\n return new Playlist(unit, lectures, assessments);\n }\n};\n","import React from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Rater from \"react-rater\";\nimport {useHistory} from \"react-router-dom\";\nimport DeepLinking from './../../../utils/DeepLinking';\nimport \"./videoleftmenubuttons.css\";\nimport { Badge,OverlayTrigger, Tooltip, } from \"react-bootstrap\";\n\nconst PlayVideoQuizzes = props => {\n\n const { classId, quizzes, logs, unit, lecture, isStartOn=false, tooltipText=\"\" } = props;\n\n const history = useHistory(); \n\n const showQuiz = (id) => {\n history.push({pathname: DeepLinking.STUDENT.QUIZ_VIEW_PATH.replace(':id', id), state: {classId: classId, unit:unit, lecture: lecture, source:'unit'}});\n }\n\n const renderQuizzLocked = (quiz, quizProgress) => {\n return (<>\n \n {tooltipText}\n \n }\n > \n
    \n
    \n \n
    \n
    \n
    \n

    {quiz.title}

    \n \n
    \n
    \n\n
    \n \n \n );\n }\n\n const renderQuiz = (quiz, quizProgress) => {\n return (<>\n \n \n \n }\n >\n
    showQuiz(quiz._id)}>\n
    \n \n
    \n
    \n

    {quiz.title}

    \n {\n quizProgress && quizProgress.status !== 'PENDING' ?\n \n :\n \n Pending\n \n }\n \n
    \n\n
    \n \n \n );\n }\n\n const render = (quiz, quizProgress) => {\n if (isStartOn) {\n return renderQuiz(quiz, quizProgress);\n } else {\n return renderQuizzLocked(quiz, quizProgress);\n }\n }\n\n\n // return (\n //
    \n // {quizzes.map(quiz => {\n // const quizProgress = logs.find(log => {\n // return log._id === quiz._id;\n // });\n // return (\n // <>\n // \n // \"Hola mundo\"\n // \n // }\n // >\n //
    showQuiz(quiz._id)}>\n //
    \n // \n //
    \n //
    \n //

    {quiz.title}

    \n // {\n // quizProgress && quizProgress.status !== 'PENDING' ?\n // \n // :\n // \n // Pending\n // \n // }\n \n //
    \n\n //
    \n // \n // \n // );\n // })}\n //
    \n // );\n\n return (\n //
    \n
    \n {quizzes.map(quiz => {\n const quizProgress = logs.find(log => {\n return log._id === quiz._id;\n });\n return (\n render(quiz, quizProgress)\n );\n })}\n
    \n );\n};\n\nexport default PlayVideoQuizzes;\n","import React, {useState} from \"react\";\nimport VideoTimeUtils from \"./../../../utils/VideoTimeUtils\";\nimport greencheck from \"./../../../images/check.svg\";\nimport PlayVideoQuizzes from './PlayVideoQuizzes';\nimport {Collapse} from 'react-bootstrap';\nimport * as Icons from 'react-bootstrap-icons';\nimport UnitService from './../../../services/UnitService';\nimport AssessmentService from './../../../services/AssessmentService';\nimport \"./videoleftmenubuttons.css\";\n\nconst PlayVideoButton = props => {\n const {\n videoLength,\n isActive,\n videoCompleted,\n lecture,\n loadLecture,\n unitId,\n classId,\n log,\n isStartOn=false, tooltipText=\"\"\n } = props;\n\n const [expanded, setExpanded] = useState(false);\n\n const convertTime = () => {\n return VideoTimeUtils.formatVideoTime(videoLength);\n };\n\n const playLectureVideo = id => {\n loadLecture(id);\n };\n\n const getUnit = id => {\n return UnitService.get(id);\n };\n\n const showCaret = () => {\n if(expanded){ return }\n else { return }\n }\n\n const renderVideoThumbnail = () => {\n if(videoCompleted !== \"COMPLETED\"){\n return (
    playLectureVideo(lecture._id)}>\n
    \n
    \n
    \n
    )\n }else{\n return(
    playLectureVideo(lecture._id)}>\n
    \n
    \n );\n }\n}\n\nconst renderInfo = () => {\n return (

    playLectureVideo(lecture._id)} style={{width:185, paddingLeft:10}}>{lecture.title}
    {convertTime()}

    );\n}\n\n const renderQuizzes = () => {\n if(lecture.assessments && lecture.assessments.length > 0) {\n return (
    setExpanded(!expanded)}>\n \n
    \n Quizzes\n
    {showCaret()}
    \n
    \n
    );\n }else{\n return (<>);\n }\n }\n\n const populateQuizzes = () => {\n const quizzes = AssessmentService.getByIds(lecture.assessments);\n if (!quizzes || quizzes.length === 0 || quizzes[0] === undefined) { return <> }\n \n //make sure order is respected\n let order = {};\n lecture.assessments.forEach((a, i) => { order[a] = i; });\n quizzes.sort((a, b) => {\n return order[a._id] - order[b._id];\n });\n\n\n const quizlogs = log.assessmentslogs.filter(assessmentLog =>\n quizzes.find(quiz => quiz._id === assessmentLog._id)\n );\n return (\n \n );\n };\n\n return (\n <>\n
    \n
    \n {renderVideoThumbnail()}\n {renderInfo()}\n
    \n
    \n {renderQuizzes()}\n
    \n
    \n \n
    \n {populateQuizzes()}\n
    \n
    \n \n );\n};\n\nexport default PlayVideoButton;\n","import React from \"react\";\nimport { OverlayTrigger, Tooltip, Button } from \"react-bootstrap\";\nimport \"./videoleftmenubuttons.css\";\n\nconst PlayVideoExamButton = props => {\n\n const { score, status, defaultText, listener } = props;\n\n const examBookLocked = () => {\n return (\n \n {defaultText}\n \n }\n >\n
    \n
    \n
    Book Exam\n
    \n
    \n
    \n \n );\n };\n\n const examBookPending = () => {\n return (\n \n Bookexam is ready!\n \n }\n >\n
    \n
    \n
    Book Exam\n
    \n listener(false)}\n >\n Start\n \n
    \n \n );\n };\n\n const bookexamTaken = () => {\n return (\n \n Bookexam already taken!\n \n }\n >\n
    listener(true)}>\n
    \n
    Book Exam\n
    \n
    \n {Math.ceil(score)}%\n
    \n
    \n \n );\n }\n\n const render = () => {\n if (status === \"TAKEN\") {\n return bookexamTaken();\n } else if (status === \"PENDING\") {\n return examBookPending();\n } else if (status === \"LOCKED\") {\n return examBookLocked();\n }\n };\n\n return ( render() );\n};\n\nexport default PlayVideoExamButton;\n","import React from \"react\";\nimport { OverlayTrigger, Tooltip, Button } from \"react-bootstrap\";\nimport \"./videoleftmenubuttons.css\";\n\nconst PlayVideoWorkbookButton = props => {\n const { grade, status, listener } = props;\n const workbookPending = () => {\n return (\n \n Workbook is ready!\n \n }\n >\n
    \n
    \n
    Workbook\n
    \n listener()}\n >\n Start\n \n
    \n \n );\n };\n const workbookLocked = () => {\n return (\n \n Locked! Complete the lesson(s) to unlock.\n \n }\n >\n
    \n
    \n
    Workbook\n
    \n
    \n
    \n \n );\n };\n const isTaken = status => {\n if (status === \"TAKEN\") {\n return (\n \n Improve your score by retaking this workbook!\n \n }\n >\n
    \n
    \n
    \n
    \n Workbook\n listener()}\n >\n Retry\n \n
    \n
    \n
    \n {Math.ceil(grade)}%\n
    \n
    \n \n );\n } else if (status === \"PENDING\") {\n return workbookPending();\n } else if (status === \"LOCKED\") {\n return workbookLocked();\n }\n };\n return isTaken(status);\n};\n\nexport default PlayVideoWorkbookButton;\n","import React from \"react\";\nimport { OverlayTrigger, Tooltip, Button } from \"react-bootstrap\";\nimport \"./videoleftmenubuttons.css\";\n\nconst PlayVideoAssignmentButton = props => {\n\n const { score, status, defaultText, listener } = props;\n\n const assignmentLocked = () => {\n return (\n \n {defaultText}\n \n }\n >\n
    \n
    \n
    Assignment\n
    \n
    \n
    \n \n );\n };\n\n const assignmentPending = () => {\n return (\n \n Assignment is ready!\n \n }\n >\n
    \n
    \n
    Assignment\n
    \n listener(false)}\n >\n Start\n \n
    \n \n );\n };\n\n const assignmentTaken = () => {\n return (\n \n Assignment already taken!\n \n }\n >\n
    listener(true)}>\n
    \n
    Assignment\n
    \n
    \n {Math.ceil(score)}%\n
    \n
    \n \n );\n }\n\n const render = () => {\n if (status === \"TAKEN\") {\n return assignmentTaken();\n } else if (status === \"PENDING\") {\n return assignmentPending();\n } else if (status === \"LOCKED\") {\n return assignmentLocked();\n }\n };\n\n return ( render() );\n};\n\nexport default PlayVideoAssignmentButton;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport ResponseUtil from './../utils/ResponseUtil';\nimport LocalStorageService from './LocalStorageService';\n\nexport default {\n\n submit: async (attempt, status='UPDATE') => {\n try { \n let response = await new ApiService().post(ApiPath.SUBMIT_ATTEMPT_ENDPOINT.replace(\":status\",status), attempt);\n if (ResponseUtil.isOK(response)) {\n const { attempts } = response.data;\n return attempts[0];\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AttemptService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n submitWithToken: async (attempt, status='UPDATE', token) => {\n try { \n let response = await new ApiService().post(ApiPath.SUBMIT_ATTEMPT_TOKEN_ENDPOINT.replace(\":status\",status).replace(\":token\", token), attempt);\n if (ResponseUtil.isOK(response)) {\n const data = response.data;\n return data;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`AttemptService | Error while attempting to get response: ${error}`);\n return null;\n }\n},\n \n update: async (attempt) => {\n try { \n const body = {attempt: attempt};\n let response = await new ApiService().post(ApiPath.UPDATE_ATTEMPT_ENDPOINT.replace(':id', attempt._id), body);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AttemptService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n getForAssessment: async id => {\n try { \n let response = await new ApiService().get(ApiPath.GET_ATTEMPT_FOR_ASSESSMENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { attempts } = response.data;\n return attempts[0];\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AttemptService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n getForAssessmentBestAttempt: async id => {\n try { \n let response = await new ApiService().get(ApiPath.GET_BEST_ATTEMPT_FOR_ASSESSMENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n const { attempts } = response.data;\n return attempts[0];\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AttemptService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n getFirstPendingAttemptIndex: (attempts) => {\n let qindex = 0;\n if(!attempts || attempts.length === 0) return qindex;\n for (let index = 0; index < attempts.length; index++) {\n const attempt = attempts[index];\n if(attempt.status === 'PENDING') {\n qindex = index;\n break;\n }\n }\n\n return qindex;\n },\n\n getByIds: async ids => {\n try {\n let response = await new ApiService().post(ApiPath.GET_ATTEMPTS_ENDPOINT, ids);\n if (ResponseUtil.isOK(response)) {\n return response.data.attempts;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`AttemptService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n remove: async (userId, ids, context, classId='') => {\n try { \n let response = await new ApiService().post(ApiPath.REMOVE_ATTEMPTS_ENDPOINT, {attemptIds: ids, userId: userId, context: context, classId: classId});\n if (ResponseUtil.isOK(response)) {\n const { reports } = response.data;\n LocalStorageService.store({ reports: reports });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AttemptService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n}","export default __webpack_public_path__ + \"static/media/image_icon.1b3cbff6.png\";","export default __webpack_public_path__ + \"static/media/txt_icon.2663b0c6.png\";","import React, {useState, useEffect} from 'react';\nimport AssetService from './../../../services/AssetService';\nimport VideoTimeUtils from './../../../utils/VideoTimeUtils';\nimport IconPDF from \"../../../images/pdf_icon.png\";\nimport IconIMAGE from \"../../../images/image_icon.png\";\nimport IconDOCX from \"../../../images/word_icon.png\";\nimport IconXLSX from \"../../../images/excel_icon.png\";\nimport IconPPTX from \"../../../images/ppt_icon.png\";\nimport IconWWW from \"../../../images/link_icon.png\";\nimport IconTXT from \"../../../images/txt_icon.png\";\n\nconst PlayAncillaryItem = (props) => {\n\n const {marker} = props;\n \n const [icon, setIcon] = useState('');\n const [title, setTitle] = useState('');\n const [timestamp, setTimestamp] = useState('');\n\n useEffect(() => {\n if(marker){\n setTitle(getTitle());\n setTimestamp(marker.cuePoint);\n setIcon(getTypeIcon());\n }\n }, [marker]);\n\n const getTitle = () => {\n if(!marker) {return ''; }\n if(marker.asset && marker.asset !== \"\"){\n const asset = AssetService.get(marker.asset);\n if(asset){\n return asset.title;\n }\n }\n return '';\n }\n\n const getTypeIcon = () => {\n if(!marker) {return ''; }\n if(marker.asset && marker.asset !== \"\"){\n const asset = AssetService.get(marker.asset);\n if(asset){\n return getIcon(asset.type)\n }\n }\n\n return '';\n }\n\n const getThumbnail = () => {\n if(!marker) {return ''; }\n if(marker.asset && marker.asset !== \"\"){\n const asset = AssetService.get(marker.asset);\n if(asset){\n return asset.thumbnail\n }\n }\n\n return getTypeIcon();\n }\n\n const getIcon = (type) => {\n\n if (type === \"PDF\") {\n return IconPDF;\n } else if (type === \"IMAGE\") {\n return IconIMAGE;\n } else if (type === \"DOCX\") {\n return IconDOCX;\n } else if (type === \"XLSX\") {\n return IconXLSX;\n } else if (type === \"PPTX\") {\n return IconPPTX;\n } else if (type === \"WWW\") {\n return IconWWW;\n } else if (type === \"TXT\") {\n return IconTXT;\n }\n };\n\n const clickHandler = () => {\n if(!marker) { return; }\n\n if(marker.asset && marker.asset !== \"\"){\n const asset = AssetService.get(marker.asset);\n if(asset){\n if (asset.type === \"PDF\") window.open(`https://docs.google.com/viewer?url=${asset.url}&embedded=false`,\"_blank\");\n if(asset.type === 'IMAGE' || asset.type === 'WWW') window.open(asset.url, \"_blank\");\n if (asset.type === \"DOCX\" || asset.type === \"XLSX\" || asset.type === \"PPTX\") window.open(`https://view.officeapps.live.com/op/view.aspx?src=${asset.url}`, \"_blank\");\n }\n }\n }\n\n return (\n
    clickHandler()}>\n
    \n
    {title}
    @{VideoTimeUtils.formatVideoTime(timestamp)}
    \n
    \n );\n}\n \nexport default PlayAncillaryItem;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAACDCAMAAACwaGWWAAAAOVBMVEVHcEze29vd4eXIzdHh5ObY3N7d4eS8wsivtrzM09nJ0NfyVTrzVTvsnI/4vrX5pZf////92NL2gm9dPa78AAAADHRSTlMAED7S/4/7//9P/9xJChpzAAAB40lEQVR4Ae3bj2rcMAzH8SiRVWdzkrPf/2FXpmmcaE3bO+sHHP7yX4A/OIhSDLd8Eq0/joiWh1o3fqwtrT8mEz+TJAJizPy2rQDMesv5mx7xEO2bXhqlvXtfazJG0/bgD+m1nECaRVAtr1At7yDNOJBmHFTLBNUyQbUNquUE1fIK1TJWS1AtE1TboFomqLZBtYzVElTLWI2gWoJq+QW0bnuAxr96pQhNetrW1yK4wZqF1QSn9TnqaDHcHqFpWE2gGgtUYwFpFlYTqMYC1VhAmuU0+l0CO5jlXgvCrNM41UpsBxuH0ligGgtM07CaQDUWqMYC0iysJlCNqaddt//Vs/0dVT/SjpurPqNZ58dRVa8FaLeqI9cRpt0OHbnaWO1s7ylS/43q9d5pR6umQ+0J7bq7phsV9Q7Tiu8ZrehncyNd0BOl2YWDtOK1FqVdn2l2YdWaVcbs5NnX7roe11wNqZ0Fo9kpnS0ZrlU9w2un7uLQneyP7CoIrVVbnVjN/1UO1lwFqTWgVlsZrPlT+v8FPaIFNLWpTW1qL6CFv6o5LfzF0Gnhr6FTm9rUpja1qU1talN7fc0K1hbfFoptHqM9VNsXH0kgJmSMtWOuZqUwLC0fo4TBrCQBlhgG8L76nRoN7E76Axc0csmq+jtKAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAACDCAMAAABFlu4mAAAAP1BMVEVHcEy4vsO8wsg0fMrQ1Njf4uTV2dzc4OXb3N3h5OavtrzIzdF4pNSbvuQyeslll9BXi8QKYsPJ0di7wcb///8agy1QAAAACXRSTlMA0p6gb6P+QBCHn6GDAAAC8klEQVR4Xu3b21LjMAwGYJNNbMvHHHj/Z92N6qnS0JgmlnaGoT9DyfRCXyXbEJii9rHWnIi16lTMAKejh868yPRwKYtz7qP/3jAA14HVqBN2gCYACVMBNDQC9S6shiaA0vG+fgLqTQzQDlBMZf+wAK7fA9AM1IW+HagL0AzUBcsN7Fe6bwfqAsgAztKEZIBOGnBGGnAKY+SAThpwVhropAEnDvQsgD8GPlgA7Y5jOQCYj4GOBQC/uIOPhQeYj4OApGB4AH0DfHncfOkQYAiVvxG+GMMG0O5yUEBjH88GwL069eBZAXjeAh9AU/LUxSOwXE5ltyLAE5oSfXID1IOX6YDWYbsG3II/vwY6hnhCoH30CqBjTtM0hQvrgAQC9eKYcHEvPQB+myWMaaJkX8vTla6d5DxOu4yulqMp+SdAKMVbABJ2AE2lDUDB73bRHHAsXAA87KIY0vRNgq6lsluVoeJVAE6nAH+miRsgwQsBJAgDIA6AOADiALwKjO5MtATwBpYz2QPyuyh+rkEgrFcJp4JPBhYgEIBWICCxABPVghWIdxVYRlTK5n9AQgruvUQegAYTPjGJ0FuyPpOvQF6BuUjFQonpHFA1uAGxrDGwAVg4IQS3wgEhNgBHk3FUM1rlGTYg4+TRCTNeYk+Ve9Na4AGgRZixao44G1qC5m1Ki4BMCmtpXOPICODIR1zfhNPHB0YAC+JwyriwI0YAq8LtjMVyCazAWrEchlAuIysQC1C+49ESMG3TKW9eNVlcB42qBupmZgaAfuoEshiBSGMZERiZgbwZS7EoQZ8JSN+2/CKg4aD9qLvrN/DzD9obSMKAAZhjyEkQKNExj4n/19ivfzcNIzpNB60KFCaPKUkCjtqRBKid3ABIhBV4A2/Abs4BW/T/BJQsMCilRQGjVH8HFrYQYJWyIBl6L6hM+hUwgoBVa7RkA6ItaFUyiA1IVujVPVYL1acMQvUpPTNgFEVgTIOt/HMAf3mKZTAGo+qxTVH7/AWM6Qdm/DpnPwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGkAAACLCAMAAABV0EeBAAAAOVBMVEVHcEzd3d7a3uLh5Obh5Oa6wsbX2t3V2dyvtry7wse3vcLIztHK0deJsp1mnYBDhWMZbUA3f1n///+JC3pQAAAAEnRSTlMAEUGT/7Nv////4////////+S2uRcxAAACs0lEQVR42u3ba3OrIBSFYUB0Q0BI/f8/9hhjZ43xBDVlOadzfKfXL3mGDTW9WLVKa3M0rdXhTGM/rGm7/Z7u7OeJG2vNLgjOJ3n3bHtlWmwNaawtW+ZzAxIszuQgIcOBIKGbVghpW08qL0sYkuvWUGMpkmsJs4NUpBqOBApL4kl+QXUkab0qYUioWwyPICFzmnRTc4YsYas6soT5NXzpxpaQYUvoPMmcJt1qSsGV0hWlWJRaSJzxIUhsytSUYvBvC21NSWIpSFwKEp8ykLhUaF6lGMpFOybhbX4qrKn2VfKunMf1oNAkBbyMBY7k46rAWtO63ythemHx+vvXJOdJNsbv082WJgoFSBv5PuVsD7Vg4i7J9en+CNK+gOyQxPV5UiAdpPZIwSUokA5ToSj5HspxCWGjIK235ecSqLWEbakkgYIk2JZ30tYzIRJQspACtqUkHfrKXVJhlFpsC0PCqtTXHXEkK3QJFF0CRZdA0SVQdAkUW0JHJLu/S7qk/VIaptz8qRumEmNN/TCVn486TPWc6YXhkV98TJCwjoRR0k4EHh8m6ez5eXPc/P5Fkkd2TLZ6JyH7JKa3Qr3CpgFlloSjjgNOkJDMULizpYzZUSXsVGJLeZizmSzJ8F3gSv2Aep6EKx8OBeUagUvEvDTLe851EyAgWVJaPWskjoSnWRwNjiSLB8dRrythFWk5yr6+lF4XIbN8fWdZiPTz0yVd0iX9M5IfC3Ys+o2u33xUlxrrXZ/yKdKcA0iUkLgeIE9CYQRzZksIW0iQBKHRS/mn35eT/k54SZf0f0rmPKnevTnoL1KjtD2nTqmTJKNUPEfSChtFLeLGZXK4e5Qd7sYm1+EmaW6i5oR/8OY0f3bnUA0gUDQIkqaPDlZkfcmuM/TJoU4qD06X/tGv1hClMWorXSO16g9fb5OnkiMOdgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAACDCAMAAABFlu4mAAAAS1BMVEVHcEzd3d7a3uLf4+Th5Oa4v8Th4+XIzdGvtry4vsS6wcbV2dze4eTK0di9xMvqzMLds6fceFvVY0Pak3/SQhjTWjn33tb////Ef23SZ3UEAAAAFnRSTlMAEEGi/7Nm//99///I//b///////9Lnvn1zQAAAu5JREFUeAHt2tFymzoQxnEJBOAoiVZaJfb7P+nhNLOhYD4G4dWN639nPJ5e7K9CUn2DWWdtU5C1pqimdeW1XXOQ6d2phnHqgg2pcSd7G//UNWa31p0HpD3COwVg7NCDst5pAFMXhX8/ACQLnr8KAHaicVoAeExeGRg71QUIgAWvBYCnZJ0KgIVeCYBn6V0NAPfBqQB4o606IF1qA6OtDXS1gdHWBrrawGhrAxcVYBhxKoAfcY0G4D4w0KkAbngbpz9bH586wAfOKgAiDBsfH005AARAtOUAEoZN4lMBEEFWsfj2fgQIFBMfWoNMH2ZnBvDwPIWAEFY7LWuQbzOAh+8BnBOHWZDmpSAgcMzSPjDFXoR5BfJFADwcAURMP8AUoZ2+A4hTnoMAxTzFAszCcgGDAGg4AELKeQWIgFbg8fA1IENXgAjrJRiLhwMg5k0gh8VplcwXHA4AzgCIToTFPfjKZQBlBMhDcovbVgr4jIG48X9rMcAQmPIiyPihHEh7AG38AhUClPcAdkvhBMAASImZKLg5OUeFQFr/Jclc8Av0KICTNegAnoiZNoQHgUjMnBJczykAR+6uM6cIt7XXM/B9/S1QggBlnNvqFwjXv2ME+AyLbrMVIBEAXIRAKAKuCQAhg5I7AHCc+qEIAHCbwxEgzl8DAsBJJXcciNf/g4BPcL4CAARyxcD3FgD2IaH55XsghQjGHz9FjACJOE1FDk4quwcZA2UBgO8AXxIG0Px8G0vyu0CQ8fpAzNIzAkNJJwB2RT0dID/6XA2QngjQP6aS/kV7AVoA+5L+tXvwumgcU1XAuqlAzKkeII18u6VUEfA/DcS3pHfRrAMRcUwKx9Q6nOxO0gJwFBQB3At4UwtdNLWKgReg3wt4AZo9wUUzdYHWmPeqQG9MX/X3wJrKxwi8B6dWD951VMuauktowZtwaoHXHdVqjNTW22ElAWxAVaE3y/pqz1+ymqe1tUbSJsB4IZr28ekNGi/IQ5l1/wHSRaKjOgREHgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,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\"","import React, {useState, useEffect} from 'react';\nimport ReactHtmlParser from 'react-html-parser';\nimport LimespringUtils from \"./../../../utils/LimespringUtils\";\nimport VideoTimeUtils from \"./../../../utils/VideoTimeUtils\";\nimport Config from \"./../../../config/Config\";\nimport $ from 'jquery';\nimport './../texteditor/transcript-editor.css';\n\nconst PlaylistTranscript = (props) => {\n\n const {transcript, markers, fontSize, playbackTime, gotoCuePoint, openAncillaryItem} = props;\n\n const [transcriptLog, setTranscriptLog] = useState('');\n const [tracks, setTracks] = useState(null);\n const [lastCue, setLastCue] = useState(0);\n\n //jquery hack to get runtime HTML event\n if(transcript){\n $('.transcript-editor-jumpcue').on('click', (e)=> {\n e.preventDefault();\n e.stopImmediatePropagation();\n if(e.target && e.target.dataset.cue){\n const cuePointInSecs = VideoTimeUtils.getTrackTimeInSeconds(e.target.dataset.cue);\n gotoCuePoint(cuePointInSecs);\n }\n });\n\n $('.transcript-editor-asset').on('click', (e)=> {\n e.preventDefault();\n e.stopImmediatePropagation();\n if(e.target && e.target.dataset.asset && e.target.dataset.asset !== ''){\n openAncillaryItem(e.target.dataset.asset, e.target.dataset.assetType);\n }\n });\n }\n\n useEffect(()=>{\n if(playbackTime > 0){\n if(tracks){\n let _tracks = [...tracks];\n _tracks = _tracks.map(t => {\n if(t.cue < lastCue) { \n t.highlight = false;\n } else if(t.cue <= Math.floor(playbackTime) && t.cue >= lastCue){\n t.highlight = true;\n setLastCue(t.cue);\n }\n return t;\n });\n processTranscriptLog(_tracks);\n }\n }\n }, [playbackTime]);\n\n useEffect(()=>{\n if(transcript && transcript.tracks && transcript.tracks.length > 0) { \n \n let _tracks = [...transcript.tracks];\n\n //get markers added to tracks dynamically!\n if(markers && markers.length > 0){\n markers.forEach(marker => {\n _tracks.push(LimespringUtils.getMarkerAsTrack(marker));\n });\n }\n\n //now sort by time!\n _tracks = _tracks.sort(function(a, b){return VideoTimeUtils.getTrackTimeInSeconds(a.timestamp) - VideoTimeUtils.getTrackTimeInSeconds(b.timestamp)});\n \n\n //decorate for performance boost!\n _tracks = _tracks.map(t => { \n t.cue = VideoTimeUtils.getTrackTimeInSeconds(t.timestamp); \n t.highlight = false;\n return t;\n });\n setTracks(_tracks);\n processTranscriptLog(_tracks) \n }\n }, [transcript]);\n\n\n useEffect(() => {\n setTimeout(() => {if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset()}, Config.mathRenderTimer);\n }, [transcriptLog]);\n\n const processTranscriptLog = (tracks) => {\n const _tracks = LimespringUtils.getDecoratedTranscriptTracksClient(tracks);\n if(_tracks && _tracks.length > 0) {\n setTranscriptLog(_tracks.join(' '));\n }\n }\n\n return (\n
    \n { ReactHtmlParser(transcriptLog) }\n
    \n );\n}\n \nexport default PlaylistTranscript;","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n\n getFromLocal: (transcriptId) => {\n let transcripts = LocalStorageService.get('transcripts');\n if(transcripts && transcripts.length > 0) {\n const transcript = transcripts.find(t => t._id === transcriptId);\n if(transcript) return transcript;\n }\n\n return null;\n },\n\n getDefaultTranscript: async (transcriptId) => {\n // let transcripts = LocalStorageService.get('transcripts');\n \n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.getTranscript()); }\n\n try { \n let response = await new ApiService().get(ApiPath.GET_TRANSCRIPT_BY_ID_ENDPOINT.replace(':transcriptId', transcriptId));\n if (ResponseUtil.isOK(response)) {\n const { transcript } = response.data;\n if(!transcript) return null;\n\n //L20-1031\n // if(transcripts && transcripts.length > 0){\n // transcripts.push(transcript);\n // }else{\n // transcripts = [transcript];\n // }\n // LocalStorageService.store({ transcripts: transcripts });\n return transcript;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`TranscriptService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n createTranscript: async (lectureId, languageCode) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.trackClass()); }\n\n try { \n let response = await new ApiService().post(ApiPath.CREATE_TRANSCRIPT_LANGUAGE_CODE_ENDPOINT.replace(':id', lectureId).replace(':code', languageCode), {});\n if (ResponseUtil.isOK(response)) {\n const { transcript } = response.data;\n let transcripts = LocalStorageService.get('transcripts');\n if(!transcripts) { transcripts = [transcript]; }\n else { transcripts.push(transcript) }\n LocalStorageService.store({ transcripts: transcripts });\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`TranscriptService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n removeAllTranscripts: async (lectureId) => {\n\n try { \n let response = await new ApiService().post(ApiPath.REMOVE_LECTURE_TRANSCRIPTS_ENDPOINT.replace(':id', lectureId), {});\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`TranscriptService | Error while attempting to get response: ${error}`);\n return false;\n }\n }\n}","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\n\nexport default {\n\n compile: async payload => {\n\n try {\n let response = await new ApiService().post(ApiPath.COMPILE_CODE_ENDPOINT, payload);\n if(response && response.status === 200) { \n const { output } = response.data;\n return output;\n }\n } catch (error) {\n console.error(`CompileService compile() | Error while attempting to get response: ${error}`);\n return {};\n }\n },\n\n compileQuestion: async (questionId, payload) => {\n try {\n let response = await new ApiService().post(ApiPath.COMPILE_QUESTION_ENDPOINT.replace(':id', questionId), payload);\n if(response && response.status === 200) { \n return response.data;\n }\n } catch (error) {\n console.error(`CompileService compileQuestion() | Error while attempting to get response: ${error}`);\n return {};\n }\n }\n}","export default {\n\n hasInputFunction: (codeInput) => {\n if(!codeInput || codeInput === '') return false;\n if(codeInput.includes(\"input(\")) return true;\n return false;\n },\n\n addNewLineCharacterToInputMessage: (codeInput) => {\n if(!codeInput || codeInput === '') return codeInput;\n let updatedCodeInput = codeInput;\n if(codeInput.includes(\"input(\")){\n const global_regex = /input\\(([^)]+)\\)/g;\n const single_regex = /input\\(([^)]+)\\)/;\n\n const inputs = codeInput.match(global_regex);\n\n for (let index = 0; index < inputs.length; index++) {\n let input = inputs[index];\n let m = single_regex.exec(input);\n if (m !== null) {\n //position 1 of m is the actual string\n let message = m[1];\n\n //remove ticks\n if(message.includes(\"'\")){\n message = message.replace(new RegExp(\"'\", 'g'), \"\");\n }else{\n //replace only two\n message = message.replace(\"\\\"\", \"\").replace(\"\\\"\", \"\");\n }\n \n message = message + \"\\\\n\";\n const newInput = \"input('\" + message + \"')\";\n updatedCodeInput = updatedCodeInput.replace(input, newInput);\n }\n }\n }\n\n return updatedCodeInput;\n },\n \n deserializeOutput: (message) => {\n if(!message || message === '') return message;\n if(!message.includes(\"\\n\")) return message;\n let newMessage = message;\n //response message comes as a string separated by \\n\n const messageArray = message.split('\\n');\n if(messageArray && messageArray.length > 3){\n //we're removing last entry due to hard bug in python compiler\n const lastEntry = messageArray.pop();\n console.log('deserializeOutput() | last entry ignored: ' + lastEntry);\n newMessage = messageArray.join('\\n');\n }\n\n return newMessage;\n },\n\n extractFromInputFunction: (codeInput) => {\n if(!codeInput || codeInput === '') return '';\n if(codeInput.includes(\"input(\")){\n let sanitizedCodeInput = codeInput.replace(/\\\"/g, \"'\");\n //const regex = /input\\([\\s]*?'([\\S]*?)'[\\s]*?\\)/;\n const regex = /input\\(([^)]+)\\)/g;\n let message = '';\n let m;\n if ((m = regex.exec(sanitizedCodeInput)) !== null) {\n // The result can be accessed through the `m`-variable.\n // we have just one result!\n \n if(m && m.length > 0){\n //position 1 of m is the actual string\n message = m[1];\n message = message.replace(/'/g , \"\");\n }\n }\n return message;\n }\n return '';\n },\n\n getInputAsTyped: (userInput) => {\n if(!userInput || userInput === '') return '';\n //should check if input is a number or string\n let typedUserInput = userInput;\n const n = Number(userInput);\n if(isNaN(n)) {\n if(userInput.toUpperCase() === 'TRUE' || userInput.toUpperCase() === 'FALSE'){\n if(userInput.toUpperCase() === 'TRUE') typedUserInput = 'True';\n if(userInput.toUpperCase() === 'FALSE') typedUserInput = 'False';\n }\n } else {\n typedUserInput = n;\n }\n return typedUserInput;\n },\n\n replaceInputFuncWithUserInput: (codeInput, userInput) => {\n if(!codeInput || codeInput === '') return '';\n if(!userInput || userInput === '') return codeInput;\n\n //should check if input is a number or string\n let typedUserInput = \"'\" + userInput + \"'\";\n const n = Number(userInput);\n if(isNaN(n)) {\n if(userInput.toUpperCase() === 'TRUE' || userInput.toUpperCase() === 'FALSE'){\n if(userInput.toUpperCase() === 'TRUE') typedUserInput = 'True';\n if(userInput.toUpperCase() === 'FALSE') typedUserInput = 'False';\n }\n } else {\n typedUserInput = userInput;\n }\n\n codeInput = codeInput.replace(/input\\(.+\\)/, typedUserInput);\n return codeInput;\n }\n}","import React, {useState, useEffect} from 'react';\nimport { v4 as uuidv4 } from \"uuid\";\nimport LimespringVideoPlayer from \"./../../../widgets/videoplayer/LimespringVideoPlayer\";\nimport \"./../../../widgets/playlist/playlist.css\";\nimport \"react-rater/lib/react-rater.css\";\nimport Proxy from \"./../../../../proxies/PlaylistProxy\";\nimport PlayVideoButton from \"./../../../widgets/playlist/PlayVideoButton\";\nimport PlayVideoExamButton from \"./../../../widgets/playlist/PlayVideoExamButton\";\nimport PlayVideoWorkbookButton from \"./../../../widgets/playlist/PlayVideoWorkbookButton\";\nimport PlayVideoAssignmentButton from \"./../../../widgets/playlist/PlayVideoAssignmentButton\";\nimport DeepLinking from \"./../../../../utils/DeepLinking\";\nimport StudentLogService from \"./../../../../services/StudentLogService\";\nimport AttemptService from \"./../../../../services/AttemptService\";\nimport Config from \"./../../../../config/Config\";\nimport { useHistory } from \"react-router-dom\";\nimport { Tabs, Tab, Form, Button, Badge } from \"react-bootstrap\";\nimport PlayAncillaryItem from \"./../../../widgets/playlist/PlayAncillaryItem\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport PlaylistTranscript from \"./../../../widgets/playlist/PlaylistTranscript\";\nimport checkIcon from './../../../../images/check.svg';\nimport AssetService from '../../../../services/AssetService';\nimport TranscriptService from '../../../../services/TranscriptService';\nimport CompileService from '../../../../services/CompileService';\nimport Editor from \"@monaco-editor/react\";\nimport $ from 'jquery';\nimport CodeInputUtils from '../../../../utils/CodeInputUtils';\nimport DateUtils from '../../../../utils/DateUtils';\nimport YouTubeVideoPlayer from '../../../widgets/videoplayer/YouTubeVideoPlayer'\n\nconst UnitLayout = (props) => {\n\n const {classId, unit, lectures, currentLecture, playLectureOnDemand, autoplay=false, completed}= props;\n\n const history = useHistory();\n\n const [preassessment ,setPreassessment] = useState(null);\n const [preassessmentScore, setPreassessmentScore] = useState(0);\n const [hasPlacementExam, setHasPlacementExam] = useState(false);\n const [playlist, setPlaylist] = useState(null);\n const [log, SetLog] = useState(null);\n const [activeKey, setActiveKey] = useState('outline');\n const [transcript, setTranscript] = useState(null);\n const [fontSize, setFontSize] = useState(\"16px\");\n const [playbackTime, setPlaybackTime] = useState(0);\n const [role, setRole] = useState(ProfileService.getRole());\n const [finalAssessment, setFinalAssessment] = useState(false);\n const [scrub, setScrub] = useState(0);\n const [initialInputProcessed, setInitialInputProcessed] = useState(false);\n const [previousCodeInput, setPreviousCodeInput] = useState([]);\n const [codeInput, setCodeInput] = useState('');\n const [compiledOutput, setCompiledOutput] = useState('');\n const [showInputPrompt, setShowInputPrompt] = useState(false);\n const [inputPromptMessage, setInputPromptMessage] = useState('');\n const [promptInputCapture, setPromptInputCapture] = useState('');\n const [isStartOn, setIsStartOn] = useState(true);\n const [startOn, setStartOn] = useState('');\n\n const editorOptions = {\n readOnly: false,\n minimap: { enabled: false }\n };\n\n useEffect(() => {\n\n const load = async () => {\n if(unit){\n const _isStartOn = StudentLogService.getIsStartOn(unit._id);\n const _startOn = StudentLogService.getStartOn(unit._id);\n setIsStartOn(_isStartOn===null ? true : _isStartOn);\n setStartOn(_startOn===null ? \"\" : _startOn);\n const playlist = Proxy.getByUnitId(unit._id);\n const log = StudentLogService.getFullUnitLog(playlist);\n SetLog(log);\n setPlaylist(playlist);\n\n //if this is a placement unit, then redirect to assessment - (if student has not taken it already)\n if(unit && unit.assessments.length > 0){\n if(unit.placement === true){\n setHasPlacementExam(true);\n const placementExam = unit.assessments.find(assessment => { return assessment.type === 'PLACEMENT_EXAM'});\n\n //find out if placement exam has been taken\n if(placementExam && log && log.assessmentslogs){\n if(log.assessmentslogs.length > 0){\n const placementExamLog = log.assessmentslogs.find(al => { return al._id === placementExam._id});\n if(placementExamLog){\n if(placementExamLog.status === 'TAKEN'){\n const placementExamScore = placementExamLog.bestScore;\n setPreassessment(placementExam);\n setPreassessmentScore(placementExamScore);\n return;\n }\n }\n }\n history.push({pathname: DeepLinking.STUDENT.EXAM_VIEW_PATH.replace(\":id\", placementExam._id), state: {classId: classId, unit: unit, lecture:null}});\n }\n }\n }\n \n if(currentLecture && currentLecture.transcripts && currentLecture.transcripts.length > 0){\n const trscRef = currentLecture.transcripts.find(t => t.code === 'en');\n if(trscRef){\n const _transcript = await TranscriptService.getDefaultTranscript(trscRef._id);\n setTranscript(_transcript);\n }\n }\n\n //lazy load transcripts L20-1031\n // if(lectures && lectures.length){\n // for (const lecture of lectures) {\n // const trscRef = lecture.transcripts.find(t => t.code === 'en');\n // if(trscRef){\n // await TranscriptService.getDefaultTranscript(trscRef._id);\n // }\n // }\n // } \n \n if(!unit.lectures || unit.lectures.length === 0){\n setFinalAssessment(true);\n }\n }\n }\n\n load();\n }, [currentLecture]);\n \n const showLoader = () => {\n if (!playlist) {\n return Loading...;\n }\n };\n \n const fontHandler = action => {\n const currentSize = Number.parseInt(fontSize.replace(\"px\", \"\"));\n \n if (action === \"increase\") {\n let newSize = (currentSize + 1).toString() + \"px\";\n setFontSize(newSize);\n } else if (action === \"decrease\") {\n if (currentSize <= 1) {\n return;\n }\n let newSize = (currentSize - 0.1).toString() + \"px\";\n setFontSize(newSize);\n } else if (action === \"default\") {\n setFontSize(\"16px\");\n }\n };\n\n const showQuiz = (id) => {\n history.push({pathname: DeepLinking.STUDENT.QUIZ_VIEW_PATH.replace(':id', id), state: {classId: classId, unit:unit, lecture: null, source:'unit'}});\n }\n \n const showWorkbook = () => {\n const workbooks = playlist.assessments.filter(assessment => assessment.type === \"WORKBOOK\");\n const workbook = workbooks[0];\n let nextWorkbookId = workbook._id;\n if (workbooks.length > 1) {\n nextWorkbookId = workbooks[1]._id;\n }\n history.push({pathname: DeepLinking.STUDENT.WORKBOOK_VIEW.replace(\":id\", workbook._id), state: {classId: classId, unitId: unit._id, nextWorkbookId: nextWorkbookId, workbooks:workbooks}});\n };\n \n const showExam = (examParam) => {\n const exam = playlist.assessments.find(assessment => {\n return assessment.type === \"BOOKEXAM\" && assessment._id===examParam._id;\n });\n history.push({pathname: DeepLinking.STUDENT.EXAM_VIEW_PATH.replace(\":id\", exam._id), state: {classId, classId}});\n };\n\n const showFinalExam = () => {\n const exam = playlist.assessments.find(assessment => {\n return assessment.type === \"BOOKEXAM\";\n });\n history.push({pathname: DeepLinking.STUDENT.EXAM_VIEW_PATH.replace(\":id\", exam._id), state: {classId, classId}});\n };\n\n const showAssignment = () => {\n const assignment = playlist.assessments.find(assessment => {\n return assessment.type === \"ASSIGNMENT\";\n });\n window.open(DeepLinking.STUDENT.ASSIGNMENT_VIEW.replace(\":id\", assignment._id),'targetWindow', `toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=900,height=600`);\n }\n \n const showExamResults = async (examParam) => {\n const exam = playlist.assessments.find(assessment => {\n return assessment.type === \"BOOKEXAM\" && assessment._id===examParam._id;});\n const attempt = await AttemptService.getForAssessment(exam._id);\n if(!attempt) {console.log(`unable to get grade report from server.`)}\n history.push({pathname: DeepLinking.STUDENT.EXAM_RESULTS_PATH, state: {examResult: {title: exam.title, data: attempt, currentView: \"exam-results-skip\" }}});\n }\n \n const loadLectureVideo = id => {\n playLectureOnDemand(id);\n };\n\n const showPreassessmentResults = async () => {\n const attempt = await AttemptService.getForAssessment(preassessment._id);\n history.push({pathname: DeepLinking.STUDENT.EXAM_RESULTS_PATH, state: {examResult: {title: preassessment.title, data: attempt, currentView: \"exam-results-skip\" }}});\n }\n\n const displayPreAssessmentScore = () => {\n if(!hasPlacementExam) return <>;\n return
    showPreassessmentResults()}>\n Preassessment Score:\n

    {preassessmentScore}

    \n
    ;\n }\n \n const populateList = () => {\n if (playlist) {\n return (\n
    \n {displayPreAssessmentScore()}\n {playlist.getLectures().map(lecture => {\n if (!log) {\n return \"\";\n }\n const lecturelog = log.lecturelogs.find(_lecture => {\n return _lecture._id === lecture._id;\n });\n const formatedDate = DateUtils.formatStringDateToTooltipText(startOn);\n const tooltipText = isStartOn ? \"\" : \"Quiz will be available from \" + formatedDate;\n return (\n
    \n loadLectureVideo(id)}\n unitId={unit._id} \n classId={classId} \n log={log}\n isStartOn={isStartOn}\n tooltipText = {tooltipText}\n />\n
    \n );\n })}\n
    \n );\n }\n };\n\n const populateAssignment = () => {\n if (playlist) {\n \n const assignment = playlist.assessments.find(assessment => {\n return assessment.type === \"ASSIGNMENT\";\n });\n \n if(!assignment){ return \"\"; }\n \n const assignmentLog = log.assessmentslogs.find(assessment => {\n return assessment.type === \"ASSIGNMENT\";\n });\n \n return (\n
    \n isTaken ? console.log('taken'): showAssignment()}\n />\n
    \n );\n }\n }\n\n const populateExam = () => {\n if (playlist) {\n const bookExams = playlist.assessments.filter(assessment => assessment.type === \"BOOKEXAM\");\n if (!bookExams || bookExams.length === 0) return \"\";\n\n const workBookLog = log.assessmentslogs.find(assessment => {\n return assessment.type === \"WORKBOOK\";\n });\n let defaultText = \"Locked! Complete the lesson(s) to unlock.\";\n if (workBookLog) {\n defaultText = \"Locked! Complete the workbook to unlock.\";\n }\n \n return bookExams.map((exam, index) => {\n const bookExamLog = log.assessmentslogs.find(assessmentLog => {\n return assessmentLog._id === exam._id;\n });\n // const defaultText = \"Locked! Complete the lesson(s) to unlock.\";\n \n return (\n
    \n isTaken ? showExamResults(exam) : showExam(exam)}\n />\n
    \n );\n });\n }\n };\n \n const populateWorbook = () => {\n if (playlist) {\n \n const workbook = playlist.assessments.find(assessment => {\n return assessment.type === \"WORKBOOK\";\n });\n \n if(!workbook){ return \"\"; }\n \n const workBookLog = log.assessmentslogs.find(assessment => {\n return assessment.type === \"WORKBOOK\";\n });\n \n return (\n
    \n = Config.minimumScore : \"\"\n }\n status={role !== \"Student\" ? \"PENDING\" : (workBookLog ? workBookLog.status : \"LOCKED\")}\n listener={() => showWorkbook()}\n />\n
    \n );\n }\n };\n\n const scrubVideoToCuepoint = (cue) => {\n if(cue !== scrub.cue) {\n setScrub({cue: cue, key: uuidv4()});\n }\n } \n\n const showAncillaryItem = async (assetId, type) => {\n if(type === 'QUIZ'){\n showQuiz(assetId);\n } else {\n let asset = await AssetService.getFromRemote(assetId);\n if(asset) window.open(asset.url, \"_blank\");\n }\n }\n \n const showTranscript = () => {\n if(!transcript) { return No Transcript available}\n \n return scrubVideoToCuepoint(cue)}\n openAncillaryItem={(assetId, type) => showAncillaryItem(assetId, type)}\n />\n }\n \n const showAncillaryItems = () => {\n if(!currentLecture || !currentLecture.markers || currentLecture.markers.length === 0) { return No Content available}\n const markers = currentLecture.markers;\n if(!markers || markers.length === 0) { return No Content available }\n //sort markers by time\n markers.sort((a, b) => {return a.cuePoint - b.cuePoint});\n \n const helpful_markers = markers.filter(m => m.assessment === \"\");\n if(!helpful_markers || helpful_markers.length === 0) { return No Content available }\n return helpful_markers.map(marker => {\n return \n })\n }\n\n const getLectureCaptionUrl = (lect) => {\n let captionUrl = '';\n if (transcript && transcript.captionUrl) {\n return transcript.captionUrl;\n }\n const transcriptRef = lect.transcripts.find(t => t.code === 'en');\n if(transcriptRef !== null && transcriptRef !== undefined && transcriptRef._id !== ''){\n const transcript = TranscriptService.getFromLocal(transcriptRef._id);\n if(transcript) captionUrl = transcript.captionUrl;\n }\n return captionUrl;\n }\n const updatePlaybackTime = (time) => {\n setPlaybackTime(time);\n }\n\n const showVideoPlayer = () => {\n if (lectures && currentLecture) {\n return lectures.map(lect => {\n if (lect.isYoutubeVideo) {\n return (\n
    \n updatePlaybackTime(time) }\n />\n
    \n );\n } else {\n return (\n
    \n completed()}\n onTimeUpdate={(time) => setPlaybackTime(time) }\n scrub={ scrub }\n />\n
    \n );\n }\n });\n } else {\n return
    Loading...
    ;\n }\n };\n\n const clearPreviousCodeInput = () => {\n $('.code-input-prompt').val(\"\");\n setPromptInputCapture('');\n setShowInputPrompt(false);\n }\n\n const compileCode = async () => {\n clearPreviousCodeInput();\n\n //if the typed code includes an input() python function\n //then we must send it with a newline character so the\n //compiler does not merge multiple prints in a single string\n let transformedCodeInput = codeInput;\n if(CodeInputUtils.hasInputFunction(codeInput)){\n transformedCodeInput = CodeInputUtils.addNewLineCharacterToInputMessage(codeInput);\n }\n\n const payload = {lang: 'python', source: transformedCodeInput};\n if(promptInputCapture && promptInputCapture !== \"\") {\n payload.input = promptInputCapture + \"\\n\";\n }\n\n //send previous inputs\n payload.previousInput = previousCodeInput;\n\n setCompiledOutput('');\n const response = await CompileService.compile(payload);\n\n if(response) {\n\n if(response.message && response.message !== ''){\n setCompiledOutput(response.message);\n }\n\n if(response.error && response.error !== ''){\n if(response.error === 'input-required'){\n setShowInputPrompt(true);\n\n if(!initialInputProcessed) {\n setInitialInputProcessed(true);\n } else {\n let previousInput = [...previousCodeInput];\n previousInput.push(promptInputCapture);\n setPreviousCodeInput(previousInput);\n }\n const message = CodeInputUtils.deserializeOutput(response.message);\n setInputPromptMessage(message);\n \n\n setTimeout(() => {\n $('.code-input-prompt').trigger(\"focus\");\n }, 1000);\n } else{\n setCompiledOutput(response.error)\n }\n }\n }\n }\n\n const onInputChangeHandler = (e) => {\n setPromptInputCapture(e.target.value)\n }\n\n const onInputKeyDownHandler = (e) => {\n if (e && e.key === \"Enter\") {\n compileCode(true);\n }\n }\n\n const clearOutput =() => {\n setCodeInput('');\n setShowInputPrompt(false);\n clearPreviousCodeInput();\n setCompiledOutput('');\n setInputPromptMessage('');\n setInitialInputProcessed(false);\n setPreviousCodeInput([]);\n }\n\n const showCodeEditor = () => {\n return (\n
    \n setCodeInput(input)}\n />\n\n
    \n clearOutput()}\n variant=\"light\"\n className=\"font-weight-bold my-2 rounded me-2\">\n Clear\n \n compileCode()}\n disabled={showInputPrompt ? true : false}\n variant=\"primary\"\n className=\"font-weight-bold my-2 rounded me-2\">\n Run >\n \n
    \n\n
    \n
    \n * Hit enter to submit\n {inputPromptMessage}\n onInputKeyDownHandler(e)} onChange={(e) => onInputChangeHandler(e)}/>\n
    \n
    {compiledOutput}
    \n
    \n
    \n );\n }\n\n const onTabSelectedHandler = (k) => {\n setActiveKey(k);\n if(k === \"codeeditor\"){\n $(\".unit-tabs-container\").addClass('code-editor-tab-expanded');\n } else {\n $(\".unit-tabs-container\").removeClass('code-editor-tab-expanded');\n }\n }\n\n const showTabbedPlaylist = () => {\n return (\n
    \n onTabSelectedHandler(k)}>\n \n
    \n {showLoader()}\n {populateList()}\n
    \n
    \n {populateWorbook()}\n {populateExam()}\n {populateAssignment()}\n
    \n
    \n \n
    \n {showAncillaryItems()}\n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n fontHandler(\"decrease\")}>\n A-\n \n fontHandler(\"default\")}>\n A\n \n fontHandler(\"increase\")}>\n A+\n \n
    \n
    \n {showTranscript()}\n
    \n
    \n
    \n {currentLecture && currentLecture.scope === 'PROGRAMMING'\n ?\n \n
    \n {showCodeEditor()}\n
    \n
    \n :\n <>\n }\n \n
    \n );\n }\n\n const showVideoPlayerScreen = () => {\n return (\n <>\n
    \n {showTabbedPlaylist()}\n
    \n\n
    \n
    \n {showVideoPlayer()}\n
    \n
    \n \n );\n }\n\n const getFinalAssessmentForUnit = () => {\n //BOOKEXAM has priority and we will always return only one!\n if(playlist){\n let assessment = playlist.assessments.find(a => { return a.type === \"BOOKEXAM\";});\n if(!assessment) assessment = playlist.assessments.find(a => { return a.type === \"ASSIGNMENT\";});\n if(!assessment) assessment = playlist.assessments.find(a => { return a.type === \"WORKBOOK\";});\n return assessment;\n }\n }\n\n const getFinalPracticeTestForUnit = () => {\n if(playlist){\n const finalAssessment = getFinalAssessmentForUnit();\n if(finalAssessment && finalAssessment.type === \"BOOKEXAM\"){\n return playlist.assessments.find(a => { return a.type === \"WORKBOOK\" });\n }\n }\n return null;\n }\n\n const checkIfFinalPracticeTestIsTaken = (practiceTest) => {\n if(!practiceTest){ return false };\n if(log && log.assessmentslogs){\n const assessmentLog = log.assessmentslogs.find(assessment => {\n return assessment.type === practiceTest.type;\n });\n if(assessmentLog){\n return assessmentLog.status === 'TAKEN';\n }\n }\n return false;\n }\n\n const checkIfAssessmentHasBeenTaken = (finals) => {\n if(log && log.assessmentslogs){\n const assessmentLog = log.assessmentslogs.find(assessment => {\n return assessment.type === finals.type;\n });\n if(assessmentLog){\n return assessmentLog.status === 'TAKEN';\n } else {\n return false;\n }\n }\n return false;\n }\n\n const showAssessmentResults = async (finals) => {\n const attempt = await AttemptService.getForAssessment(finals._id);\n if(!attempt) {console.log(`unable to get grade report from server.`)}\n history.push({pathname: DeepLinking.STUDENT.EXAM_RESULTS_PATH, state: {examResult: {title: finals.title, data: attempt, currentView: \"exam-results-skip\" }}});\n }\n\n const showAssessmentView = (finals) => {\n if(finals && finals.type === 'BOOKEXAM') {showFinalExam();}\n else if(finals && finals.type === 'WORKBOOK') {showWorkbook();}\n else if(finals && finals.type === 'ASSIGNMENT') { showAssignment(); }\n }\n\n const showFinalAssessmentScreen = () => {\n const finals = getFinalAssessmentForUnit();\n const taken = checkIfAssessmentHasBeenTaken(finals);\n\n const showAssessmentAsPending = () => {\n\n const practiceTest = getFinalPracticeTestForUnit();\n const practiceTestIsTaken = checkIfFinalPracticeTestIsTaken(practiceTest);\n\n return (\n
    \n {finals ? finals.title : 'Assessment'}\n {\n practiceTest && !practiceTestIsTaken ?\n
    \n Unlock exam by taking the showWorkbook()}>practice test\n
    \n :\n <>\n Total Questions: {finals && finals.questions ? finals.questions.length : 0}\n Duration: {finals && finals.timeBased ? finals.durationInMinutes + ' mins': 'Unlimited'}\n \n {\n practiceTest ?\n
    \n Don't feel ready? Retake the showWorkbook()}>practice test\n
    \n :\n <>\n }\n \n }\n
    \n );\n }\n\n const showAssessmentAsTaken = () => {\n return (\n
    \n
    \n \n
    \n {finals ? finals.title : 'Assessment'}\n \n
    \n );\n }\n\n return (\n
    \n {taken ? showAssessmentAsTaken() : showAssessmentAsPending() }\n
    \n );\n }\n\n return (\n
    \n {finalAssessment ? showFinalAssessmentScreen() : showVideoPlayerScreen()}\n
    \n );\n}\n \nexport default UnitLayout;","import React, { useState, useEffect } from \"react\";\nimport Header from \"./../../../widgets/header/Header\";\nimport {Spinner} from \"react-bootstrap\";\nimport UnitService from \"./../../../../services/UnitService\";\nimport LectureService from \"./../../../../services/LectureService\";\nimport StudentLogService from \"./../../../../services/StudentLogService\";\nimport CacheService from \"./../../../../services/CacheService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport FeedbackService from \"./../../../../services/FeedbackService\";\nimport RateLectureModal from \"./../../../widgets/modals/RateLectureModal\";\nimport LSBreadcrumb from \"./../../../widgets/breadcrumb/LSBreadcrumb\";\nimport DeepLinking from \"./../../../../utils/DeepLinking\";\nimport LimespringUtils from \"./../../../../utils/LimespringUtils\";\nimport \"./unitview.css\";\nimport UnitLayout from \"./UnitLayout\";\n\nconst UnitView = props => {\n\n const { classId, unitId, lectureId = '', autoplay=false} = props;\n\n const [unit, setUnit] = useState(null);\n const [unitlog, setUnitlog] = useState(null);\n const [lectures, setLectures] = useState(null);\n const [currentLecture, setCurrentLecture] = useState(null);\n const [completeShow, setCompleteShow] = useState(false);\n const [isStudent, setIsStudent] = useState(true);\n\n useEffect(() => {\n const loadCacheAndStart = async () => {\n\n //await CacheService.refresh();\n await CacheService.reloadData('unitView', unitId);\n\n const user = ProfileService.get();\n setIsStudent(user.role === \"Student\");\n\n if (!unit) {\n const _unit = UnitService.get(unitId);\n\n //workaround to reload lectures with Transcripts!\n let lects = [];\n if(_unit.lectures && _unit.lectures.length > 0){\n let lectIds = _unit.lectures\n if(typeof lectIds[0] !== 'string') lectIds = _unit.lectures.map(l => l._id);\n lects = LectureService.getByIds(lectIds);\n }\n _unit.lectures = lects;\n\n setUnit(_unit);\n setLectures(_unit.lectures || []);\n setUnitlog(StudentLogService.getLogForUnit(unitId));\n document.title = 'LimeSpring Portal - ' + _unit.title + ' Unit';\n window.scrollTo(0, 0);\n\n if(_unit.lectures && _unit.lectures.length > 0) {\n if(lectureId !== ''){ \n setCurrentLecture(_unit.lectures.find(l => l._id === lectureId))\n //setShouldAutoplay(true);\n } else {\n setCurrentLecture(_unit.lectures[0])\n }\n }\n }\n }\n\n loadCacheAndStart();\n\n }, [unitId]);\n\n const playLectureOnDemand = id => {\n setCurrentLecture(\n lectures.find(lecture => {\n return lecture._id === id;\n })\n );\n };\n\n const onFeedbackProvided = async (stars, comment) => {\n try{\n await FeedbackService.create({stars: stars, comment: comment, unitId: unit._id, lectureId: currentLecture._id});\n }catch(e){\n console.error(`Error while attempting to send feedback to server. Ignoring`);\n }\n setCompleteShow(false);\n }\n\n return (\n
    \n \n
    \n \n
    \n {\n unit ?\n playLectureOnDemand(id)}\n completed={()=> setCompleteShow(true)}/>\n :\n
    \n \n
    \n }\n onFeedbackProvided(stars, comment)} onHide={() => setCompleteShow(false)}/>\n
    \n );\n};\n\nexport default UnitView;\n","import React, { useState, useEffect } from \"react\";\nimport {useHistory} from 'react-router-dom';\nimport {Spinner} from 'react-bootstrap';\nimport Header from \"../../../widgets/header/Header\";\nimport LSBreadcrumb from \"../../../widgets/breadcrumb/LSBreadcrumb\";\nimport UnitList from \"../../../widgets/unit-list/UnitList\";\nimport ClassService from \"../../../../services/ClassService\";\nimport StudentLogService from \"../../../../services/StudentLogService\";\nimport UnitService from \"../../../../services/UnitService\";\nimport CourseService from \"./../../../../services/CourseService\";\nimport CacheService from \"./../../../../services/CacheService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport InstructorService from \"./../../../../services/InstructorService\";\nimport DateUtils from \"../../../../utils/DateUtils\";\nimport LimespringUtils from \"../../../../utils/LimespringUtils\";\nimport SidebarMenu from \"../../../widgets/sidebar/SidebarMenu\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport \"./classview.css\";\n\nconst ClassView = props => {\n\n const { classId } = props;\n\n const history = useHistory();\n\n const [grade, setGrade] = useState(0);\n const [clazz, setClazz] = useState(null);\n const [callout, setCallout] = useState(\"\");\n const [classTitle, setClassTitle] = useState(\"\");\n const [units, setUnits] = useState([]);\n const [open, setOpen] = useState(false);\n const [isStudent, setIsStudent] = useState(true);\n const [isStartOn, setIsStartOn] = useState(true);\n \n useEffect(() => {\n \n const getClass = async (id) => {\n\n let _class = ClassService.get(id);\n document.title = 'LimeSpring Portal - ' + _class.title + ' Class';\n\n const user = ProfileService.get();\n setIsStudent(user.role === \"Student\");\n\n await CacheService.reloadData('classView', id);\n\n const classLog = await StudentLogService.getLogForClass(id);\n const currentGrade = classLog ? classLog.currentGrade : 0;\n setCallout(`${DateUtils.getCurrentDate()}`);\n setClassTitle(_class.title);\n setGrade(LimespringUtils.getGradeAsPercent(currentGrade || 0.25));\n\n let courses = CourseService.getByIds(_class.courses);\n\n let units = [];\n\n if (courses && courses.length > 0) {\n courses.forEach(course => {\n if (course.units && course.units.length > 0) {\n units = units.concat(course.units);\n }\n });\n }\n const _isStartOn = await StudentLogService.getIsStartOn(id);\n const _startOn = await StudentLogService.getStartOn(id);\n setUnits(units);\n setClazz(_class);\n setIsStartOn(_isStartOn);\n };\n\n if (!clazz) { getClass(classId); }\n\n //if there are placement units, then redirect to assessment!\n //TODO support step chaining!\n if(units && units.length === 1){\n const placementUnits = units.filter(u => u.placement === true);\n if(placementUnits && placementUnits.length > 0){\n //if lectures/assessments, then it is definitely not a P.E\n // a P.E usually will only have 1 unit!\n if(placementUnits[0].lectures.length > 0 && placementUnits[0].assessments.length > 1){\n return;\n }\n\n if(placementUnits[0].assessments && placementUnits[0].assessments.length > 0){\n const placementExamId = placementUnits[0].assessments[0]._id;\n const placementExamLogs = StudentLogService.getLogForAssessments([placementExamId])\n //first check if assessment has not been already done\n if(placementExamLogs[0].status !== 'TAKEN'){\n history.push({pathname: DeepLinking.STUDENT.EXAM_VIEW_PATH.replace(\":id\", placementExamId), state: {classId, classId, unit: placementUnits[0]}});\n }\n }\n }\n }\n\n }, [clazz]);\n\n const handleClick = e => {\n e.preventDefault();\n setOpen(!open);\n };\n\n const getClassHeader = () => {\n if(!clazz) { return <>; }\n\n return
    {clazz.title} - {units ? units.length : 0} Weeks
    \n }\n\n const loadPage = target => {\n if (target === \"dashboard\") {\n history.push(`/dashboard`);\n } else if (target === \"account\") {\n history.push(`/settings`);\n } else if (target === \"grades\") {\n history.push(DeepLinking.STUDENT.GRADEBOOK_VIEW_PATH);\n }\n };\n\n return (\n
    \n \n
    \n
    \n loadPage(target)} showInstructorMode={ isStudent ? false : true }/>\n
    \n {\n !clazz \n ?\n
    \n :\n
    \n \n
    \n { getClassHeader()} \n
    \n
    \n
    \n \n
    \n
    \n
    \n }\n \n
    \n
    \n );\n};\n\nexport default ClassView;\n","import React, {useState, useEffect} from 'react';\nimport { Pagination } from \"react-bootstrap\";\nimport ArrayUtils from \"../../../utils/ArrayUtils\";\nimport { useToasts } from 'react-toast-notifications';\nimport './assessmentpagination.css';\n\nconst AssessmentPager = (props) => {\n\n const { questions, current, isExam=false, clickable=false, onItemClickHandler} = props;\n\n const { addToast } = useToasts();\n\n const [itemSets, setItemSets] = useState([]);\n const [currentSetIndex, setCurrentSetIndex] = useState(0);\n const [currentQuestion, setCurrentQuestion] = useState(current);\n\n const maxItemsInSet = 50;\n\n useEffect(()=> {\n setItemSets(ArrayUtils.getAsSets(questions, maxItemsInSet));\n //setCurrentQuestion(current);\n setCurrentSetIndex(findCurrentQuestionIndex());\n }, [questions]);\n\n useEffect(() => {\n setCurrentQuestion(current);\n }, [current]);\n\n const findCurrentQuestionIndex = () => {\n if(!current) return 0;\n const index = questions.findIndex(q => q._id === current);\n return Math.floor(index/maxItemsInSet);\n }\n\n const itemClickHandler = (e, q, i) => {\n e.preventDefault();\n if(!clickable){\n if(!isExam){\n addToast('*Please retry question to continue.', {appearance: 'warning', autoDismiss: false});\n }\n } else {\n //setCurrentQuestion(q._id);\n onItemClickHandler(q, i);\n }\n }\n\n const getStatus = (q) => {\n\n //case: exam only!\n if(q.status === 'ANSWERED') { return 'answered' }\n\n //special case - active is correct/incorrect!\n if(currentQuestion === q._id){\n if(q.status === 'CORRECT') { return 'retry correct' }\n if(q.status === 'INCORRECT') { return 'retry incorrect' }\n }\n\n if(q.status === 'PENDING') { return 'pending' }\n if(q.status === 'CORRECT') { return 'correct' }\n if(q.status === 'INCORRECT') { return 'incorrect' }\n }\n\n const getItemsFromSet = (index) => {\n if(!itemSets || itemSets.length === 0) { return []; }\n return itemSets[index].map((q, i) => {\n return itemClickHandler(e, q, i + (maxItemsInSet * currentSetIndex))}>\n {(i+1) + (maxItemsInSet * currentSetIndex)}\n \n });\n }\n\n const prevNextClickHandler = (index) => {\n if(index < 0) { return; }\n if(index >= itemSets.length) { return; }\n setCurrentSetIndex(index);\n }\n\n const showItems = () => {\n let paginationItems = [];\n\n if(questions.length > maxItemsInSet){\n paginationItems.push( prevNextClickHandler(currentSetIndex - 1)}/>);\n }\n \n paginationItems.push(getItemsFromSet(currentSetIndex));\n \n if(questions.length > maxItemsInSet){\n paginationItems.push( prevNextClickHandler(currentSetIndex + 1)}/>);\n }\n \n return paginationItems;\n }\n\n return (\n
    \n {showItems()}\n
    \n );\n}\n \nexport default AssessmentPager;","import React, {useEffect, useRef} from 'react';\nimport StringUtils from './../../../utils/StringUtils';\nimport './mathfield_comps.css';\n\nconst MathDisplayField = (props) => {\n\n const {statement, css=\"math-input-field-sm\", htmlSupport=false, forceRender=true, enableMultiline=false, thumbnail=null} = props;\n\n let node = useRef(null);\n\n useEffect(() => {\n if(htmlSupport) node.current.innerHTML = StringUtils.decodeHtml(statement);\n if(forceRender && window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }, [statement]);\n\n return (\n
    \n
    \n {StringUtils.decodeHtml(statement)}\n
    \n {thumbnail && (\n
    \n \"Thumbnail\"\n
    \n )}\n
    \n ); \n}\n\nexport default MathDisplayField;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAhCAYAAACm75niAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGHSURBVHgB7ZhfToNAEMZn1u175QR4A/XJRIwewRv4591ST2BvID2BvYE9gj408a29QTlBw7u44+yqaARpK3VlCb+EMDBkMkw+PpJBYLoHfR8l3SHArr6EmkIAY0rxOnmKYtRNC0lTABwqCVHyECVQQ7on/S48w7lAulEp7uF2EN4j4eNiEkXgAF7QGxDgsWB5nKoOjMARlBSRkbQXhASOoXsW4CjONi6/3/COwjn7jm8uCOLFZLhTx1x+4h8PavBLXLNcczROCHEW02dct1xrh7ZpG7eNXOWhMj+1kS9itYmXea2NfAHN1nipn1rIF9L6uGWabYf/AcsBTcBCZnvMybmw8bV8tyrL68d85Hxd/FDMz+JlvluVX/p6sz7OdXy3Klx/XlBf3yOTLsgbWh+3BK/izFnwuBOzl3MH06u2w5lIlX6NAdQYPWnuE1Sqzlj3Y8lr2wtuf+odXiWqszX6i21t9jOpgHqbdA8BQ3rBfVPwfT9+qxegsHk28vFrSfNpxoO+1PvxV+CGCXIAlLyZAAAAAElFTkSuQmCC\"","import React from 'react';\nimport {Tooltip, OverlayTrigger} from 'react-bootstrap';\nimport './keyboard.css';\n\nconst KeyboardTile = (props) => {\n\n const {type, latex, tooltip=false, onClick} = props; \n\n const show = () => {\n if(tooltip) {\n return \n LaTex: {latex}\n \n }>\n
    onClick(latex)}>
    \n
    \n } else {\n return
    onClick(latex)}>
    \n }\n\n }\n\n return ( show() );\n}\n \nexport default KeyboardTile;","export default {\n getLayoutCategories: () => {\n return {\n 'ALGEBRA':[\n [\n {type: 'greaterthan', latex: '\\\\gt'},\n {type: 'lessthan', latex: '\\\\lt'},\n {type: 'greaterequal', latex: '\\\\geq'},\n {type: 'lessequal', latex: '\\\\leq'},\n {type: 'notequals', latex: '\\\\ne'}\n ],\n [\n {type: 'nroot', latex: '\\\\sqrt[]{}'},\n {type: 'sqroot', latex: '\\\\sqrt{}'},\n {type: 'power2', latex: '\\{}^{2}'},\n {type: 'powern', latex: '\\{}^{}'},\n {type: 'fraction', latex: '\\\\frac{}{}'}\n ],\n [\n {type: 'plus', latex: '+'}, \n {type:'minus', latex: '-'}, \n {type: 'multiply', latex: '*'}, \n {type: 'divide', latex: '/'},\n {type: 'equals',latex: '='}\n ],\n [\n {type: 'parenthesesLeft', latex: '('},\n {type: 'parenthesesRight', latex: ')'},\n {type: 'squareBracketLeft', latex: '['},\n {type: 'squareBracketRight', latex: ']'},\n {type: 'period', latex: '.'},\n {type: 'comma', latex: ','}\n ]\n // {type: 'log', latex: '\\\\log({})'},\n // {type: 'ln',latex: '\\\\ln({})'},\n // {type: 'logbase', latex: '\\\\log_{}({})'},\n // {type: 'sin', latex: '\\\\sin(\\\\theta)'},\n // {type: 'cos', latex: '\\\\cos({\\theta})'},\n // {type: 'tan', latex: '\\\\tan({\\theta})'}\n ],\n 'CALCULUS': [\n [\n {type: 'limplus', latex: '\\\\lim_{x \\\\to +\\\\infty} f(x)'},\n {type: 'limminus', latex: '\\\\lim_{x \\\\to -\\\\infty} f(x)'},\n {type: 'limalpha', latex: '\\\\lim_{x \\\\to \\\\alpha} f(x)'},\n ],\n [\n {type: 'firstorderderivative', latex: \"\\\\f'(x)\"},\n {type: 'sndorderderivative', latex: \"\\\\f''(x)\"},\n {type: 'kthorderderivative', latex: '\\\\f^{(k)}(x)'},\n {type: 'partialfirstorderderivative', latex: \"\\\\frac{\\\\partial f}{\\\\partial x}\"},\n {type: 'partialsndorderderivative', latex: \"\\\\frac{\\\\partial^2 f}{\\\\partial x^2}\"},\n {type: 'partialkthorderderivative', latex: '\\\\frac{\\\\partial^{k} f}{\\\\partial x^k}'},\n ],\n [\n {type: 'integral', latex: '\\\\int'},\n {type: 'integrallimits', latex: '\\\\int_{}^{} f(x)dx'},\n {type: 'doublelimits', latex: '\\\\int_{a}^b\\\\int_{c}^d f(x,y)dxdy'},\n ],\n ]\n \n }\n } \n};","import React from 'react';\nimport KeyboardTile from './KeyboardTile';\nimport { v4 as uuidv4 } from \"uuid\";\nimport KeyboardLayoutUtils from \"./../../../utils/KeyboardLayoutUtils\";\nimport ObjectUtils from '../../../utils/ObjectUtils';\n\nconst MathKeyboard = (props) => {\n\n const { layout, userRole='Student', handler } = props;\n\n const getKeyboardType = () => {\n if(!layout) return {};\n let activeLayoutContent = KeyboardLayoutUtils.getLayoutCategories()[layout];\n return { [layout]: activeLayoutContent };\n }\n\n const clickHandler = (latex) => {\n handler(latex);\n }\n\n const renderKeyboardType = () => {\n const keyboard = getKeyboardType();\n \n if(ObjectUtils.isEmpty(keyboard) && userRole === 'Instructor') return (
    Please add one or more keyboard math contexts.
    );\n \n let rows = [];\n for(let key in keyboard) {\n keyboard[key].forEach((row) => {\n let buttons = row.map((mathOption, index) => (\n clickHandler(ltx)}\n />\n ));\n rows.push(\n
    \n {buttons}\n
    \n );\n });\n }\n return rows;\n }\n\n return (\n //
    \n
    \n {renderKeyboardType()}\n
    \n );\n}\n \nexport default MathKeyboard;\n","import {createContext} from 'react';\n\nconst KeyboardInputContext = createContext({\n inputFieldId: '', \n keyboardInput: '',\n showKeyboardDrawer: false,\n toggleShowKeyboardDrawer: () => {},\n updateInputFieldId: () => {}\n});\n \nexport default KeyboardInputContext;","\nimport React, { useState, useEffect, useContext } from 'react';\nimport MathKeyboard from \"./MathKeyboard\";\nimport * as Icons from 'react-bootstrap-icons';\nimport KeyboardInputContext from './../../../hooks/KeyboardInputContext';\nimport ProfileService from './../../../services/ProfileService';\nimport './keyboard.css';\n\nconst MathKeyboardDrawer = (props) => {\n const { show, insert, layout, foreign = false, close = () => {}} = props;\n // const { show, insert, layout, foreign = false, close = () => {}, visibleTimeout=1000 } = props;\n const [isVisible, setIsVisible] = useState(false);\n const keyboardInputContext = useContext(KeyboardInputContext);\n const [layouts, setLayouts] = useState(['ALGEBRA','CALCULUS']);\n const [activeTab, setActiveTab] = useState(layout && layout.length > 0? layout[0]:null);\n\n useEffect(() => { \n if (layout!==null && layout.length>0) { setActiveTab(layout[0]); }\n else { return;}\n setIsVisible(show);\n // setTimeout(()=>\n // {\n // setIsVisible(show);\n // }, visibleTimeout);\n }, [show, layouts]);\n\n const hideDrawer = () => {\n if (foreign) {\n close();\n } else {\n keyboardInputContext.toggleShowKeyboardDrawer();\n }\n }\n const userRole = ProfileService.getRole();\n if (!layout || layout.length===0) {\n return (<>);\n } else {\n return (\n \n
    \n {/* tabs */}\n
    \n {layout.map((keyLayout, index) => (\n setActiveTab(keyLayout)}\n >\n {keyLayout}\n
    \n ))}\n
    \n {/* container */}\n \n
    \n {/* keyboard */}\n insert(l)} userRole={userRole && userRole!=='Student'?userRole:'Student'} />\n \n hideDrawer()}>\n
    \n \n
    \n );\n }\n\n}\n\nexport default MathKeyboardDrawer;\n","import StringUtils from \"./StringUtils\";\n\nexport default {\n\n //known issues with some latex expressions\n //as Mathquill will try to normalize them:\n // see: https://github.com/mathquill/mathquill/issues/39\n normalize: (l) => {\n let hasParenthesesOrSquareBrackets = false;\n \n if(l.includes('(') || l.includes(')') || l.includes('[') || l.includes(']')) hasParenthesesOrSquareBrackets = true;\n \n // only check left because even if you type right parentheses\n // it will automatically add left parentheses by default...\n if(l.includes(`\\left(`)){ \n l = l.replace(/\\\\left/g, ''); \n l = l.replace(/\\\\right/g, '');\n hasParenthesesOrSquareBrackets = true;\n }\n \n //square bracket check\n if(l.includes(`\\leqft[`)){\n l = l.replace(/\\\\leqft/g, '');\n l = l.replace(/\\\\right/g, '');\n hasParenthesesOrSquareBrackets = true;\n }\n \n if(l.includes(`\\left[`)){\n l = l.replace(/\\\\left/g, '');\n l = l.replace(/\\\\right/g, ''); \n hasParenthesesOrSquareBrackets = true;\n }\n \n //remove multiplication and division special symbols\n //if student did not input them through the keyboard!\n if(l.includes(`\\cdot`)){\n l = l.replace(/\\\\cdot/g, '*');\n }\n \n //remove latex escapes from % expressions\n if(l.includes('\\\\%')){\n l = l.replace('\\\\%', '%');\n }\n \n //l = l.replace(/\\\\ge(?=\\s|\\d|[,.;?!])/g, '\\\\geq');\n //l = l.replace(/\\\\le(?=\\s|\\d|[,.;?!])/g, '\\\\leq');\n // Adjust replacements to avoid infinite loops\n // Replace \\le if not followed by q\n l = l.replace(/\\\\le(?!q)/g, '\\\\leq');\n // Replace \\ge if not followed by q\n l = l.replace(/\\\\ge(?!q)/g, '\\\\geq');\n\n l = l.replace(//g, '\\\\gt');\n \n //allow $ symbol for currency questions (come escaped from MathQuill component)\n if(l.includes(`\\$`)){ \n l = l.replace(/\\\\\\$/g, '$');\n }\n \n //if student entered a comma and it is not a range () or [], then strip it\n if(!hasParenthesesOrSquareBrackets){\n //commenting out has we have issues with answers like -4,1 \n //l = l.replace(/\\,/g, '');\n }\n \n //replace any embedded $ (authoring keyboard may enter multiple embedded latex commands)\n //only if expression has () or []\n if(hasParenthesesOrSquareBrackets){\n l = StringUtils.removeMathPlaceholder(l);\n }\n \n return l;\n },\n \n\n denormalize: (l) => {\n\n l = l.replace(/\\\\lt/g, '<');\n l = l.replace(/\\\\gt/g, '>');\n return l;\n }\n}","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { addStyles, EditableMathField } from 'react-mathquill';\nimport keyboardIcon from './../../../images/math/keyboard.png';\nimport MathKeyboardDrawer from \"./../keyboard/MathKeyboardDrawer\";\nimport LatexUtils from './../../../utils/LatexUtils';\nimport StringUtils from '../../../utils/StringUtils';\nimport $ from 'jquery';\nimport './mathfield_comps.css';\n\naddStyles();\n\nconst StudentMathInputField = (props) => {\n const { defaultValue = '', onStatementUpdate, keyboardLayout, onSubmit, externalValue = '' } = props;\n\n const [latex, setLatex] = useState(StringUtils.removeMathPlaceholder(defaultValue));\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n const [internalLatex, setInternalLatex] = useState(latex);\n\n const inputField = useRef(null);\n const mathquillRef = useRef(null);\n\n const prevLatexRef = useRef(latex);\n\n // Synchronize latex with externalValue\n useEffect(() => {\n if (externalValue && StringUtils.removeMathPlaceholder(externalValue) !== latex) {\n setLatex(StringUtils.removeMathPlaceholder(externalValue));\n }\n }, [externalValue]);\n\n // Update onStatementUpdate when latex changes\n useEffect(() => {\n if (prevLatexRef.current !== latex) {\n onStatementUpdate(`$${LatexUtils.normalize(latex)}$`);\n prevLatexRef.current = latex;\n }\n }, [latex, onStatementUpdate]);\n\n useEffect(() => {\n if (mathquillRef.current) {\n mathquillRef.current.focus();\n }\n $('.student-mfield').attr(\"contenteditable\", \"true\");\n }, []);\n\n const insert = useCallback((l) => {\n if (mathquillRef.current) {\n mathquillRef.current.write(l);\n const latexAfterInsert = mathquillRef.current.latex();\n setInternalLatex(latexAfterInsert);\n setLatex(latexAfterInsert);\n requestAnimationFrame(() => {\n mathquillRef.current.focus();\n });\n }\n }, []);\n\n const checkEnterKeyPressed = (e) => {\n if (e.which === 13) { // Enter key\n e.preventDefault();\n onSubmit(latex);\n } else if (e.which === 32) { // Space key\n e.preventDefault();\n }\n };\n\n const handleLatexChange = useCallback((mf) => {\n const newLatex = mf.latex();\n if (newLatex !== internalLatex) {\n setInternalLatex(newLatex);\n if (newLatex !== latex) {\n setLatex(newLatex);\n }\n }\n }, [internalLatex, latex]);\n\n return (\n <>\n {\n inputField.current = el;\n if (el && el.mathField) {\n mathquillRef.current = el.mathField;\n }\n }}\n onKeyPress={(e) => checkEnterKeyPressed(e)}\n onChange={handleLatexChange}\n mathquillDidMount={mathField => {\n mathquillRef.current = mathField;\n }}\n />\n {\n keyboardLayout && keyboardLayout.length > 0 ?\n <>\n setIsDrawerOpen(!isDrawerOpen)}>\n \"View\n \n insert(l)} layout={keyboardLayout ? keyboardLayout : []} close={() => setIsDrawerOpen(false)} />\n \n : <>\n }\n \n );\n}\n\nexport default StudentMathInputField;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n getAll: () => {\n return LocalStorageService.get(\"questions\");\n },\n\n get: id => {\n return LocalStorageService.get(\"questions\").find(\n question => question._id === id\n );\n },\n\n getByIds: ids => {\n const all_questions = LocalStorageService.get(\"questions\");\n //preserve order!\n const questions = ids.map(id => {\n return all_questions.find(question => { return question._id === id})\n });\n\n if(!questions || questions.length === 0) {return []}\n //TODO - clean up all getByIds with null/undefined filters!\n return questions.filter(q => q !== null && q !== undefined);\n },\n\n store: questions => {\n LocalStorageService.store({ questions: questions });\n },\n\n getFromRemote: async (ids) => {\n try { \n let response = await new ApiService().post(ApiPath.GET_QUESTIONS_REMOTE_ENDPOINT, {ids: ids});\n if (ResponseUtil.isOK(response)) {\n const { questions } = response.data;\n return questions;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n getAllFromRemote: async () => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.getQuestions()); }\n try { \n let response = await new ApiService().get(ApiPath.GET_QUESTIONS_ENDPOINT);\n if (ResponseUtil.isOK(response)) {\n const { questions } = response.data;\n return questions;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n getSomeFromRemote: async (limit=0) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.getQuestions()); }\n try { \n let response = await new ApiService().get(ApiPath.GET_QUESTIONS_ENDPOINT + `?limit=${limit}`);\n if (ResponseUtil.isOK(response)) {\n const { questions } = response.data;\n return questions;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n getLatestFromRemote: async () => {\n try { \n let response = await new ApiService().get(ApiPath.GET_LATEST_QUESTION_REMOTE_ENDPOINT);\n if (ResponseUtil.isOK(response)) {\n const { question } = response.data;\n return question;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n getLatest: () => {\n return LocalStorageService.get(\"questions\")[0];\n },\n\n getLatestN: (n) => {\n return LocalStorageService.get(\"questions\").slice(0, n);\n },\n\n getAsAttempts: (questions) => {\n if(!questions || questions.length === 0) { return []}\n let questions_copy = JSON.parse(JSON.stringify(questions));\n let attempts = [];\n\n //expand stepped questions (if any)\n const steppedQuestions = questions.filter(q => q.context === 'STEP_OPTIONS');\n\n if(steppedQuestions && steppedQuestions.length > 0){\n \n //Add the steps of each removed parent instead!\n //since we have these as string[] if ids, create fake object\n steppedQuestions.forEach(sq => {\n if(sq.steps && sq.steps.length > 0){\n sq.steps.forEach(s => { questions_copy.push({_id: s, step: true, parent: sq._id}) });\n }\n });\n }\n\n attempts = questions_copy.map(q => { return {_id: q._id, step: q.step || false, parent: q.parent || '', isStepParent: q.context === 'STEP_OPTIONS' || false, status: 'PENDING', timeSpentInSecs: 0, timestamp: 0, selectedChoiceIds: [], inputChoice:'', viewHint: false, viewExplanation: false, claimedAsCorrect: false } })\n return attempts;\n },\n\n clone: async (question) => {\n\n const clone = {...question};\n clone.statement = question.statement + \" COPY\";\n\n //if choices, then reset ids to avoid clone issues\n if(clone.choices && clone.choices.length > 0){\n clone.choices = clone.choices.map(c => {\n c._id = uuidv4();\n return c;\n });\n }\n\n try { \n let response = await new ApiService().post(ApiPath.CREATE_QUESTION_ENDPOINT, clone);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n create: async (payload) => {\n try { \n let response = await new ApiService().post(ApiPath.CREATE_QUESTION_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n const { question } = response.data;\n return question;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n\n batch: async (payload) => {\n try { \n let response = await new ApiService().post(ApiPath.BATCH_QUESTIONS_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n update: async (id, payload) => {\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_QUESTION_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n remove: async id => {\n try {\n let response = await new ApiService().delete(ApiPath.REMOVE_QUESTION_ENDPOINT.replace(\":id\", id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`QuestionService | Error while attempting to remove response: ${error}` );\n return false;\n }\n }\n};\n","import React from \"react\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./incorrectquestionmodal.css\";\nimport MathDisplayField from \"../math/MathDisplayField\";\n\nconst IncorrectQuestionModal = props => {\n\n const { question, show, onNextQuestion, onTryAgain} = props;\n\n return (\n \n \n \n Oops! That isn’t the correct answer.
    Would you like to try again?
    \n
    \n
    \n \n
    \n
    \n
    Hint
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n {/*\n \n */}\n
    \n
    \n \n );\n};\n\nexport default IncorrectQuestionModal;\n","import React from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport \"./explanationmodal.css\";\n\nconst ImagePreviewModal = props => {\n\n const { url, show } = props;\n\n return (\n \n \n \n Image Preview\n \n \n \n
    \n
    \n \n );\n};\n\nexport default ImagePreviewModal;\n","import React, { useState, useEffect, useRef } from 'react';\nimport Steps, { Step } from \"rc-steps\";\nimport MathDisplayField from \"./../math/MathDisplayField\";\nimport StudentMathInputField from \"./../math/StudentMathInputField\";\nimport AssetService from '../../../services/AssetService';\nimport QuestionService from '../../../services/QuestionService';\nimport IncorrectQuestionModal from './../modals/IncorrectQuestionModal';\nimport ImagePreviewModal from './../modals/ImagePreviewModal';\nimport { Form } from 'react-bootstrap';\nimport * as Icons from \"react-bootstrap-icons\";\nimport { animations } from \"react-animation\";\nimport Editor from \"@monaco-editor/react\";\nimport $ from 'jquery';\nimport './assessment-questions.css';\n\nconst AssessmentQuestion = (props) => {\n\n const { question, attempts = [], isExam = false, isWorkbook = false, retry = false, index = 0, total = 0, last = false, onAnswerSubmit, onHint, onExplanation, examSubmit = () => { }, stepIndex = 0, onStepExplanation = () => { }, onStepHint = () => { }, onStepAnswerSubmit = () => { }, onStepsFinished = () => { }, onChoiceUpdate = () => { }, resetHasChanged=false, onResetChoiceUpdate = () => {}, token} = props;\n\n const [answer, setAnswer] = useState(null);\n const [retryQuestion, setRetryQuestion] = useState(false);\n const [animation, setAnimation] = useState({});\n const [nextQuestionDisabled, setNextQuestionDisabled] = useState(true);\n const [showIncorrectQuestionModal, setShowIncorrectQuestionModal] = useState(false);\n const [initiallySelected, setInitiallySelected] = useState(false);\n\n const [steppedQuestion, setSteppedQuestion] = useState(false);\n const [currentStep, setCurrentStep] = useState(0);\n const [stepQuestions, setStepQuestions] = useState(null);\n\n const [showImageModal, setShowImageModal] = useState(false);\n const [imageUrl, setImageUrl] = useState('');\n const [multimediaAsset, setMultimediaAsset] = useState(null);\n\n const [codeInput, setCodeInput] = useState('');\n const [textInput, setTextInput] = useState('');\n\n const focusInputRef = useRef(null);\n const focusInputRef1 = useRef(null);\n\n const [initialInputState, setInitialInputState] = useState({ selectedChoiceIds: [], textInput: '', codeInput: '' });\n\n const editorOptions = {\n readOnly: false,\n minimap: { enabled: false }\n };\n\n const [hasChanged, setHasChanged] = useState(false);\n\n const [stepData, setStepData] = useState([]);\n\n useEffect(() => {\n\n loadAsset();\n\n let initialState = {\n selectedChoiceIds: [],\n textInput: '',\n codeInput: ''\n };\n \n setHasChanged(false);\n setAnswer({\n _id: question._id,\n status: 'PENDING',\n timestamp: Date.now(),\n selectedChoiceIds: getSelectedChoiceIds(question),\n inputChoice: getInputChoice(question._id),\n viewHint: false,\n viewExplanation: false,\n numberOfAttempts: 0\n });\n setAnimation({ animation: animations.bounceIn });\n setTimeout(() => { setAnimation({}) }, 750);\n setNextQuestionDisabled(true);\n if (attempts && attempts.length > 0) setInitiallySelected(true);\n\n //typeset math!\n if (window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n\n if (question && question.steps && question.steps.length > 0 && question.context === 'STEP_OPTIONS') {\n setSteppedQuestion(true);\n setupStepQuestion();\n } else {\n setSteppedQuestion(false);\n setStepQuestions(null);\n setCurrentStep(0);\n }\n\n let _textInput = \"\";\n if(question.subtype === 'INPUT_CHOICE') { \n _textInput = getPreviousInputAttempt(question._id);\n setTextInput(_textInput);\n \n } else if(question.subtype === 'STEPS'){\n const stepQuestionId = question.steps[currentStep];\n _textInput = getPreviousInputAttempt(stepQuestionId);\n setTextInput(_textInput);\n } \n\n if (question.subtype === 'MULTIPLE_CHOICE') {\n initialState.selectedChoiceIds = getSelectedChoiceIds(question);\n } else if (question.subtype === 'INPUT_CHOICE') { \n initialState.textInput = _textInput;\n } else if (question.subtype === 'MANUAL_CHOICE') {\n initialState.codeInput = getInitialCodeInput(question);\n }\n \n setInitialInputState(initialState);\n setTimeout(() => {\n if (focusInputRef.current) {\n focusInputRef.current.focus();\n }\n if (focusInputRef1.current) {\n focusInputRef1.current.focus();\n }\n }, 500);\n }, [question]);\n\n useEffect(() => {\n if (stepQuestions && stepQuestions.length > 0) {\n if (stepIndex >= stepQuestions.length) {\n setCurrentStep(0);\n setSteppedQuestion(false);\n onStepsFinished();\n } else {\n setCurrentStep(stepIndex);\n }\n }\n }, [stepIndex]);\n\n useEffect(() => {\n const prepareStepData = () => {\n if (!question || !question.steps || question.steps.length === 0) return [];\n return question.steps.map((s, i) => ({\n cssClass: getStepStatusCSS(s),\n stepNumber: i + 1,\n }));\n };\n \n setStepData(prepareStepData());\n }, [currentStep, question, attempts]);\n\n useEffect(() => {\n setRetryQuestion(retry);\n if (retry) setShowIncorrectQuestionModal(true);\n }, [retry]);\n\n useEffect(() => { \n setHasChanged(false);\n let initialState = {\n selectedChoiceIds: [],\n textInput: '',\n codeInput: ''\n };\n if (question.subtype === 'MULTIPLE_CHOICE') {\n initialState.selectedChoiceIds = getSelectedChoiceIds(question);\n } else if (question.subtype === 'INPUT_CHOICE') { \n if (answer) {\n initialState.textInput = answer.inputChoice;\n } else {\n initialState.textInput = \"\";\n }\n\n } \n \n setInitialInputState(initialState);\n }, [resetHasChanged]);\n\n const resetState = () => {\n setTextInput('');\n setCodeInput('');\n } \n\n const handleInputChange = (newValue) => {\n setHasChanged(true);\n };\n\n const getInitialCodeInput = (question) => { \n return '';\n };\n\n const loadAsset = async () => {\n //load image (if exists) first\n if(question && question.multimedia && question.multimedia !== ''){\n let asset = AssetService.get(question.multimedia);\n if (!asset) {\n if (token) {\n asset = await AssetService.getFromRemoteAnonymous(question.multimedia, token);\n } else {\n asset = await AssetService.getFromRemote(question.multimedia);\n }\n }\n setMultimediaAsset(asset);\n }\n }\n\n const setupStepQuestion = async () => {\n const questions = await QuestionService.getFromRemote(question.steps);\n const sorted = [];\n //must preserve order!\n if (questions && questions.length > 0) {\n question.steps.forEach(s => {\n sorted.push(questions.find(q => q._id === s));\n });\n }\n setStepQuestions(sorted);\n setCurrentStep(stepIndex);\n }\n\n const getStepStatusCSS = (s) => {\n if (attempts && attempts.length > 0) {\n const attempt = attempts.find(a => a._id === s);\n if (attempt) {\n if (attempt.status === 'CORRECT') return 'step-question-right';\n if (attempt.status === 'INCORRECT') return 'step-question-wrong';\n if (attempt.status === 'PENDING') return '';\n }\n }\n return '';\n }\n\n const displayImageModal = (url) => {\n setImageUrl(url);\n setShowImageModal(true);\n }\n\n const renderMultimedia = () => {\n if (!question || !question.multimedia || question.multimedia === '') return <>;\n if(!multimediaAsset) return <>;\n return
    displayImageModal(multimediaAsset.url)} style={{ backgroundImage: `url(${multimediaAsset.url})`, cursor: 'zoom-in' }}>
    \n }\n\n const playAudio = () => {\n document.getElementById('assessment-question-audio-source').play();\n }\n\n const renderAudibleHelp = () => {\n if (!question || !question.audio || question.audio === '') return <>;\n return
    \n
    playAudio()}>\n \n \n
    \n
    \n }\n\n const checkAndSubmit = () => {\n if (nextQuestionDisabled && !last) return;\n const _answer = { ...answer };\n _answer.timestamp = Date.now() - answer.timestamp;\n _answer.numberOfAttempts = _answer.numberOfAttempts + 1;\n if (retry) _answer.numberOfAttempts++;\n onAnswerSubmit(question, _answer);\n resetState();\n }\n\n const checkAndNextStep = () => {\n const _answer = { ...answer };\n _answer.timestamp = Date.now() - answer.timestamp;\n _answer.numberOfAttempts = _answer.numberOfAttempts + 1;\n if (retry) _answer.numberOfAttempts++;\n setTextInput('');\n onStepAnswerSubmit(stepQuestions[currentStep], _answer);\n resetState();\n }\n\n const saveInput = (sentence) => {\n const _answer = { ...answer };\n _answer.inputChoice = sentence;\n _answer.selectedChoiceIds = [];\n setAnswer(_answer);\n setNextQuestionDisabled(false);\n setRetryQuestion(false);\n setTextInput(sentence);\n }\n\n const saveCodeInput = (sentence) => {\n setCodeInput(sentence);\n const _answer = { ...answer };\n _answer.inputChoice = sentence;\n _answer.selectedChoiceIds = [];\n setAnswer(_answer);\n setNextQuestionDisabled(false);\n setRetryQuestion(false);\n }\n\n const saveSelect = (choiceId) => {\n\n const _answer = { ...answer };\n _answer.inputChoice = '';\n /* REMOVING SUPPORT FOR MULTIPLE CORRECT ANSWERS!\n if(!_answer.selectedChoiceIds) _answer.selectedChoiceIds = [];\n _answer.selectedChoiceIds.push(choiceId);\n */\n _answer.selectedChoiceIds = [choiceId];\n setAnswer(_answer);\n setNextQuestionDisabled(false);\n setRetryQuestion(false);\n\n if (initiallySelected) {\n //check if this question has already been answered\n //if so, keep flag in exam object state (ONLY EXAMS)\n if (isExam) onChoiceUpdate();\n setInitiallySelected(false);\n }\n }\n\n const onKeyPressed = (e) => {\n if (e.which === 13) {\n e.preventDefault();\n steppedQuestion ? checkAndNextStep() : checkAndSubmit();\n }\n }\n\n const renderMathInput = (q, defaultValue='') => {\n return {\n saveInput(sentence);\n handleInputChange(sentence);\n }}\n onSubmit={() => steppedQuestion ? checkAndNextStep() : checkAndSubmit()} \n externalValue={textInput}/>\n }\n\n const renderQuestionInput = () => {\n if (stepQuestions && stepQuestions.length > 0 && steppedQuestion) {\n const currentStepQuestion = stepQuestions[currentStep];\n return renderInput(currentStepQuestion);\n } else {\n return renderInput(question);\n }\n }\n\n const renderInput = (q) => {\n if (!q) return <>;\n\n if (isWorkbook || isExam) {\n if (q.subtype === 'MULTIPLE_CHOICE') {\n if (!q.choices || q.choices.length === 0) return <>No question choices available\n return q.choices.map(choice => {\n return
    onKeyPressed(e)} tabIndex={0}>\n }\n onChange={e => {\n saveSelect(e.target.id);\n handleInputChange(e.target.checked);\n }\n }\n custom />\n
    \n });\n } else if (q.subtype === 'INPUT_CHOICE') {\n\n return
    \n {\n q.context === 'MATH_TEXT'\n ?\n renderMathInput(q, getPreviousInputAttempt(q._id))\n :\n onKeyPressed(e)}\n onChange={e => {\n saveInput(e.target.value);\n handleInputChange(e.target.value);\n }\n }>\n }\n
    \n }\n } else {\n if (q.subtype === 'MULTIPLE_CHOICE') {\n if (!q.choices || q.choices.length === 0) return <>No question choices available\n return q.choices.map(choice => {\n return
    onKeyPressed(e)} tabIndex={0}>\n }\n onChange={e => saveSelect(e.target.id)}\n custom />\n
    \n });\n } else if (q.subtype === 'INPUT_CHOICE') {\n return
    \n {\n q.context === 'MATH_TEXT'\n ?\n renderMathInput(q)\n :\n showTextArea()}\n key={`qid-${q._id}`}\n value={textInput}\n onKeyPress={(e) => onKeyPressed(e)}\n onChange={e => saveInput(e.target.value)}>\n }\n
    \n } else if (q.subtype === 'MANUAL_CHOICE') {\n return
    \n {\n q.context === 'CODE_TEXT' ?\n
    \n saveCodeInput(input)}\n />\n
    \n :\n <>\n }\n
    \n }\n }\n }\n\n const getPreviousCheckAttempt = (questionId, choiceId) => {\n if (initiallySelected && isWorkbook) {\n return false;\n }\n if (initiallySelected) {\n const attempt = attempts.find(a => a._id === questionId);\n if (attempt && attempt.selectedChoiceIds && attempt.selectedChoiceIds.includes(choiceId)) {\n return true; \n }\n }\n if (choiceId && answer && answer.selectedChoiceIds && answer.selectedChoiceIds.includes(choiceId)) {\n return true; \n }\n return false; \n };\n\n const getPreviousInputAttempt = (questionId) => {\n if (isWorkbook) { //L20-897 \n return '';\n }\n if (attempts && attempts.length > 0) {\n const attempt = attempts.find(a => a._id === questionId);\n if (attempt && attempt.numberOfAttempts > 0 && attempt.inputChoice && attempt.inputChoice !== '') {\n return attempt.inputChoice;\n }\n }\n return '';\n }\n\n const getInputChoice = (questionId) => {\n const attempt = attempts.find(a => a._id === questionId);\n if (attempt && attempt.numberOfAttempts > 0 && attempt.inputChoice && attempt.inputChoice !== '') {\n return attempt.inputChoice;\n }\n return '';\n }\n const getSelectedChoiceIds = (question) => {\n if (question && question.choices && question.choices.length>0) {\n const attempt = attempts.find(a => a._id === question._id);\n return attempt.selectedChoiceIds; \n }\n return [];\n }\n\n\n //on explanation viewed, mark as incorrect!\n const onExplanationViewed = () => {\n const _answer = { ...answer };\n _answer.inputChoice = '';\n _answer.selectedChoiceIds = [];\n _answer.status = 'INCORRECT';\n _answer.timestamp = Date.now() - _answer.timestamp;\n _answer.viewExplanation = true;\n _answer.numberOfAttempts = _answer.numberOfAttempts + 1;\n setAnswer(_answer);\n steppedQuestion ? onStepExplanation(stepQuestions[currentStep], _answer) : onExplanation(question, _answer);\n }\n\n const onHintViewed = () => {\n steppedQuestion ? onStepHint(stepQuestions[currentStep]) : onHint(question);\n }\n\n const showTextArea = () => {\n if (focusInputRef1.current) { focusInputRef1.current.click();}\n if (focusInputRef.current) { focusInputRef.current.click();}\n }\n\n const handleCancel = () => {\n \n if (question.subtype === 'MULTIPLE_CHOICE') {\n const _answer = { ...answer, inputChoice: '' };\n if (initialInputState.selectedChoiceIds && initialInputState.selectedChoiceIds.length > 0) {\n _answer.selectedChoiceIds = [initialInputState.selectedChoiceIds[0]];\n setInitiallySelected(true);\n setNextQuestionDisabled(false);\n } else {\n _answer.selectedChoiceIds = [];\n setInitiallySelected(false);\n setNextQuestionDisabled(true);\n }\n setAnswer(_answer);\n setHasChanged(false);\n onResetChoiceUpdate();\n } \n else if (question.subtype === 'INPUT_CHOICE') {\n saveInput(initialInputState.textInput);\n setHasChanged(false);\n if(!initialInputState.textInput || initialInputState.textInput==='') {\n setNextQuestionDisabled(true);\n }\n } \n };\n\n const showNextOrSubmitButton = () => {\n const showCancelButton = isUndoButtonRenderable() ;\n const isLastStep = index === total && !steppedQuestion;\n \n if (isExam || isWorkbook) {\n if (last) {\n return (\n
    \n \n \n {last && isExam && (\n steppedQuestion ? checkAndNextStep() : checkAndSubmit()}>\n Update Answer\n \n )}\n \n {showCancelButton && (\n \n Undo Change\n \n )}\n \n {last && isWorkbook && (\n checkAndSubmit()}>\n Submit Workbook\n \n )}\n
    \n );\n } else {\n return (\n <>\n steppedQuestion ? checkAndNextStep() : checkAndSubmit()}>\n Save Answer\n \n \n {showCancelButton && (\n \n Undo Change\n \n )}\n \n );\n } \n } else {\n if (index === total && !steppedQuestion) {\n return checkAndSubmit()}>Submit;\n } else {\n return (\n <>\n steppedQuestion ? checkAndNextStep() : checkAndSubmit()}>\n {steppedQuestion ? \"Next Step\" : \"Next Question\"}\n \n {showCancelButton && (\n \n Undo Change\n \n )}\n \n \n );\n }\n }\n };\n \n const showHelperButtons = () => {\n if (isExam) {\n return (\n
    \n
    \n {showNextOrSubmitButton()}\n
    \n
    );\n } else {\n return (<>\n
    \n
    \n onHintViewed()}> Get a Hint!\n onExplanationViewed()}> Explanation\n
    \n
    \n {showNextOrSubmitButton()}\n
    \n
    \n );\n }\n }\n\n const isUndoButtonRenderable = () => {\n return isExam && \n (initialInputState.codeInput !== \"\" ||\n initialInputState.textInput !== \"\" ||\n (initialInputState.selectedChoiceIds !==null &&\n initialInputState.selectedChoiceIds.length > 0));\n };\n\n const showQuestionStepper = () => {\n if (!steppedQuestion) return null;\n return (\n
    \n \n {stepData.map((data, index) => (\n \n ))}\n \n
    \n );\n };\n\n const renderQuestionStatement = () => {\n let statement = question.statement;\n if (steppedQuestion && stepQuestions && stepQuestions.length > 0) {\n statement = stepQuestions[currentStep].statement;\n }\n return ;\n }\n\n const onTryAgainHandler = () => {\n setShowIncorrectQuestionModal(false);\n }\n\n const onNextQuestionHandler = () => {\n setShowIncorrectQuestionModal(false);\n checkAndSubmit();\n }\n return (\n
    \n\n
    \n\n
    \n {showQuestionStepper()}\n
    \n

    {question.subtype === 'MULTIPLE_CHOICE' ? 'Select' : 'Type'} your answer

    \n {steppedQuestion ? <> : ({index} out of {total})}\n
    \n\n

    \n {renderQuestionStatement()}\n {renderMultimedia()}\n {renderAudibleHelp()}\n

    \n\n
    \n {renderQuestionInput()}\n
    \n\n
    \n {showHelperButtons()}\n
    \n
    \n\n onNextQuestionHandler()}\n onTryAgain={() => onTryAgainHandler()}\n />\n\n setShowImageModal(false)}\n />\n
    \n );\n}\n\nexport default AssessmentQuestion;","export default class Answer {\n constructor(questionId, selectedChoiceIds, textInputChoice='', timeSpentInMs=0, numberOfAttempts=1, viewHint=false, viewExplanation=false, step=false, parent='', isStepParent=false, claimedAsCorrect=false) {\n this.questionId = questionId;\n this.selectedChoiceIds = selectedChoiceIds;\n this.textInputChoice = textInputChoice;\n this.timeSpentInMs = timeSpentInMs;\n this.isCorrect = false;\n this.numberOfAttempts = numberOfAttempts;\n this.viewHint = viewHint;\n this.viewExplanation = viewExplanation;\n this.step = step;\n this.parent = parent;\n this.isStepParent = isStepParent;\n this.claimedAsCorrect = claimedAsCorrect;\n }\n\n getQuestionId() {\n return this.questionId;\n }\n\n setQuestionId(questionId) {\n this.questionId = questionId;\n }\n\n getTimeSpent() {\n return this.timeSpentInMs;\n }\n\n setTimeSpent(ms) {\n this.timeSpentInMs = ms;\n }\n\n getTextInputChoice() {\n return this.textInputChoice;\n }\n\n setTextInputChoice(textInputChoice){\n this.textInputChoice = textInputChoice;\n }\n\n toString() {\n return JSON.stringify(this);\n }\n}\n","import Answer from \"./../payloads/Answer\";\n\nexport default {\n\n convertAttemptsToAnswers: (attempts) => {\n if(!attempts || attempts.length === 0) return [];\n return attempts.map(a => new Answer(a._id, a.selectedChoiceIds, a.inputChoice, a.timestamp, a.numberOfAttempts, a.viewHint, a.viewExplanation, a.step, a.parent, a.isStepParent, a.claimedAsCorrect));\n },\n\n convertExamResultsWithSteps: (result, examQuestions) => {\n if(!result || !examQuestions || examQuestions.length === 0) return null;\n let _result = {...result};\n _result.questions = [];\n\n for (const examQuestion of examQuestions) {\n \n _result.questions.push(examQuestion);\n }\n\n return _result;\n }\n}","import {knuthShuffle} from 'knuth-shuffle';\nimport {Random} from \"random-js\";\nconst random = new Random()\n\nexport default {\n\n //Fisher-Yates (aka Knuth) shuffle\n scramble: (array) => {\n return knuthShuffle(array.slice(0))\n },\n\n //Mersenne Twister pseudo-random\n pick: (min, max) => {\n return random.integer(min, max)\n }\n}\n","export default class Attempt {\n constructor(assessmentId, classId, unitId='', lectureId='') {\n this.assessmentId = assessmentId;\n this.answers = [];\n this.timeSpent = 0;\n this.contextId = classId;\n this.unitId = unitId;\n this.lectureId = lectureId;\n this.timeTrigger = 0;\n }\n\n getAssessmentId() {\n return this.assessmentId;\n }\n\n getUnitId() {\n return this.unitId;\n }\n\n setUnitId(id) {\n this.unitId = id;\n }\n\n getLectureId() {\n return this.lectureId;\n }\n\n setLectureId(id) {\n this.lectureId = id;\n }\n\n getAnswers() {\n return this.answers;\n }\n\n setAnswers(answers) {\n this.answers = answers;\n }\n\n pushAnswer(answer) {\n this.answers.push(answer);\n }\n\n clearAnswers() {\n this.answers = [];\n }\n\n getTimeSpent() {\n return this.timeSpent;\n }\n\n setTimeSpent(ms) {\n this.timeSpent = ms;\n }\n\n getTimeTrigger() {\n return this.timeTrigger; \n }\n\n setTimeTrigger(ms) {\n this.timeTrigger = ms; \n }\n\n toString() {\n return JSON.stringify(this);\n }\n}\n","import React, {useState, useRef, useEffect} from 'react';\nimport './stopwatch.css';\n\nconst Stopwatch = (props) => {\n\n const {initialTime, reset=false, onUpdate, onFinish, onReset} = props;\n\n const [timer, setTimer] = useState(initialTime);\n\n const increment = useRef(null);\n\n useEffect(() => {\n tick();\n }, []);\n\n useEffect(() => {\n if(reset) {\n setTimer(initialTime);\n clearInterval(increment.current);\n tick();\n onReset()\n }\n }, [reset]);\n\n useEffect(() => {\n if(initialTime - timer === initialTime){\n clearInterval(increment.current);\n onFinish();\n } else {\n onUpdate(timer);\n }\n }, [timer]);\n\n const tick = () => {\n increment.current = setInterval(() => {\n setTimer((timer) => timer - 1)\n }, 1000);\n }\n\n const formatTime = () => {\n const getSeconds = `0${(timer % 60)}`.slice(-2);\n const minutes = `${Math.floor(timer / 60)}`;\n const getMinutes = `0${minutes % 60}`.slice(-2);\n const getHours = `0${Math.floor(timer / 3600)}`.slice(-2);\n\n return
    \n {\n initialTime >= 3600 \n ?\n \n {getHours}Hours\n \n : \n <>\n }\n \n \n {getMinutes}Minutes\n \n \n {getSeconds}Seconds\n \n
    \n }\n\n return ( \n
    \n
    {formatTime()}
    \n
    \n );\n}\n \nexport default Stopwatch;","export default __webpack_public_path__ + \"static/media/timesup.224535d3.svg\";","import React from \"react\";\nimport Modal from \"react-bootstrap/Modal\";\nimport timeIsUpIcon from \"./../../../images/timesup.svg\";\nimport './timeupmodal.css';\nimport { Button } from \"react-bootstrap\";\n\nconst TimeUpModal = props => {\n\n return (\n \n \n \n

    Time is up!

    \n
    \n
    \n \n \n \n \n {props.retake ? \n
    \n \n
    \n : <>}\n
    \n \n );\n};\n\nexport default TimeUpModal;\n","import React from \"react\";\nimport {Modal, Button} from \"react-bootstrap\";\nimport './examcompletemodal.css';\n\nconst ExamCompleteModal = props => {\n \n return (\n \n \n \n

    \n
    \n
    \n \n

    Congratulations! you have answered every question on the exam!

    \n
    \n \n \n
    \n
    \n \n );\n};\n\nexport default ExamCompleteModal;\n","import React from \"react\";\nimport {Modal, Button} from \"react-bootstrap\";\nimport * as Icons from 'react-bootstrap-icons';\nimport './missingsavedanswermodal.css';\n\nconst MissingSavedAnswerModal = props => {\n \n return (\n \n \n \n
    \n \n
    \n
    \n
    \n \n

    Your currently selected answer has not been saved

    \n
    \n \n
    \n
    \n \n );\n};\n\nexport default MissingSavedAnswerModal;\n","import React, {useState, useEffect} from 'react';\nimport {useHistory } from 'react-router-dom';\nimport Header from \"../../../widgets/header/Header\";\nimport AssessmentPager from \"../../../widgets/pagination/AssessmentPager\";\nimport AssessmentQuestion from \"./../../../widgets/assessments/AssessmentQuestion\";\nimport AssessmentService from \"./../../../../services/AssessmentService\";\nimport QuestionService from \"./../../../../services/QuestionService\";\nimport AttemptService from \"./../../../../services/AttemptService\";\nimport TrackService from \"./../../../../services/TrackService\";\nimport StudentLogService from \"./../../../../services/StudentLogService\";\nimport AssessmentUtils from \"./../../../../utils/AssessmentUtils\";\nimport RandomUtils from \"./../../../../utils/RandomUtils\";\nimport Attempt from \"./../../../../payloads/Attempt\";\nimport DeepLinking from '../../../../utils/DeepLinking';\nimport Stopwatch from './../../../widgets/stopwatch/Stopwatch';\nimport './quizview.css';\nimport TimeUpModal from '../../../widgets/modals/TimeUpModal';\nimport ProfileService from '../../../../services/ProfileService';\nimport ExamCompleteModal from '../../../widgets/modals/ExamCompleteModal';\nimport MissingSavedAnswerModal from '../../../widgets/modals/MissingSavedAnswerModal';\n\nconst ExamView = (props) => {\n\n const { examId, classId, unit, lecture } = props;\n\n const history = useHistory();\n\n //state\n const [profile, setProfile] = useState(null);\n const [exam, setExam] = useState(null);\n const [questions, setQuestions] = useState(null);\n const [examLog, setExamLog] = useState(null);\n const [questionAttempts, setQuestionAttempts] = useState(null);\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);\n const [currentQuestion, setCurrentQuestion] = useState('');\n const [startTime, setStartTime] = useState(0);\n const [examDuration, setExamDuration] = useState(0);\n const [examStatus, setExamStatus] = useState('');\n const [timeBased, setTimeBased] = useState(false);\n const [showRetakeOption, setShowRetakeOption] = useState(false);\n const [showTimeUpModal, setShowTimeUpModal] = useState(false);\n const [showExamCompleteModal, setShowExamCompleteModal] = useState(false);\n const [showMissingSaveAnswerModal, setShowMissingSaveAnswerModal] = useState(false);\n const [answerPendingToBeSaved, setAnswerPendingToBeSaved] = useState(false);\n const [isPlacementExam, setIsPlacementExam] = useState(false);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const [isTimedUp, setIsTimedUp] = useState(false);\n const [resetTimer, setResetTimer] = useState(false);\n\n const [resetHasChangedAssessment, setResetHasChangedAssessment] = useState(false);\n\n //in secs\n const examTimeTrackerInterval = 5;\n\n useEffect(() => {\n //reset exam state\n reset();\n getExamFromServer(examId);\n setResetHasChangedAssessment(false);\n }, [examId]);\n\n useEffect(() => {\n if(showTimeUpModal && !showRetakeOption){\n setTimeout(() => {\n submitExamToServer('TIMEUP');\n }, 2000);\n }\n }, [showTimeUpModal]);\n\n const getExamFromServer = async (id) => { \n const _profile = ProfileService.get();\n setProfile(_profile);\n let _exam = await AssessmentService.getRemote(id);\n if(!_exam) throw new Error('Unable to retrieve exam from server');\n\n const examTitle = _exam.title;\n const _questions = _exam.questions;\n\n //update LS\n QuestionService.store(_questions);\n \n document.title = `LimeSpring Portal - ${examTitle}`;\n\n //check if exam is placement exam\n if(_exam.type === 'PLACEMENT_EXAM') setIsPlacementExam(true);\n\n //check if exam is limited/unlimited time\n if(_exam.timeBased) setTimeBased(true);\n\n //check if exam has attempts already!\n const examLogs = await StudentLogService.getFromRemoteForStudentId(_profile._id);\n const assessmentLog = examLogs ? examLogs.assessments.find(a => a._id === examId) : null;\n setExamLog(examLogs);\n\n //if there is an attempt it means this student already started the exam\n const attempt = await AttemptService.getForAssessment(examId);\n\n //check if exam has been taken already\n if(assessmentLog && _profile && _profile.role === 'Student'){\n if(assessmentLog.status === 'TAKEN'){\n if(_exam.type === 'PLACEMENT_EXAM'){\n gotoExamResults(examLogs, examId, examTitle, attempt);\n }else{\n gotoUnitView();\n }\n }\n }\n\n const inProgressAttempts = assessmentLog && assessmentLog.attempts ? assessmentLog.attempts.length > 0 : false;\n if(_exam.timeBased) {\n let _durationInit = getExamInitialDuration(_profile, _exam);\n let _duration = _durationInit;\n if(inProgressAttempts && attempt) _duration = await getElapsedTimeFromServer(_duration, \"IN_PROGRESS\");\n if (_duration===0) {\n let _questionAttempts1 = buildExamWithPreviousAttempts(_questions, attempt);\n let count = getNumberOfAnsweredAttemptsParam(_questionAttempts1);\n if (count >0) forceTimeIsUp();\n else setExamDuration(_durationInit);\n } else {\n setExamDuration(_duration);\n } \n }\n\n //reset retake button\n setShowRetakeOption(false);\n\n if(inProgressAttempts){\n setExamStatus('IN_PROGRESS');\n if(attempt){\n buildExamWithPreviousAttempts(_questions, attempt);\n } else {\n setResetTimer(true);\n await buildNewExam(_exam, _questions);\n }\n } else {\n setExamStatus('STARTED');\n await buildNewExam(_exam, _questions);\n }\n\n setExam(_exam);\n }\n\n const reset = () => {\n resetFlags();\n }\n\n const resetFlags = () => {\n setCurrentQuestionIndex(0);\n setStartTime(0);\n setShowTimeUpModal(false);\n setShowExamCompleteModal(false);\n setExamDuration(0);\n setTimeBased(false);\n setAnswerPendingToBeSaved(false);\n setExam(null);\n setShowMissingSaveAnswerModal(false);\n setIsPlacementExam(false);\n setCurrentStepIndex(0);\n setExamLog(null);\n setExamStatus('');\n }\n\n const getExamInitialDuration = (_profile, _exam) => {\n let multiplier = 1;\n if(_profile && _profile.conditions && _profile.conditions.length > 0) {\n const timeCondition = _profile.conditions.find(c => c.name === 'extratime');\n if(timeCondition && timeCondition.value != \"0\"){\n multiplier = parseFloat(timeCondition.value);\n }\n }\n const _examDuration = _exam.durationInMinutes * 60 * multiplier;\n return _examDuration;\n }\n\n const reloadNewExam = async () => {\n setIsTimedUp(false);\n setShowTimeUpModal(false);\n await getExamFromServer(examId);\n }\n\n const buildNewExam = async (_exam, _questions) => {\n //scramble choices if needed!\n if(_exam.scrambleChoices){\n _questions.forEach(q => {\n if(q.subtype === 'MULTIPLE_CHOICE'){\n const scrambledChoices = RandomUtils.scramble(q.choices);\n q.choices = scrambledChoices;\n }\n });\n }\n\n setQuestions(_questions);\n\n //for exams, always start with the first question!\n setCurrentQuestion(_questions[0]); \n const _attempts = QuestionService.getAsAttempts(_questions);\n setQuestionAttempts(_attempts);\n\n setStartTime(Date.now());\n }\n\n const buildExamWithPreviousAttempts = (_questions, attemptLog) => {\n setQuestions(_questions);\n setCurrentQuestion(_questions[0]);\n let questionAttempts = QuestionService.getAsAttempts(_questions);\n let index = AttemptService.getFirstPendingAttemptIndex(questionAttempts);\n if(attemptLog && attemptLog.questions && attemptLog.questions.length > 0){\n questionAttempts.forEach((qa, i) => {\n const existingQuestionAttemptLog = attemptLog.questions.find(alq => alq._id === qa._id);\n \n //if question has been answered (right or wrong!) - NOTE: if there is no log attempt for question, it's probably a set question (alternate)!\n if(existingQuestionAttemptLog){\n if((existingQuestionAttemptLog.selectedChoiceIds && existingQuestionAttemptLog.selectedChoiceIds.length > 0) || existingQuestionAttemptLog.textAnswer !== \"\"){\n qa.selectedChoiceIds = existingQuestionAttemptLog.selectedChoiceIds;\n qa.inputChoice = existingQuestionAttemptLog.textAnswer;\n qa.numberOfAttempts = 1;\n qa.status = 'ANSWERED';\n if (!existingQuestionAttemptLog.isStepChild) index = i;\n } else if (existingQuestionAttemptLog.isStepParent) {\n index = i;\n }\n } \n });\n }\n\n //current question should be the first blank\n setCurrentQuestion(_questions[index]);\n setCurrentQuestionIndex(index);\n setQuestionAttempts(questionAttempts);\n\n setStartTime(Date.now());\n return questionAttempts;\n }\n\n const gotoUnitView = () => {\n if(unit){\n history.push({pathname: DeepLinking.STUDENT.UNIT_VIEW_PATH.replace(\":id\", unit._id), state: {classId: classId}});\n } else {\n history.push({pathname: DeepLinking.STUDENT.CLASS_VIEW_PATH.replace(\":id\", classId), state: {classId: classId}});\n }\n }\n\n const gotoExamResults = (examLogs, examId, examTitle, attempt) => {\n const assessmentLog = examLogs.assessments.find(a => a._id === examId);\n if(assessmentLog){\n if(assessmentLog.status !== 'PENDING' && assessmentLog.status !== 'LOCKED'){\n history.push({\n pathname: DeepLinking.STUDENT.EXAM_RESULTS_PATH,\n state: {\n examResult: {\n title: examTitle,\n data: attempt,\n currentView: \"exam-results\"\n }\n }\n });\n }\n }\n }\n\n const getElapsedTimeFromServer = async (_examDuration, status) => {\n const timers = await TrackService.trackAssessment(examId, {status: status, duration: _examDuration});\n let elapsedTime = 0;\n if(timers && timers.length > 0){\n const timer = timers[0];\n elapsedTime = timer.elapsedTime\n }\n return elapsedTime;\n }\n\n const onReviewExamen = async() => {\n setShowExamCompleteModal(false);\n setResetHasChangedAssessment(true);\n }\n\n const submitExamToServer = async (examStatus) => {\n \n if(timeBased){\n //no sync tracking!\n TrackService.trackAssessment(exam ? exam._id : examId, {status: examStatus, duration: examDuration});\n }\n \n let examAttempt = new Attempt(exam ? exam._id : examId, classId);\n const answerAttempts = AssessmentUtils.convertAttemptsToAnswers(questionAttempts);\n examAttempt.setAnswers(answerAttempts);\n examAttempt.setTimeSpent(Date.now() - startTime);\n let result = await AttemptService.submit(examAttempt,\"SUBMIT\");\n if(!result) {return; }\n if(isPlacementExam){\n history.push({pathname: DeepLinking.STUDENT.PLACEMENT_EXAM_RESULTS_PATH, state: {classId: classId, unitId: unit ? unit._id : '', data: result}});\n } else {\n history.push({\n pathname: DeepLinking.STUDENT.EXAM_RESULTS_PATH,\n state: {\n examResult: {\n title: exam ? exam.title : 'Exam',\n type: exam ? exam.type : 'BOOKEXAM',\n data: result,\n currentView: \"exam-results\"\n }\n }\n });\n }\n }\n\n const goToNextStep = (parentQuestionId) => {\n const q = questions.find(question => { return question._id === parentQuestionId});\n if(q && q.steps && q.steps.length > 0){\n if(currentStepIndex < q.steps.length - 1){\n setCurrentStepIndex(currentStepIndex + 1);\n }else{\n setCurrentStepIndex(0);\n\n //mark parent question as answered with no details\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === q._id);\n if(attempt) { attempt.status = \"ANSWERED\";}\n setQuestionAttempts(_questionAttempts);\n\n goToNextQuestion();\n }\n }\n \n }\n\n const goToNextQuestion = () => {\n if(isLastQuestion()){\n setShowExamCompleteModal(true);\n } else {\n //const nextIndex = isLastQuestion() ? currentQuestionIndex - 1 : currentQuestionIndex + 1;\n const nextIndex = currentQuestionIndex + 1;\n setCurrentQuestionIndex(nextIndex);\n setCurrentQuestion(questions[nextIndex]);\n setQuestionAttempts([...questionAttempts]);\n }\n }\n\n const checkIfExamIsReady = () => {\n if(!questionAttempts || questionAttempts.length === 0) return false;\n const pendingOrRetryAttempt = questionAttempts.find(qa => !qa.isStepParent && qa.status === \"PENDING\");\n if(pendingOrRetryAttempt) return false;\n\n //check if there are any blank responses!\n const blankResponseAttempt = questionAttempts.find(qa => !qa.isStepParent && qa.inputChoice === \"\" && qa.selectedChoiceIds.length === 0);\n if(blankResponseAttempt) return false;\n\n return true;\n }\n\n const processAnswer = (q, answer) => {\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === q._id);\n if(attempt) { \n attempt.status = \"ANSWERED\";\n attempt.timestamp = answer.timestamp;\n attempt.selectedChoiceIds = answer.selectedChoiceIds;\n attempt.inputChoice = answer.inputChoice;\n attempt.viewExplanation = answer.viewExplanation;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n }\n setQuestionAttempts(_questionAttempts);\n setAnswerPendingToBeSaved(false);\n\n //we should persist exam in server so student can come back later\n //and continue with exam. Note: this is done synchronously!\n let examAttempt = new Attempt(examId, classId);\n const answerAttempts = AssessmentUtils.convertAttemptsToAnswers(_questionAttempts);\n examAttempt.setAnswers(answerAttempts);\n examAttempt.setTimeSpent(Date.now() - startTime);\n AttemptService.submit(examAttempt);\n \n if(q.type === \"QUESTION_STEP\"){\n goToNextStep(attempt.parent);\n }else {\n goToNextQuestion();\n }\n }\n\n const onChoiceUpdateHandler = () => {\n setAnswerPendingToBeSaved(true);\n }\n\n const onResetChoiceUpdateHandler = () => {\n setAnswerPendingToBeSaved(false);\n }\n\n const showQuestion = () => {\n if(!questions || questions.length == 0 || currentQuestion === '') { return <>}\n const question = questions.find(q => q._id === currentQuestion._id);\n if(!question) { return <>No question found}\n\n return processAnswer(q, ans)}\n onStepAnswerSubmit={(q, ans) => processAnswer(q, ans)}\n examSubmit={() => submitExamToServer('COMPLETED')}\n onChoiceUpdate={() => onChoiceUpdateHandler()}\n resetHasChanged={resetHasChangedAssessment}\n onResetChoiceUpdate={() => onResetChoiceUpdateHandler()}\n />\n }\n\n const resetCurrentQuestion = (q, i) => {\n if(!q) return;\n if(answerPendingToBeSaved){\n setShowMissingSaveAnswerModal(true);\n return;\n }\n const question = questions.find(qst => qst._id === q._id);\n if(question){\n setCurrentQuestion(question);\n setCurrentQuestionIndex(i);\n }\n }\n\n const getNumberOfAnsweredAttempts = () => {\n return getNumberOfAnsweredAttemptsParam(questionAttempts);\n }\n\n const getNumberOfAnsweredAttemptsParam = (_questionAttempts) => {\n if(!_questionAttempts || _questionAttempts.length === 0) return 0;\n let counter = 0;\n for (const questionAttempt of _questionAttempts) {\n if(questionAttempt && questionAttempt.status === 'ANSWERED'){\n counter++;\n }\n }\n return counter;\n } \n\n const isLastQuestion = () => {\n if(!questions || questions.length === 0) { return false; }\n return currentQuestionIndex === questions.length - 1;\n }\n\n const forceTimeIsUp = async () => {\n setShowTimeUpModal(true);\n }\n\n const timeIsUp = async () => {\n getElapsedTimeFromServer(0, 'RESET');\n\n //if no answers have been selected, let the user retake the exam\n //if there are at least 1 answer, auto-submit\n if(getNumberOfAnsweredAttempts() === 0) {\n await StudentLogService.resetAssessmentLog(examLog._id, examId);\n setShowRetakeOption(true);\n }\n setShowTimeUpModal(true);\n }\n\n const onTimerProgress = (s) => {\n if(exam && s % examTimeTrackerInterval === 0){\n TrackService.trackAssessment(exam._id, {status: 'IN_PROGRESS', duration: examDuration});\n }\n }\n\n const renderTimer = () => {\n if(!timeBased || examDuration === 0) { return <>; }\n return setResetTimer(false)}\n onUpdate={(s) => onTimerProgress(s)} \n onFinish={() => timeIsUp()}/>\n }\n\n const removeStepAttempts = (qa) => {\n if(!qa || qa.length === 0) return [];\n return qa.filter(q => q.step === false);\n }\n\n const showSubmitExamButton = () => {\n if(!checkIfExamIsReady()) return <>;\n return ( submitExamToServer('COMPLETED')}>\n Submit Exam\n );\n }\n\n return (\n
    \n
    \n\n
    \n \n {renderTimer()}\n \n {showTimeUpModal \n ? \n <> \n :\n <>\n
    \n resetCurrentQuestion(q, i)}\n />\n
    \n
    \n {showSubmitExamButton()}\n
    \n
    \n {showQuestion()}\n
    \n \n }\n
    \n reloadNewExam()} onHide={() => setShowTimeUpModal(false)} onCallback={() => console.log('')}/>\n setShowExamCompleteModal(false)} onSubmit={() => submitExamToServer('COMPLETED')} onReview={() => onReviewExamen()}/>\n setShowMissingSaveAnswerModal(false)} onReview={() => setShowMissingSaveAnswerModal(false)}/>\n
    \n );\n}\n \nexport default ExamView;","import React from \"react\";\nimport Config from \"../../../../config/Config\";\nimport Header from \"../../../widgets/header/Header\";\nimport { Button, Form, Dropdown, ButtonGroup, Badge } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport QuestionService from \"../../../../services/QuestionService\";\nimport AssessmentService from \"../../../../services/AssessmentService\";\nimport AssetService from \"./../../../../services/AssetService\";\nimport MathDisplayField from \"./../../../widgets/math/MathDisplayField\";\nimport VideoTimeUtils from \"./../../../../utils/VideoTimeUtils\";\nimport LatexUtils from \"./../../../../utils/LatexUtils\";\nimport ImagePreviewModal from \"./../../../widgets/modals/ImagePreviewModal\";\nimport \"./examresults.css\";\n\nclass ExamResults extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n userChoices: [],\n imageUrl: '',\n showImageModal: false,\n filter: \"all\"\n };\n }\n componentDidMount() {\n\n document.title = \"LS Portal - Exam Results\";\n const load = async () => {\n let questionIds = this.props.response.data.questions.map(q => q._id);\n let questions = await QuestionService.getFromRemote(questionIds);\n let populatedQuestions = [];\n this.props.response.data.questions.forEach(question => {\n //do not consider step parent questions as they are only containers\n if(!question.isStepParent){\n populatedQuestions.push({ ...question, ...questions.find(qu => qu._id === question._id) });\n }\n });\n this.setState({ userChoices: populatedQuestions });\n\n setTimeout(() => {\n if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }, Config.mathRenderTimer);\n \n }\n\n load();\n }\n\n filterUpdate(e) {\n this.setState({ filter: e });\n if (e === \"all\") {\n e = \"answer\";\n }\n let DOM_nodes = document.getElementsByClassName(e);\n let all_Nodes = document.getElementsByClassName(\"answer\");\n if (e === \"answer\") {\n for (let index = 0; index < DOM_nodes.length; index++) {\n DOM_nodes[index].classList.remove(\"hide\");\n }\n } else if (e === \"wrong_answer\") {\n for (let index = 0; index < all_Nodes.length; index++) {\n all_Nodes[index].classList.add(\"hide\");\n }\n for (let index = 0; index < DOM_nodes.length; index++) {\n DOM_nodes[index].classList.remove(\"hide\");\n }\n } else if (e === \"correct_answer\") {\n for (let index = 0; index < all_Nodes.length; index++) {\n all_Nodes[index].classList.add(\"hide\");\n }\n for (let index = 0; index < DOM_nodes.length; index++) {\n DOM_nodes[index].classList.remove(\"hide\");\n }\n }\n }\n\n getUserChoices(index, IDs) {\n let display = \"\";\n IDs.map(ID => {\n let selectedOption = this.state.userChoices[index].choices.find(\n choice => {\n if (choice._id === ID) {\n return choice;\n }\n }\n );\n if (selectedOption) {\n display = display + selectedOption.description;\n }\n });\n return display;\n }\n\n showTimer(){\n const exam = AssessmentService.get(this.props.response.data.assessmentId);\n if(!exam){\n return <>\n }\n if(exam.timebased){\n return(\n
    \n \n \n {\n VideoTimeUtils.formatVideoTime(this.props.response.data.timeSpent || 0)\n }\n \n
    )\n }\n }\n\n showExamAnswer(id, isCorrect){\n \n const total = this.state.userChoices.length;\n \n for (let i = 0; i< total; i++) {\n document.getElementById(`examAsnwer${i + 1}`).className = \"examAnswer\";\n }\n document.getElementById(id).className=\"examAnswerShow\";\n\n if(!isCorrect){\n document.getElementById(id).classList.add(\"incorrect\");\n }\n }\n\n renderMultipleChoice(question) {\n let selectedChoices = question.selectedChoiceIds;\n if(!question || !selectedChoices) { return <>None Available}\n\n return question.choices.map(option => {\n let selected = \"\";\n let css = \"\";\n\n //mark the question\n if(option.isCorrect){\n css = \"examAnswerCorrect\"\n }\n\n if(question.isCorrect){\n if(selectedChoices.includes(option._id)){\n selected = \"checked\"\n css=\"examAnswerCorrect\"\n }\n } else {\n if(selectedChoices.includes(option._id)){\n selected = \"checked\"\n css=\"examAnswerIncorrect\"\n }\n }\n\n return (\n
    \n }\n custom/>\n
    \n );\n })\n }\n\n renderExplanation(question){\n if(question.explanationMedia && question.explanationMedia !== \"\"){\n const mediaAsset = AssetService.get(question.explanationMedia);\n if(mediaAsset){\n return \n }\n }\n if(!question.explanation || question.explanation === '') return (<>);\n return(\n \n Explanation:\n \n \n )\n }\n\n zoomImage(url){\n this.setState({imageUrl: url,showImageModal:true})\n } \n\n renderInputChoice(question){\n if(!question || !question.choices) return <>Information Not Available;\n let choices = question.choices;\n\n const getChoices = () => {\n if(choices && choices.length > 0){ \n //let parsed = choices.map(c => {return c.description}).reduce((prev, curr) => [prev, \", \", curr]);\n let parsed = \"\";\n let start = 0;\n let end = choices.length;\n choices.forEach((c,i) => {\n if(c.description !== \"\"){\n parsed += (i !== start && i !== end ? ',' : '') + c.description;\n }\n })\n return LatexUtils.denormalize(parsed);\n } else {\n return '';\n }\n }\n\n return (\n <>\n
    \n Your input: \n
    \n
    \n
    \n Correct: \n
    \n
    \n \n );\n }\n\n renderExercises(question){\n return (\n
    \n
    \n {question.subtype === \"MULTIPLE_CHOICE\" ? this.renderMultipleChoice(question) : this.renderInputChoice(question)}\n
    \n
    \n );\n };\n\n render() {\n return (\n
    \n \n
    \n
    \n
    \n
    \n

    \n {this.props.response.title}\n

    \n \n Report a mistake\n \n
    \n
    \n {\n this.filterUpdate(ek);\n }}\n >\n \n\n \n\n \n All Questions\n \n Correct Answers\n \n \n Incorrect answers\n \n \n \n
    \n
    \n
    \n
    {`${Math.ceil(this.props.response.data.grade.toFixed(1))}%`}
    \n {this.showTimer()}\n
    \n
    \n
    \n {this.state.userChoices.map((question, index) => {\n return (\n \n \n {this.props.response.type === 'PLACEMENT_EXAM' && question.category && question.category !== \"\" ? {question.category} : <>}\n
    \n

    \n {{index + 1}.}\n {\n \n }\n {\n question.multimedia && question.multimedia !== \"\" ?\n this.zoomImage(question.multimedia.url)}/>\n :\n <>\n }\n

    \n
    \n {this.renderExercises(question)}\n \n
    \n {this.renderExplanation(question)}\n
    \n
    \n
    \n
    \n );\n })}\n
    \n
    \n this.setState({showImageModal:false})}\n />\n
    \n );\n }\n}\n\nexport default ExamResults;\n","import React, { useState, useEffect, useRef } from 'react';\nimport {useHistory} from 'react-router-dom';\nimport Header from \"../../../widgets/header/Header\";\nimport { Button } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport CourseService from './../../../../services/CourseService'\nimport ClassService from '../../../../services/ClassService';\nimport DeepLinking from '../../../../utils/DeepLinking';\nimport StringUtils from '../../../../utils/StringUtils';\n\nconst PlacementExamResults = (props) => {\n\n const {classId, unitId, data} = props;\n\n const [message, setMessage] = useState('');\n const [score, setScore] = useState(0);\n const [showPracticeButton, setShowPracticeButton] = useState(false);\n const [showNextButton, setShowNextButton] = useState(false);\n\n const SUCCESS_MESSAGE = 'Hi there, you did great! You can skip this module, but for more practice or to improve your score complete the lessons, workbook and exam.';\n const FAILED_MESSAGE = 'It looks like you would benefit from completing this module. Please complete the lessons, workbook and exam to receive credit for this module';\n\n let node = useRef(null);\n\n useEffect(() => {\n if(data && data.grade) {\n setScore(Math.round(data.grade));\n if(data.grade >= 85){\n setMessage(SUCCESS_MESSAGE);\n setShowNextButton(true);\n setShowPracticeButton(true);\n }else{\n setMessage(FAILED_MESSAGE);\n setShowPracticeButton(true);\n setShowNextButton(false);\n }\n }\n }, [data]);\n\n useEffect(() => {\n node.current.innerHTML = StringUtils.decodeHtml(message);\n }, [message]);\n\n const history = useHistory();\n\n const goToCurrentUnit = () => {\n history.push({pathname: DeepLinking.STUDENT.UNIT_VIEW_PATH.replace(\":id\", unitId), state: {classId: classId}});\n }\n\n const goToNextUnit = () => {\n let _class = ClassService.get(classId);\n if(_class){\n let courses = CourseService.getByIds(_class.courses);\n let units = [];\n if (courses && courses.length > 0) {\n courses.forEach(course => {\n if (course.units && course.units.length > 0) {\n units = units.concat(course.units);\n }\n });\n }\n\n let nextUnitId = '';\n if(units.length > 0){\n for (let index = 0; index < units.length; index++) {\n const unit = units[index];\n if(unit._id === unitId && index < units.length){\n nextUnitId = units[index + 1]._id;\n }\n }\n }\n\n if(nextUnitId !== ''){\n history.push({pathname: DeepLinking.STUDENT.UNIT_VIEW_PATH.replace(\":id\", nextUnitId), state: {classId: classId}});\n }\n }\n }\n\n const viewExamResults = () => {\n history.push({pathname: DeepLinking.STUDENT.EXAM_RESULTS_PATH,\n state: {\n examResult: {\n title: 'Exam',\n type: 'PLACEMENT_EXAM',\n data: data,\n currentView: \"placement-exam-results\"\n }\n }\n });\n }\n\n return (\n
    \n \n\n
    \n {score}%\n {StringUtils.decodeHtml(message)}\n \n
    \n \n \n
    \n \n
    \n
    \n \n );\n}\n \nexport default PlacementExamResults;","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport Rater from \"react-rater\";\nimport \"react-rater/lib/react-rater.css\";\nimport cupImage from \"./../../../images/quiz-waytogo.png\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport \"./quizsuccessmodal.css\";\n\nconst QuizSuccessModal = props => {\n const { score, rating, show, unit, lecture, classId, autoplay, source} = props;\n\n const history = useHistory();\n\n const backToLesson = () => {\n history.push({\n pathname: DeepLinking.STUDENT.UNIT_VIEW_PATH.replace(\":id\", unit._id),\n state: { classId: classId, lectureId: lecture._id, autoplay: autoplay}\n });\n };\n\n const backToGradeChart = () => {\n history.push(DeepLinking.STUDENT.GRADEBOOK_UNITS_TABLE_VIEW_PATH.replace(':id', classId) + \"?unitId=\" + unit._id);\n };\n\n const retakeQuiz = () => {\n //just refresh page\n document.location.reload();\n };\n\n return (\n \n \n \n

    Keep up the good work!

    \n
    \n
    \n \n \n \n \n \n
    \n

    \n You’ve earned a {score}%\n

    \n
    \n
    \n retakeQuiz()}\n >\n Retake Quiz\n \n {source !== 'gradebook' && unit && lecture && ( backToLesson()}\n id=\"quizViewResults\"\n className=\"modalSubmitCTA\"\n >\n Back to Lesson\n )}\n {source === \"gradebook\" && (\n backToGradeChart()}\n id=\"quizViewResults\"\n className=\"modalSubmitCTA\"\n >\n Back Grade Chart\n )}\n \n
    \n
    \n \n );\n};\n\nexport default QuizSuccessModal;\n","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport Rater from \"react-rater\";\nimport \"react-rater/lib/react-rater.css\";\nimport cupImage from \"./../../../images/quiz-waytogo.png\";\nimport \"./quizsuccessmodal.css\";\n\nconst QuizSuccessTokenModal = ({ score, rating, show, message, onHide }) => {\n\n const retakeQuiz = () => {\n document.location.reload();\n };\n\n return (\n \n \n \n

    Keep up the good work!

    \n
    \n
    \n \n \n \n \n \n
    \n

    \n You’ve earned a {score}%\n

    \n
    \n
    \n retakeQuiz()}\n >\n Retake Quiz\n \n \n \n \n
    \n
    \n \n );\n};\n\nexport default QuizSuccessTokenModal;\n","import React from \"react\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport Rater from \"react-rater\";\nimport \"react-rater/lib/react-rater.css\";\nimport tryAgainImage from \"./../../../images/quiz-tryagain.png\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\nimport { useHistory } from \"react-router-dom\";\n\nimport \"./quiztryagainmodal.css\";\n\nconst QuizTryAgainModal = props => {\n const { score, rating, unit, lecture, classId, autoplay } = props;\n\n const history = useHistory();\n\n const retakeQuiz = () => {\n //just refresh page\n document.location.reload();\n };\n\n const backToLesson = () => {\n history.push({\n pathname: DeepLinking.STUDENT.UNIT_VIEW_PATH.replace(\":id\", unit._id),\n state: { classId: classId, lectureId: lecture._id, autoplay: autoplay }\n });\n };\n\n return (\n \n \n \n

    Practice makes perfect

    \n
    \n
    \n \n \n \n \n \n
    \n

    \n You’ve earned a {score}%\n

    \n
    \n
    \n retakeQuiz()}\n >\n Retake Quiz\n \n backToLesson()}\n >\n Back To Lesson\n \n
    \n
    \n \n );\n};\n\nexport default QuizTryAgainModal;\n","export default \"data:image/png;base64,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\"","import React, {useEffect} from \"react\";\nimport { Modal } from \"react-bootstrap\";\nimport MathDisplayField from \"../math/MathDisplayField\";\nimport Config from \"../../../config/Config\";\nimport \"./quizhintmodal.css\";\n\nconst QuizHintModal = props => {\n\n const { hint, show } = props;\n\n useEffect(() => {\n const renderMath = () => setTimeout(() => { if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset() }, Config.mathRenderTimer);\n renderMath();\n }, [show]);\n\n return (\n \n \n \n Hint\n \n \n \n \n \n \n \n );\n};\n\nexport default QuizHintModal;\n","import React, {useEffect, useState} from \"react\";\nimport { Button, Modal } from \"react-bootstrap\";\nimport * as Icons from 'react-bootstrap-icons';\nimport MathDisplayField from '../math/MathDisplayField';\nimport AssetService from './../../../services/AssetService';\nimport Config from \"../../../config/Config\";\nimport \"./explanationmodal.css\";\n\nconst ExplanationModal = props => {\n \n const { questionId, explanation, media, onHide, isLastQuestion, show, stepped=false, attempts, onCorrected} = props;\n\n const [step, setStep] = useState(1);\n\n useEffect(() => {\n const renderMath = () => setTimeout(() => {if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset() }, Config.mathRenderTimer);\n renderMath();\n }, [show]);\n\n\n const resetAndHide = () => {\n setStep(1);\n onHide();\n }\n\n const renderMedia = () => {\n if(!media) return; \n const asset = AssetService.get(media);\n\n if(asset && asset.type === 'IMAGE') {\n return (
    )\n }\n if(asset && asset.type === 'VIDEO') {\n return \n }\n }\n\n const showButtons = () => {\n if(isLastQuestion){\n return ();\n }else{\n return ();\n }\n }\n\n const onNotifyError = () => {\n setStep(step + 1);\n onCorrected();\n }\n\n const showErrorNotificationButton = () => {\n if(Config.showErrorNotifyButton && attempts){\n const attempt = attempts.find(a => a._id === questionId);\n if(attempt && !attempt.viewExplanation) return ( onNotifyError()}>Think you were right? );\n return <>;\n }\n return <>;\n }\n\n const handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n resetAndHide();\n }\n }\n\n const showModalBody = () => {\n if(step === 1) {\n return (\n <>\n \n \n { renderMedia() }\n \n \n
    \n {showButtons()}\n {showErrorNotificationButton()}\n
    \n
    \n );\n } else if(step === 2) {\n return (\n <>\n \n

    Your answer has been marked correct and an email has been sent to LimeSpring support to notify them.

    \n
    \n \n
    \n {showButtons()}\n
    \n
    \n );\n }\n }\n\n return (\n
    \n \n \n \n Explanation\n \n \n {showModalBody()}\n \n
    \n );\n};\n\nexport default ExplanationModal;\n","import React from 'react';\nimport {Spinner, Modal} from \"react-bootstrap\";\n\nconst SubmitWaitModal = (props) => {\n\n return (\n \n \n \n \n
    \n

    Please wait while we submit your evaluation...

    \n
    \n \n
    \n
    \n
    \n \n );\n}\n \nexport default SubmitWaitModal;","import React, {useState, useEffect} from 'react';\nimport { Pagination } from \"react-bootstrap\";\nimport ArrayUtils from \"../../../utils/ArrayUtils\";\nimport \"./quizpagination.css\";\n\nconst QuizPager = (props) => {\n\n const { questions, current, clickable=false, onItemClickHandler} = props;\n\n const [itemSets, setItemSets] = useState([]);\n const [currentSetIndex, setCurrentSetIndex] = useState(0);\n const [currentQuestion, setCurrentQuestion] = useState(current);\n\n const maxItemsInSet = 6;\n\n useEffect(()=> {\n setItemSets(ArrayUtils.getAsSets(questions, maxItemsInSet));\n setCurrentQuestion(current);\n setCurrentSetIndex(findCurrentQuestionIndex());\n }, [questions]);\n\n const findCurrentQuestionIndex = () => {\n if(!current) return 0;\n const index = questions.findIndex(q => q._id === current);\n return Math.floor(index/maxItemsInSet);\n }\n\n const itemClickHandler = (e, q, i) => {\n e.preventDefault();\n if(!clickable) return;\n setCurrentQuestion(q._id);\n onItemClickHandler(q, i);\n }\n\n const getStatus = (q) => {\n\n //case: exam only!\n if(q.status === 'ANSWERED') { return 'answered' }\n\n //special case - active is correct/incorrect!\n if(currentQuestion === q._id){\n if(q.status === 'CORRECT') { return 'retry correct' }\n if(q.status === 'INCORRECT') { return 'retry incorrect' }\n }\n\n if(q.status === 'PENDING') { return 'pending' }\n if(q.status === 'CORRECT') { return 'correct' }\n if(q.status === 'INCORRECT') { return 'incorrect' }\n if(q.status === 'PARTIAL') { return 'partial' }\n }\n\n const getItemsFromSet = (index) => {\n if(!itemSets || itemSets.length === 0) { return []; }\n return itemSets[index].map((q, i) => {\n return itemClickHandler(e, q, i + (maxItemsInSet * currentSetIndex))}>\n {(i+1) + (maxItemsInSet * currentSetIndex)}\n \n });\n }\n\n const prevNextClickHandler = (index) => {\n if(index < 0) { return; }\n if(index >= itemSets.length) { return; }\n setCurrentSetIndex(index);\n }\n\n const showItems = () => {\n let paginationItems = [];\n\n if(questions.length > maxItemsInSet){\n paginationItems.push( prevNextClickHandler(currentSetIndex - 1)}/>);\n }\n \n paginationItems.push(getItemsFromSet(currentSetIndex));\n \n if(questions.length > maxItemsInSet){\n paginationItems.push( prevNextClickHandler(currentSetIndex + 1)}/>);\n }\n \n return paginationItems;\n }\n\n return (\n
    \n {showItems()}\n
    \n );\n}\n \nexport default QuizPager;","export default {\n\n getOperators: () => {\n return [\n {value: \"GREATER_THAN\", display: \">\"},\n {value: \"LESS_THAN\", display: \"<\"},\n {value: \"EQUALS\", display: \"=\"},\n {value: \"GREATER_OR_EQUALS_THAN\", display: \"≥\"},\n {value: \"LESS_OR_EQUALS_THAN\", display: \"≤\"}\n ]\n },\n\n buildRangeValidationStatement: (orientation, limit, operator, answer) => {\n const operatorObj = [\n {value: \"GREATER_THAN\", display: \">\"},\n {value: \"LESS_THAN\", display: \"<\"},\n {value: \"EQUALS\", display: \"=\"},\n {value: \"GREATER_OR_EQUALS_THAN\", display: \"≥\"},\n {value: \"LESS_OR_EQUALS_THAN\", display: \"≤\"}\n ].find(op => operator === op.value);\n \n if(operatorObj){\n if(operatorObj.value === 'EQUALS' && orientation === 'left') return limit === answer;\n if(operatorObj.value === 'EQUALS' && orientation === 'right') return answer === limit;\n \n if(operatorObj.value === 'GREATER_THAN' && orientation === 'left') return limit > answer;\n if(operatorObj.value === 'GREATER_THAN' && orientation === 'right') return answer > limit;\n \n if(operatorObj.value === 'LESS_THAN' && orientation === 'left') return limit < answer;\n if(operatorObj.value === 'LESS_THAN' && orientation === 'right') return answer < limit;\n \n if(operatorObj.value === 'GREATER_OR_EQUALS_THAN' && orientation === 'left') return limit >= answer;\n if(operatorObj.value === 'GREATER_OR_EQUALS_THAN' && orientation === 'right') return answer >= limit;\n \n if(operatorObj.value === 'LESS_OR_EQUALS_THAN' && orientation === 'left') return limit <= answer;\n if(operatorObj.value === 'LESS_OR_EQUALS_THAN' && orientation === 'right') return answer <= limit;\n }\n \n return false;\n }\n}","import NumberUtils from './NumberUtils';\nimport StringUtils from './StringUtils';\nimport RangeUtils from './RangeUtils';\n\nexport default {\n evaluateTextInputChoice: (choice, input) => {\n if(!choice) return;\n\n //remove whitespaces\n let trimmedDescription = StringUtils.removeWhiteSpacesWithin(choice.description.trim());\n let trimmedAnswer = StringUtils.removeWhiteSpacesWithin(input.trim());\n //lowercase!\n trimmedDescription = StringUtils.lowercase(trimmedDescription);\n trimmedAnswer = StringUtils.lowercase(trimmedAnswer);\n\n //remove embedded $\n trimmedDescription = StringUtils.removeMathPlaceholder(trimmedDescription);\n if(StringUtils.isDollarInput(trimmedAnswer)){\n if(StringUtils.removeMathPlaceholderForDollarInput(trimmedAnswer) === trimmedDescription){ \n return {isCorrect: true, choiceId: choice._id}; //DONE!\n }\n } else {\n if(StringUtils.startsWithCharacter(trimmedDescription, '$')){\n if(trimmedAnswer === trimmedDescription){ \n return {isCorrect: true, choiceId: choice._id}; //DONE!\n }\n } else if(StringUtils.hasCharacter(trimmedDescription, '$')){\n const noLatexTrimmedAnswer = StringUtils.removeParenthesis(StringUtils.removeMathPlaceholder(trimmedAnswer));\n const noLatexTrimmedDescription = StringUtils.removeParenthesis(StringUtils.removeMathPlaceholder(trimmedDescription));\n if(noLatexTrimmedAnswer === noLatexTrimmedDescription){\n return {isCorrect: true, choiceId: choice._id}; //DONE!\n }\n } else { //choice description may not have latex at all!\n const noLatexTrimmedAnswer = StringUtils.removeParenthesis(StringUtils.removeMathPlaceholder(trimmedAnswer));\n const noLatexTrimmedDescription = StringUtils.removeParenthesis(StringUtils.removeMathPlaceholder(trimmedDescription));\n if(noLatexTrimmedAnswer === noLatexTrimmedDescription){ \n return {isCorrect: true, choiceId: choice._id}; //DONE!\n }\n }\n }\n\n return {isCorrect: false, choiceId: \"\"};\n },\n evaluateNumericInputChoice: (choice, input) => {\n if(!choice) return;\n //remove whitespaces\n let trimmedDescription = StringUtils.removeWhiteSpacesWithin(choice.description.trim());\n let trimmedAnswer = StringUtils.removeWhiteSpacesWithin(input.trim());\n \n //remove any $\n trimmedDescription = StringUtils.removeMathPlaceholder(trimmedDescription);\n trimmedAnswer = StringUtils.removeMathPlaceholder(trimmedAnswer);\n console.log(`evaluateNumericInputChoice() | trimmedDescription: ${trimmedDescription} and trimmedAnswer: ${trimmedAnswer}`);\n \n //check if number is needed\n if(choice.numeric.rounded){\n let descriptionAsNumber = Number(trimmedDescription);\n let answerAsNumber = Number(trimmedAnswer);\n \n //check if answer is really a number (NaN, Infinity, etc)!\n if(NumberUtils.isNumber(descriptionAsNumber) && NumberUtils.isNumber(answerAsNumber)){\n descriptionAsNumber = NumberUtils.roundToDecimalPlaces(descriptionAsNumber, choice.numeric.decimals);\n answerAsNumber = NumberUtils.roundToDecimalPlaces(answerAsNumber, choice.numeric.decimals);\n \n console.log(`evaluateNumericInputChoice() | descriptionAsNumber: ${descriptionAsNumber} and answerAsNumber: ${answerAsNumber}`)\n const isCorrect = answerAsNumber === descriptionAsNumber;\n const choiceId = isCorrect ? choice._id : \"\";\n return {isCorrect: isCorrect, choiceId: choiceId};\n } else {\n console.log(`evaluateNumericInputChoice() | Non-numbers detected descriptionAsNumber: ${typeof descriptionAsNumber} answerAsNumber: ${typeof answerAsNumber}`)\n const isCorrect = answerAsNumber === descriptionAsNumber;\n const choiceId = isCorrect ? choice._id : \"\";\n return {isCorrect: isCorrect, choiceId: choiceId};\n }\n }\n\n return {isCorrect: false, choiceId: \"\"};\n },\n evaluateRangeInputChoice: (choice, input) => {\n if(!choice) return;\n let trimmedLeftLimit = StringUtils.removeWhiteSpacesWithin(choice.range.leftLimit.trim());\n let trimmedRightLimit = StringUtils.removeWhiteSpacesWithin(choice.range.rightLimit.trim());\n let trimmedAnswer = StringUtils.removeWhiteSpacesWithin(input.trim());\n\n //remove any $\n trimmedLeftLimit = StringUtils.removeMathPlaceholder(trimmedLeftLimit);\n trimmedRightLimit = StringUtils.removeMathPlaceholder(trimmedRightLimit);\n trimmedAnswer = StringUtils.removeMathPlaceholder(trimmedAnswer);\n\n console.log(`evaluateRangeInputChoice() | trimmedLeftLimit: ${trimmedLeftLimit} trimmedRightLimit: ${trimmedRightLimit} and trimmedAnswer: ${trimmedAnswer}`);\n\n let leftOperator = choice.range.leftOperator;\n let rightOperator = choice.range.rightOperator;\n\n let leftLimitAsNumber = Number(trimmedLeftLimit);\n let rightLimitAsNumber = Number(trimmedRightLimit);\n let answerAsNumber = Number(trimmedAnswer);\n\n //check if answer is really a number (NaN, Infinity, etc)!\n if(NumberUtils.isNumber(leftLimitAsNumber) && NumberUtils.isNumber(rightLimitAsNumber) && NumberUtils.isNumber(answerAsNumber)){\n const leftValidationMember = RangeUtils.buildRangeValidationStatement('left', leftLimitAsNumber, leftOperator ,answerAsNumber);\n const rightValidationMember = RangeUtils.buildRangeValidationStatement('right', rightLimitAsNumber, rightOperator ,answerAsNumber);\n const isCorrect = leftValidationMember && rightValidationMember;\n const choiceId = isCorrect ? choice._id : \"\";\n return {isCorrect: isCorrect, choiceId: choiceId};\n }\n\n \n return {isCorrect: false, choiceId: \"\"};\n }\n}","import MathInputUtils from \"./MathInputUtils\";\nimport StringUtils from \"./StringUtils\";\nimport CompileService from \"./../services/CompileService\";\n\nexport default {\n\n checkPlainTextAnswer: (question, originalChoiceId, input) => {\n if(!question) return null;\n let isCorrect = false;\n let choiceId = originalChoiceId;\n\n for (const ch of question.choices) {\n const trimmedDescription = StringUtils.removeWhiteSpacesWithin(ch.description.trim());\n const trimmedAnswer = StringUtils.removeWhiteSpacesWithin(input.trim());\n\n const isNumber = StringUtils.isNumber(trimmedAnswer);\n \n if(isNumber){\n const trimmedAnswerAsNumber = StringUtils.toNumber(trimmedAnswer);\n const trimmedDescriptionAsNumber = StringUtils.toNumber(trimmedDescription);\n if(trimmedAnswerAsNumber === trimmedDescriptionAsNumber){\n isCorrect = true;\n choiceId = ch._id;\n break;\n }\n } else {\n //disregard letter case!\n if(StringUtils.lowercase(trimmedAnswer) === StringUtils.lowercase(trimmedDescription)){ \n isCorrect = true;\n choiceId = ch._id;\n break;\n }\n }\n }\n \n return {isCorrect: isCorrect, choiceId: choiceId};\n },\n\n checkMathTextAnswer: (question, originalChoiceId, input) => {\n if(!question) return null;\n let check = {isCorrect: false, choiceId: originalChoiceId};\n \n for (const choice of question.choices) {\n if(choice.type === 'TEXT_INPUT' || choice.type === 'SELECTION') {\n check = MathInputUtils.evaluateTextInputChoice(choice, input);\n }\n if(choice.type === 'NUMERIC_INPUT') {\n check = MathInputUtils.evaluateNumericInputChoice(choice, input);\n }\n if(choice.type === 'RANGE_INPUT') {\n check = MathInputUtils.evaluateRangeInputChoice(choice, input);\n }\n\n //if check is correct, then do not continue checking!\n if(check.isCorrect) break; \n }\n \n return check;\n },\n\n checkMultipleChoiceAnswers: (question, originalChoiceId, choiceIds) => {\n if(!question) return null;\n let isCorrect = false;\n let choiceId = originalChoiceId;\n \n //get correct choices!\n const correctChoices = question.choices.filter(qc => qc.isCorrect);\n if(correctChoices && correctChoices.length > 0){\n correctChoices.forEach(cc => {\n if (choiceIds.includes(cc._id)) {\n isCorrect = cc.isCorrect;\n choiceId = cc._id;\n }\n });\n }\n\n return {isCorrect: isCorrect, choiceId: choiceId};\n },\n\n checkCodeInput: async(question, originalChoiceId, input) => {\n let check = {isCorrect: false, choiceId: originalChoiceId};\n if(!question || !input || input === '') return check;\n\n check = await CompileService.compileQuestion(question._id, {source: input, lang: 'python'});\n if(!check) {return {isCorrect: false, choiceId: originalChoiceId};}\n return {isCorrect: check.isCorrect, choiceId: check.choiceId};\n }\n}","export default {\n timeout: async (delay) => {\n //return new Promise( res => setTimeout(res, delay))\n const timeout = (ms) => new Promise((resolve, reject) => setTimeout(()=>{\n resolve();\n }, ms));\n return await timeout(delay);\n },\n delay: (time) => {\n return new Promise(resolve => setTimeout(resolve, time));\n }\n}","import React, {useState, useEffect} from 'react';\nimport {Button} from 'react-bootstrap';\nimport QuizSuccessModal from \"../../../widgets/modals/QuizSuccessModal\";\nimport QuizSuccessTokenModal from \"../../../widgets/modals/QuizSuccessTokenModal\";\nimport QuizTryAgainModal from \"../../../widgets/modals/QuizTryAgainModal\";\nimport QuizHintModal from \"../../../widgets/modals/QuizHintModal\";\nimport ExplanationModal from \"../../../widgets/modals/ExplanationModal\";\nimport SubmitWaitModal from \"../../../widgets/modals/SubmitWaitModal\";\nimport Header from \"../../../widgets/header/Header\";\nimport QuizPager from \"../../../widgets/pagination/QuizPager\";\nimport Config from \"./../../../../config/Config\";\nimport AssessmentQuestion from \"./../../../widgets/assessments/AssessmentQuestion\";\nimport AssessmentService from \"./../../../../services/AssessmentService\";\nimport QuestionService from \"./../../../../services/QuestionService\";\nimport AttemptService from \"./../../../../services/AttemptService\";\nimport AssessmentUtils from \"./../../../../utils/AssessmentUtils\";\nimport StudentAnswersUtils from '../../../../utils/StudentAnswersUtils';\nimport RandomUtils from \"./../../../../utils/RandomUtils\";\nimport DelayUtils from \"./../../../../utils/DelayUtils\";\nimport Attempt from \"./../../../../payloads/Attempt\";\nimport './quizview.css';\n\nconst QuizView = (props) => {\n\n const { quizId, classId, unit, lecture, autoplay=false, source, token } = props;\n\n //state\n const [quiz, setQuiz] = useState(null);\n const [questions, setQuestions] = useState(null);\n const [questionAttempts, setQuestionAttempts] = useState(null);\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);\n const [currentQuestion, setCurrentQuestion] = useState('');\n const [startTime, setStartTime] = useState(0);\n const [score, setScore] = useState(0);\n const [rating, setRating] = useState(0);\n const [retryQuestion, setRetryQuestion] = useState(false);\n\n //steps\n const [currentStepQuestion, setCurrentStepQuestion] = useState(null);\n const [showStepHintModal, setShowStepHintModal] = useState(false);\n const [showStepExplanationModal, setShowStepExplanationModal] = useState(false);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n\n //modal flags\n const [showSuccessModal, setShowSuccessModal] = useState(false);\n const [showTryAgainModal, setShowTryAgainModal] = useState(false);\n const [showHintModal, setShowHintModal] = useState(false);\n const [showExplanationModal, setShowExplanationModal] = useState(false);\n const [showSubmitWaitModal, setShowSubmitWaitModal] = useState(false);\n const [showLandingPage, setShowLandingPage] = useState(true);\n const [timeCounterBegin, setTimeCounterBegin] = useState(null);\n const [timeCounterEnd, setTimeCounterEnd] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [showSuccessWithTokenModal, setShowSuccessWithTokenModal] = useState(false);\n const [quizMessage, setQuizMessage] = useState(\"\");\n\n useEffect(() => {\n reset();\n \n const fetchQuiz = async () => {\n try {\n let _quiz;\n \n if (props.token) {\n _quiz = await AssessmentService.getQuizAnonymous(props.token);\n } else {\n _quiz = await AssessmentService.getRemote(quizId);\n }\n\n if (!_quiz) {\n throw new Error(\"Error loading quiz\");\n }\n \n document.title = `LimeSpring Portal - ${_quiz.title}`;\n setQuiz(_quiz);\n \n if (!questions) {\n const _questions = _quiz.questions || [];\n \n if (_quiz.scrambleChoices) {\n _questions.forEach(q => {\n if (q.subtype === \"MULTIPLE_CHOICE\") {\n q.choices = RandomUtils.scramble(q.choices);\n }\n });\n }\n \n setQuestions(_questions);\n setCurrentQuestion(_questions[0]);\n setQuestionAttempts(QuestionService.getAsAttempts(_questions));\n setStartTime(Date.now());\n }\n \n setTimeCounterBegin(Date.now());\n } catch (error) {\n console.error(\"Error loading quiz:\", error);\n setError(\"Error loading quiz\");\n } finally {\n setLoading(false);\n }\n };\n \n fetchQuiz();\n }, [quizId, token]);\n \n \n \n const reset = () => {\n resetFlags();\n }\n\n const resetFlags = () => {\n setShowSuccessModal(false);\n setShowTryAgainModal(false);\n setShowHintModal(false);\n setShowExplanationModal(false);\n setCurrentQuestionIndex(0);\n setStartTime(0);\n setScore(0);\n setRetryQuestion(false);\n setTimeCounterBegin(null);\n setTimeCounterEnd(null);\n setShowLandingPage(true);\n setShowStepHintModal(false);\n setShowStepExplanationModal(false);\n setCurrentStepQuestion(null);\n setCurrentStepIndex(0);\n setShowSubmitWaitModal(false);\n }\n\n const processStepAnswer = (question, answer) => {\n if(!answer) { return; }\n const checkedAnswer = checkAnswer(question, answer.selectedChoiceIds, answer.inputChoice);\n\n //finally, look for attempts and update!\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === question._id);\n if(attempt) { \n attempt.status = checkedAnswer.correct ? 'CORRECT': 'INCORRECT';\n attempt.timestamp = answer.timestamp;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n attempt.selectedChoiceIds = checkedAnswer.choiceId && checkedAnswer.choiceId !== '' ? [checkedAnswer.choiceId] : [];\n attempt.inputChoice = answer.inputChoice;\n attempt.viewHint = answer.viewHint;\n attempt.viewExplanation = answer.viewExplanation;\n }\n\n if(attempt.numberOfAttempts === 1) { \n if(attempt.status === 'INCORRECT') {\n \n setCurrentStepIndex(currentStepIndex);\n setRetryQuestion(true); \n } else {\n setCurrentStepIndex(currentStepIndex + 1);\n setRetryQuestion(false);\n }\n } else {\n setCurrentStepIndex(currentStepIndex + 1);\n setRetryQuestion(false); \n }\n setQuestionAttempts(_questionAttempts);\n }\n\n const markAnswerAsCorrected = (questionId) => {\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === questionId);\n if(attempt){\n attempt.status = 'CORRECT';\n attempt.claimedAsCorrect = true;\n }\n setQuestionAttempts(_questionAttempts);\n }\n\n const processAnswer = (question, answer) => {\n if(!answer) { return; }\n const checkedAnswer = checkAnswer(question, answer.selectedChoiceIds, answer.inputChoice);\n\n //finally, look for attempts and update!\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === question._id);\n if(attempt) { \n attempt.status = checkedAnswer.correct ? 'CORRECT': 'INCORRECT';\n attempt.timestamp = answer.timestamp;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n attempt.selectedChoiceIds = checkedAnswer.choiceId && checkedAnswer.choiceId !== '' ? [checkedAnswer.choiceId] : [];\n attempt.inputChoice = answer.inputChoice;\n attempt.viewHint = answer.viewHint;\n attempt.viewExplanation = answer.viewExplanation;\n attempt.claimedAsCorrect = false;\n }\n\n let nextIndex = currentQuestionIndex + 1;\n setRetryQuestion(false);\n \n //try again logic\n if(attempt.status === 'INCORRECT' && !attempt.viewExplanation){\n nextIndex = currentQuestionIndex;\n if(attempt.numberOfAttempts === 1) { setRetryQuestion(true); }\n if(attempt.numberOfAttempts === 2) { setShowExplanationModal(true); }\n }\n\n //disregard steps!\n const parent_questions = questions.filter(q => q.type === 'QUESTION');\n\n if(nextIndex === parent_questions.length){\n //quiz is finished!\n setQuestionAttempts(_questionAttempts);\n setTimeout(() => submitQuizToServer(), 500);\n } else {\n setCurrentQuestionIndex(nextIndex);\n setCurrentQuestion(parent_questions[nextIndex]);\n setQuestionAttempts(_questionAttempts);\n }\n }\n\n const submitQuizToServer = async () => {\n if (token) {\n return submitQuizWithToken();\n }\n setShowSubmitWaitModal(true);\n let quizAttempt = new Attempt(quiz._id, classId,unit ? unit._id : \"\", lecture ? lecture._id : \"\");\n const answerAttempts = AssessmentUtils.convertAttemptsToAnswers(questionAttempts);\n quizAttempt.setAnswers(answerAttempts);\n quizAttempt.setTimeSpent(Date.now() - startTime);\n if(timeCounterBegin && timeCounterEnd) quizAttempt.setTimeTrigger(timeCounterEnd - timeCounterBegin);\n const result = await AttemptService.submit(quizAttempt,\"SUBMIT\");\n setShowSubmitWaitModal(false);\n\n if(!result) {return; }\n //update scores!\n setRating((result.grade * 5) / 100);\n setScore(result.grade);\n\n if(result.grade >= Config.minimumScore) {\n setShowSuccessModal(true);\n } else {\n setShowTryAgainModal(true);\n }\n }\n\n const submitQuizWithToken = async () => {\n setShowSubmitWaitModal(true);\n let quizAttempt = new Attempt(quiz._id, classId,unit ? unit._id : \"\", lecture ? lecture._id : \"\");\n const answerAttempts = AssessmentUtils.convertAttemptsToAnswers(questionAttempts);\n quizAttempt.setAnswers(answerAttempts);\n quizAttempt.setTimeSpent(Date.now() - startTime);\n if(timeCounterBegin && timeCounterEnd) quizAttempt.setTimeTrigger(timeCounterEnd - timeCounterBegin);\n \n \n try {\n const result = await AttemptService.submitWithToken(quizAttempt, \"SUBMIT\", token);\n setShowSubmitWaitModal(false);\n setRating((result.gradeReport.grade * 5) / 100);\n setScore(result.gradeReport.grade);\n setQuizMessage(result.message || \"Your quiz attempt has been recorded.\"); \n setShowSuccessWithTokenModal(true); \n\n if (!result) {\n return;\n }\n\n } catch (error) {\n console.error(\"Error submitting quiz with token:\", error);\n setShowSubmitWaitModal(false);\n }\n};\n\n const goToNextQuestion = () => {\n setShowExplanationModal(false);\n //if last question then submit\n if(isLastQuestion()){\n submitQuizToServer();\n }else{\n DelayUtils.delay(500).then(() => {\n const nextIndex = currentQuestionIndex + 1;\n setCurrentQuestionIndex(nextIndex);\n setCurrentQuestion(questions[nextIndex]);\n setQuestionAttempts([...questionAttempts]);\n setCurrentStepIndex(0);\n });\n }\n }\n\n const goToNextStep = () => {\n setShowStepExplanationModal(false);\n setCurrentStepIndex(currentStepIndex + 1);\n }\n\n const checkAnswer = (question, choiceIds, inputChoice) => {\n let choiceId = choiceIds[0];\n let check = {isCorrect: false, choiceId: choiceId};\n\n if(question.subtype === 'INPUT_CHOICE'){\n\n if(question.context === 'PLAIN_TEXT'){\n check = StudentAnswersUtils.checkPlainTextAnswer(question, choiceId, inputChoice);\n }\n\n if(question.context === 'MATH_TEXT'){\n check = StudentAnswersUtils.checkMathTextAnswer(question, choiceId, inputChoice);\n }\n }\n\n if(question.subtype === 'MULTIPLE_CHOICE'){\n check = StudentAnswersUtils.checkMultipleChoiceAnswers(question, choiceId, choiceIds);\n }\n \n return {correct: check.isCorrect, choiceId: check.choiceId};\n };\n\n const onExplanationViewed = (q, answer) => {\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === q._id);\n if(attempt) { \n attempt.status = answer.status;\n attempt.timestamp = answer.timestamp;\n attempt.selectedChoiceIds = answer.selectedChoiceIds;\n attempt.inputChoice = answer.inputChoice;\n attempt.viewExplanation = answer.viewExplanation;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n }\n setQuestionAttempts(_questionAttempts);\n setShowExplanationModal(true);\n }\n\n const onStepExplanationViewed = (q, answer) => {\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === q._id);\n if(attempt) { \n attempt.status = answer.status;\n attempt.timestamp = answer.timestamp;\n attempt.selectedChoiceIds = answer.selectedChoiceIds;\n attempt.inputChoice = answer.inputChoice;\n attempt.viewExplanation = answer.viewExplanation;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n }\n setQuestionAttempts(_questionAttempts);\n setCurrentStepQuestion(q);\n setShowStepExplanationModal(true);\n }\n\n const onStepHintViewed = (q) => {\n setCurrentStepQuestion(q);\n setShowStepHintModal(true);\n } \n\n const checkStepsAndShowNextQuestion = () => {\n\n //check steps:\n // if all correct = green\n // if all incorrect = red\n // if mixed = blue \n const _steps = currentQuestion.steps;\n let _questionAttempts = [...questionAttempts];\n const stepAttempts = _questionAttempts.filter(a => _steps.includes(a._id));\n if(stepAttempts && _steps && stepAttempts.length > 0 && stepAttempts.length === _steps.length){\n let parentQuestionStatus = 'PARTIAL';\n let allStepsStatus = stepAttempts.map(sa => sa.status);\n const correctOnes = allStepsStatus.filter(s => s === 'CORRECT'); \n const incorrectOnes = allStepsStatus.filter(s => s === 'INCORRECT');\n \n if(correctOnes.length === stepAttempts.length) parentQuestionStatus = 'CORRECT'; \n if(incorrectOnes.length === stepAttempts.length) parentQuestionStatus = 'INCORRECT';\n\n //find parent and update status!\n const parentQuestionAttempt = _questionAttempts.find(a => a._id === currentQuestion._id);\n if(parentQuestionAttempt) parentQuestionAttempt.status = parentQuestionStatus;\n setQuestionAttempts(_questionAttempts);\n }\n\n if(isLastQuestion()){\n submitQuizToServer();\n }else{\n const nextIndex = currentQuestionIndex + 1;\n setCurrentQuestionIndex(nextIndex);\n setCurrentQuestion(questions[nextIndex]);\n setQuestionAttempts(_questionAttempts);\n setCurrentStepIndex(0);\n }\n }\n\n const showQuestion = () => {\n if(!questions || questions.length === 0 || currentQuestion === '') { return <>}\n\n const question = questions.find(q => q._id === currentQuestion._id);\n if(!question) { return <>No question found}\n\n const index = questions.findIndex(q => q._id === question._id);\n\n return processAnswer(q, ans)}\n onHint={ () => setShowHintModal(true)}\n onExplanation={(q, ans) => onExplanationViewed(q, ans)}\n stepIndex={currentStepIndex}\n onStepHint={(q) => onStepHintViewed(q)}\n onStepExplanation={(q, ans) => onStepExplanationViewed(q, ans)}\n onStepAnswerSubmit={(q, ans) => processStepAnswer(q, ans)}\n onStepsFinished={() => checkStepsAndShowNextQuestion()} \n token={token}/>\n }\n\n const resetCurrentQuestion = (q) => {\n if(!q) return;\n const question = questions.find(qst => qst._id === q._id);\n if(question) setCurrentQuestion(question);\n }\n\n const isLastQuestion = () => {\n if(!questions || questions.length === 0) { return false; }\n //if steps, we should disregard them\n const all_questions = questions.filter(q => !q.step);\n return currentQuestionIndex === all_questions.length - 1;\n }\n\n const removeStepAttempts = (qa) => {\n if(!qa || qa.length === 0) return [];\n return qa.filter(q => q.step === false);\n }\n\n const renderQuizLandingPage = () => {\n\n let totalQuestions = 0;\n if(quiz && quiz.questions) {\n const real_questions = quiz.questions.filter(q => !q.step || q.step === false);\n totalQuestions = real_questions ? real_questions.length : 0;\n }\n\n return (
    \n {quiz ? quiz.title + ' Quiz': 'Quiz'}\n {\n
    \n Total Questions: {totalQuestions}\n Duration: {quiz && quiz.timeBased ? quiz.durationInMinutes + ' mins': 'Unlimited'}\n \n
    \n }\n
    );\n }\n\n const renderQuiz = () => {\n return (
    \n
    \n resetCurrentQuestion(q)}\n />\n
    \n
    \n {showQuestion()}\n
    \n
    );\n }\n\n if (loading) {\n return (\n
    \n

    Loading quiz...

    \n
    \n );\n }\n\n if (error) {\n return (\n
    \n

    Error loading quiz

    \n

    {error}

    \n

    Please check the link or try again later.

    \n
    \n );\n } else {\n\n return (\n
    \n {!token &&
    }\n \n {showSuccessWithTokenModal ? (\n \n setShowSuccessWithTokenModal(false)}\n />\n ) : (\n \n showLandingPage ? renderQuizLandingPage() : renderQuiz()\n )}\n setShowSuccessModal(false)}/>\n setShowTryAgainModal(false)}/>\n setShowHintModal(false)}/>\n goToNextQuestion()} show={showExplanationModal} onCorrected={() => markAnswerAsCorrected(currentQuestion ? currentQuestion._id : '')}/>\n goToNextStep()} show={showStepExplanationModal}/>\n setShowStepHintModal(false)} show={showStepHintModal}/>\n setShowSubmitWaitModal(false)} />\n
    \n );\n }\n}\n \nexport default QuizView;","import React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport medalImage from \"./../../../images/workbook.png\";\nimport \"./workbookcompletedmodal.css\";\n\nconst WorkbookCompletedModal = props => {\n const { score } = props;\n const history = useHistory();\n return (\n \n \n \n

    Congratulations,

    \n

    \n you’ve completed the workbook!\n

    \n
    \n
    \n \n \n

    {score}%

    \n
    \n \n {\n history.go();\n }}\n >\n Retake Workbook\n \n\n {\n history.goBack();\n }}\n >\n Back to unit\n \n \n \n );\n};\n\nexport default WorkbookCompletedModal;\n","export default \"data:image/png;base64,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\"","import React, {useState, useEffect} from 'react';\nimport {Button } from \"react-bootstrap\";\nimport { useToasts } from 'react-toast-notifications';\nimport QuizHintModal from \"../../../widgets/modals/QuizHintModal\";\nimport ExplanationModal from \"../../../widgets/modals/ExplanationModal\";\nimport WorkbookCompletedModal from \"./../../../widgets/modals/WorkbookCompletedModal\";\nimport Header from \"../../../widgets/header/Header\";\nimport AssessmentPager from \"../../../widgets/pagination/AssessmentPager\";\nimport AssessmentQuestion from \"./../../../widgets/assessments/AssessmentQuestion\";\nimport AssessmentService from \"./../../../../services/AssessmentService\";\nimport QuestionService from \"./../../../../services/QuestionService\";\nimport AttemptService from \"./../../../../services/AttemptService\";\nimport AssessmentUtils from \"./../../../../utils/AssessmentUtils\";\nimport StudentAnswersUtils from '../../../../utils/StudentAnswersUtils';\nimport RandomUtils from \"./../../../../utils/RandomUtils\";\nimport Attempt from \"./../../../../payloads/Attempt\";\nimport DeepLinking from \"./../../../../utils/DeepLinking\";\nimport {useHistory} from \"react-router-dom\";\nimport ButtonGroup from 'react-bootstrap/ButtonGroup';\nimport ToggleButton from 'react-bootstrap/ToggleButton';\nimport './quizview.css';\n\nconst WorkbookView = (props) => {\n\n const { workbookId, classId, unitId, hasNext=false, nextWorkbookId=workbookId, workbooks=[]} = props;\n\n const { addToast } = useToasts();\n const history = useHistory();\n\n //state\n const [workbook, setWorkbook] = useState(null);\n const [questions, setQuestions] = useState(null);\n const [questionAttempts, setQuestionAttempts] = useState(null);\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);\n const [currentQuestion, setCurrentQuestion] = useState('');\n const [score, setScore] = useState(0);\n const [retryQuestion, setRetryQuestion] = useState(false);\n const [workbookPreviouslyTaken, setWorkbookPreviouslyTaken] = useState(false);\n const [enablePagerClick, setEnablePagerClick] = useState(true);\n const [showToast, setShowToast] = useState(false);\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n\n //modal flags\n const [showCompleteModal, setShowCompleteModal] = useState(false);\n const [showHintModal, setShowHintModal] = useState(false);\n const [showExplanationModal, setShowExplanationModal] = useState(false);\n const [parentQuestionId, setParentQuestionId] = useState(\"\");\n const [showStepHintModal, setShowStepHintModal] = useState(false);\n const [showStepExplanationModal, setShowStepExplanationModal] = useState(false);\n const [currentStepQuestion, setCurrentStepQuestion] = useState(null);\n\n useEffect(() => {\n //reset workbook state\n reset();\n\n const getWorkbookFromServer = async (id) => { \n const _workbook = await AssessmentService.getRemote(id)\n document.title = `LimeSpring Portal - ${_workbook.title}`;\n setWorkbook(_workbook);\n if(!questions){\n const _questions = _workbook.questions;\n if(_workbook.scrambleChoices){\n _questions.forEach(q => {\n if(q.subtype === 'MULTIPLE_CHOICE'){\n const scrambledChoices = RandomUtils.scramble(q.choices);\n q.choices = scrambledChoices;\n }\n });\n }\n //for assessments, always start with the first question!\n let _questionAttempts = QuestionService.getAsAttempts(_questions);\n // const attemptLog = await AttemptService.getForAssessment(id);\n const attemptLog = await AttemptService.getForAssessmentBestAttempt(id);\n\n if(attemptLog && attemptLog.questions && attemptLog.questions.length > 0){\n setScore(attemptLog.grade);\n _questionAttempts.forEach(qa => {\n const existingQuestionAttemptLog = attemptLog.questions.find(alq => alq._id === qa._id);\n \n \n //if question has been answered (right or wrong!)\n //NOTE: if there is no log attempt for question, it's probably a set question (alternate)!\n if(existingQuestionAttemptLog){\n if((existingQuestionAttemptLog.selectedChoiceIds && existingQuestionAttemptLog.selectedChoiceIds.length > 0) || existingQuestionAttemptLog.textAnswer !== \"\"){\n qa.selectedChoiceIds = existingQuestionAttemptLog.selectedChoiceIds;\n qa.inputChoice = existingQuestionAttemptLog.textAnswer;\n qa.numberOfAttempts = 1;\n if(existingQuestionAttemptLog.isCorrect){\n qa.status = \"CORRECT\";\n }else {\n qa.status = \"INCORRECT\";\n }\n }\n }\n \n });\n }\n\n //check if workbook has been previously taken, if so, don't show complete modal!\n if(attemptLog && attemptLog.grade && attemptLog.grade !== 0){\n setWorkbookPreviouslyTaken(true);\n }\n\n setQuestionAttempts(_questionAttempts);\n setQuestions(_questions);\n setCurrentQuestion(_questions[0]); \n if (_questions && _questions.length > 0 \n && _questions[0].context === \"STEP_OPTIONS\" \n && _questions[0].subtype === \"STEPS\" \n && _questions[0]._id) {\n setParentQuestionId(_questions[0]._id);\n }\n \n }\n }\n\n getWorkbookFromServer(workbookId);\n\n }, [workbookId]);\n\n const reset = () => {\n resetFlags();\n }\n\n const goToNextWorkbook = () => {\n history.push({pathname: DeepLinking.STUDENT.WORKBOOK_VIEW.replace(\":id\", nextWorkbookId), state: {classId: classId, unitId: unitId, nextWorkbookId: workbookId}});\n history.go();\n }\n\n const manageChangeWorkbook = (current) => {\n history.push({pathname: DeepLinking.STUDENT.WORKBOOK_VIEW.replace(\":id\", current), state: {classId: classId, unitId: unitId, nextWorkbookId: workbookId, workbooks: workbooks}});\n history.go();\n }\n\n const onStepHintViewed = (q) => {\n setCurrentStepQuestion(q);\n setShowStepHintModal(true);\n } \n\n const onStepExplanationViewed = (q, answer) => {\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === q._id);\n if(attempt) { \n attempt.status = answer.status;\n attempt.timestamp = answer.timestamp;\n attempt.selectedChoiceIds = answer.selectedChoiceIds;\n attempt.inputChoice = answer.inputChoice;\n attempt.viewExplanation = answer.viewExplanation;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n }\n setQuestionAttempts(_questionAttempts);\n setCurrentStepQuestion(q);\n setShowStepExplanationModal(true);\n }\n\n const resetFlags = () => {\n setShowHintModal(false);\n setShowExplanationModal(false);\n setCurrentQuestionIndex(0);\n setScore(0);\n setCurrentStepIndex(0);\n setRetryQuestion(false);\n setShowStepHintModal(false);\n setCurrentStepQuestion(null);\n setShowStepExplanationModal(false);\n }\n\n const markAnswerAsCorrected = (questionId) => {\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === questionId);\n if(attempt){\n attempt.status = 'CORRECT';\n attempt.claimedAsCorrect = true;\n }\n setQuestionAttempts(_questionAttempts);\n }\n\n const processAnswer = async (question, answer) => {\n if(!answer) { return; }\n const checkedAnswer = await checkAnswer(question, answer.selectedChoiceIds, answer.inputChoice);\n \n //finally, look for attempts and update!\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === question._id);\n if(attempt) { \n attempt.status = checkedAnswer.correct ? 'CORRECT': 'INCORRECT';\n attempt.timestamp = answer.timestamp;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n attempt.selectedChoiceIds = checkedAnswer.choiceId && checkedAnswer.choiceId !== '' ? [checkedAnswer.choiceId] : [];\n attempt.inputChoice = answer.inputChoice;\n attempt.viewHint = answer.viewHint;\n attempt.viewExplanation = answer.viewExplanation;\n attempt.claimedAsCorrect = false;\n }\n\n let nextIndex = currentQuestionIndex + 1;\n setRetryQuestion(false);\n setEnablePagerClick(true);\n \n //try again logic\n let retry = false;\n if(attempt.status === 'INCORRECT' && !attempt.viewExplanation){\n nextIndex = currentQuestionIndex;\n if(attempt.numberOfAttempts === 1) { \n retry = true;\n setRetryQuestion(true); \n setEnablePagerClick(false);\n }\n if(attempt.numberOfAttempts === 2) { setShowExplanationModal(true); }\n }\n\n //show toast! - UPDATE: DO NOT SHOW\n /*\n if(checkIfWorkbookIsReady() && checkIfWorkbookHasIncorrectAnswers() && !retry){\n if(!showToast){\n addToast('Please fix incorrect questions to complete workbook!', {appearance: 'warning', autoDismiss: false});\n setShowToast(true);\n }\n }\n */\n\n //check if all questions have been answered!\n if(checkIfWorkbookIsReady() && !checkIfWorkbookHasIncorrectAnswers() && !workbookPreviouslyTaken) {\n workbookComplete();\n } else {\n if((isLastQuestion() || wasLastPendingQuestion()) && attempt.status !== \"INCORRECT\"){\n //go to first pending or incorrect answer!\n nextIndex = findFirstPendingOrIncorrectQuestionIndex();\n } \n if(question.type === \"QUESTION_STEP\") {\n setParentQuestionId(attempt.parent);\n submitWorkbookToServer();\n if (attempt.status !== 'INCORRECT') {\n goToNextStep(attempt.parent);\n }\n } \n else {\n let _parentQuestionId = parentQuestionId;\n if (_parentQuestionId !==\"\") {\n _parentQuestionId = \"\";\n }\n setParentQuestionId(_parentQuestionId);\n setCurrentQuestionIndex(nextIndex);\n setCurrentQuestion(questions[nextIndex]);\n setQuestionAttempts(_questionAttempts);\n submitWorkbookToServer();\n }\n }\n }\n\n const goToNextStep = (_parentQuestionId) => {\n if (_parentQuestionId===\"\" || !_parentQuestionId) {\n _parentQuestionId = parentQuestionId;\n }\n setShowStepExplanationModal(false);\n let parentStatus = \"ANSWERED\";\n const q = questions.find(question => { return question._id === _parentQuestionId});\n if(q && q.steps && q.steps.length > 0){\n if(currentStepIndex < q.steps.length - 1){\n setCurrentStepIndex(currentStepIndex + 1);\n }else{\n setCurrentStepIndex(0);\n\n //mark parent question as answered with no details\n let _questionAttempts = [...questionAttempts];\n let stepAttempts = _questionAttempts.filter(a => a.parent === _parentQuestionId);\n if (stepAttempts && stepAttempts.length > 0) {\n\n let status = [];\n stepAttempts.forEach(sa => {\n status.push(sa.status);\n });\n // correct\n let correctStatus = status.filter(s => s===\"CORRECT\");\n // incorrect\n let incorrectStatus = status.filter(s => s===\"INCORRECT\");\n if (correctStatus.length === status.length) {\n parentStatus = \"CORRECT\";\n } \n if (incorrectStatus.length === status.length) {\n parentStatus = \"INCORRECT\";\n } \n\n \n }\n let attempt = _questionAttempts.find(qa => qa._id === q._id);\n if(attempt) { attempt.status = parentStatus;}\n setQuestionAttempts(_questionAttempts);\n\n goToNextQuestion();\n }\n }\n \n }\n\n const findFirstPendingOrIncorrectQuestionIndex = () => {\n let index = 0;\n let indexFound = false;\n if(!questionAttempts || questionAttempts.length === 0) return index;\n const onlyQuestionsAttempts = questionAttempts.filter((q) => q.step===false)\n for (let i = 0; i < onlyQuestionsAttempts.length; i++) {\n const qa = onlyQuestionsAttempts[i];\n if(qa.status === \"PENDING\"){\n index = i;\n indexFound = true;\n break;\n }\n }\n\n if(!indexFound){\n for (let i = 0; i < onlyQuestionsAttempts.length; i++) {\n const qa = onlyQuestionsAttempts[i];\n if(qa.status === \"INCORRECT\"){\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n const checkIfWorkbookIsReady = () => {\n if(!questionAttempts || questionAttempts.length === 0) return false;\n const pendingAttempt = questionAttempts.find(qa => qa.status === \"PENDING\");\n if(pendingAttempt) return false;\n return true;\n }\n\n const checkIfWorkbookHasIncorrectAnswers = () => {\n if(!questionAttempts || questionAttempts.length === 0) return false;\n const retryAttempt = questionAttempts.find(qa => qa.status === \"INCORRECT\");\n if(retryAttempt) return true;\n return false;\n }\n\n const workbookComplete = async () => {\n await submitWorkbookToServer();\n if(!workbookPreviouslyTaken && checkIfWorkbookIsReady()){ setShowCompleteModal(true); }\n setShowToast(false);\n }\n\n const submitWorkbookToServer = async () => {\n let workbookAttempt = new Attempt(workbook._id, classId, unitId, '');\n const answerAttempts = AssessmentUtils.convertAttemptsToAnswers(questionAttempts);\n workbookAttempt.setAnswers(answerAttempts);\n const result = await AttemptService.submit(workbookAttempt, \"SUBMIT\");\n if(!result) {return; }\n //update scores!\n setScore(result.grade);\n }\n\n const goToNextQuestion = () => {\n setShowExplanationModal(false);\n //if last question then submit - UPDATE do not check for incorrect answers?\n //if(checkIfWorkbookIsReady() && !checkIfWorkbookHasIncorrectAnswers() && !workbookPreviouslyTaken){\n if(checkIfWorkbookIsReady() && !workbookPreviouslyTaken){ \n workbookComplete();\n }else{\n let nextIndex = currentQuestionIndex + 1;\n\n if(isLastQuestion() || wasLastPendingQuestion()){\n nextIndex = findFirstPendingOrIncorrectQuestionIndex();\n }\n setCurrentQuestionIndex(nextIndex);\n setCurrentQuestion(questions[nextIndex]);\n setQuestionAttempts([...questionAttempts]);\n }\n }\n\n const checkAnswer = async (question, choiceIds, inputChoice) => {\n let choiceId = choiceIds[0];\n let check = {isCorrect: false, choiceId: choiceId};\n\n if(question.subtype === 'INPUT_CHOICE'){\n\n if(question.context === 'PLAIN_TEXT'){\n check = StudentAnswersUtils.checkPlainTextAnswer(question, choiceId, inputChoice);\n }\n\n if(question.context === 'MATH_TEXT'){\n check = StudentAnswersUtils.checkMathTextAnswer(question, choiceId, inputChoice);\n }\n }\n\n if(question.subtype === 'MANUAL_CHOICE'){\n if(question.context === 'CODE_TEXT'){\n check = await StudentAnswersUtils.checkCodeInput(question, choiceId, inputChoice);\n }\n }\n\n if(question.subtype === 'MULTIPLE_CHOICE'){\n check = StudentAnswersUtils.checkMultipleChoiceAnswers(question, choiceId, choiceIds);\n }\n \n return {correct: check.isCorrect, choiceId: check.choiceId};\n };\n\n const onExplanationViewed = (q, answer) => {\n let _questionAttempts = [...questionAttempts];\n let attempt = _questionAttempts.find(qa => qa._id === q._id);\n if(attempt) { \n attempt.status = answer.status;\n attempt.timestamp = answer.timestamp;\n attempt.selectedChoiceIds = answer.selectedChoiceIds;\n attempt.inputChoice = answer.inputChoice;\n attempt.viewExplanation = answer.viewExplanation;\n attempt.numberOfAttempts = answer.numberOfAttempts;\n }\n setQuestionAttempts(_questionAttempts);\n setShowExplanationModal(true);\n }\n\n const showQuestion = () => {\n if(!questions || questions.length === 0 || currentQuestion === '') { return <>}\n const question = questions.find(q => q._id === currentQuestion._id);\n if(!question) { return <>No question found}\n\n const index = questions.findIndex(q => q._id === question._id);\n\n return processAnswer(q, ans)}\n onStepAnswerSubmit={(q, ans) => processAnswer(q, ans)}\n onHint={ () => setShowHintModal(true)}\n onExplanation={(q, ans) => onExplanationViewed(q, ans)}\n onStepHint={(q) => onStepHintViewed(q)}\n onStepExplanation={(q, ans) => onStepExplanationViewed(q, ans)} \n />\n }\n\n const resetCurrentQuestion = (q, i) => {\n if(!q) return;\n const question = questions.find(qst => qst._id === q._id);\n if(question) setCurrentQuestion(question);\n if (question \n && question.context === \"STEP_OPTIONS\" \n && question.subtype === \"STEPS\" \n && question._id) {\n setParentQuestionId(question._id);\n } else {\n setParentQuestionId(\"\");\n }\n setCurrentQuestionIndex(i);\n }\n\n const wasLastPendingQuestion = () => {\n if(!questionAttempts || questionAttempts.length === 0) return false;\n const pendingQuestionAttempt = questionAttempts.find(qa => qa.status === \"PENDING\");\n if(!pendingQuestionAttempt) return true;\n return false;\n }\n\n const isLastQuestion = () => {\n if(!questions || questions.length === 0) { return false; }\n return currentQuestionIndex === questions.length - 1;\n }\n\n const nexWorkbook = () => {\n\n }\n\n const removeStepAttempts = (qa) => {\n if(!qa || qa.length === 0) return [];\n return qa.filter(q => q.step === false);\n }\n\n const handleOnHideExplanationModal = () => {\n if (parentQuestionId === \"\") {\n goToNextQuestion();\n } else {\n setShowExplanationModal(false);\n goToNextStep();\n }\n };\n\n return (\n
    \n
    \n
    {Math.ceil(score)}%
    \n {workbooks && workbooks.length > 1 &&
    \n \n {workbooks.map((currentWorkbook, idx) => (\n manageChangeWorkbook(currentWorkbook._id)}\n >\n Version {idx + 1 }\n \n ))}\n \n
    }\n
    \n
    \n resetCurrentQuestion(q, i)}\n />\n
    \n
    \n {showQuestion()}\n
    \n
    \n setShowCompleteModal(false)} score={score}/>\n setShowHintModal(false)}/>\n markAnswerAsCorrected(currentQuestion ? currentQuestion._id : '')}/>\n setShowStepHintModal(false)} show={showStepHintModal}/>\n \n \n
    \n );\n}\n \nexport default WorkbookView;","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n get: async (id) => {\n try { \n let response = await new ApiService().get(ApiPath.GET_ASSIGNMENT_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return response.data;\n } else {\n return null;\n }\n } catch (error) {\n console.error(`AssignmentService | Error while attempting to get response: ${error}`);\n return null;\n }\n },\n}","import React, {useEffect} from 'react';\nimport ApiPath from \"./../../../../utils/ApiPath\";\nimport Config from \"./../../../../config/Config\";\nimport SessionService from \"./../../../../services/SessionService\";\nimport AssignmentService from '../../../../services/AssignmentService';\nimport axios from 'axios';\n\nconst AssignmentView = (props) => {\n\n const { assignmentId, classId, unitId } = props;\n\n useEffect(() => {\n const load = async() => {\n const res = await AssignmentService.get(assignmentId);\n if(res) window.location.href = res.location;\n }\n load(); \n }, []);\n\n return (\n
    \n Hang tight, We're logging you in!\n
    \n );\n}\n \nexport default AssignmentView;","import React, { useState, useEffect } from \"react\";\nimport {useHistory} from 'react-router-dom';\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./gradebookview.css\";\nimport Header from \"../../../widgets/header/Header\";\nimport ClassService from \"./../../../../services/ClassService\";\nimport InstructorService from \"./../../../../services/InstructorService\";\nimport StudentLogService from \"./../../../../services/StudentLogService\";\nimport CacheService from \"./../../../../services/CacheService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport LSBreadcrumb from \"./../../../widgets/breadcrumb/LSBreadcrumb\";\nimport ClassList from \"../../../widgets/class-list/ClassList\";\nimport SidebarMenu from \"./../../../widgets/sidebar/SidebarMenu\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\n\nconst GradebookView = props => {\n\n const { classId, unitId } = props;\n\n const history = useHistory();\n\n const [clazz, setClazz] = useState(null);\n const [classlog, setClasslog] = useState(null);\n const [isStudent, setIsStudent] = useState(true);\n const [renderClass, setRenderClass] = useState(true);\n\n useEffect(() => {\n document.title = 'LimeSpring Portal - Grades';\n\n const load = async () => {\n const user = ProfileService.get();\n setIsStudent(user.role === \"Student\");\n await CacheService.reloadData('gradebookView', '0');\n if (!clazz) {\n setClazz(ClassService.get(classId));\n setClasslog(StudentLogService.getLogForClass(classId));\n }\n }\n load();\n }, [classId]);\n\n const getClassInstructors = () => {\n if (clazz) {\n const instructors = InstructorService.getByIds(clazz.instructors);\n return InstructorService.getInstructorNames(instructors);\n } else {\n return \"\";\n }\n };\n\n const getInstructorsEmails = () => {\n if (clazz) {\n const instructors = InstructorService.getByIds(clazz.instructors);\n return InstructorService.getInstructorEmails(instructors);\n } else {\n return \"\";\n }\n }\n\n const loadPage = target => {\n if (target === \"dashboard\") {\n history.push(`/dashboard`);\n } else if (target === \"account\") {\n history.push(`/settings`);\n }\n };\n\n return (\n
    \n \n\n
    \n
    \n loadPage(target)}\n />\n
    \n
    \n \n {renderClass ? (\n \n ) : (\n \"No Grades to show\"\n )}\n \n
    \n
    \n
    \n );\n};\n\nexport default GradebookView;\n","export default __webpack_public_path__ + \"static/media/inprogress.cb99bbc4.svg\";","import React, { useState, useEffect } from \"react\";\nimport {useHistory} from 'react-router-dom';\nimport {ProgressBar} from 'react-bootstrap';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider from \"react-bootstrap-table2-toolkit\";\nimport \"./gradebookview.css\";\nimport Header from \"../../../widgets/header/Header\";\nimport ClassService from \"../../../../services/ClassService\";\nimport CourseService from \"../../../../services/CourseService\";\nimport CacheService from \"../../../../services/CacheService\";\nimport ProfileService from \"../../../../services/ProfileService\";\nimport StudentLogService from \"../../../../services/StudentLogService\";\nimport AssessmentService from \"../../../../services/AssessmentService\";\nimport UnitService from \"../../../../services/UnitService\";\nimport DeepLinking from \"../../../../utils/DeepLinking\";\nimport SidebarMenu from \"../../../widgets/sidebar/SidebarMenu\";\nimport LSBreadcrumb from \"./../../../widgets/breadcrumb/LSBreadcrumb\";\nimport GoldMedal from \"../../../../images/medal-gold.png\";\nimport SilverMedal from \"../../../../images/medal-silver.png\";\nimport BronzeMedal from \"../../../../images/medal-bronze.png\";\nimport PendingIcon from \"../../../../images/inprogress.svg\";\nimport PendingMedal from \"../../../../images/medal-pending.svg\";\n\nconst GradebookUnitsView = props => {\n\n const { classId } = props;\n\n const history = useHistory();\n\n const [clazz, setClazz] = useState(null);\n const [isStudent, setIsStudent] = useState(true);\n\n useEffect(() => {\n document.title = 'LimeSpring Portal - Gradebook';\n const user = ProfileService.get();\n setIsStudent(user.role === \"Student\");\n\n const load = async () => {\n await CacheService.reloadData('gradebookUnitView', classId)\n if (!clazz) {\n setClazz(ClassService.get(classId));\n }\n }\n \n load();\n\n }, [classId]);\n\n const showUnit = (unitId) => {\n history.push(DeepLinking.STUDENT.GRADEBOOK_UNITS_TABLE_VIEW_PATH.replace(':id', classId) + \"?unitId=\" + unitId);\n };\n\n const loadPage = target => {\n if (target === \"dashboard\") {\n history.push(`/dashboard`);\n } else if (target === \"account\") {\n history.push(`/settings`);\n }\n };\n\n const getUnitsforThisClass = () => {\n if (!clazz) return \"\";\n\n let _units = [];\n\n let courses = CourseService.getByIds(clazz.courses);\n if (courses && courses.length > 0) {\n courses.forEach(course => {\n if (course.units && course.units.length > 0) {\n _units = _units.concat(course.units);\n }\n });\n }\n\n const addMedal = (starsEarned) =>{\n if(starsEarned >= 90){return GoldMedal};\n if (starsEarned < 90 && starsEarned >= 80){return SilverMedal};\n if(starsEarned === 0) { return PendingMedal};\n return BronzeMedal;\n }\n\n const bestScore = (assessments)=>{\n if(assessments && assessments.length > 0){\n const exam = assessments.find(a =>{\n return a.type === \"BOOKEXAM\"\n });\n if(exam){\n const examLogs = StudentLogService.getLogForAssessments([exam._id]);\n\n if(examLogs && examLogs.length > 0){\n const status = examLogs[0].status;\n if(status !== \"PENDING\"){\n return (
    {Math.ceil(examLogs[0].bestScore)}
    );\n }\n return (
    \"taken\"/
    Pending
    )\n }\n }\n }\n }\n\n const getExamScore = (assessments) => {\n if(assessments && assessments.length > 0){\n const exam = assessments.find(a =>{\n return a.type === \"BOOKEXAM\"\n });\n if(exam){\n const examLogs = StudentLogService.getLogForAssessments([exam._id]);\n\n if(examLogs && examLogs.length > 0){\n const status = examLogs[0].status;\n\n if(status !== \"PENDING\"){\n return Math.ceil(examLogs[0].bestScore)\n }\n return 0;\n }\n }\n }\n }\n\n const columns = [\n {\n dataField: \"modulename\",\n text: \"Module Name\",\n sort: false,\n headerAlign: \"left\",\n align: \"left\",\n formatter: (cellContent, row) => {\n return (\n showUnit(row.id)}\n >\n {row.modulename}\n \n );\n }\n },\n {\n dataField: \"moduleprogress\",\n text: \"Progress\",\n sort: false,\n align: \"center\",\n headerAlign: \"center\",\n formatter: (cellContent, row) => {\n return (\n )}\n },\n {\n dataField: \"examgrade\",\n text: \"Exam Grade\",\n sort: false,\n align: \"center\",\n headerAlign: \"center\",\n formatter: (cellContent, row) => {\n return (\n bestScore(row.examgrade)\n );\n }\n },\n {\n dataField: \"moduleaward\",\n text: \"Award\",\n sort: false,\n align: \"center\",\n headerAlign: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n );\n }\n }\n ];\n\n const unitsData = [];\n\n _units.forEach(_unit => {\n\n const unitLog = StudentLogService.getLogForUnit(_unit._id);\n if(clazz){\n unitsData.push({\n id: _unit._id,\n modulename: _unit.title,\n moduleprogress: unitLog.progress,\n examgrade: _unit.assessments,\n moduleaward: getExamScore(_unit.assessments)\n });\n }\n });\n\n return (\n \n {props => (\n
    \n \n
    \n )}\n \n );\n\n }\n\n return (\n
    \n \n\n
    \n
    \n loadPage(target)}\n />\n
    \n
    \n \n\n
    \n

    {clazz ? clazz.title:\"\"}

    \n
    \n \n
    \n {getUnitsforThisClass()}\n
    \n
    \n
    \n
    \n );\n};\n\nexport default GradebookUnitsView;\n","export default __webpack_public_path__ + \"static/media/retry.0e8fbca4.svg\";","export default __webpack_public_path__ + \"static/media/caret-right-square_green.cf2d85d7.svg\";","export default __webpack_public_path__ + \"static/media/caret-right-square_grey.9edc1ddb.svg\";","import React, { useEffect, useState } from \"react\";\nimport { ProgressBar, Badge, Table } from \"react-bootstrap\";\nimport {useHistory} from 'react-router-dom';\nimport DeepLinking from \"../../../utils/DeepLinking\";\nimport StudentLogService from \"./../../../services/StudentLogService\";\nimport UnitService from \"./../../../services/UnitService\";\nimport CacheService from \"./../../../services/CacheService\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport \"./gradebooktable.css\";\nimport ClassService from \"../../../services/ClassService\";\nimport retryIcon from \"./../../../images/retry.svg\";\nimport lectureGreyIcon from \"./../../../images/caret-right-square_grey.svg\";\nimport lectureGreenIcon from \"./../../../images/caret-right-square_green.svg\";\nimport Rater from \"react-rater\";\nimport AssessmentService from \"../../../services/AssessmentService\";\n\nconst GradebookTable = props => {\n const { classId, unitId } = props;\n\n const history = useHistory();\n\n const [log, setLog] = useState(null);\n const [clazz, setClazz] = useState(null);\n const [unit, setUnit] = useState(null);\n\n useEffect(() => {\n if (!log) {\n setClazz(ClassService.get(classId));\n }\n }, [classId]);\n\n useEffect(() => {\n if (!unit && clazz) {\n setUnit(UnitService.get(unitId));\n setLog(StudentLogService.getLogForGradebook(clazz));\n }\n }, [clazz]);\n\n const showUnit = async (id, lectureId) => { \n await CacheService.reloadData('classView', classId);\n history.push({pathname: DeepLinking.STUDENT.UNIT_VIEW_PATH.replace(\":id\", unitId), state: {classId: classId, unit:unit, lectureId: lectureId, source:'gradebook'}});\n };\n\n const showQuiz = (id, lectureId) => {\n history.push({pathname: DeepLinking.STUDENT.QUIZ_VIEW_PATH.replace(':id', id), state: {classId: classId, unit:unit, lecture: lectureId, source:'gradebook'}});\n }\n\n const populateQuizzes = lectures => {\n let quizzes = [];\n lectures.forEach((lecture) => {\n const lectureId = lecture.lecture._id;\n const lectureQuizzes = lecture.assessments.map((quiz) => ({\n ...quiz,\n lectureId,\n }));\n quizzes = quizzes.concat(lectureQuizzes);\n });\n\n if (quizzes.length > 0) {\n const quizzesWithName = quizzes.map(quiz => {\n const fullQuiz = AssessmentService.get(quiz._id);\n return {\n ...quiz,\n title: fullQuiz.title,\n };\n });\n return quizzesWithName.map(quiz => {\n return (\n \n
    {quiz.title}
    \n \n
    \n \n {(quiz.bestScore * 5) / 100}\n
    \n \n \n showUnit(quiz._id, quiz.lectureId || \"\")}/>\n \n \n {quiz.status !== \"PENDING\" ? (\n showQuiz(quiz._id, quiz.lectureId || \"\")}/>\n ) : (\n \"-\"\n )}\n \n \n );\n });\n } else {\n return (\n \n No Data Available\n \n );\n }\n };\n\n const createGradebookQuizzesHistoryTable = (lectures) => {\n return (\n
    \n \n \n \n \n \n \n \n \n \n {populateQuizzes(lectures)}\n
    NameStarsWatch LessonRetake
    \n
    \n );\n };\n\n\n const createGradebookTable = unit => {\n if (!unit) { return \"\"; }\n\n const unitlog = log.unitlogs.find(unitlog => {\n return unit._id === unitlog.unit._id;\n });\n\n return (\n createGradebookQuizzesHistoryTable(unitlog.lectures)\n );\n };\n\n return (\n <>\n {createGradebookTable(unit)}\n \n );\n};\n\nexport default GradebookTable;\n","import React, { useState, useEffect } from \"react\";\nimport {useHistory} from 'react-router-dom';\nimport {Button, ProgressBar, Badge} from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./gradebookview.css\";\nimport Header from \"../../../widgets/header/Header\";\nimport Rater from \"react-rater\";\nimport ClassService from \"../../../../services/ClassService\";\nimport InstructorService from \"../../../../services/InstructorService\";\nimport StudentLogService from \"../../../../services/StudentLogService\";\nimport CacheService from \"../../../../services/CacheService\";\nimport ProfileService from \"../../../../services/ProfileService\";\nimport UnitService from \"../../../../services/UnitService\";\nimport GradebookTable from \"../../../widgets/gradebooktable/GradebookTable\";\nimport DeepLinking from \"./../../../../utils/DeepLinking\";\nimport SidebarMenu from \"../../../widgets/sidebar/SidebarMenu\";\nimport LSBreadcrumb from \"../../../widgets/breadcrumb/LSBreadcrumb\";\n\nconst GradebookUnitsTableView = props => {\n\n const { classId, unitId } = props;\n\n const history = useHistory();\n\n const [clazz, setClazz] = useState(null);\n const [isStudent, setIsStudent] = useState(true);\n const [unit, setUnit] = useState(null);\n const [log, setLog] = useState(null);\n\n useEffect(() => {\n document.title = 'LimeSpring Portal - Grades';\n const user = ProfileService.get();\n setIsStudent(user.role === \"Student\");\n\n const load = async () => {\n await CacheService.reloadData('gradebookUnitsTableView', classId);\n if (unitId) {\n const _clazz = ClassService.get(classId);\n const _unit = UnitService.get(unitId);\n setClazz(_clazz);\n setUnit(_unit);\n const gradebookLog = StudentLogService.getLogForGradebook(_clazz);\n setLog(gradebookLog);\n }\n }\n load();\n }, [unitId]);\n\n const getClassInstructors = () => {\n if (unit) {\n const instructors = InstructorService.getByIds(unit.instructors);\n return InstructorService.getInstructorNames(instructors);\n } else {\n return \"\";\n }\n };\n\n const getInstructorsEmails = () => {\n if (clazz) {\n const instructors = InstructorService.getByIds(unit.instructors);\n return InstructorService.getInstructorEmails(instructors);\n } else {\n return \"\";\n }\n }\n \n const getProgressForUnit = progress => {\n return (\n
    \n \n
    \n );\n };\n const getQuizzesAverage = (lectures) => {\n let quizzes = [];\n lectures.forEach(lecture => {\n if(lecture.assessments && lecture.assessments.length > 0){\n quizzes = quizzes.concat(lecture.assessments) \n }\n });\n\n if(quizzes.length > 0) {\n let globalBestScore = 0;\n quizzes.forEach(quiz => globalBestScore += quiz.bestScore);\n\n if(globalBestScore > 0) {\n \n //return average!\n return
    \n {(((globalBestScore / quizzes.length )* 5) / 100).toFixed(1)}\n
    \n }\n }\n\n return (\n
    \n 0\n
    \n );\n\n }\n\n const getBookexamScoreForUnit = assessments => {\n const bookexamlog = assessments.find(\n assessments => assessments.type === \"BOOKEXAM\"\n );\n let score = 0;\n if (bookexamlog && bookexamlog.bestScore >= 0) {\n score = bookexamlog.bestScore.toFixed(1);\n } else {\n score = \"-\";\n }\n\n if (score >= 70) {\n return (\n
    \n {score}%\n
    \n );\n } else if (score >= 0 && score < 70) {\n return (\n
    \n \n {score}%\n \n
    \n );\n } else {\n return
    {score}
    ;\n }\n };\n\n const getWorkbookScoreForUnit = assessments => {\n const wokbooklog = assessments.find(\n assessments => assessments.type === \"WORKBOOK\"\n );\n let score = 0;\n if (wokbooklog && wokbooklog.bestScore >= 0) {\n score = wokbooklog.bestScore.toFixed(1);\n } else {\n score = \"-\";\n }\n if (score >= 70) {\n return (\n
    \n {score}%\n
    \n );\n } else if (score >= 0 && score < 70) {\n return (\n
    \n \n {score}%\n \n
    \n );\n } else {\n return
    {score}
    ;\n }\n };\n\nconst renderUnit = ()=>{\n\n if(!log){\n return <>\n }\n\n \n const unitlog = log.unitlogs.find(ul => {\n return unit._id === ul.unit._id;\n });\n\n if(!unitlog){\n return <>\n }\n\n return(\n
    \n \n
    \n

    {clazz.title} > {unit.title}

    \n
    \n
    \n
    \n
    \n
    \n \n {getClassInstructors()}\n
    Message Instructor\n
    \n \n
    \n
    \n\n
    Progress\n {getProgressForUnit(unitlog.unit.progress)}\n
    \n
    \n
    Quiz Average\n {getQuizzesAverage(unitlog.lectures)}\n
    \n
    Workbook\n { getWorkbookScoreForUnit(unitlog.assessments)}\n
    \n
    Exam\n {getBookexamScoreForUnit(unitlog.assessments)}\n
    \n \n
    \n \n
    \n
    \n )\n}\n\n const loadPage = target => {\n if (target === \"dashboard\") {\n history.push(`/dashboard`);\n } else if (target === \"account\") {\n history.push(`/settings`);\n }\n };\n\n return (\n
    \n \n\n
    \n
    \n loadPage(target)}\n />\n
    \n {unit ? renderUnit() : \"\"}\n
    \n
    \n );\n};\n\nexport default GradebookUnitsTableView;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABecSURBVHgB7Z0JeBvlmcf/I0uKbMvyfSS+FNskdi7bJHGhm4BDKQ0LW2JIWQqlxGWBXkD8bPfZbbvbhj69F5Zku0CBFicPdwgkobBJWCAmgSTkQHbsmNxRYjtx4iM+5FOyZr9vRnJky5JmNBrN2NHveSYajWYUa77/vO/7vd/FYIrynMVi1iGqhIHGrNEgFywSyGEzwJj5M1jzxFcyVtfn5JXpAsNanU6cZeG0OqGxPlw6rxZTEAZTAFroeujKSYEXkwIvB1fgXMHLRQ25c7VEIHUjQO1UEMekFEK1xZIwgqjyKEZzB/kJ5b6f7nBBrQhbM8I6t0ZhpKaytLQLk4xJIwRa+E7oVmgYPEDelkDeJ14izBYny27VwL5lsohC9UJ40VJfrtUwdxCTvwqqLvwJoSLY4mDZDQ+Vzq+BilGtEKotDavAP/3lmBIwVmIlnniwdN56qBBVCYGaf2j0j4NlV2PyPf0CUacgVCOE6rpGIgDnGkxZAYxHXYJQXAhcDMBoqpWP/JVCHYJQTAjEDZjB6IgApkoMIJn1YO1PkFqGFQqggQJwboDRWRARgSckONadqa478ksoQFgtQsQKCIUkqNjhZeG0DmGzCBErIAaWPjCWv1oaViNMyG4R+Cqh7pckIRS2HzWlYLAWTi52kDVDKasQXK5gM/iUcISgkd9VyOYaiAhKwOh3IiKCEEBdhX4nybbKdi9lEcJLdQ0PEEuw8+rNDcgBFQN2cvdWBkIuBBoUMiypE181GcKwkkDvrRxBZEiFwNWBWedaRJAV0hT/dKjzDSELFnkRsGsQIXwwzJrK4rlPIASERAiuBqOIJVAAJ4sq0k4h+d5LFgINXlwxQQSFYBms+l7xvA2QgCQh8FVEWjuIBIYK00USdiTPEHwn2qCDRT5ZpKfJoogIlCeBxAubuTIJkqAsApc2ZvSWSJ5AddSSpuxlwaSjg7MItO0gIgI1UsKXjXhEC4GvIUQakFQLKZtgEk6iXIOrEYk2JUfiAnVDgkd7qZhGKnEWgW9EiohA/SS4OgAJRrAQ+JRmJC6YRJSLcRGCXIPLJZxBhMmGYBchzCIwupA2cEQIG4JdREAhcEPPwI07jDA5Ka+21JcHOimwRWCYiDWY7HADiPzjVwi8NYgEiJMf1hwocPRvESLWYMqgYfBLrmnA1+e+PohYgylHghNan1ZB6/MyzhqwkIo+SgO9JgoRhGOz2yEHGoZ5nLysmeizCfMIrkkqRGWmPKGFPyclGRnGWG6LIJ7OgUGc7OzCuZ4e2IZDJwwni8qJRl5PbBEkWIOS9FTMSU3hxKA2mpuasGfPZ2gir5Ts7Gyy5WDuvHkwmUxQE0nRBpRlZnBbbesl1F5sQyhwzUG1fvxxL4vAz1fA7IRIaMEvz5/J/QC1sZcU/pNP/Sd53ePznLv/8R785J//BVlEHGqEWojtp6wYHhmBZFh2WeW4OZ28HlsiAtEDKKgIvjmrQJUiePHF53HXXRV+RUDZ+OYbuPnmm8j5L0CN0Hu7PN9M7rX0eIsFs2L8sTEWge95xLUpiGphLJuRQdxBMtQEdQNNTec4EYhFzdahsa0D+8+3QiK0DWKmZ0+mcRZBR5UiSgRJBoOqREDdQFnZQm4LRgQUah3o9atXP8YJSk3Qex2CAJybs9LzwFghMOwdEElJRhrCTXvrOW4bz1MkDqCFH6rCc7uL7du3QU3QgFwqrqBxlFHX4HILlyEC6q/unVeIcNBv68a2t5/Djk3PoY/su8ktmM9tsxfdhnu/Uwm5WLvuv3H33fdw+1/WfoqDn72PNiJG+nelZuSgqHgJ5pQsQQrZDwevNRyVGjiOcQ+jQviL5fCKKEazWcQXISM2FssLzAgHP3toKc6erPf5+d5TOgza5ZvuwWSKx/4DB/Hacz/F7u2v+TyPinL5XT/ADcvvhZzQGkSrrQ+SYDUVlaVzttDd0TwCP8G1OOSuJdAn7+VnfupXAJS2Xo2sIqD09HTjkQfugKbL/xgS+rc+/4cfchbj+//6LGKM8ZADo04HyTBOWuacEDxiBDrLuTjkTBod/PR9/Lrq9oAioLTb5BOBQaeBVsN//+eHjgi+7pDr7+/3cGOhxKgPgRA8ypwrSW7omooamGgg+AqxBELxZQ3cBRgs9PqS6SbMiDf4/X98QUW8jcQ06oU1/6WxMZfuuR5pnaqmt2kkLqHNVSswRhvx1ZK/4159Mb6AaAHmJ8dgaV4ilsxMxNyMOMwwTUPcNK2g/9/z+jiDFmmxegTL9rfVLARiE4acy+grd2dYsCWMiubn9nQHC2YXIz+7gNsudrTiVNNJsp3yeS0txEVZ8VwB8u+BaF0UJwQ3vYMOOEjry4B9hHu1ky1ayz8TVCzua9243xdkT8d377kduz7bDqufv8ET6hqoqFPDVJsQC+Oa44r7hQzDFENFuKuH1ApQAbhJT87gtkVzyzhR0K2zuxMxzb3EKji4c2anGb0KcjzuzxMhzM9ScRmIUPJzZsBM/h7zPT9GF/l/rUSUhxv2o/XSeQwODfi8vl0GIVzsaIfD4YBWK8zK+YJhcCN9dX9LOVRErCvSLswrmvBzvU6PbHJjs103t6lrHz47coYL7Dyf/FBijI3Gqm9+ffR9QnwSSuLLUDKvjHvf1dPJiWOICGJwkBfF0ZMNOHaiXpaaQ7fNhr1HGnF9calUMZjpP1o+UFQXtC5OSTIlCTo/Jz2RE0KcXtrT4Y/7b70BCcYYn58nkL81YdzfO/ua+fgjEYL794SaHiqGOotUMSTQgFEzgigzVMQAfbLqdkOv1SMxPrAQGo6ewonjvL8O5BKk0PDFAfwXyS4eP3FC8DWGadHIzc7HpcbPIRduMVA3ESxRQyjV0HURoSI6m05wpj+P3ED6GojTTReQGKNDYnQo6tWB2X/wkOBzadxQTFzHZWsjnI5hyIVUMTjhNBMhqKuDqikti3stypsj6Py+ft4fpxn1pHYgf6+o7u4ewedSIbhjCI02+CqoEKSIgdQciBAY5EJFxKVmouD6W2GMMQo6PzaGT/bQpI9WI78Q4uP9d2mjhU8DxLr6/bh4sYULIpOvKUU4CFYMRAPxxKkyqhvmnpSdiZLkb6GDuImzlv3QaHw/TXnZM1B/7DRXxUuKkd89LJg3z+sYLfzPD+7iqpNnyTaeG5afwl0P/FtYWiaDDCDNWn6tZOnd1kPB2dr3sP+tn8LWMbavQXR8AeKSShCl87YSs/Jz0dzahsvdvZJTyoHIycnGgvljhbDv0C4uweQvj7CLtFbSJNmdRAxmUoOQWxDixcCYmepaUu8KMk6gHSRC0TGFFnzr8d3YveGHPs+hIjAmlyDGxCeYnM7hMZai+UIbUgvL0HjYgqO1BxAqrl3yNRSVLkZiciqSYYN9wDb62Sef7cAne7ZDDDSncP+Pfie5mXrj5/vxFtn8YTIasXDufMQYArUSM1at0o1Nlvd+h9r3fh/wvBG7Dd2tnxLR8M3ABmMOTKl8IKZNSseddz+KpKwClJ48iv948E6EivsepSY9k9unImg/YUFP80mSTWwRLQIKTTnTZmquM0vJEsgJtQz7iGW4jlgG/2JgzYoOPjix91VBIvCECoJuA928L95y4Qzu//AN/Or9DWhqP4+cgkJSeMJbLv2xovJHoyKg6EjK25q9CH9NWIyNez6BWMzp6aP7b28Q97uDZWBwkBNDP3n1h6JCECsCT6hroIJoH+Z/4Ju7t6Js9XL84uU/4paV96OCFKIUqAgqVl35juYBB751sAXfOtCC12wGtJ87Kuh7DDodSvLyUPm1m7ktIZbveEo73cjVV2E8QsQgXyouAJ1N9V5BoRBMcSnQ6aaho7OFE8Gx3rFzS7644xXsPXoAb//8Je795upnIJbxIjjSO4QHa1uJGK4MPdMO9fq8nhZ+RlISCjOzUJqfz713s2z+Amzet5fbp41rcvVgGo9bDL7chGJCGB648jTk5S7ArIIy9A/0oqenHT29begmrwMDV262yZSC5KRMcm4xTp+tQ0vHBTx58kv0j3jXmRvOHsMvXvkD1j78a860b67+H9ICeB6BiDHGcZbklpXfHT1GLcF4ERi6+e8yp6WjNG8mf4xkQQ16PWmPMI4+9RNRmJXFnTc4LF+m0Rf+xKCYEPTR/JMQH5eMuYVLXfvTyJZC9vz3jNYb09DoiJ5QBG7e3PUu7l66AkuWr0Dh4q/i1eq1+GLnDlJFmaCaRxqrohcU4vHHfoXC3LH/90riDjxF4Mmy+fPH+H0hUBGY09JwtLkZSuBLDFpuBTEFag7GZL4uPSu/DGKhrmE/aN9+//mPdVtfxMX+Dmxv2IV+0yCYmZlg6r0TPuwN16IvPQm/2fECUuKScOfCb2DprMXYe3lgQhEssl/CooLZ3NMfDBmJidBG6WE/Qap/CnRY8RYDY1UsWLSf/JQz9bRQxZJOmnvfv/02LPIzwioxPhHOmCi8c2gH+v0ke8bT3tuJF2pex8/ffgqvnJp4oMztA8dxzYwsdNlsCIZE4jrm585Ee93HUIrxASQRAmuFAgxdOMLFBtHRcQiWzJjoCY/n5eZhYfFCGMYHRbHREMq5jhZcOvwqjMPtXp+dNqQhJzWdiDi4lHZ6QhJ3vd6k7FBBtxhs/X1WDcs6z0IBomISkZGWR5qag+9R1NLv/aRTEdBtItjsdNr/bezBpDiw6RP3ezA4erH4/EYvMbwffQ26+2xIjktEMKTGJ2DQPoz4kq9DaagY9tZ90U0sAiPrUrO+MC5cCW38dEwziQu2KOf7+vHHw0dwsK1jzPGczGyfIuAgQaHz5jKwhaTBNSsN7PwC7n0gSlu3cqJw0zHC4M/b38XTW96C9eJFiIHWFl7YsQ3Pb9sKbZoZamBocIhYBC5YDD/UIiTc9CjZHoNGJ3zE1Csnz+Ab2z/GyyfGzghM3UBebn7gLyDugV1YBOeN14JdUEAjz4CXaJ1DKGr/yOv4oN3O5QTExArbDh3Cxa7L3LVqgaHBIgunFQrCEBHEXfcdQedSV/Bs47EJP6MikNqj1x8Jg+eR0n/a63hXXx+qP/owoBioJaAiqD1zGmqDGgNNFEaCXhAqVOhS8mAiYoiK8d014gBxA9/btQe9du/cAbUGM9KnQ26yew5zr45pcbClzRo9TsXw9LtbsbO+Hp1O7yrt6R4bJ5Z9x66kpWlGMTZMWcVAaOCwalwzdysSJ3iinz6HOON7sevcWJPZO+TEk/useHDnARIbTFwNTEuWPl+AEKhVoLGCwxCHQw++hrNLH8ZgPC/A7uUVeLWiEn8mTeFDdhZ2B4thsm1LzcWvbl4Jyz/9BLYyPnFGh9D/+9PvhS29HIi3qqpq3bbUCoVXdV9b/Tpe2vQ30nTah4Or544ef93Sjjf29UGnnY7Cokx87+7bvK6tObUfNrvwXIEUSp0kt5C0kH/zzcfRf/v30WbbDWcyX/MY6OvBiJO0krrOb9PztZThzBx03Psw8lY+hNXX/j2MUYoldcfDeQR+yBvLfsIwjCJCoAX/8M9/i321DaPHLvTYMd2kG92nMA4tjtVfxIaBnXhj3W9g8pg+5uPT+xEuvm4kf+8ivmm6dXgAPz61B93TrlQ/m2JN+DjTjJtarDgen4S6lLG1ogN6Bo+Sa/6U/1V1iMHJcukDLrNIokbF4oSf/G7dGBFQHtl0hliCDrywrw1/axzrtRpJrYEKx5P+4fBYA0p775VJZagIWof7vc7ZlFeEHy69FWsXfAUd07yTWCdIg9tLF49BDTjHzo9gr4ECbNr2MT741Hvwx3liBZ76pJUI4dKE11HhbNr2EZTkfzubJhSBUDa2nYbF1gGlcVcWOCHwAWP48wlr17+OYKHxhJJsuyx9wq7d3ZKnyZMEQ5oXaKBI90cbnVh2RHzfKwlQE9/cegnBIvV6qYTiabb0tUNRWE2Ne3dUCG5fES6aL4hLzU7EPkvgaXXkQIpL8KR3JPjxiqHAybJb3fujQiC+ogZhzCf02EJzMyMEzwgcNe79USG45ttTPMsYITzo9bqtW6qqfEzBy2IDIlwV6KN0Y0KBcT2U7PRDQe6BDp6g07dEmHzotNquGxdf61sI1D2QLKMgq0CHU5lig+uzF0FZHPaRLZ4zs1O8+iwyImoPI1fpWk3GKB2m64V3e/NFnIQUc1tPL4IlPzfX62H3EoJrZY8aCEDKIlTXlc7DyuU3IRhoO8Pqym/jlqXXce+/c/0dSDUKm29JCoUzClCx8BZOCLSt4GfZJSiNFdfvcLouBrcmZnHXV8+6EcHS1iN8wg5P4uNM1t9X/EPN+OOSFveis7OvLLpG0qoiNCn0waf78MHuz73aHDzJykjDLUu+whX+nIKZYxqdKLT3Me2xfPT8KdIa2IlQEUOefNq1fensxchNzvR5Hm0/sJG8QKuPdo+C6DhiRWI4EUmlb2gIq55/EcEwPSWl8k/3fXv9+OM+JxSorm2grSsBJ9EI9eotVBieGUMqAFroJhGLVRyy1pOtIWhR5JACL5qej4XmeSiaUQC1UfPlUTzzfx9CLFxK+fHHZk70mU8nRbJO6zQCVoJtbO8IqRBowWdJnHNhoXk+t1GopTjb0YJ2Ioi2nsukpXLsQNAYvQExpIUwNS6Re+JTiIuJmSbd/8vJxn3BzdI24sQTvj7zbRFErO9EhUAtQwT5oZNjbPxcfP8Lf9aA4nOkE1e9YH0ryBO64BRdrDKCvFCXEIwIKP6sASXgpEMkVqBWwQwBlM2YTqyD/NH71cj7tXVYv2s3giGQNaAErsiybCUELgi6//wFdA4OoCQ9LUQLS0Sg+YJqIoADp4PvBh/IGlAETUNGrAIVQjlEkBNvQo4pjlvuR40Lg6qVflI1tA0Po7G5BTWNX+JISwukIMQaUISltlg7sQo6C0SsCXmuu4fb/NHR1YW6Y19y4+8iyIPdObJMyHmChsVzXdkEBo5iSE5IwNKFi2HOzEIEGSAugTQ1W4WcKmqGymBchFCaW1tx/OyZiHUIEUJdghtxE2VQFyFTL6asjAxuptCs9Eg+IhQIdQluRAlBLhfhJtpgQHFhEYpnF3H7EYLEyVQJdQlugpq8+CVL/VqGYR6HjFAXcdx6Bs0Xle3yPdlgnVj3dtWjqyGSoOZQYuBYA5n7N0asg3hoXHB7+ZI1CIKghMCnn+0V4AfPykokdhAGFQGNC8b3PBJ+vQS4hcEYHa1JhGXNh0jNwhdsV1pK8rJn77svaCsteYGDasvhVWA0ATuxhIpI7ODNrJy8yt9W3LYeEgjJShfVlobV5JueRhiJWAceEj9VvfzIQ2shkZAteVJtqV8DAR1ZQgkVAU1R01T11YjBoH/ilUceWYMQENK1b5QQA+VMczNnHaSsfTjpIOnjTVWPrkGICPkiSEq4CcrVZB1C5Q48kWU1LFcAScUQ9hXkqHVoPCV8tdbJBdvldEZVvVP1o/UIMbIti+aqWm6GwN5NoYSfVtYypQJJmieAc6TCPbFF6L9fRogYzK48gxkKcNxqxYmzZzAFqHU4HRVi2w/EIOs0/Xwjlb2UZdl1UIBZZjNu+sr1kzpFTdsOiAiWySkCirwrZnrgCiJpjUKRlWcnn3Vgu+DUkJrBj0MaFPoibEKgKO0qJk3swKLGwToq5bYCnoRVCG6Uyje4Ua91CK8V8EQRIVCodWARtYZhNA9AAVRnHRSwAp4oJgQ3rpHX1DqYoQBKWwdaLWSdTCXJEtZAQRQXghslBaGMdVDODUyEaoTgRklBhMc6UAEw6xxwrPWc1UxpVCcEN0oJQrZBNyQGcLLshneqHlsPFaJaIbghNYxyFuwqElTegTDlIOykFZN2frG2SF2tle0i/n8DnZdK6RggEKoXghtuvgboVoBhiSCYFQgDwVkHYvpZppYhT78dI1vUZP79MWmE4AkviihiKbCCWAo6I5UZMiGkaxxJoVsNBkONQavb2tHbVTNZCt+TSSmE8XAtndCVEBdSwjBMMWQYlnela9wAfeKtLItPNGBr7dCRgv+BFZOcKSGEieDFEWUm7WokccWaGQa55OcSS8KY+TN8LYzuXreCWyqZFDjbzXDHnNZj1lO1v6+osGIK8v/0pq/m4XA8EwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,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\"","import React, { useState, useEffect } from \"react\";\nimport { Card, Button } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport Breadcrumb from \"react-bootstrap/Breadcrumb\";\nimport CMC_icon from \"./../../../images/createmanage.png\";\nimport MIS_icon from \"./../../../images/students.png\";\nimport OO_icon from \"./../../../images/otheroptions.png\";\nimport WT_icon from \"./../../../images/tutorials.png\";\nimport DeepLinking from \"./../../../utils/DeepLinking\";\n\nimport \"./links.css\";\n\nconst DashboardLinks = () => {\n\n const history = useHistory();\n \n const dashboardLinks =[\n {title:\"Content\", destination: DeepLinking.MANAGEMENT.DASHBOARD_CREATE_MANAGE_CONTENT_PATH, icon: CMC_icon, isDisabled: false},\n {title:\"Students\", destination:DeepLinking.MANAGEMENT.DASHBOARD_MANAGE_STUDENTS_PATH, icon: MIS_icon, isDisabled: false},\n {title:\"Tutorials\", destination:DeepLinking.MANAGEMENT.DASHBOARD_TUTORIALS_PATH, icon: WT_icon, isDisabled: false},\n {title:\"Other Options\", destination:DeepLinking.MANAGEMENT.DASHBOARD_OTHER_OPTIONS_PATH, icon: OO_icon, isDisabled: true}\n ]\n const openDashboardTilesTo = (link) => {\n history.push(link);\n };\n\n const createDashboarTiles = () => {\n return dashboardLinks.map((dashboardLink, index) => {\n return (\n !dashboardLink.isDisabled && openDashboardTilesTo(dashboardLink.destination)}>\n \n \n
    {dashboardLink.title}
    \n
    \n
    \n \n
    \n
    \n
    \n );\n });\n };\n\n return (\n
    \n
    \n {createDashboarTiles()}\n
    \n
    \n );\n};\n\nexport default DashboardLinks;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIcAAACHCAYAAAA850oKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACzpJREFUeNrsnUFsFNcZx9+sDQ6JnbiyFSUbRRlLwRsJQZeYSyw1Xl8SKQphLVoO4YDTnnJADr1VPdgc2h56AKRKqIkqFkWVqigIJ0htw8WLaEgPUDsxkTBp5QUkOwJc1rFrusZA3jd5Y42XmZ33Zt68NzP7/aVhbbxrz7732+/7v2++mTFIirV8vL+TPuTZBl8PsB+ZbONVhW2gc3Sr0m0KtvZ3L1TTOn5GymAo0IcCg8AGImrZoAA0ZQpLGeGIBwx5BsMe9hgXASCfMFimEA61QBygW1EwNegSpKNxup1MGihGQoCA9DDMoMgnONgBHCfpVkqCVzFiDgVEhlEWJTpJelRl0eQwhaSCcIgby9GY+Ygo/cnhOBpZA6FASGINhyN9DBNUKS7pxogBGGP0YSRlnkKGJzlGARlrSjhYCjmRkOWozmXwO7pSjaEBik6WQt7DuefWUZZqqqmFgxWwTmO0CBxFhlQW0jIKwYBIMYlgBBaM2yQbx3REDpZGwFsUcX6laZx5kWpi4WBLVEgjeZxP6ZpiaaaSODiYv5jAJWrkS97BqHxIJiIwigiGEsH4TrDxjn/koDs6zDwGSq3Ag5RiCweCkS5ADAQDAYkUDgQjnYAYEsDAVUlKVzEGgoGASIeDVT4BDCxwxVdTDJBAldQwdY4TCEbslQ/jBQPBwRp08FhJMlRk8xV9WmFNOhM45onToGjTkCEIBviMWTSgiTWoPSL+QzStnEAw5Gpm9hZZ+l9NxZ/qFPUf3JGDHdw5LWMvjbZ20mK+SlqyO4nR8az1iHLXg4VvyMOleXJ/bpKszZ63vg4pOMw/Lg0Omelk865fkNYd+4ixuR1nPoDWZv5KVi8cIw9ry5GnF960MhoWDIgQW35WIpt2/RzBCKHW3Btky/5TYaKt3eAdPnKwKuhkmDeU6d5KHnvrDwiFZNUmfmNFkoDa6Vc95YkcR8L6i8de/x2CEYHaBn9tffACyndeMxw1jUIoj9E/YqUUVHSABFSBzW/gyDEaKmpQKCBHoqJTpmtrmDEeDQSHjKixia5KUNErxDg3jB6ZqKKG5azNn+DMKYoeIVL3qBAcMqIGGFH0GgoBCW5MPaOHV+QYkUEzSp1awo33CBcc7Cw1PBzfXCqyed9oC1yeOKx6z1ZXV8n09DSZuXqVLC0t/bAE3ryZ9Jgm6evrIx0dHTh90QvmfcwvrRxQuUcLCwvk41OnyMVLl9bBsIEBWOBn8BxU5DrQMHKwI6+myojx2dmzG6Bwe86nZ86Qn+7dKxRB4HW3UwZVd1eXFVHddPO/y6R97QFpbQ3c+WnC/DuP2NanlT0q3+zMzExDMJwTfYlGlkKBfwEFYJyhUKVJu3fvJtln3VeA0BNy+ctr5McvZUnHE21B/wTM/7hXWlFqRCvXrnE/d7ZSwcDvo7u1e+Ti1zesKBLUmLp6DrbWVdrlNTc3J5QmUP5ao6nlyytz5Pr8nSAv73TWPDK6Ugoq4pQ9e4t8/e9vg6aWR+AoqH4D2WyW+7leRgzVIDLf/I78k/oQiCYCKmwwpKwAovwEpd7eXu7UsmP7dmFnDwYubasVUYFRBR+y7cVneI1qHniAy0nZqxUtZ67lKBxQ/PKrY8ASdrsgHBBpvJx9s8kGJP/Sc+RHT27hAgTWC3ZaGdC142/B8qxBeumin5bXX3sN04oEo3rx8g0r1XBowFnn0HbOK0z67jfftKqhFbpchShSq9VId3c3MV94geRyOQRDosCk3vluxUozPpFjHY6C7p2GFAMbSo1RvVtbI/lc1quiavGQYd3lqCbTncUVy4dA4cxNwAVgY+JQNa9RhaWux+mYZobgNTaa3qgCIC5G1YocT+EQocCoQlXVoacwcqDWBcdjABJWUc1ncEhQ9SsZMKqr9+5bx1YKcdo5qHPMzc/jLGk2qp9PzhZaY7EzS0tWMw8UwjbYZdMku/r6rCopSr1RbY1DpIA2QLd+DaiYwgYdYFggUy+tcNj9oX6NPOVy2ToiKRJBALoLX3yRqsnqf+UVpVFUKxxwRJa3wwu60+EAHK9q9PeKdJolQTXF3XBaVysifaEV7CFVLq1w4PkoCIen8FA8GlJPQZMPb7oQPSWyDTrBBHpUk6A2xR8mrXBAHYMXDtGlLLh6aCJCJTStwIQDIDwTLdpDiko4HKBBnwIXpAboM0V/osdzlInG4ysw6VAB7c3lyFU4d3b5h1P5OtrbrajCE1lQkajcGpc9gdMI8FSC+KWVKRwGlIus81YWcRxQLrqGkQPVMHJUcBxQrnCEvTEtKp0a+vB22a5zlHE4UM6oAf/YS1mIHgWde2OfK+vs7+jFUyR1acoJxzm6vadjL+wrCro15sD/QUMQVFGxj1SpztVHDi3yAsMW9HzAc+BSkyIl9Ga71KRkldfhgKu4LB/vB0CUnuAEqYSnlQ+60yGCwNWMedVsl5qUqCo1o1awyNTTolJX605F8AMJRZRFjXo4PlG9FyINwDwXs0XJ8xsb4GD3Oa/i2DS9PK9gPK5yL/BSk/FbwlK/UbG/qT9kD6llWBkc1FzxppYewb4OvNRkIJ10frMBDrhiPl21ADmmijcLrX/Oe6w0ihoiKxX7NdgfEjyluKWVR+iJUjCBfpeRhJ9BmyDekEdtSvGCoyTjLz1Y+IbreVD53P/229bZ9E4AAAoonUPxC6uj/lq8Ph32Vxyr/w/Xe9nT1HKaSLi9xuP7P8Y7RCrS2V++TFZu3wj6clil9tDIUfWLHK4UBdFa5TzOmpKocTkMGJbXqAfDEw5W8yiH3el7X32EM6dA//nsj2F/xWG3/8yIvkBED5fmyb1pBCTqqHH9/F/CRo2KEBzSosfFP3GbU5Tg2K4skn+9f1C6EeWJHHKiR22Z/P/vvyIPV5dxNmWD8cFBK3KEUBnaAQPBISt6QHq5++e9GEEkgvGP3xbJ/KW/ReI1Gi5l65a10OMxKeuNbdqxj2zavg+XuAGhAH9x5fTvra9DCrzGUCg4GCBHiOQ2wpaeV0lLdifJdG31fA5cD3Pt/v2mh2Ll1g1y+8rnVqSQAIWtHi8jKgoH3FJ0lii+tah9+ynBG9ihONIJBWPM70lcl2Cg3gMKJO+ofgdww7pd254Pcwtu1KOCaHGU54nco87ucT6OgCReh9yqoaHgYILoUUVAEiswodwfcKHRZullSMe7QkBCS9gaCI80q30cRkASpyHedBIYDgbImA7/gYAE1tFGlVCpcDj8xxQCEntBifxQkBcGHl3H8raKgMTaZwT2iKFGll3bYxABiS0Yg6I+QxocDkAO6RoBBKRhPSNU2jdk7cny8f5h+nBC10hgqX2jH6RglML+EkPmHiEg6QFDSlqpSzElouEYDKaYdZVkgSEdDgcgQzpNas58uhnBgCOtUj+YRlR7ypqEJojiw/y24Oa5cHdlTCUxihx1q5idRFOhLPv0k2Tbi88gGHGMHI4I0slMalHHyKU4gth1jMg+fIaqd0IhgTbDIwiIFAEQQ35tfomBw+FD4DxcEwEJviIhAg07iYHDkWZGiYbrniYckCqDoqTqDxq63imFpMC8iImA+KrMjGdF5R81dL9rCskYfRhRueRNECBVVr84quOPG3EYAQqIyVLNMAKi3lvEGo66VAOQFJoYkDKLFmXdO2LE8SOjEpIYARIbKGINh0u6KUbpSTQDEjsoEgFH3fIX/MgBEtHF+xUDAj4CGrSPRVnhbAo46kDJM0iKspfBCgABIOBCwOM6jWZq4XABBXzJHln+JAJAEgVEauDwMLKwDbD006kYEJh8SBNw54FyHH1E08Lh4VXyDlAG2I9Mv5TkA4g96QDCIvu+orqCiUJp0/cCDACF2ME2mt5AFwAAAABJRU5ErkJggg==\"","import React, {useState, useEffect} from 'react';\nimport { Button } from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search, CSVExport } from \"react-bootstrap-table2-toolkit\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport { Spinner } from 'react-bootstrap';\nimport * as Icons from \"react-bootstrap-icons\";\nimport FeedbackService from \"../../../services/FeedbackService\";\nimport './systemlogs.css';\nimport Rater from \"react-rater\";\n\nconst StudentsFeedbackTable = (props) => {\n\n const { SearchBar } = Search;\n const { ExportCSVButton } = CSVExport;\n const [loadingCsv, setLoadingCsv] = useState(false);\n\n const [feedbacks, setFeedbacks] = useState([]);\n\n useEffect(() => {\n (async() => {\n setFeedbacks(await FeedbackService.getAllFromRemote());\n })();\n }, []);\n\n const render = () => {\n\n const columns = [\n {\n dataField: \"stars\",\n text: \"Star Rating\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n \n )\n }\n },\n {\n dataField: \"comment\",\n text: \"Comment\",\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"lecture\",\n text: \"Lecture\",\n headerAlign: \"center\",\n align: \"center\"\n }\n ];\n\n const data = [];\n \n feedbacks.forEach(feedback => {\n\n //exclude if no stars AND no comment\n if((!feedback.stars || feedback.stars === 0) && (!feedback.comment || feedback.comment === '')){\n return;\n }\n \n data.push({\n id: feedback._id,\n unit: feedback.unit && feedback.unit.title !== \"\" ? feedback.unit.title : 'N/A',\n lecture: feedback.lecture && feedback.lecture.title !== \"\" ? feedback.lecture.title : 'N/A',\n student: feedback.user && feedback.user.fullName !== \"\" ? feedback.user.fullName: 'N/A',\n stars: feedback.stars,\n comment: feedback.comment\n });\n });\n\n const CustomExportCSVButton = (props) => {\n const exportCSV = async () => { \n setLoadingCsv(true);\n try {\n let data = await FeedbackService.downloadCsv();\n const rows = [\n [\"Student\", \"Unit\", \"Lecture\", \"Stars\", \"Comment\"]\n ];\n\n for (const survey of data.data) {\n let row = [survey.userId, survey.unitId, survey.lectureId.title, survey.stars, survey.comment];\n rows.push(row);\n }\n\n let csvContent = \"data:text/csv;charset=utf-8,\";\n csvContent += rows.map(e => e.join(\",\")).join(\"\\n\");\n\n const encodedUri = encodeURI(csvContent);\n var link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodedUri);\n link.setAttribute(\"download\", \"my_data.csv\");\n document.body.appendChild(link); // Required for FF\n\n link.click(); // This will download the data file named \"my_data.csv\".\n \n } catch (error) {\n console.error(\"downloading error : \", error);\n }\n \n setLoadingCsv(false);\n };\n return (\n
    \n {loadingCsv ? (\n
    \n

    Downloading CSV file

    \n

    please wait...

    \n \n
    \n )\n : (\n
    \n \n
    \n\n )}\n
    \n );\n };\n\n \n\n return (\n \n {props => (\n
    \n \n \n \n
    \n )}\n \n );\n }\n\n return ( \n
    \n

    Recent Student Feedback:

    \n {render()}\n
    \n );\n}\n \nexport default StudentsFeedbackTable;","import React from 'react';\nimport DashboardLinks from \"../../../../widgets/links/DashboardLinks\";\nimport StudentsFeedbackTable from './../../../../widgets/tables/StudentsFeedbackTable';\n\nconst HomePanel = () => {\n\n return (\n
    \n \n
    \n \n
    \n
    \n );\n}\n \nexport default HomePanel;","export default class School {\n\n constructor(title, address, contactInfo, ltiEnabled){\n this.title = title;\n this.address = address;\n this.contactInfo = contactInfo;\n this.ltiEnabled = ltiEnabled;\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getAddress() {\n return this.address;\n }\n\n setAddress(address){\n this.address = address;\n }\n\n getContactInfo() {\n return this.contactInfo;\n }\n\n setContactInfo(contactInfo){\n this.contactInfo = contactInfo;\n }\n\n getLtiEnabled() {\n return this.password;\n }\n\n setLtiEnabled(ltiEnabled){\n this.ltiEnabled = ltiEnabled;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, { useState, useEffect } from \"react\";\nimport { Modal, Alert, Button, Form, Spinner } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport StringUtils from \"./../../../../utils/StringUtils\";\nimport School from \"./../../../../payloads/School\";\nimport SchoolService from \"./../../../../services/SchoolService\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nconst SchoolModal = props => {\n const { show, onHide, school } = props;\n\n const [alertShow, setAlertShow] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [title, setTitle] = useState(\"\");\n const [address, setAddress] = useState(\"\");\n const [contactInfo, setContactInfo] = useState(\"\");\n const [ltiEnabled, setLtiEnabled] = useState(\"\");\n const [showSuccess, setShowSuccess] = useState(false);\n const [dataInTransit, setDataInTransit] = useState(false);\n\n const [apiKey, setApiKey] = useState(uuidv4());\n const [apiSecret, setApiSecret] = useState(uuidv4());\n\n const wrongInputMessage = \"All fields are required. Please review.\";\n const failedResponseMessage =\n \"There was a problem creating school. Please try again.\";\n\n useEffect(() => {\n setTitle(school ? school.title : \"\");\n setAddress(school ? school.address : \"\");\n setContactInfo(school ? school.contactInfo : \"\");\n setLtiEnabled(school ? school.ltiEnabled : false);\n }, [school]);\n\n const resetFlags = () => {\n setAlertShow(false);\n setDataInTransit(false);\n setShowSuccess(false);\n };\n\n const resetAndHide = () => {\n resetFlags();\n onHide();\n };\n\n const validateForm = () => {\n if (StringUtils.isEmpty(title)) {\n return false;\n }\n return true;\n };\n\n const updateSchool = async e => {\n e.preventDefault();\n resetFlags();\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new School(title, address, contactInfo, ltiEnabled);\n let success = await SchoolService.update(school.id, payload);\n setDataInTransit(false);\n if (success) {\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const addNewSchool = async e => {\n e.preventDefault();\n resetFlags();\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new School(title, address, contactInfo, ltiEnabled);\n let success = await SchoolService.create(payload);\n setDataInTransit(false);\n if (success) {\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const showApiCredentials = () => {\n if (school && school.ltiEnabled) {\n return (\n
    \n API Key\n \n API Secret\n \n
    \n );\n }\n };\n\n const showSaveOrUpdateButton = () => {\n if (school) {\n return (\n updateSchool(e)}\n >\n Update{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n } else {\n return (\n addNewSchool(e)}\n >\n Create{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n }\n };\n\n return (\n \n \n \n

    \n {\" \"}\n {school ? `${school.title} School` : `New School`}\n

    \n
    \n
    \n \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n
    \n
    \n
    \n School Name (*)\n setTitle(e.target.value)}\n />\n
    \n
    \n School Address\n setAddress(e.target.value)}\n />\n
    \n
    \n School Contact\n setContactInfo(e.target.value)}\n />\n
    \n\n
    \n setLtiEnabled(e.target.checked)}\n />\n {showApiCredentials()}\n
    \n
    \n\n (*) Required\n
    \n\n
    \n
    \n \n School created Successfully!\n
    \n
    \n
    \n \n {showSaveOrUpdateButton()}\n resetAndHide()}\n >\n Close\n \n \n \n );\n};\n\nexport default SchoolModal;\n","import React from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport * as Icons from 'react-bootstrap-icons';\nimport \"./confirmdeletemodal.css\";\n\nconst ConfirmDeleteModal = props => {\n const { show, onHide, onCancel, onProceed } = props;\n\n return (\n \n \n
    \n \n
    \n
    \n \n

    \n Are you sure you want to delete this item?{\" \"}\n This operation cannot be undone.\n

    \n
    \n \n \n \n \n \n );\n};\n\nexport default ConfirmDeleteModal;\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Alert, Spinner, Badge } from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport SchoolService from \"./../../../../../services/SchoolService\";\nimport SchoolModal from \"../../../../widgets/modals/instructor/SchoolModal\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport \"./panels.css\";\n\nconst SchoolsPanel = props => {\n const { SearchBar } = Search;\n\n const [schools, setSchools] = useState(null);\n const [showModal, setShowModal] = useState(false);\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showProgressAlert, setShowProgressAlert] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSucceedAlert, setShowSucceedAlert] = useState(false);\n const [currentSchool, setCurrentSchool] = useState(null);\n\n const failedResponseMessage =\n \"Error while attempting to remove school. Please try again.\";\n const succeedResponseMessage = \"School removed successfully.\";\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Schools\";\n (async() => {\n setSchools(await SchoolService.getAllFromRemote(true));\n })();\n }, []);\n\n const deleteSchool = async () => {\n setShowProgressAlert(true);\n const succeeded = await SchoolService.remove(currentSchool.id);\n setShowProgressAlert(false);\n if (succeeded) {\n setShowFailedAlert(false);\n setShowSucceedAlert(true);\n setSchools(await SchoolService.getAllFromRemote(true));\n } else {\n setShowFailedAlert(true);\n setShowSucceedAlert(false);\n }\n };\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteSchool();\n };\n\n const showDeleteWarning = id => {\n setCurrentSchool(\n schools.find(school => {\n return id === school.id;\n })\n );\n setShowWarningModal(true);\n };\n\n const editSchool = id => {\n const school = schools.find(school => {\n return id === school.id;\n });\n setCurrentSchool(school);\n setShowModal(true);\n };\n\n const createSchool = () => {\n setCurrentSchool(null);\n setShowModal(true);\n };\n\n const render = () => {\n\n const columns = [\n {\n dataField: \"name\",\n text: \"Name\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"address\",\n text: \"Address\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"students\",\n text: \"Students\",\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"100px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n \n {row.students}\n \n

    \n );\n }\n },\n {\n dataField: \"instructors\",\n text: \"Instructors\",\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"100px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n \n {row.instructors}\n \n

    \n );\n }\n },\n {\n dataField: \"contact\",\n text: \"Contact\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n \n {row.contact}\n \n );\n }\n },\n {\n dataField: \"lti\",\n sort: true,\n text: \"LTI Enabled?\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return row.lti ? (\n \n ) : (\n `Not Enabled`\n );\n }\n },\n {\n dataField: \"status\",\n text: \"Status\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n editSchool(row.id)}\n >\n \n \n showDeleteWarning(row.id)}\n >\n \n \n
    \n );\n }\n }\n ];\n\n const schoolData = schools ? \n schools.map(school => {\n return {\n id: school.id,\n name: school.title,\n address: school.address,\n students: school.totalStudents,\n instructors: school.totalInstructors,\n lti: school.ltiEnabled,\n contact: school.contactInfo,\n status: school.status\n };\n }) : [];\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n
    \n );\n };\n\n const hideAndRefreshData = async () => {\n setShowModal(false);\n setSchools(await SchoolService.getAllFromRemote(true));\n };\n\n return (\n
    \n hideAndRefreshData()}\n school={currentSchool}\n />\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n\n
    \n

    \n Schools\n

    \n \n
    \n\n
    \n setShowProgressAlert(false)}\n dismissible\n >\n \n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n setShowSucceedAlert(false)}\n dismissible\n >\n {succeedResponseMessage}\n \n
    \n\n
    {render()}
    \n
    \n );\n};\n\nexport default SchoolsPanel;\n","export default class Instructor {\n constructor(firstName, lastName, email, mobile, title, school, classes, cloud9Access) {\n this.firstName = firstName;\n this.lastName = lastName;\n this.email = email;\n this.mobile = mobile;\n this.title = title;\n this.school = school;\n this.classes = classes;\n this.role = \"Instructor\";\n this.cloud9Access = cloud9Access;\n }\n\n getFirstName() {\n return this.firstName;\n }\n\n setFirstName(firstName) {\n this.firstName = firstName;\n }\n\n getLastName() {\n return this.lastName;\n }\n\n setLastName(lastName) {\n this.lastName = lastName;\n }\n\n getEmail() {\n return this.email;\n }\n\n setEmail(email) {\n this.email = email;\n }\n\n getMobile() {\n return this.mobile;\n }\n\n setMobile(mobile) {\n this.mobile = mobile;\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title) {\n this.title = title;\n }\n\n getSchool() {\n return this.school;\n }\n\n setSchool(school) {\n this.school = school;\n }\n\n getClasses() {\n return this.classes;\n }\n\n setClasses(classes) {\n this.classes = classes;\n }\n\n setRole(role) {\n this.role = role;\n }\n\n getRole() {\n return this.role;\n }\n\n getCloud9Access(){\n return this.cloud9Access;\n }\n\n setCloud9Access(cloud9Access) {\n this.cloud9Access = cloud9Access;\n }\n\n toString() {\n return JSON.stringify(this);\n }\n}\n","import React, { useState, useEffect } from \"react\";\nimport Select from \"react-select\";\nimport { Modal, Alert, Button, Spinner, Form } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Instructor from \"./../../../../payloads/Instructor\";\nimport StringUtils from \"./../../../../utils/StringUtils\";\nimport LimespringUtils from \"../../../../utils/LimespringUtils\";\nimport SchoolService from \"./../../../../services/SchoolService\";\nimport InstructorService from \"./../../../../services/InstructorService\";\n\nconst InstructorModal = props => {\n const { show, onHide, instructor, classes } = props;\n\n const [alertShow, setAlertShow] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [dataInTransit, setDataInTransit] = useState(false);\n\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [mobile, setMobile] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [school, setSchool] = useState(null);\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [enableCloud9Access, setEnableCloud9Access] = useState(false);\n\n const [showCredentialsReset, setShowCredentialsReset] = useState(false);\n const [schools, setSchools] = useState(null);\n const [disableSchool, setDisableSchool] = useState(false);\n const [selectedClasses, setSelectedClasses] = useState([]);\n const [emailError, setEmailError] = useState(\"\"); \n const [successMessage, setSuccessMessage] = useState(\n \"Instructor created successfully\"\n );\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n const failedResponseMessage =\n \"There was a problem creating instructor. Please try again.\";\n\n useEffect(() => {\n\n const load = async () => {\n \n setFirstName(instructor ? instructor.firstName : ``);\n setLastName(instructor ? instructor.lastName : ``);\n setEmail(instructor ? instructor.email : ``);\n setMobile(instructor ? instructor.mobile : ``);\n setTitle(instructor ? instructor.title : ``);\n setEnableCloud9Access(instructor && instructor.aws ? true : false);\n\n if(instructor && instructor.classes) {\n setSelectedClasses(instructor.classes.map(clazz => {\n return { value: clazz._id, label: clazz.title };\n }));\n }\n \n if (instructor && instructor.schools && instructor.schools.length > 0) {\n setSchool({ value: instructor.schools[0]._id, label: instructor.schools[0].title});\n }\n\n setSchools(await SchoolService.getAllFromRemote(false));\n }\n load();\n }, [instructor]);\n\n const resetAndHide = () => {\n resetFlags();\n resetFields();\n onHide();\n };\n\n const resetFields = () => {\n setFirstName(``);\n setLastName(``);\n setEmail(``);\n setMobile(``);\n setTitle(``);\n setPassword(``);\n setConfirmPassword(``);\n setSchool(null);\n setSelectedClasses([]);\n setEnableCloud9Access(false);\n setEmailError(\"\");\n };\n\n const resetFlags = () => {\n setAlertShow(false);\n setDataInTransit(false);\n setShowSuccess(false);\n setShowCredentialsReset(false);\n };\n\n const validateForm = () => {\n if (\n StringUtils.isEmpty(firstName) ||\n StringUtils.isEmpty(lastName) ||\n StringUtils.isEmpty(email)\n ) {\n setWrongInputMessage(\"All fields are required. Please review.\");\n return false;\n }\n\n if (!validateEmail(email)) {\n setWrongInputMessage(\"Invalid email format. Please enter a valid email.\");\n return false;\n }\n\n return true;\n };\n\n const updateInstructorPassword = async () => {\n setDataInTransit(true);\n let payload = { password: password, confirm: confirmPassword };\n let success = await InstructorService.regenerateCredentials(\n instructor.id,\n payload\n );\n setDataInTransit(false);\n if (!success) {\n setShowFailedAlert(true);\n return;\n }\n setSuccessMessage(\"Instructor updated successfully\");\n setShowSuccess(true);\n };\n\n const updateInstructor = async e => {\n e.preventDefault();\n\n //check if password has been updated\n if (showCredentialsReset) {\n return updateInstructorPassword();\n }\n\n resetFlags();\n\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new Instructor(\n firstName,\n lastName,\n email,\n mobile,\n title,\n school ? school.value : ``,\n selectedClasses ? selectedClasses.map(sc => sc.value) : [],\n enableCloud9Access\n );\n let success = await InstructorService.update(instructor.id, payload);\n setDataInTransit(false);\n if (success) {\n setSuccessMessage(\"Instructor updated successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const addNewInstructor = async e => {\n e.preventDefault();\n resetFlags();\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new Instructor(\n firstName,\n lastName,\n email,\n mobile,\n title,\n school ? school.value : ``,\n selectedClasses ? selectedClasses.map(sc => sc.value) : [],\n enableCloud9Access\n );\n\n let success = await InstructorService.create(payload);\n setDataInTransit(false);\n if (success) {\n setSuccessMessage(\"Instructor created successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const showSchoolsSelect = () => {\n if (schools) {\n\n const schoolOptions = schools.map(school => {\n return { value: school.id, label: school.title };\n });\n const defaultSchool = instructor && instructor.schools && instructor.schools.length > 0\n ? schoolOptions.find(school => school.value === instructor.schools[0]._id)\n : ``;\n\n return (\n setSchool(selectedOption)}\n options={schoolOptions}\n className=\"w-50\"\n isClearable={true}\n isDisabled={disableSchool}\n />\n );\n }\n };\n\n const showSaveOrUpdateButton = () => {\n if (instructor) {\n return (\n updateInstructor(e)}\n >\n Update{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n } else {\n return (\n addNewInstructor(e)}\n >\n Create{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n }\n };\n\n const renderClassLabels = () => {\n if (classes) {\n return classes.map(clazz => {\n return { value: clazz.id, label: clazz.title };\n });\n }\n };\n\n const validateEmail = (email) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleEmailChange = (e) => {\n const inputEmail = e.target.value;\n setEmail(inputEmail);\n if (!validateEmail(inputEmail)) {\n setEmailError(\"Invalid email format. Please enter a valid email.\");\n } else {\n setEmailError(\"\");\n }\n };\n \n\n return (\n resetAndHide()}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n id=\"instructor-modal\"\n backdrop=\"static\"\n >\n \n \n

    \n {\" \"}\n {instructor\n ? `${LimespringUtils.getUserFullName(instructor)}`\n : `New Instructor`}\n

    \n
    \n
    \n \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n
    \n \n \n setShowCredentialsReset(true)}\n >\n Reset Credentials\n \n
    \n
    \n First Name (*)\n setFirstName(e.target.value)}\n />\n
    \n
    \n Last Name (*)\n setLastName(e.target.value)}\n />\n
    \n
    \n Email (*)\n \n {emailError && {emailError}}\n
    \n
    \n Mobile (optional)\n setMobile(e.target.value)}\n />\n
    \n
    \n Title (optional)\n setTitle(e.target.value)}\n />\n
    \n
    \n Section (optional)\n setSelectedClasses(selectedOption)}\n options={renderClassLabels()}\n className=\"w-50\"\n isClearable={true}\n isMulti\n />\n
    \n
    \n School (optional)\n {showSchoolsSelect()}\n
    \n (*) Required\n \n\n
    \n Cloud9 Environment (optional)\n
    \n setEnableCloud9Access(e.target.checked)} \n checked={enableCloud9Access ? \"checked\": \"\"}/>\n
    \n
    \n\n \n
    \n setShowCredentialsReset(false)}\n >\n Back\n \n
    \n
    \n New Password\n setPassword(e.target.value)}\n />\n
    \n
    \n Confirm Password\n setConfirmPassword(e.target.value)}\n />\n
    \n \n \n\n
    \n
    \n \n {successMessage}\n
    \n
    \n
    \n \n {showSaveOrUpdateButton()}\n resetAndHide()}\n >\n Close\n \n \n \n );\n};\n\nexport default InstructorModal;\n","import React, { useState } from \"react\";\nimport \"./drawer.css\";\nimport { useEffect } from \"react\";\n\nconst Drawer = props => {\n const { show, onHide, children, title, emergent=false } = props;\n\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n setOpen(show);\n }, [show]);\n\n const closeDrawer = () => {\n setOpen(false);\n onHide();\n };\n\n return (\n
    \n \n
    \n closeDrawer()}>\n ×\n \n {title ? title : \"\"}\n
    \n {children}\n
    \n \n );\n};\n\nexport default Drawer;\n","import React, { useState, useEffect } from \"react\";\nimport RichTextEditor from \"react-rte\";\nimport $ from 'jquery';\nimport './texteditor.css';\n\nconst SimpleTextEditor = props => {\n const { onTextEditorUpdate, defaultText } = props;\n\n const [value, setValue] = useState(RichTextEditor.createEmptyValue());\n\n //transform DOM to avoid tab navigation on the RTE buttons!\n $('.unit-editor-wrapper button').attr('tabindex', '-1');\n $('.unit-editor-wrapper select').attr('tabindex', '-1');\n\n useEffect(() => {\n if (defaultText && defaultText !== \"\") {\n setValue(RichTextEditor.createValueFromString(defaultText, \"html\"));\n } else {\n setValue(RichTextEditor.createEmptyValue());\n }\n }, [defaultText]);\n\n const onEditorChange = val => {\n setValue(val);\n onTextEditorUpdate(val.toString(\"html\"));\n };\n\n return onEditorChange(val)}/>;\n};\n\nexport default SimpleTextEditor;\n","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport ReactCrop from \"react-image-crop\";\nimport \"./image-cropper.css\";\n\nconst ImageCropper = props => {\n const { result, thumbnail } = props;\n\n const defaultCropWidth = 300;\n const defaultCropHeight = 430;\n\n const [finished, setFinished] = useState(false);\n const [imageRef, setImageRef] = useState(null);\n const [src, setSrc] = useState(null);\n const [croppedImageUrl, setCroppedImageUrl] = useState(null);\n const [isCoverImageAvailable, setIsCoverImageAvailable] = useState(false);\n const [showCropBtn, setShowCropBtn] = useState(false);\n const [crop, setCrop] = useState({\n unit: \"px\",\n width: defaultCropWidth,\n height: defaultCropHeight,\n aspect: defaultCropWidth / defaultCropHeight\n });\n\n useEffect(() => {\n if (finished) {\n result(croppedImageUrl);\n }\n }, [finished]);\n\n //reloading once if there is a thumbnail!\n useEffect(() => {}, [thumbnail]);\n\n const onImageUploaded = e => {\n if (croppedImageUrl) {\n window.URL.revokeObjectURL(croppedImageUrl);\n }\n setIsCoverImageAvailable(false);\n setCroppedImageUrl(null);\n setShowCropBtn(true);\n\n if (e.target.files && e.target.files.length > 0) {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => {\n setSrc(reader.result);\n });\n reader.readAsDataURL(e.target.files[0]);\n }\n };\n\n const onImageLoaded = image => {\n if (\n image.naturalHeight < defaultCropHeight ||\n image.naturalWidth < defaultCropWidth\n ) {\n alert(\n `Uploaded image does not comply with dimension requirements. Width: ${defaultCropWidth}px Height:${defaultCropHeight}px`\n );\n setSrc(null);\n return false;\n }\n setImageRef(image);\n };\n\n const onCropChange = _crop => {\n /*\n setCrop({\n x: _crop.x,\n y: _crop.y,\n aspect: _crop.aspect,\n unit: _crop.unit,\n width: defaultCropWidth,\n height: defaultCropHeight\n });\n */\n setCrop(_crop);\n };\n\n const onCropComplete = _crop => {\n makeClientCrop(_crop);\n };\n\n const makeClientCrop = async _crop => {\n if (imageRef && _crop.width && _crop.height) {\n const _croppedImageUrl = await getCroppedImg(\n imageRef,\n _crop,\n \"newFile.jpeg\"\n );\n setCroppedImageUrl(_croppedImageUrl);\n setFinished(true);\n }\n };\n\n const getCroppedImg = function(image, _crop, fileName) {\n const canvas = document.createElement(\"canvas\");\n const scaleX = image.naturalWidth / image.width;\n const scaleY = image.naturalHeight / image.height;\n canvas.width = _crop.width;\n canvas.height = _crop.height;\n const ctx = canvas.getContext(\"2d\");\n\n ctx.drawImage(\n image,\n _crop.x * scaleX,\n _crop.y * scaleY,\n _crop.width * scaleX,\n _crop.height * scaleY,\n 0,\n 0,\n _crop.width,\n _crop.height\n );\n\n return new Promise((resolve, reject) => {\n canvas.toBlob(blob => {\n if (!blob) {\n console.error(\"Canvas is empty\");\n return;\n }\n blob.name = fileName;\n const fileUrl = window.URL.createObjectURL(blob);\n resolve(fileUrl);\n }, \"image/png\");\n });\n };\n\n const onCropBtnClick = () => {\n setSrc(null);\n setIsCoverImageAvailable(true);\n setShowCropBtn(false);\n };\n\n return (\n
    \n onImageUploaded(e)}\n className=\"pb-1\"\n />\n\n
    \n \n
    \n\n \n onImageLoaded(image)}\n onComplete={_crop => onCropComplete(_crop)}\n onChange={_crop => onCropChange(_crop)}\n />\n
    \n
    \n Section Cover Image\n
    \n \n * {defaultCropWidth}x{defaultCropHeight} px minimum size recommended\n \n
    \n \n );\n};\n\nexport default ImageCropper;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\n\nexport default {\n\n search: async (resource, text) => {\n const response = await new ApiService().post(ApiPath.SEARCH_ENDPOINT, {resource: resource, text: text});\n if(response && response.status === 200) { \n const results = response.data;\n return results;\n } \n return [];\n }\n}","import React, {useState, useEffect} from 'react';\nimport MultiSelect from \"@kenshooui/react-multi-select\";\nimport \"@kenshooui/react-multi-select/dist/style.css\";\nimport SearchService from './../../../services/SearchService';\nimport './multiselectpicker.css';\n\nconst MultiSelectPicker = (props) => {\n\n const { models, onSelectedOption, selectedModels, isMultiple=true, context=\"students\", \n contextCallback=()=>{}, filterValue=\"\", onFilterChange=()=>{}, updateServerSearchResults =()=>{}, searchOnEachCharacter = false } = props;\n\n const [items, setItems] = useState([]);\n const [localFilteredItems, setLocalFilteredItems] = useState([]);\n const [selectedItems, setSelectedItems] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n\n useEffect(() => {\n const filteredItems = convertModelsToItems(models).filter(item => \n item.label.toLowerCase().includes(filterValue.toLowerCase())\n );\n setItems(filteredItems);\n setLocalFilteredItems(filteredItems);\n setSelectedItems(convertModelsToItems(selectedModels));\n }, [selectedModels]);\n\n useEffect(()=>{\n const filteredItems = convertModelsToItems(models).filter(item => {\n const matches = item.label.toLowerCase().includes(filterValue.toLowerCase());\n return matches;\n });\n setItems(filteredItems);\n setLocalFilteredItems(filteredItems);\n setSelectedItems(convertModelsToItems(selectedModels));\n }, [models,filterValue]);\n\n const convertModelsToItems = (_models) => {\n if(!_models || _models.length === 0) {return [];}\n return _models.map((_model) => {\n return {id: _model._id, label: _model.title }\n });\n }\n\n const convertSearchModelsToItems = (_models) => {\n if(!_models || _models.length === 0) {return [];}\n\n return _models.map((_model) => {\n return {id: _model.id || _model._id, label: _model.fullName || _model.title}\n });\n }\n\n const handleChange = (_selectedItems) => {\n onSelectedOption(_selectedItems);\n const filteredItems = convertModelsToItems(models).filter(item =>\n item.label.toLowerCase().includes(filterValue.toLowerCase())\n );\n setItems(filteredItems);\n setSelectedItems(fixOrder(_selectedItems));\n\n onSelectedOption(_selectedItems);\n setSelectedItems(_selectedItems);\n };\n\n const fixOrder = (_selectedItems) => {\n if(selectedItems.length === 0) return _selectedItems;\n let items = [];\n _selectedItems.forEach(selectedItem => {\n const found = selectedItems.find(si => si.id === selectedItem.id);\n if(!found) items.push(selectedItem);\n });\n\n if(items.length > 0){\n const finalSelectedItems = selectedItems.concat(items);\n setSelectedItems(finalSelectedItems);\n return finalSelectedItems;\n } else if (items.length===0) {\n return _selectedItems;\n }\n\n return items;\n }\n\n \n\n const getServerSearchResponse = async (value) => {\n setIsLoading(true);\n try {\n const serverItems = await SearchService.search(context, value);\n updateServerSearchResults(serverItems);\n return serverItems;\n } finally {\n setIsLoading(false);\n }\n }\n\n const sortItemsWithSelectedFirst = () => {\n const filteredSelectedItems = selectedItems.filter(item =>\n items.some(filteredItem => filteredItem.id === item.id)\n );\n const nonSelectedItems = items.filter(item =>\n !filteredSelectedItems.some(selected => selected.id === item.id)\n );\n return filteredSelectedItems.concat(nonSelectedItems);\n };\n\n const handleKeyDown = (e) => {\n if (e.key === \"Enter\") {\n onFilterChange(inputValue);\n const localFilteredItems = convertModelsToItems(models).filter(item =>\n item.label.toLowerCase().includes(inputValue.toLowerCase())\n );\n setLocalFilteredItems(localFilteredItems);\n \n if (inputValue === \"\") {\n setItems(convertModelsToItems(models));\n setSelectedItems(convertModelsToItems(selectedModels));\n } else {\n setItems(localFilteredItems);\n \n getServerSearchResponse(inputValue).then(serverItems => {\n const res = convertSearchModelsToItems(serverItems);\n const combinedItems = [...localFilteredItems, ...res];\n const uniqueItems = Array.from(\n new Map(\n combinedItems.map(item => [item.id || item._id, item])\n ).values()\n );\n \n setItems(uniqueItems);\n });\n }\n }\n };\n \n \n \n\n const renderMultiSelect = () => {\n if(!items) { return ''; }\n\n const orderedItems = sortItemsWithSelectedFirst();\n\n return (\n <>\n {isLoading && (\n
    \n
    \n Loading items...\n
    \n )} handleChange(_selectedItems)} \n filterFunction={(value) => {\n console.log(\"Filter function invoked with value:\", value);\n setInputValue(value); \n return () => true; \n }}\n onKeyDown={handleKeyDown} \n />\n \n );\n }\n\n return (\n
    \n {renderMultiSelect()}\n
    \n );\n}\n \nexport default MultiSelectPicker;","export default class Class {\n\n constructor(title, description, thumbnail, instructors, students, startsOn, tags, units, courses, capture){\n this.title = title;\n this.description = description;\n this.thumbnail = thumbnail;\n this.instructors = instructors;\n this.students = students; //transient field\n this.startsOn = startsOn;\n this.tags = tags;\n this.units = units;\n this.courses = courses;\n this.capture = capture; //transient field\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getDescription() {\n return this.description;\n }\n\n setDescription(description){\n this.description = description;\n }\n\n getThumbnail() {\n return this.thumbnail;\n }\n\n setThumbnail(thumbnail){\n this.thumbnail = thumbnail;\n }\n\n getInstructors() {\n return this.instructors;\n }\n\n setInstructors(instructors){\n this.instructors = instructors;\n }\n\n getStudents() {\n return this.students;\n }\n\n setStudents(students){\n this.students = students;\n }\n\n getStartsOn() {\n return this.startsOn;\n }\n\n setStartsOn(startsOn){\n this.startsOn = startsOn;\n }\n\n getTags() {\n return this.tags;\n }\n\n setTags(tags){\n this.tags = tags;\n }\n\n getUnits() {\n return this.units;\n }\n\n setUnits(units){\n this.units = units;\n }\n\n getCourses() {\n return this.courses;\n }\n\n setCourses(courses){\n this.courses = courses;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, { useState, useEffect, useCallback } from \"react\";\nimport Select from \"react-select\";\nimport AsyncSelect from \"react-select/async\";\nimport { Modal, Alert, Button, Spinner, Form } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Student from \"./../../../../payloads/Student\";\nimport StringUtils from \"./../../../../utils/StringUtils\";\nimport LimespringUtils from \"../../../../utils/LimespringUtils\";\nimport StudentService from \"./../../../../services/StudentService\";\nimport SearchService from \"./../../../../services/SearchService\";\nimport ClassService from \"./../../../../services/ClassService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport styles from './sm.css';\n\nconst StudentModal = props => {\n const { show, onHide, onDismiss, student, classes, schools, onUpdate=(()=> {}) } = props;\n\n const [alertShow, setAlertShow] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [dataInTransit, setDataInTransit] = useState(false);\n\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [mobile, setMobile] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [school, setSchool] = useState(null);\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [selectedClasses, setSelectedClasses] = useState([]);\n const [enableCloud9Access, setEnableCloud9Access] = useState(false);\n\n const [showCredentialsReset, setShowCredentialsReset] = useState(false);\n const [disableSchool, setDisableSchool] = useState(false);\n const [timeMultiplier, setTimeMultiplier] = useState(\"0\");\n\n const [loadingClasses, setLoadingClasses] = useState(false); \n\n const [localClasses, setLocalClasses] = useState(classes || []);\n\n const [searchInput, setSearchInput] = useState(\"\");\n const [menuOpen, setMenuOpen] = useState(false);\n\n const [defaultSchool, setDefaultSchool] = useState(null);\n const [schoolOptions, setSchoolOptions] = useState([]);\n const [renderSchool, setRenderSchool] = useState(false);\n\n const [emailError, setEmailError] = useState(\"\");\n\n const [successMessage, setSuccessMessage] = useState(\n \"Student created successfully\"\n );\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n const failedResponseMessage =\n \"There was a problem creating student. Please try again.\";\n\n useEffect(() => {\n if (show) {\n setFirstName(student ? student.firstName : ``);\n setLastName(student ? student.lastName : ``);\n setEmail(student ? student.email : ``);\n setMobile(student ? student.mobile : ``);\n setTitle(student ? student.title : ``);\n setSchool(student ? student.schools[0] : ``);\n setEnableCloud9Access(student && student.aws ? true: false);\n setTimeMultiplier(student && student.conditions && student.conditions.length > 0 ? student.conditions[0].value : '0')\n setSearchInput(\"\"); \n setMenuOpen(false);\n\n const user = ProfileService.get();\n if(schools && schools.length > 0) {\n const _schoolOptions = schools.map(school => { return { value: school.id, label: school.title }});\n setSchoolOptions(_schoolOptions);\n\n let firstSchool = null;\n if(user.schools && user.schools.length > 0){\n //grab the first one only\n firstSchool = _schoolOptions.find(school => school.value === user.schools[0])\n setDefaultSchool(firstSchool);\n setSchool(firstSchool);\n }\n\n if(student){\n if(student.schools && student.schools.length > 0){\n firstSchool = _schoolOptions.find(school => school.value === student.schools[0]._id)\n setDefaultSchool(firstSchool);\n setSchool(firstSchool);\n }\n }\n\n setRenderSchool(true);\n }\n\n } else {\n resetFields(); \n }\n if (show && (!classes || classes.length === 0) && !loadingClasses) {\n setLoadingClasses(true);\n ClassService.getAllFromRemote()\n .then(classList => {\n setLocalClasses(classList);\n if (student) {\n const studentClasses = classList.filter(c => \n c.students && c.students.find(s => s.id === student.id)\n );\n setSelectedClasses(\n studentClasses.map(clazz => ({\n value: clazz.id || clazz._id,\n label: clazz.title\n }))\n );\n }\n onUpdate();\n })\n .catch(error => {\n console.error(\"Error loading classes\", error);\n })\n .finally(() => setLoadingClasses(false));\n } else if (student && classes && classes.length > 0) {\n setLocalClasses(classes);\n\n if (student.classes && student.classes.length >0) {\n let studentClassesToBeDisplayed = student.classes.map(clazz => {\n return { value: clazz._id, label: clazz.title };\n });\n setSelectedClasses(studentClassesToBeDisplayed);\n } else {\n setSelectedClasses([]);\n }\n } else if (classes && classes.length > 0){\n setSelectedClasses([]);\n setLocalClasses(classes);\n }\n\n if(!student) {\n setPassword('');\n setEmail('');\n }\n\n }, [student, show, classes]);\n\n const resetAndHide = () => {\n resetFlags();\n resetFields();\n onHide();\n };\n\n const resetFields = () => {\n setFirstName(``);\n setLastName(``);\n setEmail(``);\n setMobile(``);\n setTitle(``);\n setSchool(null);\n setPassword(``);\n setConfirmPassword(``);\n setSelectedClasses([]);\n setTimeMultiplier('0');\n setEnableCloud9Access(false);\n setSearchInput('');\n setMenuOpen(false);\n setEmailError(\"\");\n setShowFailedAlert(false);\n setRenderSchool(false);\n setDefaultSchool(null);\n setSchoolOptions([]);\n // setSelectedClasses([]);\n };\n\n const resetFlags = () => {\n setAlertShow(false);\n setDataInTransit(false);\n setShowSuccess(false);\n setShowCredentialsReset(false);\n };\n\n const validateForm = () => {\n if (\n StringUtils.isEmpty(firstName) ||\n StringUtils.isEmpty(lastName) ||\n StringUtils.isEmpty(email) ||\n !school || \n StringUtils.isEmpty(school.value)\n \n ) {\n setWrongInputMessage(\"All fields are required. Please review.\");\n return false;\n }\n\n if (!validateEmail(email)) {\n setWrongInputMessage(\"Invalid email format. Please enter a valid email.\");\n return false;\n }\n\n return true;\n };\n\n const updateStudentPassword = async () => {\n setDataInTransit(true);\n let payload = { password: password, confirm: confirmPassword };\n let success = await StudentService.regenerateCredentials(\n student.id,\n payload\n );\n setDataInTransit(false);\n if (!success) {\n setShowFailedAlert(true);\n return;\n }\n setSuccessMessage(\"Student updated successfully\");\n setShowSuccess(true);\n };\n\n const handleInputChange = (inputValue, action) => {\n if (action.action === \"input-change\") {\n setSearchInput(inputValue);\n }\n };\n\n const handleImmediateSearch = useCallback(async (textInput) => {\n try {\n if (textInput.length >= 2) { \n setLoadingClasses(true);\n const result = await SearchService.search(\"classes\", textInput);\n setLocalClasses(result);\n setLoadingClasses(false);\n } else {\n await ClassService.getAllFromRemote()\n .then(classList => {\n setLocalClasses(classList);\n })\n .catch(error => {\n console.error(\"Error loading classes\", error);\n })\n .finally(() => setLoadingClasses(false));\n\n }\n } catch (error) {\n console.error(\"Error fetching sections:\", error);\n } finally {\n setLoadingClasses(false); \n\n }\n }, []);\n\n const handleChange = (selectedOption) => {\n setSelectedClasses(selectedOption); \n setMenuOpen(false);\n };\n\n const handleMenuOpen = () => {\n setMenuOpen(true); \n };\n \n const handleMenuClose = () => {\n setMenuOpen(false); \n };\n\n const updateStudent = async e => {\n e.preventDefault();\n //check if password has been updated\n if (showCredentialsReset) {\n return updateStudentPassword();\n }\n\n resetFlags();\n\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new Student(\n firstName,\n lastName,\n email,\n mobile,\n title,\n school ? school.value : ``,\n selectedClasses ? selectedClasses.map(sc => sc.value) : [],\n timeMultiplier != '0' ? buildCondition() : [],\n enableCloud9Access\n );\n let success = await StudentService.update(student.id, payload);\n setDataInTransit(false);\n if (success) {\n onUpdate();\n setSuccessMessage(\"Student updated successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n //TODO we should identify conditions\n //based on their names!\n const buildCondition = () => {\n return [{\n name: 'extratime',\n value: timeMultiplier\n }];\n }\n\n const addNewStudent = async e => {\n e.preventDefault();\n resetFlags();\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new Student(\n firstName,\n lastName,\n email,\n mobile,\n title,\n school ? school.value : ``,\n selectedClasses ? selectedClasses.map(sc => sc.value) : [],\n timeMultiplier != '0' ? buildCondition() : [],\n enableCloud9Access\n );\n let success = await StudentService.create(payload);\n setDataInTransit(false);\n if (success) {\n setSuccessMessage(\"Student created successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const showSchoolsSelect = () => {\n if(!renderSchool) return <>;\n return (\n setSchool(selectedOption)}\n options={schoolOptions}\n className=\"w-50\"\n isClearable={true}\n isDisabled={disableSchool}\n />\n );\n };\n\n const renderClassLabels = () => {\n return localClasses.map(clazz => ({key:clazz.id || clazz._id, value: clazz.id || clazz._id, label: clazz.title }));\n };\n\n const showExtraTimeMultiplier = () => {\n return
    \n Time multiplier\n
    \n setTimeMultiplier(e.target.value)}>\n \n \n \n \n \n \n \n \n \n
    \n
    ;\n }\n\n const showSaveOrUpdateButton = () => {\n if (student) {\n return (\n updateStudent(e)}\n >\n Update{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n } else {\n return (\n addNewStudent(e)}\n >\n Create{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n }\n };\n\n const validateEmail = (email) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleEmailChange = (e) => {\n const inputEmail = e.target.value;\n setEmail(inputEmail);\n if (!validateEmail(inputEmail)) {\n setEmailError(\"Invalid email format. Please enter a valid email.\");\n } else {\n setEmailError(\"\");\n }\n };\n\n return (\n {\n resetFields();\n onDismiss();\n }\n }\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n backdrop=\"static\"\n className={styles.modalContent}\n >\n \n \n

    \n {\" \"}\n {student\n ? `${LimespringUtils.getUserFullName(student)}`\n : `New Student`}\n

    \n
    \n
    \n \n \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n
    \n \n \n setShowCredentialsReset(true)}\n >\n Reset Credentials\n \n
    \n
    \n First Name (*)\n setFirstName(e.target.value)}\n />\n
    \n \n
    \n Last Name (*)\n setLastName(e.target.value)}\n />\n
    \n
    \n Email (*)\n \n {emailError && {emailError}}\n
    \n
    \n Mobile (optional)\n setMobile(e.target.value)}\n />\n
    \n
    \n Title (optional)\n setTitle(e.target.value)}\n />\n
    \n
    \n Allow Extra Time on Assessments (Optional)\n {showExtraTimeMultiplier()}\n
    \n
    \n School (*)\n {showSchoolsSelect()}\n
    \n
    {\n if (e.key === \"Enter\") { \n setSearchInput(e.target.value);\n handleImmediateSearch(e.target.value);\n }\n }}>\n Section (optional)\n {loadingClasses ? (\n \n ) : (\n <>\n setSelectedClasses(selectedOption)}\n options={renderClassLabels()} \n onInputChange={handleInputChange}\n inputValue={searchInput}\n isLoading={loadingClasses} \n menuIsOpen={menuOpen}\n onMenuOpen={handleMenuOpen} \n onMenuClose={handleMenuClose}\n placeholder=\"Search and press Enter...\"\n noOptionsMessage={() => (loadingClasses ? \"Loading...\" : \"Search and press Enter...\")}\n className=\"w-50\"\n isClearable={true}\n /> \n \n )}\n
    \n\n
    \n Cloud9 Environment (optional)\n
    \n setEnableCloud9Access(e.target.checked)} \n checked={enableCloud9Access ? \"checked\": \"\"}/>\n
    \n
    \n\n (*) Required\n \n\n \n
    \n setShowCredentialsReset(false)}\n >\n Back\n \n
    \n
    \n New Password\n setPassword(e.target.value)}\n />\n
    \n
    \n Confirm Password\n setConfirmPassword(e.target.value)}\n />\n
    \n \n \n\n
    \n
    \n \n {successMessage}\n
    \n
    \n \n
    \n \n {showSaveOrUpdateButton()}\n resetAndHide()}\n >\n Close\n \n \n \n );\n};\n\nexport default StudentModal;\n","export default class Course {\n\n constructor(title, description, units, school){\n this.title = title;\n this.description = description;\n this.plot = \"\";\n this.type = \"COURSE\";\n this.tags = [];\n this.units = units;\n this.schools = school ? [school] : []\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getDescription() {\n return this.description;\n }\n\n setDescription(description){\n this.description = description;\n }\n\n getPlot() {\n return this.plot;\n }\n\n setPlot(plot){\n this.plot = plot;\n }\n\n getType() {\n return this.type;\n }\n\n setType(type){\n this.type = type;\n }\n\n getTags() {\n return this.tags;\n }\n\n setTags(tags){\n this.tags = tags;\n }\n\n getUnits() {\n return this.units;\n }\n\n setUnits(units){\n this.units = units;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","export default class Unit {\n\n constructor(title, description, instructors, lectures, assessments, optional=false, placement=false, school){\n this.title = title;\n this.description = description;\n this.thumbnail = \"\";\n this.instructors = instructors;\n this.tags = [];\n this.type = \"UNIT\";\n this.lectures = lectures;\n this.assessments = assessments;\n this.optional = optional;\n this.placement = placement;\n this.schools = school ? [school]: []; \n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getDescription() {\n return this.description;\n }\n\n setDescription(description){\n this.description = description;\n }\n\n getThumbnail() {\n return this.thumbnail;\n }\n\n setThumbnail(thumbnail){\n this.thumbnail = thumbnail;\n }\n\n getInstructors() {\n return this.instructors;\n }\n\n setInstructors(instructors){\n this.instructors = instructors;\n }\n\n getInstructors() {\n return this.instructors;\n }\n\n setType(type){\n this.type = type;\n }\n\n getTags() {\n return this.tags;\n }\n\n setTags(tags){\n this.tags = tags;\n }\n\n getLectures() {\n return this.lectures;\n }\n\n setLectures(lectures){\n this.lectures = lectures;\n }\n\n getAssessments() {\n return this.assessments;\n }\n\n setAssessments(assessments){\n this.assessments = assessments;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, {useRef} from 'react';\nimport { Button } from 'react-bootstrap';\nimport ContentEditable from 'react-contenteditable'\nimport * as Icons from 'react-bootstrap-icons';\nimport './transcript-editor.css';\n\nconst TranscriptEditor = (props) => {\n\n const { onTextEditorUpdate, text } = props;\n\n const editableArea = useRef(null);\n\n const changeHandler = () => {\n onTextEditorUpdate(`${editableArea.current.innerHTML}`);\n }\n\n //may not be supported by safari!\n const applySection = () => {\n document.execCommand('insertParagraph'); \n }\n\n const applyBold = () => {\n document.execCommand('bold');\n }\n\n const applyItalics = () => {\n document.execCommand('italic');\n }\n\n const applyUnderline = () => {\n document.execCommand('underline');\n }\n\n const applyUnorderedList = () => {\n document.execCommand('insertUnorderedList');\n }\n\n const applyCallout = () => {\n document.execCommand('insertParagraph');\n }\n\n return (\n
    \n
    \n \n \n \n \n
    \n\n changeHandler()} // handle innerHTML change\n className=\"transcript-editor-editable\"\n />\n
    \n );\n}\n \nexport default TranscriptEditor;","export default class Lecture {\n\n constructor(title, description, duration, thumbnail, instructors, markers, assessments, capture, url, transcript, difficulty, scope, isYoutubeVideo, youtubeUrl, school) {\n this.title = title;\n this.description = description;\n this.thumbnail = thumbnail;\n this.duration = duration;\n this.captions = [];\n this.transcript = transcript;\n this.difficulty = difficulty;\n this.chapters = [];\n this.instructors = instructors || [];\n this.markers = markers || [];\n this.assessments = assessments || [];\n this.capture = capture; //transient field\n this.url = url;\n this.scope = scope;\n this.isYoutubeVideo = isYoutubeVideo;\n this.youtubeUrl = youtubeUrl;\n this.schools = school ? [school] : []\n }\n \n getTitle() {\n return this.title;\n }\n \n setTitle(title) {\n this.title = title;\n }\n\n getDifficulty() {\n return this.difficulty;\n }\n \n setDifficulty(difficulty) {\n this.difficulty = difficulty;\n }\n \n getDescription() {\n return this.description;\n }\n \n setDescription(description) {\n this.description = description;\n }\n \n getUrl() {\n return this.url;\n }\n \n setUrl(url) {\n this.url = url;\n }\n\n getDuration() {\n return this.duration;\n }\n\n setDuration(duration) {\n this.duration = duration;\n }\n\n getThumbnail() {\n return this.thumbnail;\n }\n\n setThumbnail(thumbnail) {\n this.thumbnail = thumbnail;\n }\n\n getCaptions() {\n return this.captions;\n }\n\n setCaptions(captions) {\n this.captions = captions;\n }\n\n getTranscript() {\n return this.transcript;\n }\n\n setTranscripts(transcript) {\n this.transcript = transcript;\n }\n\n getChapters() {\n return this.chapters;\n }\n\n setChapters(chapters) {\n this.chapters = chapters;\n }\n\n getInstructors() {\n return this.instructors;\n }\n\n setInstructors(instructors) {\n this.instructors = instructors;\n }\n\n getMarkers() {\n return this.markers;\n }\n\n setMarkers(markers) {\n this.markers = markers;\n }\n\n getAssessments() {\n return this.assessments;\n }\n\n setAssessments(assessments) {\n this.assessments = assessments;\n }\n\n getCapture() {\n return this.capture;\n }\n\n setCapture(capture) {\n this.capture = capture;\n }\n\n getScope() {\n return this.scope;\n }\n\n setScope(scope) {\n this.scope = scope;\n }\n\n getIsYoutubeVideo() {\n return this.isYoutubeVideo;\n }\n\n setIsYoutubeVideo(isYoutubeVideo) {\n this.isYoutubeVideo = isYoutubeVideo;\n }\n\n getYoutubeUrl() {\n return this.youtubeUrl;\n }\n\n setYoutubeUrl(youtubeUrl) {\n this.youtubeUrl = youtubeUrl;\n }\n\n getSchools() {\n return this.schools;\n }\n\n setSchools(_schools) {\n this.schools = _schools ? [_schools] : []\n }\n\n \n toString() {\n return JSON.stringify(this);\n }\n }\n ","import { v4 as uuidv4 } from \"uuid\";\n\nexport default class Track {\n\n constructor(){\n this._id = uuidv4();\n this.timestamp = '00:00';\n this.type = 'PLAIN';\n this.content ='';\n }\n\n getId(){\n return this._id;\n }\n\n setId(id){\n this._id = id;\n }\n\n getTimestamp(){\n return this.timestamp;\n }\n\n setTimestamp(timestamp){\n this.timestamp = timestamp;\n }\n\n getType(){\n return this.type;\n }\n\n setType(type){\n this.type = type;\n }\n\n getContent(){\n return this.content;\n }\n\n setContent(content){\n this.content = content;\n }\n}","export default class Transcript {\n\n constructor(status, type, captionUrl, tracks){\n this.status = status;\n this.type = type;\n this.captionUrl = captionUrl;\n this.tracks = tracks;\n }\n\n getLectureId(){\n return this.lectureId;\n }\n\n setLectureId(lectureId){\n this.lectureId = lectureId;\n }\n\n getStatus(){\n return this.status;\n }\n\n setStatus(status){\n this.status = status;\n }\n\n getType(){\n return this.type;\n }\n\n setType(type){\n this.type = type;\n }\n\n getCaptionUrl(){\n return this.captionUrl;\n }\n\n setCaptionUrl(captionUrl){\n this.captionUrl = captionUrl;\n }\n\n getTracks(){\n return this.tracks;\n }\n\n setTracks(tracks){\n this.tracks = tracks;\n }\n}","import React, {useEffect, useState, useRef} from 'react';\nimport * as Icons from 'react-bootstrap-icons';\nimport './videothumbnail.css';\n\nconst ThumbnailCreator = (props) => {\n\n const {originalThumbnail='', snapshotAtTime, videoUrl, width, height, onGenerated} = props;\n\n const videoEl = useRef(null);\n const canvasEl = useRef(null);\n\n const [metadataLoaded, setMetadataLoaded] = useState(false);\n const [dataLoaded, setDataLoaded] = useState(false);\n const [suspended, setSuspended] = useState(false);\n const [seeked, setSeeked] = useState(false);\n\n const [snapshot, setSnapshot] = useState(originalThumbnail);\n\n useEffect(() => {\n if(metadataLoaded && dataLoaded && suspended){\n videoEl.current.currentTime = snapshotAtTime;\n getSnapshot();\n }\n }, [snapshotAtTime]);\n\n useEffect(() => {\n if(seeked) getSnapshot()\n }, [seeked]);\n\n useEffect(() => {\n setSnapshot(originalThumbnail);\n }, [originalThumbnail]);\n\n /**\n * Create a canvas and video element to \"draw\" the\n * image, then convert it to a data url\n */\n const getSnapshot = () => {\n try {\n const video = videoEl.current;\n const canvas = canvasEl.current;\n canvas.height = video.videoHeight;\n canvas.width = video.videoWidth;\n\n // resize thumbnail or no ?\n if (!width || !height) {\n canvas.getContext('2d').drawImage(video, 0, 0);\n } else {\n canvas.height = height;\n canvas.width = width;\n canvas.getContext('2d').drawImage(video,\n 0, 0, // Start at 0/0 pixels from the left and the top of the image (crop),\n video.videoWidth, video.videoHeight, // Get a (w * h) area from the source image (crop),\n 0, 0, // Place the result at 0, 0 in the canvas,\n width, height // With as width / height: 100 * 100 (scale)\n ); \n }\n\n const thumbnail = canvas.toDataURL('image/png');\n\n setSnapshot(thumbnail);\n\n setSeeked(false);\n\n // pass the thumbnail url back to parent component's thumbnail handler (if any)\n onGenerated(thumbnail);\n\n } catch (e) {\n console.error(e);\n }\n }\n\n const showHiddenUtils = () => {\n return (\n
    \n \n \n
    \n );\n }\n\n const renderThumbnail = () => {\n if(!snapshot || snapshot === ''){\n return (
    \n \n No Thumbnail Selected\n ** Click on the video and then scrub the video timeline to change the thumbnail\n
    );\n } else {\n return (\"video);\n }\n }\n\n return (\n <>\n
    \n {renderThumbnail()}\n
    \n {showHiddenUtils()}\n \n );\n}\n \nexport default ThumbnailCreator;","import { v4 as uuidv4 } from \"uuid\";\n\nexport default class Marker {\n\n constructor(){\n this.assessment = '';\n this.asset = '';\n this.type = 'MARKER';\n this.label = '';\n this.priority = 1;\n this.cuePoint = 0;\n this.buttonText = '';\n this.required = false;\n this.trigger = 'ANIMATION';\n this.showForInSecs = 0;\n }\n\n getId(){\n return this._id;\n }\n\n setId(id){\n this._id = id;\n }\n\n getAssessment(){\n return this.assessment;\n }\n\n setAssessment(assessment){\n this.assessment = assessment;\n }\n\n getAsset(){\n return this.asset;\n }\n\n setAsset(asset){\n this.asset = asset;\n }\n\n getLabel(){\n return this.label;\n }\n\n setLabel(label){\n this.label = label;\n }\n\n getPriority(){\n return this.priority;\n }\n\n setPriority(priority){\n this.priority = priority;\n }\n\n getCuePoint(){\n return this.cuePoint;\n }\n\n setCuePoint(cuePoint){\n this.cuePoint = cuePoint;\n }\n\n getButtonText(){\n return this.buttonText;\n }\n\n setButtonText(buttonText){\n this.buttonText = buttonText;\n }\n \n getRequired(){\n return this.required;\n }\n\n setRequired(required){\n this.required = required;\n }\n\n getTrigger(){\n return this.trigger;\n }\n\n setTrigger(trigger){\n this.trigger = trigger;\n }\n \n getShowForInSecs(){\n return this.showForInSecs;\n }\n\n setShowForInSecs(showForInSecs){\n this.showForInSecs = showForInSecs;\n }\n \n toString() {\n return JSON.stringify(this);\n }\n}","import React from \"react\";\nimport { Dropdown, FormControl, InputGroup } from \"react-bootstrap\";\nimport \"./panelsearchbar.css\";\n\nconst PanelSearchBar = props => {\n const { fullWidth=false, onChange } = props;\n\n const OnFilterInput = () => {\n onChange(document.getElementById(\"search-input-txt\").value);\n };\n return (\n
    \n
    \n \n OnFilterInput()}\n />\n \n
    \n
    \n );\n};\n\nexport default PanelSearchBar;\n","export default class Asset {\n\n constructor(title, description, url, tags, type, extension, capture){\n this.title = title;\n this.description = description;\n this.url = url;\n this.tags = tags;\n this.type = type;\n this.extension = extension;\n this.capture = capture; //transient field\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getDescription() {\n return this.description;\n }\n\n setDescription(description){\n this.description = description;\n }\n\n getUrl() {\n return this.url;\n }\n\n setUrl(url){\n this.url = url;\n }\n\n getTags() {\n return this.tags;\n }\n\n setTags(tags){\n this.tags = tags;\n }\n\n getType() {\n return this.type;\n }\n\n setType(type){\n this.type = type;\n }\n\n getExtension() {\n return this.extension;\n }\n\n setExtension(extension){\n this.extension = extension;\n }\n\n getCapture() {\n return this.capture;\n }\n\n setCapture(capture){\n this.capture = capture;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, { useState } from \"react\";\nimport { Spinner, Button } from \"react-bootstrap\";\nimport checkIcon from \"./../../../images/check.svg\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport AssetService from \"./../../../services/AssetService\";\nimport ProfileService from \"./../../../services/ProfileService\";\n\nimport \"./libraryitem.css\";\n\nconst LibraryItem = props => {\n const {\n asset,\n show,\n filter,\n onSelected,\n onUnselected,\n selectable = false,\n callback,\n showDelete = true\n } = props;\n\n const [showLoadingOverlay, setShowLoadingOverlay] = useState(false);\n const [showCompletedOverlay, setShowCompletedOverlay] = useState(false);\n const [showDescriptionOverlay, setShowDescriptionOverlay] = useState(false);\n const [showSelectedOverlay, setShowSelectedOverlay] = useState(false);\n const [inputValue, setInputValue] = useState(asset.title);\n const [showInput, setShowInput] = useState(false);\n\n const previewItem = () => {\n switch (asset.type) {\n case 'IMAGE':\n let newWindow = window.open(\"\", \"_blank\");\n newWindow.document.write(`\"File\"`);\n break;\n default:\n window.open(asset.url, \"_blank\");\n }\n };\n\n const saveTextInput = async (id, e) => {\n if (e && e.key === \"Enter\") {\n await AssetService.update(id, { title: inputValue });\n setShowInput(false);\n }\n\n if (!e) {\n await AssetService.update(id, { title: inputValue });\n setShowInput(false);\n }\n };\n\n const checkIsEditable = (asset) => {\n if(!asset) { return true; }\n const profile = ProfileService.get();\n if(profile.role === 'Instructor'){\n if(asset.createdBy !== profile._id) {\n return true;\n }\n }\n return false;\n }\n\n const deleteItem = async (id) => {\n callback(id);\n };\n\n const handleActualTextInput = value => {\n setInputValue(value);\n };\n const selectableHandler = () => {\n setShowSelectedOverlay(!showSelectedOverlay);\n if (selectable) {\n if (showSelectedOverlay) {\n onUnselected(asset._id);\n } else {\n onSelected(asset._id);\n }\n }\n };\n\n return (\n setShowDescriptionOverlay(true)}\n onMouseOut={() => setShowDescriptionOverlay(false)}\n onClick={() => (selectable ? selectableHandler() : \"\")}\n >\n
    \n \n
    \n
    \n \n
    \n Select this one\n
    \n
    \n \n \n {\n handleActualTextInput(e.target.value);\n }}\n onBlur={() => {\n saveTextInput(asset._id, null);\n }}\n onKeyDown={e => {\n saveTextInput(asset._id, e);\n }}\n >\n \n {inputValue}\n \n

    Type: {asset.type}

    \n
    \n \n \n deleteItem(asset._id)}\n >\n \n \n
    \n \n
    \n \n
    \n \n );\n};\n\nexport default LibraryItem;\n","export default {\n\n getExtension: (name) => {\n if(name === null || name === undefined) { return false;}\n const parts = name.split('.');\n if(parts && parts.length > 0) {\n return parts[parts.length - 1];\n }\n return '';\n }\n}","import { v4 as uuidv4 } from \"uuid\";\n\nexport default class Question {\n\n constructor(){\n this._id = uuidv4();\n this.statement = '';\n this.category = '';\n this.subcategory = '';\n this.group ='';\n this.tags = [];\n this.difficulty = 0;\n this.hint = '';\n this.hintMedia = '';\n this.explanation = '';\n this.explanationMedia = '';\n this.points = 0;\n this.stars = 0;\n this.multimedia = '';\n this.choices = [];\n this.context = 'MATH_TEXT';\n this.input = '';\n this.subtype = '';\n this.steps = [];\n this.keyboardLayout = [];\n this.type = 'QUESTION';\n }\n\n getId(){\n return this._id;\n }\n\n setId(id){\n this._id = id;\n }\n\n getInput(){\n return this.input;\n }\n\n setInput(input){\n this.input = input;\n }\n\n getStatement(){\n return this.statement;\n }\n\n setStatement(statement){\n this.statement = statement;\n }\n\n getCategory(){\n return this.category;\n }\n\n setCategory(category){\n this.category = category;\n }\n\n getSubcategory(){\n return this.subcategory;\n }\n\n setSubcategory(subcategory){\n this.subcategory = subcategory;\n }\n\n getTags(){\n return this.tags;\n }\n\n setTags(tags){\n this.tags = tags;\n }\n\n addTag(tag) {\n this.tags.push(tag);\n }\n\n getDifficulty(){\n return this.difficulty;\n }\n\n setDifficulty(difficulty){\n this.difficulty = difficulty;\n }\n\n getHint(){\n return this.hint;\n }\n\n setHint(hint){\n this.hint = hint;\n }\n\n getExplanation(){\n return this.explanation;\n }\n\n setExplanation(explanation){\n this.explanation = explanation;\n }\n\n getPoints(){\n return this.points;\n }\n\n setPoints(points){\n this.points = points;\n }\n\n getStars(){\n return this.stars;\n }\n\n setStars(stars){\n this.stars = stars;\n }\n\n getMultimedia(){\n return this.multimedia;\n }\n\n setMultimedia(multimedia){\n this.multimedia = multimedia;\n }\n\n getChoices(){\n return this.choices;\n }\n\n setChoices(choices){\n this.choices = choices;\n }\n\n addChoice(choice){\n this.choices.push(choice);\n }\n\n getSubtype(){\n return this.subtype;\n }\n\n setSubtype(subtype){\n this.subtype = subtype;\n }\n\n getType(){\n return this.type;\n }\n\n setType(type){\n this.type = type;\n }\n\n getGroup(){\n return this.group;\n }\n\n setGroup(group){\n this.group = group;\n }\n\n getSteps(){\n return this.steps;\n }\n\n setSteps(steps) {\n this.steps = steps;\n }\n\n getContext() {\n return this.context;\n }\n\n setContext(context) {\n this.context = context;\n }\n\n toString() {\n return JSON.stringify(this);\n }\n}","import React from 'react';\nimport { Row, Form, Col } from \"react-bootstrap\";\n\nconst QuestionBuilderModalHeader = (props) => {\n\n const {question, multistep=false, isModify=false, onMultistepChange, onCategoryInput, onSubcategoryInput} = props;\n\n const checkMultiStep = () => {\n onMultistepChange();\n }\n\n return (\n
    \n
    \n \n \n Category\n \n \n {onCategoryInput(e.target.value)}}\n />\n \n \n \n \n Subcategory\n \n \n onSubcategoryInput(e.target.value)}\n />\n \n \n
    \n
    \n isModify ? ()=>{} : checkMultiStep()} type=\"checkbox\" label=\"Make this a Multistep Problem\" checked={multistep}/>\n
    \n
    \n );\n}\n \nexport default QuestionBuilderModalHeader;","export default \"data:image/png;base64,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\"","import React, {useState, useRef, useEffect, useContext} from 'react';\nimport { v4 as uuidv4 } from \"uuid\";\nimport KeyboardInputContext from './../../../hooks/KeyboardInputContext';\nimport keyboardIcon from './../../../images/math/keyboard.png';\nimport sourceCodeIcon from './../../../images/math/sourcecode.png';\nimport multimediaIcon from './../../../images/math/multimedia.png';\nimport StringUtils from './../../../utils/StringUtils';\nimport './mathfield_comps.css';\n\nconst MathInputArea = (props) => {\n\n const {id='', focus=false, statement='', foreignKeyboard=false, showKeyboardIcon=false, showMultimediaIcon=false, onStatementUpdate, onRenderForeignKeyboard=()=>{}, onToggleMultimedia=()=>{}, foreignKeyboardInput='', showSourceCodeIcon=false,onToggleSourceCode=()=>{}, tabHandler=()=>{}} = props;\n\n const [questionStatement, setQuestionStatement] = useState(statement);\n const [showInput, setShowInput] = useState(true);\n const [componentId, setComponentId] = useState(uuidv4());\n \n const textArea = useRef(null);\n const node = useRef(null);\n\n const keyboardInputContext = useContext(KeyboardInputContext);\n\n useEffect(() => {\n if(focus) showTextArea();\n }, [focus])\n\n useEffect(() => {\n //update html first and then mathjax!\n node.current.innerHTML = StringUtils.decodeHtml(statement);\n setQuestionStatement(statement);\n }, [statement]);\n\n useEffect(()=>{\n if(questionStatement){\n onStatementUpdate(questionStatement.trim())\n }\n }, [questionStatement]);\n\n useEffect(() => {\n if(showInput){\n textArea.current.focus();\n } else {\n if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }\n }, [showInput]);\n\n useEffect(() => {\n const input = keyboardInputContext.keyboardInput;\n const sourceId = keyboardInputContext.inputFieldId;\n if(input && input != \"\" && sourceId === componentId) insert(input);\n }, [keyboardInputContext.keyboardInput]);\n\n useEffect(() => {\n if(foreignKeyboardInput && foreignKeyboardInput != \"\") insert(foreignKeyboardInput);\n }, [foreignKeyboardInput]);\n\n const insert = (l) => {\n const start = textArea.current.selectionStart\n const end = textArea.current.selectionEnd\n const before = questionStatement.substring(0, start)\n const after = questionStatement.substring(end, questionStatement.length)\n setQuestionStatement(before + `$${l}$` + after);\n textArea.current.focus();\n }\n\n const saveHtmlResponse = (e) => {\n if(e.target.value === '') {\n onStatementUpdate(\"\")\n }else{\n setQuestionStatement(e.target.value);\n }\n \n }\n\n const showTextArea = () => {\n setShowInput(true);\n textArea.current.focus();\n }\n\n const onToggleKeyboard = () => {\n if(foreignKeyboard) {\n onRenderForeignKeyboard();\n } else {\n keyboardInputContext.toggleShowKeyboardDrawer();\n keyboardInputContext.updateInputFieldId(componentId);\n } \n }\n\n const onKeyDownHandler = (e) => {\n if(e.which === 8) {\n onStatementUpdate(\"\")\n } else if(e.key === 'Tab'){\n setShowInput(false)\n tabHandler(id)\n }\n }\n\n return (\n
    \n\n \n {\n showSourceCodeIcon && !showKeyboardIcon ? \n \n onToggleSourceCode()}>\n \"Source\n \n : \n <>\n }\n {\n showSourceCodeIcon && showKeyboardIcon ? \n \n onToggleSourceCode()}>\n \"Source\n \n : \n <>\n }\n {\n showKeyboardIcon ? \n onToggleKeyboard()}>\n \"Select\n \n : \n <>\n }\n {\n showMultimediaIcon ? \n onToggleMultimedia()}>\n \"Attach\n \n : \n <>\n }\n \n
    showTextArea()}>\n
    {StringUtils.decodeHtml(questionStatement)}
    \n
    \n
    \n );\n}\n \nexport default MathInputArea;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAhCAYAAACm75niAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJsSURBVHgB1ZjdcdpAEMd3L/I7wQ24BJynTIwTpwN3EKeAWFCBlQZiuQJIBdAByUNm8mZ3ABXEvIdos/8T2PL49AFYX78ZBnQ3gt/d7R6rY1I6bwdH7MmIiXq4pIYiRFNZ8XD5O1wwpI0nt0R8E3kULn+ES2ognbNBh/7ShWG5ilZ8zK/7/oSFf/75FYbUArr9y0CIPxgNj/PogMbUEiLPhDaku31fqGXA2UvrREyZVeQT84VmxZG+FsQy1hHfNCEPjKsxlpaZJmxgpQHjnQO020SpGae4nel4a3TR0/4B1YxT3IZHFsKfqGbc4pvwSINz+isgZcY1ETMQye6vgpQZl+9ZNzFzZn8VOMWxyevmfufqQztKA6oZpzj2afH4o87tV9mEjX3Xa21vRD1T5z8nCjzUSofvL7fapeBsqCZsVXogM9RKEvEYA0Bb0ftrEd9IJ7ddDEDL67lWf1dFvqNycZf0UzjonvjzvPCpVDxfeo3+wSF8dACjtPDZSrzzbtCjHbGFmyeTXOkkrE88ifA5PB0+dBUWx83GyO22SQQeq03aceBx+OiH8+6pz2gpJB6PWEtcWifRKy1tC8rvL70G4SPRRD99w2WueFI6+SV4wO6efMktb3klI9pXOomQ/c1Mcaf0Ix1ic521fSG5sEJUAqniGkvXGdIJONC4fxY6kEZyUUk4xe2PrpekCDqrZ8m4t6tQojR49rC880zFcT/XlVpsteXtyJMZf5HlrUAaPIiXHZMvDY7g7llo2iZpgBm/a5u0iEyNHtt+1ieJRp7QulDXe/lnhgZnzSp/jLNnKg/Z92WFiWbq+gbO/wEbOAFbBzmqtwAAAABJRU5ErkJggg==\"","import React, { useState, useEffect } from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./texteditor.css\";\n\nconst QuestionMultimedia = props => {\n \n const { question, onRemove } = props;\n const [multimedia, setMultimedia] = useState(null);\n\n useEffect(() => {\n\n const load = async() => {\n if (question && question.multimedia) {\n setMultimedia(question.multimedia);\n }\n }\n \n load();\n }, [question]);\n\n const questionDeleteMultimedia = id => {\n setMultimedia(null);\n onRemove();\n };\n\n const previewItem = () => {\n window.open(multimedia.url, \"_blank\");\n };\n return (\n \n {\n questionDeleteMultimedia(multimedia._id);\n }}\n />\n {\n previewItem();\n }}\n style={{\n backgroundImage: `url(${multimedia ? multimedia.thumbnail : \"\"})`\n }}\n >\n \n );\n};\n\nexport default QuestionMultimedia;\n","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport MathInputArea from \"../math/MathInputArea\";\nimport QuestionMultimedia from \"./QuestionMultimedia\";\nimport \"./texteditor.css\";\n\nconst MathTextEditor = props => {\n const { question, onChange, onRemove = null, onShowModal, showKeyboardIcon=true, showMultimediaIcon=true, showSourceCodeIcon =true, onShowSourceCodeModal} = props;\n\n const [statement, setStatement] = useState(null);\n\n useEffect(() => {\n if (question) {\n setStatement(question.statement);\n }\n }, [question, statement]);\n\n const onTextEntered = newStatement => {\n setStatement(newStatement);\n onChange(newStatement);\n };\n\n const onEditorMenuBtnClick = btn => {\n onShowModal(btn);\n };\n\n const onSourceCodeEditorBtnClick = btn => {\n onShowSourceCodeModal(btn);\n };\n\n const removeMultimedia = () => {\n onRemove(\"\");\n }\n\n return (\n
    \n
    \n
    \n onTextEntered(sentence)} \n onToggleMultimedia={() => onEditorMenuBtnClick('multimedia')}\n showKeyboardIcon={showKeyboardIcon}\n showMultimediaIcon={showMultimediaIcon}\n showSourceCodeIcon={showSourceCodeIcon}\n onToggleSourceCode={() => onSourceCodeEditorBtnClick('sourceCode')}\n />\n \n {removeMultimedia()}}/>\n
    \n
    \n
    \n\n onEditorMenuBtnClick(\"hint\")}\n >\n Hint\n \n\n onEditorMenuBtnClick(\"explanation\")}\n >\n Explanation\n \n
    \n
    \n
    \n
    \n );\n};\n\nexport default MathTextEditor;\n","export default __webpack_public_path__ + \"static/media/algebra_keyboard_template.ec50b618.png\";","import React, { useState, useEffect } from 'react';\nimport algebraTemplate from './../../../images/algebra_keyboard_template.png';\nimport './keyboard.css';\n\nconst MathKeyboardLayoutSelectorButton = (props) => {\n const { status, text, handler } = props;\n const [active, setActive] = useState(false);\n const [showTemplate, setShowTemplate] = useState(false);\n\n useEffect(() => {\n setActive(status);\n }, [status]);\n \n\n const clickHandler = () => {\n setActive(!active);\n handler();\n }\n\n return (\n
    \n {/*
    clickHandler()} onMouseOver={()=> setShowTemplate(true)} onMouseOut={()=> setShowTemplate(false)}> */}\n setShowTemplate(false)} onMouseOut={()=> setShowTemplate(false)} />\n \n
    \n Keyboard Preview\n \n
    \n
    \n );\n}\n \nexport default MathKeyboardLayoutSelectorButton;","import React, {useEffect, useContext} from 'react';\nimport {v4 as uuidv4} from \"uuid\";\nimport MathKeyboardLayoutSelectorButton from './MathKeyboardLayoutSelectorButton';\nimport KeyboardLayoutUtils from './../../../utils/KeyboardLayoutUtils';\nimport keyboardIcon from './../../../images/math/keyboard.svg';\nimport KeyboardInputContext from './../../../hooks/KeyboardInputContext';\nimport './keyboard.css';\n\nconst MathKeyboardLayoutSelector = (props) => {\n\n const {layout, onLayoutSelectedHandler, onLayoutGroupSelectedHandler} = props;\n\n const keyboardInputContext = useContext(KeyboardInputContext);\n\n useEffect(() => {\n if (layout===null || layout.length===0) {\n onLayoutGroupSelectedHandler(['ALGEBRA']);\n } else {\n onLayoutGroupSelectedHandler(layout);\n }\n \n }, []);\n\n const onLayoutSelected = (layout) => {\n onLayoutSelectedHandler(layout);\n }\n\n const onToggleKeyboard = () => {\n keyboardInputContext.toggleShowKeyboardDrawer();\n }\n\n //TEMPORARILY NOT USED, WILL REVISIT\n // const getAllCategories = () => {\n // const categoryObject = KeyboardLayoutUtils.getLayoutCategories();\n \n // return Object.keys(categoryObject).map((key) => {\n // let active = false;\n // if(layout && layout.length > 0 && layout.includes(key)){\n // active = true;\n // }\n // return onLayoutSelected(key)} />\n // });\n // }\n\n const getAllCategories = () => {\n const categoryObject = KeyboardLayoutUtils.getLayoutCategories();\n \n return Object.keys(categoryObject).map((key) => {\n let active = false;\n if (layout && layout.length > 0 && layout.includes(key)) {\n active = true;\n }\n return onLayoutSelected(key)} />\n });\n }\n\n const getAllCategoriesAsAlgebra = () => {\n return console.log('')}/>\n }\n\n return (\n
    \n
    \n {getAllCategories()}\n {/*getAllCategoriesAsAlgebra()*/}\n
    \n {/* \n onToggleKeyboard() }>\n \n \n */}\n
    \n );\n}\n \nexport default MathKeyboardLayoutSelector;","export default __webpack_public_path__ + \"static/media/keyboard.064f6f6a.svg\";","import React, { useState, useEffect } from \"react\";\nimport { Modal, Button, Alert } from \"react-bootstrap\";\nimport ApiPath from \"../../../../utils/ApiPath\"\nimport axios from 'axios';\nimport ProgressBar from \"react-bootstrap/ProgressBar\";\nimport AssetService from \"../../../../services/AssetService\";\nimport PanelSearchBar from \"../../panel-searchbar/PanelSearchBar\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Dropzone from \"react-dropzone\";\nimport Asset from \"../../../../payloads/Asset\";\nimport LibraryItem from \"../../library/LibraryItem\";\nimport FileUtils from \"../../../../utils/FileUtils\";\nimport \"./modal.css\";\n\nconst MultimediaModal = props => {\n const { show, onHide, onCancel, onProceed } = props;\n\n const [key, setKey] = useState(\"multimedia\");\n\n const [multimedia, setMultimedia] = useState(null);\n\n const [allMultimedia, setAllMultimedia] = useState(null);\n\n const [searchExpression, setSearchExpression] = useState(\"\");\n const [uploadedAssets, setUploadedAssets] = useState(null);\n const [fileLoader, setFileLoader] = useState(false);\n const [progressUpload, setProgressUpload] = useState(0);\n\n const [alertShow, setAlertShow] = useState(false);\n const [wrongInputMessage, setWrongInputMessage] = useState(\"\");\n\n useEffect(() => {\n (async() => setAllMultimedia(await AssetService.getAllFromRemote()))();\n }, [show]);\n\n const onSave = () => {\n let id = \"\";\n let type = \"\";\n if (key === \"multimedia\") {\n id = multimedia;\n type = \"ASSET\";\n }\n if (key === \"upload\") {\n id = multimedia;\n type = \"ASSET\";\n }\n\n onProceed(id, type);\n reset();\n };\n\n const reset = () => {\n resetFlags();\n resetFields();\n };\n\n const resetFlags = () => {\n setAlertShow(false);\n setFileLoader(false);\n setProgressUpload(0);\n };\n\n const resetFields = () => {\n setKey(\"multimedia\");\n setMultimedia(null);\n setAllMultimedia(null);\n setSearchExpression(\"\");\n setUploadedAssets(null);\n };\n\n const uploadAll = async (uploadFiles) => {\n setFileLoader(true);\n for (const uploadFile of uploadFiles) {\n const extension = FileUtils.getExtension(uploadFile.name);\n const blob = await fetch(uploadFile.preview).then(r => r.blob());\n const payload = new Asset(\n uploadFile.name,\n \"\",\n \"\",\n [],\n \"IMAGE\",\n extension,\n blob\n );\n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n\n const response = await axios.post(ApiPath.CREATE_ASSET_ENDPOINT, form, { headers: {'Content-Type': 'multipart/form-data'},\n onUploadProgress: ProgressEvent => {\n setProgressUpload(Math.round((100 * ProgressEvent.loaded) / ProgressEvent.total))\n }})\n\n if (response && (response.status === 200 || response.status === 201 )) {\n const { assets } = response.data;\n setUploadedAssets(assets);\n (async() => setAllMultimedia(await AssetService.getAllFromRemote()))();\n setFileLoader(false);\n }\n }\n };\n\n const addMultimedia = (id, media) => {\n setAlertShow(false);\n if (!multimedia) {\n setMultimedia(media);\n } else {\n setWrongInputMessage(\"Cannot add more than 1 item\");\n setAlertShow(true);\n }\n };\n\n const selectUploaded = index => {\n setMultimedia(uploadedAssets[index]._id);\n };\n\n const showSearchBar = () => {\n return (\n \n setSearchExpression(searchstring.toLowerCase())\n }\n />\n );\n };\n\n const showMultimediaGallery = () => {\n if (allMultimedia) {\n return (\n
    \n {allMultimedia.map(multimedia => {\n return (\n addMultimedia(id, multimedia)}\n onUnselected={id => setMultimedia(null)}\n filter={``}\n showDelete= {false}\n />\n );\n })}\n
    \n );\n }\n };\n\n const dranNdrop = () => {\n return (\n {\n\n uploadAll(\n acceptedFiles.map(file =>\n Object.assign(file, { preview: URL.createObjectURL(file) })\n )\n )}\n }\n >\n {({ getRootProps, getInputProps }) => (\n
    \n \n \n

    Drag 'n' drop some files here, or click to select files

    \n
    \n )}\n \n );\n };\n\n const progressBar = () => {\n return (\n
    \n \n
    \n );\n };\n\n return (\n \n \n \n

    Add Multimedia

    \n
    \n
    \n \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n
    \n {fileLoader ? progressBar() : dranNdrop()}\n {showSearchBar()}\n {showMultimediaGallery()}\n
    \n
    \n \n \n \n \n \n );\n};\n\nexport default MultimediaModal;\n","import React, { useState, useEffect } from \"react\";\nimport Modal from \"react-bootstrap/Modal\";\nimport { Button, Form, Row, Col } from \"react-bootstrap\";\nimport MathInputArea from './../../math/MathInputArea';\nimport MathKeyboardDrawer from \"./../../keyboard/MathKeyboardDrawer\";\nimport \"./modal.css\";\n\nconst QuestionHintModal = props => {\n const { show, onHide, onProceed, question } = props;\n\n const [hint, setHint] = useState(null);\n const [hintTemp, setHintTemp] = useState(null);\n\n const [showKeyboard, setShowKeyboard] = useState(false);\n const [keyboardInput, setKeyboardInput] = useState('');\n\n useEffect(() => {\n if (question) {\n setHint(question.hint);\n }\n }, [question]);\n\n const onSaveClick = () => {\n reset();\n onProceed(hintTemp);\n };\n\n const reset = () => {\n setShowKeyboard(false);\n setKeyboardInput(false);\n }\n\n const getKeyboardLayout = () => {\n if(question && question.keyboardLayout && question.keyboardLayout.length > 0){\n return question.keyboardLayout;\n }\n return ['ALGEBRA'];\n }\n\n return (\n \n \n \n

    Add Hint

    \n
    \n
    \n \n \n \n
    \n setHintTemp(expr)} \n showKeyboardIcon={true} \n onRenderForeignKeyboard={() => setShowKeyboard(!showKeyboard)}/>\n
    \n \n
    \n setKeyboardInput(l)} close={()=> setShowKeyboard(false)} layout={getKeyboardLayout()}/>\n
    \n \n \n \n \n );\n};\n\nexport default QuestionHintModal;\n","import React, { useState, useEffect } from \"react\";\nimport Modal from \"react-bootstrap/Modal\";\nimport { Button, Form, Row, Col, Tex } from \"react-bootstrap\";\nimport Editor from \"@monaco-editor/react\";\nimport \"./modal.css\";\n\nconst QuestionSourceCodeModal = props => {\n const { show, onHide, onProceed, question } = props;\n\n const [sourceCode, setSourceCode] = useState(null);\n const [sourceCodeTemp, setSourcecodeTemp] = useState(null);\n\n const editorOptions = {\n readOnly: false,\n minimap: { enabled: false }\n };\n\n useEffect(() => {\n if (question) {\n setSourceCode(null);\n }\n }, [question]);\n\n const onSaveClick = () => {\n onProceed(sourceCode);\n };\n\n return (\n \n \n \n

    Add Source Code

    \n
    \n
    \n \n \n \n
    \n {\n setSourceCode(input)}\n />\n \n }\n
    \n \n
    \n {}\n
    \n \n \n \n \n );\n};\n\nexport default QuestionSourceCodeModal;\n","import React, { useState, useEffect } from \"react\";\nimport Modal from \"react-bootstrap/Modal\";\nimport { Button, Form, Row, Col, Spinner } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport MathInputArea from \"./../../math/MathInputArea\";\nimport MathKeyboardDrawer from \"./../../keyboard/MathKeyboardDrawer\";\nimport MultimediaModal from \"./MultimediaModal\";\nimport AssetService from \"./../../../../services/AssetService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport \"./modal.css\";\n\nconst QuestionExplanationModal = props => {\n const {\n show,\n onHide,\n onProceed,\n question,\n showDelete = true,\n selectable = false,\n onUnselected,\n onSelected\n } = props;\n\n const [explanation, setExplanation] = useState(\"\");\n const [explanationTemp, setExplanationTemp] = useState(\"\");\n const [multimedia, setMultimedia] = useState(null);\n const [showKeyboard, setShowKeyboard] = useState(false);\n const [keyboardInput, setKeyboardInput] = useState('');\n\n const [showLoadingOverlay, setShowLoadingOverlay] = useState(false);\n const [showCompletedOverlay, setShowCompletedOverlay] = useState(false);\n const [showDescriptionOverlay, setShowDescriptionOverlay] = useState(false);\n const [showSelectedOverlay, setShowSelectedOverlay] = useState(false);\n\n const [showMultimediaModal, setShowMultimediaModal] = useState(false);\n\n useEffect(() => {\n const load = async () => {\n if (question) {\n setExplanation(question.explanation);\n if(question.explanationMedia) setMultimedia(await AssetService.getFromRemote(question.explanationMedia));\n }\n }\n load();\n }, [question]);\n\n const onSaveClick = () => {\n onProceed(\n explanationTemp,\n multimedia && multimedia != null ? multimedia._id : \"\"\n );\n };\n\n const reset = () => {\n setShowKeyboard(false);\n setKeyboardInput(false);\n }\n\n const addMultimedia = async (id, type) => {\n if (type === \"ASSET\") {\n //setMultimedia(await AssetService.getFromRemote(id));\n setMultimedia(id);\n }\n\n setShowMultimediaModal(false);\n };\n const previewItem = () => {\n window.open(multimedia.url, \"_blank\");\n };\n const deleteItem = id => {\n setMultimedia(null);\n question.explanationMedia = \"\";\n };\n\n const selectableHandler = () => {\n setShowSelectedOverlay(!showSelectedOverlay);\n if (selectable) {\n if (showSelectedOverlay) {\n onUnselected(multimedia._id);\n } else {\n onSelected(multimedia._id);\n }\n }\n };\n const checkIsEditable = multimedia => {\n if (!multimedia) {\n return true;\n }\n const profile = ProfileService.get();\n if (profile.role === \"Instructor\") {\n if (multimedia.createdBy !== profile._id) {\n return true;\n }\n }\n return false;\n };\n\n const getKeyboardLayout = () => {\n if(question && question.keyboardLayout && question.keyboardLayout.length > 0){\n return question.keyboardLayout;\n }\n return ['ALGEBRA'];\n }\n\n return (\n \n \n \n

    Add Explanation

    \n
    \n
    \n \n \n
    \n setExplanationTemp(expr)}\n showKeyboardIcon={true} \n onRenderForeignKeyboard={() => setShowKeyboard(!showKeyboard)}\n />\n
    \n
    \n \n \n setShowMultimediaModal(true)}\n >\n Add Multimedia\n \n \n \n {multimedia ? (\n <>\n setShowDescriptionOverlay(true)}\n onMouseOut={() => setShowDescriptionOverlay(false)}\n onClick={() => (selectable ? selectableHandler() : \"\")}\n >\n \n \n \n \n
    \n previewItem()}\n >\n \n \n deleteItem(multimedia._id)}\n disabled={checkIsEditable(multimedia)}\n >\n \n \n
    \n \n
    \n \n
    \n \n \n ) : (\n <>\n )}\n setKeyboardInput(l)} close={()=> setShowKeyboard(false)} layout={getKeyboardLayout()}/>\n
    \n \n \n \n setShowMultimediaModal(false)}\n onProceed={(id, type) => addMultimedia(id, type)}\n />\n \n );\n};\n\nexport default QuestionExplanationModal;\n","export default __webpack_public_path__ + \"static/media/matheq.3f90dbb7.svg\";","import { v4 as uuidv4 } from \"uuid\";\n\nexport default class Choice {\n\n constructor(){\n this._id = uuidv4();\n this.description = '';\n this.order = 0;\n this.feedback = '';\n this.isCorrect = false;\n this.type = 'SELECTION';\n this.numeric = {rounded: false, decimals: 0};\n this.range = {leftLimit: '', leftOperator: '', rightLimit: '', rightOperator: ''};\n this.subtype = 'MULTIPLE_CHOICE';\n }\n\n getId(){\n return this._id;\n }\n\n setId(id){\n this._id = id;\n }\n\n getDescription(){\n return this.description;\n }\n\n setDescription(description){\n this.description = description;\n }\n\n getOrder(){\n return this.order;\n }\n\n setOrder(order){\n this.order = order;\n }\n\n getFeedback(){\n return this.feedback;\n }\n\n setFeedback(feedback){\n this.feedback = feedback;\n }\n\n getType(){\n return this.type;\n }\n\n setType(type){\n this.type = type;\n }\n\n getSubtype(){\n return this.subtype;\n }\n\n setSubtype(subtype){\n this.subtype = subtype;\n }\n\n getIsCorrect(){\n return this.isCorrect;\n }\n\n setIsCorrect(isCorrect){\n this.isCorrect = isCorrect;\n }\n\n toString() {\n return JSON.stringify(this);\n }\n}","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport MathInputArea from './../math/MathInputArea';\nimport Choice from \"./../../../models/Choice\";\nimport * as Icons from \"react-bootstrap-icons\";\n\nconst MultipleChoiceMenu = props => {\n\n const { question, refresh } = props;\n\n const [choices, setChoices] = useState([\n new Choice(),\n new Choice(),\n new Choice(),\n new Choice()\n ]);\n\n const [choiceToFocus, setChoiceToFocus] = useState(0);\n\n useEffect(() => {\n if (question && question.choices && question.choices.length > 0) {\n setChoices(question.choices);\n if(choiceToFocus === 0) setChoiceToFocus(question.choices[0]._id)\n } else {\n if(choiceToFocus === 0) setChoiceToFocus(choices[0]._id)\n }\n \n }, [question]);\n\n const deleteChoice = choiceId => {\n let filteredChoices = choices.filter(choice => choice._id !== choiceId);\n setChoices(filteredChoices);\n refresh('choices', filteredChoices);\n };\n\n const onAddChoice = () => {\n const _choices = [...choices, new Choice()];\n setChoices(_choices);\n refresh('choices', _choices);\n };\n\n const addCorrectChoice = (e, choiceId) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n if (e.target.checked) {\n choice.isCorrect = true;\n } else {\n choice.isCorrect = false;\n }\n setChoices([...choices]);\n refresh('choices', choices);\n };\n\n const addChoiceDescription = (choiceId, description) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n choice.description = description;\n setChoices([...choices]);\n refresh('choices', choices);\n }\n\n const onTabHandler = (id) => {\n let choiceId = 0;\n for (let i = 0; i < choices.length; i++) {\n const choice = choices[i];\n if(choice._id === id) {\n if(i < choices.length -1){\n choiceId = choices[i+1]._id\n } else {\n choiceId = choices[0]._id\n }\n \n break;\n }\n }\n if(choiceId !== 0) setChoiceToFocus(choiceId);\n }\n\n const renderChoices = () => {\n\n return choices.map(choice => {\n return (\n \n addCorrectChoice(e, choice._id)}/>\n addChoiceDescription(choice._id, description)}\n showKeyboardIcon={true}\n showPreviewOnFocus={true}\n tabHandler={(id) => onTabHandler(id)}\n />\n\n deleteChoice(choice._id)}>\n \n \n \n );\n });\n };\n\n return (\n <>\n
    \n
    \n \n Multiple Choice\n
    \n {\" \"}\n Please select the correct answer(s).\n
    \n {renderChoices()}\n \n );\n};\n\nexport default MultipleChoiceMenu;\n","import React, {useState} from 'react';\nimport {Form} from 'react-bootstrap';\nimport MathInputArea from './../math/MathInputArea';\nimport RangeUtils from './../../../utils/RangeUtils';\n\nconst MathRangePreciseSelector = (props) => {\n\n const {choice, onInputUpdate, onStatementUpdate, onNumericDecimalPlacesUpdate, onRangeChoiceDescriptionUpdate, onRangeOperatorUpdate} = props;\n\n const [inputType, setInputType] = useState(choice.type || 'TEXT_INPUT');\n const [roundingDecimalPlaces, setRoudingDecimalPlaces] = useState(0);\n const [leftOperator, setLeftOperator] = useState('');\n const [rightOperator, setRightOperator] = useState('');\n\n const addChoiceDescription = (description) => {\n onStatementUpdate(description);\n }\n\n const onInputChangeHandler = (type) => {\n setInputType(type);\n onInputUpdate(type);\n }\n\n const onNumericDecimalPlacesSelected = (val) => {\n setRoudingDecimalPlaces(val);\n onNumericDecimalPlacesUpdate(val);\n }\n\n const onRangeOperatorHandler = (val, pos) => {\n if(pos === 'left') setLeftOperator(val);\n if(pos === 'right') setRightOperator(val);\n onRangeOperatorUpdate(val, pos);\n }\n\n const showInputOption = () => {\n if(inputType === 'TEXT_INPUT' || inputType === 'SELECTION'){\n return addChoiceDescription(s)}/>\n\n } else if(inputType === 'NUMERIC_INPUT'){\n return
    \n addChoiceDescription(e.target.value)}/>\n
    \n
    \n onNumericDecimalPlacesSelected(e.target.value)}>\n \n \n \n \n \n \n \n
    \n
    \n
    \n } else if(inputType === 'RANGE_INPUT'){\n\n if(choice.range.leftOperator === '') choice.range.leftOperator = \"GREATER_THAN\";\n if(choice.range.rightOperator === '') choice.range.rightOperator = \"GREATER_THAN\";\n return
    \n
    \n onRangeChoiceDescriptionUpdate(e.target.value, 'left')}/>\n
    \n
    \n onRangeOperatorHandler(e.target.value, 'left')}>\n {\n RangeUtils.getOperators().map(o => {\n return \n })\n }\n \n
    \n
    \n Answer within\n
    \n
    \n onRangeOperatorHandler(e.target.value, 'right')}>\n {\n RangeUtils.getOperators().map(o => {\n return \n })\n }\n \n
    \n
    \n onRangeChoiceDescriptionUpdate(e.target.value, 'right')}/>\n
    \n
    \n }\n }\n\n return ( \n
    \n
    \n
    \n onInputChangeHandler(e.target.value)}>\n \n \n \n \n
    \n\n
    \n {showInputOption()}\n
    \n
    \n
    \n
    \n );\n}\n \nexport default MathRangePreciseSelector;","import React, { useState, useEffect } from \"react\";\nimport { Button } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Choice from \"../../../models/Choice\";\nimport MathRangePreciseSelector from './../math/MathRangePreciseSelector';\n\nconst ShortAnswerMenu = props => {\n\n const { question, refresh } = props;\n const [choices, setChoices] = useState([]);\n\n useEffect(() => {\n if(question.choices && question.choices.length > 0){\n //make all choices correct by default!\n question.choices.forEach(ch => ch.isCorrect = true);\n setChoices(question.choices);\n } else {\n const defaultChoice = new Choice();\n defaultChoice.isCorrect = true;\n if(question && question.context === 'MATH_TEXT') defaultChoice.type = 'TEXT_INPUT';\n setChoices([defaultChoice]);\n }\n }, [question]);\n\n const deleteChoice = choiceId => {\n let filteredChoices = choices.filter(choice => choice._id !== choiceId);\n setChoices(filteredChoices);\n refresh('choices', filteredChoices);\n };\n\n const onAddChoice = () => {\n const newChoice = new Choice();\n newChoice.isCorrect = true;\n if(question && question.context === 'MATH_TEXT') newChoice.type = 'TEXT_INPUT';\n const appendedChoices = [...choices, newChoice];\n setChoices(appendedChoices);\n refresh('choices', appendedChoices);\n };\n\n const addChoiceDescription = (choiceId, description) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n choice.description = description;\n setChoices([...choices]);\n refresh('choices', choices);\n }\n\n const onInputUpdate = (choiceId, input) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n choice.type = input;\n setChoices([...choices]);\n refresh('choices', choices);\n }\n\n const onNumericDecimalPlacesUpdate = (choiceId, decimals) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n choice.numeric.rounded = decimals === 0 ? false : true;\n choice.numeric.decimals = Number(decimals);\n setChoices([...choices]);\n refresh('choices', choices);\n }\n \n const onRangeChoiceDescriptionUpdate = (choiceId, val, pos) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n if(pos === 'left'){\n choice.range.leftLimit = val;\n } else if(pos === 'right'){\n choice.range.rightLimit = val;\n }\n \n setChoices([...choices]);\n refresh('choices', choices);\n }\n\n const onRangeOperatorUpdate = (choiceId, val, pos) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n if(pos === 'left'){\n choice.range.leftOperator = val;\n } else if(pos === 'right'){\n choice.range.rightOperator = val;\n }\n \n setChoices([...choices]);\n refresh('choices', choices);\n }\n\n const renderChoices = () => {\n return choices.map(choice => {\n \n return (\n \n {\n question.context === 'MATH_TEXT' \n ? \n addChoiceDescription(choice._id, s)}\n onInputUpdate={i => onInputUpdate(choice._id, i)}\n onNumericDecimalPlacesUpdate={v => onNumericDecimalPlacesUpdate(choice._id, v)}\n onRangeChoiceDescriptionUpdate={(v, pos) => onRangeChoiceDescriptionUpdate(choice._id, v, pos)}\n onRangeOperatorUpdate={(v, pos) => onRangeOperatorUpdate(choice._id, v, pos)}/>\n :\n \n }\n \n\n
    \n deleteChoice(choice._id)}>\n \n \n
    \n \n );\n });\n };\n const addChoices = () => {\n return (\n <>\n
    \n
    \n \n Free Response\n
    \n \n   Add possible answer(s).\n
    \n {renderChoices()}\n \n );\n };\n return (\n <>\n {addChoices()}\n \n );\n};\n\nexport default ShortAnswerMenu;\n","import React, { useState, useEffect } from 'react';\nimport { Button } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Choice from \"./../../../models/Choice\";\n\nconst CodeInputMenu = (props) => {\n\n const { question, refresh } = props;\n\n const [choices, setChoices] = useState([]);\n\n useEffect(() => { refresh('subtype', 'MANUAL_CHOICE') }, []);\n\n useEffect(() => {\n if (question && question.choices && question.choices.length > 0) {\n setChoices(question.choices);\n }\n }, [question]);\n\n const onAddAssert = (choiceId, description) => {\n let choice = choices.find(choice => {\n return choice._id === choiceId;\n });\n choice.description = description;\n setChoices([...choices]);\n refresh('choices', choices);\n }\n\n const deleteChoice = choiceId => {\n let filteredChoices = choices.filter(choice => choice._id !== choiceId);\n setChoices(filteredChoices);\n };\n\n const onAddChoice = () => {\n const choice = new Choice();\n choice.setSubtype(\"MANUAL_CHOICE\");\n choice.setIsCorrect(true);\n const _choices = [...choices, choice];\n setChoices(_choices);\n refresh('choices', _choices);\n };\n\n const renderChoices = () => {\n\n return choices.map(choice => {\n return (\n \n Assert that: \n onAddAssert(choice._id, e.target.value)} />\n deleteChoice(choice._id)}>\n \n \n \n );\n });\n };\n\n return (\n <>\n
    \n {\" \"}\n Add new assertion\n
    \n {renderChoices()}\n \n );\n}\n\nexport default CodeInputMenu;","import React from 'react';\nimport * as Icons from \"react-bootstrap-icons\";\nimport { OverlayTrigger, Tooltip, Button } from 'react-bootstrap';\nimport MultipleChoiceMenu from './../../choices/MultipleChoiceMenu';\nimport ShortAnswerMenu from '../../choices/ShortAnswerMenu';\nimport CodeInputMenu from '../../choices/CodeInputMenu';\n\nconst QuestionBuilderModalQuestionChoices = (props) => {\n\n const { question, refresh } = props;\n\n const render = () => {\n if (!question || !question.subtype) {\n return initialPanel();\n } else {\n return choicePanel();\n }\n }\n\n const onChoiceBack = () => {\n refresh('choices', []);\n refresh('subtype', '');\n }\n\n const initialPanel = () => {\n if(question && question.context === 'CODE_TEXT') {\n return refresh(p, v)}\n />;\n }\n\n return (\n \n Select the type of choice that applies to the question.\n \n }\n >\n
    \n\n refresh('subtype', 'INPUT_CHOICE')}>\n \n Free Response\n
    \n\n refresh('subtype', 'MULTIPLE_CHOICE')}>\n \n Multiple Choice\n \n \n \n );\n };\n\n const choicePanel = () => {\n if(question && question.context === 'CODE_TEXT') {\n return refresh(p, v)}\n />;\n }\n\n if (question.subtype === \"MULTIPLE_CHOICE\") {\n return (\n <>\n onChoiceBack()}\n >\n Back\n \n refresh(p, v)}\n />\n \n );\n } else if (question.subtype === \"INPUT_CHOICE\") {\n return (\n <>\n onChoiceBack()}\n >\n Back\n \n refresh(p, v)}\n />\n \n );\n }\n };\n\n return (\n
    \n
    \n {render()}\n
    \n
    \n );\n}\n\nexport default QuestionBuilderModalQuestionChoices;","import React from 'react';\nimport Button from \"react-bootstrap/Button\";\nimport Modal from \"react-bootstrap/Modal\";\nimport warningImage from \"./../../../../images/icon_warning.png\";\nimport './modal.css';\n\nconst ChoicesWarningModal = (props) => {\n\n return (\n \n \n \n \n \n

    \n {props.text}\n

    \n
    \n \n \n \n \n );\n}\n \nexport default ChoicesWarningModal;","export default \"data:image/png;base64,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\"","import React, { useEffect, useState } from 'react';\nimport { Button } from 'react-bootstrap';\nimport * as Icons from \"react-bootstrap-icons\";\nimport MathTextEditor from \"./../../texteditor/MathTextEditor\";\nimport MathKeyboardLayoutSelector from \"./../../keyboard/MathKeyboardLayoutSelector\";\nimport MultimediaModal from \"./MultimediaModal\";\nimport QuestionHintModal from \"./QuestionHintModal\";\nimport QuestionSourceCodeModal from \"./QuestionSourceCodeModal\";\nimport QuestionExplanationModal from \"./QuestionExplanationModal\";\nimport mathIcon from './../../../../images/matheq.svg';\nimport QuestionBuilderModalQuestionChoices from './QuestionBuilderModalQuestionChoices';\nimport ChoicesWarningModal from './ChoicesWarningModal';\n\nconst QuestionBuilderModalQuestion = (props) => {\n\n const { question, refresh, save, multistep = false, steps = [], activeTabKey = '', updateTabKey = () => { } } = props;\n\n const [showHintModal, setShowHintModal] = useState(false);\n const [showSourceCodeModal, setShowSourceCodeModal] = useState(false);\n const [showExplanationModal, setShowExplanationModal] = useState(false);\n const [showMultimediaModal, setShowMultimediaModal] = useState(false);\n const [showChoicesWarningModal, setShowChoicesWarningModal] = useState(false);\n const [warningMessage, setWarningMessage] = useState('');\n\n const openModal = target => {\n\n switch (target) {\n case \"explanation\":\n setShowExplanationModal(true);\n break;\n\n case \"hint\":\n setShowHintModal(true);\n break;\n\n case \"multimedia\":\n setShowMultimediaModal(true);\n break;\n case \"sourceCode\":\n setShowSourceCodeModal(true);\n break;\n }\n };\n\n const updateKeyboardLayout = (l) => {\n if (!question.keyboardLayout) {\n refresh('keyboardLayout', [l]);\n } else {\n let kl = [...question.keyboardLayout];\n\n //if not there add it, otherwise remove\n if (!kl.includes(l)) {\n kl.push(l);\n } else {\n kl = kl.filter(k => k !== l);\n }\n refresh('keyboardLayout', kl);\n }\n }\n\n const updateKeyboardLayoutGroup = (g) => {\n refresh('keyboardLayout', g);\n }\n\n const showQuestionTypes = () => {\n return
    \n
    \n Select question type:\n
    \n refresh('context', 'PLAIN_TEXT')}>\n \n Text Input\n
    \n\n refresh('context', 'MATH_TEXT')}>\n \n Math Input\n
    \n\n { refresh('context', 'CODE_TEXT') }}>\n \n Code Input\n
    \n \n \n ;\n }\n\n const showkeyboardLayoutSelector = () => {\n if (question && question.context === 'MATH_TEXT') {\n return (\n
    \n Select Keyboard Context:\n updateKeyboardLayout(l)}\n onLayoutGroupSelectedHandler={(g) => updateKeyboardLayoutGroup(g)} /> \n
    \n );\n }\n }\n\n const showTextEditor = () => {\n return
    \n {showkeyboardLayoutSelector()}\n refresh('statement', s)}\n onRemove={() => refresh('multimedia', '')}\n onShowModal={modal => openModal(modal)}\n showKeyboardIcon={question && question.context === 'MATH_TEXT'}\n showMultimediaIcon={true}\n showSourceCodeIcon={true}\n onShowSourceCodeModal={modal => openModal(modal)}\n />\n
    ;\n }\n\n const showChoiceBuilder = () => {\n return
    \n refresh(p, v)} />\n
    ;\n }\n\n\n const nextStepButton = () => {\n\n if (!steps || steps.length === 0) {\n return <>\n }\n\n let step = steps.find(step => {\n return step.key === activeTabKey;\n })\n\n let nextStep = steps.find(s => {\n if (!step) return false;\n return s.index === step.index + 1;\n });\n\n if (step && step.index === steps.length) {\n return
    \n \n
    \n }\n\n return
    \n \n
    \n }\n\n const validateAndGoNextStep = (k) => {\n\n if (!question.statement || question.statement === '') {\n setWarningMessage('Please provide valid question statement');\n setShowChoicesWarningModal(true);\n return;\n }\n\n if (!question.choices || question.choices.length === 0) {\n setWarningMessage('Please provide valid answer choices');\n setShowChoicesWarningModal(true);\n return;\n }\n\n updateTabKey(k);\n }\n\n const showButtons = () => {\n return <>\n {multistep ? nextStepButton() :
    \n \n
    }\n \n\n\n }\n\n const onProceedQuestionExplanationModal = (explanation, mediaId) => {\n refresh('explanationAndMedia', [explanation, mediaId])\n setShowExplanationModal(false);\n }\n\n const onProceedQuestionHintModal = (hint) => {\n refresh('hint', hint);\n setShowHintModal(false);\n }\n\n const onProceedQuestionMultimediaModal = (multimedia) => {\n refresh('multimedia', multimedia);\n setShowMultimediaModal(false);\n }\n\n const onProceedQuestionSourceCodeModal = (sourceCode) => {\n //refresh('multimedia', multimedia);\n if (sourceCode!==null) { sourceCode = `
    ${sourceCode}
    `}\n refresh('sourceCode', sourceCode);\n setShowSourceCodeModal(false);\n \n }\n\n return (\n <>\n {showQuestionTypes()}\n {showTextEditor()}\n {showChoiceBuilder()}\n {showButtons()}\n\n setShowExplanationModal(false)}\n onProceed={(explanation, mediaId) => onProceedQuestionExplanationModal(explanation, mediaId)}\n onCancel={() => setShowExplanationModal(false)}\n />\n\n setShowHintModal(false)}\n onProceed={hint => onProceedQuestionHintModal(hint)}\n onCancel={() => setShowHintModal(false)}\n />\n\n setShowMultimediaModal(false)}\n onProceed={(ancillaryId, type) => onProceedQuestionMultimediaModal(ancillaryId, type)}\n onCancel={() => setShowMultimediaModal(false)}\n />\n\n setShowChoicesWarningModal(false)}\n />\n\n setShowSourceCodeModal(false)}\n onProceed={sourceCode => onProceedQuestionSourceCodeModal(sourceCode)}\n onCancel={() => setShowSourceCodeModal(false)}\n />\n \n );\n}\n\nexport default QuestionBuilderModalQuestion;","export default {\n\n getDefaultSteps: () => {\n return [\n {index:1, questionId:'', key:'step-1', title:'Step 1'}, \n {index:2, questionId:'', key:'step-2', title:'Step 2'}\n ];\n },\n\n getQuestionsAsSteps: (questions) => {\n if(!questions || questions.length === 0) return [{index:1, questionId:'', key:'step-1', title:'Step 1'}];\n return questions.map((q,i) => { return {index: (i+1), questionId: q._id, key:`step-${i+1}`, title: `Step ${i+1}`} });\n }\n}","import React, {useEffect, useState} from 'react';\nimport { Tabs, Tab } from 'react-bootstrap';\nimport QuestionBuilderModalQuestion from './QuestionBuilderModalQuestion';\nimport StepService from './../../../../services/StepService';\n\nconst QuestionBuilderModalQuestionTabs = (props) => {\n\n const {stepQuestions, onAdd, onRemove, refresh, save} = props;\n\n const [activeTabKey, setActiveTabKey] = useState('');\n const [steps, setSteps] = useState(StepService.getDefaultSteps());\n const [tabAdded, setTabAdded] = useState(false);\n const [tabRemoved, setTabRemoved] = useState(false);\n\n \n\n useEffect(() => {\n const _steps = StepService.getQuestionsAsSteps(stepQuestions);\n setSteps(_steps);\n \n if(tabAdded || tabRemoved){\n setActiveTabKey(_steps[_steps.length - 1].key);\n setTabAdded(false);\n setTabRemoved(false);\n }\n\n if(activeTabKey === ''){\n if(stepQuestions && stepQuestions.length > 0){\n if(stepQuestions.length === 2) {\n setActiveTabKey(_steps[0].key)\n } else {\n setActiveTabKey(_steps[_steps.length - 1].key)\n };\n }\n }\n }, [stepQuestions]);\n\n const onTabClick = (k) => {\n if(k === 'add-tab') {\n onAdd(); \n setTabAdded(true);\n } else if(k === 'remove-tab'){\n if(steps.length > 2){\n onRemove();\n setTabRemoved(true);\n }\n } else {\n setActiveTabKey(k);\n }\n }\n \n const renderDynamicTabs = () => {\n return steps.map((s, index) => {\n return (\n q._id === s.questionId)} \n refresh={(p,v) => refresh(s.questionId, p,v)}\n save={() => save() }\n multistep={true}\n steps = {steps}\n activeTabKey = {activeTabKey}\n updateTabKey = {(k) =>{setActiveTabKey(k)}}\n />\n );\n });\n }\n\n const showAsTabs = () => {\n return onTabClick(k)}>\n {renderDynamicTabs()}\n \n \n \n }\n\n return showAsTabs();\n}\n \nexport default QuestionBuilderModalQuestionTabs;","import React, { useState, useEffect } from 'react';\nimport { Modal, Alert } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Question from \"./../../../../models/Question\";\nimport QuestionBuilderModalHeader from './QuestionBuilderModalHeader';\nimport QuestionBuilderModalQuestion from './QuestionBuilderModalQuestion';\nimport QuestionBuilderModalQuestionTabs from './QuestionBuilderModalQuestionTabs';\nimport KeyboardInputContext from \"./../../../../hooks/KeyboardInputContext\";\nimport MathKeyboardDrawer from \"./../../keyboard/MathKeyboardDrawer\";\nimport './questionbuildermodal.css';\nimport QuestionService from '../../../../services/QuestionService';\n\nconst QuestionBuilderModal = (props) => {\n\n const { show, onHide, onComplete, onUpdate, q } = props;\n\n const [isModify, setIsModify] = useState(false);\n const [question, setQuestion] = useState(null);\n const [stepQuestions, setStepQuestions] = useState([]);\n const [isMultiStep, setIsMultiStep] = useState(false);\n\n const [showKeyboardDrawer, setShowKeyboardDrawer] = useState(false);\n const [keyboardInput, setKeyboardInput] = useState('');\n const [inputFieldId, setInputFieldId] = useState('');\n\n const [alertShow, setAlertShow] = useState(false);\n const [wrongInputMessage, setWrongInputMessage] = useState(\"No correct Choice indicated. Please review.\");\n\n useEffect(() => {\n if (!show) {\n reset();\n return;\n }\n if (!q) {\n const _question = new Question();\n _question.context = 'PLAIN_TEXT'; //default!\n setQuestion(_question);\n setIsModify(false);\n } else {\n setIsModify(true);\n setQuestion(q);\n if (q.steps && q.steps.length > 0 && q.subtype === 'STEPS') {\n setIsMultiStep(true);\n setStepQuestions(q.steps);\n }\n }\n }, [show]);\n\n const reset = () => {\n setQuestion(null);\n setStepQuestions([]);\n setIsMultiStep(false);\n setShowKeyboardDrawer(false);\n setKeyboardInput('');\n setInputFieldId('');\n setAlertShow(false);\n setIsModify(false);\n }\n\n const toggleShowKeyboardDrawer = () => {\n setShowKeyboardDrawer(!showKeyboardDrawer);\n }\n\n const captureAndForwardInput = (l, id) => {\n setKeyboardInput(l);\n }\n\n const updateInputFieldId = (id) => {\n setInputFieldId(id);\n }\n\n const checkMultiStep = () => {\n const isMulti = !isMultiStep;\n setIsMultiStep(!isMultiStep);\n if (!isMulti) {\n //get first step, for getting its details!\n let stepQuestionSubType = '';\n let steQuestionContext = 'PLAIN_TEXT';\n if (stepQuestions && stepQuestions.length > 0) {\n const stepQuestion = stepQuestions[0];\n if (stepQuestion) {\n stepQuestionSubType = stepQuestion.subtype;\n steQuestionContext = stepQuestion.context;\n }\n }\n setStepQuestions([]);\n populateMultiple([\n { prop: 'steps', val: [] },\n { prop: 'context', val: steQuestionContext },\n { prop: 'type', val: 'QUESTION' },\n { prop: 'subtype', val: stepQuestionSubType }\n ]);\n } else {\n if (!q || !q.steps || q.steps.length === 0) {\n const q1 = question ? question : new Question();\n const q2 = new Question();\n q1.type = \"QUESTION_STEP\";\n q2.type = \"QUESTION_STEP\";\n //default type!\n q1.context = 'PLAIN_TEXT';\n q2.context = 'PLAIN_TEXT';\n const _stepQuestions = [q1, q2];\n setStepQuestions(_stepQuestions);\n populateMultiple([\n { prop: 'steps', val: _stepQuestions.map(s => { return s._id }) },\n { prop: 'context', val: 'STEP_OPTIONS' },\n { prop: 'subtype', val: 'STEPS' }\n ]);\n }\n }\n }\n\n const onSaveStepped = async () => {\n //if stepped question, then all steps must inherit cat/subcat\n let _questions = [...stepQuestions];\n _questions.forEach(q => {\n q.category = question.category;\n q.subcategory = question.subcategory;\n });\n\n if (!isModify) {\n await QuestionService.batch(_questions);\n } else {\n //on update!\n if (_questions && _questions.length > 0) {\n for (const _question of _questions) {\n await QuestionService.update(_question._id, _question);\n }\n }\n }\n\n populate('steps', _questions.map(s => { return s._id }));\n setStepQuestions(_questions);\n\n //modify parent question (in case of switching multistep back and forth)\n const parentQuestion = { ...question };\n parentQuestion.type = 'QUESTION';\n parentQuestion.subtype = 'STEPS';\n parentQuestion.statement = '';\n parentQuestion.choices = [];\n parentQuestion.context = 'STEP_OPTIONS';\n setQuestion(parentQuestion);\n isModify ? onUpdate(parentQuestion) : onComplete(parentQuestion);\n }\n\n const populateMultiple = (props) => {\n if (!props || props.length === 0) return;\n const _question = { ...question };\n props.forEach(p => {\n _question[p.prop] = p.val;\n });\n setQuestion(_question);\n }\n\n const populate = (prop, val) => {\n const _question = { ...question };\n if (prop === 'category') _question.category = val;\n if (prop === 'subcategory') _question.subcategory = val;\n if (prop === 'context') _question.context = val;\n if (prop === 'statement') _question.statement = val;\n if (prop === 'multimedia') _question.multimedia = val;\n if (prop === 'subtype') _question.subtype = val;\n if (prop === 'choices') _question.choices = val;\n if (prop === 'steps') _question.steps = val;\n if (prop === 'explanation') _question.explanation = val;\n if (prop === 'explanationMedia') _question.explanationMedia = val;\n if (prop === 'hint') _question.hint = val;\n if (prop === 'keyboardLayout') _question.keyboardLayout = val;\n if (prop === 'sourceCode') _question.statement = _question.statement + val;\n\n //issue with explanation & media - sometimes state is not adjusted properly\n //when this method is invoked quickly, overriding here as object!\n if (prop === 'explanationAndMedia' && val && val.length === 2) {\n _question.explanation = val[0];\n _question.explanationMedia = val[1];\n }\n\n setQuestion(_question);\n }\n\n const populateStep = (sid, prop, val) => {\n const _questions = [...stepQuestions];\n const _question = _questions.find(sq => sq._id === sid);\n if (!_question) return;\n if (prop === 'category') _question.category = val;\n if (prop === 'subcategory') _question.subcategory = val;\n if (prop === 'context') _question.context = val;\n if (prop === 'statement') _question.statement = val;\n if (prop === 'multimedia') _question.multimedia = val;\n if (prop === 'subtype') _question.subtype = val;\n if (prop === 'choices') _question.choices = val;\n if (prop === 'steps') _question.steps = val;\n if (prop === 'explanation') _question.explanation = val;\n if (prop === 'explanationMedia') _question.explanationMedia = val;\n if (prop === 'hint') _question.hint = val;\n if (prop === 'keyboardLayout') _question.keyboardLayout = val;\n \n //issue with explanation & media - sometimes state is not adjusted properly\n //when this method is invoked quickly, overriding here as object!\n if (prop === 'explanationAndMedia' && val && val.length === 2) {\n _question.explanation = val[0];\n _question.explanationMedia = val[1];\n }\n\n //support multistep back and forth\n //only relevant fields!\n if (question._id === sid) {\n const parent = { ...question };\n parent.category = _question.category;\n parent.subcategory = _question.subcategory;\n parent.statement = _question.statement;\n parent.multimedia = _question.multimedia;\n parent.choices = _question.choices;\n parent.explanation = _question.explanation;\n parent.explanationMedia = _question.explanationMedia;\n parent.hint = _question.hint;\n parent.keyboardLayout = _question.keyboardLayout;\n setQuestion(parent);\n }\n\n setStepQuestions(_questions);\n }\n\n const onNewStepQuestion = async () => {\n const _stepQuestions = [...stepQuestions];\n let step_question = new Question();\n step_question.type = \"QUESTION_STEP\";\n step_question.context = 'PLAIN_TEXT';\n step_question.subtype = 'INPUT_CHOICE';\n step_question = await QuestionService.create(step_question);\n _stepQuestions.push(step_question);\n populate('steps', _stepQuestions.map(s => { return s._id }));\n setStepQuestions(_stepQuestions);\n }\n\n const onRemoveStepQuestion = () => {\n const _stepQuestions = [...stepQuestions];\n _stepQuestions.pop();\n setStepQuestions(_stepQuestions);\n populate('steps', _stepQuestions.map(s => { return s._id }));\n }\n\n const onSave = () => {\n if (question && question.choices && question.choices.length > 0) {\n const hasCorrectChoice = question.choices.some(choice => choice.isCorrect);\n if (!hasCorrectChoice) {\n setWrongInputMessage(\"One choice must be marked as correct.\");\n setAlertShow(true);\n return;\n }\n }\n const _question = { ...question };\n _question.type = 'QUESTION';\n if (_question.multimedia) _question.multimedia = _question.multimedia._id;\n setQuestion(_question);\n isModify ? onUpdate(_question) : onComplete(_question);\n }\n\n const showBuilderBody = () => {\n if (!isMultiStep) {\n return populate(p, v)}\n save={() => onSave()}\n />\n } else {\n return populateStep(id, p, v)}\n onAdd={() => onNewStepQuestion()}\n onRemove={() => onRemoveStepQuestion()}\n save={() => onSaveStepped()}\n />\n }\n }\n\n return (\n \n \n \n \n

    \n Question Editor\n

    \n
    \n
    \n \n setAlertShow(false)}\n dismissible>\n \n {wrongInputMessage}\n \n
    \n
    \n checkMultiStep()}\n onCategoryInput={(v) => populate('category', v)}\n onSubcategoryInput={(v) => populate('subcategory', v)}\n />\n\n\n {showBuilderBody()}\n
    \n
    \n
    \n\n captureAndForwardInput(l, id)} layout={question ? question.keyboardLayout : []} />\n \n\n
    \n );\n}\n\nexport default QuestionBuilderModal;","\n\n// QuestionDecorator to include isAlternative for alternative Questions\nexport default class QuestionDecoratorUtil {\n constructor(question) {\n this.question = question;\n this.question.isAlternative = false; // Default value\n }\n \n setIsAlternative(isAlternative) {\n this.question.isAlternative = isAlternative;\n }\n \n toString() {\n return this.question.toString();\n }\n }\n \n ","import React, {useState, useEffect} from 'react';\nimport { Button } from \"react-bootstrap\";\nimport MathDisplayField from \"./../math/MathDisplayField\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport QuestionService from './../../../services/QuestionService';\nimport './sortablelist.css';\n\nconst SortableItem = (props) => {\n\n const {item, sets, index, edit, clone, alt, remove, removeAlt, editAlt, cloneAlt} = props;\n\n const [alts, setAlts] = useState([]);\n\n useEffect(() => {\n\n const getAltQuestions = async () => {\n if(sets && sets.length > 0){\n const qset = sets.find(qs => qs.parentId === item._id);\n if(qset){\n if(qset.questions && qset.questions.length > 0){\n let altQuestions = await QuestionService.getFromRemote(qset.questions);\n if(!altQuestions) altQuestions = [];\n const questionAlreadyAsAlt = altQuestions.find(aq => { return aq._id === item._id});\n if(!questionAlreadyAsAlt) altQuestions.unshift(item);\n setAlts(altQuestions);\n } else {\n setAlts([item])\n }\n }\n } else { //if no sets in exam/workbook then set the parent question as alt!\n setAlts([item])\n }\n };\n getAltQuestions();\n }, [item, sets])\n\n const renderAlternativeQuestions = () => {\n\n return (\n
    \n
      \n {\n alts && alts.length > 0 ?\n alts.map( al => {\n return (\n
    • \n
      \n \n
      \n editAlt(item._id, al._id)}>\n \n \n cloneAlt(item._id, al._id)}>\n \n \n removeAlt(item._id, al._id, index + 1)}>\n \n \n
      \n
      \n
    • \n ) \n })\n : <>\n }\n
    \n
    \n \n \n
    \n
    \n )\n }\n\n return (\n
    \n \n
    \n\n
    \n \n  \n \n {index + 1}.  \n \n
    \n\n
    \n clone(item._id)}>\n Copy Container\n \n \n remove(item._id)}>\n Remove Container\n \n
    \n
    \n
    \n {renderAlternativeQuestions()}\n
    \n
    \n );\n}\n \nexport default SortableItem;","import React, { useState, useEffect } from \"react\";\nimport { ReactSortable } from \"react-sortablejs\";\nimport QuestionService from \"./../../../services/QuestionService\";\nimport SortableItem from \"./SortableItem\";\nimport \"./sortablelist.css\";\n\nconst SortableList = props => {\n const {\n questions,\n sets,\n alts,\n altHandler,\n cloneHandler,\n editHandler,\n deleteHandler,\n removeAltHandler,\n editAltHandler,\n cloneAltHandler,\n copyHandler,\n onSortHandler\n } = props;\n\n const [items, setItems] = useState(questions);\n\n useEffect(() => {\n setItems(questions);\n }, [questions]);\n\n useEffect(() => {\n if(items.length > 0) onSortHandler(items)\n }, [items]);\n\n const editAssessmentQuestion = id => {\n editHandler(id);\n };\n\n const cloneAssessmentQuestion = async id => {\n const q = questions.find(q => q._id === id);\n if(!q) return;\n await QuestionService.clone(q);\n const clonedQuestion = await QuestionService.getLatestFromRemote();\n if(clonedQuestion) copyHandler(q._id, clonedQuestion);\n };\n\n const deleteAssessmentQuestion = id => {\n let filteredItems = items.filter(item => item._id !== id);\n setItems(filteredItems);\n deleteHandler(id);\n };\n\n const cloneAssessmentAltQuestion = async (parentId, id) => {\n let q = alts.find(q => q._id === id);\n if(!q) {\n if(parentId === id) q = questions.find(q => q._id === id);\n };\n if(!q) {\n console.error('Unable to find question. Cannot clone')\n return;\n }\n await QuestionService.clone(q);\n const clonedQuestion = await QuestionService.getLatestFromRemote();\n if(clonedQuestion) cloneHandler(clonedQuestion);\n cloneAltHandler(parentId, clonedQuestion._id);\n }\n\n const renderList = () => {\n return items.map((item, index) => {\n return ( editAssessmentQuestion(id)} \n clone={(id) => cloneAssessmentQuestion(id)} \n alt={(parent, target) =>altHandler(parent, target) } \n remove={(id) => deleteAssessmentQuestion(id)}\n removeAlt={(parentId, questionId, position) => removeAltHandler(parentId, questionId, position)} \n editAlt={(parentId, questionId) => editAltHandler(parentId, questionId)}\n cloneAlt={(parentId, questionId) => cloneAssessmentAltQuestion(parentId, questionId)}\n />\n )\n });\n }\n\n return (\n \n {renderList()}\n \n );\n};\n\nexport default SortableList;\n","import React, { useState, useEffect } from \"react\";\nimport Modal from \"react-bootstrap/Modal\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport { Button, InputGroup, Alert, Spinner } from \"react-bootstrap\";\nimport Config from './../../../../config/Config';\nimport QuestionService from \"./../../../../services/QuestionService\";\nimport SearchService from \"./../../../../services/SearchService\";\nimport MathDisplayField from \"./../../math/MathDisplayField\";\nimport \"./modal.css\";\n\nconst ImportQuestionsModal = props => {\n const { show, onHide, onImport } = props;\n\n const [modalTitle, setModalTitle] = useState(\"Import from Question Bank\");\n const [questions, setQuestions] = useState([]);\n const [optionSelected, setOptionSelected] = useState(\"\");\n const [questionSets, setQuestionSets] = useState(null);\n const [questionsToImport, setQuestionsToImport] = useState([]);\n const [searchExpression, setSearchExpression] = useState('');\n\n const [step, setStep] = useState(2);\n\n const [alertShow, setAlertShow] = useState(false);\n const [searchInProgress, setSearchInProgress] = useState(false);\n const wrongInputMessage = \"No questions have been selected. Please review.\";\n \n\n useEffect(() => {\n const load = async () => {\n if(!questions || questions.length === 0){\n setQuestions(await QuestionService.getSomeFromRemote(50));\n setTimeout(() => {if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset()}, Config.mathRenderTimer);\n }\n }\n if(show) load();\n }, [show]);\n\n const resetFlags = () => {\n setAlertShow(false);\n setStep(2);\n };\n\n const resetFields = () => {\n setQuestionSets(null);\n setQuestions([]);\n setQuestionsToImport([]);\n setOptionSelected(\"\");\n };\n\n const reset = () => {\n resetFields();\n resetFlags();\n onHide();\n };\n\n const searchRemote = async (searchVal) => {\n setSearchInProgress(true); \n try {\n if (!searchVal || searchVal === '') {\n setQuestions(await QuestionService.getSomeFromRemote(50));\n } else {\n const results = await SearchService.search('questions', searchVal);\n setQuestions(results);\n }\n setTimeout(() => {\n if (window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }, Config.mathRenderTimer);\n } catch (error) {\n console.error(\"Searching error:\", error);\n } finally {\n setSearchInProgress(false); \n }\n };\n \n\n const onImportClick = () => {\n if (questionsToImport.length === 0) {\n setAlertShow(true);\n } else {\n onImport(questionsToImport);\n resetFlags();\n resetFields();\n }\n };\n\n const optionButtonClick = target => {\n //Disable Link SET until new notice\n if (target === \"set\") return;\n\n setOptionSelected(target);\n setStep(2);\n };\n\n const selectQuestionSet = (questionids, title) => {\n setQuestions(QuestionService.getByIds(questionids));\n setModalTitle(title);\n setStep(3);\n };\n\n const selectQuestion = (e, question) => {\n setAlertShow(false); //in case alert was triggered\n const isChecked = e.target.checked;\n\n if (!isChecked) {\n //remove question from pool\n const filteredQuestions = questionsToImport.filter(questionToImport => {\n return questionToImport._id !== question._id;\n });\n setQuestionsToImport(filteredQuestions);\n } else {\n //add question to pool\n const currentQuestions = [...questionsToImport];\n currentQuestions.push(question);\n setQuestionsToImport(currentQuestions);\n }\n };\n\n const loadQuestionSetQuestions = () => {\n if (!questions || questions.length === 0) {\n return \"No Questions Available\";\n }\n\n return questions.map(question => {\n return (\n \n \n
    \n selectQuestion(e, question)} checked=\"checked\"/>\n
    \n \n );\n });\n };\n\n const showQuestionSets = () => {\n if (!questionSets) {\n return
    No Sets Found
    ;\n }\n\n return questionSets.map(questionSet => {\n return (\n \n selectQuestionSet(questionSet.questions, questionSet.title)\n }\n >\n

    {questionSet.title}

    \n

    {`${questionSet.questions.length} questions`}

    \n \n );\n });\n };\n\n const showQuestionList = () => {\n\n if (!questions) {\n return
    No Questions Found
    ;\n }\n\n const noStepQuestions = questions.filter(q => q.type !== 'QUESTION_STEP');\n\n return noStepQuestions.map(question => {\n let statement = question.statement;\n if(question.subtype === 'STEPS'){\n if(questions && questions.length > 0 && question.steps && question.steps.length > 0){\n const firstStep = question.steps[0];\n if(firstStep) statement = '(MULTISTEP) ' + firstStep.statement + \", ...\";\n }\n }\n\n const hasBeenPreviouslySelected = questionsToImport.find(qi => qi._id === question._id) ? true : false;\n\n return (\n \n \n\n
    \n selectQuestion(e, question)} checked={hasBeenPreviouslySelected}/>\n
    \n \n );\n });\n };\n\n return (\n {\n reset();\n }}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n >\n \n \n

    {modalTitle}

    \n
    \n
    \n \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n \n optionButtonClick(\"set\")}\n >\n

    Select a set

    \n \n \n optionButtonClick(\"list\")}\n >\n

    Select questions

    \n \n \n \n\n
    \n \n
    \n {\n if (e.key === \"Enter\") {\n searchRemote(e.target.value);\n }\n }}\n />\n {searchInProgress && (\n
    \n \n
    \n )}\n
    \n\n {optionSelected === \"set\" ? (\n showQuestionSets()\n ) : (\n
    \n {showQuestionList()}\n
    \n )}\n
    \n {/*\n \n */}\n \n
    \n
    \n\n
    \n
    \n {loadQuestionSetQuestions()}\n
    \n
    \n
    \n \n onImportClick()}\n >\n Import\n \n \n \n );\n};\n\nexport default ImportQuestionsModal;\n","import React, {useState, useEffect} from 'react';\nimport {Button, Modal, OverlayTrigger, Popover, Badge, Alert} from 'react-bootstrap';\nimport CSVReader from 'react-csv-reader';\nimport * as Icons from 'react-bootstrap-icons';\nimport Config from './../../../../config/Config';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport MathDisplayField from './../../../widgets/math/MathDisplayField';\nimport QuestionService from './../../../../services/QuestionService';\nimport Question from \"./../../../../models/Question\";\nimport Choice from \"./../../../../models/Choice\";\nimport StringUtils from \"./../../../../utils/StringUtils\";\nimport './modal.css';\nimport './batchimportpop.css';\n\nconst BatchImportModal = (props) => {\n\n const { enableAlternate=false, show, onHide, onProceed, context, existingQuestions=[] } = props;\n const { SearchBar } = Search;\n \n const modalTitle = 'Import Questions Batch CSV';\n const uploadFailedMessage = 'There was a problem uploading questions. Please try again';\n const noCorrectChoiceMessage = 'One or more questions do not have correct choices.';\n\n const [step, setStep] = useState(0);\n const [showError, setShowError] = useState(false);\n const [questions, setQuestions] = useState([]);\n const [sets, setSets] = useState([]);\n const [errorMessage, setErrorMessage] = useState(uploadFailedMessage);\n const [showOverlay, setShowOverlay] = useState(false);\n\n useEffect(() => {\n if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }, [questions]);\n\n const handleMouseEnter = () => {\n setShowOverlay(true);\n };\n\n const handleMouseLeave = (e) => {\n const relatedTarget = e.relatedTarget;\n const isLeavingPopover = relatedTarget && relatedTarget.closest('.popover');\n \n if (!isLeavingPopover) {\n setShowOverlay(false);\n }\n };\n\n const onImport = async () => {\n if(!questions || questions.length === 0) { return; }\n const success = await QuestionService.batch(questions);\n if (!success) {\n console.error(`Error. Could not batch upload questions`);\n setShowError(true);\n } else {\n if(!enableAlternate){\n onProceed(questions.map(q => q._id));\n }else {\n onProceed(questions.map(q => q._id), sets);\n }\n \n reset();\n }\n }\n\n const reset = () => {\n setShowError(false);\n setQuestions([]);\n setSets([]);\n setStep(0);\n }\n\n const onCsvUploaded = (data, fileInfo) => {\n\n let questions = [];\n let _sets = [];\n\n if(fileInfo.type === \"text/csv\") {\n if(data.length > 1) {\n //ignore the first row!\n for (let index = 1; index < data.length; index++) {\n const questionData = data[index];\n \n //avoid empty rows\n if(questionData[0] === \"\"){\n continue;\n }\n\n let question = new Question();\n\n const questionContext = StringUtils.trim(questionData[0]);\n const questionType = StringUtils.trim(questionData[1]);\n\n if(questionContext === 'MATH'){\n question.setContext('MATH_TEXT');\n }else if(questionContext === 'PLAIN'){\n question.setContext('PLAIN_TEXT');\n } else if(questionContext === 'CODE'){\n question.setContext('CODE_TEXT');\n }\n\n if(questionType === 'MULTIPLE_CHOICE'){\n question.setSubtype(questionType);\n } else if(questionType === 'CODE_INPUT'){\n question.setSubtype('MANUAL_CHOICE');\n } else {\n question.setSubtype('INPUT_CHOICE');\n }\n \n\n question.setStatement(StringUtils.decodeHtml(StringUtils.trim(questionData[2])))\n question.setCategory(StringUtils.trim(questionData[3]))\n question.setSubcategory(StringUtils.trim(questionData[4]))\n question.setDifficulty(StringUtils.trim(questionData[5]))\n question.setHint(StringUtils.trim(questionData[6]))\n question.setExplanation(StringUtils.trim(questionData[7]))\n\n //we need choices and if no choices are available, disregard this question!\n //if the question is code scope, then do not restrict\n if(questionType !== 'CODE_INPUT'){\n if(questionData[8] === \"\" && questionData[9] === \"\" && questionData[10] === \"\" && questionData[11] === \"\" && questionData[12] === \"\"){\n continue;\n }\n }\n \n\n //if no correct answers indicated, show error!\n if(question.getSubtype() === 'MULTIPLE_CHOICE' && questionData[13] === \"\"){\n setErrorMessage(noCorrectChoiceMessage);\n setShowError(true);\n break;\n }\n\n let choices = []\n let correctChoices = [false, false, false, false, false]\n\n //set correct choices first!\n if(questionData[13].includes(\",\")){\n const correctQuestionNumbers = questionData[13].split(\",\")\n correctQuestionNumbers.forEach(correctQuestionNumber => {\n const questionNumber = parseInt(correctQuestionNumber)\n correctChoices[questionNumber - 1] = true\n });\n } else {\n const questionNumber = parseInt(questionData[13])\n correctChoices[questionNumber - 1] = true\n }\n\n //start creating choices (default is 5)\n for (let j = 8; j <= 12; j++) {\n if(questionData[j] !== \"\"){ \n const choice = new Choice()\n choice.setDescription(StringUtils.decodeHtml(StringUtils.trim(questionData[j])))\n choice.setIsCorrect(correctChoices[j-8])\n //if question is INPUT choice, then all choices are correct\n if(question.getSubtype() === 'INPUT_CHOICE'){ choice.setIsCorrect(true) }\n choices.push(choice)\n }\n }\n\n question.setChoices(choices);\n\n //if alternate questions is enabled, read the question position (last cell)\n //and check if that position was already added. If so, add it as a question set!\n \n //dynamic property (not in server)\n question.position = questionData[14] || index;\n\n if(enableAlternate){\n if(question.position !== \"\"){\n\n //find if this question position is already queued in existing questions\n //it may be located in existing assessment questions!\n let parentQuestion = null;\n\n if(!parentQuestion && (existingQuestions && existingQuestions.length > 0)) {\n parentQuestion = existingQuestions[Number(question.position) - 1];\n }\n\n //find if this question position is already queued!\n //if so, then find set and update!\n if(!parentQuestion){\n parentQuestion = questions.find(q => q.position === question.position);\n }\n\n if(parentQuestion){\n let set = _sets.find(s => s.parentId === parentQuestion._id);\n if(set){ set.questions.push(question._id); }\n else { _sets.push({parentId: parentQuestion._id, questions: [question._id]}); }\n \n } else {\n _sets.push({parentId: question._id, questions: []});\n }\n } else {\n _sets.push({parentId: question._id, questions: []});\n }\n }\n\n questions.push(question);\n }\n }\n }\n\n setQuestions(questions);\n setSets(_sets);\n setStep(1);\n }\n\n const removeQuestion = (id) => {\n const _questions = [...questions];\n const qs = _questions.filter(_q => _q._id !== id)\n setQuestions(qs);\n }\n\n const renderQuestions = () => {\n if (!questions) {\n return \"\";\n }\n \n const columns = [\n {\n dataField: \"position\",\n text: \"Position\",\n headerAlign: \"center\",\n align: \"center\",\n sort: true,\n headerStyle: (column, colIndex) => {\n return { width: \"100px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n {row.position}\n

    \n );\n }\n },\n {\n dataField: \"context\",\n text: \"Context\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n let _context = '';\n if(row.context === 'MATH_TEXT') _context = 'MATH'\n if(row.context === 'PLAIN_TEXT') _context = 'PLAIN'\n if(row.context === 'CODE_TEXT') _context = 'CODE'\n return (\n

    \n {_context}\n

    \n );\n }\n },\n {\n dataField: \"subtype\",\n text: \"Subtype\",\n headerAlign: \"center\",\n align: \"left\"\n },\n {\n dataField: \"statement\",\n text: \"Statement\",\n headerAlign: \"center\",\n align: \"left\",\n formatter: (cellContent, row) => {\n return \n }\n },\n {\n dataField: \"status\",\n text: \"\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n removeQuestion(row.id)}\n >\n \n \n
    \n );\n }\n }\n ];\n \n const questionsData = questions.map((question, index) => {\n return {\n id: question._id,\n statement: question.statement,\n category: question.category,\n subcategory: question.subcategory,\n position: question.position,\n choices: question.choices,\n status: question.status,\n subtype: question.subtype,\n context: question.context,\n type: question.subtype\n };\n });\n \n const expandRow = {\n showExpandColumn: true,\n expandByColumnOnly: false,\n renderer: row => (\n
    \n {row.choices && row.choices.length > 0 ? (\n
      \n {row.choices.map(choice => {\n return (\n
    • \n \n
      \n \n
      \n
    • \n );\n })}\n
    \n ) : (\n

    \n No Reports Available\n

    \n )}\n
    \n )\n };\n \n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n const resetAndHide = () => {\n reset(); \n onHide();\n }\n\n return (\n resetAndHide()}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n backdrop=\"static\"\n id=\"batch-import-modal\"\n >\n \n \n

    {modalTitle}

    \n
    \n
    \n \n setShowError(false)}\n >\n {errorMessage}\n \n
    \n
    \n
    Upload {context} CSV file
    \n \n
    \n
    \n \n Requirements\n \n
      \n
    1. The question Context is the type of question. Using Math will unlock the built-in math keyboard and formula building functionality.
    2. \n
    3. There are three question Types: PLAIN_TEXT and MATH_TEXT are free response questions; MULTIPLE_CHOICE is for multiple choice questions.
    4. \n
    5. MATH_TEXT questions display a keyboard and allow students to input formulas. The default keyboard is for algebra, but you can manually update this if needed.
    6. \n
    7. Multiple choice questions can include up to five choices (you may include fewer by leaving columns blank). If you would like more than five choices, you can manually adjust the number after importing the question.
    8. \n
    9. Statements, Hints and Explanations with mathematical expressions should use LaTex formatting.
    10. \n
    11. The Category, Subcategory, Difficulty, Hint and Explanation fields are optional.
    12. \n
    13. The Correct Choice column applies to multiple choice questions and can be left blank for free response questions.
    14. \n
    15. The Position column can be used to upload multiple questions in the same position (to create randomly selected variations).
    16. \n
    17. Multimedia (e.g., images, videos, links) are not supported via batch upload, but can be added manually after uploading questions.
    18. \n
    \n
    \n \n }>\n \n \n
    \n { onCsvUploaded(data, fileInfo) } }/>\n
    \n\n
    \n {renderQuestions()}\n
    \n\n
    \n \n \n \n \n );\n}\n \nexport default BatchImportModal;","const ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\nexport default {\n\n getLetterByIndex: i => {\n if(i < 0 || i > ALPHABET.length - 1) return '';\n return ALPHABET[i];\n }\n}","import React, {useState, useEffect} from 'react';\nimport { Modal, Button, Form } from \"react-bootstrap\";\nimport MathDisplayField from './../../math/MathDisplayField';\nimport * as Icons from \"react-bootstrap-icons\";\nimport IndexUtils from './../../../../utils/IndexUtils';\nimport Config from './../../../../config/Config';\n\nconst AssessmentPreviewModal = (props) => {\n\n const { show, onHide, assessment } = props;\n\n useEffect(() => {\n const renderMath = () => setTimeout(() => { if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset() }, Config.mathRenderTimer);\n renderMath();\n }, [show]);\n\n const resetAndHide = () => {\n onHide();\n }\n\n const renderChoice = (question) => {\n\n if(!question.choices || question.choices.length === 0){ return <>}\n\n return question.choices.map(option => {\n\n let selected = '';\n\n if(option.isCorrect) selected = 'checked';\n\n return (\n
    \n }\n custom/>\n
    \n );\n })\n }\n\n const renderMultimedia = (question) => {\n if(!question || !question.multimedia) return (<>);\n\n return ()\n }\n\n const renderHintAndExplanation = (question) => {\n const hint = question.hint;\n const explanation = question.explanation;\n const explanationMediaUrl = question.explanationMedia ? question.explanationMedia.url : '';\n return (<>\n
    \n Hint:\n
    {hint && hint != \"\" ? hint : 'N/A'}
    \n
    \n
    \n Explanation:\n
    {!explanation || (explanation === \"\" && explanationMediaUrl === \"\") ? \n 'N/A'\n :\n explanationMediaUrl ? <>{explanation}
    : <>\n }
    \n
    \n );\n }\n\n const renderQuestion = (qdata) => {\n return (\n
    \n
    \n {`${qdata.index}. `}\n
    \n
    \n {renderMultimedia(qdata.question)}\n
    \n
    \n {renderChoice(qdata.question)}\n
    \n
    \n {renderHintAndExplanation(qdata.question)}\n
    \n
    \n );\n }\n\n const processQuestion = (question, index) => {\n let questions = [{question: question, index: `${index + 1}`}];\n\n if(assessment.sets && assessment.sets.length > 0) {\n const set = assessment.sets.find(s => s.parentId === question._id);\n if(set && set.questions && set.questions.length > 0){ \n //override!\n questions = [{question: question, index: `${index + 1}A`}];\n const allAltQuestions = set.questions;\n if(allAltQuestions && allAltQuestions.length > 0){\n allAltQuestions.forEach((altQuestion, i) => {\n questions.push({question: altQuestion, index: `${(index + 1)}${IndexUtils.getLetterByIndex(i+1)}`})\n });\n }\n }\n }\n\n return questions.map(q => renderQuestion(q))\n }\n\n const generatePreview = () => {\n if(!assessment.questions || assessment.questions.length === 0){ return; };\n return assessment.questions.map((q, i) => processQuestion(q, i));\n }\n\n return (\n resetAndHide()}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n id=\"admin-modal\">\n \n \n

    \n Assessment Preview\n

    \n
    \n
    \n\n \n {assessment ? generatePreview() : <>}\n \n\n \n resetAndHide()}>\n Close\n \n \n \n );\n}\n \nexport default AssessmentPreviewModal;","export default class Assessment {\n\n constructor(title, type, questions){\n this.title = title;\n this.type = type;\n this.questions = questions;\n this.difficulty= '';\n this.category = '';\n this.durationInMinutes = 0;\n this.mandatory = false;\n this.shuffleQuestions = false;\n this.scrambleChoices = false;\n this.timeBased = false;\n this.sets = [];\n this.readme = '';\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getType() {\n return this.type;\n }\n\n setType(type){\n this.type = type;\n }\n\n getDifficulty() {\n return this.difficulty;\n }\n\n setDifficulty(difficulty){\n this.difficulty = difficulty;\n }\n\n getCategory() {\n return this.category;\n }\n\n setCategory(category){\n this.category = category;\n }\n\n getDurationInMinutes() {\n return this.durationInMinutes;\n }\n\n setDurationInMinutes(durationInMinutes){\n this.durationInMinutes = durationInMinutes;\n }\n\n getMandatory() {\n return this.mandatory;\n }\n\n setMandatory(mandatory){\n this.mandatory = mandatory;\n }\n\n getShuffleQuestions() {\n return this.shuffleQuestions;\n }\n\n setShuffleQuestions(shuffleQuestions){\n this.shuffleQuestions = shuffleQuestions;\n }\n\n getScrambleChoices() {\n return this.scrambleChoices;\n }\n\n setScrambleChoices(scrambleChoices){\n this.scrambleChoices = scrambleChoices;\n }\n\n getTimeBased() {\n return this.timeBased;\n }\n\n setTimeBased(timeBased){\n this.timeBased = timeBased;\n }\n \n getQuestions() {\n return this.questions;\n }\n\n setQuestions(questions){\n this.questions = questions;\n }\n\n getSets() {\n return this.sets;\n }\n\n setSets(sets){\n this.sets = sets;\n }\n\n getReadme() {\n return this.readme;\n }\n\n setReadme(readme){\n this.readme = readme;\n }\n\n getSchools() {\n return this.schools;\n }\n\n setSchools(_schools) {\n this.schools = _schools ? [_schools] : []\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import * as ExcelJS from \"exceljs/dist/exceljs\"\nimport StringUtils from \"./StringUtils\"\n\nexport default {\n\n curateData: (reports) => {\n if(!reports || reports.length === 0) return;\n let curatedData = [];\n\n for (const report of reports) {\n\n const data = {\n fullName: report.fullName,\n placementExamScore: report.placementExamScore,\n quizzesScore: report.averageStars ? (report.averageStars > 5 ? 5 : report.averageStars)*100/5 : 0,\n workbookScore: report.workbookScore,\n examScore: report.examScore\n };\n\n curatedData.push(data);\n }\n\n return curatedData;\n },\n\n downloadQuestionsToXls: async (filename, data) => {\n const workbook = new ExcelJS.Workbook();\n workbook.created = new Date();\n workbook.creator = 'Limespring Portal';\n\n const worksheet = workbook.addWorksheet(''); \n\n const columns = [\n {header: 'Context', key: 'context', width: 20},\n {header: 'Type', key: 'subtype', width: 20},\n {header: 'Statement', key: 'statement', width: 60},\n {header: 'Category', key: 'category', width: 20},\n {header: 'SubCategory', key: 'subcategory', width: 20},\n {header: 'Difficulty', key: 'difficulty', width: 10},\n {header: 'Hint', key: 'hint', width: 15},\n {header: 'Explanation', key: 'explanation', width: 20},\n ];\n const maxChoices = Math.max(...data.map(q => q.question.choices.length));\n for (let i = 1; i <= maxChoices; i++) {\n columns.push({header: `Choice ${i}`, key: `choice${i}`, width: 20});\n }\n columns.push({header: `Correct Choice for MC Question`, key: `correctchoice`, width: 20});\n columns.push({header: `Position`, key: `position`, width: 10});\n // Assign columns to worksheet\n worksheet.columns = columns;\n let correctchoice = \"\";\n let position = 1;\n data.forEach((qd) => {\n let question = qd.question;\n let row = {\n context: question.context,\n subtype: question.subtype,\n statement: question.statement,\n category: question.category,\n subcategory: question.subcategory,\n difficulty: question.difficulty,\n hint: question.hint,\n explanation: question.explanation,\n }; \n correctchoice = \"\"; \n let indexChoiceInCsv = 0; \n question.choices.forEach((choice, index) => {\n indexChoiceInCsv = index + 1;\n row[`choice${indexChoiceInCsv}`] = choice.description;\n if (choice.isCorrect) {\n correctchoice = correctchoice + \" \" + indexChoiceInCsv;\n } \n });\n row[`correctchoice`] = correctchoice;\n if (question.isAlternative) {\n position --;\n row[`position`] = position;\n } else {\n row[`position`] = position;\n }\n position ++;\n worksheet.addRow(row);\n });\n\n worksheet.getRow(1).eachCell((cell) => {\n cell.font = { bold: true, size: 12 };\n cell.fill = {\n type: 'pattern',\n pattern: 'solid',\n fgColor: { argb: 'FFFFFF00' } \n };\n });\n\n const buffer = await workbook.xlsx.writeBuffer();\n \n const blob = new Blob([buffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});\n\n //create and setup the anchor\n const a = document.createElement('a');\n a.style.display = 'none';\n a.href = URL.createObjectURL(blob);\n a.download = StringUtils.removeWhiteSpacesWithin(filename + \".xlsx\");\n document.body.appendChild(a);\n\n //simulate click\n a.click();\n\n //clean up and remove the anchor\n URL.revokeObjectURL(a.href);\n document.body.removeChild(a);\n },\n\n createExcel: async (filename, data) => {\n\n const workbook = new ExcelJS.Workbook();\n workbook.created = new Date();\n workbook.creator = 'Limespring Portal';\n\n if(data.units && data.units.length > 0){\n data.units.forEach(unit => {\n const worksheet = workbook.addWorksheet(unit.title); \n\n if(unit.data && unit.data.length > 0){\n \n let sheet_headers = [];\n const rows = [];\n\n unit.data.forEach(student => {\n //do one time only\n if(student.headers && student.headers.length>0 && sheet_headers.length === 0){\n student.headers.forEach(header=>{\n sheet_headers.push({header: header.title, key: header.key, width: 30});\n });\n }\n const row = [student.fullname, student.examscore, student.workbookscore];\n if(student.quizzesScore && student.quizzesScore.length>0){\n student.quizzesScore.forEach(quizScore=>{\n row.push(quizScore);\n });\n }\n rows.push(row);\n });\n\n worksheet.columns = sheet_headers;\n worksheet.addRows(rows);\n }\n\n //embelish\n worksheet.pageSetup.horizontalCentered = true;\n worksheet.pageSetup.verticalCentered = true;\n });\n }\n\n const buffer = await workbook.xlsx.writeBuffer();\n const blob = new Blob([buffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});\n\n //create fake anchor to force download!\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n const url = window.URL.createObjectURL(blob);\n a.href = url;\n a.download = `${filename}.xlsx`;\n a.click();\n window.URL.revokeObjectURL(url);\n if (a && a.parentElement) a.parentElement.removeChild(a);\n\n } \n}","import React, { useState, useEffect, useRef } from \"react\";\nimport Select from \"react-select\";\nimport Drawer from \"./../../../widgets/drawer/Drawer\";\nimport { Form, Col, Button, Alert } from \"react-bootstrap\";\nimport AssessmentService from \"./../../../../services/AssessmentService\";\nimport QuestionBuilderModal from \"../../../widgets/modals/instructor/QuestionBuilderModal\";\nimport QuestionDecoratorUtil from \"../../../../utils/QuestionDecoratorUtil\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport QuestionService from \"./../../../../services/QuestionService\";\nimport SortableList from \"../../../widgets/sortable-list/SortableList\";\nimport ImportQuestionsModal from \"../../../widgets/modals/instructor/ImportQuestionsModal\";\nimport BatchImportModal from \"./../../../widgets/modals/instructor/BatchImportModal\";\nimport AssessmentPreviewModal from \"./../../../widgets/modals/instructor/AssessmentPreviewModal\";\nimport Assessment from \"./../../../../payloads/Assessment\";\nimport MDEditor from \"@uiw/react-md-editor\";\nimport \"./drawers.css\";\nimport ExcelUtils from \"../../../../utils/ExcelUtils\";\nimport SchoolService from \"./../../../../services/SchoolService\";\n\nconst AssessmentDrawer = props => {\n const { show, onHide, data } = props;\n\n const [open, setOpen] = useState(show);\n const [assessment, setAssessment] = useState(null);\n\n const [showNewQuestionModal, setShowNewQuestionModal] = useState(false);\n const [showImportQuestionModal, setShowImportQuestionModal] = useState(false);\n const [showBatchModal, setShowBatchModal] = useState(false);\n const [showPreviewModal, setShowPreviewModal] = useState(false);\n const [showMarkdownEditor, setShowMarkdownEditor] = useState(false);\n const [alertShow, setAlertShow] = useState(false);\n const [validationAlertShow, setValidationAlertShow] = useState(false);\n const [currentQuestion, setCurrentQuestion] = useState(null);\n\n const [tempQuestions, setTempQuestions] = useState([]);\n const [sets, setSets] = useState([]);\n const [assessmentTitle, setAssessmentTitle] = useState(\"\");\n const [assessmentType, setAssessmentType] = useState(\"\");\n const [duration, setDuration] = useState(0);\n const [timeBased, setTimeBased] = useState(false);\n const [mandatory, setMandatory] = useState(false);\n const [shuffle, setShuffle] = useState(false);\n const [scramble, setScramble] = useState(false);\n const [difficulty, setDifficulty] = useState(0);\n const [category, setCategory] = useState(\"\");\n const [alts, setAlts] = useState([]);\n\n const [markdownText, setMarkdownText] = useState('');\n\n const [errorMessage, setErrorMessage] = useState(\n \"There was an error while attempting to create this assessment. Please try again.\"\n );\n const [validationMessage, setValidationMessage] = useState(\"\");\n\n const [alternateParentQuestion, setAlternateParentQuestion] = useState(null);\n const [isAlternateFlow, setIsAlternateFlow] = useState(false);\n\n const [schools, setSchools] = useState([]);\n\n const [selectedSchool, setSelectedSchool] = useState(null);\n\n\n useEffect(() => {\n const loadSchools = async () => {\n let schoolData = schools;\n\n schoolData = await SchoolService.getAllFromRemote(false);\n setSchools(schoolData);\n \n if (data && data.schools && data.schools.length > 0) {\n const schoolOptions = schoolData.map(school => {\n return { value: school.id, label: school.title };\n });\n const _defaultSchool = schoolOptions.find(school => school.value === data.schools[0]._id);\n setSelectedSchool(_defaultSchool);\n }\n };\n\n loadSchools();\n }, [show]);\n\n useEffect(() => {\n reset();\n setOpen(show);\n\n setAssessment(data);\n\n //populate fields\n setTempQuestions(data ? data.questions : []);\n setSets(data ? data.sets : []);\n setAssessmentTitle(data ? data.title : ``);\n setAssessmentType(data ? data.type : ``);\n setDuration(data ? data.durationInMinutes : 0);\n setTimeBased(data ? data.timeBased : false);\n setMandatory(data ? data.mandatory : false);\n setShuffle(data ? data.shuffleQuestions : false);\n setScramble(data ? data.scrambleChoices : false);\n setDifficulty(data ? data.difficulty : 0);\n setCategory(data ? data.category : \"\");\n getAltQuestions();\n }, [show]);\n\n useEffect(() => {\n //typeset math!\n setTimeout(() => {\n if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }, 7000);\n }, [tempQuestions]);\n\n const getAltQuestions = async () => {\n if(data && data.sets && data.sets.length > 0){\n let currentAlts = [...alts];\n for (const item of data.questions) {\n const qset = data.sets.find(qs => qs.parentId === item._id);\n if(qset){\n if(qset.questions && qset.questions.length > 0) {\n const remoteQuestions = await QuestionService.getFromRemote(qset.questions);\n currentAlts = currentAlts.concat(remoteQuestions);\n }\n }\n }\n setAlts(currentAlts);\n }\n }\n\n const reset = () => {\n setAlertShow(false)\n setSelectedSchool(null);\n setSchools([]);\n };\n\n const create = async () => {\n if (!validate()) {\n return;\n }\n const payload = buildPayload();\n const success = await AssessmentService.create(payload);\n if (success) {\n reset();\n onHide();\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const update = async () => {\n if (!validate()) {\n return;\n }\n const payload = buildUpdatePayload({ ...assessment });\n const success = await AssessmentService.update(payload._id, payload);\n if (success) {\n reset();\n onHide();\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const changeSchoolsSelection = (newSchoolSelection) => {\n setSelectedSchool(newSchoolSelection);\n };\n\n const showSchoolDropdown = () => {\n if (schools) {\n const schoolOptions = schools.map(school => {\n return { value: school.id, label: school.title };\n });\n return (\n changeSchoolsSelection(_selectedOption)}\n options={schoolOptions}\n className=\"mt-2 w-50\"\n isClearable={true}\n placeholder=\"Select a school\"\n />\n );\n }\n return null;\n };\n\n const buildUpdatePayload = payload => {\n let _schools = null;\n if(selectedSchool) _schools = [selectedSchool.value];\n\n payload.title = assessmentTitle;\n payload.type = assessmentType;\n payload.questions = tempQuestions;\n payload.sets = sets;\n payload.difficulty = difficulty;\n payload.category = category;\n payload.durationInMinutes = duration;\n payload.mandatory = mandatory;\n payload.shuffleQuestions = shuffle;\n payload.scrambleChoices = scramble;\n payload.timeBased = timeBased;\n payload.readme = markdownText;\n payload.schools = _schools? _schools:null\n return payload;\n };\n\n const buildPayload = () => {\n let _school = null;\n if(selectedSchool) _school = selectedSchool.value;\n let assessment = new Assessment(\n assessmentTitle,\n assessmentType,\n tempQuestions\n );\n assessment.setDifficulty(difficulty);\n assessment.setCategory(category);\n assessment.setTimeBased(timeBased);\n assessment.setDurationInMinutes(duration);\n assessment.setMandatory(mandatory);\n assessment.setShuffleQuestions(shuffle);\n assessment.setScrambleChoices(scramble);\n assessment.setSets(sets);\n assessment.setReadme(markdownText);\n assessment.setSchools(_school ? _school:null);\n\n return assessment;\n };\n\n const validate = () => {\n if (assessmentTitle === \"\") {\n setValidationMessage(\"Assessment title is required\");\n setValidationAlertShow(true);\n return false;\n }\n\n if (assessmentType === \"\") {\n setValidationMessage(\"Assessment type is required\");\n setValidationAlertShow(true);\n return false;\n }\n\n if (tempQuestions.length === 0 && assessmentType !== \"ASSIGNMENT\") {\n setValidationMessage(\"Assessment questions are required\");\n setValidationAlertShow(true);\n return false;\n }\n\n return true;\n };\n\n const hideAndRefreshData = async question => {\n setShowNewQuestionModal(false);\n const q = await QuestionService.create(question);\n if (!q) {\n console.error(`Error. Could not save question`);\n setValidationMessage(\n \"There was an error while saving question. Please try again.\"\n );\n setValidationAlertShow(true);\n return;\n }\n\n question = {...q};\n \n if(isAlternateFlow) { \n createOrUpdateSet(question._id)\n let _alts = [...alts]\n _alts.push(question);\n setAlts(_alts);\n } else {\n createParentSets([question._id]);\n let questions = [...tempQuestions];\n questions.push(question);\n setTempQuestions(questions);\n if (assessment && assessment.questions) {\n assessment.questions = questions;\n }\n }\n };\n\n const hideAndUpdateRefreshData = async question => {\n setShowNewQuestionModal(false);\n const success = await QuestionService.update(question._id, question);\n if (!success) {\n console.error(`Error. Could not update question`);\n setValidationMessage(\n \"There was an error while updating question. Please try again.\"\n );\n setValidationAlertShow(true);\n return;\n }\n const updatedQuestion = await QuestionService.getLatestFromRemote();\n \n //keep question original position!\n let questions = tempQuestions.map(tempQuestion => {\n if (tempQuestion._id === question._id) {\n return updatedQuestion;\n }\n return tempQuestion;\n });\n setTempQuestions(questions);\n\n let altQuestions = alts.map(tempQuestion => {\n if (tempQuestion._id === question._id) {\n return updatedQuestion;\n }\n return tempQuestion;\n });\n setAlts(altQuestions);\n\n let existingSets = [...sets];\n for (const existingSet of existingSets) {\n existingSet.questions.forEach((q) => {\n if (q._id===question._id) {\n q = question;\n }\n })\n }\n setSets(existingSets);\n\n //finally reload assessment\n setAssessment(await AssessmentService.getFromRemote(assessment._id));\n };\n\n const hideAndUpdateQuestions = importedQuestions => {\n setShowImportQuestionModal(false);\n if(isAlternateFlow) {\n createOrUpdateSetMultiple(importedQuestions.map(iq => iq._id))\n let _alts = [...alts]\n _alts = _alts.concat(importedQuestions);\n setAlts(_alts);\n }else{\n let qs = [...tempQuestions].concat(importedQuestions);\n setTempQuestions(qs);\n createParentSets(importedQuestions.map(q => { return q._id}));\n if(assessment) assessment.questions = qs;\n }\n };\n\n const updateDuration = e => {\n if (e.target.value === \"\") {\n setDuration(\"\");\n setTimeBased(false);\n } else {\n setDuration(e.target.value);\n setTimeBased(true);\n }\n };\n\n const editQuestion = id => {\n if(tempQuestions && tempQuestions.length > 0){\n const _question = tempQuestions.find(q => q._id === id);\n if(_question){\n setCurrentQuestion(_question);\n setShowNewQuestionModal(true);\n }\n }\n };\n const editAltQuestionHandler = async (parentQuestion, id) => {\n if(tempQuestions && tempQuestions.length > 0){\n const _questions = await QuestionService.getFromRemote([id]);\n if(_questions){\n setCurrentQuestion(_questions[0]);\n setShowNewQuestionModal(true);\n }\n }\n };\n\n const cloneQuestion = (parentId, _question) => {\n let questions = [...tempQuestions];\n questions.push(_question);\n setTempQuestions(questions);\n addAltsForClonedQuestion(parentId, _question);\n };\n\n const addAltsForClonedQuestion = async (parentId, _question) => {\n let existingsets = [...sets];\n const qset = existingsets.find((set) => set.parentId === parentId);\n if (qset) {\n let filteredsetquestions = qset.questions.filter(q => { return q._id !== parentId });\n let clonedAlts = []\n for (const filteredsetquestionId of filteredsetquestions) {\n const filteredsetquestion = alts.find(a => { return a._id === filteredsetquestionId});\n if(filteredsetquestion){\n await QuestionService.clone(filteredsetquestion);\n const clonedAlt = await QuestionService.getLatestFromRemote();\n if(clonedAlt) clonedAlts.push(clonedAlt);\n }\n }\n\n let _alts = [...alts];\n _alts = _alts.concat(clonedAlts);\n setAlts(_alts);\n \n existingsets.push({ parentId: _question._id, questions: clonedAlts.map(ca => {return ca._id}) }); \n setSets(existingsets);\n }\n }\n\n const cloneAltQuestion = (_question) => {\n let questions = [...alts];\n questions.push(_question);\n setAlts(questions);\n };\n\n const deleteQuestion = id => {\n let filteredQuestions = tempQuestions.filter(\n question => question._id !== id\n );\n setTempQuestions(filteredQuestions);\n };\n\n const altQuestionHandler = (parent, target) => {\n setIsAlternateFlow(true);\n setAlternateParentQuestion(parent);\n setCurrentQuestion(null);\n\n if(target === 'new') {\n setShowNewQuestionModal(true);\n } else if(target === 'import') {\n setShowImportQuestionModal(true);\n }\n }\n\n const createParentSets = (parentIds) => {\n let existingsets = [... sets];\n for (const parentId of parentIds) {\n const _set = {parentId: parentId, questions: []};\n \n //check if it exists already\n const existingSet = existingsets.find(s => { return s.parentId === parentId});\n if(!existingSet){\n existingsets.push(_set);\n }\n }\n setSets(existingsets);\n }\n\n const createOrUpdateSetMultiple = questionIds => {\n if(!sets || sets.length == 0) {\n const _set = {parentId: alternateParentQuestion, questions: questionIds};\n setSets([_set]);\n setIsAlternateFlow(false);\n setAlternateParentQuestion(null);\n return;\n }\n let existingsets = [... sets];\n let _set = existingsets.find(s => s.parentId === alternateParentQuestion);\n if(_set) {\n if(_set.questions && _set.questions.length >= 0){\n \n const questionsToAdd = [];\n \n questionIds.forEach(qid => {\n const alreadyExists = _set.questions.find(quid => quid === qid);\n if(!alreadyExists) { questionsToAdd.push(qid)}\n });\n\n if(questionsToAdd.length > 0){\n _set.questions = _set.questions.concat(questionsToAdd);\n }\n } \n }else {\n existingsets.push({parentId: alternateParentQuestion, questions: questionIds});\n }\n setSets(existingsets);\n setIsAlternateFlow(false);\n setAlternateParentQuestion(null);\n }\n\n const createOrUpdateSet = questionId => {\n if(!sets || sets.length == 0) {\n const _set = {parentId: alternateParentQuestion, questions: [questionId]};\n setSets([_set]);\n setIsAlternateFlow(false);\n setAlternateParentQuestion(null);\n return;\n }\n \n let existingsets = [... sets];\n let _set = existingsets.find(s => s.parentId === alternateParentQuestion);\n if(_set) {\n if(_set.questions && _set.questions.length > 0){\n const questionIsAlreadyAdded = _set.questions.find(qid => qid === questionId);\n if(!questionIsAlreadyAdded) { _set.questions.push(questionId); }\n } else {\n _set.questions = [questionId];\n }\n }else {\n existingsets.push({parentId: alternateParentQuestion, questions: [questionId]});\n }\n setSets(existingsets);\n setIsAlternateFlow(false);\n setAlternateParentQuestion(null);\n }\n\n const removeAltQuestionHandler = async (parentId, questionId, position) => {\n let existingsets = [...sets];\n let _set = existingsets.find(s => s.parentId === parentId);\n if(_set && _set.questions && _set.questions.length > 0) {\n const filteredQuestions = _set.questions.filter(q => q !== questionId);\n _set.questions = filteredQuestions;\n //if parentId is being removed, then take the next one as parent\n //and update questions to reflect new one!\n if(parentId === questionId) {\n _set.parentId = filteredQuestions[0];\n let _tempQuestions = [...tempQuestions];\n _tempQuestions = _tempQuestions.filter(t => t._id !== parentId);\n let _newParentQuestion = await QuestionService.getFromRemote([_set.parentId]);\n _tempQuestions.splice(position - 1, 0, _newParentQuestion[0]);\n setTempQuestions(_tempQuestions);\n }\n }\n setSets(existingsets);\n }\n\n const cloneAltQuestionHandler = (parentId, questionId) => {\n let existingsets = [...sets];\n let _set = existingsets.find(s => s.parentId === parentId);\n if(_set && _set.questions) {\n _set.questions.push(questionId);\n }\n setSets(existingsets);\n }\n\n const onImportSuccess = async (questionIds, _sets) => {\n setShowBatchModal(false);\n\n const questions = [...tempQuestions];\n const originalSets = [...sets];\n const importedQuestions = await QuestionService.getFromRemote(questionIds);\n\n //check if any parent questions in the new sets have sets\n //already assigned, if so, remove that set and add the questions\n //to the previously existing sets \n if((_sets && _sets.length > 0) && (originalSets && originalSets.length > 0)){\n let tempSetsToRemove = [];\n \n _sets.forEach(s => {\n const parentMatchingSet = originalSets.find(os => os.parentId === s.parentId);\n if(parentMatchingSet) {\n parentMatchingSet.questions = parentMatchingSet.questions.concat(s.questions);\n tempSetsToRemove.push(s);\n }\n });\n\n if(tempSetsToRemove.length > 0) {\n const tempSetIds = tempSetsToRemove.map(ts => {return ts.parentId});\n _sets = _sets.filter(s => !tempSetIds.includes(s.parentId));\n }\n }\n\n //remove child question in sets since we do not need them to show\n //as independent questions...\n let filteredQuestions = importedQuestions;\n let questionsToTakeOut = [];\n\n if(_sets && _sets.length > 0){\n _sets.forEach(s => {\n questionsToTakeOut = questionsToTakeOut.concat(s.questions);\n });\n }\n\n if(originalSets && originalSets.length > 0){\n originalSets.forEach(s => {\n questionsToTakeOut = questionsToTakeOut.concat(s.questions);\n });\n }\n\n if(questionsToTakeOut.length > 0){\n filteredQuestions = filteredQuestions.filter(fq => {\n return !questionsToTakeOut.includes(fq._id); \n });\n }\n\n if(_sets && _sets.length > 0){\n setSets(originalSets.concat(_sets));\n }\n\n //respect order from ids (position for alternate questions)\n let sortedFilterQuestions = [];\n for (const questionId of questionIds) {\n const q = filteredQuestions.find(fq => fq._id === questionId);\n if(q) sortedFilterQuestions.push(q);\n }\n\n setTempQuestions(questions.concat(sortedFilterQuestions));\n }\n\n const renderMarkdownEditor = () => {\n return showMarkdownEditor ? \n
    \n
    Add README file
    \n This file is a markdown language file to let students know what this assignment is about.\n setMarkdownText(v)} />\n
    \n :\n <>\n }\n\n const overrideAllButtonFlags = () => {\n setShowNewQuestionModal(false);\n setShowImportQuestionModal(false);\n setShowBatchModal(false);\n setShowPreviewModal(false);\n setShowMarkdownEditor(false);\n }\n\n const exportAsXls = async () => {\n const assessmentQuestions = assessment ? assessment.questions.filter((q)=> q.context!=='STEP_OPTIONS') : []\n const decoratedQuestions = createDecoratedQuestions(assessmentQuestions, sets, alts);\n if (decoratedQuestions && decoratedQuestions.length > 0) {\n await ExcelUtils.downloadQuestionsToXls(assessment ? assessment\n .title : '',decoratedQuestions);\n }\n }\n\n function createDecoratedQuestions(assessmentQuestions, sets, alts) {\n const decoratedQuestions = [];\n const parentMap = new Map();\n assessmentQuestions.forEach((question) => {\n parentMap.set(question._id, question);\n });\n assessmentQuestions.forEach((parent) => {\n decoratedQuestions.push(new QuestionDecoratorUtil(parent));\n const set = sets.find((set) => set.parentId === parent._id);\n if (set) {\n set.questions.forEach((altId) => {\n const altQuestion = alts.find((question) => question._id === altId);\n if (altQuestion) {\n const decoratedAltQuestion = new QuestionDecoratorUtil(altQuestion);\n decoratedAltQuestion.setIsAlternative(true);\n decoratedQuestions.push(decoratedAltQuestion);\n }\n });\n }\n });\n return decoratedQuestions;\n }\n \n const onMenuButtonClick = (target) => {\n overrideAllButtonFlags();\n if(target === 'newquestion'){\n setCurrentQuestion(null);\n setShowNewQuestionModal(true);\n } else if(target === 'questionbank'){\n setShowImportQuestionModal(true);\n } else if(target === 'importquestions'){\n setShowBatchModal(true);\n } else if(target === 'preview'){\n setShowPreviewModal(true);\n } else if(target === 'codeproject') {\n setShowMarkdownEditor(true);\n } else if(target === 'download') {\n exportAsXls();\n }\n }\n\n return (\n onHide()}\n title={assessment ? assessment.title : `New Assessment`}\n >\n
    \n setAlertShow(false)}\n dismissible\n >\n {errorMessage}\n \n setValidationAlertShow(false)}\n dismissible\n >\n {validationMessage}\n \n
    \n setAssessmentTitle(e.target.value)}\n />\n
    \n \n setAssessmentType(e.target.value)}\n >\n \n \n \n \n \n \n \n \n
    \n
    \n\n
    \n setCategory(e.target.value)}\n />\n
    \n
    \n {showSchoolDropdown()}\n
    \n\n
    \n Preferences\n\n
    \n
    \n \n setShuffle(!shuffle)}\n />\n \n\n
    \n \n {\n const isTimeBased = typeof event.target.checked === 'boolean'\n ? event.target.checked\n : event.target.checked === 'checked';\n if (!isTimeBased) {\n setDuration(\"\");\n }\n setTimeBased(isTimeBased);\n }} \n />\n updateDuration(e)}\n />\n \n
    \n
    \n\n
    \n \n setScramble(!scramble)}\n />\n \n \n setMandatory(!mandatory)}\n />\n \n
    \n
    \n
    \n\n
    \n onMenuButtonClick('newquestion')}\n >\n New Question\n \n onMenuButtonClick('questionbank')}\n >\n Question Bank\n \n onMenuButtonClick('importquestions')}\n >\n Import Questions (CSV)\n \n onMenuButtonClick('preview')}\n >\n Assessment Preview\n \n onMenuButtonClick('codeproject')}\n >\n Code Project\n \n onMenuButtonClick('download')}\n >\n Download (XLS)\n \n
    \n \n {renderMarkdownEditor()}\n\n
    \n altQuestionHandler(parent, target)}\n editHandler={id => editQuestion(id)}\n cloneHandler={(parentId, question) => cloneAltQuestion(parentId, question)}\n deleteHandler={id => deleteQuestion(id)}\n removeAltHandler={(parentId, questionId, position) => removeAltQuestionHandler(parentId, questionId, position)}\n editAltHandler={(parentId, questionId) => editAltQuestionHandler(parentId, questionId)}\n cloneAltHandler={(parentId, questionId) => cloneAltQuestionHandler(parentId, questionId)}\n copyHandler={(parentId, question) => cloneQuestion(parentId, question)}\n onSortHandler={(qs) => setTempQuestions(qs)}\n />\n
    \n
    \n {data ? (\n \n ) : (\n \n )}\n
    \n
    \n\n setShowNewQuestionModal(false)}\n onComplete={question => hideAndRefreshData(question)}\n onUpdate={question => hideAndUpdateRefreshData(question)}\n />\n\n hideAndUpdateQuestions(questions)}\n onHide={() => setShowImportQuestionModal(false)}\n />\n\n setShowBatchModal(false)}\n onProceed={(qids, _sets) => onImportSuccess(qids, _sets)}\n context={\"questions\"}\n existingQuestions={tempQuestions}\n />\n\n setShowPreviewModal(false)} \n />\n\n \n );\n};\n\nexport default AssessmentDrawer;\n\n\n","import React, {useState, useEffect} from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport * as Icons from 'react-bootstrap-icons';\n\nconst LinkAssetModal = props => {\n const { show, asset, onHide, onCancel, onProceed } = props;\n\n const [title, setTitle] = useState('');\n const [url, setUrl] = useState('');\n\n useEffect(() => {\n if(asset){\n setTitle(asset.title)\n setUrl(asset.url)\n }\n }, [show]);\n\n return (\n \n \n
    \n \n
    \n
    \n \n
    \n
    \n Display Text\n setTitle(e.target.value)}\n />\n
    \n
    \n URL\n setUrl(e.target.value)}\n />\n
    \n
    \n
    \n \n \n \n \n \n );\n};\n\nexport default LinkAssetModal;\n","import React, { useState, useEffect } from \"react\";\nimport { Modal, Button, Alert } from \"react-bootstrap\";\nimport MultiSelectPicker from \"./../../pickers/MultiSelectPicker\";\nimport ApiPath from \"../../../../utils/ApiPath\"\nimport axios from 'axios';\nimport ProgressBar from \"react-bootstrap/ProgressBar\";\nimport AssessmentService from \"./../../../../services/AssessmentService\";\nimport AssetService from \"../../../../services/AssetService\";\nimport PanelSearchBar from \"../../panel-searchbar/PanelSearchBar\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Dropzone from \"react-dropzone\";\nimport Asset from \"./../../../../payloads/Asset\";\nimport LibraryItem from \"./../../library/LibraryItem\";\nimport FileUtils from \"./../../../../utils/FileUtils\";\nimport AssessmentDrawer from './../../../views/instructor/drawers/AssessmentDrawer';\nimport LinkAssetModal from './LinkAssetModal';\nimport \"./modal.css\";\n\nconst AncillaryModal = props => {\n const { show, onHide, onCancel, onProceed, ancillaryType } = props;\n const [key, setKey] = useState(\"quiz\");\n\n const [quiz, setQuiz] = useState([]);\n const [multimedia, setMultimedia] = useState(null);\n\n const [allQuizzes, setAllQuizzes] = useState(null);\n const [allMultimedia, setAllMultimedia] = useState(null);\n\n const [searchExpression, setSearchExpression] = useState(\"\");\n const [uploadedAssets, setUploadedAssets] = useState(null);\n const [showLoadingOverlay, setShowLoadingOverlay] = useState(false);\n const [showCompletedOverlay, setShowCompletedOverlay] = useState(false);\n const [progressUpload, setProgressUpload] = useState(0);\n const [fileLoader, setFileLoader] = useState(false);\n\n const [alertShow, setAlertShow] = useState(false);\n const [wrongInputMessage, setWrongInputMessage] = useState(\"\");\n\n const [showModal, setShowModal] = useState(show);\n const [showLinkModal, setShowLinkModal] = useState(false);\n const [showEmergentDrawer, setShowEmergentDrawer] = useState(false);\n\n useEffect(() => {\n \n const load = async () => {\n const assessments = await AssessmentService.getAllFromRemote();\n if(assessments && assessments.length > 0){\n setAllQuizzes(assessments.filter(a => a.type === 'QUIZ'));\n }\n setAllMultimedia(await AssetService.getAllFromRemote());\n }\n \n if(show) load();\n \n setShowModal(show);\n }, [show]);\n\n const onSave = () => {\n let id = \"\";\n let type = \"\";\n\n if (ancillaryType === \"typeQuiz\") {\n \n id = quiz[0]._id;\n type = \"QUIZ\";\n }\n if (ancillaryType === \"typeMultimedia\") {\n id = multimedia;\n type = \"ASSET\";\n }\n\n onProceed(id, type);\n reset();\n };\n\n const reset = () => {\n resetFlags();\n resetFields();\n };\n\n const resetFlags = () => {\n setAlertShow(false);\n setShowLoadingOverlay(false);\n setShowCompletedOverlay(false);\n setShowEmergentDrawer(false);\n setShowModal(false);\n setFileLoader(false);\n setProgressUpload(0);\n setShowLinkModal(false);\n };\n\n const resetFields = () => {\n setKey(\"quiz\");\n setQuiz(null);\n setMultimedia(null);\n setAllQuizzes(null);\n setAllMultimedia(null);\n setSearchExpression(\"\");\n setUploadedAssets(null);\n };\n\n const uploadAll = async (uploadFiles) => {\n setFileLoader(true);\n setShowLoadingOverlay(true);\n for (const uploadFile of uploadFiles) {\n const extension = FileUtils.getExtension(uploadFile.name);\n const blob = await fetch(uploadFile.preview).then(r => r.blob());\n const payload = new Asset(\n \"New Asset\",\n \"\",\n \"\",\n [],\n \"IMAGE\",\n extension,\n blob\n );\n\n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n\n const response = await axios.post(ApiPath.CREATE_ASSET_ENDPOINT, form, { headers: {'Content-Type': 'multipart/form-data'},\n onUploadProgress: ProgressEvent => {\n setProgressUpload(Math.round((100 * ProgressEvent.loaded) / ProgressEvent.total))\n }})\n\n if (response && (response.status === 200 || response.status === 201 )) {\n const { assets } = response.data;\n setUploadedAssets([]);\n setAllMultimedia(assets);\n setFileLoader(false);\n }\n \n }\n setShowLoadingOverlay(false);\n setShowCompletedOverlay(true);\n };\n\n const clearPreview = () => {\n setShowLoadingOverlay(false);\n setShowCompletedOverlay(false);\n setFileLoader(false);\n };\n\n const addMultimedia = id => {\n setAlertShow(false);\n if (!multimedia || multimedia.length === 0) {\n setMultimedia(id);\n } else {\n setWrongInputMessage(\"Cannot add more than 1 item\");\n setAlertShow(true);\n }\n };\n\n const selectUploaded = index => {\n setMultimedia(uploadedAssets[index]._id);\n };\n\n const onQuizSelected = selectedQuizzes => {\n let _quizzes = [];\n if (selectedQuizzes && selectedQuizzes.length > 0) {\n const ids = selectedQuizzes.map(selectedQuiz => selectedQuiz.id);\n _quizzes = allQuizzes.filter(q => ids.includes(q._id));\n }\n setQuiz(_quizzes);\n };\n\n const onCreateEmergentQuiz = () => {\n setShowEmergentDrawer(true);\n setShowModal(false);\n }\n\n const onHideEmergentQuiz = async () => {\n setShowEmergentDrawer(false);\n const allAssessments = await AssessmentService.getAllFromRemote();\n let allQuizzes = [];\n if(allAssessments && allAssessments.length > 0){\n allQuizzes = allAssessments.filter(a => a.type === 'QUIZ');\n }\n setAllQuizzes(allQuizzes);\n setQuiz([allQuizzes[0]]); //-> first one is always the latest!\n setShowModal(true);\n }\n\n const showQuizSelector = () => {\n if (allQuizzes) {\n return (\n
    \n
    \n onCreateEmergentQuiz()}\n >\n Create Quiz\n \n
    \n onQuizSelected(selectedQuizzes)}\n context=\"quizzes\"\n contextCallback={() => allQuizzes}\n />\n
    \n );\n } else {\n return \"\";\n }\n };\n\n const showSearchBar = () => {\n return (\n \n setSearchExpression(searchstring.toLowerCase())\n }\n />\n );\n };\n\n const showMultimediaGallery = () => {\n if (allMultimedia) {\n return (\n
    \n {allMultimedia.map(multimedia => {\n return (\n addMultimedia(id)}\n onUnselected={id => setMultimedia(null)}\n filter={``}\n />\n );\n })}\n
    \n );\n }\n };\n\n const dranNdrop = () => {\n return (\n {\n \n uploadAll(\n acceptedFiles.map(file =>\n Object.assign(file, { preview: URL.createObjectURL(file) })\n )\n )}\n }\n >\n {({ getRootProps, getInputProps }) => (\n
    \n \n \n

    Drag 'n' drop some files here, or click to select files

    \n
    \n )}\n \n );\n };\n\n const progressBar = () => {\n return (\n
    \n \n
    \n );\n };\n\n const showWebLinkInstruction = () => {\n return setShowLinkModal(true)}>\n Or attach web link\n ;\n }\n\n const createAssetLinkHandler = async (linkInfo) => {\n const payload = new Asset(\n linkInfo.title,\n \"\",\n linkInfo.url,\n [],\n \"WWW\",\n \"\",\n \"\");\n\n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n\n const response = await axios.post(ApiPath.CREATE_ASSET_ENDPOINT, form, { headers: {'Content-Type': 'multipart/form-data'} });\n if (response && (response.status === 200 || response.status === 201 )) {\n const { assets } = response.data;\n onProceed(assets[0]._id, 'ASSET');\n reset();\n }\n }\n\n return (\n <>\n \n \n \n

    Add Content

    \n
    \n
    \n \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n
    \n {showQuizSelector()}\n
    \n\n
    \n {fileLoader ? progressBar() : dranNdrop()}\n
    \n
    {showSearchBar()}
    \n
    {showWebLinkInstruction()}
    \n
    \n \n {showMultimediaGallery()}\n
    \n
    \n \n \n \n \n \n onHideEmergentQuiz()} />\n setShowLinkModal(false)} onCancel={() => setShowLinkModal(false)} onProceed={(linkInfo) => createAssetLinkHandler(linkInfo)}/>\n \n );\n};\n\nexport default AncillaryModal;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport Draggable, { DraggableCore } from \"react-draggable\";\nimport {Button} from 'react-bootstrap';\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./ancillary-video-player.css\";\n\nconst AncillaryVideoPlayer = props => {\n const { markerId, blob, currentVideoTime, onSeek, show, hide } = props;\n\n const videoPlayer2 = useRef(null);\n\n const [src, setSrc] = useState(\"\");\n\n useEffect(() => {\n if (videoPlayer2) {\n videoPlayer2.current.currentTime = currentVideoTime;\n videoPlayer2.current.onseeked = () => {\n onSeek(markerId, videoPlayer2.current.currentTime);\n }\n }\n }, [currentVideoTime]);\n\n useEffect(() => {\n setSrc(blob);\n }, [blob]);\n\n const onStart = () => {\n //console.log(\"started dragging\");\n };\n\n const onStop = () => {\n //console.log(\"stopped dragging\");\n };\n\n return (\n onStart()}\n onStop={() => onStop()}\n defaultPosition={{ x: 0, y: 0 }}\n >\n
    \n
    \n {\n videoPlayer2.current.pause();\n hide();\n }}\n >\n \n
    \n
    \n \n \n \n \n \n );\n};\n\nexport default AncillaryVideoPlayer;\n","import React, { useEffect, useState } from \"react\";\nimport { Badge, Button, Form } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport cellEditFactory from \"react-bootstrap-table2-editor\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport Marker from \"./../../../payloads/Marker\";\nimport AssessmentService from \"./../../../services/AssessmentService\";\nimport AssetService from \"./../../../services/AssetService\";\nimport MarkerService from \"./../../../services/MarkerService\";\nimport AncillaryModal from \"./../modals/instructor/AncillaryModal\";\nimport AncillaryVideoPlayer from \"./../videoplayer/AncillaryVideoPlayer\";\nimport \"./ancillary-table.css\";\n\nconst AncillaryTable = props => {\n const {\n videoSource,\n existingMarkers,\n onMarkersUpdate\n } = props;\n\n const { SearchBar } = Search;\n\n const [markers, setMarkers] = useState([]);\n const [showAncillaryModal, setShowAncillaryModal] = useState(false);\n const [showAncillaryVideoPlayer, setShowAncillaryVideoPlayer] = useState(false);\n const [ancillaryType, setAncillaryType] = useState(\"\");\n\n const [videoSelectedMarker, setVideoSelectedMarker] = useState(null);\n const [videoSelectedTime, setVideoSelectedTime] = useState(0);\n\n\n useEffect(() => {\n if(markers && markers.length > 0) renderMarkers()\n }, [markers])\n\n useEffect(() => {\n setMarkers(existingMarkers);\n }, [existingMarkers])\n\n useEffect(()=>{}, [showAncillaryVideoPlayer]);\n\n const remove = async id => {\n const success = await MarkerService.remove(id);\n if (success) {\n const updatedMarkers = existingMarkers.filter(marker => {\n return marker._id !== id;\n });\n onMarkersUpdate(updatedMarkers);\n } else {\n console.error(\"there was an error\");\n }\n };\n\n const create = async (ancillaryId, type) => {\n let marker = new Marker();\n marker.asset = type !== \"QUIZ\" ? ancillaryId : \"\";\n marker.assessment = type === \"QUIZ\" ? ancillaryId : \"\";\n const mkr = await MarkerService.create(marker);\n if (mkr) {\n if(mkr.assessment && mkr.assessment !== \"\"){\n const assessment = await AssessmentService.getFromRemote(mkr.assessment);\n if(assessment) mkr.assessment = assessment;\n }\n\n if(mkr.asset && mkr.asset !== \"\") {\n const asset = await AssetService.getFromRemote(mkr.asset);\n if(asset) mkr.asset = asset;\n }\n\n const newMarkers = [...markers, mkr];\n setMarkers(newMarkers);\n onMarkersUpdate(newMarkers);\n } else {\n console.error(\"there was an error\");\n }\n setShowAncillaryModal(false);\n setAncillaryType(\"\");\n };\n\n const onShowVideoPlayer = (markerId, cuePoint) => {\n setShowAncillaryVideoPlayer(true);\n setVideoSelectedMarker(markerId);\n setVideoSelectedTime(cuePoint);\n }\n\n const onEditUpdate = async (markerId, column, value) => {\n debugger;\n const _markers = [...existingMarkers]\n const marker = _markers.find(m => {return m._id === markerId});\n if (!marker) { return; }\n\n if (column === \"cuePoint\") {\n marker.cuePoint = value;\n }\n if (column === \"legend\") {\n marker.buttonText = value;\n }\n if (column === \"mandatory\") {\n marker.required = value;\n }\n\n const allMarkers = await MarkerService.update(markerId, marker);\n let updatedMarkers = []\n _markers.forEach(m => {\n let updatedMarker = null;\n for (const marker of allMarkers) {\n if(marker._id === m._id){ \n updatedMarker = marker;\n break;\n }\n }\n\n if(updatedMarker) updatedMarkers.push(updatedMarker);\n });\n\n setMarkers(updatedMarkers);\n };\n\n const renderMarkers = () => {\n if (!markers) {return <>;}\n\n const columns = [\n {\n dataField: \"asset\",\n text: \"Asset\",\n sort: true,\n headerAlign: \"left\",\n align: \"left\",\n editable: false,\n formatter: (cellContent, row) => {\n return (\n \n \n \n {row.asset}\n \n \n );\n }\n },\n {\n dataField: \"id\",\n text: \"\",\n headerAlign: \"center\",\n align: \"center\",\n editable: false,\n formatter: (cellContent, row) => {\n return (\n )\n }\n },\n {\n dataField: \"cuePoint\",\n text: \"Time Mark (secs)\",\n headerAlign: \"center\",\n align: \"center\",\n sort: true,\n editable: true\n },\n {\n dataField: \"legend\",\n text: \"Display Text\",\n sort: false,\n editable: true,\n headerAlign: \"left\",\n align: \"left\"\n },\n {\n dataField: \"mandatory\",\n text: \"Mandatory\",\n headerAlign: \"left\",\n headerStyle: (column, colIndex) => {\n return { width: \"50px\", textAlign: \"left\" };\n },\n editable: false,\n formatter: (cellContent, row) => {\n return (\n {\n onEditUpdate(row.id, \"mandatory\", e.target.checked);\n }}\n />\n );\n }\n },\n {\n dataField: \"\",\n text: \"\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"center\",\n align: \"center\",\n editable: false,\n formatter: (cellContent, row) => {\n return (\n
    \n remove(row.id)}\n >\n {\" \"}\n \n \n
    \n );\n }\n }\n ];\n\n const markersData = markers.map(marker => {\n let assetTitle = \"No Asset\";\n let assetType = \"N/A\";\n if(marker.assessment) {\n assetTitle = marker.assessment.title;\n assetType = marker.assessment.type;\n }\n\n if(marker.asset) {\n assetTitle = marker.asset.title;\n assetType = marker.asset.type;\n }\n\n return {\n id: marker._id,\n cuePoint: marker.cuePoint || 0,\n legend: marker.buttonText || \"Double click to edit\",\n asset: assetTitle,\n type: assetType,\n mandatory: marker && marker.required\n };\n });\n\n const cellEdit = cellEditFactory({\n mode: \"click\",\n blurToSave: true,\n afterSaveCell: (oldValue, newValue, row, column) => {\n onEditUpdate(row.id, column.dataField, newValue);\n }\n });\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n return (\n
    \n
    \n
    \n {\n setShowAncillaryModal(true);\n setAncillaryType(\"typeQuiz\");\n }}\n >\n + Quiz\n \n {\n setShowAncillaryModal(true);\n setAncillaryType(\"typeMultimedia\");\n }}\n >\n + Multimedia\n \n
    \n \n **Double click on textfield to edit or rename content\n \n
    \n {renderMarkers()}\n\n setShowAncillaryModal(false)}\n ancillaryType={ancillaryType}\n onProceed={(ancillaryId, type) => create(ancillaryId, type)}\n />\n\n { onEditUpdate(markerId, 'cuePoint', videoTime) }}\n show={showAncillaryVideoPlayer}\n hide={() => setShowAncillaryVideoPlayer(false)}\n />\n
    \n );\n};\n\nexport default AncillaryTable;\n","import React, {useState, useEffect} from 'react';\nimport {Button, Modal, OverlayTrigger, Popover, Badge, Alert} from 'react-bootstrap';\nimport CSVReader from 'react-csv-reader';\nimport * as Icons from 'react-bootstrap-icons';\nimport Config from '../../../../config/Config';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport Track from \"../../../../models/Track\";\nimport StringUtils from \"../../../../utils/StringUtils\";\nimport './modal.css';\n\nconst TranscriptImportModal = (props) => {\n\n const { transcript, show, onCancel, onProceed } = props;\n \n const { SearchBar } = Search;\n\n const [step, setStep] = useState(0);\n\n const [showError, setShowError] = useState(false);\n const [showParseError, setShowParseError] = useState(false);\n const [tracks, setTracks] = useState([]);\n\n const modalTitle = 'Import Transcript CSV';\n const uploadErrorMessage = 'There was a problem uploading transcript. Please try again';\n const parseErrorMessage = 'There was a problem parsing the provided csv. Please refer to data requirements.';\n\n\n const onImport = async () => {\n if(!tracks || tracks.length === 0) { return; }\n transcript.tracks = tracks;\n onProceed(transcript);\n reset();\n }\n\n const reset = () => {\n setShowError(false);\n setShowParseError(false);\n setTracks([]);\n setStep(0);\n }\n\n const validate = (data) => {\n let valid = true;\n if(data.length !== 4) { valid = false; setShowParseError(true); }\n return valid;\n } \n\n const onCsvUploaded = (data, fileInfo) => {\n\n let _tracks = [];\n let no_error = true;\n\n if(fileInfo.type === \"text/csv\") {\n if(data.length > 1) {\n //ignore the first row!\n for (let index = 1; index < data.length; index++) {\n const transcriptData = data[index];\n \n //avoid empty rows\n if(transcriptData[0] === \"\"){ continue; }\n\n if(!validate(transcriptData)) no_error = false;\n\n //validate timestamps have correct format (XX:XX)\n let minutes = StringUtils.trim(transcriptData[0]);\n let seconds = StringUtils.trim(transcriptData[1]);\n if(minutes.length === 1) minutes = \"0\" + minutes;\n if(seconds.length === 1) seconds = \"0\" + seconds;\n\n let track = new Track();\n track.setTimestamp(`${minutes}:${seconds}`);\n track.setContent(StringUtils.trim(transcriptData[2]));\n track.setType(StringUtils.trim(transcriptData[3]));\n _tracks.push(track);\n }\n }\n }\n\n if(no_error) setTracks(_tracks);\n setStep(1);\n }\n\n const removeTrack = (id) => {\n const _tracks = [...tracks];\n const ts = _tracks.filter(_t => _t._id !== id)\n setTracks(ts);\n }\n\n const renderTracks = () => {\n if (!tracks) {\n return \"\";\n }\n \n const columns = [\n {\n dataField: \"timestamp\",\n text: \"Timestamp\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.timestamp}\n
    \n );\n }\n },\n {\n dataField: \"content\",\n text: \"Content\",\n headerAlign: \"left\",\n align: \"left\"\n },\n {\n dataField: \"type\",\n text: \"Type\",\n headerAlign: \"left\",\n align: \"left\"\n }\n ];\n \n const tracksData = tracks.map((track, index) => {\n return {\n id: track._id,\n timestamp: track.timestamp,\n type: track.type,\n content: track.content\n };\n });\n \n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n const resetAndHide = () => {\n reset(); \n onCancel();\n }\n\n return (\n resetAndHide()}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n backdrop=\"static\"\n id=\"batch-import-modal\"\n >\n \n \n

    {modalTitle}

    \n
    \n
    \n \n setShowError(false)}>\n {uploadErrorMessage}\n \n setShowParseError(false)}>\n {parseErrorMessage}\n \n
    \n
    \n
    Upload transcript CSV file
    \n \n
    \n
    \n \n Requirements\n \n
      \n
    1. The minutes expression must reside within the range 00 - 59
    2. \n
    3. The seconds expression must reside within the range 00 - 59
    4. \n
    5. The content of the transcript's track may contain supported HTML formatting tags (bold, italics, underline)
    6. \n
    7. The type value must be one of the following: PLAIN, SECTION, BULLET_LIST, CALLOUT
    8. \n
    \n
    \n \n }>\n \n \n
    \n { onCsvUploaded(data, fileInfo) } }/>\n
    \n\n
    \n {renderTracks()}\n
    \n\n
    \n \n \n \n \n );\n}\n \nexport default TranscriptImportModal;","import React, {useState, useEffect} from 'react';\nimport {Dropdown} from 'react-bootstrap';\nimport * as Icons from 'react-bootstrap-icons';\nimport LanguageService from '../../../services/LanguageService';\n\nconst TranslateDropdown = (props) => {\n\n const {processedLangCodes=[], onSelected, onGenerate} = props;\n\n const [activeSelection, setActiveSelection] = useState('Translation Options');\n\n const [supportedLanguages, setSupportedLanguages] = useState([]);\n\n const [processedLanguages, setProcessedLanguages] = useState([]);\n\n useEffect(() => {\n const loadFromServer = async () => {\n const languages = await LanguageService.getAllFromRemote();\n if(languages && languages.length > 0) setSupportedLanguages(languages);\n }\n //loadFromServer();\n }, []);\n/*\n useEffect(() => {\n if(processedLangCodes && processedLangCodes.length > 0){\n if(supportedLanguages && supportedLanguages.length > 0){\n const pl = processedLangCodes.map(plc => { return supportedLanguages.find(sl => sl.code === plc) });\n setProcessedLanguages(pl);\n }\n }\n }, [processedLangCodes]);\n*/\n const onItemClick = (code) => {\n const language = supportedLanguages.find(l => l.code === code);\n if(language){\n setActiveSelection(`${language.name} (${language.nativeName})`);\n if(processedLangCodes && processedLangCodes.length > 0){\n const languageIsAlreadyProcessed = processedLangCodes.find(pl => pl.code === language.code);\n if(languageIsAlreadyProcessed){\n onSelected(language);\n } else {\n onGenerate(language);\n }\n } else {\n onGenerate(language);\n }\n }\n }\n\n const showPendingLanguages = () => {\n if(supportedLanguages && supportedLanguages.length > 0){\n return supportedLanguages.map((lang, i) => {\n return onItemClick(lang.code)}>{`${lang.name} (${lang.nativeName})`}\n });\n } else {\n return None Available\n }\n }\n\n const showProcessedLanguages = () => {\n if(processedLanguages && processedLanguages.length > 0){\n return processedLanguages.map((lang, i) => {\n return onItemClick(lang.code)}> {`${lang.name} (${lang.nativeName})`}\n });\n } else {\n return None Processed\n }\n }\n\n return (\n \n \n {activeSelection}\n \n \n Processed Translations\n {showProcessedLanguages()}\n \n Available Languages\n {showPendingLanguages()}\n \n \n );\n}\n \nexport default TranslateDropdown;","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport MockService from \"./MockService\";\nimport Config from './../config/Config';\nimport ResponseUtil from './../utils/ResponseUtil';\n\nexport default {\n getAllFromRemote: async () => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.getLanguages()); }\n try { \n let response = await new ApiService().get(ApiPath.GET_LANGUAGES_ENDPOINT);\n if (ResponseUtil.isOK(response)) {\n const { languages } = response.data;\n return languages;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`LanguageService | Error while attempting to get response: ${error}`);\n return [];\n }\n }\n}","import React, {useState} from 'react';\nimport { Button, Form, Col} from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport AssetService from '../../../services/AssetService';\n\nconst TranscriptEditorRow = (props) => {\n\n const {track, index, onInsertBelowOrAbove, modifyTimestamp, onRemove, onEnterContent, modifyFormatOption, onAssetPickerCalled} = props;\n\n const showAncillaryPickerMenu = () => {\n if(track && track.asset && track.asset !== \"\") {\n let multimediaAsset = null;\n if(track.asset !== 0){\n multimediaAsset = AssetService.get(track.asset);\n }\n return (<>\n {multimediaAsset ? {multimediaAsset.title} : None Selected}\n \n );\n }else{\n return <>-;\n }\n }\n\n return (\n \n \n onInsertBelowOrAbove(index)}>+ Insert\n
    \n modifyTimestamp(track, e.target.value)}/>\n
    \n onInsertBelowOrAbove(index + 1)}>+ Add\n \n \n \n modifyFormatOption(track, e.target.value)}>\n \n \n \n \n \n \n \n \n \n \n \n \n {showAncillaryPickerMenu()}\n \n \n \n \n );\n}\n \nexport default TranscriptEditorRow;","import React, {useEffect, useState} from 'react';\nimport { Modal, Button, Spinner } from \"react-bootstrap\";\nimport * as Icons from 'react-bootstrap-icons';\nimport TranscriptService from '../../../../services/TranscriptService';\nimport \"./confirmdeletemodal.css\";\n\nconst TranslationWarningModal = (props) => {\n\n const { lectureId, language, show, onHide, onCancel, onProceed } = props;\n\n const [step, setStep] = useState(0);\n const [operationSuccess, setOperationSuccess] = useState('NONE');\n\n useEffect(() => {\n if(show) setStep(0);\n }, [show]);\n\n const onProceedClick = async () => {\n setStep(step + 1);\n const success = await TranscriptService.createTranscript(lectureId, language.code);\n setOperationSuccess(success ? 'SUCCESS': 'FAILED');\n }\n\n const onCloseAndComplete = () => {\n onProceed();\n }\n\n const getStep0Text = () => {\n return

    \n This transcript will be translated to {language ? language.name : ''}. \n The translation process may take several minutes to complete. Are you sure?\n
    This operation cannot be undone.\n

    ;\n }\n\n const getStep1Text = () => {\n if(operationSuccess === 'NONE'){\n return

    \n Transcript translation to {language.name} language is being processed. Please wait...\n

    ;\n }\n\n if(operationSuccess === 'SUCCESS'){\n return <>SUCCEEDED\n }\n \n if(operationSuccess === 'FAILED'){\n return <>FAILED\n }\n }\n\n const showProgressSpinner = () => {\n if(operationSuccess === 'NONE'){\n return
    \n \n
    \n } else {\n return <>\n }\n }\n\n const showWarningIcon = () => {\n return
    \n \n
    \n }\n\n return (\n \n \n {\n step === 0 ? showWarningIcon() : showProgressSpinner()\n }\n \n \n \n {\n step === 0 ? getStep0Text() : getStep1Text()\n }\n \n \n {\n step === 0 ?\n <>\n \n \n \n :\n <>\n \n \n }\n \n \n \n );\n}\n \nexport default TranslationWarningModal;","import React, { useState, useEffect, useRef } from \"react\";\nimport Select from \"react-select\";\nimport Config from \"../../../../config/Config\";\nimport { Typeahead } from \"react-bootstrap-typeahead\";\nimport { Alert, Button, Badge, Spinner, Table, Form} from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Steps, { Step } from \"rc-steps\";\nimport TranscriptEditor from \"./../../../widgets/texteditor/TranscriptEditor\";\nimport ProgressBar from \"react-bootstrap/ProgressBar\";\nimport ApiPath from \"../../../../utils/ApiPath\";\nimport axios from 'axios';\nimport LocalStorageService from \"./../../../../services/LocalStorageService\";\nimport Lecture from \"./../../../../payloads/Lecture\";\nimport Track from \"./../../../../models/Track\";\nimport Transcript from \"./../../../../models/Transcript\";\nimport InstructorService from \"./../../../../services/InstructorService\";\nimport AssetService from \"./../../../../services/AssetService\";\nimport AssessmentService from \"./../../../../services/AssessmentService\";\nimport LectureService from \"./../../../../services/LectureService\";\nimport MarkerService from \"./../../../../services/MarkerService\";\nimport TranscriptService from \"./../../../../services/TranscriptService\";\nimport ThumbnailCreator from \"./../../../widgets/thumbnails/ThumbnailCreator\";\nimport StringUtils from \"./../../../../utils/StringUtils\";\nimport VideoTimeUtils from \"./../../../../utils/VideoTimeUtils\";\nimport LimespringUtils from \"./../../../../utils/LimespringUtils\";\nimport AncillaryTable from \"./../../../widgets/ancillary/AncillaryTable\";\nimport LimespringVideoPlayer from \"./../../../widgets/videoplayer/LimespringVideoPlayer\";\nimport YouTubeVideoPlayer from \"./../../../widgets/videoplayer/YouTubeVideoPlayer\";\nimport ConfirmDeleteModal from \"./../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport TranscriptImportModal from \"./../../../widgets/modals/instructor/TranscriptImportModal\";\nimport AncillaryModal from \"./../../../widgets/modals/instructor/AncillaryModal\";\nimport TranslateDropdown from \"./../../../widgets/translate/TranslateDropdown\";\nimport \"./unitbuilder.css\";\nimport * as XLSX from 'xlsx';\n\n//css\nimport \"rc-steps/assets/index.css\";\nimport \"rc-steps/assets/iconfont.css\";\nimport \"react-rangeslider/lib/index.css\";\nimport ProfileService from \"../../../../services/ProfileService\";\nimport TranscriptEditorRow from \"../../../widgets/texteditor/TranscriptEditorRow\";\nimport TranslationWarningModal from \"../../../widgets/modals/instructor/TranslationWarningModal\";\nimport SchoolService from \"../../../../services/SchoolService\";\n\nconst LectureBuilder = props => {\n\n const { lecture, feedback, callback } = props;\n\n const parser = new DOMParser();\n\n const [step, setStep] = useState(0);\n\n //utilities\n const [videoCueForScreenshot, setVideoCueForScreenshot] = useState(0);\n const [videoDurationInSecs, setVideoDurationInSecs] = useState(0);\n const [videoThumbnail, setVideoThumbnail] = useState(null);\n\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [thumbnail, setThumbnail] = useState(\"\");\n const [transcript, setTranscript] = useState(null);\n const [transcripts, setTranscripts] = useState(null);\n const [duration, setDuration] = useState(\"\");\n const [instructors, setInstructors] = useState([]);\n const [markers, setMarkers] = useState([]);\n const [assessments, setAssessments] = useState([]);\n const [difficulty, setDifficulty] = useState('BEGINNER');\n const [scope, setScope] = useState('MATH');\n\n //temp vars\n const [tempLecture, setTempLecture] = useState(null);\n const [isThumbnailGenerated, setIsThumbnailGenerated] = useState(false);\n const [allInstructors, setAllInstructors] = useState(null);\n const [allQuizzes, setAllQuizzes] = useState(null);\n const [videoSource, setVideoSource] = useState(null);\n\n const videoPlayer1 = useRef(null);\n const lectureVideoUpload = useRef(null);\n\n const [alertShow, setAlertShow] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n\n const [progressUpload, setProgressUpload] = useState(0);\n\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n\n const failedResponseMessage = \"There was a problem creating lecture. Please try again.\";\n const existingTranscriptMessage = \"A transcript already exists for this lecture. Please remove it first.\";\n const transcriptInProgressMessage = \"Generating this lecture's transcript may take up several minutes. You can continue working on your lecture and we'll notify you when the transcript is ready.\";\n const flaggedForTranscriptMessage = \"Generating this lecture's transcript may take up several minutes. You can continue submitting your lecture and we'll notify you when the transcript is ready.\";\n const [progress, setProgress] = useState(false);\n\n const [trackContent, setTrackContent] = useState('');\n\n const [showRemoveTranscriptModal, setShowRemoveTranscriptModal] = useState(false);\n const [showImportTranscriptModal, setShowImportTranscriptModal] = useState(false);\n const [showAncillaryModal, setShowAncillaryModal] = useState(false);\n const [showTranslationModal, setShowTranslationModal] = useState(false);\n const [showTranscriptAlert, setShowTranscriptAlert] = useState(false);\n const [showFlaggedForTranscript, setShowFlaggedForTranscript] = useState(false);\n const [showTranscriptInProgress, setShowTranscriptInProgress] = useState(false);\n\n const [currentPendingAncillaryTrack, setCurrentPendingAncillaryTrack] = useState(null);\n const [transcriptTextModified, setTranscriptTextModified] = useState(false);\n const [languageToTranslateTo, setLanguageToTranslateTo] = useState(null);\n\n const [showYouTubeVideo, setShowYouTubeVideo] = useState(false);\n\n const [youtubeThumbnailUrl,setYoutubeThumbnailUrl] = useState(\"\");\n const [youtubeUrl, setYoutubeUrl] = useState(\"\");\n\n const [isEmptyTrack, setIsEmptyTrack] = useState(false);\n\n const [isNewVideoSelected, setIsNewVideoSelected] = useState(false);\n\n const [schools, setSchools] = useState([]);\n\n const [selectedSchool, setSelectedSchool] = useState(null);\n\n useEffect(() => {\n const loadSchools = async () => {\n const schoolData = await SchoolService.getAllFromRemote(false);\n setSchools(schoolData);\n \n if (lecture && lecture.schools && lecture.schools.length > 0) {\n const schoolOptions = schoolData.map(school => {\n return { value: school.id, label: school.title };\n });\n const defaultSchool = schoolOptions.find(school => school.value === lecture.schools[0]._id);\n setSelectedSchool(defaultSchool);\n }\n };\n\n loadSchools();\n }, [lecture]);\n\n\n useEffect(() => {\n\n const load = async () => {\n //reset on load\n reset();\n\n setSchools(await SchoolService.getAllFromRemote(false))\n setAllInstructors(await InstructorService.getAllFromRemote());\n setAllQuizzes(await AssessmentService.getAllFromRemote());\n\n setTitle(lecture ? lecture.title : ``);\n setDescription(lecture ? lecture.description : ``);\n setUrl(lecture ? lecture.url : ``);\n setDuration(lecture ? lecture.duration : ``);\n setDifficulty(lecture ? lecture.difficulty : `BEGINNER`);\n setScope(lecture ? lecture.scope : 'MATH');\n if(lecture && lecture.transcripts && lecture.transcripts.length > 0){\n setTranscripts(lecture.transcripts);\n const trscRef = lecture.transcripts.find(t => t.code === 'en');\n if(trscRef){\n //weird default _id circular structure!\n const trscrpt = await TranscriptService.getDefaultTranscript(trscRef._id._id)\n setIsEmptyTrack(false);\n if(trscrpt) {\n if(trscrpt.status === 'IN_PROGRESS'){\n setShowTranscriptInProgress(true);\n }else {\n setTranscript(trscrpt);\n if(!trscrpt.tracks || trscrpt.tracks.length === 0){\n setIsEmptyTrack(true);\n trscrpt.tracks = [new Track()]\n } else {\n setIsEmptyTrack(false);\n }\n reloadTrackContent(trscrpt.tracks);\n }\n }\n }\n \n }else {\n const t = new Transcript('NONE', 'MANUAL', '', [new Track()]);\n //setTranscript(t);\n }\n setInstructors(lecture ? await getAllInstructors(lecture) : getCurrentUserAsInstructor());\n setMarkers(lecture ? lecture.markers : []);\n setThumbnail(lecture ? lecture.thumbnail : ``);\n setAssessments(lecture ? lecture.assessments : []);\n\n setVideoThumbnail(lecture && lecture.thumbnail !== \"\" ? lecture.thumbnail : null);\n setVideoSource(lecture && lecture.url !== \"\" ? lecture.url : null);\n setShowYouTubeVideo(!lecture || !lecture.isYoutubeVideo ? false: lecture.isYoutubeVideo);\n setYoutubeUrl(lecture && lecture.isYoutubeVideo? lecture.youtubeUrl :\"\")\n setYoutubeThumbnailUrl(lecture && lecture.isYoutubeVideo? lecture.thumbnail :\"\")\n if(videoPlayer1.current) videoPlayer1.current.src = lecture && lecture.url !== \"\" ? lecture.url : null;\n\n \n \n }\n\n load();\n }, [lecture]);\n\n const reset = () => {\n resetFlags();\n resetFields();\n setIsNewVideoSelected(false);\n };\n\n const resetAndHide = () => {\n resetFlags();\n resetFields();\n feedback();\n };\n\n const resetFlags = () => {\n setStep(0);\n setAlertShow(false);\n setShowRemoveTranscriptModal(false);\n setShowTranscriptAlert(false);\n setShowImportTranscriptModal(false);\n setIsThumbnailGenerated(false);\n setShowTranslationModal(false);\n };\n\n const resetFields = () => {\n setTitle(``);\n setDescription(``);\n setUrl(``);\n setDuration(``);\n setTranscript(null);\n setTranscripts([]);\n setTrackContent('');\n setScope('MATH');\n setShowTranscriptInProgress(false);\n setShowFlaggedForTranscript(false);\n setInstructors([]);\n setMarkers([]);\n setThumbnail(``);\n setAssessments([]);\n setVideoDurationInSecs(0);\n setVideoCueForScreenshot(0);\n setVideoThumbnail(null);\n setVideoSource(null);\n setTempLecture(null);\n setProgressUpload(0);\n setCurrentPendingAncillaryTrack('');\n setShowAncillaryModal(false);\n setTranscriptTextModified(false);\n setLanguageToTranslateTo(null);\n setSchools([]);\n setSelectedSchool(null);\n\n if (!showYouTubeVideo) {\n //reset video player\n videoPlayer1.current.src = '';\n lectureVideoUpload.current.value = '';\n } else {\n setYoutubeUrl(\"\");\n setYoutubeThumbnailUrl(\"\");\n setShowYouTubeVideo(false);\n }\n };\n\n const getCurrentUserAsInstructor = () => {\n const user = ProfileService.get();\n if(!user) { return []; }\n return [user];\n }\n\n const getAllInstructors = async (lecture) => {\n if(lecture.instructors && lecture.instructors.length > 0){\n const instructors = await InstructorService.getByIdsFromRemote(lecture.instructors);\n return instructors;\n }\n }\n\n const validateForm = () => {\n if (StringUtils.isEmpty(title)) {\n setWrongInputMessage(\"Title is required. Please review.\");\n return false;\n }\n\n if (!videoSource && !showYouTubeVideo) {\n setWrongInputMessage(\"Video is required. Please review.\");\n return false;\n }\n\n return true;\n };\n\n const update = async () => {\n if (!validateForm()) {\n setAlertShow(true);\n return;\n }\n \n setProgress(true);\n \n try {\n let instructorIds = instructors?.map(instructor => instructor.id || instructor._id) || [];\n \n const quizMarkers = markers.filter(mrk => mrk.assessment !== \"\");\n const quizIds = quizMarkers.length > 0 ? quizMarkers.map(mrk => mrk.assessment._id) : [];\n const markerIds = markers.length > 0 ? markers.map(mrk => mrk._id) : [];\n \n let captureBlob = null; \n if (videoSource && !videoSource.includes(\"https:\")) {\n try {\n const blob = await fetch(videoSource).then(r => r.blob());\n captureBlob = blob;\n } catch (error) {\n console.error(\"Error fetching video blob:\", error);\n }\n }\n \n let _videoDuration = videoDurationInSecs === 0 ? duration : videoDurationInSecs;\n let updatedThumbnail = videoThumbnail && videoThumbnail !== \"\" ? videoThumbnail : thumbnail;\n let _schools = selectedSchool ? [selectedSchool.value] : null;\n \n let payload = new Lecture(\n title,\n description,\n _videoDuration,\n updatedThumbnail,\n instructorIds,\n markerIds,\n quizIds,\n captureBlob ? \"capture.mp4\" : \"\", \n url,\n JSON.stringify(transcript),\n difficulty,\n scope,\n showYouTubeVideo,\n youtubeUrl,\n _schools\n );\n \n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n \n if (captureBlob) {\n form.append(\"capture\", captureBlob, \"capture.mp4\"); \n }\n \n let response = null;\n try {\n response = await axios.post(\n `${ApiPath.UPDATE_LECTURE_ENDPOINT.replace(\":id\", lecture._id)}`,\n form,\n {\n headers: { \"Content-Type\": \"multipart/form-data\" },\n onUploadProgress: ProgressEvent => {\n setProgressUpload(Math.round((100 * ProgressEvent.loaded) / ProgressEvent.total));\n }\n }\n );\n } catch (error) {\n console.error(\"Error updating lecture:\", error);\n setShowFailedAlert(true);\n setProgress(false);\n return;\n }\n \n if (response && (response.status === 200 || response.status === 201)) {\n callback();\n LocalStorageService.store({ lectures: response.data.lectures });\n resetAndHide();\n } else {\n setShowFailedAlert(true);\n }\n } catch (error) {\n console.error(\"Unexpected error:\", error);\n setShowFailedAlert(true);\n }\n \n setProgress(false);\n };\n \n const create = async () => {\n if (validateForm()) {\n setProgress(true);\n \n const instructorIds =\n instructors.map(instructor => {\n return instructor._id;\n }) || [];\n \n const quizMarkers = markers.filter(mrk => mrk.assessment !== \"\");\n \n const quizIds =\n quizMarkers && quizMarkers.length > 0\n ? quizMarkers.map(mrk => mrk.assessment._id)\n : [];\n \n const markerIds =\n markers && markers.length > 0 ? markers.map(mrk => mrk._id) : [];\n \n let captureBlob = null; \n \n if (url === \"\") {\n try {\n const blob = await fetch(videoSource).then(r => r.blob());\n captureBlob = blob; \n } catch (error) {\n console.error(\"Error fetching video blob:\", error);\n }\n }\n \n let _videoDuration = videoDurationInSecs === 0 ? duration : videoDurationInSecs;\n \n const school = selectedSchool ? selectedSchool.value : null;\n let payload = new Lecture(\n title,\n description,\n _videoDuration,\n videoThumbnail,\n instructorIds,\n markerIds,\n quizIds,\n captureBlob ? \"capture.mp4\" : \"\",\n url,\n JSON.stringify(transcript),\n difficulty,\n scope,\n showYouTubeVideo,\n youtubeUrl, \n school\n );\n \n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n\n if (captureBlob) {\n form.append(\"capture\", captureBlob, \"capture.mp4\"); \n }\n \n const response = await axios.post(`${ApiPath.CREATE_LECTURE_ENDPOINT}`, form, {\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: ProgressEvent => {\n setProgressUpload(Math.round((100 * ProgressEvent.loaded) / ProgressEvent.total));\n }\n });\n \n if (response && (response.status === 200 || response.status === 201)) {\n callback();\n const { lectures } = response.data;\n LocalStorageService.store({ lectures: lectures });\n \n resetAndHide();\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n setProgress(false);\n };\n \n const showVideoPlayerStep1 = () => {\n return (\n <>\n onVPSeeked(e.target.currentTime)}\n controls\n >\n \n \n \n \n );\n };\n\n const onChangeThumbnail = (url) => {\n setThumbnail(url);\n setVideoThumbnail(url);\n setYoutubeThumbnailUrl(url);\n };\n\n const onSetYoutubeDuration = (_duration) => {\n setDuration(_duration)\n };\n\n const onSetYoutubeUrl = (url) => {\n setUrl(url);\n setYoutubeUrl(url);\n }\n\n const showYouTubeVideoPlayerStep1 = () => {\n return (\n <>\n onChangeThumbnail(url)} \n onSetYoutubeDuration={ (_duration) => onSetYoutubeDuration(_duration)} \n onSetYoutubeUrl={ (url) => onSetYoutubeUrl(url)} \n youtubeVideoUrl={youtubeUrl} youtubeThumbnailUrl={youtubeThumbnailUrl}\n />\n \n );\n };\n \n\n const showVideoPlayerStep3 = () => {\n if (!tempLecture) {\n return \"\";\n }\n return (\n
    \n {}}/>\n
    \n );\n };\n\n const showYoutubeVideoPlayerStep3 = () => {\n if (!tempLecture) {\n return \"\";\n }\n return (\n
    \n onChangeThumbnail(url)} \n onSetYoutubeDuration={ (_duration) => onSetYoutubeDuration(_duration)} \n onSetYoutubeUrl={ (url) => onSetYoutubeUrl(url)} \n youtubeVideoUrl={youtubeUrl} youtubeThumbnailUrl={youtubeThumbnailUrl}\n />\n
    \n );\n };\n\n const onFileSelected = e => {\n const file = e.target.files[0];\n if (!file) {\n return;\n }\n const size = file.size;\n const mime = file.type;\n const blob = URL.createObjectURL(file);\n setIsNewVideoSelected(true);\n setVideoSource(blob);\n videoPlayer1.current.src = blob;\n\n\n videoPlayer1.current.onloadedmetadata = () => {\n setVideoDurationInSecs(videoPlayer1.current.duration);\n setVideoCueForScreenshot(Config.defaultThumbnailSeconds);\n };\n };\n\n const showInstructorsTypeAhead = () => {\n if (allInstructors) {\n return (\n `${option.firstName} ${option.lastName}`}\n multiple={true}\n onChange={options => setInstructors(options)}\n options={allInstructors || []}\n placeholder=\"Choose an instructor...\"\n selected={instructors || []}\n />\n );\n } else {\n return \"\";\n }\n };\n\n const onVPSeeked = value => {\n setVideoCueForScreenshot(value);\n videoPlayer1.current.currentTime = value;\n };\n\n const validateStep2 = () => {\n if ((!showYouTubeVideo && (!videoSource || videoSource === \"\")) || \n (showYouTubeVideo && (!youtubeUrl || youtubeUrl === \"\"))) {\n setAlertShow(true);\n } else {\n const clone = { ...tempLecture };\n if (!showYouTubeVideo) {\n clone[\"url\"] = videoSource;\n clone[\"thumbnail\"] = videoThumbnail;\n } else {\n clone[\"url\"] = youtubeUrl;\n clone[\"thumbnail\"] = youtubeThumbnailUrl;\n }\n setTempLecture(clone);\n setStep(step + 1);\n }\n };\n\n const validateStep1 = () => {\n if (!title || title === \"\") {\n setAlertShow(true);\n } else {\n const clone = { ...tempLecture };\n clone[\"title\"] = title;\n clone[\"description\"] = description;\n clone[\"instructors\"] = instructors;\n clone[\"markers\"] = [];\n setTempLecture(clone);\n setStep(step + 1);\n }\n };\n\n const showMarkersList = () => {\n if (!markers || markers.length === 0) {\n return \"No Markers Available\";\n }\n\n return (\n
      \n {markers.map(marker => {\n let assetName = \"Marker Asset\";\n if (marker.asset && marker.asset !== \"\") assetName = marker.asset.title;\n if (marker.assessment && marker.assessment !== \"\") assetName = marker.assessment.title;\n return (\n
    • \n \n \n {assetName} ({VideoTimeUtils.formatVideoTime(marker.cuePoint)})\n \n
    • \n );\n })}\n
    \n );\n };\n\n const textEditorParseXML = (html) => {\n html = html.replace(/ /g, ' ');\n const xmlDoc = parser.parseFromString(html, \"text/xml\");\n let nodes = [ ...xmlDoc.childNodes[0].childNodes ];\n const tracksCopy = [...transcript.tracks];\n \n let _tracks = nodes.map(node => {\n const id = node.getAttribute('id')\n const _track = tracksCopy.find(t => t._id === id);\n if(!_track) return null;\n _track.content = node.innerHTML;\n return _track;\n });\n\n //avoid nulls\n _tracks = _tracks.filter(t => t !== null);\n\n const _t = {...transcript}\n if(!_tracks || _tracks.length == 0) {\n _t.tracks = [new Track()]\n }\n reloadTrackContent(_t.tracks);\n setTranscript(_t);\n }\n\n const reloadTrackContent = (_tracks) => {\n let content = LimespringUtils.getDecoratedTranscriptTracks(_tracks);\n setTrackContent(content.join(\"\"))\n }\n\n const CustomExportCSVButton = ({ transcript }) => {\n const [loadingCsv, setLoadingCsv] = useState(false);\n\n const exportCSV = async () => { \n setLoadingCsv(true);\n try {\n const rows = [\n [\"minutes\", \"seconds\", \"content\", \"type\"]\n ];\n \n for (const track of transcript.tracks) {\n let [minutes, seconds] = track.timestamp.split(\":\").map(Number);\n let row = [minutes, seconds, track.content, track.type];\n rows.push(row);\n }\n\n const worksheet = XLSX.utils.aoa_to_sheet(rows);\n const wscols = [\n { wch: 10 }, // minutes column width\n { wch: 10 }, // seconds column width\n { wch: 50 }, // content column width\n { wch: 15 } // type column width\n ];\n worksheet['!cols'] = wscols;\n\n const workbook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(workbook, worksheet, \"Transcripts\");\n XLSX.writeFile(workbook, \"transcript.xlsx\");\n \n } catch (error) {\n console.error(\"downloading error : \", error);\n }\n \n setLoadingCsv(false);\n };\n \n return (\n
    \n {loadingCsv ? (\n
    \n

    Downloading CSV file

    \n

    please wait...

    \n \n
    \n ) : (\n \n \n \n )}\n
    \n );\n\n };\n\n const renderTranscriptTracks = () => {\n\n const modifyTimestamp = (t, timestamp) => {\n t.timestamp = timestamp;\n const _transcript = {...transcript};\n let _tracks = _transcript.tracks;\n let _t = _tracks.find(_t => _t._id === t._id);\n if(!_t){ return; }\n _t = t;\n _transcript.tracks = _tracks;\n setTranscript(_transcript);\n }\n\n const modifyFormatOption = (t, type) => {\n t.type = type;\n if(type === 'PROMPT_ASSET'){\n t.asset = '0'; //temp id\n }else{\n if(t.asset && t.asset === '0') delete t.asset;\n }\n const _transcript = {...transcript};\n let _tracks = _transcript.tracks;\n let _t = _tracks.find(_t => _t._id === t._id);\n if(!_t){ return; }\n _t = t;\n _transcript.tracks = _tracks;\n setTranscript(_transcript);\n reloadTrackContent(_tracks);\n }\n\n const onEnterContent = (t, value) => {\n t.content = value;\n const _transcript = {...transcript};\n let _tracks = _transcript.tracks;\n let _t = _tracks.find(_t => _t._id === t._id);\n if(!_t){ return; }\n _t = t;\n _transcript.tracks = _tracks;\n _transcript.status = 'COMPLETED';\n setTranscript(_transcript);\n reloadTrackContent(_tracks);\n setTranscriptTextModified(true);\n }\n\n const onInsertBelowOrAbove = (position) => {\n if(position < 0) { position = 0; }\n const _track = new Track();\n const _transcript = {...transcript};\n let _tracks = _transcript.tracks;\n _tracks.splice(position, 0, _track);\n _transcript.tracks = _tracks;\n setTranscript(_transcript);\n }\n\n const onRemove = (t) => {\n const _transcript = {...transcript};\n let _tracks = _transcript.tracks;\n _tracks = _tracks.filter(_t => _t._id !== t._id);\n _transcript.tracks = _tracks;\n setTranscript(_transcript);\n reloadTrackContent(_tracks);\n }\n\n const onAssetPickerCalled = (t) => {\n setCurrentPendingAncillaryTrack(t);\n setShowAncillaryModal(true);\n }\n\n const populateTracks = () => {\n\n if(!transcript) { return <>; }\n\n return transcript.tracks.map((t, index) => {\n return (\n onInsertBelowOrAbove(i)}\n modifyTimestamp={(t, value) => modifyTimestamp(t, value)}\n onRemove={(t) => onRemove(t)}\n onEnterContent={(t, value) => onEnterContent(t, value)}\n modifyFormatOption={(t, value) => modifyFormatOption(t, value)}\n onAssetPickerCalled={(t) => onAssetPickerCalled(t)}\n />\n );\n });\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {populateTracks()}\n \n
    TimestampTypeAssetContentDelete
    \n );\n }\n\n const removeAllTranscripts = async () => {\n if(lecture) await TranscriptService.removeAllTranscripts(lecture._id)\n setTranscript(null);\n setTrackContent('');\n setShowRemoveTranscriptModal(false);\n setIsEmptyTrack(true);\n }\n\n const autoGenerateTranscript = async () => {\n\n let _transcript = {...transcript};\n _transcript.type = 'AUTOMATIC';\n _transcript.status = 'NONE';\n _transcript.tracks = [];\n setIsEmptyTrack(false);\n \n if(!isNewVideoSelected && lecture) {\n const _transcripts = await LectureService.generateAutomaticTranscript({lectureId: lecture._id, transcript: _transcript});\n if (_transcripts && _transcripts.transcripts._id) {\n _transcript = _transcripts.transcripts;\n }\n }\n setTranscript(_transcript);\n setShowTranscriptInProgress(true);\n }\n\n const renderTranscriptGeneration = () => {\n if(!showTranscriptInProgress && !showFlaggedForTranscript){ return <>}\n if(showTranscriptInProgress) {\n return
    \n \n {transcriptInProgressMessage}\n
    \n }\n if(showFlaggedForTranscript){\n return
    \n \n {flaggedForTranscriptMessage}\n
    \n }\n }\n\n const populateTranscript = (_transcript) => {\n if(_transcript){\n _transcript.status = 'COMPLETED';\n setTranscript(_transcript);\n reloadTrackContent(_transcript.tracks);\n }\n setShowImportTranscriptModal(false);\n }\n\n const onGenerateNewTranslation = (lang) => {\n setLanguageToTranslateTo(lang);\n setShowTranslationModal(true);\n }\n\n const processNewTranslation = () => {\n setShowTranslationModal(false);\n }\n\n const assignAncillaryItemToTrack = (ancillaryItemId, ancillaryItemType) => {\n if(currentPendingAncillaryTrack && ancillaryItemId !== ''){\n const track = {...currentPendingAncillaryTrack};\n track.asset = ancillaryItemId;\n\n //update track!\n const _transcript = {...transcript};\n let _tracks = _transcript.tracks;\n let _t = _tracks.find(_t => _t._id === track._id);\n if(!_t){ return; }\n _t.asset = track.asset;\n _transcript.tracks = _tracks;\n setTranscript(_transcript);\n reloadTrackContent(_tracks);\n setCurrentPendingAncillaryTrack(null);\n setShowAncillaryModal(false);\n }\n }\n\n const setLectureScope = (val) => {\n if(val === 'General') setScope('MATH');\n if(val === 'Programming') setScope('PROGRAMMING');\n }\n\n const showSchoolDropdown = () => {\n if (schools) {\n const schoolOptions = schools.map(school => {\n return { value: school.id, label: school.title };\n });\n \n const _selectedSchool = lecture && lecture.schools && lecture.schools.length > 0\n ? schoolOptions.find(school => school.value === lecture.schools[0]._id)\n : null;\n \n return (\n setSelectedSchool(_selectedOption)}\n options={schoolOptions}\n className=\"mt-2 w-50\"\n isClearable={true}\n />\n );\n }\n return null;\n };\n \n\n\n return (\n
    \n setAlertShow(false)}\n dismissible>\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible>\n {failedResponseMessage}\n \n\n setShowTranscriptAlert(false)}\n dismissible>\n {existingTranscriptMessage}\n \n\n
    \n \n setStep(0)}/>\n setStep(1)}/>\n setStep(2)}/>\n setStep(3)}/>\n setStep(4)}/>\n \n
    \n\n
    \n \n setStep(step - 1)}\n >\n Back\n \n
    \n
    \n Title\n setTitle(e.target.value)}\n />\n
    \n
    \n School:\n {showSchoolDropdown()}\n
    \n
    \n Lecture Instructors\n {showInstructorsTypeAhead()}\n
    \n
    \n \n Difficulty\n setDifficulty(e.target.value.toUpperCase())}>\n \n \n \n \n \n\n \n Scope\n setLectureScope(e.target.value)}>\n \n \n \n \n
    \n
    \n Summary\n setDescription(e.target.value)}\n >\n
    \n
    \n
    \n \n
    \n
    \n\n
    \n \n
    \n setShowYouTubeVideo(e.target.checked)}\n />\n
    \n {showYouTubeVideo && \n
    \n \n {showYouTubeVideoPlayerStep1()}\n
    \n
    }\n {!showYouTubeVideo &&
    \n \n {!showYouTubeVideo && onFileSelected(e)}\n />}\n\n \n
    \n\n {showVideoPlayerStep1()}\n\n
    \n
    Thumbnail Preview:
    \n
    \n setVideoThumbnail(thumb)}\n originalThumbnail={thumbnail}\n />\n
    \n \n
    \n \n
    }\n \n \n \n \n\n
    \n \n
    \n
    Transcript
    \n\n
    \n {renderTranscriptGeneration()}\n
    \n\n
    \n
    \n
    \n \n \n \n \n
    \n
    \n {}} \n onGenerate={(lang) => onGenerateNewTranslation(lang)}/>\n
    \n
    \n
    \n\n
    \n textEditorParseXML(html)}\n text={trackContent}/>\n
    \n\n
    \n {renderTranscriptTracks()}\n
    \n
    \n \n
    \n\n
    \n \n
    \n {step === 3 ? (\n setMarkers(mrks)}\n />\n ) : (\n \"No Markers\"\n )}\n
    \n \n
    \n\n
    \n \n
    \n \n
    \n {step === 4 && !showYouTubeVideo? showVideoPlayerStep3() \n :step === 4 && showYouTubeVideo ? showYoutubeVideoPlayerStep3() : \"No Video\"}\n {step === 4 ? showMarkersList() : \"No Markers Available\"}\n
    \n
    \n {!progress ? (\n {\n lecture ? update() : create();\n }}\n >\n {lecture ? \"Update\" : \"Create\"}\n \n ) : (\n \n )}\n
    \n\n setShowRemoveTranscriptModal(false)}\n onProceed={() => removeAllTranscripts()}\n />\n\n setShowImportTranscriptModal(false)}\n onProceed={(transcript) => populateTranscript(transcript)}\n />\n\n setShowAncillaryModal(false)}\n ancillaryType={\"typeMultimedia\"}\n onProceed={(ancillaryId, type) => assignAncillaryItemToTrack(ancillaryId, type)}\n />\n\n setShowTranslationModal(false)}\n onCancel={() => setShowTranslationModal(false)}\n onProceed={() => processNewTranslation()}\n />\n\n \n );\n};\n\nexport default LectureBuilder;","import React, {useState, useEffect} from 'react';\nimport Drawer from './../../../widgets/drawer/Drawer';\nimport LectureBuilder from './../builders/LectureBuilder';\n\nconst LectureDrawer = (props) => {\n\n const { show, onHide, data, callback=()=>{} } = props;\n\n const [open, setOpen] = useState(show);\n const [lecture, setLecture] = useState(null);\n\n useEffect(() => {\n setOpen(show);\n setLecture(data);\n }, [show]);\n\n const resetAndHide = () => {\n setLecture(null);\n onHide();\n }\n\n return (\n resetAndHide()} \n title={lecture ? lecture.title : `New Lecture`}>\n onHide()} callback={callback}/>\n \n );\n};\n\nexport default LectureDrawer;\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport LectureService from \"./../../../../services/LectureService\";\nimport MultiSelectPicker from \"./../../../widgets/pickers/MultiSelectPicker\";\nimport Steps, { Step } from \"rc-steps\";\nimport { Button, Alert, Form } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Select from 'react-select';\nimport SimpleTextEditor from \"./../../../widgets/texteditor/SimpleTextEditor\";\nimport AssessmentService from \"../../../../services/AssessmentService\";\nimport UnitService from \"./../../../../services/UnitService\";\nimport SessionService from \"./../../../../services/SessionService\";\nimport Unit from \"./../../../../payloads/Unit\";\nimport LectureDrawer from './../drawers/LectureDrawer';\nimport AssessmentDrawer from './../drawers/AssessmentDrawer';\nimport \"./unitbuilder.css\";\nimport SchoolService from \"../../../../services/SchoolService\";\n\nconst UnitBuilder = props => {\n const { unit, feedback, callback=()=>{} } = props;\n\n const [step, setStep] = useState(0);\n const [allLectures, setAllLectures] = useState(null);\n const [allExams, setAllExams] = useState(null);\n const [allWorkbooks, setAllWorkbooks] = useState(null);\n const [allPlacementExams, setAllPlacementExams] = useState(null);\n const [allAssignments, setAllAssignments] = useState(null);\n const [schools, setSchools] = useState([]);\n\n //utilities\n const [exams, setExams] = useState([]);\n const [workbooks, setWorkbooks] = useState([]);\n const [placementExams, setPlacementExams] = useState([]);\n const [assignments, setAssignments] = useState([]);\n\n const [lectures, setLectures] = useState(null);\n const [assessments, setAssessments] = useState(null);\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [optional, setOptional] = useState(false);\n const [placement, setPlacement] = useState(false);\n\n const [alertShow, setAlertShow] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n\n //utils - cache\n const [initialLectures, setInitialLectures] = useState([]);\n const [initialWorkbooks, setInitialWorkbooks] = useState([]);\n const [initialExams, setInitialExams] = useState([]);\n const [initialPlacementExams, setInitialPlacementExams] = useState([]);\n const [initialAssignments, setInitialAssignments] = useState([]);\n\n const [selectedSchool, setSelectedSchool] = useState(null);\n \n\n const [successMessage, setSuccessMessage] = useState(\n \"Unit created successfully\"\n );\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n const failedResponseMessage =\n \"There was a problem creating unit. Please try again.\";\n\n const [defaultDescription, setDefaultDescription] = useState(\"\");\n\n const [showEmergentLectureDrawer, setShowEmergentLectureDrawer] = useState(false);\n const [showEmergentAssessmentDrawer, setShowEmergentAssessmentDrawer] = useState(false);\n\n const [stepIndex, setStepIndex] = useState(0);\n const [stepObject, setStepObject] = useState({});\n\n const [steps, setSteps] = useState([\n { id: 0, title: \"Basic Info\", enabled: true, uniqueStepRef: \"FIRST\"},\n { id: 1, title: \"Pre-Assessments\", enabled: false, uniqueStepRef: \"SECOND\" }, \n { id: 2, title: \"Lectures\", enabled: true, uniqueStepRef: \"THIRD\" },\n { id: 3, title: \"Workbooks\", enabled: true, uniqueStepRef: \"FOURTH\" }, \n { id: 4, title: \"Exams\", enabled: true, uniqueStepRef: \"FIFTH\" },\n { id: 5, title: \"Assignments\", enabled: false, uniqueStepRef: \"SIXTH\" }, \n ]);\n\n const [showAssignments, setShowAssignments] = useState(false);\n\n const enabledSteps = useMemo(() => {\n return steps.filter(step => step.enabled).map((step, index) => {\n return { ...step, id: index };\n });\n }, [steps]);\n\n\n const [filterValues, setFilterValues] = useState({\n placementexams: \"\",\n lectures: \"\",\n workbooks: \"\",\n assignments: \"\",\n exams: \"\",\n });\n\n useEffect(() => {\n //reset on load\n reset();\n\n setTitle(unit ? unit.title : \"\");\n setOptional(unit ? unit.optional : false);\n setPlacement(unit ? unit.placement : false);\n setDescription(unit ? unit.description : \"\");\n setLectures(unit ? unit.lectures : null);\n setAssessments(unit ? unit.assessments : null);\n setSchools(unit ? unit.schools : []);\n\n //special routine to divide exams/workbooks\n if (unit && unit.assessments && unit.assessments.length > 0) {\n const workbooks = unit.assessments.filter(assessment => {\n return assessment.type === \"WORKBOOK\";\n });\n const exams = unit.assessments.filter(assessment => {\n return assessment.type === \"BOOKEXAM\";\n });\n const placementExams = unit.assessments.filter(assessment => {\n return assessment.type === \"PLACEMENT_EXAM\";\n });\n const assignments = unit.assessments.filter(assessment => {\n return assessment.type === \"ASSIGNMENT\";\n });\n setWorkbooks(workbooks ? workbooks : []);\n setExams(exams ? exams : []);\n setPlacementExams(placementExams ? placementExams : []);\n setPlacement(placementExams && placementExams.length > 0 ? true : false);\n \n setAssignments(assignments ? assignments : []);\n }\n\n if (!unit) {\n setDefaultDescription(\" \");\n }\n\n setInitialLectures(unit && unit.lectures ? unit.lectures : []);\n setInitialWorkbooks(unit && unit.assessments ? unit.assessments.filter(a => { return a.type === \"WORKBOOK\"}): []);\n setInitialExams(unit && unit.assessments ? unit.assessments.filter(a => { return a.type === \"BOOKEXAM\"}): []);\n setInitialPlacementExams(unit && unit.assessments ? unit.assessments.filter(a => { return a.type === \"PLACEMENT_EXAM\"}): []);\n setInitialAssignments(unit && unit.assessments ? unit.assessments.filter(a => { return a.type === \"ASSIGNMENT\"}): []);\n\n const loadAll = async () => {\n if (schools && schools.length===0)\n setSchools(await SchoolService.getAllFromRemote(false));\n setAllLectures(await LectureService.getAllFromRemote());\n const _assessments = await AssessmentService.getAllFromRemote();\n setAllExams(_assessments && _assessments.length > 0 ? _assessments.filter(a => { return a.type === \"BOOKEXAM\"}): []);\n setAllWorkbooks(_assessments && _assessments.length > 0 ? _assessments.filter(a => { return a.type === \"WORKBOOK\"}): []);\n setAllPlacementExams(_assessments && _assessments.length > 0 ? _assessments.filter(a => { return a.type === \"PLACEMENT_EXAM\"}): []);\n setAllAssignments(_assessments && _assessments.length > 0 ? _assessments.filter(a => { return a.type === \"ASSIGNMENT\"}): []);\n \n }\n\n loadAll();\n }, [unit]);\n\n useEffect(() => {\n setSteps(prevSteps =>\n prevSteps.map(step => {\n if (step.id === 1) { \n return { ...step, enabled: placement }; \n } else if (step.id === 5) {\n return { ...step, enabled: showAssignments }; \n }\n return step;\n })\n );\n }, [placement, showAssignments]);\n\n useEffect(() => {\n if (!selectedSchool && unit && unit.schools && unit.schools.length > 0) {\n setSelectedSchool({ \n value: unit.schools[0]._id || unit.schools[0].id, \n label: unit.schools[0].title \n });\n }\n }, [unit, selectedSchool]);\n \n\n const reset = () => {\n setAlertShow(false);\n setShowSuccess(false);\n\n setStepIndex(0);\n setStepObject(steps[0]);\n resetFields();\n };\n\n const resetAndHide = () => {\n setStepIndex(0);\n setStepObject(steps[0]);\n resetFlags();\n resetFields();\n feedback();\n callback();\n };\n\n const resetFlags = () => {\n setAlertShow(false);\n setShowSuccess(false);\n setShowEmergentLectureDrawer(false);\n setShowEmergentAssessmentDrawer(false);\n };\n\n const resetFields = () => {\n setLectures([]);\n setExams([]);\n setWorkbooks([]);\n setPlacementExams([]);\n setAssignments([]);\n setTitle(``);\n setDescription(``);\n setInitialLectures([]);\n setInitialExams([]);\n setInitialWorkbooks([]);\n setInitialPlacementExams([]);\n setInitialAssignments([]);\n setAllLectures([]);\n setAllExams([]);\n setAllWorkbooks([]);\n setAllPlacementExams([]);\n setAllAssignments([]);\n setDefaultDescription(\"\");\n setOptional(false);\n setPlacement(false);\n setSchools([]);\n setSelectedSchool(null);\n };\n\n const validateForm = () => {\n if (!title || title === \"\") {\n setWrongInputMessage(\"All fields are required. Please review.\");\n return false;\n }\n\n return true;\n };\n\n const onFilterChange = (context, value) => {\n setFilterValues(prev => ({ ...prev, [context]: value }));\n };\n\n const transformPickerData = (data, context) => {\n if (!data || data.length === 0) {\n return [];\n }\n if (context === \"assessments\") {\n return data.map(singledata => {\n return singledata._id;\n });\n }\n if (context === \"lectures\") {\n return data.map(singledata => {\n return singledata._id;\n });\n }\n };\n\n const showSchoolDropdown = () => {\n if (schools && schools.length > 0) {\n const schoolOptions = schools.map(school => {\n if (school.id) {\n return { value: school.id, label: school.title };\n } else {\n return { value: school._id, label: school.title };\n } \n });\n\n const getDefaultSchool = () => {\n if(!schoolOptions || schoolOptions.length === 0) return [];\n const defaultSchool = unit && unit.schools && unit.schools.length > 0\n ? schoolOptions.find(school => { return school.value === unit.schools[0]._id})\n : ``;\n return defaultSchool;\n }\n \n return (\n
    \n School:\n setSelectedSchool(selectedOption)}\n options={schoolOptions}\n className=\"mt-2 w-50\"\n isClearable={true}\n />\n
    \n );\n }\n };\n\n const create = async () => {\n resetFlags();\n if (validateForm()) {\n const assessments = transformPickerData(\n exams.concat(workbooks).concat(placementExams).concat(assignments),\n \"assessments\"\n );\n const _lectures = transformPickerData(lectures, \"lectures\");\n const school = selectedSchool ? selectedSchool.value : null;\n let payload = new Unit(\n title,\n description,\n [SessionService.getCurrentUserId()],\n _lectures,\n assessments,\n optional,\n placement,\n school\n );\n let success = await UnitService.create(payload);\n if (success) {\n setSuccessMessage(\"Unit created successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const update = async () => {\n resetFlags();\n if (validateForm()) {\n unit.title = title;\n unit.description = description;\n unit.optional = optional;\n unit.placement = placement;\n unit.lectures = transformPickerData(lectures, \"lectures\");\n unit.assessments = transformPickerData(\n exams.concat(workbooks).concat(placementExams).concat(assignments),\n \"assessments\"\n );\n if(selectedSchool) { unit.schools = [selectedSchool.value]} \n else { unit.schools = []};\n \n let success = await UnitService.update(unit.id, unit);\n if (success) {\n setSuccessMessage(\"Unit updated successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const onLecturesSelected = selectedLectures => {\n let _lectures = [];\n if (selectedLectures && selectedLectures.length > 0) {\n const ids = selectedLectures.map(selectedLecture => selectedLecture.id);\n _lectures = ids.map(id => allLectures.find(l => l._id === id));\n }\n setLectures(_lectures);\n setInitialLectures(_lectures);\n };\n\n const onPlacementExamSelected = async (selectedPlacementExams) => {\n let _placementExams = [];\n if (selectedPlacementExams && selectedPlacementExams.length > 0) {\n const ids = selectedPlacementExams.map(\n selectedPlacementExam => selectedPlacementExam.id\n );\n _placementExams = await AssessmentService.getByIdsFromRemote(ids);\n }\n setPlacementExams(_placementExams);\n setPlacement(_placementExams && _placementExams.length > 0 ? true : false);\n setInitialPlacementExams(_placementExams);\n };\n\n const showPlacementExamSelector = () => {\n if (allPlacementExams && allPlacementExams.length > 0) {\n return (\n <>\n onCreateEmergentAssessment()}\n >\n Create Placement Exam\n \n \n onPlacementExamSelected(selectedPlacementExams)\n }\n context=\"placementexams\"\n contextCallback= {() => allPlacementExams }\n filterValue= { filterValues.placementexams }\n onFilterChange={value => onFilterChange(\"placementexams\", value)}\n />\n \n );\n } else {\n if (!allPlacementExams || allPlacementExams.length === 0) {\n return (\n

    \n No Placement Exams Available,{\" \"}\n onCreateEmergentAssessment()} className=\"management-blue-link\">\n create one\n \n

    \n );\n }\n }\n };\n\n const showLectureSelector = () => {\n if (allLectures && allLectures.length > 0) {\n return (\n <>\n onCreateEmergentLecture()}\n >\n Create Lecture\n \n onLecturesSelected(selectedLectures)}\n context=\"lectures\"\n contextCallback={() => allLectures}\n filterValue={filterValues.lectures}\n onFilterChange={value => onFilterChange(\"lectures\", value)}\n />\n \n );\n } else {\n if (!allLectures || allLectures.length === 0) {\n return (\n

    \n No Lectures Available,{\" \"}\n onCreateEmergentLecture()} className=\"management-blue-link\">\n create one\n \n

    \n );\n }\n }\n };\n\n const onWorkbookSelected = async (selectedWorkbooks) => {\n let _workbooks = [];\n if (selectedWorkbooks && selectedWorkbooks.length > 0) {\n const ids = selectedWorkbooks.map(\n selectedWorkbook => selectedWorkbook.id\n );\n _workbooks = await AssessmentService.getByIdsFromRemote(ids);\n }\n setWorkbooks(_workbooks);\n setInitialWorkbooks(_workbooks);\n };\n\n const showWorkbookSelector = () => {\n if (allWorkbooks && allWorkbooks.length > 0) {\n return (\n <>\n onCreateEmergentAssessment()}\n >\n Create Workbook\n \n onWorkbookSelected(selectedWorkbooks)}\n context=\"workbooks\"\n contextCallback={() => allWorkbooks}\n filterValue={filterValues.workbooks}\n onFilterChange={value => onFilterChange(\"workbooks\", value)}\n />\n \n );\n } else {\n if (!allWorkbooks || allWorkbooks.length === 0) {\n return (\n

    \n No Workbooks Available,{\" \"}\n onCreateEmergentAssessment()} className=\"management-blue-link\">\n create one\n \n

    \n );\n }\n }\n };\n\n const onExamSelected = async (selectedExams) => {\n let _exams = [];\n if (selectedExams && selectedExams.length > 0) {\n const ids = selectedExams.map(selectedExam => selectedExam.id);\n _exams = await AssessmentService.getByIdsFromRemote(ids);\n }\n setExams(_exams);\n setInitialExams(_exams);\n };\n\n const onAssignmentSelected = async (selectedAssignments) => {\n let _assignments = [];\n if (selectedAssignments && selectedAssignments.length > 0) {\n const ids = selectedAssignments.map(selectedAssignment => selectedAssignment.id);\n _assignments = await AssessmentService.getByIdsFromRemote(ids);\n }\n setAssignments(_assignments);\n setInitialAssignments(_assignments);\n }\n\n const showAssignmentSelector = () => {\n if (showAssignments && allAssignments && allAssignments.length > 0) {\n return (\n <>\n onCreateEmergentAssessment()}\n >\n Create Assignment\n \n onAssignmentSelected(selectedAssignments)}\n context=\"assignments\"\n contextCallback={() => allAssignments}\n filterValue={filterValues.assignments}\n onFilterChange={value => onFilterChange(\"assignments\", value)}\n />\n \n );\n } else {\n if (!allExams || allExams.length === 0) {\n return (\n

    \n No Exams Available,{\" \"}\n onCreateEmergentAssessment()} className=\"management-blue-link\">\n create one\n \n

    \n );\n }\n }\n }\n\n const showExamSelector = () => {\n if (allExams && allExams.length > 0) {\n return (\n <>\n onCreateEmergentAssessment()}\n >\n Create Exam\n \n onExamSelected(selectedExams)}\n context=\"exams\"\n contextCallback={() => allExams}\n filterValue={filterValues.exams}\n onFilterChange={value => onFilterChange(\"exams\", value)}\n />\n \n );\n } else {\n if (!allExams || allExams.length === 0) {\n return (\n

    \n No Exams Available,{\" \"}\n onCreateEmergentAssessment()} className=\"management-blue-link\">\n create one\n \n

    \n );\n }\n }\n };\n\n const onCreateEmergentLecture = () => {\n setShowEmergentLectureDrawer(true);\n }\n\n const onHideEmergentLecture = () => {\n let lects = [];\n if(initialLectures && initialLectures.length > 0) { lects = [ ...initialLectures]; }\n lects.push(LectureService.getLatest());\n setAllLectures(LectureService.getAll());\n setLectures(lects);\n setInitialLectures(lects);\n setShowEmergentLectureDrawer(false);\n }\n \n const onCreateEmergentAssessment = () => {\n setShowEmergentAssessmentDrawer(true);\n }\n\n const goToNextStep = () => {\n const nextStep = enabledSteps.find(step => step.id > stepIndex && step.enabled);\n if (nextStep) {\n setStepIndex(nextStep.id);\n setStepObject(enabledSteps[nextStep.id]);\n }\n };\n \n const goToPreviousStep = () => {\n const prevStep = [...enabledSteps].reverse().find(step => step.id < stepIndex && step.enabled);\n if (prevStep) {\n setStepIndex(prevStep.id);\n setStepObject(enabledSteps[prevStep.id]);\n }\n };\n\n const setPlacementAndUpdateStep = (checked) => {\n if(!checked) {\n setPlacementExams([]);\n }\n setPlacement(checked);\n };\n\n const changeStep = (step) => {\n setStepIndex(step.id);\n setStepObject(enabledSteps[step.id]);\n }\n\n const onHideEmergentAssessment = async () => {\n\n const _assessments = await AssessmentService.getAllFromRemote();\n\n if(step === 3){ //workbooks!\n \n if(_assessments && _assessments.length > 0){\n const wbs = _assessments.filter(a => a.type === 'WORKBOOK');\n setAllWorkbooks(wbs);\n }\n setWorkbooks(initialWorkbooks);\n setInitialWorkbooks(initialWorkbooks);\n } else if(step === 4) { //exams!\n\n if(_assessments && _assessments.length > 0){\n const exs = _assessments.filter(a => a.type === 'BOOKEXAM');\n setAllExams(exs);\n }\n setExams(initialExams);\n setInitialExams(initialExams);\n }\n \n setShowEmergentAssessmentDrawer(false);\n }\n\n return (\n
    \n
    \n \n {enabledSteps.filter(step => step.enabled).map(step => (\n changeStep(step)} />\n ))}\n \n
    \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n
    \n\n setTitle(e.target.value)}\n />\n\n {showSchoolDropdown()}\n\n
    \n setOptional(e.target.checked)}/>\n
    \n\n
    \n setPlacementAndUpdateStep(e.target.checked)}\n />\n
    \n\n
    \n setShowAssignments(e.target.checked)}\n />\n
    \n\n
    \n
    Summary
    \n
    \n *The topics summary helps students to better view unit distribution\n
    \n
    \n setDescription(html)}\n defaultText={unit ? unit.description : defaultDescription}\n />\n
    \n
    \n
    \n\n
    \n
    \n
    Select Placement Exam(s):
    \n {showPlacementExamSelector()}\n
    \n
    \n\n
    \n
    \n
    Select Lecture(s):
    \n {showLectureSelector()}\n
    \n
    \n\n
    \n
    Select Workbook(s):
    \n {showWorkbookSelector()} \n
    \n\n
    \n
    \n
    Select Exam(s):
    \n {showExamSelector()} \n
    \n
    \n\n
    \n
    \n
    Select Assignment(s):
    \n {showAssignmentSelector()} \n
    \n
    \n\n
    \n
    \n \n {successMessage}\n
    \n
    \n \n
    \n
    \n\n
    \n \n \n \n \n
    \n onHideEmergentLecture()} />\n onHideEmergentAssessment()} />\n
    \n );\n\n \n};\n\nexport default UnitBuilder;\n","import React, { useState, useEffect } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport Drawer from \"./../../../widgets/drawer/Drawer\";\nimport UnitBuilder from \"./../builders/UnitBuilder\";\n\nconst UnitDrawer = props => {\n\n const { show, onHide, data, callback } = props;\n\n const [open, setOpen] = useState(show);\n const [unit, setUnit] = useState(null);\n const [key, setKey] = useState(uuidv4());\n\n useEffect(() => {\n setOpen(show);\n setUnit(data);\n setKey(uuidv4());\n }, [show]);\n\n const resetAndHide = () => {\n setUnit(null);\n onHide();\n }\n\n return (\n resetAndHide()}\n title={unit ? unit.title : `New Unit`}\n >\n {show ? onHide()} callback={callback}/> : <>}\n \n );\n};\n\nexport default UnitDrawer;\n","import React, { useState, useEffect } from \"react\";\nimport { Button, Alert, Dropdown } from \"react-bootstrap\";\nimport Select from \"react-select\";\nimport UnitService from \"./../../../../services/UnitService\";\nimport CourseService from \"./../../../../services/CourseService\";\nimport MultiSelectPicker from \"./../../../widgets/pickers/MultiSelectPicker\";\nimport Steps, { Step } from \"rc-steps\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport SimpleTextEditor from \"./../../../widgets/texteditor/SimpleTextEditor\";\nimport Course from \"./../../../../payloads/Course\";\nimport UnitDrawer from \"./../drawers/UnitDrawer\";\nimport SchoolService from \"../../../../services/SchoolService\";\n\nconst CourseBuilder = props => {\n const { course, feedback, callback=()=>{}} = props;\n\n const [filterValues, setFilterValues] = useState({\n units: \"\",\n });\n\n const [step, setStep] = useState(0);\n const [units, setUnits] = useState(null);\n\n const [schools, setSchools] = useState([]);\n\n const [courseTitle, setCourseTitle] = useState(\"\");\n const [courseDescription, setCourseDescription] = useState(\"\");\n const [courseUnits, setCourseUnits] = useState(null);\n\n //utils\n const [initialUnits, setInitialUnits] = useState([]);\n\n const [alertShow, setAlertShow] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n\n const [successMessage, setSuccessMessage] = useState(\n \"Course created successfully\"\n );\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n const failedResponseMessage =\n \"There was a problem creating course. Please try again.\";\n\n const [defaultDescription, setDefaultDescription] = useState(\"\");\n\n const [showEmergentUnitDrawer, setShowEmergentUnitDrawer] = useState(false);\n\n const [selectedSchool, setSelectedSchool] = useState(null);\n\n useEffect(() => {\n //reset on load\n reset();\n\n const load = async () => {\n setCourseTitle(course ? course.title : \"\");\n setCourseDescription(course ? course.description : \"\");\n const allUnits = await UnitService.getAllFromRemote();\n\n let courseUnits = [];\n if(course && course.units && course.units.length > 0){\n const unitIds = course.units.map(cu => cu._id);\n courseUnits = unitIds.map(id => allUnits.find(unit => unit.id === id));\n }\n setCourseUnits(courseUnits);\n setInitialUnits(courseUnits);\n setUnits(allUnits);\n setSchools(await SchoolService.getAllFromRemote(false))\n }\n\n load();\n }, [course]);\n\n useEffect(() => {\n \n if (step === 0){\n setDefaultDescription(\" \");\n } else {\n (async() => setUnits(await UnitService.getAllFromRemote()))();\n }\n }, [step]);\n\n const onFilterChange = (context, value) => {\n setFilterValues(prev => ({ ...prev, [context]: value }));\n };\n\n const reset = () => {\n setAlertShow(false);\n setShowSuccess(false);\n setShowFailedAlert(false);\n setStep(0);\n resetFields();\n };\n\n const resetAndHide = () => {\n setStep(0);\n resetFlags();\n resetFields();\n feedback();\n callback();\n };\n\n const resetFlags = () => {\n setAlertShow(false);\n setShowSuccess(false);\n setShowFailedAlert(false);\n setShowEmergentUnitDrawer(false);\n };\n\n const resetFields = () => {\n setUnits(null);\n setCourseTitle(``);\n setCourseDescription(``);\n setCourseUnits(null);\n setInitialUnits([]);\n setDefaultDescription(\" \");\n setSchools([]);\n setSelectedSchool(null);\n };\n\n const onUnitsSelected = selectedUnits => {\n let _units = [];\n if (selectedUnits && selectedUnits.length > 0) {\n const ids = selectedUnits.map(selectedUnit => selectedUnit.id);\n ids.forEach(id => {\n const unit = units.find(u => u.id === id);\n if(unit) _units.push(unit);\n });\n }\n setCourseUnits(_units);\n setInitialUnits(_units);\n };\n\n const getUnitsWithUnderscoreId = () => {\n \n if(units && units.length > 0){\n let _units = [];\n units.forEach(u => { \n const _unit = {...u};\n _unit._id = u.id\n _units.push(_unit);\n });\n return _units;\n } \n return [];\n }\n\n const getInitialUnitsWithUnderscoreId = () => {\n \n if(initialUnits && initialUnits.length > 0){\n let _units = [];\n initialUnits.forEach(u => { \n const _unit = {...u};\n _unit._id = u.id\n _units.push(_unit);\n });\n return _units;\n } \n return [];\n }\n\n const showUnitSelector = () => {\n if (units) {\n return (\n <>\n onCreateEmergentUnit()}\n >\n Create Unit\n \n onUnitsSelected(selectedUnits)}\n context=\"units\"\n contextCallback={() => getUnitsWithUnderscoreId()}\n filterValue={filterValues.units}\n onFilterChange={value => onFilterChange(\"units\", value)}\n />\n \n );\n } else {\n return \"\";\n }\n };\n\n const showSchoolDropdown = () => {\n if (schools) {\n const schoolOptions = schools.map(school => {\n return { value: school.id, label: school.title };\n });\n const defaultSchool = course && course.schools && course.schools.length > 0\n ? schoolOptions.find(school => school.value === course.schools[0]._id)\n : ``;\n\n return (\n setSelectedSchool(selectedOption)}\n options={schoolOptions}\n className=\"mt-2 w-50\"\n isClearable={true}\n />\n );\n }\n };\n\n const onCreateEmergentUnit = () => {\n setShowEmergentUnitDrawer(true);\n }\n\n const onHideEmergentUnit = async () => {\n const _units = await UnitService.getAllFromRemote();\n if(_units && _units.length > 0) setUnits(_units);\n else setUnits([]);\n setShowEmergentUnitDrawer(false);\n }\n\n const validateForm = () => {\n if (!courseTitle || courseTitle === \"\") {\n setWrongInputMessage(\"All fields are required. Please review.\");\n return false;\n }\n\n return true;\n };\n\n const transformPickerData = (data, context) => {\n if (!data || data.length === 0) return [];\n if (context === \"units\") {\n return data.map(singledata => {\n return singledata.id;\n });\n }\n };\n\n const create = async () => {\n resetFlags();\n if (validateForm()) {\n const _units = transformPickerData(courseUnits, \"units\");\n const school = selectedSchool ? selectedSchool.value : null;\n let payload = new Course(courseTitle, courseDescription, _units, school);\n let success = await CourseService.create(payload);\n if (success) {\n setSuccessMessage(\"Course created successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const update = async () => {\n resetFlags();\n if (validateForm()) {\n course.title = courseTitle;\n course.description = courseDescription;\n course.units = transformPickerData(courseUnits, \"units\");\n if(selectedSchool) course.schools = [selectedSchool.value];\n let success = await CourseService.update(course.id, course);\n if (success) {\n setSuccessMessage(\"Course updated successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n return (\n
    \n
    \n \n setStep(0)}/>\n setStep(1)}/>\n \n
    \n\n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n
    \n setCourseTitle(e.target.value)}\n />\n\n
    \n School:\n {showSchoolDropdown()}\n
    \n\n
    \n
    Description
    \n
    \n *The course description helps students to better view course scope\n
    \n
    \n setCourseDescription(html)}\n defaultText={course ? course.description : defaultDescription}\n />\n
    \n
    \n
    \n\n
    \n
    \n
    Select Unit(s):
    \n {showUnitSelector()}\n
    \n\n
    \n
    \n \n {successMessage}\n
    \n
    \n \n
    \n
    \n
    \n\n
    \n setStep(step - 1)}\n >\n Back\n \n setStep(step + 1)}\n >\n Continue\n \n create()}\n >\n Create\n \n update()}\n >\n Update\n \n
    \n onHideEmergentUnit()} />\n
    \n );\n};\n\nexport default CourseBuilder;\n","import React, { useState, useEffect } from \"react\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport Drawer from \"./../../../widgets/drawer/Drawer\";\nimport CourseBuilder from \"./../builders/CourseBuilder\";\n\nconst CourseDrawer = props => {\n\n const { show, onHide, data, callback } = props;\n\n const [open, setOpen] = useState(show);\n const [course, setCourse] = useState(null);\n const [key, setKey] = useState(uuidv4());\n\n useEffect(() => {\n setOpen(show);\n setCourse(data);\n setKey(uuidv4());\n }, [show]);\n\n const resetAndHide = () => {\n setCourse(null);\n onHide();\n }\n\n return (\n resetAndHide()}\n title={course ? course.title : `New Course`}\n >\n {show ? onHide()} callback={callback}/> : <>}\n \n );\n};\n\nexport default CourseDrawer;\n","import React, { useState, useEffect } from \"react\";\nimport Steps, { Step } from \"rc-steps\";\nimport { Form, Button, Alert } from \"react-bootstrap\";\nimport SimpleTextEditor from \"./../../../widgets/texteditor/SimpleTextEditor\";\nimport ImageCropper from \"./../../../widgets/imagecropper/ImageCropper\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport MultiSelectPicker from \"./../../../widgets/pickers/MultiSelectPicker\";\nimport { Typeahead } from \"react-bootstrap-typeahead\";\nimport InstructorService from \"./../../../../services/InstructorService\";\nimport ClassService from \"./../../../../services/ClassService\";\nimport UnitService from \"../../../../services/UnitService\";\nimport CourseService from \"./../../../../services/CourseService\";\nimport StudentService from \"./../../../../services/StudentService\";\nimport ProfileService from \"./../../../../services/ProfileService\";\nimport StringUtils from \"./../../../../utils/StringUtils\";\nimport Class from \"./../../../../payloads/Class\";\nimport \"react-image-crop/dist/ReactCrop.css\";\nimport \"react-bootstrap-typeahead/css/Typeahead.css\";\nimport LimespringUtils from \"../../../../utils/LimespringUtils\";\nimport StudentModal from \"./../../../widgets/modals/instructor/StudentModal\";\nimport DatePicker from 'react-datepicker';\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport CourseDrawer from \"./../drawers/CourseDrawer\";\nimport \"./classbuilder.css\";\n\nconst ClassBuilder = props => {\n const { _class, feedback } = props;\n\n const [step, setStep] = useState(0);\n\n const [alertShow, setAlertShow] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n\n const [title, setTitle] = useState(``);\n const [description, setDescription] = useState(``);\n const [thumbnail, setThumbnail] = useState(``);\n const [instructors, setInstructors] = useState([]);\n const [startsOn, setStartsOn] = useState(``);\n const [tags, setTags] = useState([]);\n const [units, setUnits] = useState([]);\n const [courses, setCourses] = useState([]);\n const [students, setStudents] = useState([]);\n\n const [capture, setCapture] = useState(null);\n\n const [weeksAhead, setWeeksAhead] = useState(0);\n const [weeksAheadEnable, setWeeksAheadEnable] = useState(false);\n\n const [allInstructors, setAllInstructors] = useState(null);\n const [allCourses, setAllCourses] = useState(null);\n const [allUnits, setAllUnits] = useState(null);\n const [allStudents, setAllStudents] = useState(null);\n\n const [initialCourses, setInitialCourses] = useState([]);\n const [initialUnits, setInitialUnits] = useState([]);\n const [initialStudents, setInitialStudents] = useState([]);\n\n const [defaultDescription, setDefaultDescription] = useState(\"\");\n\n const [showEmergentStudentModal, setShowEmergentStudentModal] = useState(false);\n const [showEmergentCourseDrawer, setShowEmergentCourseDrawer] = useState(false);\n\n const [filterValues, setFilterValues] = useState({\n students: \"\",\n courses: \"\",\n units: \"\",\n });\n\n const [successMessage, setSuccessMessage] = useState(\n \"Class created successfully\"\n );\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n const failedResponseMessage =\n \"There was a problem creating class. Please try again.\";\n\n const [serverSearchResults, setServerSearchResults] = useState([]);\n useEffect(() => {\n //reset on load\n reset();\n\n setTitle(_class ? _class.title : ``);\n setDescription(_class ? _class.description : ``);\n setThumbnail(_class ? _class.thumbnail : ``);\n setInstructors(_class && _class.instructors && _class.instructors[0]!==null ? _class.instructors: []);\n setStudents(_class && _class.students ? _class.students : []);\n setTags(_class ? _class.tags : []);\n setUnits(_class && _class.units ? _class.units : []);\n setCourses(_class && _class.courses ? _class.courses : []);\n\n setWeeksAhead(_class && _class.weeksAhead!==null ? _class.weeksAhead : 0);\n setWeeksAheadEnable(_class && _class.weeksAheadEnable!==null ? _class.weeksAheadEnable : false);\n setStartsOn(_class && _class.startsOn!==null ? new Date(_class.startsOn) : ``);\n\n //utils\n setInitialCourses(_class ? _class.courses : []);\n setInitialUnits(_class ? _class.units : []);\n setInitialStudents(_class && _class.students ? _class.students : []);\n\n const loadAll = async () => {\n setAllUnits(await UnitService.getAllFromRemote());\n setAllCourses(await CourseService.getAllFromRemote());\n await initInstructors();\n const fetchedStudents = await StudentService.getAllFromRemote();\n if (_class && _class.students) {\n const combinedStudents = mergeAndRemoveDuplicates(fetchedStudents, _class.students || []);\n setAllStudents(combinedStudents);\n } else {\n setAllStudents(fetchedStudents);\n }\n }\n\n loadAll();\n }, [_class]);\n\n useEffect(() => {\n if(step === 0) { setDefaultDescription(' ');}\n }, [step]);\n\n const reset = () => {\n resetFlags();\n resetFields();\n };\n\n\n const initInstructors = async () => {\n const user = ProfileService.get();\n if (user.role === \"Instructor\") {\n setAllInstructors([user]);\n if(instructors.length === 0) {\n setInstructors([user]);\n }\n } else {\n setAllInstructors(await InstructorService.getAllFromRemote());\n }\n };\n\n const mergeAndRemoveDuplicates = (array1, array2) => {\n const map = new Map();\n [...array1, ...array2].forEach(item => {\n map.set(item.id, item);\n });\n return Array.from(map.values());\n };\n\n const resetAndHide = () => {\n resetFlags();\n resetFields();\n feedback();\n };\n\n const resetFlags = () => {\n window.URL.revokeObjectURL(capture);\n setAlertShow(false);\n setStep(0);\n setCapture(null);\n setShowFailedAlert(false);\n setShowSuccess(false);\n };\n\n const resetFields = () => {\n setTitle(``);\n setDescription(``);\n setThumbnail(``);\n setInstructors([]);\n setStartsOn(``);\n setTags([]);\n setUnits([]);\n setCourses([]);\n setStudents([]);\n setInitialCourses([]);\n setInitialUnits([]);\n setInitialStudents([]);\n setDefaultDescription(' ');\n setCapture(null);\n };\n\n const validateForm = () => {\n if (StringUtils.isEmpty(title)) {\n setAlertShow(true);\n return false;\n }\n if (StringUtils.isEmpty(description)) {\n setAlertShow(true);\n return false;\n }\n return true;\n };\n\n const onFilterChange = (context, value) => {\n setFilterValues(prev => ({ ...prev, [context]: value }));\n };\n\n const showInstructorsTypeAhead = () => {\n if (allInstructors && allInstructors.length > 0) {\n return (\n `${option.firstName} ${option.lastName}`}\n multiple={true}\n onChange={options => setInstructors(options)}\n options={allInstructors || []}\n placeholder=\"Choose an instructor...\"\n selected={instructors || []}\n />\n );\n } else {\n return \"\";\n }\n };\n\n\n const onStudentsSelected = selectedStudents => {\n let _students = [];\n if (selectedStudents && selectedStudents.length > 0) {\n const ids = selectedStudents.map(selectedStudent => selectedStudent.id);\n if (ids && ids.length > 0) {\n _students = ids.map(id => {\n let student = allStudents.find(s => s.id === id);\n if (!student) {\n student = serverSearchResults.find(s => s.id === id);\n if (student) {\n setAllStudents(prevAllStudents => [...prevAllStudents, student]);\n }\n }\n return student;\n });\n }\n }\n setStudents(_students.filter(Boolean)); \n setInitialStudents(_students.filter(Boolean)); \n };\n\n const updateServerSearchResults = newResults => {\n setAllStudents(prevAllStudents => {\n const allStudentIds = new Set(prevAllStudents.map(student => student.id));\n const uniqueNewResults = newResults.filter(student => !allStudentIds.has(student.id));\n return [...prevAllStudents, ...uniqueNewResults];\n });\n\n setServerSearchResults(prevServerSearchResults => {\n const serverStudentIds = new Set(prevServerSearchResults.map(student => student.id));\n const uniqueNewServerResults = newResults.filter(student => !serverStudentIds.has(student.id));\n return [...prevServerSearchResults, ...uniqueNewServerResults];\n });\n };\n\n const getStudentModelForPicker = _students => {\n if (!_students || _students.length === 0) {\n return [];\n }\n return _students.map(_student => {\n const title = _student.fullName + \" • \" + _student.email;\n return { _id: _student.id, title: title };\n });\n };\n\n const getCourseModelForPicker = _courses => {\n if (!_courses || _courses.length === 0) {\n return [];\n }\n return _courses.map(_course => {\n return { _id: _course.id, title: _course.title };\n });\n };\n\n const showStudentSelector = () => {\n if (allStudents) {\n return (\n \n onStudentsSelected(selectedStudents)\n }\n context=\"students\"\n contextCallback={() => getStudentModelForPicker(allStudents)}\n filterValue={filterValues.students}\n onFilterChange={value => onFilterChange(\"students\", value)}\n updateServerSearchResults={updateServerSearchResults}\n searchOnEachCharacter = {true}\n />\n );\n } else {\n return \"\";\n }\n };\n\n const onUnitsSelected = selectedUnits => {\n let _units = [];\n if (selectedUnits && selectedUnits.length > 0) {\n const ids = selectedUnits.map(selectedUnit => selectedUnit.id);\n _units = UnitService.getByIds(ids);\n }\n setUnits(_units);\n setInitialUnits(_units);\n };\n\n const showUnitSelector = () => {\n if (allUnits) {\n return (\n onUnitsSelected(selectedUnits)}\n context=\"units\"\n contextCallback={() => allUnits}\n filterValue={filterValues.units}\n onFilterChange={value => onFilterChange(\"units\", value)}\n />\n );\n } else {\n return \"\";\n }\n };\n\n const onCoursesSelected = selectedCourses => {\n let _courses = [];\n if (selectedCourses && selectedCourses.length > 0) {\n const ids = selectedCourses.map(selectedCourse => selectedCourse.id);\n if (ids && ids.length > 0) {\n _courses = ids.map(id => allCourses.find(c => c.id === id));\n } \n }\n setCourses(_courses);\n setInitialCourses(_courses);\n };\n\n const onCreateEmergentStudent = () => {\n setShowEmergentStudentModal(true);\n }\n\n const onCreateEmergentCourse = () => {\n setShowEmergentCourseDrawer(true);\n }\n\n const onHideEmergentCourse = async () => {\n const _courses = await CourseService.getAllFromRemote();\n if(_courses && _courses.length > 0) setAllCourses(_courses);\n else setAllCourses([]);\n setShowEmergentCourseDrawer(false);\n }\n\n const showCourseSelector = () => {\n if (allCourses) {\n return (\n <>\n onCreateEmergentCourse()}\n >\n Create Course\n \n onCoursesSelected(selectedCourses)}\n context=\"courses\"\n contextCallback={() => getCourseModelForPicker(allCourses)}\n filterValue={filterValues.courses}\n onFilterChange={value => onFilterChange(\"courses\", value)}\n />\n \n );\n } else {\n return \"\";\n }\n };\n\n const updateWeeksAhead = e => {\n if (e.target.value === \"\") {\n setWeeksAhead(0);\n setWeeksAheadEnable(false);\n } else {\n const _weeksAhead = parseInt(e.target.value);\n setWeeksAhead(_weeksAhead);\n setWeeksAheadEnable(true);\n }\n };\n\n const updateWeeksAheadEnable = event => {\n const isCheck = typeof event.target.checked === 'boolean'\n ? event.target.checked\n : event.target.checked === 'checked';\n if (!isCheck ) {\n setWeeksAhead(0);\n } else if (!weeksAhead || weeksAhead===null) {\n setWeeksAhead(0);\n }\n \n setWeeksAheadEnable(isCheck);\n };\n\n const updateStartsOn = (date) => {\n setStartsOn(date); \n };\n\n const hideModalAndReloadStudents = async () => {\n setAllStudents(await StudentService.getAllFromRemote());\n setShowEmergentStudentModal(false);\n }\n\n const create = async () => {\n if (validateForm()) {\n const unitIds =\n units.map(unit => {\n return unit._id;\n }) || [];\n const user = ProfileService.get();\n const instructorIds =\n instructors.length > 0\n ? instructors.map(instructor => instructor.id || instructor._id)\n : user.role === \"Instructor\"\n ? [user.id || user._id]\n : [];\n const studentIds =\n students.map(student => {\n return student.id;\n }) || [];\n\n \n const courseIds =\n courses.map(course => {\n return course.id;\n }) || [];\n let captureAsBase64 = await fetch(capture).then(r => r.blob());\n let payload = new Class(\n title,\n description,\n thumbnail,\n instructorIds,\n studentIds,\n startsOn,\n tags,\n unitIds,\n courseIds,\n captureAsBase64\n );\n let success = await ClassService.create(payload);\n if (success) {\n setSuccessMessage(\"Class created successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const update = async () => {\n if (validateForm()) {\n _class.title = title;\n _class.description = description;\n _class.thumbnail = thumbnail;\n\n const unitIds =\n units.map(unit => {\n return unit.id;\n }) || [];\n const user = ProfileService.get();\n const instructorIds =\n instructors.length > 0\n ? instructors.map(instructor => instructor.id || instructor._id)\n : user.role === \"Instructor\"\n ? [user.id || user._id]\n : [];\n const studentIds =\n students.map(student => {\n return student.id;\n }) || [];\n const courseIds =\n courses.map(course => {\n return course.id;\n }) || [];\n\n _class.instructors = instructorIds;\n _class.students = studentIds;\n _class.units = unitIds;\n _class.courses = courseIds;\n\n if (weeksAheadEnable) {\n _class.weeksAheadEnable = true;\n _class.weeksAhead = weeksAhead;\n } else {\n _class.weeksAheadEnable = false;\n _class.weeksAhead = 0;\n }\n\n _class.startsOn = startsOn;\n let success = await ClassService.update(_class.id, _class);\n if (success) {\n if(capture){\n let captureAsBase64 = await fetch(capture).then(r => r.blob());\n let reader = new FileReader();\n reader.readAsDataURL(captureAsBase64);\n reader.onload = async () => {\n await ClassService.addThumbnail(_class.id, {capture: reader.result});\n setSuccessMessage(\"Class updated successfully\");\n setShowSuccess(true);\n }\n \n } else {\n setSuccessMessage(\"Class updated successfully\");\n setShowSuccess(true);\n }\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n return (\n
    \n
    \n \n setStep(0)}/>\n setStep(1)}/>\n setStep(2)}/>\n \n
    \n\n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n
    \n
    \n
    \n
    \n Section Title (*)\n setTitle(e.target.value)}\n />\n
    \n
    \n Section Instructors\n {showInstructorsTypeAhead()}\n
    \n
    \n {/* */}\n \n
    \n
    \n \n updateWeeksAheadEnable(e)} \n />\n updateWeeksAhead(e)}\n />\n \n
    \n \n
    \n Section Description (*)\n setDescription(html)}\n defaultText={_class ? _class.description : defaultDescription}\n />\n
    \n
    \n
    \n setCapture(blob)}\n thumbnail={thumbnail}\n />\n
    \n
    \n
    \n\n
    \n
    \n
    Select course(s):
    \n {showCourseSelector()}\n
    \n
    \n{/*\n
    \n
    \n
    Include additional units to your section:
    \n

    \n * Select any unit(s) that may not be included in your selected\n course\n

    \n {showUnitSelector()}\n
    \n
    \n*/}\n
    \n
    \n
    Add students to your section:
    \n onCreateEmergentStudent()}\n >\n Create Student\n \n {showStudentSelector()}\n
    \n\n
    \n
    \n \n {successMessage}\n
    \n
    \n \n
    \n
    \n
    \n\n
    \n setStep(step - 1)}\n >\n Back\n \n setStep(step + 1)}\n >\n Continue\n \n create()}\n >\n Create\n \n update()}\n >\n Update\n \n
    \n\n hideModalAndReloadStudents()}\n />\n\n onHideEmergentCourse()} />\n
    \n );\n};\n\nexport default ClassBuilder;\n","import React, { useState, useEffect } from \"react\";\nimport Drawer from \"./../../../widgets/drawer/Drawer\";\nimport ClassBuilder from \"./../builders/ClassBuilder\";\n\nconst ClassDrawer = props => {\n const { show, onHide, data } = props;\n\n const [open, setOpen] = useState(show);\n const [currentClass, setCurrentClass] = useState(null);\n\n useEffect(() => {\n setOpen(show);\n setCurrentClass(data);\n }, [show]);\n\n const resetAndHide = () => {\n setCurrentClass(null);\n onHide();\n };\n\n return (\n resetAndHide()}\n title={currentClass ? currentClass.title : `New Section`}\n >\n {show ? onHide()} /> : <>}\n \n );\n};\n\nexport default ClassDrawer;\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Alert, Spinner, Badge } from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport InstructorService from \"./../../../../../services/InstructorService\";\nimport ClassService from \"./../../../../../services/ClassService\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport InstructorModal from \"../../../../widgets/modals/instructor/InstructorModal\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport ClassDrawer from \"./../../drawers/ClassDrawer\";\nimport \"./panels.css\";\n\nconst InstructorsPanel = props => {\n const { SearchBar } = Search;\n\n const [instructors, setInstructors] = useState(null);\n const [classes, setClasses] = useState([]);\n const [showModal, setShowModal] = useState(false);\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showProgressAlert, setShowProgressAlert] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSucceedAlert, setShowSucceedAlert] = useState(false);\n const [currentInstructor, setCurrentInstructor] = useState(null);\n\n const [showEmergentSectionDrawer, setShowEmergentSectionDrawer] = useState(false);\n const [showEmergentSectionClass, setShowEmergentSectionClass] = useState(null);\n\n const failedResponseMessage =\n \"Error while attempting to remove instructor. Please try again.\";\n const succeedResponseMessage = \"Instructor removed successfully.\";\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Instructors\";\n (async() => {\n setInstructors(await InstructorService.getAllFromRemote());\n setClasses(await ClassService.getAllFromRemote())\n })();\n }, []);\n\n const deleteInstructor = async () => {\n setShowProgressAlert(true);\n const succeeded = await InstructorService.remove(currentInstructor.id);\n setShowProgressAlert(false);\n if (succeeded) {\n setShowFailedAlert(false);\n setShowSucceedAlert(true);\n setInstructors(await InstructorService.getAllFromRemote());\n setCurrentInstructor(null);\n } else {\n setShowFailedAlert(true);\n setShowSucceedAlert(false);\n }\n };\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteInstructor();\n };\n\n const showDeleteWarning = id => {\n setCurrentInstructor(\n instructors.find(instructor => {\n return id === instructor.id;\n })\n );\n setShowWarningModal(true);\n };\n\n const editInstructor = id => {\n setCurrentInstructor(\n instructors.find(instructor => {\n return id === instructor.id;\n })\n );\n setShowModal(true);\n };\n\n const createInstructor = () => {\n setCurrentInstructor(null);\n setShowModal(true);\n };\n\n const onSectionShow = (cl) => {\n setShowEmergentSectionClass(cl);\n setShowEmergentSectionDrawer(true);\n }\n\n const onSectionHide = () => {\n setShowEmergentSectionClass(null);\n setShowEmergentSectionDrawer(false);\n } \n\n const classListTable = row => {\n return (\n
    \n {row.classes.map(clazz => {\n return (\n onSectionShow(clazz)}>\n {clazz.title}\n \n );\n })}\n
    \n );\n };\n\n const renderInstructors = () => {\n if (!instructors) {\n return \"\";\n }\n\n const columns = [\n {\n dataField: \"fullName\",\n text: \"Full Name\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n \n {row.fullName}\n \n )\n }\n },\n {\n dataField: \"email\",\n text: \"Contact Email\",\n sort: true,\n classes: \"panel-email-row\",\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"classes\",\n text: \"Assigned Section\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n <> \n {!row.classes || row.classes.length === 0 ? (\n

    \n No Section Assigned\n

    \n ) : (\n
    \n {classListTable(row)}\n
    \n )}\n \n );\n }\n },\n {\n dataField: \"schools\",\n text: \"Enrolled Schools\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.schools && row.schools.length > 0 ? (\n row.schools.map((school, index) => {\n return (\n \n {school.title}\n \n );\n })\n ) : (\n - No School Assigned -\n )}\n
    \n );\n }\n },\n {\n dataField: \"status\",\n text: \"Status\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n editInstructor(row.id)}\n >\n \n \n showDeleteWarning(row.id)}\n >\n \n \n
    \n );\n }\n }\n ];\n\n const instructorData = instructors.map(instructor => {\n return {\n id: instructor.id,\n fullName: instructor.fullName,\n email: instructor.email,\n classes: instructor.classes,\n schools: instructor.schools,\n status: instructor.status\n };\n });\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n const hideAndRefreshData = async () => {\n setShowModal(false);\n setInstructors(await InstructorService.getAllFromRemote());\n setCurrentInstructor(null);\n };\n\n return (\n
    \n
    \n

    \n Instructors\n

    \n \n
    \n\n
    \n setShowProgressAlert(false)}\n dismissible\n >\n \n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n setShowSucceedAlert(false)}\n dismissible\n >\n {succeedResponseMessage}\n \n
    \n\n
    {renderInstructors()}
    \n\n hideAndRefreshData()}\n instructor={currentInstructor}\n classes={classes}\n />\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n\n {/* onSectionHide()} data={showEmergentSectionClass}/>*/}\n
    \n );\n};\n\nexport default InstructorsPanel;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\n\nexport default {\n\n paginate: async (resource, page) => {\n const response = await new ApiService().get(ApiPath.PAGINATION_ENDPOINT.replace(':resource', resource).replace(':page', page));\n if(response && response.status === 200) { \n const results = response.data;\n return results;\n } \n return [];\n }\n}","import { v4 as uuidv4 } from \"uuid\";\n\nexport default class Student {\n\n constructor(){\n this._id = uuidv4();\n this.firstName = '';\n this.lastName = '';\n this.email = '';\n this.mobile ='';\n this.title = '';\n this.role = 'Student'\n this.createdBy = '';\n this.schools = [];\n this.conditions = [];\n this.avatar = '';\n this.password = '';\n this.status = 'Pending';\n }\n\n getId(){\n return this._id;\n }\n\n setId(id){\n this._id = id;\n }\n\n getStatus(){\n return this.status;\n }\n\n setId(s){\n this.status = s;\n }\n\n getFirstName(){\n return this.firstName;\n }\n\n setFirstName(firstName){\n this.firstName = firstName;\n }\n\n getLastName(){\n return this.lastName;\n }\n\n setLastName(lastName){\n this.lastName = lastName;\n }\n\n getEmail(){\n return this.email;\n }\n\n setEmail(email){\n this.email = email;\n }\n\n getMobile(){\n return this.mobile ;\n }\n\n setMobile(mobile){\n this.mobile = mobile;\n }\n\n getTitle(){\n return this.title ;\n }\n\n setTitle(title) {\n this.title = title;\n }\n\n getRole(){\n return this.role;\n }\n\n setRole(role){\n this.role = role;\n }\n\n getCreatedBy(){\n return this.createdBy;\n }\n\n setCreatedBy(createdBy){\n this.createdBy = createdBy;\n }\n\n getSchools(){\n return this.schools;\n }\n\n setSchools(schools){\n this.schools = schools;\n }\n\n getConditions(){\n return this.conditions;\n }\n\n setConditions(conditions){\n this.conditions = conditions;\n }\n\n toString() {\n return JSON.stringify(this);\n }\n}","import React, {useState, useEffect} from 'react';\nimport {Button, Modal, OverlayTrigger, Popover, Badge, Alert} from 'react-bootstrap';\nimport CSVReader from 'react-csv-reader';\nimport { CheckCircle, XCircle, Trash, Check } from 'react-bootstrap-icons';\nimport Config from '../../../../config/Config';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport StudentService from '../../../../services/StudentService';\nimport Student from \"../../../../models/Student\";\nimport Choice from \"../../../../models/Choice\";\nimport StringUtils from \"../../../../utils/StringUtils\";\nimport './modalstudent.css';\n\nconst BatchStudentsImportModal = (props) => {\n const { enableAlternate=false, show, onHide, onProceed, context, existingQuestions=[] } = props;\n const { SearchBar } = Search; \n const modalTitle = 'Import Students Batch CSV';\n const uploadFailedMessage = 'There was a problem uploading students. Please try again';\n const [showSuccess, setShowSuccess] = useState(false);\n const [step, setStep] = useState(0);\n const [showError, setShowError] = useState(false);\n const [students, setStudents] = useState([]);\n const [imported, setImported] = useState(false);\n const [errorMessage, setErrorMessage] = useState(uploadFailedMessage);\n\n useEffect(() => {\n renderStudents();\n }, [students]);\n\n useEffect(() => {\n setImported(false);\n }, []);\n\n const onImport = async () => {\n if(!students || students.length === 0) { return; }\n const result = await StudentService.batch(students);\n if (!result.status) {\n console.error(`Error. Could not batch upload students`);\n setShowError(true);\n } else {\n if(!result.students) return;\n setShowSuccess(true);\n const updatedStudents = students.map((student) => {\n const importResult = result.students.find(r => r._id === student._id);\n return {\n ...student,\n status: importResult ? importResult.result : student.status,\n };\n })\n setImported(true);\n setStudents(updatedStudents);\n }\n }\n\n const reset = () => {\n setShowError(false);\n setStudents([]);\n setShowSuccess(false);\n setStep(0);\n }\n\n const onCsvUploaded = (data, fileInfo) => {\n\n let _students = [];\n if(fileInfo.type === \"text/csv\") {\n if(data.length > 1) {\n //ignore the first row!\n for (let index = 1; index < data.length; index++) {\n const studentData = data[index];\n //avoid empty rows\n if(studentData[0] === \"\"){\n continue;\n }\n let student = new Student();\n\n const firstName = StringUtils.trim(studentData[0]);\n const lastName = StringUtils.trim(studentData[1]);\n student.setFirstName(firstName);\n student.setLastName(firstName);\n student.setEmail(StringUtils.trim(studentData[2]))\n student.setMobile(StringUtils.trim(studentData[3]))\n student.setTitle(StringUtils.trim(studentData[4]))\n _students.push(student);\n }\n }\n }\n setStudents(_students); \n setImported(false);\n setStep(1);\n }\n\n const removeStudent = (id) => {\n const _students = [...students];\n const sl = _students.filter(_s => _s._id !== id)\n setStudents(sl);\n }\n\n const renderStudents = () => {\n if (!students) {\n return \"\";\n }\n \n const columns = [\n\n {\n dataField: \"firstName\",\n text: \"FirstName\",\n \n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"lastName\",\n text: \"LastName\",\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"email\",\n text: \"Email\",\n headerAlign: \"center\",\n align: \"left\"\n },\n {\n dataField: \"mobile\",\n text: \"Mobile\",\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"status\",\n text: \"\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.status === \"Successful\" ? (\n \n ) : row.status === \"Failed\" ? (\n \n ) : null}\n {!imported && removeStudent(row.id)}\n >\n \n }\n
    \n );\n }\n }\n ];\n \n const studentsData = students.map((student, index) => {\n return {\n id: student._id,\n firstName: student.firstName,\n lastName: student.firstName,\n email: student.email,\n mobile: student.mobile,\n status: student.status\n };\n });\n \n const expandRow = {\n showExpandColumn: false,\n expandByColumnOnly: false,\n };\n \n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n const resetAndHide = () => {\n reset(); \n onHide();\n \n }\n\n return (\n resetAndHide()}\n size=\"lg\"\n width=\"850px\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n backdrop=\"static\"\n id=\"batch-import-modal\"\n dialogClassName=\"custom-modal-width\"\n >\n \n \n

    {modalTitle}

    \n
    \n
    \n \n setShowError(false)}\n >\n {errorMessage}\n \n setShowSuccess(false)}\n >\n Data imported successfully!\n \n
    \n
    \n
    Upload {context} CSV file
    \n
    \n CSV Sample\n |\n {/* Latex Documentation */}\n
    \n
    \n
    \n \n Requirements\n \n
      \n
    1. Student First Name, Last Name and email are required.
    2. \n {/*
    3. There is a maximum of 5 choices per question. You may include less if desired.
    4. \n
    5. Category/Subcategory are optional
    6. \n
    7. Hint/Explanations are optional and may include latex-formatted mathematical expressions
    8. \n
    9. Current supported question types are Multiple Choice and Short Answer
    10. \n
    11. Multimedia (images, videos, links, etc) in questions is not supported via batch import.
    12. \n
    13. Difficulty Level is optional. Measured from 1 up to 5.
    14. */}\n
    \n
    \n \n }>\n \n \n
    \n { onCsvUploaded(data, fileInfo) } }/>\n
    \n\n
    \n {renderStudents()}\n
    \n\n
    \n \n {!imported && \n \n }\n \n \n \n \n );\n}\n \nexport default BatchStudentsImportModal;","import React, { useEffect, useState, useCallback, useRef } from \"react\";\nimport { Button, Alert, Spinner, Badge, ListGroup, Tooltip,Dropdown, DropdownButton } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport * as Icons from \"react-bootstrap-icons\";\n// import { Envelope } from \"react-bootstrap-icons\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport StudentService from \"./../../../../../services/StudentService\";\nimport AuthService from \"./../../../../../services/AuthService\";\nimport ProfileService from \"./../../../../../services/ProfileService\";\nimport SearchService from \"./../../../../../services/SearchService\";\nimport SchoolService from \"./../../../../../services/SchoolService\";\nimport LocalStorageService from \"./../../../../../services/LocalStorageService\";\nimport ResponseUtil from \"./../../../../../utils/ResponseUtil\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\nimport PaginationService from \"./../../../../../services/PaginationService\";\nimport StudentModal from \"./../../../../widgets/modals/instructor/StudentModal\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport ClassDrawer from \"./../../drawers/ClassDrawer\";\nimport \"./panels.css\";\nimport \"./dropdown-menu.css\";\nimport ClassService from \"../../../../../services/ClassService\";\nimport BatchStudentsImportModal from \"./../../../../widgets/modals/instructor/BatchStudentsImportModal\";\nimport debounce from 'lodash.debounce';\n\nconst StudentsPanel = props => {\n\n const { showDrawer, reload, context } = props;\n\n const history = useHistory();\n\n const { SearchBar } = Search;\n\n const [students, setStudents] = useState(null);\n const [showModal, setShowModal] = useState(false);\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showBatchModal, setShowBatchModal] = useState(false);\n const [showProgressAlert, setShowProgressAlert] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSucceedAlert, setShowSucceedAlert] = useState(false);\n\n const [showFailedInviteAlert, setShowFailedInviteAlert] = useState(false);\n const [showSucceedInviteAlert, setShowSucceedInviteAlert] = useState(false);\n const [showFailedMimicNoStudentAlert, setShowFailedMimicNoStudentAlert] = useState(false);\n \n const [currentStudent, setCurrentStudent] = useState(null);\n const [classes, setClasses] = useState(null);\n const [currentPage, setCurrentPage] = useState(1);\n const [schools, setSchools] = useState(null);\n\n const [showEmergentSectionDrawer, setShowEmergentSectionDrawer] = useState(false);\n const [showEmergentSectionClass, setShowEmergentSectionClass] = useState(null);\n\n const failedResponseMessage =\n \"Error while attempting to remove student. Please try again.\";\n const succeedResponseMessage = \"Student removed successfully.\";\n\n const failedInviteResponseMessage =\n \"Error while attempting to invite student. Please try again.\";\n\n const failedMimicNoStudentMessage =\n \"User is not a student.\";\n const succeedInviteResponseMessage = \"Student invited successfully.\";\n\n const [searchText, setSearchText] = useState(''); \n const searchInputRef = useRef(null); \n const latestSearchTextRef = useRef('');\n\n const [searchInProgress, setSearchInProgress] = useState(false);\n\n const isMounted = useRef(true);\n\n useEffect(() => {\n if (searchInputRef.current && searchText !== searchInputRef.current.value) {\n searchInputRef.current.value = searchText;\n }\n }, [searchText]);\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n useEffect(()=>{\n document.title = \"LimeSpring Portal - Students\";\n (async() => {\n if(context && context === 'invite' && !showModal){\n setShowModal(true);\n }\n })()\n }, []);\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Students\";\n \n fetchAllStudents();\n (async() => {\n setSchools(await SchoolService.getAllFromRemote(false));\n setClasses(await ClassService.getAllFromRemote());\n })()\n return () => {\n isMounted.current = false;\n };\n }, [reload]);\n\n const deleteStudent = async () => {\n setShowProgressAlert(true);\n const succeeded = await StudentService.remove(currentStudent.id);\n setShowProgressAlert(false);\n if (succeeded) {\n setShowFailedAlert(false);\n setShowSucceedAlert(true);\n setStudents(await StudentService.getAllFromRemote());\n setCurrentStudent(null);\n } else {\n setShowFailedAlert(true);\n setShowSucceedAlert(false);\n }\n };\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteStudent();\n };\n\n const showDeleteWarning = id => {\n setCurrentStudent(\n students.find(student => {\n return id === student.id;\n })\n );\n setShowWarningModal(true);\n };\n\n const editStudent = id => {\n const _currentStudent = students.find(student => {return id === student.id; })\n if(_currentStudent){\n \n setCurrentStudent(_currentStudent);\n setShowModal(true);\n }\n };\n const mimicStudentSession = async student => {\n const response = await AuthService.mimicStudent(student.email);\n\n if (ResponseUtil.isOK(response)) {\n const { user, library, session } = response.data;\n if (user.role !== \"Student\") {\n console.error(\"User is not a student\");\n setShowFailedMimicNoStudentAlert(true);\n return;\n }\n const profile = ProfileService.get();\n const sessionAdmin = LocalStorageService.get(\"session\");\n const logAdmin = LocalStorageService.get(\"logs\");\n LocalStorageService.store({ userAdmin: profile, sessionAdmin: sessionAdmin, logAdmin: logAdmin });\n LocalStorageService.store({ user: user, session: session });\n LocalStorageService.store(library); \n if (\n user.role === \"Student\" \n ) {\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n } \n\n } else {\n setShowFailedMimicNoStudentAlert(true);\n return;\n }\n };\n\n const createStudent = () => {\n setCurrentStudent(null);\n setShowModal(true);\n };\n\n const onSectionShow = (cl) => {\n setShowEmergentSectionClass(cl);\n setShowEmergentSectionDrawer(true);\n }\n\n const onSectionHide = () => {\n setShowEmergentSectionClass(null);\n setShowEmergentSectionDrawer(false);\n } \n\n const updateClasses = () => {\n //const classesTemp = await ClassService.getAllFromRemote();\n (async() => {\n setStudents(await StudentService.getAllFromRemote());\n setSchools(await SchoolService.getAllFromRemote(false));\n setClasses(await ClassService.getAllFromRemote());\n renderStudents();\n \n })()\n }\n\n const classListTable = row => {\n return (\n
    \n {row.classes.map(clazz => {\n return (\n onSectionShow(clazz)}>\n {clazz.title}\n \n );\n })}\n
    \n );\n };\n\n const fillDataAndShowDrawer = async (row) => {\n const student = await StudentService.getFromRemote(row.id);\n if(student) showDrawer({selectedStudent: student, selectedClass: row.classes[0], studentClasses: row.classes});\n }\n\n const inviteStudent = async (studentId) => {\n try {\n setShowProgressAlert(true);\n let result = await StudentService.sendInviteToStudent(studentId);\n if (result) {\n setShowFailedInviteAlert(false);\n setShowSucceedInviteAlert(true);\n } else {\n setShowFailedInviteAlert(true);\n setShowSucceedInviteAlert(false);\n }\n } catch(e) {\n console.error(`error sending invite`, e);\n }\n setShowProgressAlert(false);\n };\n\n const fullNameFormatter = (cellContent, row) => {\n if (!row.active) {\n return (\n <>\n fillDataAndShowDrawer(row)}>\n {row.fullName}\n \n {/* */}\n \n );\n }\n return fillDataAndShowDrawer(row)}>\n {row.fullName}\n ;\n };\n\n\n const renderStudents = () => {\n if (!students) {\n return \"\";\n }\n const profile = ProfileService.get();\n const columns = [\n {\n dataField: \"fullName\",\n text: \"Full Name\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n formatter: fullNameFormatter\n },\n {\n dataField: \"email\",\n text: \"Contact Email\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"classes\",\n text: \"Assigned Section\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n <> \n {!row.classes || row.classes.length === 0 ? (\n

    \n No Section Assigned\n

    \n ) : (\n
    \n {classListTable(row)}\n
    \n )}\n \n );\n }\n },\n {\n dataField: \"schools\",\n text: \"Enrolled Schools\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.schools && row.schools.length > 0 ? (\n row.schools.map((school, index) => {\n return (\n \n {school ? school.title : ''}\n \n );\n })\n ) : (\n - No School Assigned -\n )}\n
    \n );\n }\n }];\n if (profile.role !== \"Instructor\") {\n columns.push({\n dataField: \"deleted\",\n text: \"Archive\",\n headerAlign: \"center\",\n headerClasses: \"panel-status-row\",\n align: \"center\",\n formatter: (cellContent, row) => {\n if (row.deleted) {\n return ;\n }\n return null;\n }\n });\n }\n columns.push(\n {\n dataField: \"status\",\n text: \"Status\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n }\n variant=\"secondary\"\n size=\"sm\"\n className=\"custom-dropdown-menu\"\n >\n mimicStudentSession(row)}>\n Login As this Student\n \n editStudent(row.id)}>\n Edit Student\n \n {profile.role !== \"Instructor\" && \n showDeleteWarning(row.id)}>\n Delete Student\n \n }\n inviteStudent(row.id)}>\n Send Invite to Student\n \n \n
    \n );\n }\n }\n );\n\n const studentData = students.map(student => {\n return {\n id: student.id,\n fullName: student.fullName,\n active: student.active,\n email: student.email,\n classes: student.classes,\n schools: student.schools,\n deleted: student.deleted===undefined || !student.deleted? false: true,\n status: student.status,\n };\n });\n\n return (\n \n \n \n {toolkitprops => (\n
    \n {\n if (e.key === \"Enter\" || (e.key === \"Backspace\" && e.target.value==='')) {\n debouncedSearch.cancel();\n latestSearchTextRef.current = e.target.value;\n handleImmediateSearch();\n }\n }}\n >\n handleSearchChange(e.target.value)} \n className=\"mb-3\"\n autoComplete=\"off\"\n debounce={false}\n />\n
    \n {searchInProgress &&
    }\n {\n }}\n pagonTableChangeination={paginationFactory({ sizePerPage: 10 })}\n />\n \n )}\n \n );\n };\n\n const handlePageChange = async (p, spp) => {\n const paginated_results = await PaginationService.paginate('students', p);\n if(paginated_results && paginated_results.length > 0){\n setStudents(paginated_results);\n setCurrentPage(p);\n }\n }\n\n const fetchAllStudents = async () => {\n setSearchInProgress(true);\n const result = await StudentService.getAllFromRemote();\n if (isMounted.current) {\n setStudents(result);\n }\n setSearchInProgress(false);\n };\n \n const debouncedSearch = useCallback(\n debounce(async () => {\n const textToSearch = latestSearchTextRef.current; \n setSearchInProgress(true); \n const result = await SearchService.search(\"students\", textToSearch);\n if (isMounted.current && textToSearch === latestSearchTextRef.current) {\n setStudents(result);\n setSearchInProgress(false); \n }\n }, 2000),\n []\n );\n\n const handleSearchChange = useCallback(\n );\n\n const handleImmediateSearch = useCallback(async () => {\n const textToSearch = latestSearchTextRef.current;\n if (textToSearch.length >= 2) { \n setSearchInProgress(true);\n const result = await SearchService.search(\"students\", textToSearch);\n if (textToSearch === latestSearchTextRef.current) {\n setStudents(result);\n }\n setSearchInProgress(false);\n } else if (textToSearch.length <= 0) { \n isMounted.current = true;\n await fetchAllStudents(); \n isMounted.current = false;\n }\n }, []);\n\n const hideAndRefreshData = async () => {\n setShowModal(false);\n setStudents(await StudentService.getAllFromRemote());\n };\n\n const hideBatchAndRefreshData = async () => {\n setShowBatchModal(false);\n setStudents(await StudentService.getAllFromRemote());\n };\n\n const onBatchSuccess = async () => {\n setShowBatchModal(false);\n setStudents(await StudentService.getAllFromRemote());\n }\n\n return (\n
    \n
    \n

    \n Students\n

    \n
    \n \n setShowBatchModal(true)}\n >\n Import\n \n
    \n
    \n\n
    \n setShowProgressAlert(false)}\n dismissible\n >\n \n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n setShowSucceedAlert(false)}\n dismissible\n >\n {succeedResponseMessage}\n \n\n setShowFailedInviteAlert(false)}\n dismissible\n >\n {failedInviteResponseMessage}\n \n\n setShowFailedMimicNoStudentAlert(false)}\n dismissible\n >\n {failedMimicNoStudentMessage}\n \n\n \n\n setShowSucceedInviteAlert(false)}\n dismissible\n >\n {succeedInviteResponseMessage}\n \n\n\n
    \n\n
    {renderStudents()}
    \n\n hideAndRefreshData()}\n onDismiss={()=> setShowModal(false)}\n student={currentStudent}\n classes={classes}\n schools={schools}\n onUpdate={() => updateClasses()}\n />\n\n hideBatchAndRefreshData()}\n onProceed={() => onBatchSuccess()}\n />\n\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n\n {/* onSectionHide()} data={showEmergentSectionClass}/>*/}\n
    \n );\n};\n\nexport default StudentsPanel;\n","import React, { useEffect, useState, useCallback, useRef } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport {\n Button,\n Badge,\n Alert,\n ListGroup,\n OverlayTrigger,\n Tooltip,\n Spinner\n} from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport * as Icons from \"react-bootstrap-icons\";\nimport ClassService from \"./../../../../../services/ClassService\";\nimport ProfileService from \"./../../../../../services/ProfileService\";\nimport SearchService from \"./../../../../../services/SearchService\";\nimport CourseService from \"./../../../../../services/CourseService\";\nimport holder from \"./../../../../../images/holder.png\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport LocalStorageService from \"../../../../../services/LocalStorageService\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\nimport \"./panels.css\";\nimport debounce from 'lodash.debounce';\n\nconst ClassesPanel = props => {\n const { SearchBar } = Search;\n const { showDrawer, reload } = props;\n\n const [classes, setClasses] = useState(null);\n const [courses, setCourses] = useState(null);\n const [currentClass, setCurrentClass] = useState(null);\n const [showWarningModal, setShowWarningModal] = useState(false);\n\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [showSuccess, setShowSuccess] = useState(false);\n const [successMessage, setSuccessMessage] = useState(\"\");\n const [expandedRows, setExpandedRows] = useState([]); \n const [expandedData, setExpandedData] = useState({}); \n\n const [searchText, setSearchText] = useState('');\n\n const searchInputRef = useRef(null);\n const isMounted = useRef(true);\n const [searchInProgress, setSearchInProgress] = useState(false);\n const latestSearchTextRef = useRef('');\n\n const history = useHistory();\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Sections\";\n isMounted.current = true;\n fetchData();\n\n return () => {\n isMounted.current = false;\n };\n }, [reload]);\n\n const fetchData = async () => {\n setSearchInProgress(true);\n const result = await ClassService.getAllSimpleFromRemote();\n if (isMounted.current) {\n setClasses(result);\n } \n setSearchInProgress(false);\n };\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteClass();\n };\n const showDeleteWarning = id => {\n if(!checkIsEditable(id)){ return; }\n setCurrentClass(\n classes.find(_class => {\n return id === _class._id;\n })\n );\n setShowWarningModal(true);\n };\n\n const deleteClass = async () => {\n const succeeded = await ClassService.remove(currentClass._id);\n if (succeeded) {\n setSuccessMessage(\"Successfuly removed section.\");\n setShowSuccess(true);\n setClasses(await ClassService.getAllSimpleFromRemote());\n \n setCurrentClass(null);\n } else {\n setErrorMessage(\"Error while trying to remove section. Please try again\");\n setShowError(true);\n }\n };\n\n const handleRowExpand = async (row, isExpand) => {\n if (isExpand) {\n setExpandedRows([...expandedRows, row.id]);\n try {\n const expandedDataForRow = await ClassService.getClassPopulated(row.id);\n setExpandedData({ ...expandedData, [row.id]: expandedDataForRow });\n } catch (error) {\n console.error(\"Error al cargar datos expandidos\", error);\n }\n } else {\n \n setExpandedRows(expandedRows.filter((id) => id !== row.id));\n }\n };\n\n const debouncedSearch = useCallback(\n debounce(async () => {\n const textToSearch = latestSearchTextRef.current; \n setSearchInProgress(true); \n const result = await SearchService.search(\"classes\", textToSearch);\n if (isMounted.current && textToSearch === latestSearchTextRef.current) {\n setClasses(result);\n setSearchInProgress(false); \n }\n }, 2000),\n []\n );\n\n const handleSearchChange = useCallback(\n );\n\nconst handleImmediateSearch = useCallback(async () => {\n const textToSearch = latestSearchTextRef.current;\n if (textToSearch.length >= 2) { \n setSearchInProgress(true);\n const result = await SearchService.search(\"classes\", textToSearch);\n if (textToSearch === latestSearchTextRef.current) {\n setClasses(result);\n }\n setSearchInProgress(false);\n } else if (textToSearch.length <= 0) { \n isMounted.current = true;\n await fetchData(); \n isMounted.current = false;\n }\n}, []);\n\n\n const renderExpandedRow = (row) => {\n let expandedDataRow = expandedData[row.id];\n\n if (!expandedDataRow) {\n return <>\n }\n row = expandedDataRow;\n if (!row || !row.id) {\n return <>\n }\n //renderize class details\n return (\n
    \n
    \n
    \n Units Included:\n \n {row.units && row.units.length > 0 ? (\n row.units.map(unit => {\n return (\n \n \n {unit.title}\n \n );\n })\n ) : (\n \n {\" \"}\n None Available\n \n )}\n \n
    \n
    \n Student Roster:\n \n {row.students && row.students.length > 0 ? (\n row.students.map(student => {\n return (\n \n
    \n \n \n \n {student.fullName}\n \n \n
    \n \n );\n })\n ) : (\n \n {\" \"}\n None Available\n \n )}\n
    \n
    \n
    \n
    \n );\n };\n\n const edit = async id => {\n if(!checkIsEditable(id)){ return; }\n\n const classPopulated = await ClassService.getClassPopulated(id);\n \n showDrawer(classPopulated);\n };\n\n const clone = async id => {\n const _class = classes.find(_class => {\n return id === _class.id || id === _class._id;\n });\n const profile = ProfileService.get();\n const success = await ClassService.clone(_class, profile);\n if (!success) {\n setErrorMessage(\"Error while trying to clone section. Please try again\");\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly cloned section.\");\n setShowSuccess(true);\n }\n setClasses(await ClassService.getAllSimpleFromRemote());\n };\n\n const checkIsEditable = (id) => {\n if(!id) { return true; }\n const profile = ProfileService.get();\n if(profile.role === 'Instructor'){\n const _class = ClassService.get(id);\n if(_class && _class.createdBy !== profile._id) {\n return false;\n }\n }\n return true;\n }\n\n const assignTemporaryClass = async (classId) => {\n const clss = await ClassService.getFromRemote(classId);\n if(clss && clss.courses && clss.courses.length > 0){\n const course = await CourseService.getFromRemote(clss.courses[0]);\n if(course) {\n LocalStorageService.store({classes: [clss], courses: [course], units: course.units})\n history.push(DeepLinking.STUDENT.DASHBOARD_VIEW_PATH);\n }\n }\n }\n\n const renderClasses = () => {\n\n const columns = [\n {\n dataField: \"title\",\n text: \"Title\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"700px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n
    \n \n

    {row.title}

    \n \n
    \n );\n }\n },\n {\n dataField: \"students\",\n text: \"Students\",\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"150px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n \n {row.students && row.students.length > 0\n ? row.students.length\n : 0}\n \n

    \n );\n }\n },\n {\n dataField: \"status\",\n text: \"Status\",\n headerClasses: \"panel-status-row-3items\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n\n const isEditable = checkIsEditable(row.id);\n\n return (\n
    \n assignTemporaryClass(row.id)}\n title=\"View Section As Student\"\n >\n {\" \"}\n \n \n edit(row.id)}\n title={isEditable ? \"Edit Section\": \"Editing not allowed (Clone first)\"}\n disabled={!isEditable}\n >\n {\" \"}\n \n \n clone(row.id)}\n title=\"Clone Section\"\n >\n {\" \"}\n \n \n showDeleteWarning(row.id)}\n title={isEditable ? \"Remove Section\": \"Removing not allowed\"}\n disabled={!isEditable}\n >\n {\" \"}\n \n \n
    \n );\n }\n }\n ];\n\n const expandRow = {\n showExpandColumn: true,\n expandByColumnOnly: true,\n expanded: expandedRows,\n renderer: renderExpandedRow,\n onExpand: handleRowExpand,\n };\n\n const classesData = classes ? classes.map(_class => {\n\n //only first course!\n let classUnits = [];\n \n if(courses && _class.courses && _class.courses.length > 0){\n const _course = courses.find(c => {return c.id === _class.courses[0]});\n if(_course) classUnits = _course.units;\n }\n\n let classSchools = [];\n if(courses && _class.courses && _class.courses.length > 0){\n const _course = courses.find(c => {return c.id === _class.courses[0]});\n if(_course) classSchools = _course.schools;\n }\n\n return {\n id: _class._id? _class._id: _class.id,\n thumbnail: _class.thumbnail,\n title: _class.title,\n description: _class.description,\n students: _class.students,\n units: classUnits,\n schools: classSchools,\n status: _class.status\n };\n }): [];\n\n return (\n \n {props => (\n
    \n {\n if (e.key === \"Enter\" || (e.key === \"Backspace\" && e.target.value==='')) {\n debouncedSearch.cancel();\n latestSearchTextRef.current = e.target.value;\n handleImmediateSearch();\n } \n }}\n >\n handleSearchChange(e.target.value)} \n className=\"mb-3\"\n autoComplete=\"off\"\n debounce={false} \n />\n
    \n {searchInProgress &&
    }\n {\n }}\n pagination={paginationFactory({ sizePerPage: 5 })}\n pagonTableChangeination={paginationFactory({ sizePerPage: 5 })}\n />\n \n )}\n \n );\n };\n\n return (\n
    \n setShowError(false)}\n >\n {errorMessage}\n \n\n setShowSuccess(false)}\n >\n {successMessage}\n \n\n
    \n

    \n Sections\n

    \n \n
    \n\n
    {renderClasses()}
    \n\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n
    \n );\n};\n\nexport default ClassesPanel;\n","import React, {useEffect, useState} from 'react';\nimport * as Icons from \"react-bootstrap-icons\";\nimport {Collapse, ListGroup} from 'react-bootstrap';\nimport AssessmentService from '../../../services/AssessmentService';\n\nconst LectureExpandable = (props) => {\n\n const {lecture} = props;\n\n const [expanded, setExpanded] = useState(false);\n const [quizzes, setQuizzes] = useState([]);\n\n useEffect(() => {\n (async() => {\n if(lecture && lecture.assessments && lecture.assessments.length > 0) {\n setQuizzes(await AssessmentService.getByIdsFromRemote(lecture.assessments));\n }\n })();\n },[lecture]);\n\n const renderQuizzes = () => {\n if(!lecture) { return; }\n if(quizzes && quizzes.length > 0) {\n return (
    setExpanded(!expanded)}>\n \n
    \n Quizzes\n
    {showCaret()}
    \n
    \n
    );\n }else{\n return (<>);\n }\n }\n \n const populateQuizzes = () => {\n if(!lecture) { return; }\n if (!quizzes || quizzes.length === 0) { return <> }\n return quizzes.map(quiz => {\n return ({quiz.title})\n }); \n };\n\n const showCaret = () => {\n if(expanded){ return }\n else { return }\n }\n\n return ( \n \n
    \n
    \n {lecture.title}\n
    \n {renderQuizzes()}\n
    \n \n
    \n {populateQuizzes()}\n
    \n
    \n
    \n );\n}\n \nexport default LectureExpandable;","import React, { useEffect, useState } from \"react\";\nimport {\n Button,\n ListGroup,\n Badge,\n Alert,\n OverlayTrigger,\n Tooltip, Spinner\n} from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport UnitService from \"./../../../../../services/UnitService\";\nimport ProfileService from \"../../../../../services/ProfileService\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport \"./panels.css\";\nimport LectureExpandable from \"../../../../widgets/lecture-tile/LectureExpandable\";\n\nconst UnitsPanel = props => {\n const { SearchBar } = Search;\n const { showDrawer, reload } = props;\n\n const [units, setUnits] = useState(null);\n const [currentUnit, setCurrentUnit] = useState(null);\n\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [showSuccess, setShowSuccess] = useState(false);\n const [successMessage, setSuccessMessage] = useState(\"\");\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Units\";\n (async() => {\n setUnits(await UnitService.getAllFromRemote());\n })();\n }, [reload]);\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteUnit();\n };\n\n const showDeleteWarning = id => {\n if(!checkIsEditable(id)) {return; }\n setCurrentUnit(\n units.find(unit => {\n return id === unit.id;\n })\n );\n setShowWarningModal(true);\n };\n\n const deleteUnit = async () => {\n const succeeded = await UnitService.remove(currentUnit.id);\n if (succeeded) {\n setSuccessMessage(\"Successfuly removed unit.\");\n setShowSuccess(true);\n setUnits(await UnitService.getAllFromRemote());\n setCurrentUnit(null);\n } else {\n setErrorMessage(\"Error while trying to remove unit. Please try again\");\n setShowError(true);\n }\n };\n\n const edit = id => {\n if(!checkIsEditable(id)) {return; }\n const unit = units.find(u => u.id === id)\n showDrawer(unit);\n };\n\n const clone = async id => {\n const unit = units.find(u => u.id === id)\n const profile = ProfileService.get();\n if(profile.role === 'Instructor'){\n unit.instructors = [profile.id || profile._id || \"\"];\n }\n const success = await UnitService.clone(unit);\n if (!success) {\n setErrorMessage(\"Error while trying to clone unit. Please try again\");\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly cloned unit.\");\n setShowSuccess(true);\n }\n setUnits(await UnitService.getAllFromRemote());\n };\n\n const checkIsEditable = (id) => {\n if(!id) { return true; }\n const profile = ProfileService.get();\n if(profile.role === 'Instructor'){\n const unit = units.find(u => u.id === id);\n if(unit && unit.createdBy !== profile._id) {\n return false;\n }\n }\n return true;\n }\n\n const renderUnits = () => {\n if (!units) { return
    ; }\n if (!units) {\n return \"\";\n }\n\n const columns = [\n {\n dataField: \"title\",\n text: \"Title\",\n headerAlign: \"center\",\n align: \"left\",\n sort: true,\n formatter: (cellContent, row) => {\n return (\n
    \n {row.title} \n \n {row.description && row.description !== \"\" ? (\n ReactHtmlParser(row.description)\n ) : (\n
    \n \n None Available\n \n
    \n )}\n \n }\n >\n \n \n
    \n );\n }\n },\n {\n dataField: \"Lectures\",\n text: \"Lectures\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"200px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n \n {row.lectures ? row.lectures.length : 0}\n \n

    \n );\n }\n },\n {\n dataField: \"quizzes\",\n text: \"Quizzes\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"200px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n \n {row.quizzes ? row.quizzes.length : 0}\n \n

    \n );\n }\n },\n {\n dataField: \"assessments\",\n text: \"Assessments\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"200px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n \n {row.assessments ? row.assessments.length : 0}\n \n

    \n );\n }\n },\n {\n dataField: \"schools\",\n text: \"Schools\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.schools && row.schools.length > 0 ? (\n row.schools.map((school, index) => {\n return (\n \n {school.title}\n \n );\n })\n ) : (\n - No School Assigned -\n )}\n
    \n );\n }\n },\n {\n dataField: \"status\",\n text: \"Status\",\n headerAlign: \"center\",\n align: \"center\",\n headerClasses: \"panel-status-row-3items\",\n formatter: (cellContent, row) => {\n\n const isEditable = checkIsEditable(row.id);\n\n return (\n
    \n edit(row.id)}\n title={isEditable ? \"Edit Unit\": \"Editing not allowed (Clone first)\"}\n disabled={!isEditable}\n >\n \n \n clone(row.id)}\n >\n \n \n showDeleteWarning(row.id)}\n title={isEditable ? \"Remove Unit\": \"Removing not allowed\"}\n disabled={!isEditable}\n >\n \n \n
    \n );\n }\n }\n ];\n\n const expandRow = {\n showExpandColumn: true,\n expandByColumnOnly: true,\n renderer: row => (\n
    \n
    \n
    \n Lectures:\n \n {row.lectures && row.lectures.length > 0 ? (\n row.lectures.map(lecture => {\n return (\n \n );\n })\n ) : (\n \n \n None Available\n \n \n )}\n \n
    \n\n
    \n Assessments:\n \n {row.assessments && row.assessments.length > 0 ? (\n row.assessments.map(assessment => {\n return (\n \n {assessment.title}\n \n );\n })\n ) : (\n \n \n None Available\n \n \n )}\n \n
    \n\n
    \n Included in Courses:\n \n {row.courses && row.courses.length > 0 ? (\n row.courses.map(course => {\n return (\n \n {course.title}\n \n );\n })\n ) : (\n \n \n None Available\n \n \n )}\n \n
    \n
    \n
    \n )\n };\n\n const unitsData = units.map(unit => {\n return {\n id: unit.id,\n title: unit.title,\n description: unit.description,\n tags: unit.tags,\n lectures: unit.lectures,\n assessments: unit.assessments,\n courses: unit.courses,\n quizzes: unit.quizzes,\n status: unit.status,\n schools: unit.schools\n };\n });\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n
    \n );\n };\n\n return (\n
    \n setShowError(false)}\n >\n {errorMessage}\n \n\n setShowSuccess(false)}\n >\n {successMessage}\n \n\n
    \n

    \n Units\n

    \n \n
    \n\n
    \n {renderUnits()}\n
    \n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n
    \n );\n};\n\nexport default UnitsPanel;\n","import React, {useState, useEffect} from 'react';\nimport YouTube from 'react-youtube';\nimport * as Icons from 'react-bootstrap-icons';\nimport {Button, Alert, Spinner, Badge, Modal} from 'react-bootstrap';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport LectureService from './../../../../../services/LectureService';\nimport VideoTimeUtils from './../../../../../utils/VideoTimeUtils';\nimport ConfirmDeleteModal from './../../../../widgets/modals/instructor/ConfirmDeleteModal';\nimport AssetService from '../../../../../services/AssetService';\nimport AssessmentService from '../../../../../services/AssessmentService';\nimport TranscriptService from '../../../../../services/TranscriptService';\nimport ProfileService from '../../../../../services/ProfileService';\nimport CheckIcon from \"./../../../../../images/check.svg\";\nimport inProgressIcon from \"./../../../../../images/inprogress.svg\";\n\nconst LecturesPanel = (props) => {\n\n const { showDrawer, reload } = props;\n const { SearchBar } = Search;\n\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [successMessage, setSuccessMessage] = useState('');\n const [lectures, setLectures] = useState(null);\n\n const [groupToRemove, setGroupToRemove] = useState([]);\n const [showRemoveBulkButton, setShowRemoveBulkButton] = useState(false);\n const [showGroupRemovalInProgress, setShowGroupRemovalInProgress] = useState(false);\n const [loading, setLoading] = useState(false);\n const [lectureVideoUrl, setLectureVideoUrl] = useState(\"\");\n const [show, setShow] = useState(false);\n const [buttonVariant, setButtonVariant] = useState('primary');\n const [copyButtonText, setCopyButtonText] = useState('Copy to Clipboard');\n const [showVideoModal, setShowVideoModal] = useState(false);\n const [selectedVideoUrl, setSelectedVideoUrl] = useState('');\n const [isYoutubeVideo, setIsYoutubeVideo] = useState(false);\n const [selectedVideoTitle, setSelectedVideoTitle] = useState('');\n\n \n const handleClose = () => setShow(false);\n const handleShow = () => setShow(true);\n \n useEffect(() => {\n document.title = \"LimeSpring Portal - Lectures\";\n const init = async () => {\n //no sync\n LectureService.checkTranscripts();\n setLectures(await LectureService.getAllFromRemote());\n } \n init();\n }, [reload]);\n\n const clearSelectionFields = () => {\n setGroupToRemove([]);\n setShowRemoveBulkButton(false);\n setShowGroupRemovalInProgress(false);\n }\n\n const edit = (id) => {\n clearSelectionFields();\n const lect = lectures.find((lecture) => { return lecture._id === id});\n showDrawer(lect);\n clearSelectionFields();\n }\n\n const clone = async (id) => {\n const lect = lectures.find((lecture) => { return lecture._id === id});\n const success = await LectureService.clone(lect);\n if(!success) { \n setErrorMessage('Error while trying to clone lecture. Please try again');\n setShowError(true); \n } else {\n setSuccessMessage('Successfuly cloned Lecture.');\n setShowSuccess(true);\n }\n setLectures(await LectureService.getAllFromRemote());\n clearSelectionFields();\n }\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n removeBulk();\n }\n\n const removeBulk = async () => {\n if(!groupToRemove || groupToRemove.length === 0) { return; }\n setShowGroupRemovalInProgress(true);\n let errors = [];\n\n for (const id of groupToRemove) {\n const success = await LectureService.remove(id);\n if(!success) { errors.push(id); }\n }\n\n if(errors.length > 0) { \n setErrorMessage('Error while trying to remove some lectures. Please review and try again');\n setShowError(true); \n } else {\n setSuccessMessage('Successfuly removed Lectures.');\n setShowSuccess(true);\n }\n clearSelectionFields();\n setLectures(await LectureService.getAllFromRemote());\n }\n\n const checkIsEditable = (id) => {\n if(!id) { return true; }\n const profile = ProfileService.get();\n if(profile.role === 'Instructor' && lectures){\n const lecture = lectures.find(l => l._id === id);\n if(lecture && lecture.createdBy !== profile._id) {\n return false;\n }\n }\n return true;\n }\n\n const generateUrl = async (id) => {\n setLoading(true);\n try {\n const response = await LectureService.generateUrl(id);\n setLectureVideoUrl(response.data.url);\n handleShow();\n } catch (error) {\n console.error('Error generating URL:', error);\n } finally {\n setLoading(false);\n }\n };\n\n const copyToClipboard = () => {\n navigator.clipboard.writeText(lectureVideoUrl);\n\n setCopyButtonText('Copied!');\n setButtonVariant('success');\n\n setTimeout(() => {\n setCopyButtonText('Copy to Clipboard');\n setButtonVariant('primary');\n }, 2000);\n \n };\n \n const handleGenerateUrl = (id) => {\n generateUrl(id);\n };\n\n const openVideoModal = (lecture) => {\n if (lecture) {\n if (lecture.data.isYoutubeVideo) {\n const youtubeId = lecture.data.youtubeUrl.split('v=')[1]?.split('&')[0];\n setSelectedVideoUrl(youtubeId);\n setIsYoutubeVideo(true);\n }\n else {\n setSelectedVideoUrl(lecture.url);\n setIsYoutubeVideo(false);\n }\n setIsYoutubeVideo(lecture.data.isYoutubeVideo);\n setShowVideoModal(true);\n setSelectedVideoTitle(lecture.data.title);\n } else {\n setErrorMessage('No video available for this lecture');\n setShowError(true);\n }\n };\n\n const renderLectures = () => {\n\n if (!lectures) { return
    ; }\n \n const columns = [\n {\n dataField: \"thumbnail\",\n text: \" \",\n headerAlign: \"left\",\n align: \"left\",\n headerStyle: (column, colIndex) => {\n return { width: '280px', textAlign: 'left' };\n }, \n formatter: (cellContent, row) => {\n const isEditable = checkIsEditable(row.id);\n return (\n
    openVideoModal(row) : undefined}\n >\n
    \n
    \n
    \n
    \n );\n }\n },\n {\n dataField: \"title\",\n text: \"Title\",\n sort: true,\n headerAlign: \"center\",\n align: \"left\", \n style: () => {\n return { verticalAlign: 'top'}\n },\n formatter: (cellContent, row) => {\n return (\n
    \n
    {row.data.title}
    \n {VideoTimeUtils.formatVideoTime(row.data.duration)}\n

    {row.data.description && row.data.description !== \"\" ? row.data.description : No description Available}

    \n
    \n );\n }\n },\n {\n dataField: \"transcript\",\n text: \"Transcript\",\n headerAlign: \"left\",\n align: \"left\",\n headerStyle: (column, colIndex) => {\n return { width: '170px', textAlign: 'left' };\n },\n formatter: (cellContent, row) => {\n if(row.transcript === \"COMPLETED\"){ return
    }\n if(row.transcript === \"IN_PROGRESS\"){ return } \n if(row.transcript === \"FAILED\"){return
    Failed
    } \n if(row.transcript === \"NONE\"){ return (\n
    \n \n None Available\n \n
    )\n }\n }\n },\n {\n dataField: \"url\",\n text: \"Content\",\n headerAlign: \"left\",\n align: \"left\",\n formatter: (cellContent, row) => {\n if(row.markers && row.markers.length > 0){\n row.markers = row.markers.sort(function (a, b) {\n return a.cuePoint - b.cuePoint;\n });\n }\n return (\n
    \n
      \n {\n (!row.markers || row.markers.length) === 0 \n ?\n
    • None Available
    • \n : \n row.markers.map(marker => {\n\n let assetName = 'Marker Asset';\n\n if(marker.asset && marker.asset !== '') { \n assetName = marker.asset.title;\n }\n\n if(marker.assessment && marker.assessment !== ''){\n assetName = marker.assessment.title;\n }\n\n return
    • \n \n {marker.assessment !== '' ? : }{assetName} ({VideoTimeUtils.formatVideoTime(marker.cuePoint)})\n \n
    • \n })\n }\n
    \n
    \n );\n }\n },\n {\n dataField: \"search\",\n text: \"\",\n headerAlign: \"center\",\n headerClasses: \"panel-status-row\",\n align: \"left\",\n // headerStyle: (column, colIndex) => {\n // return { width: '300px', textAlign: 'center' };\n // },\n formatter: (cellContent, row) => {\n\n const isEditable = checkIsEditable(row.id);\n\n return (\n
    \n {loading ? (\n
    \n

    Generating URL

    \n

    please wait...

    \n \n
    \n ) : (\n handleGenerateUrl(row.id)}\n title=\"Generate Lecture Video URL\"\n >\n \n \n )}\n edit(row.id)}\n title={isEditable ? \"Edit Lecture\": \"Editing not allowed (Clone first)\"}\n disabled={!isEditable}\n >\n \n \n clone(row.id)}\n >\n \n \n
    \n );\n }\n }\n ];\n\n const lecturesData = lectures.map((lecture) => {\n\n //markers\n let lectureMarkerLabels = [];\n if(lecture.markers && lecture.markers.length > 0){\n lectureMarkerLabels = lecture.markers.map(lectureMarker => { return lectureMarker.label; });\n }\n\n //transcripts\n let transcriptStatus = 'NONE';\n if(lecture.transcripts && lecture.transcripts.length > 0){\n const trscRef = lecture.transcripts.find(t => t.code === 'en');\n //weird json chain due to server return data \n if(trscRef) transcriptStatus = trscRef._id.status;\n }\n \n return {\n id: lecture._id,\n thumbnail: lecture.thumbnail,\n url: lecture.url,\n title: lecture.title,\n markers: lecture.markers,\n data: lecture,\n search: lectureMarkerLabels,\n transcript: transcriptStatus\n };\n });\n\n const selectRow = {\n mode: 'checkbox',\n clickToSelect: false,\n selected: groupToRemove,\n onSelect: (row, isSelect) => {\n if(!checkIsEditable(row.id)) { return false; }\n\n if (isSelect) {\n setGroupToRemove([...groupToRemove, row.id]);\n setShowRemoveBulkButton(true);\n } else {\n const selected = groupToRemove.filter(x => x !== row.id);\n setGroupToRemove(selected);\n if(selected.length === 0) { setShowRemoveBulkButton(false) }\n }\n },\n onSelectAll: (isSelect, rows) => {\n if (isSelect) {\n setGroupToRemove(rows.map(r => r.id));\n setShowRemoveBulkButton(true);\n } else {\n setGroupToRemove([]);\n setShowRemoveBulkButton(false);\n }\n } \n }\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n return (\n
    \n setShowError(false)}>\n {errorMessage}\n \n\n setShowSuccess(false)}>\n {successMessage}\n \n\n
    \n

    Lectures

    \n
    \n \n \n
    \n
    \n\n
    \n {renderLectures()}\n
    \n\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n \n \n Generated URL\n \n \n \n \n \n \n \n \n \n\n setShowVideoModal(false)} size=\"lg\" centered>\n \n {selectedVideoTitle} Video \n \n \n {selectedVideoUrl ? (\n isYoutubeVideo ? (\n \n ) : (\n \n )\n ) : (\n No video available for this lecture.\n )}\n \n \n \n \n \n
    \n );\n}\n \nexport default LecturesPanel;","import React from 'react';\nimport { Button, ListGroup, OverlayTrigger, Popover } from 'react-bootstrap';\nimport MathDisplayField from './../math/MathDisplayField';\nimport * as Icons from 'react-bootstrap-icons';\n\nconst ChoiceTooltip = (props) => {\n\n const { questionid, choices } = props;\n\n const renderMath = () => {\n if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }\n let description = \"\";\n return (\n renderMath()} overlay={\n \n Choices\n \n \n {\n \n choices && choices.length > 0 ? choices.map((choice, index) => {\n description = index+ 1 + \") \" + choice.description ;\n return \n \n \n { choice.isCorrect ? : <>} \n \n \n }) : <>\n }\n \n \n \n }>\n \n \n );\n}\n \nexport default ChoiceTooltip;","import Read, { useState } from 'react';\nimport {Modal, Button, Form, Spinner} from 'react-bootstrap';\n\nexport default function EmailInputModal ({show, onHide, onSend}) {\n const [emailInput, setEmailInput] = useState('');\n const [emailError, setEmailError] = useState('');\n const [loading, setLoading] = useState(false);\n\n const handleSend = async () => {\n const emails = emailInput.split(/[;,]+/).map(email => email.trim());\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const invalidEmails = emails.filter(email => !emailRegex.test(email));\n\n if (invalidEmails.length > 0) {\n setEmailError(`Invalid email: ${invalidEmails.join(\", \")}`);\n return;\n }\n\n setLoading(true);\n try {\n await onSend(emails);\n } catch(e) {\n console.error(`Error while sending email: ${e}`);\n setEmailError(\"Error while sending email\");\n } finally {\n setLoading(false);\n setEmailInput('');\n setEmailError('');\n onHide();\n } \n \n };\n\n return (\n \n \n Quiz URL will be emailed \n \n \n
    \n \n Enter email to receive the url of the quiz \n setEmailInput(e.target.value)}\n isInvalid={!!emailError}\n />\n {emailError}\n \n
    \n
    \n \n \n \n \n
    \n );\n\n\n\n};","import React, { useEffect, useState } from \"react\";\nimport { Button, Badge, ListGroup, Alert, Spinner, Modal } from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Config from \"../../../../../config/Config\";\nimport MathDisplayField from \"./../../../../widgets/math/MathDisplayField\";\nimport AssessmentService from \"./../../../../../services/AssessmentService\";\nimport QuestionService from \"./../../../../../services/QuestionService\";\nimport ProfileService from \"./../../../../../services/ProfileService\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport VideoTimeUtils from \"../../../../../utils/VideoTimeUtils\";\nimport ChoiceTooltip from \"./../../../../widgets/tooltips/ChoiceTooltip\";\nimport QuestionBuilderModal from \"../../../../widgets/modals/instructor/QuestionBuilderModal\";\nimport EmailInputModal from \"../../../../widgets/modals/instructor/EmailInputModal\";\nimport { set } from \"react-ga\";\n\nconst AssessmentsPanel = props => {\n const { showDrawer, reload } = props;\n const { SearchBar } = Search;\n\n const [assessments, setAssessments] = useState(null);\n const [currentAssessment, setCurrentAssessment] = useState(null);\n const [questionToUpdate, setQuestionToUpdate] = useState(null);\n\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showQuestionModal, setShowQuestionModal] = useState(false);\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState(\"ERROR MESSAGE\");\n const [showSuccess, setShowSuccess] = useState(false);\n const [successMessage, setSuccessMessage] = useState(\"\");\n const [assessmentUrl, setAssessmentUrl] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [showEmailModal, setShowEmailModal] = useState(false);\n const [selectedAssessmentId, setSelectedAssessmentId] = useState(null);\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Assessments\";\n (async() => {\n setAssessments(await AssessmentService.getAllFromRemote());\n })();\n }, [reload]);\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteAssessment();\n };\n\n const showDeleteWarning = id => {\n if (!checkIsEditable(id)) {\n return;\n }\n\n setCurrentAssessment(\n assessments.find(assessment => {\n return id === assessment._id;\n })\n );\n setShowWarningModal(true);\n };\n\n const showQuestionEditor = (question) => {\n setQuestionToUpdate(question);\n setShowQuestionModal(true);\n }\n\n const deleteAssessment = async () => {\n const succeeded = await AssessmentService.remove(currentAssessment._id);\n if (succeeded) {\n setSuccessMessage(\"Successfuly removed assessment.\");\n setShowSuccess(true);\n setAssessments(await AssessmentService.getAllFromRemote());\n setCurrentAssessment(null);\n } else {\n setErrorMessage(\n \"Error while trying to remove assessment. Please try again\"\n );\n setShowError(true);\n }\n };\n\n const edit = async(e, id) => {\n e.stopPropagation();\n if (!checkIsEditable(id)) {\n return;\n }\n const assessment = assessments.find(a => a._id === id);\n if(!assessment) return;\n showDrawer(assessment);\n };\n\n const clone = async id => {\n const a = assessments.find(assessment => {\n return id === assessment._id;\n })\n const success = await AssessmentService.clone(a);\n if (!success) {\n setErrorMessage(\n \"Error while trying to clone assessment. Please try again\"\n );\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly cloned assessment.\");\n setShowSuccess(true);\n }\n setAssessments(await AssessmentService.getAllFromRemote());\n };\n\n const handleShowEmailModal = (id) => {\n setSelectedAssessmentId(id);\n setShowEmailModal(true);\n };\n\n const handleSendEmail = async (emails) => {\n if (!selectedAssessmentId) return;\n setLoading(true);\n try {\n await AssessmentService.generateUrl(selectedAssessmentId, emails);\n setSuccessMessage(\"The assessment link has been successfully generated and sent to the provided email address.\");\n setShowSuccess(true);\n } catch (error) {\n console.error('Error generating URL:', error);\n setErrorMessage(\"An error occurred while generating the assessment URL. Please try again.\");\n setShowError(true);\n } finally {\n setLoading(false);\n } \n };\n\n const updateQuestion = async question => {\n setShowQuestionModal(false);\n setQuestionToUpdate(null);\n const success = await QuestionService.update(question._id, question);\n if (!success) {\n console.error(`Error. Could not update question id: ${question._id}`);\n setErrorMessage(\"Error while trying to edit question. Please try again\");\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly edited the question.\");\n setShowSuccess(true);\n setAssessments(await AssessmentService.getAllFromRemote());\n }\n };\n\n const checkIsEditable = id => {\n if (!id) {\n return true;\n }\n const profile = ProfileService.get();\n if (profile.role === \"Instructor\" && assessments) {\n const assessment = assessments.find(a => a._id === id);\n if (assessment && assessment.createdBy !== profile._id) {\n return false;\n }\n }\n return true;\n };\n\n const renderAssessments = () => {\n \n if (!assessments) { return
    ; }\n if (!assessments) {\n return \"\";\n }\n\n const columns = [\n { dataField: \"title\", text: \"Title\", sort: true, headerAlign: \"center\" },\n {\n dataField: \"type\",\n text: \"Type\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"category\",\n text: \"Category\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.category}\n
    \n );\n }\n },\n {\n dataField: \"duration\",\n text: \"Duration\",\n headerAlign: \"center\",\n align: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"100px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return !row.duration || row.duration === 0 || row.duration === \"0\"\n ? \"No Limit\"\n : VideoTimeUtils.formatVideoTime(row.duration);\n }\n },\n {\n dataField: \"questions\",\n text: \"Questions\",\n headerAlign: \"center\",\n align: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"100px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n

    \n \n {row.questions ? row.questions.length : \"0\"}\n \n

    \n );\n }\n },\n {\n dataField: \"status\",\n text: \"Status\",\n headerAlign: \"center\",\n align: \"center\",\n headerClasses: \"panel-status-row\",\n formatter: (cellContent, row) => {\n const isEditable = checkIsEditable(row.id);\n\n return (\n
    \n {loading ? (\n
    \n

    Generating URL

    \n

    please wait ...

    \n \n
    \n ) : (\n row.type === 'QUIZ' && (\n handleShowEmailModal(row._id || row.id)}\n title=\"Generate URL\"\n >\n \n \n )\n )}\n edit(e, row.id)}\n title={\n isEditable\n ? \"Edit Assessment\"\n : \"Editing not allowed (Clone first)\"\n }\n disabled={!isEditable}\n >\n \n \n clone(row.id)}\n >\n \n \n showDeleteWarning(row.id)}\n title={\n isEditable ? \"Remove Assessment\" : \"Removing not allowed\"\n }\n disabled={!isEditable}\n >\n \n \n
    \n );\n }\n }\n ];\n\n const assessmentsData = assessments.map(assessment => {\n return {\n id: assessment._id,\n title: assessment.title,\n category: assessment.category,\n duration: assessment.durationInMinutes,\n questions: assessment.questions || [],\n type: assessment.type,\n status: assessment.status\n };\n });\n\n const expandRow = {\n showExpandColumn: true,\n expandByColumnOnly: true,\n onlyOneExpanding: true,\n onExpand: (r, i, ri, e) => {\n e.stopPropagation();\n setTimeout(() => {if(window.MathJax && window.MathJax.typeset) window.MathJax.typeset()}, Config.mathRenderTimer);\n },\n renderer: row => (\n
    \n \n {row.questions && row.questions.length > 0 ? (\n row.questions.map((question, index) => {\n const addMultimedia = () =>{\n if(!question.multimedia || question.multimedia === null){\n return (<>)\n }else{\n return(\n \n )\n }\n }\n\n let statement = question.statement;\n if(question.subtype === 'STEPS' && question.steps && question.steps.length > 0){\n const firstStep = question.steps[0];\n statement = '(MULTISTEP) ' + firstStep.statement + \", ...\";\n }\n\n return (\n \n
    \n {index + 1})\n \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n {addMultimedia()}\n \n
    \n );\n })\n ) : (\n \n None Available\n \n )}\n
    \n
    \n )\n };\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n return (\n
    \n setShowError(false)}\n >\n {errorMessage}\n \n\n setShowSuccess(false)}\n >\n {successMessage}\n \n\n
    \n

    \n Assessments\n

    \n \n
    \n\n
    {renderAssessments()}
    \n\n setShowEmailModal(false)}\n onSend={handleSendEmail}\n />\n\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n\n setShowQuestionModal(false)} \n onComplete={() => {}} \n onUpdate={(q) => updateQuestion(q)}\n />\n
    \n );\n};\n\nexport default AssessmentsPanel;\n","import React, { useState } from \"react\";\nimport { Modal, Button, InputGroup, FormControl } from \"react-bootstrap\";\n\nconst LibrarypanelEditModal = props => {\n const { show, onHide, ID, fn } = props;\n const [newName, setNewName] = useState(null);\n\n const onChangeHandler = e => {\n setNewName(e.target.value);\n };\n \n return (\n \n \n Rename File\n \n \n \n { fn(ID, { title: newName }) }}\n variant=\"outline-secondary\"\n >\n Update\n \n \n \n \n \n \n );\n};\n\nexport default LibrarypanelEditModal;\n","import React, { useEffect, useState } from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport ApiPath from \"../../../utils/ApiPath\";\nimport axios from 'axios';\nimport LibrarypanelEditModal from \"./../modals/instructor/LibrarypanelEditModal\";\nimport ProgressBar from \"react-bootstrap/ProgressBar\";\nimport { Button, ButtonToolbar, ButtonGroup, Alert } from \"react-bootstrap\";\nimport LibraryItem from \"./../library/LibraryItem\";\nimport { useDropzone } from \"react-dropzone\";\nimport PanelSearchBar from \"./../panel-searchbar/PanelSearchBar\";\nimport AssetService from \"./../../../services/AssetService\";\nimport ConfirmDeleteModal from \"./../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport \"./dropzone.css\";\n\nconst Dropzone = props => {\n\n const { assets=[] } = props;\n\n const mimeType = [\n \"application/json\",\n \"application/pdf\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"image/*\",\n \"text/csv\",\n \"text/plain\"\n ];\n const [thumbnails, setThumbnails] = useState([]);\n const [searchExpression, setSearchExpression] = useState(``);\n const [progressUpload, setProgressUpload] = useState(0);\n const [fileLoader, setFileLoader] = useState(false);\n const [modalState, setModalState] = useState({\n current: \"\",\n edit: false,\n key: \"\"\n });\n const [filterByType, setFilterByType] = useState(\"\");\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [removeThumbnailId, setRemoveThumbnailId] = useState(null);\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n useEffect(() => {\n setThumbnails(assets);\n }, [assets]);\n\n const { getRootProps, getInputProps } = useDropzone({\n getFilesFromEvent: event => fileGetter(event),\n accept: mimeType,\n onDrop: acceptedFiles => {\n const _files = acceptedFiles.map((file, i) => {\n return Object.assign(file, {\n preview: URL.createObjectURL(file),\n tags: []\n });\n });\n uploadFiles(_files);\n }\n });\n\n const fileGetter = async (event) => {\n const files = [];\n const fileList = event.dataTransfer\n ? event.dataTransfer.files\n : event.target.files;\n\n for (var i = 0; i < fileList.length; i++) {\n const file = fileList.item(i);\n\n Object.defineProperty(file, \"myProp\", {\n value: true\n });\n\n files.push(file);\n }\n return files;\n }\n\n const proceedDelete = async () => {\n setShowWarningModal(false);\n await AssetService.remove(removeThumbnailId);\n setThumbnails(await AssetService.getAllFromRemote());\n setRemoveThumbnailId(null);\n };\n\n const uploadFiles = async files => {\n setFileLoader(true);\n const payloadFactory = (blob, name, type, tags, ext) => {\n return {\n capture: blob,\n title: name,\n tags: tags,\n type: type, //IMAGE,PPTX,DOCX\n extension: ext\n };\n };\n\n for (const file of files) {\n\n let captureAsBase64 = await fetch(file.preview).then(r => r.blob());\n \n const payload = payloadFactory(\n captureAsBase64,\n file.name,\n file.type.split(\"/\")[0] !== \"image\"\n ? file.name.split(\".\").reverse()[0].toUpperCase()\n : \"IMAGE\",\n file.tags,\n file.name.split(\".\").reverse()[0]\n )\n\n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n try {\n const response = await axios.post(ApiPath.CREATE_ASSET_ENDPOINT, form, { headers: {'Content-Type': 'multipart/form-data'},\n onUploadProgress: ProgressEvent => {\n setProgressUpload(Math.round((100 * ProgressEvent.loaded) / ProgressEvent.total))\n }})\n\n if (response && (response.status === 200 || response.status === 201 )) {\n\n //hide loader\n setFileLoader(false);\n setProgressUpload(0);\n\n //repopulate thumbnails\n setThumbnails(await AssetService.getAllFromRemote());\n }\n } catch (error) {\n setFileLoader(false);\n setProgressUpload(0);\n setErrorMessage('Error while uploading multimedia asset. Please try again');\n setShowError(true);\n }\n \n }\n\n //avoid memory leaks\n files.forEach(file => URL.revokeObjectURL(file.preview));\n };\n\n const progressBar = () => {\n return (\n
    \n \n
    \n );\n };\n\n const dranNdrop = () => {\n return (\n
    \n
    \n
    \n \n \n

    Drop files here, or click to select files

    \n
    \n
    \n
    \n );\n };\n\n const handleClose = () => {\n setModalState({\n ...modalState,\n ...{ [modalState[\"current\"]]: false, key: \"\" }\n });\n };\n\n const editModalBuilder = () => {\n async function mediaServerCall(id, payload) {\n await AssetService.update(id, payload);\n setThumbnails(AssetService.getAll());\n buildPreview();\n handleClose();\n }\n return (\n \n );\n };\n\n const buildPreview = () => {\n const options = {\n labels: [\"options\"],\n menuItems: [\n {\n label: \"Delete\",\n callback: id => {\n async function deleteFile(id) {\n await AssetService.remove(id);\n setThumbnails(AssetService.getAll());\n buildPreview();\n }\n deleteFile(id);\n }\n },\n {\n label: \"Edit\",\n callback: id => {\n setModalState({\n ...modalState,\n ...{ current: \"edit\", edit: true, key: id }\n });\n }\n }\n ]\n };\n\n const cards = thumbnails.map(thumb => {\n return (\n {\n setShowWarningModal(true);\n setRemoveThumbnailId(id);\n }}\n />\n );\n });\n\n return
    {cards}
    ;\n };\n\n return (\n
    \n setShowError(false)}>\n {errorMessage}\n \n
    \n {fileLoader ? progressBar() : dranNdrop()}\n
    \n
    \n \n setSearchExpression(searchString.toLowerCase())\n }\n />\n \n \n {\" \"}\n {\" \"}\n {\" \"}\n {\" \"}\n {\" \"}\n \n \n \n
    \n\n
    \n {editModalBuilder()}\n {thumbnails.length && !fileLoader ? (\n buildPreview()\n ) : (\n
    Nothing To Preview!
    \n )}\n
    \n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n
    \n );\n};\n\nexport default Dropzone;\n","import React, { useState, useEffect } from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Dropzone from \"./../../../../widgets/dragndrop/DropZone\";\nimport AssetService from \"./../../../../../services/AssetService\";\n\nconst LibraryPanel = () => {\n\n const [thumbnails, setThumbnails] = useState([]);\n \n useEffect(() => {\n document.title = \"LimeSpring Portal - Library\";\n const init = async () => {\n setThumbnails(await AssetService.getAllFromRemote());\n }\n init();\n }, []);\n\n return (\n
    \n
    \n

    \n Media Library\n

    \n
    \n\n
    \n \n
    \n\n
    \n
    \n );\n};\n\nexport default LibraryPanel;\n","import React, {useState, useEffect} from 'react';\nimport * as Icons from \"react-bootstrap-icons\";\nimport { Spinner } from 'react-bootstrap';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport ClassService from \"../../../../../services/ClassService\";\nimport PaginationService from \"../../../../../services/PaginationService\";\nimport SearchService from \"../../../../../services/SearchService\";\n\nconst ReportPanel = (props) => {\n\n const { SearchBar } = Search;\n const { showDrawer } = props;\n\n const [classes, setClasses] = useState(null);\n const [currentPage, setCurrentPage] = useState(1);\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Reports\";\n (async () => {\n if (!classes) setClasses(await ClassService.getAllFromRemote());\n })();\n }, [classes]);\n\n const viewReport = (id) => {\n const data = {id: id, classes: classes};\n showDrawer(data);\n };\n\n const handlePageChange = async (p, spp) => {\n const paginated_results = await PaginationService.paginate('classes', p);\n if(paginated_results && paginated_results.length > 0){\n setClasses(paginated_results);\n setCurrentPage(p);\n }\n }\n\n const handleTableChange = async (type, newState) => {\n if(type !== 'search') return;\n const filtered_results = await SearchService.search('classes', newState.searchText);\n if(filtered_results && filtered_results.length > 0){\n //change _id prop to id\n filtered_results.forEach(filtered_result => {\n if(filtered_result._id){\n filtered_result.id = filtered_result._id;\n delete filtered_result._id\n }\n });\n setClasses(filtered_results);\n }\n }\n\n const renderClasses = () => {\n if (!classes) return
    \n \n
    ;\n\n const columns = [\n {\n dataField: \"title\",\n text: \"Class\",\n sort: true,\n headerAlign: \"left\",\n align: \"left\",\n formatter: (cellContent, row) => {\n return (\n viewReport(row._id || row.id)}\n >\n {row.title}\n \n );\n }\n },\n {\n dataField: \"status\",\n text: \"Current Status\",\n sort: true,\n align: \"center\",\n headerAlign: \"center\"\n }\n ];\n\n return (\n \n {props => (\n
    \n \n handleTableChange(t, n) }\n pagination={ paginationFactory({ page: currentPage, onPageChange: (p, spp) => handlePageChange(p, spp), alwaysShowAllBtns: true, withFirstAndLast: false, sizePerPage: 20, showTotal: true, totalSize: 0}) }\n />\n
    \n )}\n \n );\n };\n\n return (\n
    \n
    \n

    \n Class Reports\n

    \n
    \n
    {renderClasses()}
    \n
    \n );\n};\n\nexport default ReportPanel;","import React, { useState, useEffect } from \"react\";\nimport { Button, Alert, Badge } from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport paginationFactory from 'react-bootstrap-table2-paginator';\nimport MathDisplayField from \"./../../../../widgets/math/MathDisplayField\";\nimport QuestionService from \"./../../../../../services/QuestionService\";\nimport ProfileService from \"./../../../../../services/ProfileService\";\nimport Config from \"../../../../../config/Config\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport QuestionBuilderModal from \"../../../../widgets/modals/instructor/QuestionBuilderModal\";\nimport BatchImportModal from \"./../../../../widgets/modals/instructor/BatchImportModal\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport \"./panels.css\";\nimport ArrayUtils from \"../../../../../utils/ArrayUtils\";\nimport context from \"react-bootstrap/esm/AccordionContext\";\n\nconst QuestionsPanel = props => {\n const { SearchBar } = Search;\n const { showDrawer, reload } = props;\n\n const [questions, setQuestions] = useState(null);\n const [currentQuestion, setCurrentQuestion] = useState(null);\n\n const [showQuestionModal, setShowQuestionModal] = useState(false);\n const [showBatchModal, setShowBatchModal] = useState(false);\n\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [showSuccess, setShowSuccess] = useState(false);\n const [successMessage, setSuccessMessage] = useState(\"\");\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Questions\";\n const init = async () => {\n if (!questions) setQuestions(await QuestionService.getAllFromRemote());\n\n //typeset math!\n if (window.MathJax && window.MathJax.typeset) window.MathJax.typeset();\n }\n init();\n }, [reload]);\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteQuestion();\n };\n\n const onBatchSuccess = async () => {\n setQuestions(await QuestionService.getAllFromRemote());\n setShowBatchModal(false);\n }\n\n const showDeleteWarning = id => {\n setCurrentQuestion(\n questions.find(question => {\n return id === question._id;\n })\n );\n setShowWarningModal(true);\n };\n\n const deleteQuestion = async () => {\n const succeeded = await QuestionService.remove(currentQuestion._id);\n if (succeeded) {\n setSuccessMessage(\"Successfuly removed question.\");\n setShowSuccess(true);\n setQuestions(await QuestionService.getAllFromRemote());\n setCurrentQuestion(null);\n } else {\n setErrorMessage(\n \"Error while trying to remove question. Please try again\"\n );\n setShowError(true);\n }\n };\n\n const addNew = () => {\n setCurrentQuestion(null);\n setShowQuestionModal(true);\n }\n\n const edit = (e, question) => {\n e.stopPropagation();\n //showDrawer(question);\n setCurrentQuestion(question);\n setShowQuestionModal(true);\n };\n\n const clone = async id => {\n const q = questions.find(question => { return id === question._id; })\n const success = await QuestionService.clone(q);\n if (!success) {\n setErrorMessage(\"Error while trying to clone question. Please try again\");\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly cloned question.\");\n setShowSuccess(true);\n }\n setQuestions(await QuestionService.getAllFromRemote());\n };\n\n const refreshQuestionList = async () => {\n //get latest 2 questions and add them on top of list (if not there already)!\n const latestQuestions = await QuestionService.getSomeFromRemote(2);\n if (latestQuestions && latestQuestions.length > 0) {\n let _questionsClone = [...questions];\n latestQuestions.forEach(lq => {\n _questionsClone = ArrayUtils.addInFrontOrReplaceEntry(_questionsClone, lq);\n });\n setQuestions(_questionsClone);\n _questionsClone = null;\n }\n }\n\n const saveQuestion = async question => {\n setShowQuestionModal(false);\n setCurrentQuestion(null);\n const success = await QuestionService.create(question);\n if (!success) {\n setErrorMessage(\"Error while trying to save question. Please try again\");\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly created the question.\");\n setShowSuccess(true);\n }\n await refreshQuestionList();\n };\n\n const updateQuestion = async question => {\n setShowQuestionModal(false);\n setCurrentQuestion(null);\n const success = await QuestionService.update(question.id, question);\n if (!success) {\n console.error(`Error. Could not update question id: ${question.id}`);\n setErrorMessage(\"Error while trying to edit question. Please try again\");\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly edited the question.\");\n setShowSuccess(true);\n }\n await refreshQuestionList();\n };\n\n const checkIsEditable = (id) => {\n if (!id) { return true; }\n const profile = ProfileService.get();\n if (profile.role === 'Instructor' && questions) {\n const question = questions.find(q => q._id === id);\n if (question && question.createdBy !== profile._id) {\n return false;\n }\n }\n return true;\n }\n\n const createSteps = (row) => {\n const _question = questions.find(q => q._id === row.id);\n return _question.steps.map((step, index) => {\n return (

    \n Step {index + 1}: {step.statement}\n

    \n )\n });\n }\n\n const createchoices = (rchoices, rcontext) => {\n return (
    \n Choices:\n {rchoices && rchoices.length > 0 ? (\n
      \n {rchoices.map(choice => {\n return (\n \n \n
      \n {\n rcontext === 'MATH_TEXT'\n ?\n \n :\n
      {choice.description}
      \n }\n
      \n \n );\n })}\n
    \n ) : (\n

    \n Short answer question\n

    \n )}\n
    )\n }\n\n\n const showMultimediaGallery = (_id) => {\n /*\n if (_id !== \"\" || _id === null) {\n let multimedia = AssetService.getFromRemote(id);\n if(multimedia) return (<>);\n return (\n \n );\n }\n */\n return <>;\n };\n\n const renderQuestions = () => {\n if (!questions) {\n return \"\";\n }\n\n const addExplanation = (row) => {\n if (row.explanationMedia !== \"\") {\n return (showMultimediaGallery(row.explanationMedia))\n } else {\n return
    \n {row.explanation || row.explanation !== \"\" ? (\n \n ) : (\n \"No Explanation Provided\"\n )}\n
    \n\n }\n }\n\n const getSubTypeLegend = (subtype) => {\n if (subtype === 'MULTIPLE_CHOICE') return \"Multiple Choice\";\n if (subtype === 'INPUT_CHOICE') return \"Short Answer\";\n if (subtype === 'STEPS') return \"Stepped\";\n if (subtype === 'MANUAL_CHOICE') return \"Code Input\";\n return \"N/A\";\n }\n\n const columns = [\n {\n dataField: \"statement\",\n text: \"Statement\",\n headerAlign: \"center\",\n sort: true,\n formatter: (cellContent, row) => {\n return ;\n }\n },\n {\n dataField: \"category\",\n text: \"Category\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"150px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return {row.category};\n }\n },\n {\n dataField: \"subcategory\",\n text: \"Subcategory\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"150px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return {row.subcategory};\n }\n },\n {\n dataField: \"hint\",\n text: \"Hint\",\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"150px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n const hasHint = row.hint && row.hint !== \"\";\n return (<>{\n hasHint ?\n () :\n ()\n });\n }\n },\n {\n dataField: \"explanation\",\n text: \"Explanation\",\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"150px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n let hasExplanation = false;\n if (row.explanation && row.explanation !== \"\") hasExplanation = true;\n if (!hasExplanation && row.explanationMedia && row.explanationMedia !== \"\") hasExplanation = true;\n return (<>{\n hasExplanation ?\n () :\n ()\n }\n );\n }\n },\n {\n dataField: \"subtype\",\n text: \"Type\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (colum, colIndex) => {\n return { width: \"200px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return getSubTypeLegend(row.subtype);\n }\n },\n {\n dataField: \"status\",\n text: \"Status\",\n headerAlign: \"center\",\n align: \"center\",\n headerClasses: \"panel-status-row-3items\",\n formatter: (cellContent, row) => {\n\n const isEditable = checkIsEditable(row.id);\n\n return (\n
    \n edit(e, row)}\n title={isEditable ? \"Edit Question\" : \"Editing not allowed (Clone first)\"}\n disabled={!isEditable}\n >\n \n \n clone(row.id)}\n >\n \n \n showDeleteWarning(row.id)}\n title={isEditable ? \"Remove Question\" : \"Removing not allowed\"}\n disabled={!isEditable}\n >\n \n \n
    \n );\n }\n }\n ];\n\n const expandRow = {\n showExpandColumn: true,\n expandByColumnOnly: true,\n onlyOneExpanding: true,\n onExpand: (r, i, ri, e) => {\n e.stopPropagation();\n setTimeout(() => { if (window.MathJax && window.MathJax.typeset) window.MathJax.typeset() }, Config.mathRenderTimer);\n },\n renderer: row => (\n
    \n
    \n {row.step ? createSteps(row) : createchoices(row.choices, row.context)}\n
    \n\n\n
    \n Explanation\n
    \n {addExplanation(row)}\n
    \n Hint\n
    \n
    \n \n {row.hint || row.hint !== \"\" ? (\n \n ) : (\n \"No Hint Provided\"\n )}\n \n
    \n
    \n\n
    \n {row.multimedia ? (\n \n ) : (\n <>\n )}\n
    \n
    \n )\n };\n\n const noStepQuestions = questions.filter(q => q.type !== 'QUESTION_STEP');\n\n const questionsData = noStepQuestions.map(question => {\n\n let statement = question.statement;\n if (question.subtype === 'STEPS') {\n if (questions && questions.length > 0 && question.steps && question.steps.length > 0) {\n const firstStep = question.steps[0];\n if (firstStep) {\n statement = '(MULTISTEP) ' + firstStep.statement + \", ...\";\n if(firstStep.explanation && firstStep.explanation !== \"\") question.explanation = firstStep.explanation\n if(firstStep.hint && firstStep.hint !== \"\") question.hint = firstStep.hint\n }\n }\n }\n\n return {\n id: question._id,\n statement: statement,\n category: question.category,\n subcategory: question.subcategory,\n subtype: question.subtype,\n context: question.context,\n steps: question.steps,\n step: question.subtype === 'STEPS',\n choices: question.choices,\n status: question.status,\n hint: question.hint,\n multimedia: question.multimedia,\n explanation: question.explanation,\n keyboardLayout: question.keyboardLayout,\n explanationMedia: question.explanationMedia\n };\n });\n\n const paginationOptions = {\n onPageChange: (p, s) => {\n setTimeout(() => { if (window.MathJax && window.MathJax.typeset) window.MathJax.typeset() }, Config.mathRenderTimer);\n }\n };\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n const returnView = () => {\n return (\n
    \n
    \n

    \n Question\n Bank\n

    \n
    \n \n setShowBatchModal(true)}\n >\n Import\n \n
    \n
    \n
    {renderQuestions()}
    \n
    \n );\n };\n\n return (\n
    \n setShowError(false)}\n >\n {errorMessage}\n \n\n setShowSuccess(false)}\n >\n {successMessage}\n \n\n {returnView()}\n\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n\n setShowQuestionModal(false)}\n onComplete={(q) => saveQuestion(q)}\n onUpdate={q => updateQuestion(q)}\n q={currentQuestion}\n />\n\n setShowBatchModal(false)}\n onProceed={() => onBatchSuccess()}\n />\n
    \n );\n};\n\nexport default QuestionsPanel;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from './../utils/ResponseUtil';\nimport CacheService from './CacheService';\n\nexport default {\n\n getAllFromRemote: async() => {\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_ADMINS_ENDPOINT);\n if(response && response.status === 200) { \n const { admins } = response.data;\n return admins;\n } \n return [];\n },\n\n getAll: () => {\n return LocalStorageService.get(\"administrators\") || [];\n },\n\n get: id => {\n return LocalStorageService.get(\"administrators\").find(\n admin => admin._id === id\n );\n },\n\n getByIds: ids => {\n if (!ids) {\n return [];\n }\n return ids.map(id => {\n return LocalStorageService.get(\"administrators\").find(\n admin => admin._id === id\n );\n });\n },\n\n regenerateCredentials: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.updatePassword()); }\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_PASSWORD_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AdminService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n create: async (payload) => {\n \n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.createAdmin()); }\n try { \n let response = await new ApiService().post(ApiPath.CREATE_ADMIN_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AdminService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n update: async (id, payload) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.updateAdmin()); }\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_ADMIN_ENDPOINT.replace(':id', id), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AdminService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n remove: async (id) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.removeAdmin()); }\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_ADMIN_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`AdminService | Error while attempting to remove admin. response: ${error}`);\n return false;\n }\n }\n};","export default class Admin {\n\n constructor(firstName, lastName, email, mobile, title, role, school){\n this.firstName = firstName;\n this.lastName = lastName;\n this.email = email;\n this.mobile = mobile;\n this.title = title;\n this.role = role;\n this.school = school;\n }\n\n getFirstName() {\n return this.firstName;\n }\n\n setFirstName(firstName){\n this.firstName = firstName;\n }\n\n getLastName() {\n return this.lastName;\n }\n\n setLastName(lastName){\n this.lastName = lastName;\n }\n\n getEmail() {\n return this.email;\n }\n\n setEmail(email){\n this.email = email;\n }\n\n getMobile() {\n return this.mobile;\n }\n\n setMobile(mobile){\n this.mobile = mobile;\n }\n\n getTitle() {\n return this.title;\n }\n\n setTitle(title){\n this.title = title;\n }\n\n getRole() {\n return this.role;\n }\n\n setRole(role){\n this.role = role;\n }\n\n getSchool() {\n return this.school;\n }\n\n setSchool(school){\n this.school = school;\n }\n\n toString(){\n return JSON.stringify(this);\n }\n}","import React, { useState, useEffect } from \"react\";\nimport Select from \"react-select\";\nimport { Modal, Alert, Button, Spinner } from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Admin from \"./../../../../payloads/Admin\";\nimport StringUtils from \"./../../../../utils/StringUtils\";\nimport LimespringUtils from \"../../../../utils/LimespringUtils\";\nimport SchoolService from \"./../../../../services/SchoolService\";\nimport AdminService from \"./../../../../services/AdminService\";\n\nconst AdminModal = props => {\n const { show, onHide, admin, schools } = props;\n\n const [alertShow, setAlertShow] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const [dataInTransit, setDataInTransit] = useState(false);\n\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [mobile, setMobile] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [school, setSchool] = useState(null);\n const [role, setRole] = useState(null);\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n\n const [showCredentialsReset, setShowCredentialsReset] = useState(false);\n const [rolesSelectOptions, setRolesSelectOptions] = useState([\n { value: \"0\", label: \"Admin\" },\n { value: \"1\", label: \"SuperAdmin\" }\n ]);\n\n const [disableSchool, setDisableSchool] = useState(false);\n\n const [emailError, setEmailError] = useState(\"\");\n\n const [successMessage, setSuccessMessage] = useState(\n \"Administrator created successfully\"\n );\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n const failedResponseMessage =\n \"There was a problem creating administrator. Please try again.\";\n\n useEffect(() => {\n setFirstName(admin ? admin.firstName : ``);\n setLastName(admin ? admin.lastName : ``);\n setEmail(admin ? admin.email : ``);\n setMobile(admin ? admin.mobile : ``);\n setTitle(admin ? admin.title : ``);\n setSchool(admin && admin.schools && admin.schools.length > 0 ? admin.schools[0] : ``);\n setRole(admin ? admin.role : ``);\n }, [admin]);\n\n const resetAndHide = () => {\n setShowCredentialsReset(false);\n resetFlags();\n resetFields();\n onHide();\n };\n\n const resetFields = () => {\n setFirstName(\"\");\n setLastName(\"\");\n setEmail(\"\");\n setMobile(\"\");\n setTitle(\"\");\n setSchool(null);\n setRole(null);\n setPassword(\"\");\n setConfirmPassword(\"\");\n setShowCredentialsReset(false);\n setEmailError(\"\");\n }\n\n const getAdminRole = () => {\n if (!admin) {\n return ``;\n }\n return rolesSelectOptions.find(role => role.label === admin.role);\n };\n\n const resetFlags = () => {\n setAlertShow(false);\n setDataInTransit(false);\n setShowSuccess(false);\n\n //reset password fields\n setPassword(\"\");\n setConfirmPassword(\"\");\n };\n\n const validateForm = () => {\n if (\n StringUtils.isEmpty(firstName) ||\n StringUtils.isEmpty(lastName) ||\n StringUtils.isEmpty(email) ||\n StringUtils.isEmpty(role)\n ) {\n setWrongInputMessage(\"All fields are required. Please review.\");\n return false;\n }\n //admin must always be associated to a school\n if (role.label === \"Admin\") {\n if (StringUtils.isEmpty(school)) {\n setWrongInputMessage(\"Please select school for new administrator.\");\n return false;\n }\n }\n if (!validateEmail(email)) {\n setWrongInputMessage(\"Invalid email format. Please enter a valid email.\");\n return false;\n }\n return true;\n };\n\n const updateAdminPassword = async () => {\n setDataInTransit(true);\n let payload = { password: password, confirm: confirmPassword };\n let success = await AdminService.regenerateCredentials(admin.id, payload);\n setDataInTransit(false);\n if (!success) {\n setShowFailedAlert(true);\n return;\n }\n setSuccessMessage(\"Account updated successfully\");\n setShowSuccess(true);\n };\n\n const updateAdmin = async e => {\n e.preventDefault();\n\n //check if password has been updated\n if (showCredentialsReset) {\n return updateAdminPassword();\n }\n\n resetFlags();\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new Admin(\n firstName,\n lastName,\n email,\n mobile,\n title,\n role.label,\n school ? school.value : ``\n );\n let success = await AdminService.update(admin.id, payload);\n setDataInTransit(false);\n if (success) {\n setSuccessMessage(\"Administrator updated successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const addNewAdmin = async e => {\n e.preventDefault();\n resetFlags();\n if (validateForm()) {\n setDataInTransit(true);\n let payload = new Admin(\n firstName,\n lastName,\n email,\n mobile,\n title,\n role.label,\n school && role.label === 'Admin'? school.value : ``\n );\n let success = await AdminService.create(payload);\n setDataInTransit(false);\n if (success) {\n setSuccessMessage(\"Administrator created successfully\");\n setShowSuccess(true);\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n };\n\n const showSchoolsSelect = () => {\n if (schools) {\n const schoolOptions = schools.map(school => {\n return { value: school.id, label: school.title };\n });\n const defaultSchool = admin\n ? schoolOptions.find(school => school.value === admin.schools[0])\n : ``;\n\n return (\n setSchool(selectedOption)}\n options={schoolOptions}\n className=\"w-50\"\n isClearable={true}\n isDisabled={disableSchool}\n />\n );\n }\n };\n\n const populateRole = selectedOption => {\n setRole(selectedOption);\n selectedOption.value === \"1\"\n ? setDisableSchool(true)\n : setDisableSchool(false);\n };\n\n const showSaveOrUpdateButton = () => {\n if (admin) {\n return (\n updateAdmin(e)}\n >\n Update{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n } else {\n return (\n addNewAdmin(e)}\n >\n Create{\" \"}\n {!dataInTransit ? \"\" : }\n \n );\n }\n };\n\n const validateEmail = (email) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleEmailChange = (e) => {\n const inputEmail = e.target.value;\n setEmail(inputEmail);\n if (!validateEmail(inputEmail)) {\n setEmailError(\"Invalid email format. Please enter a valid email.\");\n } else {\n setEmailError(\"\");\n }\n };\n\n return (\n resetAndHide()}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n id=\"admin-modal\"\n backdrop=\"static\"\n >\n \n \n

    \n {\" \"}\n {admin\n ? `${LimespringUtils.getUserFullName(admin)}`\n : `New Administrator`}\n

    \n
    \n
    \n \n setAlertShow(false)}\n dismissible\n >\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n
    \n \n
    \n setShowCredentialsReset(true)}\n >\n Reset Credentials\n \n
    \n
    \n First Name (*)\n setFirstName(e.target.value)}\n />\n
    \n
    \n Last Name (*)\n setLastName(e.target.value)}\n />\n
    \n
    \n Email (*)\n \n {emailError && {emailError}}\n
    \n
    \n Mobile (optional)\n setMobile(e.target.value)}\n />\n
    \n
    \n Title (optional)\n setTitle(e.target.value)}\n />\n
    \n
    \n Role (*)\n populateRole(selectedOption)}\n options={rolesSelectOptions}\n className=\"w-50\"\n isClearable={true}\n />\n
    \n
    \n School (*)\n {showSchoolsSelect()}\n
    \n (*) Required\n
    \n\n \n
    \n setShowCredentialsReset(false)}\n >\n Back\n \n
    \n
    \n New Password\n setPassword(e.target.value)}\n />\n
    \n
    \n Confirm Password\n setConfirmPassword(e.target.value)}\n />\n
    \n \n \n\n
    \n
    \n \n {successMessage}\n
    \n
    \n
    \n \n {showSaveOrUpdateButton()}\n resetAndHide()}\n >\n Close\n \n \n \n );\n};\n\nexport default AdminModal;\n","import React, { useState, useEffect } from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport { Button, Alert, Spinner } from \"react-bootstrap\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport AdminService from \"./../../../../../services/AdminService\";\nimport AdminModal from \"./../../../../widgets/modals/instructor/AdminModal\";\nimport ConfirmDeleteModal from \"./../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport \"./panels.css\";\nimport SchoolService from \"../../../../../services/SchoolService\";\n\nconst AdminPanel = props => {\n\n const { SearchBar } = Search;\n\n const [admins, setAdmins] = useState(null);\n const [schools, setSchools] = useState([]);\n const [showModal, setShowModal] = useState(false);\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showProgressAlert, setShowProgressAlert] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n const [showSucceedAlert, setShowSucceedAlert] = useState(false);\n const [currentAdmin, setCurrentAdmin] = useState(null);\n\n const failedResponseMessage =\n \"Error while attempting to remove administrator. Please try again.\";\n const succeedResponseMessage = \"Administrator removed successfully.\";\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Administrators\";\n (async() => {\n setAdmins(await AdminService.getAllFromRemote());\n setSchools(await SchoolService.getAllFromRemote())\n })();\n }, []);\n\n const deleteAdmin = async () => {\n setShowProgressAlert(true);\n const succeeded = await AdminService.remove(currentAdmin.id);\n setShowProgressAlert(false);\n if (succeeded) {\n setShowFailedAlert(false);\n setShowSucceedAlert(true);\n setAdmins(await AdminService.getAllFromRemote());\n setCurrentAdmin(null);\n } else {\n setShowFailedAlert(true);\n setShowSucceedAlert(false);\n }\n };\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteAdmin();\n };\n\n const showDeleteWarning = id => {\n setCurrentAdmin(\n admins.find(admin => {\n return id === admin.id;\n })\n );\n setShowWarningModal(true);\n };\n\n const editAdmin = id => {\n setCurrentAdmin(\n admins.find(admin => {\n return id === admin.id;\n })\n );\n setShowModal(true);\n };\n\n const createAdmin = () => {\n setCurrentAdmin(null);\n setShowModal(true);\n };\n\n const renderAdmins = () => {\n if (!admins) {\n return \"\";\n }\n\n const columns = [\n {\n dataField: \"fullName\",\n text: \"Full Name\",\n sort: true,\n headerAlign: \"center\",\n align: \"left\"\n },\n {\n dataField: \"email\",\n text: \"Contact Email\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\",\n classes: \"panel-email-row\",\n formatter: (cellContent, row) => {\n return (\n \n {row.email}\n \n );\n }\n },\n {\n dataField: \"role\",\n text: \"Role\",\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"schools\",\n text: \"Enrolled Schools\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"status\",\n text: \"Status\",\n headerClasses: \"panel-status-row\",\n headerAlign: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n editAdmin(row.id)}\n >\n \n \n showDeleteWarning(row.id)}\n >\n \n \n
    \n );\n }\n }\n ];\n\n const adminsData = admins.map(admin => {\n return {\n id: admin.id,\n fullName: admin.fullName,\n email: admin.email,\n mobile: admin.mobile,\n role: admin.role,\n schools: admin.schools,\n status: admin.status\n };\n });\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n
    \n );\n };\n\n const hideAndRefreshData = async () => {\n setAdmins(await AdminService.getAllFromRemote());\n setCurrentAdmin(null);\n setShowModal(false);\n };\n\n return (\n
    \n
    \n

    \n Administrators\n

    \n \n
    \n\n
    \n setShowProgressAlert(false)}\n dismissible\n >\n \n \n\n setShowFailedAlert(false)}\n dismissible\n >\n {failedResponseMessage}\n \n\n setShowSucceedAlert(false)}\n dismissible\n >\n {succeedResponseMessage}\n \n
    \n\n
    {renderAdmins()}
    \n hideAndRefreshData()}\n admin={currentAdmin}\n schools={schools}\n />\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n
    \n );\n};\n\nexport default AdminPanel;\n","import React, { useState, useEffect } from \"react\";\nimport { Button, Alert, Badge, ListGroup, OverlayTrigger, Tooltip, Spinner } from \"react-bootstrap\";\nimport Steps, { Step } from 'rc-steps';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport CourseService from \"../../../../../services/CourseService\";\nimport ProfileService from \"./../../../../../services/ProfileService\";\nimport ConfirmDeleteModal from \"../../../../widgets/modals/instructor/ConfirmDeleteModal\";\nimport DateUtils from \"./../../../../../utils/DateUtils\";\nimport ReactHtmlParser from \"react-html-parser\";\n\nimport \"./panels.css\";\n\nconst CoursePanel = props => {\n\n const { SearchBar } = Search;\n const { showDrawer, reload } = props;\n\n const [courses, setCourses] = useState(null);\n const [currentCourse, setCurrentCourse] = useState(null);\n\n const [showWarningModal, setShowWarningModal] = useState(false);\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState(\"\");\n const [showSuccess, setShowSuccess] = useState(false);\n const [successMessage, setSuccessMessage] = useState(\"\");\n\n useEffect(() => {\n document.title = \"LimeSpring Portal - Courses\";\n (async () => {\n setCourses(await CourseService.getAllFromRemote());\n })();\n }, [reload]);\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n deleteCourse();\n };\n\n const showDeleteWarning = id => {\n if (!checkIsEditable(id)) { return; }\n setCurrentCourse(\n courses.find(course => {\n return id === course.id;\n })\n );\n setShowWarningModal(true);\n };\n\n const deleteCourse = async () => {\n const succeeded = await CourseService.remove(currentCourse.id);\n if (succeeded) {\n setSuccessMessage(\"Successfuly removed course.\");\n setShowSuccess(true);\n setCourses(await CourseService.getAllFromRemote());\n setCurrentCourse(null);\n } else {\n setErrorMessage(\"Error while trying to remove course. Please try again\");\n setShowError(true);\n }\n };\n\n const edit = id => {\n if (!checkIsEditable(id)) { return; }\n const course = courses.find(c => { return id === c.id; })\n showDrawer(course);\n };\n\n const clone = async id => {\n const course = courses.find(c => { return id === c.id; })\n const success = await CourseService.clone(course);\n if (!success) {\n setErrorMessage(\"Error while trying to clone course. Please try again\");\n setShowError(true);\n } else {\n setSuccessMessage(\"Successfuly cloned course.\");\n setShowSuccess(true);\n }\n setCourses(await CourseService.getAllFromRemote());\n };\n\n const checkIsEditable = (id) => {\n if (!id) { return true; }\n const profile = ProfileService.get();\n if (profile.role === 'Instructor' && courses && courses.length > 0) {\n const course = courses.find(c => c.id === id);\n if (course && course.createdBy !== (profile.firstName + ' ' + profile.lastName)) {\n return false;\n }\n }\n return true;\n }\n\n const renderCourses = () => {\n\n if (!courses) { return
    ; }\n if (!courses) {\n return \"\";\n }\n\n const columns = [\n {\n dataField: \"title\",\n text: \"Title\",\n sort: true,\n headerAlign: \"center\",\n align: \"left\",\n formatter: (cellContent, row) => {\n return
    \n {row.title} \n \n {row.description && row.description !== \"\" ? (\n ReactHtmlParser(row.description)\n ) : (\n
    \n \n None Available\n \n
    \n )}\n \n }\n >\n \n \n
    ;\n }\n },\n {\n dataField: \"schools\",\n text: \"Schools\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.schools && row.schools.length > 0 ? (\n row.schools.map((school, index) => {\n return (\n \n {school.title}\n \n );\n })\n ) : (\n - No School Assigned -\n )}\n
    \n );\n }\n },\n {\n dataField: \"createdBy\",\n text: \"Created By\",\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"units\",\n text: \"Units\",\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"100px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n
    \n {row.units ? row.units.length : 0}\n
    \n );\n }\n },\n {\n dataField: \"status\",\n text: \"\",\n headerClasses: \"panel-status-row-3items\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n\n const isEditable = checkIsEditable(row.id);\n\n return (\n
    \n edit(row.id)}\n title={isEditable ? \"Edit Course\" : \"Editing not allowed (Clone first)\"}\n disabled={!isEditable}\n >\n \n \n clone(row.id)}\n title=\"Clone Course\"\n >\n \n \n showDeleteWarning(row.id)}\n title={isEditable ? \"Remove Course\" : \"Removing not allowed\"}\n disabled={!isEditable}\n >\n {\" \"}\n \n \n
    \n );\n }\n }\n ];\n\n const coursesData = courses.map(course => {\n return {\n id: course.id,\n description: course.description,\n title: course.title,\n units: course.units,\n status: course.status,\n lastUpdated: DateUtils.getCurrentDateTime(course.updatedAt),\n createdBy: course.createdBy,\n schools: course.schools\n };\n });\n\n const expandRow = {\n showExpandColumn: true,\n expandByColumnOnly: true,\n renderer: row => (\n
    \n\n
    \n Units Included:\n \n {row.units && row.units.length > 0 ? (\n \n {\n row.units.map(unit => {\n return } title={unit.title} status=\"finish\" />\n })\n }\n \n ) : (\n \n {\" \"}\n None Available\n \n )}\n \n
    \n
    \n )\n };\n\n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n };\n\n return (\n
    \n setShowError(false)}\n >\n {errorMessage}\n \n\n setShowSuccess(false)}\n >\n {successMessage}\n \n\n
    \n

    \n Courses\n

    \n \n
    \n\n
    {renderCourses()}
    \n\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n
    \n );\n};\n\nexport default CoursePanel;\n","import React from 'react';\nimport * as Icons from 'react-bootstrap-icons';\nimport './toolbar.css';\n\nconst ToolbarItem = (props) => {\n\n const {name} = props;\n\n const onDragStart = (e) => {\n e.target.style.cursor = 'dragging';\n e.dataTransfer.setData(\"type\", name);\n }\n\n const displayIcon = () => {\n switch(name){\n case 'unit':\n return ;\n case 'ancillary':\n return ;\n case 'lecture':\n return ;\n case 'quiz':\n return ;\n case 'exam':\n return ;\n case 'workbook':\n return ;\n }\n }\n\n const displayCategoryName = () => {\n switch(name){\n case 'unit':\n return 'Units';\n case 'ancillary':\n return 'Content';\n case 'lecture':\n return 'Lectures';\n case 'quiz':\n return 'Quizzes';\n case 'exam':\n return 'Exams'; \n case 'workbook':\n return 'Workbooks'; \n }\n }\n\n return ( \n
    onDragStart(e)} className=\"toolbar-item\">\n {displayIcon()}\n {displayCategoryName()}\n
    \n );\n}\n\n \nexport default ToolbarItem;","import React from 'react';\nimport * as Icons from 'react-bootstrap-icons';\nimport './toolbar.css';\n\nconst ToolbarButton = () => {\n return ( \n
    \n \n My Library\n
    \n );\n}\n \nexport default ToolbarButton;","import React from 'react';\nimport * as Icons from 'react-bootstrap-icons';\nimport {Form} from 'react-bootstrap';\nimport ToolbarItem from './ToolbarItem';\nimport './toolbar.css';\nimport ToolbarButton from './ToolbarButton';\nimport ToolbarUpload from './ToolbarUpload';\nimport {Button} from 'react-bootstrap';\n\nconst Toolbar = () => {\n return ( \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n { /* */}\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n );\n}\n \nexport default Toolbar;","export default {\n height: \"100%\",\n width: \"100%\",\n autoResize: true,\n physics: { enabled: false },\n nodes: {\n fixed: false,\n borderWidth: 3,\n borderWidthSelected: 7,\n shadow: false,\n size: 60,\n shape: \"image\",\n shapeProperties: {\n useBorderWithImage: true\n },\n font: { color: \"#5b676f\", size: 24, face: \"Bitter\" }\n },\n edges: {\n smooth: false,\n dashes: false,\n length: 400,\n shadow: true\n },\n layout: {\n randomSeed: 3,\n improvedLayout: true,\n hierarchical: { enabled: false }\n },\n interaction: {\n multiselect: false\n },\n manipulation: {\n enabled: false,\n initiallyActive: false,\n\n addNode: function(nodeData, callback) {\n //onNodeAdd(nodeData, callback);\n },\n editNode: function(nodeData, callback) {\n //onNodeEdit(nodeData, callback);\n },\n deleteNode: function(data, callback) {\n callback(data)\n },\n addEdge: function(data, callback) {\n if(data.from === data.to) { return; }\n callback(data);\n },\n deleteEdge: function(edgeData, callback) {\n //onEdgeRemoved(edgeData, callback);\n }\n }\n};\n","import React from 'react';\nimport {Button} from 'react-bootstrap';\nimport * as Icons from 'react-bootstrap-icons';\nimport './lsnetwork.css';\n\nconst LSNodeDecorator = (props) => {\n\n const {id, unit, callback} = props;\n\n return ( \n
    \n \n \n \n
    \n );\n}\n \nexport default LSNodeDecorator;","export default __webpack_public_path__ + \"static/media/default_exam_thumbnail.77962cb9.png\";","export default __webpack_public_path__ + \"static/media/default_workbook_thumbnail.5f5a716c.png\";","import LocalStorageService from \"./LocalStorageService\";\n\nexport default {\n\n getAll: () => {\n return LocalStorageService.get(\"plots\");\n },\n\n get: id => {\n return LocalStorageService.get(\"plots\").find(plot => plot._id === id);\n },\n\n getByCourseId: id => {\n return LocalStorageService.get(\"plots\").find(plot => plot.courseId === id); \n },\n\n savePlotUpdate: (id, plot) => {\n \n },\n\n update: id => {\n \n }\n};\n","import React, {useEffect, useState} from 'react';\nimport {Modal, Alert, Button, Spinner} from \"react-bootstrap\";\nimport * as Icons from 'react-bootstrap-icons';\nimport StringUtils from './../../../../utils/StringUtils';\nimport LectureService from './../../../../services/LectureService';\nimport MultiSelectPicker from \"../../pickers/MultiSelectPicker\";\nimport './modal.css';\n\n\nconst LectureModal = (props) => {\n\n const {show, onHide} = props;\n\n const [lectures, setLectures] = useState(null);\n\n useEffect(() => {\n if(!lectures) {\n setLectures(LectureService.getAll());\n }\n }, [lectures]);\n\n\n const showLectureSelector = () => {\n if(lectures) {\n return setLectures(selectedLectures)}\n context=\"lectures\"\n contextCallback={() => lectures}\n />\n } else {\n return '';\n }\n }\n\n return ( \n \n \n \n

    {`Select Lecture(s)`}

    \n
    \n
    \n \n\n
    \n
    \n
    Lecture Pool:
    \n { showLectureSelector() }\n
    \n
    \n\n
    \n \n \n \n \n );\n}\n \nexport default LectureModal;","import React, {useState, useEffect, useRef} from 'react';\nimport { Network, Node, Edge } from 'react-vis-network';\nimport NetworkConfig from './../../../config/NetworkConfig';\nimport * as Icons from 'react-bootstrap-icons';\nimport LSNodeDecorator from './LSNodeDecorator';\nimport videoThumbnail from './../../../images/default_video_thumbnail.png';\nimport examThumbnail from './../../../images/default_exam_thumbnail.png';\nimport workbookThumbnail from './../../../images/default_workbook_thumbnail.png';\nimport PlotService from './../../../services/PlotService';\nimport {stringify} from 'flatted/esm';\nimport './lsnetwork.css'; \nimport LectureModal from '../modals/instructor/LectureModal';\n\nexport default class LSNetwork extends React.Component{\n\n constructor(props){\n super(props);\n this.visNetwork = React.createRef();\n this.state = {...props, show: false}; \n }\n\n getLectureIcon = () => {\n return Icons.CollectionPlay;\n }\n\n getExamIcon = () => {\n return Icons.FileCheck;\n }\n\n getWorkbookIcon = () => {\n return Icons.FileEarmarkText;\n }\n\n addNode = (type) => {\n this.setState({show: true});\n }\n\n updateNodePositions = () => {\n //DS: [{\"lecture1\":\"1\",\"lecture2\":\"2\",\"workbook\":\"3\",\"exam\":\"4\"},{\"x\":-390,\"y\":32},{\"x\":-30,\"y\":-109},{\"x\":72,\"y\":20},{\"x\":212,\"y\":130}]\n const positions = this.visNetwork.current.network.getPositions();\n console.log(`The network nodes are: ${stringify(positions)}`);\n }\n\n clickedNode = (id) => {\n this.visNetwork.current.network.addEdgeMode();\n }\n\n clicked = (properties) => {\n console.log(`on click node: ${JSON.stringify(properties.pointer.canvas)}`);\n }\n\n getNodeIcon = (type) => {\n if (type === 'LECTURE'){ return this.getLectureIcon() };\n if (type === 'BOOKEXAM'){ return this.getExamIcon() };\n if (type === 'WORKBOOK'){ return this.getWorkbookIcon() };\n }\n\n getNodeImage = (type) => {\n if (type === 'LECTURE'){ return videoThumbnail };\n if (type === 'BOOKEXAM'){ return examThumbnail };\n if (type === 'WORKBOOK'){ return workbookThumbnail };\n }\n \n processEvent = (id, unitid, event) => {\n\n if(event === 'connect') {\n this.visNetwork.current.network.addEdgeMode();\n }\n\n if(event === 'remove') {\n this.visNetwork.current.network.selectNodes([id]);\n this.visNetwork.current.network.deleteSelected();\n\n //spread operator to create a mutable copy of state!\n let _plot = {...this.state.plot};\n const targetUnit = _plot.units.find(unit => unit._id === unitid);\n\n //remove node\n targetUnit.nodes = targetUnit.nodes.filter(node => node.id !== id);\n //remove any edges related to that node\n targetUnit.edges = targetUnit.edges.filter(edge => edge.from !== id && edge.to !== id);\n _plot.units[0] = targetUnit;\n\n this.setState({plot: _plot});\n }\n }\n\n renderNodes = () => {\n const units = this.state.plot.units;\n const nodes = [];\n return nodes.concat(units.map(unit => {\n const nodes = unit.nodes;\n if(nodes.length > 0){\n return nodes.map(node => {\n return this.processEvent(id, unit, event) }\n unit={unit._id}\n color={{border: unit.color, highlight: {border: unit.color}}}\n />\n });\n }\n }));\n }\n\n renderEdges = () => {\n const units = this.state.plot.units;\n const edges = [];\n return edges.concat(units.map(unit => {\n const edges = unit.edges;\n if(edges.length > 0){\n return edges.map(edge => {\n return \n });\n }\n }));\n }\n\n showNetwork = () => {\n if(!this.state) { return '';}\n return
    \n this.updateNodePositions()} onDoubleClick={(e) => this.clickedNode('someId')} onClick={(properties) => this.clicked(properties)}>\n {this.renderNodes()}\n {this.renderEdges()}\n \n {this.showModal()}\n
    ;\n }\n\n addLectures = (lectures) => {\n //let newNode = {id: 'lecture5', label: 'Lecture 5', group: 'unit2'};\n //setPlot({nodes: [...plot.nodes, newNode]});\n if(!lectures || lectures.length === 0) { return ''; }\n \n let nodes = lectures.map((lecture) => {\n return {id: lecture._id, label: lecture.title };\n });\n\n this.setState({show: false, plot: { nodes: [...this.state.plot.units[0].nodes, nodes] }});\n }\n\n showModal = () => {\n return this.addLectures(lectures)} />\n }\n\n render(){\n return ( \n this.showNetwork() \n )\n } \n };","import React, {useState, useEffect, useRef} from 'react';\nimport Toolbar from '../../../widgets/toolbar/Toolbar';\nimport {Tabs, Tab} from 'react-bootstrap';\nimport LSNetwork from '../../../widgets/network/LSNetwork';\nimport CourseService from './../../../../services/CourseService';\nimport PlotService from './../../../../services/PlotService';\nimport './coursebuilderview.css';\n\nconst CourseBuilderView = (props) => {\n\n const { id } = props; \n\n const lsNetwork = useRef(null);\n\n const [course, setCourse] = useState(null);\n const [plot, setPlot] = useState(null);\n\n useEffect(() => {\n if(!course) {\n setCourse(CourseService.get(id));\n setPlot(PlotService.getByCourseId(id));\n }\n }, [plot]);\n\n const onDragOver = (e) => {\n e.preventDefault();\n document.getElementById('network-canvas-holder').classList.add('on-drag-over');\n }\n\n const onDragLeave = (e) => {\n e.preventDefault();\n document.getElementById('network-canvas-holder').classList.remove('on-drag-over');\n }\n\n const onDrop = (e) => {\n document.getElementById('network-canvas-holder').classList.remove('on-drag-over');\n let type = e.dataTransfer.getData(\"type\");\n lsNetwork.current.addNode(type);\n }\n\n const renderNetwork = () => {\n if( !id || !plot || !course) { return 'No Course Information could be retrieved. Please try again.'; }\n return
    onDragOver(e)} onDrop={(e) => onDrop(e)} onDragLeave={(e) => onDragLeave(e)}>\n \n
    \n }\n\n return ( \n
    \n
    \n { renderNetwork() }\n
    \n \n \n \n \n \n Units\n \n \n Courses\n \n \n \n
    \n
    \n
    \n );\n}\n \nexport default CourseBuilderView;","import LocalStorageService from \"./LocalStorageService\";\nimport AttemptService from \"./AttemptService\";\nimport ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport ResponseUtil from \"../utils/ResponseUtil\";\n\nexport default {\n getAll: () => {\n return LocalStorageService.get(\"reports\") || [];\n },\n\n getAllFromRemote: async () => {\n if (Config.mockAPI) { return []; }\n const response = await new ApiService().get(ApiPath.GET_REPORTS_ENDPOINT);\n if(response && response.status === 200) { \n const { reports } = response.data;\n return reports;\n } \n return [];\n },\n\n get: id => {\n return LocalStorageService.get(\"reports\").find(report => report._id === id);\n },\n\n getFromServer: async (id) => {\n if (Config.mockAPI) { return true; }\n const response = await new ApiService().get(ApiPath.GET_REPORT_ENDPOINT.replace(':id', id));\n if(response && response.status === 200) { \n const { report } = response.data;\n return report;\n } \n return null;\n },\n\n getClassReportFromServer: async id => {\n if (Config.mockAPI) { return true; }\n const response = await new ApiService().get(ApiPath.GET_REPORT_BY_CLASSID_ENDPOINT.replace(':id', id));\n if(response && response.status === 200) { \n const { report } = response.data;\n return report;\n } \n return null;\n },\n\n getClassReport: async id => {\n const reports = LocalStorageService.get(\"reports\");\n return reports.find(report => {\n return report.class === id;\n });\n },\n\n getClassReportByStudentId: async (classId, studentId) => {\n if (Config.mockAPI) { return true; }\n const response = await new ApiService().get(ApiPath.GET_REPORT_BY_CLASSID_STUDENTID_ENDPOINT.replace(':id', classId).replace(':studentId', studentId));\n if(response && response.status === 200) { \n const { report } = response.data;\n return report;\n } \n return null;\n },\n\n getReportHistoryByStudentId: id => {\n const reports = LocalStorageService.get(\"reports\");\n let studentsReports = [];\n reports.forEach(report => {\n studentsReports = studentsReports.concat(report.students);\n });\n const studentReports = studentsReports.filter(studentReport => {\n return studentReport._id === id;\n });\n return studentReports;\n },\n\n getQuizReportByStudentId: async (classReport, studentId, quizId) => {\n\n const studentReport = classReport.studentLogs.find(studentReport => {\n return studentReport.userId === studentId;\n });\n \n let finalReport = studentReport.assessments.find(assessment => {\n return assessment._id === quizId;\n });\n\n if(!finalReport) return []\n\n const attemptIds = finalReport.attempts;\n //bring from server because it can be huge!\n const attempts = await AttemptService.getByIds(attemptIds);\n finalReport.attempts = attempts;\n\n if (studentReport) {\n finalReport.studentLogs = studentReport.studentLogs;\n } \n\n return finalReport;\n }\n};\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\n\nexport default {\n\n\n getChartByClassFromRemote: async (id) => {\n const response = await new ApiService().get(ApiPath.GET_CHART_CLASS_ENDPOINT.replace(':id', id));\n if(response && response.status === 200) { \n const { kpis } = response.data;\n return kpis;\n } \n return null;\n },\n\n getChartByClassAndStudentFromRemote: async (classId, studentId) => {\n const response = await new ApiService().get(ApiPath.GET_CHART_CLASS_STUDENT_ENDPOINT.replace(':classId', classId).replace(':studentId', studentId));\n if(response && response.status === 200) { \n const { kpis } = response.data;\n return kpis;\n } \n return null;\n }\n \n}","import LimespringUtils from \"./../utils/LimespringUtils\";\n\nexport default {\n\n /*************************************************** \n * Student Report Algorithm\n * 1. Find each student report\n * 2. Find all unit assessments (including quizzes)\n ****************************************************/\n getStudentsReport: (unit, students, report) => {\n if(!unit || !students || !report) return [];\n\n //get unit quizzes first!\n let unitQuizzes = []\n let unitLectures = []\n\n if(unit.lectures && unit.lectures.length > 0){\n const lectures = unit.lectures;\n if(lectures && lectures.length > 0){\n unitLectures = lectures;\n lectures.forEach(lecture => {\n const quizzes = lecture.assessments;\n if(quizzes && quizzes.length > 0){\n unitQuizzes = unitQuizzes.concat(quizzes);\n } \n });\n }\n }\n\n const studentsReport = students.map(student => {\n\n const studentReport = report.studentLogs.find(studentLog => {\n return studentLog.userId === student._id;\n });\n\n if(!studentReport) return null;\n \n const studentBookexamReport = studentReport.assessments.find(\n assessment => {\n return assessment.type === \"BOOKEXAM\" && assessment.status === 'TAKEN' && unit.assessments.find(ua => ua._id === assessment._id) != null;\n }\n );\n \n const studentWorkBookReport = studentReport.assessments.find(\n assessment => {\n return assessment.type === \"WORKBOOK\" && assessment.status === 'TAKEN' && unit.assessments.find(ua => ua._id === assessment._id) != null;\n }\n );\n\n const studentAssignmentReport = studentReport.assessments.find(\n assessment => {\n return assessment.type === \"ASSIGNMENT\" && unit.assessments.find(ua => ua._id === assessment._id) != null;\n }\n );\n\n const studentPlacementExamReport = studentReport.assessments.find(\n assessment => {\n return assessment.type === \"PLACEMENT_EXAM\" && assessment.status === 'TAKEN' && unit.assessments.find(ua => ua._id === assessment._id) != null;\n }\n );\n\n const studentAllQuizReports = studentReport.assessments.filter(\n assessment => {\n return assessment.type === \"QUIZ\" && assessment.status === 'TAKEN' && unitQuizzes.find(uq => uq._id === assessment._id) != null;\n }\n );\n\n const studentTakenQuizReports = studentAllQuizReports.filter(assessment => {\n return assessment.status === \"TAKEN\";\n });\n \n const studentTotalScoreAwarded = studentTakenQuizReports.map(studentTakenQuizReport => {\n return studentTakenQuizReport.bestScore; \n }).reduce((a, b) => a + b, 0);\n\n const studentScore = (studentTotalScoreAwarded / unitQuizzes.length).toFixed(1);\n\n let allQuizzesInUnit = [];\n unit.lectures.forEach(ul => allQuizzesInUnit = allQuizzesInUnit.concat(ul.assessments.filter(a => a.type === \"QUIZ\")));\n\n const quizHistory = studentAllQuizReports.map(studentQuizReport => {\n \n const quiz = allQuizzesInUnit.find(q => q._id === studentQuizReport._id);\n \n studentQuizReport.quiz = quiz;\n \n const lecture = unitLectures.find(unitLecture => {\n return unitLecture.assessments.find(assessment => {\n return assessment._id === quiz._id;\n });\n });\n\n //TODO consider all attempts\n studentQuizReport.stars = (studentQuizReport.bestScore * 5 / 100).toFixed(1)\n \n if (lecture) {\n studentQuizReport.lectureTitle = lecture.title;\n }\n \n return studentQuizReport;\n });\n\n //show undone quizzes!\n allQuizzesInUnit.forEach(quizInUnit => {\n const foundQuiz = studentAllQuizReports.find(studentQuizReport => quizInUnit._id === studentQuizReport._id)\n if(!foundQuiz){\n const lecture = unitLectures.find(unitLecture => {\n return unitLecture.assessments.find(assessment => {\n return assessment._id === quizInUnit._id;\n });\n });\n\n quizHistory.push({\n quiz: quizInUnit,\n stars: 0,\n lectureTitle: lecture ? lecture.title : 'N/A',\n attempts: [],\n bestScore: 0,\n bestTimeTrigger: 0,\n status: \"PENDING\",\n type: \"QUIZ\",\n _id: quizInUnit._id\n });\n }\n });\n\n let quizAttemptIds = [];\n if(studentTakenQuizReports && studentTakenQuizReports.length > 0){\n studentTakenQuizReports.forEach(str => {\n const _attempts = str.attempts;\n if(_attempts && _attempts.length > 0){\n quizAttemptIds = quizAttemptIds.concat(_attempts)\n } \n });\n }\n\n return {\n id: student._id,\n fullName: LimespringUtils.getUserFullName(student),\n examId: studentBookexamReport ? studentBookexamReport._id : '',\n examAttemptId: studentBookexamReport ? studentBookexamReport.attempts : '',\n placementExamId: studentPlacementExamReport ? studentPlacementExamReport._id : '',\n placementExamAttemptId: studentPlacementExamReport ? studentPlacementExamReport.attempts : '',\n placementExamScore: studentPlacementExamReport ? studentPlacementExamReport.bestScore.toFixed(1) : 0,\n examScore: studentBookexamReport ? studentBookexamReport.bestScore.toFixed(1) : 0,\n workbookId: studentWorkBookReport ? studentWorkBookReport._id : '',\n workbookAttemptId:studentWorkBookReport ? studentWorkBookReport.attempts : '',\n workbookScore: studentWorkBookReport ? studentWorkBookReport.bestScore.toFixed(1) : 0,\n assignmentAttemptId: studentAssignmentReport ? studentAssignmentReport._id : '',\n quizzesCompleted:studentTakenQuizReports.length + '/' + unitQuizzes.length,\n quizAttemptIds: quizAttemptIds,\n averageStars: studentScore * 5 / 100,\n history: quizHistory,\n overallPerformance: studentReport.overallPerformance || \"-\",\n overallEffort: studentReport.overallEffort || \"-\",\n confidence: \"-\",\n assignmentScore:\"-\"\n };\n });\n \n return studentsReport;\n }\n };","import React, { useState } from \"react\";\nimport { useEffect } from \"react\";\nimport ReportUtils from '../../../../utils/ReportUtils';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport \"./../reports.css\";\n\nconst StudentsPerformanceTable = props => {\n\n const { report, units, students, onStudentClicked} = props;\n\n const [unitSelected, setUnitSelected] = useState(null);\n\n useEffect(() => {\n if(report && units && units.length > 0){\n setUnitSelected(units[0]);\n };\n }, [report, students]);\n\n \n\n const populateSelectData = () => {\n return units.map((u) => {\n return (\n \n );\n }); \n };\n\n const selectHandler = (e) => {\n const unitId = e.target.value;\n setUnitSelected(units.find(u => u._id === unitId));\n }\n\n const getColumns = () => {\n const columns = [\n {\n dataField: \"fullName\",\n text: \"Student Name\",\n sort: true,\n sortFunc: (a, b, order, dataField) => {\n let _a_lastname = a.trim().split(\" \")[1] || \"\";\n let _b_lastname = b.trim().split(\" \")[1] || \"\";\n if(order === 'asc'){\n if(_a_lastname > _b_lastname) { return 1; }\n } else if (order === 'desc'){\n if(_a_lastname < _b_lastname) { return -1; }\n } \n return 0;\n },\n headerAlign: \"center\",\n align: \"center\",\n headerStyle: (column, colIndex) => {\n return { width: \"200px\", textAlign: \"center\" };\n },\n formatter: (cellContent, row) => {\n return (\n onStudentClicked(row.id)}>\n {row.fullName}\n \n );\n }\n }];\n\n\n if (unitSelected && unitSelected.assessments) {\n if (unitSelected.assessments.some(a => a.type === \"PLACEMENT_EXAM\")) {\n columns.push({\n dataField: \"placementexam\",\n text: \"Placement Exam\",\n headerAlign: \"center\",\n align: \"center\"\n });\n }\n }\n columns.push({\n dataField: \"homework\",\n text: \"Homework\",\n headerAlign: \"center\",\n align: \"center\"\n });\n \n \n\n if (unitSelected && unitSelected.assessments) {\n if (unitSelected.assessments.some(a => a.type === \"WORKBOOK\")) {\n columns.push({\n dataField: \"workbook\",\n text: \"Workbook\",\n headerAlign: \"center\",\n align: \"center\"\n });\n }\n if (unitSelected.assessments.some(a => a.type === \"BOOKEXAM\")) {\n columns.push({\n dataField: \"exam\",\n text: \"Exam\",\n headerAlign: \"center\",\n align: \"center\"\n });\n }\n \n }\n return columns;\n\n }\n\n const renderStudentsTable = () => {\n\n if (!report && !unitSelected && !students) return <>;\n\n const columns = getColumns();\n\n const fullReports = ReportUtils.getStudentsReport(unitSelected, students, report);\n\n const studentData = fullReports.map(r => {\n return {\n id: r.id,\n fullName: r.fullName,\n homework: r.quizzesCompleted,\n workbook: r.workbookScore,\n exam: r.examScore,\n placementexam: r.placementExamScore,\n performance: r.overallPerformance,\n effort: r.overallEffort,\n confidence: r.confidence\n };\n });\n\n return (\n \n {toolkitprops => (\n
    \n \n
    \n )}\n \n );\n }\n\n\n return (\n
    \n
    \n \n
    \n
    \n {renderStudentsTable()}\n
    \n
    \n );\n};\n\nexport default StudentsPerformanceTable;\n","import React, {useEffect} from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport options from './../configuration/students_units_chart_config.json';\n\nconst StudentsUnitsCompletedChart = (props) => {\n\n const {report, units, students} = props;\n\n useEffect(()=>{}, [report, units]);\n\n const COLUMN_BACKGROUND_COLOR = 'rgba(119,204,225,1)';\n const COLUMN_BORDER_COLOR = 'rgba(119,204,225,1)';\n\n const fetchData = () => {\n if(!report || !units || units.length === 0) return { labels: [], datasets: [] };\n\n const buildDataSets = () => {\n const dataSet = {\n label: '% of Students with Module Completed',\n data: [],\n backgroundColor: [],\n borderColor: [],\n borderWidth: 1\n };\n\n //populate dataset (respect units order)!\n const studentsReports = report.studentLogs;\n if(!studentsReports || studentsReports.length === 0) return {};\n if(!students || students.length === 0) return {};\n \n for(const u of units) {\n let completedTotal = 0;\n studentsReports.forEach(studentReport => {\n const reportUnits = studentReport.units;\n if(!reportUnits) return;\n const reportUnit = reportUnits.find(ru => ru._id === u._id);\n if(!reportUnit) return;\n if(reportUnit.status === 'COMPLETED') completedTotal++;\n });\n\n dataSet.data.push((completedTotal/students.length) * 100);\n dataSet.backgroundColor.push(COLUMN_BACKGROUND_COLOR);\n dataSet.borderColor.push(COLUMN_BORDER_COLOR);\n };\n\n return [dataSet]; //only 1 dataset expected!\n }\n\n return {\n labels: units.map(u => u.title) || [], \n datasets: buildDataSets()\n };\n }\n\n return (\n
    \n \n
    \n );\n}\n \nexport default StudentsUnitsCompletedChart;","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\n\nexport default {\n\n getByClassAndStudentFromRemote: async (classId, studentId) => {\n const response = await new ApiService().get(ApiPath.GET_KPI_CLASS_STUDENT_ENDPOINT.replace(':classId', classId).replace(':studentId', studentId));\n if(response && response.status === 200) { \n const { kpi } = response.data;\n return kpi;\n } \n return null;\n },\n}","import React, {useState} from 'react';\nimport MathDisplayField from './MathDisplayField';\n\nconst ReportDynamicMathField = (props) => {\n \n const {showEditAnswerField=false, dynamic=false, selectedAnswer='', onBlur, onSubmit} = props;\n\n const [inputValue, setInputValue] = useState('');\n\n const onInputBlur = () => {\n onBlur();\n }\n\n const checkEnterKeyPressed = (e) => {\n if(e.which === 13){\n e.preventDefault();\n onSubmit(inputValue);\n }\n }\n\n return (\n <>\n {\n showEditAnswerField && dynamic ? \n setInputValue(e.target.value)}\n onBlur={() => onInputBlur()}\n onKeyPress={(e) => checkEnterKeyPressed(e)}/>\n : \n \n }\n \n );\n}\n \nexport default ReportDynamicMathField;","import React from \"react\";\nimport { OverlayTrigger, Popover } from \"react-bootstrap\";\nimport MathDisplayField from './../math/MathDisplayField';\n\nconst ReportAssessmentTooltip = props => {\n const { index, questionid, statement, multimedia } = props;\n\n return (\n \n Question:\n \n \n {\n multimedia && multimedia !== '' \n ? \n \n : \n <>\n }\n \n \n }\n >\n {index + 1}.\n \n );\n};\n\nexport default ReportAssessmentTooltip;\n","import React, {useState} from 'react';\nimport * as Icons from \"react-bootstrap-icons\";\nimport { Button } from \"react-bootstrap\";\nimport ReportDynamicMathField from './../math/ReportDynamicMathField';\nimport ReportAssessmentTooltip from \"./../tooltips/ReportAssessmentTooltip\";\n\nconst QuestionAttemptRow = (props) => {\n\n const {question, index, attempts, answerId, selectedAnswer, correctChoicesDescription, hintViewed, explanationViewed, selectedIsCorrect, onModifyAttempt} = props;\n\n const [showEditAnswerField, setShowEditAnswerField] = useState(false);\n\n const onModifyAttemptCorrect = () => {\n onModifyAttempt(answerId);\n setShowEditAnswerField(false);\n }\n\n return (\n \n \n \n \n \n {attempts}\n \n \n \n \n {correctChoicesDescription}\n {hintViewed ? \"YES\" : \"NO\"}\n {explanationViewed ? \"YES\" : \"NO\"}\n \n {selectedIsCorrect ? (\n \n ) : (\n \n )}\n {selectedIsCorrect ? <> : }\n \n \n );\n}\n \nexport default QuestionAttemptRow;","export default {\n convertFromMinutesToMillis: (minutes) => {\n let millis = 0;\n if(minutes > 0){\n millis = minutes * 60 * 1000;\n }\n return millis;\n },\n\n convertFromMillisToHours: (millis) => {\n let hours = 0;\n if(millis > 0){\n hours = ((millis / 1000) / 60) / 60;\n }\n return hours.toFixed(2);\n },\n\n convertFromMillisToMinutes: (millis) => {\n let minutes = 0;\n if(millis > 0){\n minutes = (millis / 1000) / 60;\n }\n return minutes.toFixed(2);\n },\n\n convertFromMillisToSeconds: (millis) => {\n let seconds = 0;\n if(millis > 0){\n seconds = ((millis / 1000) / 60 ) * 60;\n }\n return seconds.toFixed(2);\n }\n}","import React, { useState, useEffect } from \"react\";\nimport Modal from \"react-bootstrap/Modal\";\nimport { Table, Form, Button, Badge } from \"react-bootstrap\";\nimport \"./modal.css\";\nimport QuestionService from \"../../../../services/QuestionService\";\nimport ReportService from \"../../../../services/ReportService\";\nimport StudentService from \"../../../../services/StudentService\";\nimport AttemptService from \"../../../../services/AttemptService\";\nimport MathDisplayField from './../../math/MathDisplayField';\nimport QuestionAttemptRow from './../../reports/QuestionAttemptRow';\nimport * as Icons from \"react-bootstrap-icons\";\nimport LimespringUtils from \"../../../../utils/LimespringUtils\";\nimport TimeUtils from \"../../../../utils/TimeUtils\";\nimport DateUtils from \"../../../../utils/DateUtils\";\n\nconst QuestionAssessmentsModal = props => {\n const { show, onHide, quiz, studentId, classId, remoteReport, onAttemptRemoved, onAttemptModified } = props;\n\n const [report, setReport] = useState(null);\n const [student, setStudent] = useState(null);\n const [questions, setQuestions] = useState([]);\n const [assessmentType, setAssessmentType] = useState('');\n const [currentAttempt, setCurrentAttempt] = useState(null);\n\n useEffect(() => {\n if (quiz && studentId) { \n getReport()\n }\n \n }, [quiz, studentId]);\n\n useEffect(() => {\n if (currentAttempt) {\n setTimeout(() => createStudentAnswersTable(), 0);\n }\n }, [currentAttempt]);\n\n useEffect(() => {\n if (report && report.attempts && report.attempts.length > 0 && questions.length > 0) {\n const attemptsSorted = [...report.attempts].sort((a, b) =>\n new Date(a.submitDate) - new Date(b.submitDate)\n );\n \n const latestAttempt = attemptsSorted[attemptsSorted.length - 1];\n setCurrentAttempt(latestAttempt);\n }\n }, [report, questions]);\n \n \n\n const getReport = async() => { \n const rep = await ReportService.getQuizReportByStudentId(remoteReport, studentId, quiz._id);\n if (!rep.studentLogs) {\n const rep1 = await ReportService.getClassReportByStudentId(classId, studentId);\n rep.studentLogs = rep1.studentLogs;\n }\n let all_questions = [];\n if(quiz.sets && quiz.sets.length > 0){\n quiz.sets.forEach(s => { \n all_questions = all_questions.concat(s.questions);\n all_questions.push(s.parentId);\n });\n }\n quiz.questions.forEach(q => {\n if(q.subtype === \"STEPS\" && q.steps && q.steps.length > 0){\n all_questions = all_questions.concat(q.steps)\n }\n });\n if(quiz.type !== 'QUIZ'){\n all_questions = all_questions.concat(quiz.questions.map(q => {return q._id}));\n } else {\n all_questions = all_questions.concat(quiz.questions);\n }\n \n let _questions = await QuestionService.getFromRemote(all_questions);\n setStudent(await StudentService.getFromRemote(studentId));\n setAssessmentType(rep.type);\n setQuestions(_questions);\n setReport(rep);\n }\n\n const reset = () => {\n setReport(null);\n setStudent(null);\n setQuestions([]);\n setAssessmentType('');\n setCurrentAttempt(null);\n }\n\n const createQuestionRows = () => {\n if (!quiz || !currentAttempt) {\n return (\n \n \n No Data Available\n \n \n );\n };\n\n if (currentAttempt.answers && currentAttempt.answers.length > 0) {\n\n return currentAttempt.answers.map((answerInfo, index) => {\n let selectedAnswer = \"\";\n let selectedIsCorrect = false;\n let attempts = 0;\n let explanationViewed = false;\n let hintViewed = false;\n\n attempts = answerInfo.attempts.length;\n const question = questions.find(q => q._id === answerInfo.questionId);\n\n //ignore step questions parent!\n if(!question || question.subtype === \"STEPS\") return <>;\n\n const selectedChoices = question.choices.filter(choice => {\n return answerInfo.attempts[\n answerInfo.attempts.length - 1\n ].selectedChoiceIds.find(selectedChoiceId => {\n return choice._id === selectedChoiceId;\n });\n });\n\n if (selectedChoices && selectedChoices.length > 0) {\n selectedAnswer = selectedChoices\n .map(selectedChoice => {\n selectedIsCorrect = selectedChoice.isCorrect;\n return selectedChoice.description;\n })\n .reduce((prev, curr) => {\n return prev + \", \" + curr;\n });\n }\n\n if(answerInfo.attempts && answerInfo.attempts.length > 0) {\n explanationViewed = answerInfo.attempts[answerInfo.attempts.length-1].viewExplanation;\n hintViewed = answerInfo.attempts[answerInfo.attempts.length-1].viewHint;\n attempts = answerInfo.attempts[answerInfo.attempts.length-1].numberOfAttempts;\n selectedIsCorrect = answerInfo.attempts[answerInfo.attempts.length-1].isCorrect;\n if(selectedAnswer === \"\"){\n selectedAnswer = answerInfo.attempts[answerInfo.attempts.length-1].textInputChoice;\n }\n }\n\n const correctChoices = question.choices.filter(choice => {\n return choice.isCorrect === true;\n });\n \n const correctChoicesDescription = correctChoices.map(correctChoice => {\n return (\n \n \n \n );\n })//.reduce((prev, curr) => [prev, \", \", curr]);\n\n return (\n modifyAttempt(answerId)}/>\n );\n });\n }\n };\n\n const createStudentAnswersTable = () => {\n if (!currentAttempt) {\n return (\n \n \n Loading Attempt Data...\n \n \n );\n }\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {createQuestionRows()}\n
    Question NumberAttemptsGiven Answer(s)Correct Answer(s)Hint ViewedExplanation ViewedStatus
    \n );\n };\n\n const populateAttempts = () => {\n if(!report || !report.attempts || report.attempts.length === 0 || !questions || questions.length === 0) return \"\";\n //sort attempts\n const attempts = report.attempts;\n attempts.sort((a,b) => (b.submitDate > a.submitDate) ? 1 : ((a.submitDate > b.submitDate) ? -1 : 0))\n\n return attempts.map((attempt, index) => {\n return (\n \n );\n })\n }\n\n const removeAttempt = async (user, ids) => {\n onAttemptRemoved(user._id, ids, assessmentType); \n }\n\n const modifyAttempt = async (answerId) => {\n if(currentAttempt) {\n \n //get the answer and modify it!\n const answer = currentAttempt.answers.find(a => a._id === answerId);\n if(answer){\n const correctChoiceIds = answer.correctChoiceIds;\n //get last attempt and modify it!\n const attempt = answer.attempts[answer.attempts.length - 1];\n if(attempt){\n attempt.isCorrect = true;\n attempt.selectedChoiceIds = correctChoiceIds;\n }\n \n await AttemptService.update(currentAttempt);\n }\n \n await getReport();\n }\n }\n\n const resetAndHide = () => {\n reset();\n setTimeout(() => getReport(), 0);\n onHide(report);\n }\n\n const showTime = (timeInMillis) => {\n if(!timeInMillis || timeInMillis === 0) return 0;\n const timeInSecs = TimeUtils.convertFromMillisToSeconds(timeInMillis);\n if(timeInSecs < 60) return `${timeInSecs} secs.`;\n if(timeInSecs >=60 && timeInSecs <= 3600) return `${TimeUtils.convertFromMillisToMinutes(timeInMillis)} mins.`;\n if(timeInSecs > 3600) return `${TimeUtils.convertFromMillisToHours(timeInMillis)} hrs.`;\n }\n\n const populateTimeTrigger = () => {\n if(currentAttempt && currentAttempt.assessmentType !== 'BOOKEXAM' && currentAttempt.assessmentType !== 'WORKBOOK'){ \n return (<>\n Time to show: {showTime(currentAttempt.timeTrigger)}\n )\n }\n\n return <>;\n }\n\n return (\n resetAndHide()}\n size=\"xl\"\n id=\"questions-assessment-modal\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n className=\"questionAssessmentsModalWrapper\"\n >\n \n \n

    {quiz ? quiz.title : \"N/A Quiz\"}

    \n
    \n
    \n \n \n Student:{\" \"}\n {student\n ? LimespringUtils.getUserFullName(student)\n : \"No Student Selected\"}\n \n \n {populateTimeTrigger()}\n \n \n Time Taken: {currentAttempt ? ({showTime(currentAttempt.timeTaken)}) : 'N/A'}\n \n
    \n \n a._id === currentAttempt?._id) \n : \"\"\n }\n onChange={e => {\n const selectedAttemptIndex = parseInt(e.target.value, 10);\n setCurrentAttempt(report.attempts[selectedAttemptIndex]);\n }}\n >\n {populateAttempts()}\n \n \n \n
    \n \n {createStudentAnswersTable()}\n
    \n \n );\n};\n\nexport default QuestionAssessmentsModal;\n","import { useAccordionButton } from 'react-bootstrap/AccordionButton';\nimport * as Icons from \"react-bootstrap-icons\";\n\nconst AccordionToggle = (props) => {\n\n const { header, eventKey, className=''} = props;\n\n const decoratedOnClick = useAccordionButton(eventKey, () => {\n //TODO\n });\n\n return (\n
    decoratedOnClick()}>\n
    \n \n
    \n {header}\n
    \n
    \n
    \n );\n}\n \nexport default AccordionToggle;","import React, {useState} from 'react';\nimport Rater from \"react-rater\";\nimport {Button, Accordion, Card, Table, OverlayTrigger, Tooltip, Spinner, Badge} from \"react-bootstrap\";\nimport ToolkitProvider from \"react-bootstrap-table2-toolkit\";\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport LtiService from \"./../../../../services/LtiService\";\nimport DeepLinking from \"./../../../../utils/DeepLinking\";\nimport AssessmentService from \"./../../../../services/AssessmentService\";\nimport AttemptService from \"./../../../../services/AttemptService\";\nimport ReportUtils from \"./../../../../utils/ReportUtils\";\nimport checkIcon from \"./../../../../images/check.svg\";\nimport QuestionAssessmentsModal from \"../../modals/instructor/QuestionAssessmentsModal\";\nimport AccordionToggle from '../../../widgets/accordion/AccordionToggle';\nimport './../reports.css'\n\nconst StudentUnitScoresTable = (props) => {\n\n const { report, selectedClass, student, units, reloadReport} = props;\n\n const [showQuestionModal, setShowQuestionModal] = useState(false);\n const [tempReport, setTempReport] = useState(report);\n const [currentQuiz, setCurrentQuiz] = useState(null);\n\n const openAssessmentModal = async (quizId) => {\n setCurrentQuiz(await AssessmentService.getFromRemote(quizId));\n setShowQuestionModal(true);\n };\n\n const openQuizModal = (quiz) => {\n setCurrentQuiz(quiz);\n setShowQuestionModal(true);\n };\n\n const onHideQuestionAssessmentModal = (r) => {\n setTempReport(r);\n setShowQuestionModal(false);\n \n }\n\n const openIde = (assignmentAttemptId) => {\n window.open(DeepLinking.STUDENT.ASSIGNMENT_VIEW.replace(\":id\", assignmentAttemptId),'targetWindow', `toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=900,height=600`);\n }\n\n const modifyAttempt = async (attempt, answerId) => {\n if(attempt) {\n \n //get the answer and modify it!\n const answer = attempt.answers.find(a => a._id === answerId);\n if(answer){\n const correctChoiceIds = answer.correctChoiceIds;\n //get last attempt and modify it!\n const attempt = answer.attempts[answer.attempts.length - 1];\n if(attempt){\n attempt.isCorrect = true;\n attempt.selectedChoiceIds = correctChoiceIds;\n }\n }\n \n const updated = await AttemptService.update(attempt);\n //if(updated) reloadReport();\n }\n }\n\n const removeAttempt = async (userId, ids, assessmentType) => {\n const updated = await AttemptService.remove(userId, ids, assessmentType);\n setShowQuestionModal(false);\n if(updated) reloadReport();\n }\n\n const createHistoryRows = row => {\n if(!row.history || row.history.length === 0) { \n return No Data Available \n }\n \n return row.history.map(quizHistory => {\n return (\n \n {quizHistory.quiz.title}\n \n \n {quizHistory.lectureTitle}\n \n }\n >\n \n \n \n {quizHistory.bestScore}\n {quizHistory.attempts.length}\n {quizHistory.stars}\n \n {quizHistory.status === \"TAKEN\" ? (\n \"taken\"/\n ) : (\n \"-\"\n )}\n \n {quizHistory.claimedCorrectCount}\n \n openQuizModal(quizHistory.quiz, row.id)}>\n View Answers\n \n \n \n );\n });\n };\n\n const createStudentQuizzesHistoryTable = row => {\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {createHistoryRows(row)}\n
    QuizLectureBest ScoreAttemptsStarsTakenClaimed Correct
    \n
    \n );\n };\n\n const createStudentTable = (data, unit) => {\n if (!student) { return \"\"; }\n\n const columns = [];\n\n if (unit.assessments.some(a => a.type === \"PLACEMENT_EXAM\")) {\n columns.push(\n {\n dataField: \"placementExamScore\",\n text: \"Placement Exam %\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.placementExamScore} \n \n
    \n );\n }\n });\n }\n\n columns.push(\n {\n dataField: \"quizzesCompleted\",\n text: \"Quizzes Completed\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.quizzesCompleted}\n
    \n );\n }\n },\n {\n dataField: \"averageStars\",\n text: \"Average Stars\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n \n
    \n );\n }\n });\n\n if (unit.assessments.some(a => a.type === \"ASSIGNMENT\")) {\n columns.push(\n {\n \n dataField: \"assignmentScore\",\n text: \"Assignment\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.assignmentScore}\n
    \n );\n }\n });\n } \n \n\n if (unit.assessments.some(a => a.type === \"WORKBOOK\")) {\n columns.push({\n dataField: \"workbookScore\",\n text: \"Workbook %\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.workbookScore} \n {\n row.workbookAttemptId === '' ? \n \"\"\n : \n \n }\n
    \n );\n }\n });\n }\n \n \n if (unit.assessments.some(a => a.type === \"BOOKEXAM\")) {\n columns.push({\n dataField: \"examScore\",\n text: \"Exam %\",\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n
    \n {row.examScore} \n {\n row.examAttemptId === '' ? \n row.assignmentAttemptId !== '' ? : \"\"\n : \n \n }\n
    \n );\n }\n });\n } \n const expandRow = {\n showExpandColumn: true,\n expandByColumnOnly: true,\n onlyOneExpanding: true,\n renderer: row => createStudentQuizzesHistoryTable(row)\n };\n \n return (\n \n {props => (\n
    \n \n
    \n )}\n \n );\n };\n\n const populateStudentAccordionTab = () => {\n if(!tempReport || !units || !student){\n return <>\n }\n \n return units.map(unit => {\n \n const data = ReportUtils.getStudentsReport(unit, [student], tempReport)\n \n return (\n
    \n \n \n \n \n \n {createStudentTable(data, unit)}\n \n \n
    \n );\n });\n };\n\n return (\n <>\n \n {populateStudentAccordionTab()}\n \n onHideQuestionAssessmentModal(r)}\n onCancel={() => setShowQuestionModal(false)}\n onAttemptModified={(attempt, answerId, value) => modifyAttempt(attempt, answerId, value)}\n onAttemptRemoved={(userId, quizId, type) => removeAttempt(userId, quizId, type)}/>\n \n );\n}\n \nexport default StudentUnitScoresTable;","import React, { useState, useEffect } from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport options from './../configuration/student_video_quiz_chart_config.json';\n\nconst StudentVideoToQuizTimeChart = (props) => {\n\n const { report, student, units } = props;\n\n const [labels, setLabels] = useState([]);\n const [selectedUnit, setSelectedUnit] = useState(null);\n const [unitLectures, setUnitLectures] = useState(null);\n const [studentReport, setStudentReport] = useState(null);\n\n const DEFAULT_QUIZZES_TOTAL = 4;\n const DEFAULT_QUIZZES_BG_COLOR = ['rgba(0, 121, 224, 1.0)', 'rgba(33, 179, 202, 1.0)', 'rgba(182, 196, 40, 1.0)', 'rgba(247, 204, 77, 1.0)'];\n\n //override here since JSON does not support function definitions\n options.plugins.tooltip.callbacks.label = (context) => {\n let label = `${context.dataset.label} - ${context.raw.quiz}: ${context.parsed.y} - Attempts: ${context.raw.attempts}`;\n return label;\n }\n\n useEffect(() => {\n if(report) {\n setStudentReport(report.studentLogs[0]);\n }\n }, []);\n\n useEffect(() => {\n if(units){\n let unit = units[0];\n if(!selectedUnit) setSelectedUnit(unit);\n }\n }, [student]);\n\n useEffect(() => {\n if(selectedUnit && selectedUnit.lectures) {\n setLabels(selectedUnit.lectures.map(l => l.title)); \n setUnitLectures(selectedUnit.lectures);\n }\n }, [selectedUnit]);\n\n const getDataSetForAllLectures = (quizIndex) => {\n if(!unitLectures || unitLectures.length === 0) return [];\n const quizzesData = [];\n unitLectures.forEach(lecture => {\n let bestTriggerTimeForQuiz = 0;\n let attemptsForQuiz = 0;\n let quizName = '';\n if(lecture && lecture.assessments && lecture.assessments.length > 0){\n //TODO make sure these are in order!\n const quizzes = lecture.assessments;\n if(quizzes && quizzes.length > 0 && quizIndex <= quizzes.length){\n const quiz = quizzes[quizIndex - 1];\n if(quiz) quizName = quiz.title;\n const quizLog = studentReport.assessments.find(a => { return a._id === quiz._id} );\n if(quizLog) {\n bestTriggerTimeForQuiz = quizLog.bestTimeTrigger;\n attemptsForQuiz = quizLog.attempts ? quizLog.attempts.length : 0;\n }\n }\n }\n quizzesData.push({label: lecture.title, quiz: quizName, triggerTime: bestTriggerTimeForQuiz, attempts: attemptsForQuiz});\n });\n return quizzesData;\n }\n\n const getDataSets = () => {\n let datasets = [];\n for (let i = 0; i < DEFAULT_QUIZZES_TOTAL; i++) {\n const data = getDataSetForAllLectures(i + 1)\n datasets.push({\n label: `Quiz ${i + 1}`,\n data: data,\n backgroundColor: DEFAULT_QUIZZES_BG_COLOR[i]\n });\n }\n return datasets;\n }\n\n const data = {\n labels: labels,\n datasets: getDataSets()\n };\n\n const selectHandler = (e) => {\n const unitId = e.target.value;\n setSelectedUnit(units.find(u => u._id === unitId));\n }\n\n const unitSelect = () => {\n if(!units){return <>}\n return (\n \n );\n };\n \n return (\n
    \n
    {unitSelect()}
    \n \n
    \n );\n}\n \nexport default StudentVideoToQuizTimeChart;","import React, {useState, useEffect} from 'react';\nimport { Bar } from 'react-chartjs-2';\nimport options from '../configuration/student_quiz_attempts_chart_config';\n\nconst StudentQuizAttemptsChart = (props) => {\n\n const { report, student, units } = props;\n\n const DEFAULT_QUIZZES_TOTAL = 4;\n const DEFAULT_QUIZZES_BG_COLOR = ['rgba(0, 121, 224, 1.0)', 'rgba(33, 179, 202, 1.0)', 'rgba(182, 196, 40, 1.0)', 'rgba(247, 204, 77, 1.0)'];\n\n const [labels, setLabels] = useState([]);\n const [selectedUnit, setSelectedUnit] = useState(null);\n const [unitLectures, setUnitLectures] = useState(null);\n const [studentReport, setStudentReport] = useState(null);\n\n //override here since JSON does not support function definitions\n options.plugins.tooltip.callbacks.label = (context) => {\n let label = `${context.dataset.label} - ${context.raw.quiz}: ${context.parsed.y} - Attempts: ${context.raw.attempts}`;\n return label;\n }\n\n useEffect(() => {\n if(report) {\n setStudentReport(report.studentLogs[0]);\n }\n }, []);\n\n useEffect(() => {\n if(units){\n let unit = units[0];\n if(!selectedUnit) setSelectedUnit(unit);\n }\n }, [student]);\n\n useEffect(() => {\n if(selectedUnit && selectedUnit.lectures){\n setUnitLectures(selectedUnit.lectures);\n setLabels(selectedUnit.lectures.map(l => l.title)); \n }\n }, [selectedUnit]);\n\n const getDataSetForAllLectures = (quizIndex) => {\n if(!unitLectures || unitLectures.length === 0) return [];\n const quizzesData = [];\n unitLectures.forEach(lecture => {\n let bestScoreForQuiz = 0;\n let attemptsForQuiz = 0;\n let quizName = '';\n if(lecture && lecture.assessments && lecture.assessments.length > 0){\n //TODO make sure these are in order!\n const quizzes = lecture.assessments;\n if(quizzes && quizzes.length > 0 && quizIndex <= quizzes.length){\n const quiz = quizzes[quizIndex - 1];\n if(quiz) quizName = quiz.title;\n const quizLog = studentReport.assessments.find(a => { return a._id === quiz._id} );\n if(quizLog) {\n bestScoreForQuiz = quizLog.bestScore;\n attemptsForQuiz = quizLog.attempts ? quizLog.attempts.length : 0;\n }\n }\n }\n quizzesData.push({label: lecture.title, quiz: quizName, score: bestScoreForQuiz, attempts: attemptsForQuiz});\n });\n return quizzesData;\n }\n\n const getDataSets = () => {\n let datasets = [];\n for (let i = 0; i < DEFAULT_QUIZZES_TOTAL; i++) {\n const data = getDataSetForAllLectures(i + 1)\n datasets.push({\n label: `Quiz ${i + 1}`,\n data: data,\n backgroundColor: DEFAULT_QUIZZES_BG_COLOR[i]\n });\n }\n return datasets;\n }\n\n const data = {\n labels: labels,\n datasets: getDataSets(),\n };\n\n const selectHandler = (e) => {\n const unitId = e.target.value;\n setSelectedUnit(units.find(u => u._id === unitId));\n }\n\n const unitSelect = () => {\n if(!units){return <>}\n return (\n \n );\n };\n \n return (\n
    \n
    {unitSelect()}
    \n \n
    \n );\n}\n \nexport default StudentQuizAttemptsChart;","import React from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport * as Icons from 'react-bootstrap-icons';\nimport \"./confirmdeletemodal.css\";\n\nconst ConfirmResetModal = props => {\n const { show, onHide, onCancel, onProceed } = props;\n\n return (\n \n \n
    \n \n
    \n
    \n \n

    \n Are you sure you want to reset this student's gradebook?
    \n This operation cannot be undone.\n

    \n
    \n \n \n \n \n \n );\n};\n\nexport default ConfirmResetModal;\n","import React, {useState, useEffect} from 'react';\nimport {Badge, Modal} from 'react-bootstrap';\nimport './modal.css';\n\nconst KpiReportModal = (props) => {\n\n const {data, show, onHide } = props;\n \n const modalTitle = 'KPI Report';\n\n const [kpi, setKpi] = useState(null);\n const [overallEffort, setOverallEffort] = useState(0);\n const [overallPerformance, setOverallPerformance] = useState(0);\n\n useEffect(() => {\n if(data) setKpi(data[0]);\n }, [data]);\n\n const getCourseMetrics = () => {\n let lectureWatchTotal = 0;\n let videoToQuizTimeTotal = 0;\n let quizScoreTotal = 0;\n let pointsTotal = 0;\n let effortTotal = 0;\n\n kpi.metrics.forEach(unitMetric => {\n const metrics = getLectureMetrics(unitMetric.lectureMetrics);\n lectureWatchTotal += metrics.lectureWatchTotal;\n videoToQuizTimeTotal += metrics.videoToQuizTimeTotal;\n quizScoreTotal += metrics.quizScoreTotal;\n pointsTotal += metrics.totalPoints;\n effortTotal += metrics.totalEffort;\n });\n\n //take average\n lectureWatchTotal = lectureWatchTotal / kpi.metrics.length;\n videoToQuizTimeTotal = videoToQuizTimeTotal / kpi.metrics.length;\n quizScoreTotal = quizScoreTotal / kpi.metrics.length;\n pointsTotal = pointsTotal / kpi.metrics.length;\n effortTotal = effortTotal / kpi.metrics.length;\n\n return {\n lectureWatchTotal: lectureWatchTotal, \n videoToQuizTimeTotal: videoToQuizTimeTotal, \n quizScoreTotal: quizScoreTotal,\n pointsTotal: pointsTotal,\n effortTotal: effortTotal\n };\n }\n\n const getCourseTotals = () => {\n if(!kpi) return <>;\n let metricsData = getCourseMetrics()\n\n return \n {metricsData.lectureWatchTotal.toFixed(2)}\n {metricsData.videoToQuizTimeTotal.toFixed(2)}\n {metricsData.quizScoreTotal.toFixed(2)}\n {metricsData.pointsTotal.toFixed(2)}\n {metricsData.effortTotal.toFixed(2)}\n ;\n };\n\n const getCourseRows = () => {\n if(!kpi) return <>;\n return
    \n
    Class Metrics
    \n \n \n \n \n \n \n \n \n \n {getCourseTotals()}\n \n
    LECTURE_WATCH (50%)VIDEO_TO_QUIZ_TIME (25%)QUIZ_SCORE (25%)Total PointsEffort
    \n
    \n }\n\n const getLessonsRows = (lectureMetrics) => {\n if(!lectureMetrics) return <>;\n return lectureMetrics.map((lmetric, i) => {\n let lectureWatchKPI = lmetric.indicators.find(indicator => { return indicator.type === 'EFFORT' && indicator.kpi === 'LECTURE_WATCH' }) || 0;\n let videoToQuizTimeKPI = lmetric.indicators.find(indicator => { return indicator.type === 'EFFORT' && indicator.kpi === 'VIDEO_TO_QUIZ_TIME' }) || 0;\n let quizScoreKPI = lmetric.indicators.find(indicator => { return indicator.type === 'EFFORT' && indicator.kpi === 'QUIZ_SCORE' }) || 0;\n let totalPoints = lectureWatchKPI.effort + videoToQuizTimeKPI.effort + quizScoreKPI.effort;\n let totalEffort = lectureWatchKPI.effort*.5 + videoToQuizTimeKPI.effort*.25 + quizScoreKPI.effort*.25;\n \n return \n lesson {i+1}\n {lectureWatchKPI.effort.toFixed(2)}\n {videoToQuizTimeKPI.effort.toFixed(2)}\n {quizScoreKPI.effort.toFixed(2)}\n {totalPoints.toFixed(2)}\n {totalEffort.toFixed(2)}\n \n });\n }\n\n const getLectureMetrics = (lectureMetrics) => {\n let lectureWatchTotal = 0;\n let videoToQuizTimeTotal = 0;\n let quizScoreTotal = 0;\n let totalPoints = 0;\n let totalEffort = 0;\n\n lectureMetrics.forEach(lmetric => {\n let lectureWatchKPI = lmetric.indicators.find(indicator => { return indicator.type === 'EFFORT' && indicator.kpi === 'LECTURE_WATCH' });\n let videoToQuizTimeKPI = lmetric.indicators.find(indicator => { return indicator.type === 'EFFORT' && indicator.kpi === 'VIDEO_TO_QUIZ_TIME' });\n let quizScoreKPI = lmetric.indicators.find(indicator => { return indicator.type === 'EFFORT' && indicator.kpi === 'QUIZ_SCORE' });\n lectureWatchTotal += lectureWatchKPI.effort;\n videoToQuizTimeTotal += videoToQuizTimeKPI.effort;\n quizScoreTotal += quizScoreKPI.effort;\n });\n\n //take averages\n lectureWatchTotal = lectureWatchTotal / lectureMetrics.length\n videoToQuizTimeTotal = videoToQuizTimeTotal / lectureMetrics.length\n quizScoreTotal = quizScoreTotal / lectureMetrics.length\n\n totalPoints = lectureWatchTotal + videoToQuizTimeTotal + quizScoreTotal;\n totalEffort = lectureWatchTotal*.5 + videoToQuizTimeTotal*.25 + quizScoreTotal*.25;\n\n return {lectureWatchTotal: lectureWatchTotal, videoToQuizTimeTotal: videoToQuizTimeTotal, quizScoreTotal: quizScoreTotal, totalPoints: totalPoints, totalEffort: totalEffort}\n }\n\n const getModuleRow = (lectureMetrics) => {\n if(!lectureMetrics) return <>;\n\n const metrics = getLectureMetrics(lectureMetrics);\n\n return \n Module Avg\n {metrics.lectureWatchTotal.toFixed(2)}\n {metrics.videoToQuizTimeTotal.toFixed(2)}\n {metrics.quizScoreTotal.toFixed(2)}\n {metrics.totalPoints.toFixed(2)}\n {metrics.totalEffort.toFixed(2)}\n \n }\n\n const getUnitRows = (unitMetric, index) => {\n return
    \n
    Module {index + 1} Metrics
    \n \n \n \n \n \n \n \n \n \n \n {getLessonsRows(unitMetric.lectureMetrics)}\n {getModuleRow(unitMetric.lectureMetrics)}\n \n
    LECTURE_WATCHVIDEO_TO_QUIZ_TIMEQUIZ_SCORETotal PointsEffort
    \n
    \n }\n\n const renderKpi = () => {\n if (!kpi) return <>;\n return <>\n {getCourseRows()}\n { kpi.metrics.map((unitMetric, i) => {\n return getUnitRows(unitMetric, i)\n })\n }\n \n };\n\n const renderStats = () => {\n if(!kpi) return <>;\n\n const metrics = getCourseMetrics();\n\n return
    \n
    Overall Effort: {metrics.effortTotal}
    \n
    Overall Performance: {kpi.performance ? kpi.performance.toFixed(2) : 0}
    \n
    ;\n }\n\n return (\n onHide()}\n size=\"xxl\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n backdrop=\"static\"\n id=\"kpi-report-modal\"\n >\n \n \n

    {modalTitle}

    \n
    \n
    \n \n
    \n {renderStats()}\n {renderKpi()}\n
    \n\n
    \n \n );\n}\n \nexport default KpiReportModal;","import React, { useState } from 'react';\nimport { Scatter } from \"react-chartjs-2\";\nimport './charts.css'\n\nconst ScatterChart = (props) => {\n\n const {title, kpis, set_color, label, scope, onStudentClicked} = props\n\n const [currentTooltipStudentId, setCurrentTooltipStudentId] = useState(\"\");\n\n const data = {\n datasets: [\n {\n label: label,\n data: kpis,\n borderColor: `rgb(${set_color.r}, ${set_color.g}, ${set_color.b})`,\n backgroundColor:`rgba(${set_color.r}, ${set_color.g}, ${set_color.b}, 0.5)`,\n borderWidth: 2,\n pointStyle: 'circle',\n pointRadius: 15,\n }\n ]\n };\n \n\n const options = {\n responsive: true,\n onClick: (e) => {\n onStudentClicked(currentTooltipStudentId); \n },\n scales: {\n x: {\n suggestedMin: 0,\n suggestedMax: 105,\n display:true,\n beginAtZero: true,\n title: {\n display: true,\n text: 'Effort',\n \"font\": {\n \"weight\": \"bold\",\n \"size\": 18\n }\n },\n ticks: {\n callback: function(value) {\n return value <= 100 ? value : '';\n }\n }\n },\n y: {\n suggestedMin: 0,\n suggestedMax: 105,\n display:true,\n beginAtZero: true,\n title: {\n display: true,\n text: 'Performance',\n \"font\": {\n \"weight\": \"bold\",\n \"size\": 18\n }\n },\n ticks: {\n callback: function(value) {\n return value <= 100 ? value : '';\n }\n }\n }\n },\n plugins: {\n legend: {\n position: 'top',\n labels: {\n usePointStyle: true,\n },\n },\n title: {\n display: true,\n text: title\n },\n tooltip: {\n usePointStyle: true,\n callbacks: {\n label: function(context) {\n let label = \"\";\n if (context.raw && context.raw.label) { \n label = context.raw.label + \"(\" + context.raw.x + \", \" + + context.raw.y + \")\";\n setCurrentTooltipStudentId(context.raw.id);\n }\n return label;\n }\n }\n }\n }\n }\n\n \n\n return (\n
    \n \n
    \n );\n}\n \nexport default ScatterChart;","import React, { useState, useEffect } from 'react';\nimport { v4 as uuidv4 } from \"uuid\";\nimport Config from '../../../../config/Config';\nimport { Accordion, Card, Dropdown, Spinner, Button, Badge } from \"react-bootstrap\";\nimport Drawer from \"../../../widgets/drawer/Drawer\";\nimport ReportService from \"../../../../services/ReportService\";\nimport CourseService from \"../../../../services/CourseService\";\nimport StudentService from \"../../../../services/StudentService\";\nimport ClassService from \"../../../../services/ClassService\";\nimport LtiService from \"../../../../services/LtiService\";\nimport AttemptService from '../../../../services/AttemptService';\nimport KpiService from '../../../../services/KpiService';\nimport ChartService from '../../../../services/ChartService';\nimport StudentUnitScoresTable from \"../../../widgets/reports/student/StudentUnitScoresTable\";\nimport StudentVideoToQuizTimeChart from \"../../../widgets/reports/student/StudentVideoToQuizTimeChart\"; \nimport StudentQuizAttemptsChart from \"../../../widgets/reports/student/StudentQuizAttemptsChart\";\nimport LimespringUtils from '../../../../utils/LimespringUtils';\nimport ConfirmResetModal from '../../../widgets/modals/instructor/ConfirmResetModal';\nimport AccordionToggle from '../../../widgets/accordion/AccordionToggle';\nimport KpiReportModal from '../../../widgets/modals/instructor/KpiReportModal';\nimport ScatterChart from \"../../../widgets/charts/ScatterChart\";\n\nconst StudentReportDrawer = (props) => {\n\n const { show, onHide, data } = props;\n\n const [open, setOpen] = useState(show);\n const [selectedClass, setSelectedClass] = useState(null);\n const [selectedStudent, setSelectedStudent] = useState(null);\n const [students, setStudents] = useState(null);\n const [course, setCourse] = useState(null);\n const [studentReport, setStudentReport] = useState(null);\n const [classes, setClasses] = useState(null);\n const [gradebookSyncStatus, setGradebookSyncStatus] = useState('');\n const [gradebookResetStatus, setGradebookResetStatus] = useState('');\n const [kpi, setKpi] = useState(null); \n const [showKpiModal, setShowKpiModal] = useState(false);\n const [showResetWarningModal, setShowResetWarningModal] = useState(false);\n const [highPerformanceLowEffortDataSet, setHighPerformanceLowEffortDataSet] = useState([]);\n const [highPerformanceHighEffortDataSet, setHighPerformanceHighEffortDataSet] = useState([]);\n const [lowPerformanceHighEffort, setLowPerformanceHighEffort] = useState([]);\n const [lowPerformanceLowEffort,setLowPerformanceLowEffort] = useState([]);\n\n const headers = ['Performance Report', 'Score Report', '(Effort Metrics) - Video-to-Quiz Time', '(Effort Metrics) - Quiz Attempts'];\n\n useEffect(() => {\n reset();\n setOpen(show);\n }, [show]);\n\n useEffect(() => {\n if(open) fetchData();\n }, [open, data]);\n\n const fetchData = async () => {\n if(data && data.selectedClass){\n setSelectedClass(data.selectedClass);\n setSelectedStudent(data.selectedStudent);\n if(data.selectedClass.students) setStudents(await StudentService.getSomeFromRemote(data.selectedClass.students));\n if(data.studentClasses && data.studentClasses.length > 0){\n setClasses(data.studentClasses);\n }else{\n setClasses(await ClassService.getAllFromRemote());\n }\n if(data.selectedClass.courses && data.selectedClass.courses.length > 0) setCourse(await CourseService.getFromRemote(data.selectedClass.courses[0]));\n setStudentReport(await ReportService.getClassReportByStudentId(data.selectedClass._id, data.selectedStudent._id));\n const _kpis = await ChartService.getChartByClassAndStudentFromRemote(data.selectedClass._id, data.selectedStudent._id);\n const _kpi = await KpiService.getByClassAndStudentFromRemote(data.selectedClass._id, data.selectedStudent._id);\n setKpi(_kpi);\n initKpisData(_kpis);\n }\n }\n\n const initKpisData = (_kpis) => {\n if (_kpis && _kpis.length >0) {\n setHighPerformanceLowEffortDataSet(_kpis.find(kpi => kpi.chart===\"hple\").data);\n setHighPerformanceHighEffortDataSet(_kpis.find(kpi => kpi.chart===\"hphe\").data);\n setLowPerformanceHighEffort(_kpis.find(kpi => kpi.chart===\"lphe\").data);\n setLowPerformanceLowEffort(_kpis.find(kpi => kpi.chart===\"lple\").data);\n }\n }\n\n const reset = () => {\n setSelectedClass(null);\n setStudents(null);\n setCourse(null);\n setStudentReport(null);\n setGradebookSyncStatus('');\n setGradebookResetStatus('');\n setShowResetWarningModal(false);\n }\n\n const getRequiredUnitsOnly = () => {\n if(!course || !course.units) return [];\n return course.units.filter(u => u.optional === false);\n }\n\n const reloadReport = () => {\n fetchData();\n } \n\n const populateAccordionTab = () => {\n\n if (!studentReport) return
    \n \n
    ;\n\n const reportTabs = (headerName) =>{\n if(headerName === 'Performance Report'){\n return
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n }\n\n if(headerName === 'Score Report'){\n return reloadReport()}/>\n }\n \n if(headerName === '(Effort Metrics) - Video-to-Quiz Time'){\n return ;\n }\n \n if(headerName === '(Effort Metrics) - Quiz Attempts'){\n return ;\n }\n }\n\n return headers.map((header, i) => {\n return (\n \n \n \n \n \n {reportTabs(header)}\n \n \n );\n });\n }\n\n const classSelectorEntries = () => {\n if(!classes || classes.length === 0) return <>N/A;\n return classes.map((clss, i) => {\n return (\n onNewClassSelected(clss)}>{clss.title}\n );\n });\n }\n\n const studentSelectorEntries = () => {\n if(!students || students.length === 0) return <>N/A;\n return students.map((student, i) => {\n return (\n onNewStudentSelected(student)}>{LimespringUtils.getUserFullName(student)}\n );\n });\n }\n\n const onNewStudentSelected = async (student) => {\n setStudentReport(await ReportService.getClassReportByStudentId(data.selectedClass._id, student._id));\n setSelectedStudent(student);\n }\n\n const onNewClassSelected = async (c) => {\n setSelectedClass(c);\n setCourse(await CourseService.getFromRemote(c.courses[0]));\n }\n\n const classSelector = () => {\n return \n \n {selectedClass ? selectedClass.title : ''}\n \n {classSelectorEntries()}\n \n }\n\n const studentSelector = () => {\n return \n \n {selectedStudent ? LimespringUtils.getUserFullName(selectedStudent) : 'Student'}\n \n {studentSelectorEntries()}\n \n }\n\n const syncGradebook = async () => {\n setGradebookSyncStatus('IN_PROGRESS');\n const success = await LtiService.syncGradebook(selectedClass._id, selectedStudent._id);\n setGradebookSyncStatus(success ? 'SUCCESS': 'FAILED');\n }\n\n const resetGradebook = async () => {\n setShowResetWarningModal(false);\n if(studentReport && studentReport.studentLogs && studentReport.studentLogs.length > 0) {\n const studentlogs = studentReport.studentLogs[0];\n if(studentlogs && studentlogs.assessments && studentlogs.assessments.length > 0) {\n let attemptIds = [];\n studentlogs.assessments.forEach(assessment => {\n attemptIds = attemptIds.concat(assessment.attempts);\n });\n\n if(attemptIds.length > 0){\n //avoid duplicates\n attemptIds = [...new Set(attemptIds)];\n setGradebookResetStatus('IN_PROGRESS');\n let classId = selectedClass._id;\n const success = await AttemptService.remove(selectedStudent._id, attemptIds, 'FULL_GRADEBOOK', classId);\n await fetchData();\n setGradebookResetStatus(success ? 'SUCCESS': 'FAILED');\n }\n }\n }\n }\n\n const getKpiReport = async () => {\n setShowKpiModal(true);\n }\n\n const showGradebookSyncStatus = () => {\n if(gradebookSyncStatus === '') return <>;\n if(gradebookSyncStatus === 'IN_PROGRESS') return ;\n if(gradebookSyncStatus === 'SUCCESS') return Success;\n if(gradebookSyncStatus === 'FAILED') return Failed;\n }\n\n const showGradebookResetStatus = () => {\n if(gradebookResetStatus === '') return <>;\n if(gradebookResetStatus === 'IN_PROGRESS') return ;\n if(gradebookResetStatus === 'SUCCESS') return Success;\n if(gradebookResetStatus === 'FAILED') return Failed;\n }\n \n const showGradebookSyncBtn = () => {\n return
    \n \n
    \n }\n\n const showGradebookResetBtn = () => {\n return
    \n \n
    \n }\n\n const showKpiReportBtn = () => {\n return
    \n \n
    \n }\n\n return (\n onHide()}\n emergent={true}\n title={`${selectedStudent ? LimespringUtils.getUserFullName(selectedStudent): 'Student'} Report`}>\n
    \n
    {classSelector()}
    \n
    {studentSelector()}
    \n
    {showGradebookSyncBtn()}
    \n
    {showGradebookResetBtn()}
    \n { Config.showKpiReportTestButton ?
    {showKpiReportBtn()}
    : <> }\n
    \n \n \n {populateAccordionTab()}\n \n resetGradebook()} onCancel={()=> setShowResetWarningModal()} onHide={()=>setShowResetWarningModal(false)}/>\n setShowKpiModal(false)} />\n \n );\n}\n \nexport default StudentReportDrawer;","import React, { useState, useEffect } from \"react\";\nimport Drawer from \"../../../widgets/drawer/Drawer\";\nimport { Accordion, Card, Spinner, Button } from \"react-bootstrap\";\nimport { utils, writeFile } from \"xlsx\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport ReportService from \"../../../../services/ReportService\";\nimport ChartService from \"../../../../services/ChartService\";\nimport ClassService from \"../../../../services/ClassService\";\nimport CourseService from \"../../../../services/CourseService\";\nimport StudentService from \"../../../../services/StudentService\";\nimport ProfileService from \"../../../../services/ProfileService\";\nimport StudentsPerformanceTable from \"../../../widgets/reports/class/StudentsPerformanceTable\"\nimport StudentsUnitsCompletedChart from \"../../../widgets/reports/class/StudentsUnitsCompletedChart\";\nimport StudentReportDrawer from \"./StudentReportDrawer\";\nimport AccordionToggle from \"../../../widgets/accordion/AccordionToggle\";\nimport ReportUtils from \"../../../../utils/ReportUtils\";\nimport ExcelUtils from \"../../../../utils/ExcelUtils\";\nimport ScatterChart from \"../../../widgets/charts/ScatterChart\";\nimport StringUtils from \"../../../../utils/StringUtils\";\n\nconst ReportDrawer = props => {\n\n const { show, onHide, data } = props;\n\n const [open, setOpen] = useState(show);\n const [report, setReport] = useState(null);\n const [classes, setClasses] = useState(null);\n const [students, setStudents] = useState(null);\n const [selectedClass, setSelectedClass] = useState(null);\n const [course, setCourse] = useState(null);\n\n const [openStudentDetailDrawer, setOpenStudentDetailDrawer] = useState(false);\n const [studentDetailData, setStudentDetailData] = useState(null);\n const [profile, setProfile] = useState(null);\n const [kpis, setKpis] = useState([]);\n const [highPerformanceLowEffortDataSet, setHighPerformanceLowEffortDataSet] = useState([]);\n const [highPerformanceHighEffortDataSet, setHighPerformanceHighEffortDataSet] = useState([]);\n const [lowPerformanceHighEffort, setLowPerformanceHighEffort] = useState([]);\n const [lowPerformanceLowEffort,setLowPerformanceLowEffort] = useState([]);\n\n const headers = ['Class Progress', 'Class Performance', 'Student Performance'];\n\n useEffect(() => {\n reset();\n setOpen(show);\n }, [show]);\n\n useEffect(() => {\n const fetchData = async () => {\n const cls = await ClassService.getFromRemote(data.id);\n if(cls) setStudents(await StudentService.getSomeFromRemote(cls.students));\n if(cls && cls.courses && cls.courses.length > 0) setCourse(await CourseService.getFromRemote(cls.courses[0]));\n \n setSelectedClass(cls);\n setClasses(data.classes);\n setReport(await ReportService.getClassReportFromServer(data.id));\n const _kpis = await ChartService.getChartByClassFromRemote(data.id);\n initKpisData(_kpis);\n setKpis(_kpis);\n\n const user = ProfileService.get();\n if(user) setProfile(user);\n }\n if(open && data) fetchData();\n\n }, [open, data]);\n\n const reset = () => {\n setReport(null)\n setClasses(null);\n setSelectedClass(null);\n setOpenStudentDetailDrawer(false);\n setStudentDetailData(null);\n setProfile(null);\n }\n\n const loadNewClassReport = async (cls) => {\n if(cls) setStudents(await StudentService.getSomeFromRemote(cls.students.map(s => s._id)));\n if(cls && cls.courses && cls.courses.length > 0) setCourse(await CourseService.getFromRemote(cls.courses[0]._id));\n setReport(await ReportService.getClassReportFromServer(cls.id));\n setClasses(data.classes);\n setSelectedClass(cls);\n const _kpis = await ChartService.getCharByClassFromRemote(data.id);\n initKpisData(_kpis);\n setKpis(_kpis);\n }\n\n const getUnits = (requiredOnly=false) => {\n if(!selectedClass || !selectedClass.courses || selectedClass.courses.length === 0) return [];\n if(!course || !course.units || course.units.length === 0) return [];\n return requiredOnly ? course.units.filter(u => u.optional === false): course.units;\n }\n\n const onViewStudentDetails = (studentId) => {\n setStudentDetailData({selectedStudent: students.find(s => s._id === studentId), selectedClass: selectedClass});\n setOpenStudentDetailDrawer(true);\n }\n\n const exportXls = () => {\n if(!report) return;\n\n //only required units\n const units = getUnits(true);\n const workbook = utils.book_new();\n\n if(units && units.length > 0){\n for (const unit of units) {\n const data = ReportUtils.getStudentsReport(unit, students, report);\n const reportData = ExcelUtils.curateData(data);\n\n const quizzes = unit.lectures ? unit.lectures.filter(l => { return l.assessments.length > 0}) : [];\n const placementExams = unit.assessments ? unit.assessments.filter(a => { return a.type === 'PLACEMENT_EXAM'}) : [];\n const workbooks = unit.assessments ? unit.assessments.filter(a => { return a.type === 'WORKBOOK'}) : [];\n const exams = unit.assessments ? unit.assessments.filter(a => { return a.type === 'BOOKEXAM'}) : [];\n\n let curatedData = [];\n let headers = [\"Student\"];\n\n for (const singleReportData of reportData) {\n const data = {fullName: singleReportData.fullName};\n if(placementExams && placementExams.length > 0){\n data.placementExamScore = singleReportData.placementExamScore;\n if(!headers.includes(\"Placement Exam Score\")) headers.push(\"Placement Exam Score\");\n } \n if(quizzes && quizzes.length > 0){\n data.quizzesScore = singleReportData.quizzesScore;\n if(!headers.includes(\"Quiz Score\")) headers.push(\"Quiz Score\");\n } \n if(workbooks && workbooks.length > 0){\n data.workbookScore = singleReportData.workbookScore;\n if(!headers.includes(\"Workbook Score\")) headers.push(\"Workbook Score\");\n } \n if(exams && exams.length > 0){\n data.examScore = singleReportData.examScore;\n if(!headers.includes(\"Exam Score\")) headers.push(\"Exam Score\");\n } \n curatedData.push(data);\n }\n\n const worksheet = utils.json_to_sheet(curatedData);\n\n //space them\n const max_width = curatedData.reduce((w, r) => Math.max(w, r.fullName.length), 10);\n worksheet[\"!cols\"] = [ { wch: max_width } ];\n\n //sheet name cannot exceed 31 chars\n let fileName = unit.title && unit.title.length <= 31 ? unit.title : unit.title.slice(0, 31);\n\n //sheet name cannot contain : \\ / ? * [ ]\n fileName = StringUtils.removeUnsupportedCharsExcel(fileName);\n\n utils.sheet_add_aoa(worksheet, [headers], { origin: \"A1\" });\n utils.book_append_sheet(workbook, worksheet, fileName);\n }\n }\n\n writeFile(workbook, `${selectedClass ? selectedClass.title + ' report': 'default-report'}.xlsx`, { compression: true });\n } \n\n const initKpisData = (_kpis) => {\n if (_kpis && _kpis.length >0) {\n setHighPerformanceLowEffortDataSet(_kpis.find(kpi => kpi.chart===\"hple\").data);\n setHighPerformanceHighEffortDataSet(_kpis.find(kpi => kpi.chart===\"hphe\").data);\n setLowPerformanceHighEffort(_kpis.find(kpi => kpi.chart===\"lphe\").data);\n setLowPerformanceLowEffort(_kpis.find(kpi => kpi.chart===\"lple\").data);\n }\n }\n\n const populateAccordionTab = () => {\n if (!selectedClass) return
    \n \n
    ;\n\n const reportTabs = (headerName) =>{\n if(headerName === 'Class Progress'){\n return \n }\n\n if(headerName === 'Class Performance'){\n\n return
    \n
    \n onViewStudentDetails(studentId)}/>\n onViewStudentDetails(studentId)}/>\n
    \n
    \n onViewStudentDetails(studentId)}/>\n onViewStudentDetails(studentId)}/>\n
    \n
    \n }\n\n if(headerName === 'Student Performance'){\n return onViewStudentDetails(studentId)}/>\n }\n }\n\n return headers.map((header, i) => {\n return (\n \n \n \n \n \n {reportTabs(header)}\n \n \n );\n });\n };\n\n const populateSelectData = () => {\n if (classes && classes.length > 0) {\n return classes.map((c) => {\n return (\n \n );\n });\n } else {\n return ;\n }\n };\n\n const selectHandler = async (e) => {\n const classId = e.target.options[e.target.selectedIndex].value;\n setSelectedClass(null);\n await loadNewClassReport(classes.find(c => c.id === classId));\n }\n\n return (\n onHide()}\n title={`${selectedClass ? selectedClass.title + \" \": \"\"} Class Report`\n}\n >\n\n
    \n
    \n \n
    \n {\n profile && profile.role === 'SuperAdmin'?\n \n :\n <>\n }\n
    \n \n Total Claimed Correct Quiz: {report && report.claimedCorrectQuizCount ? report.claimedCorrectQuizCount : '0'}\n \n
    \n\n \n {populateAccordionTab()}\n \n\n setOpenStudentDetailDrawer(false)}/>\n \n );\n};\n\nexport default ReportDrawer;","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\n\nexport default {\n getForCourse: async (courseId) => {\n const response = await new ApiService().get(ApiPath.ANALYTICS_ENDPOINT.replace(':id', courseId));\n if(response && response.status === 200) { \n const { analytics } = response.data;\n return analytics;\n } \n return [];\n },\n};","import React, {useState, useEffect} from 'react';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport CourseService from './../../../../../services/CourseService';\nimport AnalyticsService from './../../../../../services/AnalyticsService';\nimport * as Icons from 'react-bootstrap-icons';\nimport ProfileService from '../../../../../services/ProfileService';\n\nconst AnalyticsPanel = (props) => {\n\n const { SearchBar } = Search;\n const [profile, setProfile] = useState(null);\n const [courses, setCourses] = useState([]);\n const [analytics, setAnalytics] = useState([]);\n const [selectedCourse, setSelectedCourse] = useState(null);\n\n useEffect(() => {\n const _profile = ProfileService.get();\n if(_profile.role === 'SuperAdmin' || _profile.role === 'Admin') load();\n setProfile(_profile);\n }, []);\n\n const load = async () => {\n const _courses = await CourseService.getAllFromRemote();\n if(_courses && _courses.length > 0) setCourses(_courses);\n }\n\n const onCourseSelected = async (courseId) => {\n const _analytics = await AnalyticsService.getForCourse(courseId);\n setAnalytics(_analytics);\n setSelectedCourse(courseId);\n }\n\n const populateSelectData = () => {\n if (courses && courses.length > 0) {\n let options = [] ;\n options = options.concat(courses.map((c) => {\n return (\n \n );\n }));\n return options;\n } else {\n return ;\n }\n };\n\n const renderCourseDropdown = () => {\n return ();\n }\n\n const renderAnalytics = () => {\n if (!analytics) return <>;\n \n const columns = [\n {\n dataField: \"className\",\n text: \"Class Name\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"retentionRate\",\n text: \"Retention Rate\",\n sort: true,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"averageFinalScore\",\n text: \"Average Score On Final\",\n headerAlign: \"center\",\n align: \"center\"\n }\n ];\n \n const data = analytics.map(analytic => {\n return {\n className: analytic.className,\n retentionRate: `${analytic.retentionRate}%`,\n averageFinalScore: `${analytic.averageFinalScore}%`\n };\n });\n \n return (\n \n {props => (\n
    \n \n \n
    \n )}\n \n );\n }\n\n return (\n
    \n
    \n

    \n Analytics\n

    \n
    \n
    {renderCourseDropdown()}
    \n
    {renderAnalytics()}
    \n
    \n );\n}\n \nexport default AnalyticsPanel;","import React, { useState, useEffect } from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport CC_icon from \"./../../../images/createcontent.png\";\nimport MC_icon from \"./../../../images/createmanage.png\";\nimport MS_icon from \"./../../../images/students.png\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\n\nimport \"./links.css\";\n\nconst DashboardCreateManageContentLinks = () => {\n\n const history = useHistory();\n \n const dashboardLinks =[\n {title:\"Create Content\", destination:DeepLinking.MANAGEMENT.DASHBOARD_CREATE_CONTENT_PATH, icon: CC_icon},\n {title:\"Edit Content\", destination:DeepLinking.MANAGEMENT.DASHBOARD_MANAGE_CONTENT_PATH, icon: MC_icon},\n ]\n const openDashboardTilesTo = (link) => {\n history.push(link);\n };\n\n const createDashboarTiles = () => {\n return dashboardLinks.map((dashboardLink, index) => {\n return (\n openDashboardTilesTo(dashboardLink.destination)}>\n \n \n
    {dashboardLink.title}
    \n
    \n
    \n \n
    \n
    \n
    \n );\n });\n };\n return (\n
    \n
    \n {createDashboarTiles()}\n
    \n
    \n );\n};\n\nexport default DashboardCreateManageContentLinks;\n","export default \"data:image/png;base64,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\"","import React, {useEffect} from 'react';\nimport DashboardCreateManageContentLinks from \"../../../../widgets/links/DashboardCreateManageContentLinks\";\nimport CacheService from \"../../../../../services/CacheService\";\nimport LSBreadcrumb from \"./../../../../widgets/breadcrumb/LSBreadcrumb\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\n\nconst CreateManageContentPanel = () => {\n\n //cache refresh\n useEffect(()=>{(async() => {\n console.log(`Loading cache ...`);\n document.title = 'LimeSpring Portal - Dashboard';\n await CacheService.refresh()\n })()\n }, []);\n\n return (\n <>\n \n \n \n );\n}\n \nexport default CreateManageContentPanel;","export default __webpack_public_path__ + \"static/media/invite-student.cda34980.png\";","import React, { useState, useEffect } from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport CS_icon from \"./../../../images/studentsection.png\";\nimport IS_icon from \"./../../../images/AddStudents.png\";\nimport IS_icon1 from \"./../../../images/invite-student.png\";\nimport MIS_icon from \"./../../../images/students.png\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\n\nimport SchoolService from \"./../../../services/SchoolService\";\nimport ClassService from \"./../../../services/ClassService\";\nimport StudentModal from \"./../modals/instructor/StudentModal\";\n\nimport BatchStudentsImportModal from \"./../modals/instructor/BatchStudentsImportModal\";\n\nimport \"./links.css\";\n\nconst DashboardManageStudentsLinks = () => {\n\n const history = useHistory();\n\n const [showNewStudentDrawer, setShowNewStudentDrawer] = useState(false);\n const [currentStudent, setCurrentStudent] = useState(null);\n const [classes, setClasses] = useState(null);\n const [schools, setSchools] = useState(null);\n const [showBatchModal, setShowBatchModal] = useState(false);\n\n const dashboardLinks =[\n {title:\"Manage Students\", destination:DeepLinking.MANAGEMENT.STUDENTS_VIEW_PATH, target: \"manage-students\", icon: MIS_icon},\n {title:\"Invite Student\", destination:DeepLinking.MANAGEMENT.STUDENTS_INVITE_PATH, target: \"invite\", icon: IS_icon1},\n {title:\"Invite Students \", destination:DeepLinking.MANAGEMENT.DASHBOARD_MANAGE_STUDENTS_PATH, target: \"inviteStudents\", icon: IS_icon},\n ]\n\n useEffect(()=>{\n (async() => {\n \n setSchools(await SchoolService.getAllFromRemote());\n setClasses(await ClassService.getAllFromRemote());\n })()\n }, []);\n\n const openDashboardTilesTo = (target, link) => {\n\n if (target === \"invite\") {\n setCurrentStudent(null);\n setShowNewStudentDrawer(true)\n } else if (target === \"inviteStudents\") {\n setShowBatchModal(true)\n } else if (target === \"manage-students\") {\n history.push({pathname:DeepLinking.MANAGEMENT.STUDENTS_VIEW_PATH,\n state: { currentTarget: 'students' }\n });\n }\n };\n\n const hideNewStudentModal = async () => {\n setShowNewStudentDrawer(false);\n };\n\n const hideBatchAndRefreshData = async () => {\n setShowBatchModal(false); \n };\n\n const onBatchSuccess = async () => {\n setShowBatchModal(false); \n }\n\n const createDashboarTiles = () => {\n return dashboardLinks.map((dashboardLink, index) => {\n return (\n openDashboardTilesTo(dashboardLink.target, dashboardLink.destination)}>\n \n \n
    {dashboardLink.title}
    \n
    \n
    \n \n
    \n
    \n
    \n );\n });\n };\n return (\n
    \n
    \n {createDashboarTiles()}\n
    \n hideNewStudentModal()}\n onDismiss={()=> hideNewStudentModal(false)}\n student={currentStudent}\n classes={classes}\n schools={schools}\n />\n\n hideBatchAndRefreshData()}\n onProceed={() => onBatchSuccess()}\n />\n
    \n \n );\n};\n\nexport default DashboardManageStudentsLinks;\n","export default \"data:image/png;base64,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\"","import React, {useEffect} from 'react';\nimport DashboardManageStudentsLinks from \"../../../../widgets/links/DashboardManageStudentsLinks\";\nimport CacheService from \"../../../../../services/CacheService\";\nimport LSBreadcrumb from \"./../../../../widgets/breadcrumb/LSBreadcrumb\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\n\nconst ManageStudentsPanel = () => {\n\n //cache refresh\n useEffect(()=>{(async() => {\n console.log(`Loading cache ...`);\n document.title = 'LimeSpring Portal - Dashboard';\n await CacheService.refresh()\n })()\n }, []);\n\n return (\n <>\n \n \n \n );\n}\n \nexport default ManageStudentsPanel;","import React, { useState, useEffect } from \"react\";\nimport { Card, Button } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport VP_icon from \"./../../../images/plan.png\";\nimport WT_icon from \"./../../../images/tutorials.png\";\nimport VB_icon from \"./../../../images/shoppingcart.png\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\n\nimport \"./links.css\";\n\nconst DashboardOtherOptionsLinks = () => {\n\n const history = useHistory();\n \n const dashboardLinks =[\n {title:\"View your plan\", destination:DeepLinking.PLAN_VIEW_PATH, icon: VP_icon, isDisabled: false},\n {title:\"Tutorials\", destination:DeepLinking.MANAGEMENT.DASHBOARD_TUTORIALS_PATH, icon: WT_icon, isDisabled: false},\n {title:\"Visit our Bookstore\", destination:DeepLinking.BOOKSTORE_VIEW_PATH, icon: VB_icon, isDisabled: true}\n ]\n const openDashboardTilesTo = (link) => {\n history.push(link);\n };\n\n const createDashboarTiles = () => {\n return dashboardLinks.map((dashboardLink, index) => {\n return (\n !dashboardLink.isDisabled && openDashboardTilesTo(dashboardLink.destination)}>\n \n \n
    {dashboardLink.title}
    \n
    \n
    \n \n
    \n
    \n
    \n );\n });\n };\n \n return (\n
    \n
    \n {createDashboarTiles()}\n
    \n
    \n );\n};\n\nexport default DashboardOtherOptionsLinks;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React, {useEffect} from 'react';\nimport DashboardOtherOptionsLinks from \"../../../../widgets/links/DashboardOtherOptionsLinks\";\nimport CacheService from \"../../../../../services/CacheService\";\nimport LSBreadcrumb from \"./../../../../widgets/breadcrumb/LSBreadcrumb\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\n\nconst ManageOtherOptionsPanel = () => {\n\n //cache refresh\n useEffect(()=>{(async() => {\n console.log(`Loading cache ...`);\n document.title = 'LimeSpring Portal - Dashboard';\n await CacheService.refresh()\n })()\n }, []);\n\n return (\n <>\n \n \n \n );\n}\n \nexport default ManageOtherOptionsPanel;","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIcAAACHCAYAAAA850oKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADxhJREFUeNrsnQ1wFOUZx58LIQm5XHJJAPkIcH4lRcIQQEAtbQ7HVB1RcJxadVpy2GntTHXAocUZOzZkxjqjHYcwLbUdrAkzHduhOgYLrTQtXGwQg4ZcQtBCjDk+NFGCHiQKJILdZ3n3urnsbfbjfe/evXv/Mzt3XPaWvd3fPs//eT92AYSE4siVrj+8PtTlk158BlcPra0ojwg4UgsAPwEAl0rysd/GJhGQEHntIO8RnLCAg28QvOTEV5LXigT+9wo0zdISlGAJCjiSDwQCsFpaViUYBiOwICA7paXRqSnJ5UAgMEWsI1D4HLLbjU4ExeUgKALSS7VNz8BDREFQtkiQhAQc9n3EehIpvCnm9zDtbJcgaRBwCCjiCSudWh4hcQkoBCTcwyGBgVDUpCEUWummlody2MUBFFiC1nNWivKgOgJJJO3gICmkhqQRofjVzVoJkMa0gYNEi9cc1E6RbDUSSBIaRTKSAMYm6aVdgGFK2ODXTi6q1IscJI1gtPCLc21Lj0sRpC5l4BBphLoaCCQRR8MhgbGaVCNecU6pCpvfV7AEJIMxGAESMQQY9FXB2oe4GIKBJepmWtublueGrAkZUDRpkmPP5tDwsLSMQP/QF7TL3RUsOvJcjMDANBKgAcR1hV6YXeCRwJiQUpf9ibOD8N7AGVqgMAHExSMYCMLyWTNlKFJdCEfLyY/kiMIbIC7KYGAbRo2dbRRNyoE7rvWlXKTQ0/ClSzIgGE14AsRFEYwAqUoEGBa1N3yCK0BcvICBQNxTei3kZU20dvVJZu/MmTNJP8HFxcWQlZVlOYK8fqyHRooJS8tCu2VuJgUwKmhUJUtnTLMMxrHubjhw4IAMCA9avGgRLJIWq17rjZ6w3V3wScs+BCRp7RykSXyf3XYMhOK6ImubGBwagubmZm7AQLUdOgR9fX2WKzRcaLSDkOIgOXAApQauGyYXW/5u97FjXPoHq3Aox+P8hQs0diNAUn5i4SCViZ/GL5hdkG/dq1jM7zwLS/i9rQfgVH8/FUtotRU1wyIYfrslqzrPWvUaqDk+H5cnePr06ba+P69kJnQcfR/OSWmTEiBe5nCQ/6Se1kHE8tWOPHl5UFVVxU0Ewf2orKy0DccUz5Vo+nZHOw1AKqxczFaqlRrgrOvdN2cO+NaskUvZZBtTu1Aompp/pXV45Kuv5Ahy04KFMDHTVnG5Xrqwd5oZuJxpMmpgOuF2zCe2MaSiMHJgBKEACKYXw+0fZtNKPQglDZD3erpptH8YvrgzTESNTSBGciVVWL1QAKSGTEanAwcxoevE6Um+ek+dolHibqYGB9mYGM3FidCgnonY6jZZTfyjPThICAqIU8KX2o4ctlvijlvaZtLYCCt1dXVB+Phxw+vPkMrI8vJyaIv0Qom7GGa5J6csHFjivisB8q3FS6xWMH6MHnqlbSavUePQoUMyGNi7mW2ggevi8LD8nV9/sAuavz4ug9G68tmUjh7Y/2KzxMULP2g1ciQtanzc1wc333STqUalzsv90Hxwl/z+jpkLIR2EqQU9yI3z5lOPHhnjVCirnXKQjkROwsb2P8nv53lnwYbye9LGf3wyMCADYlHVVgxpwCkVyrmRL2F96x/l15yvM6Fu2Q8hf2Ju2rWBWCxxA/HaPfTgcEy7xi/b/yJHDtSdF31y5EjXEhejiBVADMOhuvMv99rRu19eUPdf/U2oGJmS9m0gFkrcajOGtNopPmP9wZeiPqNu6cOwrfPFMVUPj8rzeKD0+uuZlLhYwaxYdrOZCsanZUzjfZsLI/rGR+3w2WfvwI9KbxvjIdBfPNzyW/k9/u2l5Y9qbqONUziwCmMBhxoQkyVudWxZm6mRUlbzYkR/0fOq/LrtaBO8euvGUV5ifetLcPKLK/m1btnDcRu8Vt51F5dwsB6chKkFW1EREIPC8752vMixipcD+MSsO+GF/mY5SlTt2SSnDfQV2441yVEFtaF8lW6bxq7du7mNHKzBxf4X9CALyuYaWd0bm1q04PDzcgARhNtuWCanD4wS6C92hPfDW58elf9+y9Qy2DBPvz1jsYX5I4nyHIkqcfPdHri6pMTI6qvUqSUzJqVU8FalYCppur1GBgShUMDQ8xlqLeIUjkQKx4Cg9yiZNm28Vf16pSw3UQP7U5TpjQjCKys2Ssa0Kvp39CCxJhU76jweDwhpA2KgxK1Qj1KPTSuVvPwYvOLRL3QdOQJ5eXnyZ0vAA7lfLYGCiZOgd38n9EJndH0cWDw4OMitAU22lAoGe3En5eSMFz0ateDgJnLgYOHqNWvGzBxbDIt0TZ6QPiDvkgpGp8StHAMHaV/nri9FnHD6Ja4SQeKlFi3PIe49nkaA6PTi+gUcaS4scbuPhzX/psytVcOxQByy9NKxcG+8bn5frCHlzm/gTVmGBo3fBkndmYWNZqk8hpSWML3kS9VgPqkIVVmkMYPHSgWFval4tx6z39nz5l65qX3ZrieiTexC+tKYrF2gVcpyIxxDirPVcZK0UV3lK4G79zwN/RlX7u1ZkGajweyUuDGTtf/vOYxMcEmGsk30XGLnXOCd30XBwE66m6eWiTNvssRFUBRlpsqPu2/vc9GhgkrvLYrXXlls5MPR9bwBgs3sC8rm+mOrFccKe2sVMHCYoAKGkLUSV5lqmcmjGTULhnoM6bzOy6P+zqrLHisjz2iHn3LiOq089d4OuNwzQR7ppTXVIBYMrTGkrNKK1XuNOkHKnQy5huPvA51RPxHbRf/8kdejYOCgHwRDS6x6afNSeGjA+YsOgAOHCT578h+yn1ADglA837VTXgcHA+kN+hEdd9aEHbFcw4GpAk+uYjir9tTKn6nB0Br0I2RfayvKw9xXK4qXQGGTuAAjcXJEKasGBKWMHxVgJKZaifC4cziGVPEMcplaOFvuL7nfd4tmpxqOGhNjSOnDEeJtx7BU/GdT05g7+5TBBOgIt0KHxnf6SH+MkD0VFXj5rlYwYjz4wAOmHrCTDg1TyYgcXAqnDIpSNPEaHhkORg2pmfthC6W+PG63c6oVocQqL9cdioVDRA8hZbDP2Vg4uCtnB1pbYOTcWcPrn33/sLwIWRcZSxqMNaRYHXJz98Ce+hfg8NNPwqRry+DSIz+Dyzn6z7DPOfwuDG2rk99/p7kDcktmizNtQWSqZDgWDq7aOvrDvfLr+Z6jkPGbX0HFH/4ME/MLNNc98erL0EfAQI0MnhVn2aJypYsQ+1Vi0wpXcHy+tBLc/tvl95dPhqFnw49hsjtXLm3Vy8hb+6Bv89PR7w2u/B4UzJ0vzrJlM5ob9Z5ROAgtXPmOso2boicavUTLQ3eP8iD4GaYeRYue2woX5t8ozrANFeYXhMbAwWPFgmlk+ct/0wQkFhYEY/Z9D4mza9Nv5GRnNyv/jm0hbQbObmmtAIIgKNUIvv/yoxOGwEi3W03aUbHXOypAZPIcOfQAUacSvYiRjreatO433CH1wwFHwSH9IVQf6kLv4eMRkPlPPSMDov5sepX+GNF0vdWkFRUVeEcFB62ON1whwNuOY7Ro/cn3R32GaQVhwagSr8xlFTlKS0u5u/LtCBu/CvPzt6s/0+pb2ckjGGrziWlEr4oRMi+vJz+CmUM3ckgrNEqpBfOOl1cw0GcoUUNtUjGCOCWt8Kariic3xn4Wr1e2kYcdRgAO/fynY8DQK3NdF86LM22hhJ1aXLzFKBxbkr3DGdJJDj3yYLQyUYOh1w7iffn3IsWYNqIF4diUEhcOsmI4mTtc0HlQbjaPB0Y8QDI/+Vj0zJrUZG/Rdq3P9YYJYvTYnKwdLn/gB9Dy+g4YnHM9tJUuhLYXX9Rd33XHd2Hq0CB48jyib8VklVIybVqDWTjwCzXJMqZ4gu9qNxm8Hn1MnG3zVUqD0gtr1HMAaSlrEIcvdYWjviYXFsb1l+ONId0iDmEKe43CouCTVbeGLMFBwo2IHikqj9tdq1sxGthGrTiMKQlG8JlVK4O24CDRo04cztTS9ClTx73ojc5bwQ1FxCFNnL64eJHZtnOyshvGixqG4SCVC5P0MnzpkiBBQ2FrT5Y2osjsGTMMnUvDM94kQDC1UB+E/Nn5C4IEDX16bpDVprdIUSNMFQ6ix1ns7Ymzg4IGlU5LYJw+d45JQHpl3WObjK5sCg4y4Zq6Of3g888FESrtDjGbJbLWzMpWJlJjvgrT3GOMHEPDI4IKYkSD7/+XxabrpKgRZAoHMaf30t7zpu4eQYakrU3/ZlGphK0UFJZuwUC69KlVL3in/tf2t0DDm/9JazAwYrzz4YdM0okUNSIJgYMAgsaG2ogx7ATaHepgFVIdAcbWpn+x2HSt2XSiyGXnfyVPL8bHIflo/Ap8IB0+d8w/dy4Evr0c3NnZaQHGX1sPwg5pYcGcBMYKq1922f3fyZME9wGlcR/4OAd8alBeVhbcv2ypBMo3UhYKTCH1b7awKlsxjVxtJZ1Qg4MA4ieAUPMgCMgnAwNy9FhyzTUwr2QmTMl3/j1GsQ0jfPo0HPywlxUUChgrJDBs1cQuWnsjARLAF5q/EB8Mg08OUj9aSsiwAW2wuxEXzT1iAQg++wOfvx7z9EIhxmBQh4MVIGqzKqSrBgmMtbQ25mKxh6wAUcyq8iQhIXZgMIODJSBqsyrEDgymcLAERJjVUcI+Eya95S7We067HUQtNKkYRdLYrFIzn0mBQwUIRpAKFtvHCNJ76lQ6QREhYDCd8O5K1K8hTe0ICJN7jqFZbZNK3jRIM2FpudduAxdXcKggWQ+M5uCmgVkNEjASMtjblYxfyDrNYIrpPt6balHkcQmKhE4RcSXz10qQbIIrk7WpK4XMaoj4i4TfYdqV7F9OogimGb8wq2NUa2ZAcMrBoYIkQKKIT5hV2VtgtAgncydcPB0RUtGgYV0HlNtFHGJWw8RbcHFPNhePR4glJJya1TBJIQ087ZSL58uIQBIgkFBLNxyZVS6hcAQcMaBg41k1UGxES6JZxbSxnZf04Xg4VJD4CCAIiu12EvQgGEUSkGYwSuBd+xqSbTRTFo44oKyyUwojGFjNYFXDoI0iSKJEyGnH19FwaMDiJ5BUWoEFUwymGpsw4ILPrQk6JUKkBRwasFQQI4uvc8h7n565NWhWEYAIeT2uQJGoPg8BR+LgGVMqY3p5u6N9jGdweiQwq/8JMADZNb2d70jCwQAAAABJRU5ErkJggg==\"","import React, { useState } from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport { useToasts } from 'react-toast-notifications';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider from \"react-bootstrap-table2-toolkit\";\nimport UnitService from \"./../../../services/UnitService\";\nimport LectureService from \"./../../../services/LectureService\";\nimport CourseService from \"./../../../services/CourseService\";\nimport AssessmentService from \"./../../../services/AssessmentService\";\nimport DateUtils from \"./../../../utils/DateUtils\"\nimport CC_icon from \"./../../../images/course.png\";\nimport CU_icon from \"./../../../images/units.png\";\nimport CL_icon from \"./../../../images/lessons.png\";\nimport QZ_icon from \"./../../../images/Quizzes.png\";\nimport CourseDrawer from \"./../../views/instructor/drawers/CourseDrawer\";\nimport UnitDrawer from \"./../../views/instructor/drawers/UnitDrawer\";\nimport LectureDrawer from \"./../../views/instructor/drawers/LectureDrawer\";\nimport AssessmentDrawer from \"./../../views/instructor/drawers/AssessmentDrawer\";\n\nimport \"./links.css\";\n\nconst DashboardManageCreateContentLinks = () => {\n\n const [showEmergentCoursesDrawer, setShowEmergentCoursesDrawer] = useState(false);\n const [showEmergentUnitsDrawer, setShowEmergentUnitsDrawer] = useState(false);\n const [showEmergentLessonsDrawer, setShowEmergentLessonsDrawer] = useState(false);\n const [showEmergentAssessmentsDrawer, setShowEmergentAssessmentsDrawer] = useState(false);\n\n const [emergentLessonTarget, setEmergentLessonTarget] = useState(null);\n const [emergentUnitTarget, setEmergentUnitTarget] = useState(null);\n const [emergentCourseTarget, setEmergentCourseTarget] = useState(null);\n const [emergentAssessmentTarget, setEmergentAssessmentTarget] = useState(null);\n\n const { addToast } = useToasts();\n\n const [showToast, setShowToast] = useState(false);\n \n const dashboardLinks =[\n {title:\"Create Course\", target: \"courses\", icon: CC_icon},\n {title:\"Create Unit\", target: \"units\", icon: CU_icon}, \n {title:\"Create Lesson\", target: \"lessons\", icon: CL_icon}, \n {title:\"Create Assessment\", target: \"assessments\", icon: QZ_icon}\n ]\n\n const resetTargets = ()=>{\n\n setEmergentLessonTarget(null);\n setEmergentUnitTarget(null);\n setEmergentCourseTarget(null);\n setEmergentAssessmentTarget(null);\n\n }\n const openDashboardTilesTo = (target) => {\n\n resetTargets();\n\n if (target === \"courses\"){\n setShowEmergentCoursesDrawer(true)\n }\n if (target === \"units\"){\n setShowEmergentUnitsDrawer(true)\n }\n if (target === \"lessons\"){\n setShowEmergentLessonsDrawer(true)\n }\n if (target === \"assessments\"){\n setShowEmergentAssessmentsDrawer(true)\n }\n };\n\n //show toast!\n const creatingSuccess = (arg)=>{\n if(!showToast){\n addToast(`Your ` + arg + ` has been successfully created`, {appearance: 'success', autoDismiss: true});\n setShowToast(true);\n }\n }\n\n const edit = row => {\n\n if(row.type === \"COURSE\"){\n setEmergentCourseTarget(CourseService.get(row.id));\n setShowEmergentCoursesDrawer(true);\n\n }else if(row.type === \"UNIT\"){\n setEmergentUnitTarget(UnitService.get(row.id));\n setShowEmergentUnitsDrawer(true);\n }else if(row.type === \"LECTURE\"){\n setEmergentLessonTarget(LectureService.get(row.id));\n setShowEmergentLessonsDrawer(true);\n }else{\n setEmergentAssessmentTarget(AssessmentService.get(row.id));\n setShowEmergentAssessmentsDrawer(true);\n }\n };\n\n \n\n const renderLastAddedSumary = () => {\n const columns = [\n {\n dataField: \"name\",\n text: \"Name\",\n sort: false,\n headerAlign: \"center\",\n align: \"center\",\n formatter: (cellContent, row) => {\n return (\n edit(row)} style={{ color: \"#57b3e1\", textDecoration: \"underline\", cursor: \"pointer\" }}>\n {row.name}\n \n );\n }\n },\n {\n dataField: \"type\",\n text: \"Type\",\n sort: false,\n headerAlign: \"center\",\n align: \"center\"\n },\n {\n dataField: \"date\",\n text: \"Date\",\n sort: false,\n headerAlign: \"center\",\n align: \"center\"\n }\n ];\n\n let lastContents = [];\n\n lastContents.push(CourseService.getLatest());\n\n lastContents.push(UnitService.getLatest());\n\n lastContents.push(LectureService.getLatest());\n\n lastContents.push(AssessmentService.getLatest());\n\n lastContents = lastContents.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt));\n\n const lastContentData = lastContents.map(lastContent => {\n\n return {\n id: lastContent._id,\n name: lastContent.title,\n type: lastContent.type,\n date: DateUtils.getDateCreateTime(lastContent.createdAt)\n };\n });\n\n\n return (\n \n {props => (\n
    \n \n
    \n )}\n
    \n );\n };\n\n const createDashboarTiles = () => {\n return dashboardLinks.map((dashboardLink, index) => {\n return (\n openDashboardTilesTo(dashboardLink.target)}>\n \n \n
    {dashboardLink.title}
    \n
    \n
    \n \n
    \n
    \n
    \n );\n });\n };\n return (\n
    \n
    What would you like to create today?
    \n
    \n {createDashboarTiles()}\n
    \n setShowEmergentLessonsDrawer(false)} data={emergentLessonTarget} callback={()=>creatingSuccess('Lesson')}/>\n setShowEmergentUnitsDrawer(false)} data={emergentUnitTarget} callback={()=>creatingSuccess('Unit')}/>\n setShowEmergentCoursesDrawer(false)} data={emergentCourseTarget} callback={()=>creatingSuccess('Course')}/>\n setShowEmergentAssessmentsDrawer(false)} data={emergentAssessmentTarget} callback={()=>creatingSuccess('Assessment')}/>\n
    Recently Created
    {renderLastAddedSumary()}
    \n
    \n );\n};\n\nexport default DashboardManageCreateContentLinks;\n","export default \"data:image/png;base64,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\"","import React, {useEffect} from 'react';\nimport DashboardManageCreateContentLinks from \"../../../../widgets/links/DashboardManageCreateContentLinks\";\nimport CacheService from \"../../../../../services/CacheService\";\nimport LSBreadcrumb from \"./../../../../widgets/breadcrumb/LSBreadcrumb\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\n\nconst CreateContentPanel = () => {\n\n //cache refresh\n useEffect(()=>{(async() => {\n console.log(`Loading cache ...`);\n document.title = 'LimeSpring Portal - Dashboard';\n await CacheService.refresh()\n })()\n }, []);\n\n return (\n <>\n \n \n \n );\n}\n \nexport default CreateContentPanel;","import React, { useState, useEffect } from \"react\";\nimport { Card } from \"react-bootstrap\";\nimport { useHistory } from \"react-router-dom\";\nimport CO_icon from \"./../../../images/createmanage.png\";\nimport UN_icon from \"./../../../images/units.png\";\nimport LE_icon from \"./../../../images/lessons.png\";\nimport QZ_icon from \"./../../../images/Quizzes.png\";\nimport QU_icon from \"./../../../images/Questions.png\";\nimport MU_icon from \"./../../../images/tutorials.png\";\nimport DeepLinking from \"../../../utils/DeepLinking\";\n\nimport \"./links.css\";\n\nconst DashboardManageContentLinks = () => {\n\n const history = useHistory();\n \n const dashboardLinks =[\n {title:\"Courses\", destination:DeepLinking.MANAGEMENT.COURSES_VIEW_PATH, icon: CO_icon, state: \"courses\"},\n {title:\"Units\", destination:DeepLinking.MANAGEMENT.UNITS_VIEW_PATH, icon: UN_icon, state: \"units\"},\n {title:\"Lessons\", destination:DeepLinking.MANAGEMENT.LECTURES_VIEW_PATH, icon: LE_icon, state: \"lectures\"},\n {title:\"Assessments\", destination:DeepLinking.MANAGEMENT.ASSESSMENTS_VIEW_PATH, icon: QZ_icon, state: \"assessments\"},\n {title:\"Questions\", destination:DeepLinking.MANAGEMENT.QUESTIONS_VIEW_PATH, icon: QU_icon, state: \"questions\"},\n {title:\"Multimedia\", destination:DeepLinking.MANAGEMENT.LIBRARY_VIEW_PATH, icon: MU_icon, state: \"library\"}\n ]\n const openDashboardTilesTo = (link, state) => {\n history.push({pathname: link,\n state: { currentTarget: state }\n });\n };\n\n const createDashboarTiles = () => {\n return dashboardLinks.map((dashboardLink, index) => {\n return (\n \n openDashboardTilesTo(dashboardLink.destination, dashboardLink.state)}>\n \n \n
    {dashboardLink.title}
    \n
    \n
    \n \n
    \n
    \n
    \n );\n });\n };\n return (\n
    \n
    What would you like to manage?
    \n
    \n {createDashboarTiles()}\n
    \n
    \n );\n};\n\nexport default DashboardManageContentLinks;\n","export default \"data:image/png;base64,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\"","import React, {useEffect} from 'react';\nimport DashboardManageContentLinks from \"../../../../widgets/links/DashboardManageContentLinks\";\nimport CacheService from \"../../../../../services/CacheService\";\nimport LSBreadcrumb from \"./../../../../widgets/breadcrumb/LSBreadcrumb\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\n\nconst ManageContentPanel = () => {\n\n //cache refresh\n useEffect(()=>{(async() => {\n console.log(`Loading cache ...`);\n document.title = 'LimeSpring Portal - Dashboard';\n await CacheService.refresh()\n })()\n }, []);\n\n return (\n <>\n \n \n \n );\n}\n \nexport default ManageContentPanel;","import React from \"react\";\nimport { Modal, Button } from \"react-bootstrap\";\nimport \"./confirmdeletemodal.css\";\n\nconst TutorialsModal = props => {\n const { show, onHide, video } = props;\n\n return (\n \n \n \n \n \n );\n};\n\nexport default TutorialsModal;\n","import ApiService from \"./ApiService\";\nimport ApiPath from \"../utils/ApiPath\";\nimport Config from \"../config/Config\";\nimport MockService from \"./MockService\";\nimport LocalStorageService from './LocalStorageService';\nimport ResponseUtil from '../utils/ResponseUtil';\n\nexport default {\n getAll: () => {\n return LocalStorageService.get(\"tutorials\");\n },\n\n get: id => {\n return LocalStorageService.get(\"tutorials\").find(\n lecture => lecture._id === id\n );\n },\n\n getLatest: () => {\n return LocalStorageService.get(\"tutorials\")[0];\n },\n\n getByIdsFromRemote: async (ids) => {\n const response = await new ApiService().get(ApiPath.GET_TUTORIALS_BY_IDS_ENDPOINT.replace(':ids', ids));\n if(response && response.status === 200) { \n const { lectures } = response.data;\n return lectures;\n } \n return [];\n },\n\n getByIds: ids => {\n const lectures = LocalStorageService.get(\"tutorials\");\n const _lectures = ids.map(id => lectures.find(lecture => lecture._id === id));\n if(!_lectures || _lectures.length === 0) {return [] }\n const assignedLectures = _lectures.filter(l => l !== null && l !== undefined);\n\n //populate quizzes on every lecture\n // assignedLectures.forEach(assignedLecture => {\n // const quizIds = assignedLecture.assessments;\n // if (quizIds && quizIds.length > 0) {\n // //usually, when page is cached, the quizIds will\n // //already be populated with the quiz, so we should not re-populate!\n // if (typeof quizIds[0] === \"string\") {\n // let quizzes = [];\n // quizIds.forEach(quizId => {\n // const quiz = AssessmentService.get(quizId);\n // quizzes.push(quiz);\n // });\n // assignedLecture.assessments = quizzes;\n // }\n // }\n // });\n\n return assignedLectures;\n },\n\n clone: async (lecture) => {\n const clone = {...lecture};\n delete clone._id;\n clone.title = lecture.title + \" COPY\";\n try { \n let response = await new ApiService().post(ApiPath.CREATE_LECTURE_ENDPOINT, clone);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n getAllFromRemote: async () => {\n try { \n let response = await new ApiService().get(ApiPath.GET_TUTORIALS_ENDPOINT);\n if (ResponseUtil.isOK(response)) {\n const { tutorials } = response.data;\n return tutorials;\n } else {\n return [];\n }\n } catch (error) {\n console.error(`TutorialService | Error while attempting to get response: ${error}`);\n return [];\n }\n },\n\n create: async (payload) => {\n try { \n let response = await new ApiService().upload(ApiPath.CREATE_LECTURE_ENDPOINT, payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n update: async (id, payload, status) => {\n try { \n let response = await new ApiService().post(ApiPath.UPDATE_TUTORIAL_ENDPOINT.replace(':id', id).replace(':status', status), payload);\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to get response: ${error}`);\n return false;\n }\n },\n\n remove: async (id) => {\n if (Config.mockAPI) { return ResponseUtil.isOK(await MockService.removeLecture()); }\n try { \n let response = await new ApiService().delete(ApiPath.REMOVE_TUTORIAL_ENDPOINT.replace(':id', id));\n if (ResponseUtil.isOK(response)) {\n return true;\n } else {\n return false;\n }\n } catch (error) {\n console.error(`LectureService | Error while attempting to remove lecture. response: ${error}`);\n return false;\n }\n }\n};\n","export default class Tutorial {\n\n constructor(title,\n description,\n capture,\n url,\n duration,\n thumbnail\n ) {\n this.title = title;\n this.description = description;\n this.thumbnail = thumbnail;\n this.duration = duration; \n this.capture = capture; //transient field\n this.url = url;\n\n }\n \n getTitle() {\n return this.title;\n }\n \n setTitle(title) {\n this.title = title;\n }\n\n \n \n getDescription() {\n return this.description;\n }\n \n setDescription(description) {\n this.description = description;\n }\n \n getUrl() {\n return this.url;\n }\n \n setUrl(url) {\n this.url = url;\n }\n\n getDuration() {\n return this.duration;\n }\n\n setDuration(duration) {\n this.duration = duration;\n }\n\n getThumbnail() {\n return this.thumbnail;\n }\n\n setThumbnail(thumbnail) {\n this.thumbnail = thumbnail;\n }\n\n \n \n toString() {\n return JSON.stringify(this);\n }\n }\n ","import React, { useState, useEffect, useRef } from \"react\";\nimport Config from \"../../../config/Config\";\nimport { Typeahead } from \"react-bootstrap-typeahead\";\nimport { Alert, Button, Badge, Spinner, Table, Form} from \"react-bootstrap\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport Steps, { Step } from \"rc-steps\";\n\nimport ProgressBar from \"react-bootstrap/ProgressBar\";\nimport ApiPath from \"../../../utils/ApiPath\";\nimport axios from 'axios';\nimport LocalStorageService from \"./../../../services/LocalStorageService\";\n import Tutorial from \"./../../../payloads/Tutorial\";\n\nimport StringUtils from \"./../../../utils/StringUtils\";\nimport ThumbnailCreator from \"./../../widgets/thumbnails/ThumbnailCreator\";\n\nimport LimespringVideoPlayer from \"./../../widgets/videoplayer/LimespringVideoPlayer\";\n\n\nimport \"./unitbuilder.css\";\n\n//css\nimport \"rc-steps/assets/index.css\";\nimport \"rc-steps/assets/iconfont.css\";\nimport \"react-rangeslider/lib/index.css\";\n\n\nconst TutorialBuilder = props => {\n\n const { tutorial, onHide, onProceed } = props;\n\n const parser = new DOMParser();\n\n const [step, setStep] = useState(0);\n\n //utilities\n const [videoCueForScreenshot, setVideoCueForScreenshot] = useState(0);\n const [videoDurationInSecs, setVideoDurationInSecs] = useState(0);\n const [videoThumbnail, setVideoThumbnail] = useState(null);\n\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [thumbnail, setThumbnail] = useState(\"\");\n\n const [duration, setDuration] = useState(\"\");\n\n\n //temp vars\n const [tempLecture, setTempLecture] = useState(null);\n const [isThumbnailGenerated, setIsThumbnailGenerated] = useState(false);\n\n const [videoSource, setVideoSource] = useState(null);\n\n const videoPlayer1 = useRef(null);\n const lectureVideoUpload = useRef(null);\n\n const [alertShow, setAlertShow] = useState(false);\n const [showFailedAlert, setShowFailedAlert] = useState(false);\n\n const [progressUpload, setProgressUpload] = useState(0);\n\n const [wrongInputMessage, setWrongInputMessage] = useState(\n \"All fields are required. Please review.\"\n );\n\n const failedResponseMessage = \"There was a problem creating lecture. Please try again.\";\n const [progress, setProgress] = useState(false);\n\n\n useEffect(() => {\n\n const load = async () => {\n\n reset();\n\n setTitle(tutorial ? tutorial.title : ``);\n setDescription(tutorial && tutorial.description ? tutorial.description : tutorial && tutorial.data && tutorial.data.description ? tutorial.data.description:``);\n setUrl(tutorial ? tutorial.url : ``);\n setDuration(tutorial ? tutorial.duration : ``);\n \n setThumbnail(tutorial ? tutorial.thumbnail : ``);\n\n setVideoThumbnail(tutorial && tutorial.thumbnail !== \"\" ? tutorial.thumbnail : null);\n setVideoSource(tutorial && tutorial.url !== \"\" ? tutorial.url : null);\n\n if (tutorial) {\n videoPlayer1.current.src = tutorial.url;\n }\n }\n\n load();\n }, [tutorial]);\n\n const reset = () => {\n resetFlags();\n resetFields();\n };\n\n const resetAndHide = () => {\n resetFlags();\n resetFields();\n };\n\n const resetFlags = () => {\n setStep(0);\n setAlertShow(false);\n setIsThumbnailGenerated(false);\n };\n\n const resetFields = () => {\n setTitle(``);\n setDescription(``);\n setUrl(``);\n setDuration(``);\n\n setThumbnail(``);\n setVideoDurationInSecs(0);\n setVideoCueForScreenshot(0);\n setVideoThumbnail(null);\n setVideoSource(null);\n setProgressUpload(0);\n\n //reset video player\n videoPlayer1.current.src = '';\n lectureVideoUpload.current.value = '';\n };\n\n const validateForm = () => {\n if (StringUtils.isEmpty(title)) {\n setWrongInputMessage(\"Title is required. Please review.\");\n return false;\n }\n\n if (!videoSource) {\n setWrongInputMessage(\"Video is required. Please review.\");\n return false;\n }\n\n return true;\n };\n\n const update = async () => {\n\n if (validateForm()) {\n setProgress(true);\n\n let _videoDuration = \"\";\n if (videoDurationInSecs === 0) {\n _videoDuration = duration;\n } else {\n _videoDuration = videoDurationInSecs;\n }\n\n let captureAsBase64 = \"\";\n if (videoSource !== null && !videoSource.includes('https:')) {\n captureAsBase64 = await fetch(videoSource).then(r => r.blob());\n }\n\n //update thumbnail if it was updated!\n let updatedThumbnail = thumbnail;\n if(videoThumbnail && videoThumbnail !== '') {\n updatedThumbnail = videoThumbnail;\n }\n\n let payload = new Tutorial(\n title,\n description,\n captureAsBase64,\n url,\n duration, \n updatedThumbnail\n );\n\n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n \n let response = null;\n\n if(captureAsBase64){ //if new video is included\n response = await axios.post(`${ApiPath.UPDATE_TUTORIAL_ENDPOINT.replace(':id',tutorial.id)}`, form, { headers: {'Content-Type': 'multipart/form-data'},\n onUploadProgress: ProgressEvent => {\n setProgressUpload(Math.round((100 * ProgressEvent.loaded) / ProgressEvent.total))\n }})\n } else {\n //no upload needed\n response = await axios.post(`${ApiPath.UPDATE_TUTORIAL_ENDPOINT.replace(':id',tutorial.id)}`, form);\n }\n \n \n if (response && (response.status === 200 || response.status === 201 )) {\n // callback();\n onProceed()\n const { tutorials } = response.data;\n LocalStorageService.store({ tutorials: tutorials });\n\n resetAndHide();\n } else {\n setShowFailedAlert(true);\n }\n\n } else {\n setAlertShow(true);\n return;\n }\n setProgress(false);\n };\n\n const create = async () => {\n if (validateForm()) {\n setProgress(true);\n \n\n let captureAsBase64 = \"\";\n if (url === \"\") {\n captureAsBase64 = await fetch(videoSource).then(r => r.blob());\n }\n\n let _videoDuration = \"\";\n if (videoDurationInSecs === 0) {\n _videoDuration = duration;\n } else {\n _videoDuration = videoDurationInSecs;\n }\n\n let payload = new Tutorial(\n title,\n description,\n captureAsBase64,\n url,\n duration, \n videoThumbnail\n\n );\n \n \n const form = new FormData();\n for (const key in payload) {\n form.append(key, payload[key]);\n }\n \n const response = await axios.post(`${ApiPath.CREATE_TUTORIAL_ENDPOINT}`, form, { headers: {'Content-Type': 'multipart/form-data'},\n onUploadProgress: ProgressEvent => {\n setProgressUpload(Math.round((100 * ProgressEvent.loaded) / ProgressEvent.total))\n }})\n \n if (response && (response.status === 200 || response.status === 201 )) {\n \n // onProceed();\n const { tutorial } = response.data;\n // LocalStorageService.store({ tutorial: tutorial });\n \n\n resetAndHide();\n onProceed();\n } else {\n setShowFailedAlert(true);\n }\n } else {\n setAlertShow(true);\n return;\n }\n setProgress(false);\n };\n\n const onVPSeeked = value => {\n \n if (videoCueForScreenshot !== value) {\n setVideoCueForScreenshot(value);\n videoPlayer1.current.currentTime = value;\n }\n };\n\n const showVideoPlayerStep1 = () => {\n return (\n onVPSeeked(e.target.currentTime)}\n controls\n >\n \n \n );\n };\n\n const showVideoPlayerStep3 = () => {\n if (!tempLecture) {\n return \"\";\n }\n return (\n
    \n {}}/>\n
    \n );\n };\n\n const onFileSelected = e => {\n const file = e.target.files[0];\n if (!file) {\n return;\n }\n const size = file.size;\n const mime = file.type;\n const blob = URL.createObjectURL(file);\n setVideoSource(blob);\n videoPlayer1.current.src = blob;\n\n\n videoPlayer1.current.onloadedmetadata = () => {\n setVideoDurationInSecs(videoPlayer1.current.duration);\n setVideoCueForScreenshot(Config.defaultThumbnailSeconds);\n };\n };\n\n const validateStep2 = () => {\n if (!videoSource || videoSource === \"\") {\n setAlertShow(true);\n } else {\n const clone = { ...tempLecture };\n clone[\"url\"] = videoSource;\n clone[\"thumbnail\"] = videoThumbnail;\n setTempLecture(clone);\n setStep(step + 1);\n }\n };\n\n const validateStep1 = () => {\n if (!title || title === \"\") {\n setAlertShow(true);\n } else {\n const clone = { ...tempLecture };\n clone[\"title\"] = title;\n clone[\"description\"] = description;\n \n setTempLecture(clone);\n setStep(step + 1);\n }\n };\n\n\n return (\n
    \n setAlertShow(false)}\n dismissible>\n {wrongInputMessage}\n \n\n setShowFailedAlert(false)}\n dismissible>\n {failedResponseMessage}\n \n\n
    \n \n setStep(0)}/>\n setStep(1)}/>\n {/* setStep(2)}/> */}\n \n
    \n\n
    \n \n setStep(step - 1)}\n >\n Back\n \n
    \n
    \n Title\n setTitle(e.target.value)}\n />\n
    \n \n
    \n Description\n setDescription(e.target.value)}\n >\n
    \n
    \n
    \n \n
    \n
    \n\n
    \n \n
    \n \n onFileSelected(e)}\n />\n
    \n\n {showVideoPlayerStep1()}\n\n
    \n
    Thumbnail Preview:
    \n
    \n setVideoThumbnail(thumb)}\n originalThumbnail={thumbnail}\n />\n
    \n \n
    \n \n
    \n
    \n {!progress ? (\n {\n tutorial ? update() : create();\n }}\n >\n {tutorial ? \"Update\" : \"Create\"}\n \n ) : (\n \n )}\n \n
    \n
    \n\n
    \n \n
    \n \n
    \n {step === 3 ? showVideoPlayerStep3() : \"No Video\"}\n
    \n
    \n
    \n \n \n {!progress ? (\n {\n tutorial ? update() : create();\n }}\n >\n {tutorial ? \"Update\" : \"Create\"}\n \n ) : (\n \n )}\n
    \n
    \n\n \n \n );\n};\n\nexport default TutorialBuilder;","import React, {useState, useEffect} from 'react';\nimport {Button, Modal, OverlayTrigger, Popover, Badge, Alert} from 'react-bootstrap';\n\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\nimport 'react-bootstrap-table2-paginator/dist/react-bootstrap-table2-paginator.min.css';\nimport TutorialBuilder from \"./TutorialBuilder\"\n\nimport './modalstudent.css';\n\nconst TutorialModal = (props) => {\n const { tutorial, show, onHide, onProceed } = props;\n \n const modalTitle = 'Tutorial';\n const uploadFailedMessage = 'There was a problem uploading students. Please try again';\n const [showSuccess, setShowSuccess] = useState(false);\n\n const [showError, setShowError] = useState(false);\n\n const [imported, setImported] = useState(false);\n const [errorMessage, setErrorMessage] = useState(uploadFailedMessage);\n\n\n const reset = () => {\n setShowError(false);\n setShowSuccess(false);\n\n }\n\n const resetAndHide = () => {\n reset(); \n onHide(); \n }\n\n const onProceedToTutorials = () => {\n setShowError(false);\n setShowSuccess(false);\n onProceed();\n onHide(); \n }\n\n return (\n resetAndHide()}\n size=\"lg\"\n width=\"850px\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n backdrop=\"static\"\n id=\"batch-import-modal\"\n dialogClassName=\"custom-modal-width\"\n >\n \n \n

    {modalTitle}

    \n
    \n
    \n \n setShowError(false)}\n >\n {errorMessage}\n \n setShowSuccess(false)}\n >\n Tutorial successfully save!\n \n \n\n resetAndHide()} \n onProceed={()=> onProceedToTutorials()}\n >\n\n \n \n \n {/* */}\n \n \n );\n}\n \nexport default TutorialModal;","\nimport React, {useState, useEffect} from 'react';\n\nimport Config from \"../../../config/Config\";\nimport * as Icons from 'react-bootstrap-icons';\nimport {Alert, Spinner, Badge} from 'react-bootstrap';\nimport BootstrapTable from \"react-bootstrap-table-next\";\nimport ToolkitProvider, { Search } from \"react-bootstrap-table2-toolkit\";\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\nimport \"react-bootstrap-table2-toolkit/dist/react-bootstrap-table2-toolkit.min.css\";\n\nimport TutorialsModal from \"../modals/instructor/TutorialsModal\";\nimport { Card, ListGroup, Modal, Button } from 'react-bootstrap';\nimport TutorialService from './../../../services/TutorialService';\nimport CheckIcon from \"./../../../images/check.svg\";\nimport inProgressIcon from \"./../../../images/inprogress.svg\";\nimport \"./tutorialvideolink.css\"\nimport VideoTimeUtils from './../../../utils/VideoTimeUtils';\nimport TutorialModal from '../tutorials/TutorialModal';\nimport ConfirmDeleteModal from './../modals/instructor/ConfirmDeleteModal';\nimport ProfileService from './../../../services/ProfileService';\nimport SearchService from \"./../../../services/SearchService\";\n\nconst DashboardVideoTutorials = (props) => {\n\n const { SearchBar } = Search;\n const { reload } = props;\n const [showVideoPlayerModal, setShowVideoPlayerModal] = useState(false);\n const [video, setVideo] = useState(\"\");\n\n const [show, setShow] = useState(false);\n const [selectedVideo, setSelectedVideo] = useState(null);\n\n const [showError, setShowError] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [showSuccess, setShowSuccess] = useState(false);\n const [successMessage, setSuccessMessage] = useState('');\n\n const [tutorials, setTutorials] = useState([]);\n const [groupToRemove, setGroupToRemove] = useState([]);\n const [showTutorialModal, setShowTutorialModal] = useState(false);\n const [selectedTutorial,setSelectedTutorial] = useState(null);\n const [showWarningModal, setShowWarningModal] = useState(false);\n\n const [showRemoveBulkButton, setShowRemoveBulkButton] = useState(false);\n const [showGroupRemovalInProgress, setShowGroupRemovalInProgress] = useState(false);\n\n const profile = ProfileService.get();\n const isSuperAdmin = profile.role==='SuperAdmin';\n\n useEffect(() => {\n\n const load = async () => {\n setTutorials(await TutorialService.getAllFromRemote());\n }\n load();\n }, [reload]);\n\n const handleClose = () => setShow(false);\n const handleShow = (video) => {\n setSelectedVideo(video);\n setShow(true);\n };\n\n\n const edit = (tutorial) => {\n setSelectedTutorial(tutorial);\n setShowTutorialModal(true);\n }\n\n const addNew = () => {\n setSelectedTutorial(null);\n setShowTutorialModal(true);\n }\n\n const proceedDelete = () => {\n setShowWarningModal(false);\n removeBulk();\n }\n\n const removeBulk = async () => {\n if(!groupToRemove || groupToRemove.length === 0) { return; }\n setShowGroupRemovalInProgress(true);\n let errors = [];\n\n for (const id of groupToRemove) {\n const success = await TutorialService.remove(id);\n if(!success) { errors.push(id); }\n }\n\n if(errors.length > 0) { \n setErrorMessage('Error while trying to remove some tutorials. Please review and try again');\n setShowError(true); \n } else {\n setSuccessMessage('Successfuly removed tutorials.');\n setShowSuccess(true);\n }\n clearSelectionFields();\n setTutorials(await TutorialService.getAllFromRemote());\n }\n\n const checkIsEditable = (id) => {\n if(!id) { return true; }\n // const profile = ProfileService.get();\n if(isSuperAdmin && tutorials){\n return true;\n }\n return false;\n }\n\n\n const clearSelectionFields = () => {\n setGroupToRemove([]);\n setShowRemoveBulkButton(false);\n setShowGroupRemovalInProgress(false);\n }\n\n const handleSearch = async (type, newState) => {\n if(newState.length > 3){\n setTutorials(await SearchService.search('tutorials', newState));\n } else {\n if(!newState || newState.length === 0) setTutorials(await TutorialService.getAllFromRemote());\n }\n }\n\n const renderTutorials = () => {\n\n if (!tutorials) { return
    ; }\n\n let columns = [\n {\n dataField: \"thumbnail\",\n text: \"\",\n headerAlign: \"left\",\n align: \"left\",\n formatter: (cellContent, row) => {\n return (\n
    \n
    {row.title}
    \n
    \n \n
    openDashboardTilesTo(row)}>\n
    \n
    \n
    \n
    \n \n

    {row.data.description && row.data.description !== \"\" ? row.data.description : \"\"}\n

    \n
    \n \n
    \n \n );\n }\n },\n \n \n ];\n\n if(isSuperAdmin){\n columns.push(\n {\n dataField: \"edit\",\n text: \"\",\n headerAlign: \"center\",\n style: { width: '50px', textAlign: 'center' },\n headerClasses: \"panel-status-row\",\n align: \"left\",\n formatter: (cellContent, row) => {\n \n const isEditable = checkIsEditable(row.id);\n \n return (\n
    \n edit(row)}\n title= \"Edit Tutorial\"\n \n >\n \n \n \n
    \n \n );\n }\n }\n )\n }\n\n const tutorialsData = tutorials.map((tutorial) => {\n \n \n return {\n id: tutorial._id,\n thumbnail: tutorial.thumbnail?tutorial.thumbnail:\"\",\n url: tutorial.url?tutorial.url:\"\",\n title: tutorial.title, \n data: tutorial,\n search: [tutorial.title]\n };\n });\n\n // const profile = ProfileService.get();\n const selectRow = {\n mode: 'checkbox',\n clickToSelect: false,\n selected: groupToRemove,\n style: { width: '50px', textAlign: 'center' },\n hideSelectColumn: !isSuperAdmin,\n onSelect: (row, isSelect) => {\n if(!checkIsEditable(row.id)) { return false; }\n\n if (isSelect) {\n setGroupToRemove([...groupToRemove, row.id]);\n setShowRemoveBulkButton(true);\n } else {\n const selected = groupToRemove.filter(x => x !== row.id);\n setGroupToRemove(selected);\n if(selected.length === 0) { setShowRemoveBulkButton(false) }\n }\n },\n onSelectAll: (isSelect, rows) => {\n if (isSelect) {\n setGroupToRemove(rows.map(r => r.id));\n setShowRemoveBulkButton(true);\n } else {\n setGroupToRemove([]);\n setShowRemoveBulkButton(false);\n }\n } \n }\n\n return (\n
    \n \n \n {props => (\n
    \n \n
    \n )}\n \n
    \n );\n };\n\n const openDashboardTilesTo = (row) => {\n setShowVideoPlayerModal(true);\n setVideo(row.url);\n\n };\n\n const hideTutorialModal= () => {\n setSelectedTutorial(null);\n setShowTutorialModal(false);\n }\n\n const onProceedFromTutorialModal = async () => {\n setSelectedTutorial(null);\n setShowVideoPlayerModal(false);\n setTutorials(await TutorialService.getAllFromRemote());\n } \n \n\n \n return (\n \n
    \n \n\n
    \n
    Getting the most out of Limespring with our two minutes tutorials.
    \n {isSuperAdmin &&
    \n \n \n
    }\n
    \n {/* */}\n \n
    \n {renderTutorials()}\n
    \n \n {/*
    */}\n setShowWarningModal(false)}\n onProceed={() => proceedDelete()}\n />\n hideTutorialModal()} show={showTutorialModal} onProceed={()=> onProceedFromTutorialModal()}>\n setShowVideoPlayerModal(false)}\n video={video}\n />\n\n \n \n {selectedVideo?.title}\n \n \n \n

    Contenido del video para {selectedVideo?.title}

    \n
    \n \n \n \n
    \n
    \n );\n};\n\nexport default DashboardVideoTutorials;\n","import React from \"react\";\nimport * as Icons from \"react-bootstrap-icons\";\nimport \"./banner.css\";\n\nconst Banner = () => {\n\n\n return (\n

    Can’t find what you’re looking for?\n
    \n );\n};\n\nexport default Banner;\n","import React, {useEffect} from 'react';\nimport DashboardTutorialsLinks from \"../../../../widgets/links/DashboardTutorialsLinks\";\nimport DashboardVideoTutorials from \"../../../../widgets/links/DashboardVideoTutorials\";\nimport CacheService from \"../../../../../services/CacheService\";\nimport LSBreadcrumb from \"./../../../../widgets/breadcrumb/LSBreadcrumb\";\nimport Banner from \"../../../../widgets/banner/Banner\";\nimport DeepLinking from \"./../../../../../utils/DeepLinking\";\n\nconst TutorialsPanel = () => {\n\n //cache refresh\n useEffect(()=>{(async() => {\n console.log(`Loading cache ...`);\n document.title = 'LimeSpring Portal - Dashboard';\n await CacheService.refresh()\n })()\n }, []);\n\n return (<>\n \n {/* */}\n \n \n \n );\n}\n \nexport default TutorialsPanel;","import React, { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport Header from \"./../../../widgets/header/Header\";\nimport HomePanel from \"./panels/HomePanel\";\nimport SchoolsPanel from \"./panels/SchoolsPanel\";\nimport InstructorsPanel from \"./panels/InstructorsPanel\";\nimport StudentsPanel from \"./panels/StudentsPanel\";\nimport ClassesPanel from \"./panels/ClassesPanel\";\nimport UnitsPanel from \"./panels/UnitsPanel\";\nimport LecturesPanel from \"./panels/LecturesPanel\";\nimport AssessmentsPanel from \"./panels/AssessmentsPanel\";\nimport LibraryPanel from \"./panels/LibraryPanel\";\nimport ReportsPanel from \"./panels/ReportsPanel\";\nimport QuestionsPanel from \"./panels/QuestionsPanel\";\nimport AdminPanel from \"./panels/AdminPanel\";\nimport CoursesPanel from \"./panels/CoursesPanel\";\nimport CourseBuilderView from \"../builders/CourseBuilderView\";\nimport SidebarMenu from \"../../../widgets/sidebar/SidebarMenu\";\nimport LectureDrawer from \"./../drawers/LectureDrawer\";\nimport AssessmentDrawer from \"./../drawers/AssessmentDrawer\";\nimport CourseDrawer from \"./../drawers/CourseDrawer\";\nimport UnitDrawer from \"./../drawers/UnitDrawer\";\nimport ClassDrawer from \"./../drawers/ClassDrawer\";\nimport ReportDrawer from \"../drawers/ReportDrawer\";\nimport StudentReportDrawer from \"../drawers/StudentReportDrawer\";\nimport AnalyticsPanel from \"./panels/AnalyticsPanel\";\nimport CreateManageContentPanel from \"./panels/CreateManageContentPanel\";\nimport ManageStudentsPanel from \"./panels/ManageStudentsPanel\";\nimport ManageOtherOptionsPanel from \"./panels/ManageOtherOptionsPanel\";\nimport CreateContentPanel from \"./panels/CreateContentPanel\";\nimport ManageContentPanel from \"./panels/ManageContentPanel\";\nimport TutorialsPanel from \"./panels/TutorialsPanel\";\n\nimport \"./dashboardview.css\";\n\nconst DashboardView = props => {\n const { panel, query } = props;\n const history = useHistory();\n\n const [showDrawer, setShowDrawer] = useState(false);\n const [data, setData] = useState(null);\n const [reload, setReload] = useState(false);\n\n useEffect(() => {\n if (reload) {\n setReload(false);\n }\n }, [reload]);\n\n const renderPanel = panel => {\n\n if (panel === \"dashboard\") {\n return ;\n }\n if (panel === \"administrators\") {\n return ;\n }\n if (panel === \"schools\") {\n return ;\n }\n if (panel === \"instructors\") {\n return ;\n }\n if (panel === \"students\") {\n return {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}/>\n }\n if (panel === \"students-invite\") {\n return {\n setData(data);\n }}\n reload={reload} context={'invite'}/>\n }\n if (panel === \"analytics\") {\n return ;\n }\n if (panel === \"courses\") {\n return (\n {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}\n />\n );\n }\n if (panel === \"sections\") {\n return (\n {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}\n />\n );\n }\n if (panel === \"units\") {\n return (\n {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}\n />\n );\n }\n if (panel === \"lectures\") {\n return (\n {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}\n />\n );\n }\n if (panel === \"library\") {\n return ;\n }\n if (panel === \"assessments\") {\n return (\n {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}\n />\n );\n }\n if (panel === \"reports\") {\n return (\n {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}\n />\n );\n }\n if (panel === \"questions\") {\n return (\n {\n setData(data);\n setShowDrawer(true);\n }}\n reload={reload}\n />\n );\n }\n if (panel === \"course-builder\") {\n const id = query.id;\n return ;\n }\n\n if (panel === \"create-manage-content\") {\n return ;\n }\n\n if (panel === \"manage-students\") {\n return ;\n }\n\n if (panel === \"manage-options\") {\n return ;\n }\n\n if (panel === \"create-content\") {\n return ;\n }\n\n if (panel === \"manage-content\") {\n return ;\n }\n\n if (panel === \"tutorials\") {\n return ;\n }\n \n };\n\n const hideDrawer = () => {\n setShowDrawer(false);\n setData(null);\n setReload(true);\n };\n\n const renderDrawer = () => {\n if (panel === \"lectures\") {\n return (\n hideDrawer()}\n data={data}\n />\n );\n }\n if (panel === \"assessments\") {\n return (\n hideDrawer()}\n data={data}\n />\n );\n }\n if (panel === \"courses\") {\n return (\n hideDrawer()}\n data={data}\n />\n );\n }\n if (panel === \"students\") {\n return (\n hideDrawer()}\n data={data}\n />\n );\n }\n if (panel === \"units\") {\n return (\n hideDrawer()} data={data} />\n );\n }\n if (panel === \"sections\") {\n return (\n hideDrawer()}\n data={data}\n />\n );\n }\n if (panel === \"reports\") {\n return (\n hideDrawer()}\n data={data}\n />\n );\n }\n };\n\n return (\n
    \n
    \n
    \n
    \n history.push(panel)} panel={panel} />\n
    \n
    {renderPanel(panel)}
    \n {renderDrawer(panel)}\n
    \n \n
    \n );\n};\n\nexport default DashboardView;\n","// @flow\nimport React, { useState } from \"react\";\nimport { BrowserRouter, Route, Switch } from \"react-router-dom\";\nimport { ToastProvider } from \"react-toast-notifications\";\nimport ReactGA from 'react-ga';\nimport queryString from \"query-string\";\nimport Config from \"./../../config/Config\";\nimport DeepLinking from \"./../../utils/DeepLinking\";\nimport SessionService from \"./../../services/SessionService\";\nimport ProfileService from \"./../../services/ProfileService\";\nimport LocalStorageService from \"./../../services/LocalStorageService\";\n\nimport LoginView from \"./../views/common/login/LoginView\";\nimport LtiView from \"./../views/common/lti/LtiView\";\nimport LogoutView from \"./../views/common/logout/LogoutView\";\nimport RegisterView from \"./../views/common/register/RegisterView\";\nimport RecoveryView from \"./../views/common/recovery/RecoveryView\";\nimport SettingsView from \"./../views/common/settings/SettingsView\";\nimport NotFoundView from \"./../views/common/notfound/NotFoundView\";\nimport ForgotPassView from \"./../views/common/forgot/ForgotView\";\nimport PlanView from \"./../views/common/plans/PlanView\";\nimport PlanConfirmationView from \"./../views/common/plans/PlanConfirmationView\";\nimport PaymentView from \"./../views/common/payment/PaymentView\";\nimport BookstoreView from \"./../views/common/bookstore/BookstoreView\";\nimport BookstoreConfirmation from \"./../views/common/bookstore/BookstoreConfirmationView\";\nimport BookstoreCartView from \"./../views/common/bookstore/BookstoreCartView\";\nimport BookstorePaymentView from \"./../views/common/bookstore/BookstorePaymentView\";\nimport BookstoreDetailsView from \"./../views/common/bookstore/BookstoreDetailsView\";\nimport MaintenanceView from \"./../views/common/maintenance/MaintenanceView\";\nimport AccessibilityToolbar from \"./../widgets/accessibility/AccessibilityToolbar\";\nimport LectureVideoViewer from \"./../views/instructor/builders/LectureVideoViewer\";\n\n//student views (alias)\nimport StudentDashboardView from \"./../views/student/dashboard/DashboardView\";\nimport StudentUnitView from \"./../views/student/unit/UnitView\";\nimport StudentClassView from \"../views/student/class/ClassView\";\nimport StudentExamView from \"./../views/student/assessments/ExamView\";\nimport StudentExamResults from \"./../views/student/assessments/ExamResults\";\nimport StudentPlacementExamResults from \"./../views/student/assessments/PlacementExamResults\";\nimport StudentQuizView from \"./../views/student/assessments/QuizView\";\n// import AnonymousQuizView from \"../views/student/assessments/AnonymousQuizView\";\nimport QuizView from \"../views/student/assessments/QuizView\";\nimport StudentWorkbook from \"./../views/student/assessments/WorkbookView\";\nimport StudentAssignment from \"./../views/student/assessments/AssignmentView\";\n\nimport StudentGradebookView from \"./../views/student/gradebook/GradebookView\";\nimport StudentGradebookUnitsView from \"./../views/student/gradebook/GradebookUnitsView\";\nimport StudentGradebookUnitsTableView from \"./../views/student/gradebook/GradebookUnitsTableView\";\n\n//instructor views (alias)\nimport InstructorDashboardView from \"./../views/instructor/dashboard/DashboardView\";\n\nimport \"./App.css\";\n\nconst App = () => {\n\n const [showAccessibilityTool, setShowAccessibilityTool] = useState(false);\n\n //init Google Analytics\n ReactGA.initialize(Config.environmentConfig(Config.activeProfile).googleAnalyticsTrackingId);\n\n const isLoggedIn = () => {\n const session = SessionService.get();\n if (session) {\n return true;\n }\n return false;\n };\n\n const isAuthorized = () => {\n const _profile = ProfileService.get();\n if (_profile) {\n return _profile.role === \"Student\" ? false : true;\n }\n return false;\n };\n\n const isInstructorOrAdmin = () => {\n const _profile = ProfileService.get();\n if (_profile) {\n return _profile.role !== \"Student\" ? true : false;\n }\n return false;\n }\n\n const isStrudentFromInstructorOrAdmin = () => {\n const userAdmin = LocalStorageService.get(\"userAdmin\");\n if(userAdmin && userAdmin.role && (userAdmin.role==='SuperAdmin' || userAdmin.role==='Instructor')) {\n return true;\n } else {\n return false;\n } \n }\n\n return (\n \n \n
    \n \n\n {\n window.location.href = '/lti-callback.html';\n return null;\n }} />\n\n {\n const query = queryString.parse(props.location.search);\n // const token = queryString.parse(props.location.token);\n const info = { token: query.token};\n \n return !query.token ? (\n \n ) : (\n \n \n );\n }}\n \n >\n {/* {\n const query = queryString.parse(props.location.search);\n const info = { token: query.token};\n return !query.token ? (\n \n ) : (\n \n \n );\n }} \n > */}\n {/* {\n const query = queryString.parse(props.location.search);\n return !query.token ? : ;\n }}\n /> */}\n\n {\n const query = queryString.parse(props.location.search);\n return ;\n }}\n />\n \n {\n // => example: http://localhost:3000/signup?token=9827423&signature=eyJhbGcI6IkpXVCJ9.ey....\n const query = queryString.parse(props.location.search);\n const info = { token: query.token, signature: query.signature, email: query.email };\n return query.signature && query.token ? (\n \n ) : (\n \n );\n }}\n >\n\n {\n // => example: http://localhost:3000/recovery?token=9827423&signature=eyJhbGcI6IkpXVCJ9.ey....\n const query = queryString.parse(props.location.search);\n const info = { token: query.token, signature: query.signature };\n return query.signature && query.token ? (\n \n ) : (\n \n );\n }}\n >\n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n {\n const query = queryString.parse(props.location.search);\n return ;\n }}\n >\n \n {\n if(isLoggedIn()){\n return ;\n }else{\n return ;\n }\n }}\n />\n\n \n {isLoggedIn() ? : }\n \n\n {\n if (!isLoggedIn()) {\n return ;\n }\n let id = props.location.state.plan;\n return ;\n }}\n />\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n let id = props.location.state.plan;\n return ;\n }}\n >\n\n {\n if(isLoggedIn()){\n setShowAccessibilityTool(true);\n return ;\n }else{\n return ;\n }\n }\n }\n />\n\n \n {isLoggedIn() ? : }\n \n\n {\n if (!isLoggedIn()) {\n return ;\n }\n return ;\n }}\n >\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n return ;\n }}\n >\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n return ;\n }}\n >\n {\n if (!isLoggedIn()) {\n return ;\n }\n const query = queryString.parse(props.location.search);\n const course = { id: query.id };\n return ;\n }}\n >\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n if(!isInstructorOrAdmin() && !isStrudentFromInstructorOrAdmin()) setShowAccessibilityTool(true);\n return ;\n }}\n />\n\n {\n const quizId = props.location.pathname.replace(\"/quiz/\", \"\");\n const classId = props.location.state.classId;\n const unit = props.location.state.unit;\n const lecture = props.location.state.lecture;\n const autoplay = props.location.state.autoplay || false;\n const source = props.location.state.source;\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return isLoggedIn() ? (\n \n ) : (\n \n );\n }}\n >\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n let response = props.location.state.examResult;\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return ;\n }}\n >\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n let classId = props.location.state.classId;\n let unitId = props.location.state.unitId;\n let data = props.location.state.data;\n return ;\n }}\n >\n\n {\n let examId = props.location.pathname.replace(\"/exam/\", \"\");\n let classId = props.location.state.classId;\n let unit = props.location.state.unit || null;\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return isLoggedIn() ? (\n \n ) : (\n \n );\n }}\n >\n {\n let workbookId = props.location.pathname.replace(\"/workbook/\",\"\");\n let classId = props.location.state.classId;\n let unitId = props.location.state.unitId;\n let nextWorkbookId = props.location.state.nextWorkbookId;\n let workbooks = props.location.state.workbooks;\n let hasNextWorkbook = false;\n if (nextWorkbookId!==workbookId) {\n hasNextWorkbook = true;\n }\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true)\n return isLoggedIn() ? (\n \n ) : (\n \n );\n }}\n >\n {\n let assignmentId = props.location.pathname.replace(\"/assignment/\",\"\");\n let classId = \"\";\n let unitId = \"\";\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true)\n return isLoggedIn() ? (\n \n ) : (\n \n );\n }}\n >\n\n {\n let classId = props.location.pathname.replace(\"/gradebook/\", \"\");\n const query = queryString.parse(props.location.search);\n const unit = query.unit;\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return isLoggedIn() ? (\n \n ) : (\n \n );\n }}\n >\n\n {\n let classId = props.location.pathname.replace(\"/gradebook/units/\", \"\");\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return isLoggedIn() ? (\n \n ) : (\n \n );\n }}/>\n\n {\n let classId = props.location.pathname.replace(\"/gradebook/units/table/\", \"\");\n const query = queryString.parse(props.location.search);\n const unitId = query.unitId;\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return isLoggedIn() ? (\n \n ) : (\n \n );\n }}\n />\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n let classId = props.location.state.classId || \"\";\n let unitId = props.location.pathname.replace(\"/unit/\", \"\");\n let lectureId = props.location.state.lectureId || \"\";\n let autoplay = props.location.state.autoplay || false;\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return ;\n }}\n />\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n let classId = props.location.pathname.replace(\"/class/\", \"\");\n if(!isInstructorOrAdmin()) setShowAccessibilityTool(true);\n return ;\n }}\n />\n\n {\n if (!isLoggedIn()) {\n return ;\n }\n\n if (!isAuthorized()) {\n return ;\n }\n\n const panel = props.location.pathname.replace(\"/management/\", \"\");\n if (panel==='logout') {\n return ;\n }\n const query = queryString.parse(props.location.search);\n setShowAccessibilityTool(false);\n return ;\n }}\n />\n\n \n \n \n \n
    \n \n
    \n
    \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker === null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from \"react\";\n//import ReactDOM from \"react-dom\";\nimport { createRoot } from 'react-dom/client';\nimport \"./index.css\";\nimport \"./bootstrap-overrides.css\";\nimport App from \"./components/app/App\";\nimport * as serviceWorker from \"./serviceWorker\";\n\nconst container = document.getElementById('root');\nconst root = createRoot(container);\nroot.render();\n//ReactDOM.render(, document.getElementById(\"root\"));\n\nserviceWorker.unregister();\n"],"sourceRoot":""}